diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2015-12-07 09:22:31 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-01-05 05:21:19 -0500 |
commit | e730a5953af4c54a50fb7712af4dd9468dedcd22 (patch) | |
tree | dd994fb89002c0548dacf6f844c8834da700657b /drivers/gpio/gpio-xlp.c | |
parent | 097d88e94c44112327011f572c7fff82a44c1d54 (diff) |
gpio: xlp: use gpiochip data pointer
This makes the driver use the data pointer added to the gpio_chip
to store a pointer to the state container instead of relying on
container_of().
Cc: Kamlakant Patel <kamlakant.patel@broadcom.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-xlp.c')
-rw-r--r-- | drivers/gpio/gpio-xlp.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/gpio/gpio-xlp.c b/drivers/gpio/gpio-xlp.c index 3f31aac2ba3c..aa5813d2deb1 100644 --- a/drivers/gpio/gpio-xlp.c +++ b/drivers/gpio/gpio-xlp.c | |||
@@ -100,11 +100,6 @@ struct xlp_gpio_priv { | |||
100 | spinlock_t lock; | 100 | spinlock_t lock; |
101 | }; | 101 | }; |
102 | 102 | ||
103 | static struct xlp_gpio_priv *gpio_chip_to_xlp_priv(struct gpio_chip *gc) | ||
104 | { | ||
105 | return container_of(gc, struct xlp_gpio_priv, chip); | ||
106 | } | ||
107 | |||
108 | static int xlp_gpio_get_reg(void __iomem *addr, unsigned gpio) | 103 | static int xlp_gpio_get_reg(void __iomem *addr, unsigned gpio) |
109 | { | 104 | { |
110 | u32 pos, regset; | 105 | u32 pos, regset; |
@@ -133,7 +128,7 @@ static void xlp_gpio_set_reg(void __iomem *addr, unsigned gpio, int state) | |||
133 | static void xlp_gpio_irq_disable(struct irq_data *d) | 128 | static void xlp_gpio_irq_disable(struct irq_data *d) |
134 | { | 129 | { |
135 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); | 130 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); |
136 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 131 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
137 | unsigned long flags; | 132 | unsigned long flags; |
138 | 133 | ||
139 | spin_lock_irqsave(&priv->lock, flags); | 134 | spin_lock_irqsave(&priv->lock, flags); |
@@ -145,7 +140,7 @@ static void xlp_gpio_irq_disable(struct irq_data *d) | |||
145 | static void xlp_gpio_irq_mask_ack(struct irq_data *d) | 140 | static void xlp_gpio_irq_mask_ack(struct irq_data *d) |
146 | { | 141 | { |
147 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); | 142 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); |
148 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 143 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
149 | unsigned long flags; | 144 | unsigned long flags; |
150 | 145 | ||
151 | spin_lock_irqsave(&priv->lock, flags); | 146 | spin_lock_irqsave(&priv->lock, flags); |
@@ -158,7 +153,7 @@ static void xlp_gpio_irq_mask_ack(struct irq_data *d) | |||
158 | static void xlp_gpio_irq_unmask(struct irq_data *d) | 153 | static void xlp_gpio_irq_unmask(struct irq_data *d) |
159 | { | 154 | { |
160 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); | 155 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); |
161 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 156 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
162 | unsigned long flags; | 157 | unsigned long flags; |
163 | 158 | ||
164 | spin_lock_irqsave(&priv->lock, flags); | 159 | spin_lock_irqsave(&priv->lock, flags); |
@@ -170,7 +165,7 @@ static void xlp_gpio_irq_unmask(struct irq_data *d) | |||
170 | static int xlp_gpio_set_irq_type(struct irq_data *d, unsigned int type) | 165 | static int xlp_gpio_set_irq_type(struct irq_data *d, unsigned int type) |
171 | { | 166 | { |
172 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); | 167 | struct gpio_chip *gc = irq_data_get_irq_chip_data(d); |
173 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 168 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
174 | int pol, irq_type; | 169 | int pol, irq_type; |
175 | 170 | ||
176 | switch (type) { | 171 | switch (type) { |
@@ -235,7 +230,7 @@ static void xlp_gpio_generic_handler(struct irq_desc *desc) | |||
235 | 230 | ||
236 | static int xlp_gpio_dir_output(struct gpio_chip *gc, unsigned gpio, int state) | 231 | static int xlp_gpio_dir_output(struct gpio_chip *gc, unsigned gpio, int state) |
237 | { | 232 | { |
238 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 233 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
239 | 234 | ||
240 | BUG_ON(gpio >= gc->ngpio); | 235 | BUG_ON(gpio >= gc->ngpio); |
241 | xlp_gpio_set_reg(priv->gpio_out_en, gpio, 0x1); | 236 | xlp_gpio_set_reg(priv->gpio_out_en, gpio, 0x1); |
@@ -245,7 +240,7 @@ static int xlp_gpio_dir_output(struct gpio_chip *gc, unsigned gpio, int state) | |||
245 | 240 | ||
246 | static int xlp_gpio_dir_input(struct gpio_chip *gc, unsigned gpio) | 241 | static int xlp_gpio_dir_input(struct gpio_chip *gc, unsigned gpio) |
247 | { | 242 | { |
248 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 243 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
249 | 244 | ||
250 | BUG_ON(gpio >= gc->ngpio); | 245 | BUG_ON(gpio >= gc->ngpio); |
251 | xlp_gpio_set_reg(priv->gpio_out_en, gpio, 0x0); | 246 | xlp_gpio_set_reg(priv->gpio_out_en, gpio, 0x0); |
@@ -255,7 +250,7 @@ static int xlp_gpio_dir_input(struct gpio_chip *gc, unsigned gpio) | |||
255 | 250 | ||
256 | static int xlp_gpio_get(struct gpio_chip *gc, unsigned gpio) | 251 | static int xlp_gpio_get(struct gpio_chip *gc, unsigned gpio) |
257 | { | 252 | { |
258 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 253 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
259 | 254 | ||
260 | BUG_ON(gpio >= gc->ngpio); | 255 | BUG_ON(gpio >= gc->ngpio); |
261 | return xlp_gpio_get_reg(priv->gpio_paddrv, gpio); | 256 | return xlp_gpio_get_reg(priv->gpio_paddrv, gpio); |
@@ -263,7 +258,7 @@ static int xlp_gpio_get(struct gpio_chip *gc, unsigned gpio) | |||
263 | 258 | ||
264 | static void xlp_gpio_set(struct gpio_chip *gc, unsigned gpio, int state) | 259 | static void xlp_gpio_set(struct gpio_chip *gc, unsigned gpio, int state) |
265 | { | 260 | { |
266 | struct xlp_gpio_priv *priv = gpio_chip_to_xlp_priv(gc); | 261 | struct xlp_gpio_priv *priv = gpiochip_get_data(gc); |
267 | 262 | ||
268 | BUG_ON(gpio >= gc->ngpio); | 263 | BUG_ON(gpio >= gc->ngpio); |
269 | xlp_gpio_set_reg(priv->gpio_paddrv, gpio, state); | 264 | xlp_gpio_set_reg(priv->gpio_paddrv, gpio, state); |
@@ -388,7 +383,7 @@ static int xlp_gpio_probe(struct platform_device *pdev) | |||
388 | return -ENODEV; | 383 | return -ENODEV; |
389 | } | 384 | } |
390 | 385 | ||
391 | err = gpiochip_add(gc); | 386 | err = gpiochip_add_data(gc, priv); |
392 | if (err < 0) | 387 | if (err < 0) |
393 | goto out_free_desc; | 388 | goto out_free_desc; |
394 | 389 | ||