On Tuesday, December 14, 2010, Alan Stern wrote: > On Tue, 14 Dec 2010, Rabin Vincent wrote: > > > Hello, > > > > If an i2c driver uses dev_pm_ops and pm_runtime_suspended() returns true > > for the device, the i2c core will not call the driver's pm->suspend() > > routine. Similar behaviour (except for the if dev_pm_ops check) is > > present in the generic PM ops provided in > > drivers/base/power/generic_ops.c. > > > > Since pm_runtime_suspended() returns true if the relevant driver did not > > call any pm_runtime functions, this means that any driver which does not > > use pm_runtime APIs will not get its pm->suspend() callback called > > during system sleep, if CONFIG_PM_RUNTIME is enabled. > > > > For the i2c case, there are several such drivers (in drivers/input/*, > > etc) lacking these calls. How is this to be handled? Do all of these > > drivers need to be patched to use the pm_runtime API if they are to be > > used on a kernel with PM_RUNTIME enabled? > > I'm not familiar with the details of how the i2c subsystem works. But > in general, the subsystem code should call pm_runtime_set_active() > for every device before registering it. Then if a driver doesn't use > any runtime-PM functions, pm_runtime_suspended() will return false. I rather think that our current definition of pm_runtime_suspended() is not really adequate. Namely, it shouldn't really return true if runtime PM is not enabled (ie. power.disable_depth > 1). That change would fix the issue at hand, wouldn't it? Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html