On Mon, Sep 09, 2013 at 04:40:28PM +0100, Mark Brown wrote: > On Mon, Sep 09, 2013 at 04:34:38PM +0300, Mika Westerberg wrote: > > > + /* > > + * Enable runtime PM for the client device. If the client wants to > > + * participate on runtime PM it should call pm_runtime_put() in its > > + * probe() callback. > > + * > > + * User still needs to allow the PM runtime before it can actually > > + * happen. > > + */ > > + pm_runtime_forbid(&client->dev); > > + pm_runtime_get_noresume(&client->dev); > > + pm_runtime_set_active(&client->dev); > > + pm_runtime_enable(&client->dev); > > How is this going to interact with client devices which are already > enabling runtime PM for themselves, and what are the advantages of doing > this over having the client device enable runtime PM for itself (given > that the client still needs an explicit put() adding)? My understanding is that you can call pm_runtime_enable() several times (provided that pm_runtime_disable() is called as many times). So that should have no effect on the current drivers that already take advantage of runtime PM. There is one difference though -- runtime PM is now blocked by default and it needs to be unblocked from the userspace per each device. For the advantages compared to each driver handling it completely themselves: - Few lines less as you only need to call _put(). - It follows what is already been done for other buses, like PCI and AMBA . - The I2C core makes sure that the device is available (from bus point of view) when the driver ->probe() is called. > Given that it's relatively common for devices to have both I2C and SPI > control it seems like it'd be sensible to keep the policy common between > the two buses to simplify driver implementation. Yes and IMHO if I2C and SPI follows what has already been done for other buses it should make the driver writer's job easier as the usage is similar from one bus to another. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html