aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-davinci.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-12-04 10:25:04 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-01-05 05:21:04 -0500
commit72a1ca2cb9f415e01c2e6c1b84f172f188daf8d4 (patch)
treef95c6f9332db5db607e5411f93c7e4f72c2ea92f /drivers/gpio/gpio-davinci.c
parent552dd7959c7d2c4f60ea4fc1f06985db76ec2beb (diff)
gpio: davinci: 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: Grygorii Strashko <grygorii.strashko@ti.com> Cc: Sekhar Nori <nsekhar@ti.com> Cc: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-davinci.c')
-rw-r--r--drivers/gpio/gpio-davinci.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 1e3a617e0c10..ec58f4288649 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -41,9 +41,6 @@ typedef struct irq_chip *(*gpio_get_irq_chip_cb_t)(unsigned int irq);
41 41
42#define BINTEN 0x8 /* GPIO Interrupt Per-Bank Enable Register */ 42#define BINTEN 0x8 /* GPIO Interrupt Per-Bank Enable Register */
43 43
44#define chip2controller(chip) \
45 container_of(chip, struct davinci_gpio_controller, chip)
46
47static void __iomem *gpio_base; 44static void __iomem *gpio_base;
48 45
49static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio) 46static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio)
@@ -82,7 +79,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev);
82static inline int __davinci_direction(struct gpio_chip *chip, 79static inline int __davinci_direction(struct gpio_chip *chip,
83 unsigned offset, bool out, int value) 80 unsigned offset, bool out, int value)
84{ 81{
85 struct davinci_gpio_controller *d = chip2controller(chip); 82 struct davinci_gpio_controller *d = gpiochip_get_data(chip);
86 struct davinci_gpio_regs __iomem *g = d->regs; 83 struct davinci_gpio_regs __iomem *g = d->regs;
87 unsigned long flags; 84 unsigned long flags;
88 u32 temp; 85 u32 temp;
@@ -122,7 +119,7 @@ davinci_direction_out(struct gpio_chip *chip, unsigned offset, int value)
122 */ 119 */
123static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset) 120static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset)
124{ 121{
125 struct davinci_gpio_controller *d = chip2controller(chip); 122 struct davinci_gpio_controller *d = gpiochip_get_data(chip);
126 struct davinci_gpio_regs __iomem *g = d->regs; 123 struct davinci_gpio_regs __iomem *g = d->regs;
127 124
128 return !!((1 << offset) & readl_relaxed(&g->in_data)); 125 return !!((1 << offset) & readl_relaxed(&g->in_data));
@@ -134,7 +131,7 @@ static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset)
134static void 131static void
135davinci_gpio_set(struct gpio_chip *chip, unsigned offset, int value) 132davinci_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
136{ 133{
137 struct davinci_gpio_controller *d = chip2controller(chip); 134 struct davinci_gpio_controller *d = gpiochip_get_data(chip);
138 struct davinci_gpio_regs __iomem *g = d->regs; 135 struct davinci_gpio_regs __iomem *g = d->regs;
139 136
140 writel_relaxed((1 << offset), value ? &g->set_data : &g->clr_data); 137 writel_relaxed((1 << offset), value ? &g->set_data : &g->clr_data);
@@ -265,7 +262,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
265 chips[i].clr_data = &regs->clr_data; 262 chips[i].clr_data = &regs->clr_data;
266 chips[i].in_data = &regs->in_data; 263 chips[i].in_data = &regs->in_data;
267 264
268 gpiochip_add(&chips[i].chip); 265 gpiochip_add_data(&chips[i].chip, &chips[i]);
269 } 266 }
270 267
271 platform_set_drvdata(pdev, chips); 268 platform_set_drvdata(pdev, chips);
@@ -368,7 +365,7 @@ static void gpio_irq_handler(struct irq_desc *desc)
368 365
369static int gpio_to_irq_banked(struct gpio_chip *chip, unsigned offset) 366static int gpio_to_irq_banked(struct gpio_chip *chip, unsigned offset)
370{ 367{
371 struct davinci_gpio_controller *d = chip2controller(chip); 368 struct davinci_gpio_controller *d = gpiochip_get_data(chip);
372 369
373 if (d->irq_domain) 370 if (d->irq_domain)
374 return irq_create_mapping(d->irq_domain, d->chip.base + offset); 371 return irq_create_mapping(d->irq_domain, d->chip.base + offset);
@@ -378,7 +375,7 @@ static int gpio_to_irq_banked(struct gpio_chip *chip, unsigned offset)
378 375
379static int gpio_to_irq_unbanked(struct gpio_chip *chip, unsigned offset) 376static int gpio_to_irq_unbanked(struct gpio_chip *chip, unsigned offset)
380{ 377{
381 struct davinci_gpio_controller *d = chip2controller(chip); 378 struct davinci_gpio_controller *d = gpiochip_get_data(chip);
382 379
383 /* 380 /*
384 * NOTE: we assume for now that only irqs in the first gpio_chip 381 * NOTE: we assume for now that only irqs in the first gpio_chip