1 --- a/arch/mips/ath79/irq.c
2 +++ b/arch/mips/ath79/irq.c
5 static void (*ath79_ip2_handler)(void);
6 static void (*ath79_ip3_handler)(void);
7 +static struct irq_chip ip2_chip;
8 +static struct irq_chip ip3_chip;
10 static void ath79_misc_irq_handler(unsigned int irq, struct irq_desc *desc)
12 @@ -149,8 +151,7 @@ static void ar934x_ip2_irq_init(void)
14 for (i = ATH79_IP2_IRQ_BASE;
15 i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
16 - irq_set_chip_and_handler(i, &dummy_irq_chip,
18 + irq_set_chip_and_handler(i, &ip2_chip, handle_level_irq);
20 irq_set_chained_handler(ATH79_CPU_IRQ(2), ar934x_ip2_irq_dispatch);
22 @@ -182,7 +183,7 @@ static void qca953x_irq_init(void)
24 for (i = ATH79_IP2_IRQ_BASE;
25 i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
26 - irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
27 + irq_set_chip_and_handler(i, &ip2_chip, handle_level_irq);
29 irq_set_chained_handler(ATH79_CPU_IRQ(2), qca953x_ip2_irq_dispatch);
31 @@ -256,15 +257,13 @@ static void qca955x_irq_init(void)
33 for (i = ATH79_IP2_IRQ_BASE;
34 i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
35 - irq_set_chip_and_handler(i, &dummy_irq_chip,
37 + irq_set_chip_and_handler(i, &ip2_chip, handle_level_irq);
39 irq_set_chained_handler(ATH79_CPU_IRQ(2), qca955x_ip2_irq_dispatch);
41 for (i = ATH79_IP3_IRQ_BASE;
42 i < ATH79_IP3_IRQ_BASE + ATH79_IP3_IRQ_COUNT; i++)
43 - irq_set_chip_and_handler(i, &dummy_irq_chip,
45 + irq_set_chip_and_handler(i, &ip3_chip, handle_level_irq);
47 irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
49 @@ -345,13 +344,13 @@ static void qca956x_irq_init(void)
51 for (i = ATH79_IP2_IRQ_BASE;
52 i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
53 - irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
54 + irq_set_chip_and_handler(i, &ip2_chip, handle_level_irq);
56 irq_set_chained_handler(ATH79_CPU_IRQ(2), qca956x_ip2_irq_dispatch);
58 for (i = ATH79_IP3_IRQ_BASE;
59 i < ATH79_IP3_IRQ_BASE + ATH79_IP3_IRQ_COUNT; i++)
60 - irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
61 + irq_set_chip_and_handler(i, &ip3_chip, handle_level_irq);
63 irq_set_chained_handler(ATH79_CPU_IRQ(3), qca956x_ip3_irq_dispatch);
65 @@ -466,8 +465,35 @@ static void qca953x_ip3_handler(void)
66 do_IRQ(ATH79_CPU_IRQ(3));
69 +static void ath79_ip2_disable(struct irq_data *data)
71 + disable_irq(ATH79_CPU_IRQ(2));
74 +static void ath79_ip2_enable(struct irq_data *data)
76 + enable_irq(ATH79_CPU_IRQ(2));
79 +static void ath79_ip3_disable(struct irq_data *data)
81 + disable_irq(ATH79_CPU_IRQ(3));
84 +static void ath79_ip3_enable(struct irq_data *data)
86 + enable_irq(ATH79_CPU_IRQ(3));
89 void __init arch_init_irq(void)
91 + ip2_chip = dummy_irq_chip;
92 + ip3_chip = dummy_irq_chip;
93 + ip2_chip.irq_disable = ath79_ip2_disable;
94 + ip2_chip.irq_enable = ath79_ip2_enable;
95 + ip3_chip.irq_disable = ath79_ip3_disable;
96 + ip3_chip.irq_enable = ath79_ip3_enable;
98 if (soc_is_ar71xx()) {
99 ath79_ip2_handler = ar71xx_ip2_handler;
100 ath79_ip3_handler = ar71xx_ip3_handler;