Skip to content

Commit

Permalink
USB / PM: Allow USB devices to remain runtime-suspended when sleeping
Browse files Browse the repository at this point in the history
Have dev_pm_ops.prepare return 1 for USB devices and ports so that USB
devices can remain runtime-suspended when the system goes to a sleep
state, if their wakeup state is correct and they have runtime PM enabled.

Signed-off-by: Tomeu Vizoso <[email protected]>
Reviewed-by: Ulf Hansson <[email protected]>
Acked-by: Alan Stern <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
  • Loading branch information
tomeuv authored and rafaeljw committed Jan 8, 2016
1 parent aa8e54b commit e3345db
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
6 changes: 6 additions & 0 deletions drivers/usb/core/port.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,18 @@ static int usb_port_runtime_suspend(struct device *dev)

return retval;
}

static int usb_port_prepare(struct device *dev)
{
return 1;
}
#endif

static const struct dev_pm_ops usb_port_pm_ops = {
#ifdef CONFIG_PM
.runtime_suspend = usb_port_runtime_suspend,
.runtime_resume = usb_port_runtime_resume,
.prepare = usb_port_prepare,
#endif
};

Expand Down
8 changes: 7 additions & 1 deletion drivers/usb/core/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,13 @@ static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)

static int usb_dev_prepare(struct device *dev)
{
return 0; /* Implement eventually? */
struct usb_device *udev = to_usb_device(dev);

/* Return 0 if the current wakeup setting is wrong, otherwise 1 */
if (udev->do_remote_wakeup != device_may_wakeup(dev))
return 0;

return 1;
}

static void usb_dev_complete(struct device *dev)
Expand Down

0 comments on commit e3345db

Please sign in to comment.