On Tue, 1 Jun 2010, Kevin Hilman wrote: > "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? As far as I can tell, it's not safe for upper-layer code to idle a device like this. The driver itself needs to be aware of the device's idle state. For example, if the driver has exported some symbols, and some other code is calling one of those functions, it's the driver code that needs to be aware of its own idle-state and to return some kind of error if the device is quiesced. I don't think there's an easy way for upper-layer code to do that. The runtime PM-related code, however, should be safe, since it's initiated by the driver itself. - Paul -- 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