summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalle Jokiniemi <kalle.jokiniemi@jollamobile.com>2012-10-16 17:59:35 +0300
committerSamuel Ortiz <sameo@linux.intel.com>2012-11-21 17:46:41 +0100
commit8b41669ceba0c2d4c09d69ccb9a3458953dae784 (patch)
tree01a1e4f1405fda435053ae7368c99df92ded1b15
parent46b9d13aaec19dfbd5882a999e8ed85fc97a751e (diff)
mfd: twl4030: Fix chained irq handling on resume from suspendmfd-for-linus-3.7
The irqs are enabled one-by-one in pm core resume_noirq phase. This leads to situation where the twl4030 primary interrupt handler (PIH) is enabled before the chained secondary handlers (SIH). As the PIH cannot clear the pending interrupt, and SIHs have not been enabled yet, a flood of interrupts hangs the device. Fixed the issue by setting the SIH irqs with IRQF_EARLY_RESUME flags, so they get enabled before the PIH. Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@jollamobile.com> Acked-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/mfd/twl4030-irq.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
index ad733d76207a..cdd1173ed4e9 100644
--- a/drivers/mfd/twl4030-irq.c
+++ b/drivers/mfd/twl4030-irq.c
@@ -672,7 +672,8 @@ int twl4030_sih_setup(struct device *dev, int module, int irq_base)
irq = sih_mod + twl4030_irq_base;
irq_set_handler_data(irq, agent);
agent->irq_name = kasprintf(GFP_KERNEL, "twl4030_%s", sih->name);
- status = request_threaded_irq(irq, NULL, handle_twl4030_sih, 0,
+ status = request_threaded_irq(irq, NULL, handle_twl4030_sih,
+ IRQF_EARLY_RESUME,
agent->irq_name ?: sih->name, NULL);
dev_info(dev, "%s (irq %d) chaining IRQs %d..%d\n", sih->name,