From: "Mark A. Greer" <mgreer@xxxxxxxxxxxxxxx> Currently in the OMAP3 code, cpu_idle() calls pm_idle(), which is a function pointer set to omap3_pm_idle()). omap3_pm_idle() calls omap_sram_idle() which eventually causes a 'wfi' instruction to be executed effectively putting the system to sleep. It is assumed that an I/O wake-up event will occur to wake the system up again. This doesn't work on systems that don't support I/O wake-ups (indicated by omap3_has_io_wakeup() returning false). Leaving pm_idle() pointing to default_idle() won't work either because the cpu_<processor>_do_idle() routine which is eventually called may also execute a 'wfi' instruction (e.g., cpu_v7_do_idle()). To handle this, leave pm_idle() pointing to omap3_pm_idle() but add a check in omap3_pm_idle() so it avoids calling omap_sram_idle() when I/O wake-ups aren't supported. Signed-off-by: Mark A. Greer <mgreer@xxxxxxxxxxxxxxx> --- arch/arm/mach-omap2/pm34xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index ec92676..b7bbcee 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -397,7 +397,7 @@ static void omap3_pm_idle(void) { local_fiq_disable(); - if (omap_irq_pending()) + if (omap_irq_pending() || !omap3_has_io_wakeup()) goto out; trace_power_start(POWER_CSTATE, 1, smp_processor_id()); -- 1.7.9.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html