aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-xlp.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-12-07 09:22:31 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-01-05 05:21:19 -0500
commite730a5953af4c54a50fb7712af4dd9468dedcd22 (patch)
treedd994fb89002c0548dacf6f844c8834da700657b /drivers/gpio/gpio-xlp.c
parent097d88e94c44112327011f572c7fff82a44c1d54 (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.c23
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
103static 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
108static int xlp_gpio_get_reg(void __iomem *addr, unsigned gpio) 103static 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)
133static void xlp_gpio_irq_disable(struct irq_data *d) 128static 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)
145static void xlp_gpio_irq_mask_ack(struct irq_data *d) 140static 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)
158static void xlp_gpio_irq_unmask(struct irq_data *d) 153static 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)
170static int xlp_gpio_set_irq_type(struct irq_data *d, unsigned int type) 165static 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
236static int xlp_gpio_dir_output(struct gpio_chip *gc, unsigned gpio, int state) 231static 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
246static int xlp_gpio_dir_input(struct gpio_chip *gc, unsigned gpio) 241static 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
256static int xlp_gpio_get(struct gpio_chip *gc, unsigned gpio) 251static 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
264static void xlp_gpio_set(struct gpio_chip *gc, unsigned gpio, int state) 259static 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