diff options
| author | Roland Stigge <stigge@antcom.de> | 2012-09-06 05:39:10 -0400 |
|---|---|---|
| committer | Roland Stigge <stigge@antcom.de> | 2012-09-06 05:39:10 -0400 |
| commit | 4607d65ab3d80fe0e648e221f58b03b9ed051fdd (patch) | |
| tree | 6c7ba9854f3bb1163c92d33f3583b15baa82f104 | |
| parent | 4cbe5a555fa58a79b6ecbb6c531b8bab0650778d (diff) | |
ARM: LPC32xx: Use handle_edge_irq() callback on edge type irqs
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>
| -rw-r--r-- | arch/arm/mach-lpc32xx/irq.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/arm/mach-lpc32xx/irq.c b/arch/arm/mach-lpc32xx/irq.c index 5b1cc35e6fba..3c6332753358 100644 --- a/arch/arm/mach-lpc32xx/irq.c +++ b/arch/arm/mach-lpc32xx/irq.c | |||
| @@ -283,21 +283,25 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type) | |||
| 283 | case IRQ_TYPE_EDGE_RISING: | 283 | case IRQ_TYPE_EDGE_RISING: |
| 284 | /* Rising edge sensitive */ | 284 | /* Rising edge sensitive */ |
| 285 | __lpc32xx_set_irq_type(d->hwirq, 1, 1); | 285 | __lpc32xx_set_irq_type(d->hwirq, 1, 1); |
| 286 | __irq_set_handler_locked(d->hwirq, handle_edge_irq); | ||
| 286 | break; | 287 | break; |
| 287 | 288 | ||
| 288 | case IRQ_TYPE_EDGE_FALLING: | 289 | case IRQ_TYPE_EDGE_FALLING: |
| 289 | /* Falling edge sensitive */ | 290 | /* Falling edge sensitive */ |
| 290 | __lpc32xx_set_irq_type(d->hwirq, 0, 1); | 291 | __lpc32xx_set_irq_type(d->hwirq, 0, 1); |
| 292 | __irq_set_handler_locked(d->hwirq, handle_edge_irq); | ||
| 291 | break; | 293 | break; |
| 292 | 294 | ||
| 293 | case IRQ_TYPE_LEVEL_LOW: | 295 | case IRQ_TYPE_LEVEL_LOW: |
| 294 | /* Low level sensitive */ | 296 | /* Low level sensitive */ |
| 295 | __lpc32xx_set_irq_type(d->hwirq, 0, 0); | 297 | __lpc32xx_set_irq_type(d->hwirq, 0, 0); |
| 298 | __irq_set_handler_locked(d->hwirq, handle_level_irq); | ||
| 296 | break; | 299 | break; |
| 297 | 300 | ||
| 298 | case IRQ_TYPE_LEVEL_HIGH: | 301 | case IRQ_TYPE_LEVEL_HIGH: |
| 299 | /* High level sensitive */ | 302 | /* High level sensitive */ |
| 300 | __lpc32xx_set_irq_type(d->hwirq, 1, 0); | 303 | __lpc32xx_set_irq_type(d->hwirq, 1, 0); |
| 304 | __irq_set_handler_locked(d->hwirq, handle_level_irq); | ||
| 301 | break; | 305 | break; |
| 302 | 306 | ||
| 303 | /* Other modes are not supported */ | 307 | /* Other modes are not supported */ |
| @@ -305,9 +309,6 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type) | |||
| 305 | return -EINVAL; | 309 | return -EINVAL; |
| 306 | } | 310 | } |
| 307 | 311 | ||
| 308 | /* Ok to use the level handler for all types */ | ||
| 309 | irq_set_handler(d->hwirq, handle_level_irq); | ||
| 310 | |||
| 311 | return 0; | 312 | return 0; |
| 312 | } | 313 | } |
| 313 | 314 | ||
