diff options
| author | Felix Radensky <felix@embedded-sol.com> | 2011-10-11 04:24:21 -0400 |
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2011-11-03 14:12:22 -0400 |
| commit | cfadd83852eb6b9a015bc1ea396b98f395f073e0 (patch) | |
| tree | bc4271dffca4e70aad7430f0e1915fc18334f5ff | |
| parent | 15a5148c6fa6d786d4ed94c6da3b6ed1b2b44f25 (diff) | |
powerpc/8xxx: Fix interrupt handling in MPC8xxx GPIO driver
Interrupt handler in MPC8xxx GPIO driver is missing the call to PIC EOI
(end of interrupt) handler. As a result, at least on 85XX systems, GPIO
interrupt is delivered only once. This patch adds the missing EOI call.
Tested on custom P1022 board.
Signed-off-by: Felix Radensky <felix@embedded-sol.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
| -rw-r--r-- | drivers/gpio/gpio-mpc8xxx.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c index d74d19bf3af5..ec3fcf0a7e12 100644 --- a/drivers/gpio/gpio-mpc8xxx.c +++ b/drivers/gpio/gpio-mpc8xxx.c | |||
| @@ -146,6 +146,7 @@ static int mpc8xxx_gpio_to_irq(struct gpio_chip *gc, unsigned offset) | |||
| 146 | static void mpc8xxx_gpio_irq_cascade(unsigned int irq, struct irq_desc *desc) | 146 | static void mpc8xxx_gpio_irq_cascade(unsigned int irq, struct irq_desc *desc) |
| 147 | { | 147 | { |
| 148 | struct mpc8xxx_gpio_chip *mpc8xxx_gc = irq_desc_get_handler_data(desc); | 148 | struct mpc8xxx_gpio_chip *mpc8xxx_gc = irq_desc_get_handler_data(desc); |
| 149 | struct irq_chip *chip = irq_desc_get_chip(desc); | ||
| 149 | struct of_mm_gpio_chip *mm = &mpc8xxx_gc->mm_gc; | 150 | struct of_mm_gpio_chip *mm = &mpc8xxx_gc->mm_gc; |
| 150 | unsigned int mask; | 151 | unsigned int mask; |
| 151 | 152 | ||
| @@ -153,6 +154,7 @@ static void mpc8xxx_gpio_irq_cascade(unsigned int irq, struct irq_desc *desc) | |||
| 153 | if (mask) | 154 | if (mask) |
| 154 | generic_handle_irq(irq_linear_revmap(mpc8xxx_gc->irq, | 155 | generic_handle_irq(irq_linear_revmap(mpc8xxx_gc->irq, |
| 155 | 32 - ffs(mask))); | 156 | 32 - ffs(mask))); |
| 157 | chip->irq_eoi(&desc->irq_data); | ||
| 156 | } | 158 | } |
| 157 | 159 | ||
| 158 | static void mpc8xxx_irq_unmask(struct irq_data *d) | 160 | static void mpc8xxx_irq_unmask(struct irq_data *d) |
