diff options
author | NeilBrown <neilb@suse.de> | 2011-11-26 15:17:41 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-12-20 12:53:25 -0500 |
commit | 286f8f3cd615177d5d0f8af8059a3fa39f51fa97 (patch) | |
tree | 13420240fc5b4a9acb78272e328f5653daab30a5 /drivers/mfd | |
parent | 8f6a459a9daa6ce76d7c192f2cb3047fffb45ec8 (diff) |
mfd: Base interrupt for twl4030-irq must be one-shot
As the interrupt source is only cleared by the threaded interrupt
service routine, we need to make the base interrupt IRQF_ONESHOT.
Without this, the first interrupt from the TWL4030 cause the CPU to
enter an infinite loop trying to handle to interrupt but never
clearing it.
Signed-off-by: NeilBrown <neilb@suse.de>
Tested-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/twl4030-irq.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c index f062c8cc6c38..3d3d6ed48f8d 100644 --- a/drivers/mfd/twl4030-irq.c +++ b/drivers/mfd/twl4030-irq.c | |||
@@ -733,8 +733,9 @@ int twl4030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end) | |||
733 | } | 733 | } |
734 | 734 | ||
735 | /* install an irq handler to demultiplex the TWL4030 interrupt */ | 735 | /* install an irq handler to demultiplex the TWL4030 interrupt */ |
736 | status = request_threaded_irq(irq_num, NULL, handle_twl4030_pih, 0, | 736 | status = request_threaded_irq(irq_num, NULL, handle_twl4030_pih, |
737 | "TWL4030-PIH", NULL); | 737 | IRQF_ONESHOT, |
738 | "TWL4030-PIH", NULL); | ||
738 | if (status < 0) { | 739 | if (status < 0) { |
739 | pr_err("twl4030: could not claim irq%d: %d\n", irq_num, status); | 740 | pr_err("twl4030: could not claim irq%d: %d\n", irq_num, status); |
740 | goto fail_rqirq; | 741 | goto fail_rqirq; |