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

Commit ef9fcf6c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "USB: Allow skipping device resume during system resume"

parents 3a28072b aa75216d
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1462,6 +1462,9 @@ int usb_suspend(struct device *dev, pm_message_t msg)
{
	struct usb_device	*udev = to_usb_device(dev);

	if (udev->bus->skip_resume && udev->state == USB_STATE_SUSPENDED)
		return 0;

	unbind_no_pm_drivers_interfaces(udev);

	/* From now on we are sure all drivers support suspend/resume
@@ -1491,6 +1494,15 @@ int usb_resume(struct device *dev, pm_message_t msg)
	struct usb_device	*udev = to_usb_device(dev);
	int			status;

	/*
	 * Some buses would like to keep their devices in suspend
	 * state after system resume.  Their resume happen when
	 * a remote wakeup is detected or interface driver start
	 * I/O.
	 */
	if (udev->bus->skip_resume)
		return 0;

	/* For all calls, take the device back to full power and
	 * tell the PM core in case it was autosuspended previously.
	 * Unbind the interfaces that will need rebinding later,
+4 −0
Original line number Diff line number Diff line
@@ -272,6 +272,8 @@ static int xhci_plat_probe(struct platform_device *pdev)
		goto disable_runtime;
	}

	hcd_to_bus(hcd)->skip_resume = true;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	hcd->regs = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(hcd->regs)) {
@@ -318,6 +320,8 @@ static int xhci_plat_probe(struct platform_device *pdev)
		goto disable_clk;
	}

	hcd_to_bus(xhci->shared_hcd)->skip_resume = true;

	if (device_property_read_bool(&pdev->dev, "usb3-lpm-capable"))
		xhci->quirks |= XHCI_LPM_SUPPORT;

+9 −0
Original line number Diff line number Diff line
@@ -468,6 +468,15 @@ struct usb_bus {
	struct mon_bus *mon_bus;	/* non-null when associated */
	int monitored;			/* non-zero when monitored */
#endif
	unsigned skip_resume:1;		/* All USB devices are brought into full
					 * power state after system resume. It
					 * is desirable for some buses to keep
					 * their devices in suspend state even
					 * after system resume. The devices
					 * are resumed later when a remote
					 * wakeup is detected or an interface
					 * driver starts I/O.
					 */
};

struct usb_dev_state;