Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 927bc916 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

PM: Allow USB devices to suspend/resume asynchronously



Set power.async_suspend for USB devices, endpoints and interfaces,
allowing them to be suspended and resumed asynchronously during
system sleep transitions.

The power.async_suspend flag is also set for devices that don't have
suspend or resume callbacks, because otherwise they would make the
main suspend/resume thread wait for their "asynchronous" children
(during suspend) or parents (during resume), effectively negating the
possible gains from executing these devices' suspend and resume
callbacks asynchronously.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
parent 6d19c009
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ int usb_create_ep_devs(struct device *parent,
	ep_dev->dev.parent = parent;
	ep_dev->dev.release = ep_device_release;
	dev_set_name(&ep_dev->dev, "ep_%02x", endpoint->desc.bEndpointAddress);
	device_enable_async_suspend(&ep_dev->dev);

	retval = device_register(&ep_dev->dev);
	if (retval)
+1 −0
Original line number Diff line number Diff line
@@ -1817,6 +1817,7 @@ int usb_new_device(struct usb_device *udev)
	/* Tell the world! */
	announce_device(udev);

	device_enable_async_suspend(&udev->dev);
	/* Register the device.  The device driver is responsible
	 * for configuring the device and invoking the add-device
	 * notifier chain (used by usbfs and possibly others).
+1 −0
Original line number Diff line number Diff line
@@ -1867,6 +1867,7 @@ free_interfaces:
			"adding %s (config #%d, interface %d)\n",
			dev_name(&intf->dev), configuration,
			intf->cur_altsetting->desc.bInterfaceNumber);
		device_enable_async_suspend(&intf->dev);
		ret = device_add(&intf->dev);
		if (ret != 0) {
			dev_err(&dev->dev, "device_add(%s) --> %d\n",