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

Commit dbc3887e authored by David Brownell's avatar David Brownell Committed by Greg Kroah-Hartman
Browse files

[PATCH] remove duplicated resume path code



This gets rid of some inconsistently duplicated logic to resume interfaces.
Similar code was in both finish_port_resume() and in usb_generic_resume().
Now there is just one copy of that code, accessed regardless of whether
CONFIG_USB_SUSPEND is enabled.  Fault handling is also more consistent.

Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 390a8c34
Loading
Loading
Loading
Loading
+5 −28
Original line number Diff line number Diff line
@@ -1723,6 +1723,7 @@ static int finish_port_resume(struct usb_device *udev)
			status);
	else if (udev->actconfig) {
		unsigned	i;
		int		(*resume)(struct device *);

		le16_to_cpus(&devstatus);
		if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
@@ -1741,35 +1742,11 @@ static int finish_port_resume(struct usb_device *udev)
		}

		/* resume interface drivers; if this is a hub, it
		 * resumes the child devices
		 * may have a child resume event to deal with soon
		 */
		for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
			struct usb_interface	*intf;
			struct usb_driver	*driver;

			intf = udev->actconfig->interface[i];
			if (is_active(intf))
				continue;
			if (!intf->dev.driver) {
				/* FIXME maybe force to alt 0 */
				continue;
			}
			driver = to_usb_driver(intf->dev.driver);

			/* bus_rescan_devices() may rebind drivers */
			if (!driver->resume)
				continue;

			/* can we do better than just logging errors? */
			mark_active(intf);
			status = driver->resume(intf);
			if (status < 0) {
				mark_quiesced(intf);
				dev_dbg(&intf->dev,
					"resume error %d\n",
					status);
			}
		}
		resume = udev->dev.bus->resume;
		for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++)
			(void) resume(&udev->actconfig->interface[i]->dev);
		status = 0;

	} else if (udev->devnum <= 0) {