Messages in this thread |  | | | From | Chen Peter-B29397 <> | | Subject | RE: [PATCH 1/1] driver core: disable device's runtime pm during shutdown | | Date | Mon, 5 Dec 2011 04:42:26 +0000 |
| |
> > this patches causes a problem for me. > > > > Specifically it makes it impossible to power-down a device which uses > twl4030 > > for power control on an omap3 processor. > > > > To perform the shutdown we need to send a command over the i2c bus. > > The relevant bus is called omap_i2c.1 and this is normally in suspend > mode. > > When a request is sent, omap_i2c_xfer uses pm_runtime_get_sync to wake > it up, > > performs the transfer, then calls pm_runtime_put to let it go back to > sleep. > > > > So it is asleep when the new pm_runtime_disable() call is made, so it > stays > > asleep, omap_i2c_xfer cannot wake it, the transfer doesn't happen and > the > > system doesn't get powered off. > > > > So here is a device that should *not* have pm disabled at shutdown. > > > > So I feel this fix is a little too heavy-handed. > > Maybe the device's runtime PM should not be disabled if > there is no ->shutdown defined in its driver, how about the blew? > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index d8b3d89..ca30659 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -1743,14 +1743,16 @@ void device_shutdown(void) > */ > list_del_init(&dev->kobj.entry); > spin_unlock(&devices_kset->list_lock); > - /* Disable all device's runtime power management */ > - pm_runtime_disable(dev); > > + /* Disable the device's runtime power management if > + * it is to be shutdown*/ > if (dev->bus && dev->bus->shutdown) { > dev_dbg(dev, "shutdown\n"); > + pm_runtime_disable(dev); > dev->bus->shutdown(dev); > } else if (dev->driver && dev->driver->shutdown) { > dev_dbg(dev, "shutdown\n"); > + pm_runtime_disable(dev); > dev->driver->shutdown(dev); > } > put_device(dev); > > Yes, it is the solution for Neil's case, but I am not sure for all. Is it possible to resume driver's itself at driver's shutdown?
> > I don't fully understand the problem scenario described above but it > seems to > > me that if the auto-suspend timer can fire after the hardware has been > shut > > down, then maybe the hardware-shutdown should be disabling that > timer. Maybe? > > > > Suggestions? > > > > Thanks, > > NeilBrown > > > thanks, > -- > Ming Lei
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |