On Wednesday, December 15, 2010, Rafael J. Wysocki wrote: > 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 should have been power.disable_depth > 0, of course. Sorry. > That change would fix the issue at hand, wouldn't it? Rafael _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm