|
@@ -481,46 +481,14 @@ static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
|
|
|
{
|
|
|
void __iomem *reg = bank->base;
|
|
|
|
|
|
- switch (bank->method) {
|
|
|
-#ifdef CONFIG_ARCH_OMAP15XX
|
|
|
- case METHOD_GPIO_1510:
|
|
|
- reg += OMAP1510_GPIO_INT_STATUS;
|
|
|
- break;
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_ARCH_OMAP16XX
|
|
|
- case METHOD_GPIO_1610:
|
|
|
- reg += OMAP1610_GPIO_IRQSTATUS1;
|
|
|
- break;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
|
|
|
- case METHOD_GPIO_7XX:
|
|
|
- reg += OMAP7XX_GPIO_INT_STATUS;
|
|
|
- break;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
|
|
- case METHOD_GPIO_24XX:
|
|
|
- reg += OMAP24XX_GPIO_IRQSTATUS1;
|
|
|
- break;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP4)
|
|
|
- case METHOD_GPIO_44XX:
|
|
|
- reg += OMAP4_GPIO_IRQSTATUS0;
|
|
|
- break;
|
|
|
-#endif
|
|
|
- default:
|
|
|
- WARN_ON(1);
|
|
|
- return;
|
|
|
- }
|
|
|
+ reg += bank->regs->irqstatus;
|
|
|
__raw_writel(gpio_mask, reg);
|
|
|
|
|
|
/* Workaround for clearing DSP GPIO interrupts to allow retention */
|
|
|
- if (cpu_is_omap24xx() || cpu_is_omap34xx())
|
|
|
- reg = bank->base + OMAP24XX_GPIO_IRQSTATUS2;
|
|
|
- else if (cpu_is_omap44xx())
|
|
|
- reg = bank->base + OMAP4_GPIO_IRQSTATUS1;
|
|
|
-
|
|
|
- if (cpu_is_omap24xx() || cpu_is_omap34xx() || cpu_is_omap44xx())
|
|
|
+ if (bank->regs->irqstatus2) {
|
|
|
+ reg = bank->base + bank->regs->irqstatus2;
|
|
|
__raw_writel(gpio_mask, reg);
|
|
|
+ }
|
|
|
|
|
|
/* Flush posted write for the irq status to avoid spurious interrupts */
|
|
|
__raw_readl(reg);
|
|
@@ -841,31 +809,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
|
|
|
chained_irq_enter(chip, desc);
|
|
|
|
|
|
bank = irq_get_handler_data(irq);
|
|
|
-#ifdef CONFIG_ARCH_OMAP1
|
|
|
- if (bank->method == METHOD_MPUIO)
|
|
|
- isr_reg = bank->base +
|
|
|
- OMAP_MPUIO_GPIO_INT / bank->stride;
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_ARCH_OMAP15XX
|
|
|
- if (bank->method == METHOD_GPIO_1510)
|
|
|
- isr_reg = bank->base + OMAP1510_GPIO_INT_STATUS;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP16XX)
|
|
|
- if (bank->method == METHOD_GPIO_1610)
|
|
|
- isr_reg = bank->base + OMAP1610_GPIO_IRQSTATUS1;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
|
|
|
- if (bank->method == METHOD_GPIO_7XX)
|
|
|
- isr_reg = bank->base + OMAP7XX_GPIO_INT_STATUS;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
|
|
- if (bank->method == METHOD_GPIO_24XX)
|
|
|
- isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
|
|
|
-#endif
|
|
|
-#if defined(CONFIG_ARCH_OMAP4)
|
|
|
- if (bank->method == METHOD_GPIO_44XX)
|
|
|
- isr_reg = bank->base + OMAP4_GPIO_IRQSTATUS0;
|
|
|
-#endif
|
|
|
+ isr_reg = bank->base + bank->regs->irqstatus;
|
|
|
|
|
|
if (WARN_ON(!isr_reg))
|
|
|
goto exit;
|