Merge master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw
[pandora-kernel.git] / arch / mips / tx4938 / toshiba_rbtx4938 / irq.c
index 9cd9c0f..b6f363d 100644 (file)
@@ -81,31 +81,22 @@ IRQ  Device
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/processor.h>
-#include <asm/ptrace.h>
 #include <asm/reboot.h>
 #include <asm/time.h>
+#include <asm/wbflush.h>
 #include <linux/bootmem.h>
 #include <asm/tx4938/rbtx4938.h>
 
-static unsigned int toshiba_rbtx4938_irq_ioc_startup(unsigned int irq);
-static void toshiba_rbtx4938_irq_ioc_shutdown(unsigned int irq);
 static void toshiba_rbtx4938_irq_ioc_enable(unsigned int irq);
 static void toshiba_rbtx4938_irq_ioc_disable(unsigned int irq);
-static void toshiba_rbtx4938_irq_ioc_mask_and_ack(unsigned int irq);
-static void toshiba_rbtx4938_irq_ioc_end(unsigned int irq);
-
-DEFINE_SPINLOCK(toshiba_rbtx4938_ioc_lock);
 
 #define TOSHIBA_RBTX4938_IOC_NAME "RBTX4938-IOC"
-static struct hw_interrupt_type toshiba_rbtx4938_irq_ioc_type = {
+static struct irq_chip toshiba_rbtx4938_irq_ioc_type = {
        .typename = TOSHIBA_RBTX4938_IOC_NAME,
-       .startup = toshiba_rbtx4938_irq_ioc_startup,
-       .shutdown = toshiba_rbtx4938_irq_ioc_shutdown,
-       .enable = toshiba_rbtx4938_irq_ioc_enable,
-       .disable = toshiba_rbtx4938_irq_ioc_disable,
-       .ack = toshiba_rbtx4938_irq_ioc_mask_and_ack,
-       .end = toshiba_rbtx4938_irq_ioc_end,
-       .set_affinity = NULL
+       .ack = toshiba_rbtx4938_irq_ioc_disable,
+       .mask = toshiba_rbtx4938_irq_ioc_disable,
+       .mask_ack = toshiba_rbtx4938_irq_ioc_disable,
+       .unmask = toshiba_rbtx4938_irq_ioc_enable,
 };
 
 #define TOSHIBA_RBTX4938_IOC_INTR_ENAB 0xb7f02000
@@ -142,77 +133,36 @@ toshiba_rbtx4938_irq_ioc_init(void)
        int i;
 
        for (i = TOSHIBA_RBTX4938_IRQ_IOC_BEG;
-            i <= TOSHIBA_RBTX4938_IRQ_IOC_END; i++) {
-               irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].action = 0;
-               irq_desc[i].depth = 3;
-               irq_desc[i].handler = &toshiba_rbtx4938_irq_ioc_type;
-       }
+            i <= TOSHIBA_RBTX4938_IRQ_IOC_END; i++)
+               set_irq_chip_and_handler(i, &toshiba_rbtx4938_irq_ioc_type,
+                                        handle_level_irq);
 
        setup_irq(RBTX4938_IRQ_IOCINT,
                  &toshiba_rbtx4938_irq_ioc_action);
 }
 
-static unsigned int
-toshiba_rbtx4938_irq_ioc_startup(unsigned int irq)
-{
-       toshiba_rbtx4938_irq_ioc_enable(irq);
-
-       return 0;
-}
-
-static void
-toshiba_rbtx4938_irq_ioc_shutdown(unsigned int irq)
-{
-       toshiba_rbtx4938_irq_ioc_disable(irq);
-}
-
 static void
 toshiba_rbtx4938_irq_ioc_enable(unsigned int irq)
 {
-       unsigned long flags;
        volatile unsigned char v;
 
-       spin_lock_irqsave(&toshiba_rbtx4938_ioc_lock, flags);
-
        v = TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);
        v |= (1 << (irq - TOSHIBA_RBTX4938_IRQ_IOC_BEG));
        TX4938_WR08(TOSHIBA_RBTX4938_IOC_INTR_ENAB, v);
        mmiowb();
        TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);
-
-       spin_unlock_irqrestore(&toshiba_rbtx4938_ioc_lock, flags);
 }
 
 static void
 toshiba_rbtx4938_irq_ioc_disable(unsigned int irq)
 {
-       unsigned long flags;
        volatile unsigned char v;
 
-       spin_lock_irqsave(&toshiba_rbtx4938_ioc_lock, flags);
-
        v = TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);
        v &= ~(1 << (irq - TOSHIBA_RBTX4938_IRQ_IOC_BEG));
        TX4938_WR08(TOSHIBA_RBTX4938_IOC_INTR_ENAB, v);
        mmiowb();
        TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);
-
-       spin_unlock_irqrestore(&toshiba_rbtx4938_ioc_lock, flags);
-}
-
-static void
-toshiba_rbtx4938_irq_ioc_mask_and_ack(unsigned int irq)
-{
-       toshiba_rbtx4938_irq_ioc_disable(irq);
-}
-
-static void
-toshiba_rbtx4938_irq_ioc_end(unsigned int irq)
-{
-       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
-               toshiba_rbtx4938_irq_ioc_enable(irq);
-       }
 }
 
 extern void __init txx9_spi_irqinit(int irc_irq);