ARM: LPC32xx: Use handle_edge_irq() callback on edge type irqs
authorRoland Stigge <stigge@antcom.de>
Thu, 6 Sep 2012 09:39:10 +0000 (11:39 +0200)
committerRoland Stigge <stigge@antcom.de>
Thu, 6 Sep 2012 09:39:10 +0000 (11:39 +0200)
irq.c uses handle_level_irq() as the unconditional default handler. This patch
uses handle_edge_irq() instead for edge type irqs.

Signed-off-by: Roland Stigge <stigge@antcom.de>
Acked-by: Srinivas Bakki <srinivas.bakki@nxp.com>
arch/arm/mach-lpc32xx/irq.c

index 5b1cc35e6fba8603ab8c7faf5b25c09e6fd84eb7..3c6332753358eefa51e9b55bd038be310352db6a 100644 (file)
@@ -283,21 +283,25 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type)
        case IRQ_TYPE_EDGE_RISING:
                /* Rising edge sensitive */
                __lpc32xx_set_irq_type(d->hwirq, 1, 1);
+               __irq_set_handler_locked(d->hwirq, handle_edge_irq);
                break;
 
        case IRQ_TYPE_EDGE_FALLING:
                /* Falling edge sensitive */
                __lpc32xx_set_irq_type(d->hwirq, 0, 1);
+               __irq_set_handler_locked(d->hwirq, handle_edge_irq);
                break;
 
        case IRQ_TYPE_LEVEL_LOW:
                /* Low level sensitive */
                __lpc32xx_set_irq_type(d->hwirq, 0, 0);
+               __irq_set_handler_locked(d->hwirq, handle_level_irq);
                break;
 
        case IRQ_TYPE_LEVEL_HIGH:
                /* High level sensitive */
                __lpc32xx_set_irq_type(d->hwirq, 1, 0);
+               __irq_set_handler_locked(d->hwirq, handle_level_irq);
                break;
 
        /* Other modes are not supported */
@@ -305,9 +309,6 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type)
                return -EINVAL;
        }
 
-       /* Ok to use the level handler for all types */
-       irq_set_handler(d->hwirq, handle_level_irq);
-
        return 0;
 }