aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm8994-irq.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-07-21 05:09:24 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2011-07-31 17:28:27 -0400
commitccd80c7142ba178f5395fe69244e6c4611100511 (patch)
tree6ad46fbf7aebcc2302ad28052bdcea9b4ca308dd /drivers/mfd/wm8994-irq.c
parent88c939770db375244b00ba92e901fa92677a7164 (diff)
mfd: Acknowledge WM8994 IRQs before reporting
This ensures we never have a window where we've handled an interrupt but not told the hardware about it. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/wm8994-irq.c')
-rw-r--r--drivers/mfd/wm8994-irq.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c
index 71c6e8f9aedb..d682f7bd112c 100644
--- a/drivers/mfd/wm8994-irq.c
+++ b/drivers/mfd/wm8994-irq.c
@@ -231,12 +231,6 @@ static irqreturn_t wm8994_irq_thread(int irq, void *data)
231 status[i] &= ~wm8994->irq_masks_cur[i]; 231 status[i] &= ~wm8994->irq_masks_cur[i];
232 } 232 }
233 233
234 /* Report */
235 for (i = 0; i < ARRAY_SIZE(wm8994_irqs); i++) {
236 if (status[wm8994_irqs[i].reg - 1] & wm8994_irqs[i].mask)
237 handle_nested_irq(wm8994->irq_base + i);
238 }
239
240 /* Ack any unmasked IRQs */ 234 /* Ack any unmasked IRQs */
241 for (i = 0; i < ARRAY_SIZE(status); i++) { 235 for (i = 0; i < ARRAY_SIZE(status); i++) {
242 if (status[i]) 236 if (status[i])
@@ -244,6 +238,12 @@ static irqreturn_t wm8994_irq_thread(int irq, void *data)
244 status[i]); 238 status[i]);
245 } 239 }
246 240
241 /* Report */
242 for (i = 0; i < ARRAY_SIZE(wm8994_irqs); i++) {
243 if (status[wm8994_irqs[i].reg - 1] & wm8994_irqs[i].mask)
244 handle_nested_irq(wm8994->irq_base + i);
245 }
246
247 return IRQ_HANDLED; 247 return IRQ_HANDLED;
248} 248}
249 249