aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-davinci.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-07-17 08:45:31 -0400
committerLinus Walleij <linus.walleij@linaro.org>2015-07-17 08:45:31 -0400
commitbcae888039d5f0b522e1588c54f95a7612d1723c (patch)
treed8039698a3b74223dc94798046049e9bfcf23fe7 /drivers/gpio/gpio-davinci.c
parent3685bbce2ea6142e81c78e6f3d5b2a1cdc37660e (diff)
parentbdac2b6dc7392668a8530d67a5f762366f57f9b4 (diff)
Merge branch 'queue/irq/gpio' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into devel
Diffstat (limited to 'drivers/gpio/gpio-davinci.c')
-rw-r--r--drivers/gpio/gpio-davinci.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 86cfe1892cae..7be269402baf 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -65,11 +65,11 @@ static struct davinci_gpio_regs __iomem *gpio2regs(unsigned gpio)
65 return ptr; 65 return ptr;
66} 66}
67 67
68static inline struct davinci_gpio_regs __iomem *irq2regs(int irq) 68static inline struct davinci_gpio_regs __iomem *irq2regs(struct irq_data *d)
69{ 69{
70 struct davinci_gpio_regs __iomem *g; 70 struct davinci_gpio_regs __iomem *g;
71 71
72 g = (__force struct davinci_gpio_regs __iomem *)irq_get_chip_data(irq); 72 g = (__force struct davinci_gpio_regs __iomem *)irq_data_get_irq_chip_data(d);
73 73
74 return g; 74 return g;
75} 75}
@@ -287,7 +287,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
287 287
288static void gpio_irq_disable(struct irq_data *d) 288static void gpio_irq_disable(struct irq_data *d)
289{ 289{
290 struct davinci_gpio_regs __iomem *g = irq2regs(d->irq); 290 struct davinci_gpio_regs __iomem *g = irq2regs(d);
291 u32 mask = (u32) irq_data_get_irq_handler_data(d); 291 u32 mask = (u32) irq_data_get_irq_handler_data(d);
292 292
293 writel_relaxed(mask, &g->clr_falling); 293 writel_relaxed(mask, &g->clr_falling);
@@ -296,7 +296,7 @@ static void gpio_irq_disable(struct irq_data *d)
296 296
297static void gpio_irq_enable(struct irq_data *d) 297static void gpio_irq_enable(struct irq_data *d)
298{ 298{
299 struct davinci_gpio_regs __iomem *g = irq2regs(d->irq); 299 struct davinci_gpio_regs __iomem *g = irq2regs(d);
300 u32 mask = (u32) irq_data_get_irq_handler_data(d); 300 u32 mask = (u32) irq_data_get_irq_handler_data(d);
301 unsigned status = irqd_get_trigger_type(d); 301 unsigned status = irqd_get_trigger_type(d);
302 302
@@ -327,8 +327,9 @@ static struct irq_chip gpio_irqchip = {
327}; 327};
328 328
329static void 329static void
330gpio_irq_handler(unsigned irq, struct irq_desc *desc) 330gpio_irq_handler(unsigned __irq, struct irq_desc *desc)
331{ 331{
332 unsigned int irq = irq_desc_get_irq(desc);
332 struct davinci_gpio_regs __iomem *g; 333 struct davinci_gpio_regs __iomem *g;
333 u32 mask = 0xffff; 334 u32 mask = 0xffff;
334 struct davinci_gpio_controller *d; 335 struct davinci_gpio_controller *d;
@@ -396,7 +397,7 @@ static int gpio_irq_type_unbanked(struct irq_data *data, unsigned trigger)
396 struct davinci_gpio_regs __iomem *g; 397 struct davinci_gpio_regs __iomem *g;
397 u32 mask; 398 u32 mask;
398 399
399 d = (struct davinci_gpio_controller *)data->handler_data; 400 d = (struct davinci_gpio_controller *)irq_data_get_irq_handler_data(data);
400 g = (struct davinci_gpio_regs __iomem *)d->regs; 401 g = (struct davinci_gpio_regs __iomem *)d->regs;
401 mask = __gpio_mask(data->irq - d->gpio_irq); 402 mask = __gpio_mask(data->irq - d->gpio_irq);
402 403
@@ -578,15 +579,13 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
578 writel_relaxed(~0, &g->clr_falling); 579 writel_relaxed(~0, &g->clr_falling);
579 writel_relaxed(~0, &g->clr_rising); 580 writel_relaxed(~0, &g->clr_rising);
580 581
581 /* set up all irqs in this bank */
582 irq_set_chained_handler(bank_irq, gpio_irq_handler);
583
584 /* 582 /*
585 * Each chip handles 32 gpios, and each irq bank consists of 16 583 * Each chip handles 32 gpios, and each irq bank consists of 16
586 * gpio irqs. Pass the irq bank's corresponding controller to 584 * gpio irqs. Pass the irq bank's corresponding controller to
587 * the chained irq handler. 585 * the chained irq handler.
588 */ 586 */
589 irq_set_handler_data(bank_irq, &chips[gpio / 32]); 587 irq_set_chained_handler_and_data(bank_irq, gpio_irq_handler,
588 &chips[gpio / 32]);
590 589
591 binten |= BIT(bank); 590 binten |= BIT(bank);
592 } 591 }