aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorFelix Radensky <felix@embedded-sol.com>2011-10-11 04:24:21 -0400
committerKumar Gala <galak@kernel.crashing.org>2011-11-03 14:12:22 -0400
commitcfadd83852eb6b9a015bc1ea396b98f395f073e0 (patch)
treebc4271dffca4e70aad7430f0e1915fc18334f5ff /drivers/gpio
parent15a5148c6fa6d786d4ed94c6da3b6ed1b2b44f25 (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>
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/gpio-mpc8xxx.c2
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)
146static void mpc8xxx_gpio_irq_cascade(unsigned int irq, struct irq_desc *desc) 146static 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
158static void mpc8xxx_irq_unmask(struct irq_data *d) 160static void mpc8xxx_irq_unmask(struct irq_data *d)