[ARM] pxa: make GPIO IRQ code less dependent on the internal IRQs
authoreric miao <eric.miao@marvell.com>
Tue, 4 Mar 2008 03:12:14 +0000 (11:12 +0800)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 19 Apr 2008 10:29:03 +0000 (11:29 +0100)
by:

1. introduce dedicated pxa_{mask,unmask}_low_gpio()

2. remove set_irq_chip(IRQ_GPIO_2_x, ...) which has already been
   initialized in pxa_init_irq()

3. introduce dedicated pxa_init_gpio_set_wake()

Signed-off-by: eric miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/irq.c

index 381fde6..ce150bf 100644 (file)
@@ -166,11 +166,21 @@ static void pxa_ack_low_gpio(unsigned int irq)
        GEDR0 = (1 << (irq - IRQ_GPIO0));
 }
 
+static void pxa_mask_low_gpio(unsigned int irq)
+{
+       ICMR &= ~(1 << (irq - PXA_IRQ(0)));
+}
+
+static void pxa_unmask_low_gpio(unsigned int irq)
+{
+       ICMR |= 1 << (irq - PXA_IRQ(0));
+}
+
 static struct irq_chip pxa_low_gpio_chip = {
        .name           = "GPIO-l",
        .ack            = pxa_ack_low_gpio,
-       .mask           = pxa_mask_low_irq,
-       .unmask         = pxa_unmask_low_irq,
+       .mask           = pxa_mask_low_gpio,
+       .unmask         = pxa_unmask_low_gpio,
        .set_type       = pxa_gpio_irq_type,
 };
 
@@ -267,20 +277,24 @@ void __init pxa_init_irq_gpio(int gpio_nr)
        }
 
        /* Install handler for GPIO>=2 edge detect interrupts */
-       set_irq_chip(IRQ_GPIO_2_x, &pxa_internal_chip_low);
        set_irq_chained_handler(IRQ_GPIO_2_x, pxa_gpio_demux_handler);
 
        pxa_init_gpio(gpio_nr);
 }
 
+void __init pxa_init_gpio_set_wake(int (*set_wake)(unsigned int, unsigned int))
+{
+       pxa_low_gpio_chip.set_wake = set_wake;
+       pxa_muxed_gpio_chip.set_wake = set_wake;
+}
+
 void __init pxa_init_irq_set_wake(int (*set_wake)(unsigned int, unsigned int))
 {
        pxa_internal_chip_low.set_wake = set_wake;
 #ifdef CONFIG_PXA27x
        pxa_internal_chip_high.set_wake = set_wake;
 #endif
-       pxa_low_gpio_chip.set_wake = set_wake;
-       pxa_muxed_gpio_chip.set_wake = set_wake;
+       pxa_init_gpio_set_wake(set_wake);
 }
 
 #ifdef CONFIG_PM