Merge branch 'agp-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[pandora-kernel.git] / arch / arm / plat-mxc / gpio.c
index 7506d96..cfc4a8b 100644 (file)
 static struct mxc_gpio_port *mxc_gpio_ports;
 static int gpio_table_size;
 
+#define cpu_is_mx1_mx2()       (cpu_is_mx1() || cpu_is_mx2())
+
+#define GPIO_DR                (cpu_is_mx1_mx2() ? 0x1c : 0x00)
+#define GPIO_GDIR      (cpu_is_mx1_mx2() ? 0x00 : 0x04)
+#define GPIO_PSR       (cpu_is_mx1_mx2() ? 0x24 : 0x08)
+#define GPIO_ICR1      (cpu_is_mx1_mx2() ? 0x28 : 0x0C)
+#define GPIO_ICR2      (cpu_is_mx1_mx2() ? 0x2C : 0x10)
+#define GPIO_IMR       (cpu_is_mx1_mx2() ? 0x30 : 0x14)
+#define GPIO_ISR       (cpu_is_mx1_mx2() ? 0x34 : 0x18)
+#define GPIO_ISR       (cpu_is_mx1_mx2() ? 0x34 : 0x18)
+
+#define GPIO_INT_LOW_LEV       (cpu_is_mx1_mx2() ? 0x3 : 0x0)
+#define GPIO_INT_HIGH_LEV      (cpu_is_mx1_mx2() ? 0x2 : 0x1)
+#define GPIO_INT_RISE_EDGE     (cpu_is_mx1_mx2() ? 0x0 : 0x2)
+#define GPIO_INT_FALL_EDGE     (cpu_is_mx1_mx2() ? 0x1 : 0x3)
+#define GPIO_INT_NONE          0x4
+
 /* Note: This driver assumes 32 GPIOs are handled in one register */
 
 static void _clear_gpio_irqstatus(struct mxc_gpio_port *port, u32 index)
@@ -162,7 +179,6 @@ static void mxc_gpio_irq_handler(struct mxc_gpio_port *port, u32 irq_stat)
        }
 }
 
-#if defined(CONFIG_ARCH_MX3) || defined(CONFIG_ARCH_MX1)
 /* MX1 and MX3 has one interrupt *per* gpio port */
 static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc)
 {
@@ -174,9 +190,7 @@ static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc)
 
        mxc_gpio_irq_handler(port, irq_stat);
 }
-#endif
 
-#ifdef CONFIG_ARCH_MX2
 /* MX2 has one interrupt *for all* gpio ports */
 static void mx2_gpio_irq_handler(u32 irq, struct irq_desc *desc)
 {
@@ -195,7 +209,6 @@ static void mx2_gpio_irq_handler(u32 irq, struct irq_desc *desc)
                        mxc_gpio_irq_handler(&port[i], irq_stat);
        }
 }
-#endif
 
 static struct irq_chip gpio_irq_chip = {
        .ack = gpio_ack_irq,
@@ -284,17 +297,18 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt)
                /* its a serious configuration bug when it fails */
                BUG_ON( gpiochip_add(&port[i].chip) < 0 );
 
-#if defined(CONFIG_ARCH_MX3) || defined(CONFIG_ARCH_MX1)
-               /* setup one handler for each entry */
-               set_irq_chained_handler(port[i].irq, mx3_gpio_irq_handler);
-               set_irq_data(port[i].irq, &port[i]);
-#endif
+               if (cpu_is_mx1() || cpu_is_mx3() || cpu_is_mx25()) {
+                       /* setup one handler for each entry */
+                       set_irq_chained_handler(port[i].irq, mx3_gpio_irq_handler);
+                       set_irq_data(port[i].irq, &port[i]);
+               }
+       }
+
+       if (cpu_is_mx2()) {
+               /* setup one handler for all GPIO interrupts */
+               set_irq_chained_handler(port[0].irq, mx2_gpio_irq_handler);
+               set_irq_data(port[0].irq, port);
        }
 
-#ifdef CONFIG_ARCH_MX2
-       /* setup one handler for all GPIO interrupts */
-       set_irq_chained_handler(port[0].irq, mx2_gpio_irq_handler);
-       set_irq_data(port[0].irq, port);
-#endif
        return 0;
 }