diff -Nur linux-2.6.17/arch/mips/aruba/irq.c linux-2.6.17-openwrt/arch/mips/aruba/irq.c
--- linux-2.6.17/arch/mips/aruba/irq.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.17-openwrt/arch/mips/aruba/irq.c 2006-10-12 14:32:40.026285000 -0700
-@@ -0,0 +1,282 @@
+@@ -0,0 +1,285 @@
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/kernel_stat.h>
+ int ip = irq - GROUP0_IRQ_BASE;
+ switch (mips_machtype) {
+ case MACH_ARUBA_AP70:
++ if (irq >= GROUP4_IRQ_BASE)
++ idt_gpio->gpioistat &= ~(1 << (irq - GROUP4_IRQ_BASE));
++
+ // irqs are in groups of 32
+ // ip is set to the remainder
+ group = ip >> 5;
+ irq_desc[i].status = IRQ_DISABLED;
+ irq_desc[i].action = NULL;
+ irq_desc[i].depth = 1;
-+ irq_desc[i].handler = &aruba_irq_type;
++ irq_desc[i].chip = &aruba_irq_type;
+ spin_lock_init(&irq_desc[i].lock);
+ }
+}
+ pend = READ_PEND_MUSCAT(addr);
+ pend &= ~READ_MASK_MUSCAT(addr); // only unmasked interrupts
+ pend = 39 - rc32434_clz(pend);
-+ do_IRQ(pend + (group << 5), regs);
++ do_IRQ(pend + (group << 5));
+ }
+ break;
+ case MACH_ARUBA_AP65:
+ pend = READ_PEND_MERLOT(addr);
+ pend &= READ_MASK_MERLOT(addr); // only unmasked interrupts
+ pend = 31 - rc32434_clz(pend);
-+ do_IRQ(pend + GROUP0_IRQ_BASE, regs);
++ do_IRQ(pend + GROUP0_IRQ_BASE);
+ }
+ if ((ip = (cp0_cause & 0x3c00))) { // irq 2-5
+ pend = 31 - rc32434_clz(ip);
-+ do_IRQ(pend - GROUP0_IRQ_BASE, regs);
++ do_IRQ(pend - GROUP0_IRQ_BASE);
+ }
+ break;
+ }