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

Commit d1a64e40 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 a8277a5b 7b553e1a
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1441,6 +1441,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
@@ -1470,6 +1473,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
@@ -167,6 +167,8 @@ static int xhci_plat_probe(struct platform_device *pdev)
	if (!hcd)
		return -ENOMEM;

	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)) {
@@ -221,6 +223,8 @@ static int xhci_plat_probe(struct platform_device *pdev)
		goto disable_clk;
	}

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

	if ((node && of_property_read_bool(node, "usb3-lpm-capable")) ||
			(pdata && pdata->usb3_lpm_capable))
		xhci->quirks |= XHCI_LPM_SUPPORT;
+9 −0
Original line number Diff line number Diff line
@@ -395,6 +395,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;