"Nayak, Rajendra" <rnayak@xxxxxx> writes: [...] >> diff --git a/arch/arm/mach-omap2/pm_bus.c >> b/arch/arm/mach-omap2/pm_bus.c >> index 69acaa5..3787da8 100644 >> --- a/arch/arm/mach-omap2/pm_bus.c >> +++ b/arch/arm/mach-omap2/pm_bus.c >> @@ -70,3 +70,64 @@ int platform_pm_runtime_idle(struct device *dev) >> }; >> #endif /* CONFIG_PM_RUNTIME */ >> >> +#ifdef CONFIG_SUSPEND >> +int platform_pm_suspend_noirq(struct device *dev) >> +{ >> + struct device_driver *drv = dev->driver; >> + struct platform_device *pdev = to_platform_device(dev); >> + struct omap_device *odev = to_omap_device(pdev); >> + int ret = 0; >> + >> + if (!drv) >> + return 0; >> + >> + if (drv->pm) { >> + if (drv->pm->suspend_noirq) >> + ret = drv->pm->suspend_noirq(dev); >> + } >> + >> + if (omap_device_is_valid(odev)) { >> + if (odev->flags & OMAP_DEVICE_NO_BUS_SUSPEND) { >> + dev_dbg(dev, "no automatic bus-level >> system resume.\n"); >> + return 0; >> + } >> + >> + dev_dbg(dev, "%s\n", __func__); >> + omap_device_idle(pdev); > > Is it expected that a device is always in enabled state at this point? > If the device is already in idle a call to omap_device_idle unconditionally > throws up warnings from the omap_device api. Hmm, good point. The device may already be idled (via runtime PM, or maybe because it was never enabled.) There are two options: 1. fixup the warnings in the omap_device_idle() to allow multiple calls to _idle() 2. Add an omap_device_is_idle() check before calling _idle() I much prefer (1). Paul? Kevin -- 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