diff options
Diffstat (limited to 'drivers/gpio/gpio-davinci.c')
-rw-r--r-- | drivers/gpio/gpio-davinci.c | 19 |
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 | ||
68 | static inline struct davinci_gpio_regs __iomem *irq2regs(int irq) | 68 | static 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 | ||
288 | static void gpio_irq_disable(struct irq_data *d) | 288 | static 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 | ||
297 | static void gpio_irq_enable(struct irq_data *d) | 297 | static 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 | ||
329 | static void | 329 | static void |
330 | gpio_irq_handler(unsigned irq, struct irq_desc *desc) | 330 | gpio_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 | } |