Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
[pandora-kernel.git] / arch / arm / mach-shmobile / intc-sh7372.c
index 739315e..29cdc05 100644 (file)
@@ -606,9 +606,16 @@ static void intcs_demux(unsigned int irq, struct irq_desc *desc)
        generic_handle_irq(intcs_evt2irq(evtcodeas));
 }
 
+static void __iomem *intcs_ffd2;
+static void __iomem *intcs_ffd5;
+
 void __init sh7372_init_irq(void)
 {
-       void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE);
+       void __iomem *intevtsa;
+
+       intcs_ffd2 = ioremap_nocache(0xffd20000, PAGE_SIZE);
+       intevtsa = intcs_ffd2 + 0x100;
+       intcs_ffd5 = ioremap_nocache(0xffd50000, PAGE_SIZE);
 
        register_intc_controller(&intca_desc);
        register_intc_controller(&intcs_desc);
@@ -617,3 +624,46 @@ void __init sh7372_init_irq(void)
        irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa);
        irq_set_chained_handler(evt2irq(0xf80), intcs_demux);
 }
+
+static unsigned short ffd2[0x200];
+static unsigned short ffd5[0x100];
+
+void sh7372_intcs_suspend(void)
+{
+       int k;
+
+       for (k = 0x00; k <= 0x30; k += 4)
+               ffd2[k] = __raw_readw(intcs_ffd2 + k);
+
+       for (k = 0x80; k <= 0xb0; k += 4)
+               ffd2[k] = __raw_readb(intcs_ffd2 + k);
+
+       for (k = 0x180; k <= 0x188; k += 4)
+               ffd2[k] = __raw_readb(intcs_ffd2 + k);
+
+       for (k = 0x00; k <= 0x3c; k += 4)
+               ffd5[k] = __raw_readw(intcs_ffd5 + k);
+
+       for (k = 0x80; k <= 0x9c; k += 4)
+               ffd5[k] = __raw_readb(intcs_ffd5 + k);
+}
+
+void sh7372_intcs_resume(void)
+{
+       int k;
+
+       for (k = 0x00; k <= 0x30; k += 4)
+               __raw_writew(ffd2[k], intcs_ffd2 + k);
+
+       for (k = 0x80; k <= 0xb0; k += 4)
+               __raw_writeb(ffd2[k], intcs_ffd2 + k);
+
+       for (k = 0x180; k <= 0x188; k += 4)
+               __raw_writeb(ffd2[k], intcs_ffd2 + k);
+
+       for (k = 0x00; k <= 0x3c; k += 4)
+               __raw_writew(ffd5[k], intcs_ffd5 + k);
+
+       for (k = 0x80; k <= 0x9c; k += 4)
+               __raw_writeb(ffd5[k], intcs_ffd5 + k);
+}