diff options
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/irq.c | 49 |
1 files changed, 12 insertions, 37 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c b/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c index 25d643d03..d5d9a6806 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c @@ -1,7 +1,7 @@ /* * Atheros AR71xx SoC specific interrupt handling * - * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> + * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> * * Parts of this file are based on Atheros' 2.6.15 BSP @@ -21,10 +21,8 @@ #include <asm/mach-ar71xx/ar71xx.h> -static void (* ar71xx_ip2_irq_handler)(void) = spurious_interrupt; - #ifdef CONFIG_PCI -static void ar71xx_pci_irq_dispatch(void) +static void ar71xx_pci_irq_handler(unsigned int irq, struct irq_desc *desc) { u32 pending; @@ -32,16 +30,16 @@ static void ar71xx_pci_irq_dispatch(void) ar71xx_reset_rr(AR71XX_RESET_REG_PCI_INT_ENABLE); if (pending & PCI_INT_DEV0) - do_IRQ(AR71XX_PCI_IRQ_DEV0); + generic_handle_irq(AR71XX_PCI_IRQ_DEV0); else if (pending & PCI_INT_DEV1) - do_IRQ(AR71XX_PCI_IRQ_DEV1); + generic_handle_irq(AR71XX_PCI_IRQ_DEV1); else if (pending & PCI_INT_DEV2) - do_IRQ(AR71XX_PCI_IRQ_DEV2); + generic_handle_irq(AR71XX_PCI_IRQ_DEV2); else if (pending & PCI_INT_CORE) - do_IRQ(AR71XX_PCI_IRQ_CORE); + generic_handle_irq(AR71XX_PCI_IRQ_CORE); else spurious_interrupt(); @@ -74,17 +72,10 @@ static struct irq_chip ar71xx_pci_irq_chip = { .mask_ack = ar71xx_pci_irq_mask, }; -static struct irqaction ar71xx_pci_irqaction = { - .handler = no_action, - .name = "cascade [AR71XX PCI]", -}; - static void __init ar71xx_pci_irq_init(void) { int i; - ar71xx_ip2_irq_handler = ar71xx_pci_irq_dispatch; - ar71xx_reset_wr(AR71XX_RESET_REG_PCI_INT_ENABLE, 0); ar71xx_reset_wr(AR71XX_RESET_REG_PCI_INT_STATUS, 0); @@ -95,10 +86,10 @@ static void __init ar71xx_pci_irq_init(void) handle_level_irq); } - setup_irq(AR71XX_CPU_IRQ_IP2, &ar71xx_pci_irqaction); + set_irq_chained_handler(AR71XX_CPU_IRQ_IP2, ar71xx_pci_irq_handler); } -static void ar724x_pci_irq_dispatch(void) +static void ar724x_pci_irq_handler(unsigned int irq, struct irq_desc *desc) { u32 pending; @@ -106,7 +97,7 @@ static void ar724x_pci_irq_dispatch(void) ar724x_pci_rr(AR724X_PCI_REG_INT_MASK); if (pending & AR724X_PCI_INT_DEV0) - do_IRQ(AR71XX_PCI_IRQ_DEV0); + generic_handle_irq(AR71XX_PCI_IRQ_DEV0); else spurious_interrupt(); @@ -151,11 +142,6 @@ static struct irq_chip ar724x_pci_irq_chip = { .mask_ack = ar724x_pci_irq_mask, }; -static struct irqaction ar724x_pci_irqaction = { - .handler = no_action, - .name = "cascade [AR724X PCI]", -}; - static void __init ar724x_pci_irq_init(void) { u32 t; @@ -167,8 +153,6 @@ static void __init ar724x_pci_irq_init(void) return; } - ar71xx_ip2_irq_handler = ar724x_pci_irq_dispatch; - ar724x_pci_wr(AR724X_PCI_REG_INT_MASK, 0); ar724x_pci_wr(AR724X_PCI_REG_INT_STATUS, 0); @@ -179,7 +163,7 @@ static void __init ar724x_pci_irq_init(void) handle_level_irq); } - setup_irq(AR71XX_CPU_IRQ_IP2, &ar724x_pci_irqaction); + set_irq_chained_handler(AR71XX_CPU_IRQ_IP2, ar724x_pci_irq_handler); } #else static inline void ar71xx_pci_irq_init(void) {}; @@ -366,11 +350,6 @@ static void __init ar71xx_misc_irq_init(void) setup_irq(AR71XX_CPU_IRQ_MISC, &ar71xx_misc_irqaction); } -static void ar913x_wmac_irq_dispatch(void) -{ - do_IRQ(AR71XX_CPU_IRQ_IP2); -} - asmlinkage void plat_irq_dispatch(void) { unsigned long pending; @@ -381,7 +360,7 @@ asmlinkage void plat_irq_dispatch(void) do_IRQ(AR71XX_CPU_IRQ_TIMER); else if (pending & STATUSF_IP2) - ar71xx_ip2_irq_handler(); + do_IRQ(AR71XX_CPU_IRQ_IP2); else if (pending & STATUSF_IP4) do_IRQ(AR71XX_CPU_IRQ_GE0); @@ -416,12 +395,8 @@ void __init arch_init_irq(void) case AR71XX_SOC_AR7240: ar724x_pci_irq_init(); break; - case AR71XX_SOC_AR9130: - case AR71XX_SOC_AR9132: - ar71xx_ip2_irq_handler = ar913x_wmac_irq_dispatch; - break; default: - BUG(); + break; } ar71xx_gpio_irq_init(); |