mfd: twl4030: Fix chained irq handling on resume from suspend
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>
This commit is contained in:
parent
46b9d13aae
commit
8b41669ceb
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue