diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2015-12-04 10:25:04 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-01-05 05:21:04 -0500 |
commit | 72a1ca2cb9f415e01c2e6c1b84f172f188daf8d4 (patch) | |
tree | f95c6f9332db5db607e5411f93c7e4f72c2ea92f /drivers/gpio/gpio-davinci.c | |
parent | 552dd7959c7d2c4f60ea4fc1f06985db76ec2beb (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.c | 15 |
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 | |||
47 | static void __iomem *gpio_base; | 44 | static void __iomem *gpio_base; |
48 | 45 | ||
49 | static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio) | 46 | static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio) |
@@ -82,7 +79,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev); | |||
82 | static inline int __davinci_direction(struct gpio_chip *chip, | 79 | static 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 | */ |
123 | static int davinci_gpio_get(struct gpio_chip *chip, unsigned offset) | 120 | static 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) | |||
134 | static void | 131 | static void |
135 | davinci_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | 132 | davinci_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 = ®s->clr_data; | 262 | chips[i].clr_data = ®s->clr_data; |
266 | chips[i].in_data = ®s->in_data; | 263 | chips[i].in_data = ®s->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 | ||
369 | static int gpio_to_irq_banked(struct gpio_chip *chip, unsigned offset) | 366 | static 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 | ||
379 | static int gpio_to_irq_unbanked(struct gpio_chip *chip, unsigned offset) | 376 | static 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 |