aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/ucb1x00-core.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2006-06-26 10:26:13 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-06-26 10:26:13 -0400
commitcfc736564fd01ee008d746913b1bbb90e3eb1f99 (patch)
tree6192a27c1ace4bf76795dadadbe1eb63cbe47429 /drivers/mfd/ucb1x00-core.c
parentcd701aa27e4cfab5c99c7da13d404b1f3a0aecfb (diff)
[ARM] fix drivers/mfd/ucb1x00-core.c IRQ probing bug
While reviewing the IRQ autoprobing code i found the attached buglet. probe_irq_on()/off() calls must always be in pairs, because the generic IRQ code uses a global semaphore to serialize all autoprobing activites. (which does make sense) The ARM code's probe_irq_*() implementation does not do this, but if this driver is ever used on another platform, this bug might bite. (It probably does not trigger in practice, because a zero probing mask returned should be rare - but still.) Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/mfd/ucb1x00-core.c')
-rw-r--r--drivers/mfd/ucb1x00-core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
index aff83f966803..c8426a9bf273 100644
--- a/drivers/mfd/ucb1x00-core.c
+++ b/drivers/mfd/ucb1x00-core.c
@@ -420,8 +420,10 @@ static int ucb1x00_detect_irq(struct ucb1x00 *ucb)
420 unsigned long mask; 420 unsigned long mask;
421 421
422 mask = probe_irq_on(); 422 mask = probe_irq_on();
423 if (!mask) 423 if (!mask) {
424 probe_irq_off(mask);
424 return NO_IRQ; 425 return NO_IRQ;
426 }
425 427
426 /* 428 /*
427 * Enable the ADC interrupt. 429 * Enable the ADC interrupt.