]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
USB: Add new USB LPM helpers
authorKai-Heng Feng <kai.heng.feng@canonical.com>
Tue, 22 Jan 2019 08:07:27 +0000 (16:07 +0800)
committerKhalid Elmously <khalid.elmously@canonical.com>
Wed, 6 Feb 2019 04:53:01 +0000 (04:53 +0000)
BugLink: https://bugs.launchpad.net/bugs/1812812
Use new helpers to make LPM enabling/disabling more clear.

This is a preparation to subsequent patch.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Cc: stable <stable@vger.kernel.org> # after much soaking
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(backported from commit 7529b2574a7aaf902f1f8159fbc2a7caa74be559 linux-next)
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/usb/core/driver.c
drivers/usb/core/hub.c
drivers/usb/core/message.c
drivers/usb/core/sysfs.c
drivers/usb/core/usb.h

index 5d34080101125336bc07abd52d265893f48b1616..f3ba386a2acd5ae5eaa01cde85dce1680baf0b0d 100644 (file)
@@ -1899,7 +1899,7 @@ int usb_runtime_idle(struct device *dev)
        return -EBUSY;
 }
 
-int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
+static int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
 {
        struct usb_hcd *hcd = bus_to_hcd(udev->bus);
        int ret = -EPERM;
@@ -1916,6 +1916,16 @@ int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
        return ret;
 }
 
+int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
+{
+       return usb_set_usb2_hardware_lpm(udev, 1);
+}
+
+int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
+{
+       return usb_set_usb2_hardware_lpm(udev, 0);
+}
+
 #endif /* CONFIG_PM */
 
 struct bus_type usb_bus_type = {
index 91c895f41fd02152ce1926560a6c1c6aee03f234..f929f4b5fd75a74671c3b3c81e7b041569c7429d 100644 (file)
@@ -3167,7 +3167,7 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
 
        /* disable USB2 hardware LPM */
        if (udev->usb2_hw_lpm_enabled == 1)
-               usb_set_usb2_hardware_lpm(udev, 0);
+               usb_disable_usb2_hardware_lpm(udev);
 
        if (usb_disable_ltm(udev)) {
                dev_err(&udev->dev, "Failed to disable LTM before suspend\n.");
@@ -3206,7 +3206,7 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
  err_ltm:
                /* Try to enable USB2 hardware LPM again */
                if (udev->usb2_hw_lpm_capable == 1)
-                       usb_set_usb2_hardware_lpm(udev, 1);
+                       usb_enable_usb2_hardware_lpm(udev);
 
                if (udev->do_remote_wakeup)
                        (void) usb_disable_remote_wakeup(udev);
@@ -3486,7 +3486,7 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg)
        } else  {
                /* Try to enable USB2 hardware LPM */
                if (udev->usb2_hw_lpm_capable == 1)
-                       usb_set_usb2_hardware_lpm(udev, 1);
+                       usb_enable_usb2_hardware_lpm(udev);
 
                /* Try to enable USB3 LTM */
                usb_enable_ltm(udev);
@@ -4335,7 +4335,7 @@ static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
        if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) ||
                        connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
                udev->usb2_hw_lpm_allowed = 1;
-               usb_set_usb2_hardware_lpm(udev, 1);
+               usb_enable_usb2_hardware_lpm(udev);
        }
 }
 
@@ -5493,7 +5493,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
         * It will be re-enabled by the enumeration process.
         */
        if (udev->usb2_hw_lpm_enabled == 1)
-               usb_set_usb2_hardware_lpm(udev, 0);
+               usb_disable_usb2_hardware_lpm(udev);
 
        /* Disable LPM while we reset the device and reinstall the alt settings.
         * Device-initiated LPM, and system exit latency settings are cleared
@@ -5596,7 +5596,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
 
 done:
        /* Now that the alt settings are re-installed, enable LTM and LPM. */
-       usb_set_usb2_hardware_lpm(udev, 1);
+       usb_enable_usb2_hardware_lpm(udev);
        usb_unlocked_enable_lpm(udev);
        usb_enable_ltm(udev);
        usb_release_bos_descriptor(udev);
index a4025760dd84cd76e050ebdc8db2256757ada752..576a3bd72f85ea17f07f11c05fac5d5bee99137d 100644 (file)
@@ -1218,7 +1218,7 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
                }
 
                if (dev->usb2_hw_lpm_enabled == 1)
-                       usb_set_usb2_hardware_lpm(dev, 0);
+                       usb_disable_usb2_hardware_lpm(dev);
                usb_unlocked_disable_lpm(dev);
                usb_disable_ltm(dev);
 
index 27bb340430536ba517529f1a07974a3f49c55169..91a2e79cabda4427991d5ce78bbbaf47c33a9b00 100644 (file)
@@ -508,7 +508,10 @@ static ssize_t usb2_hardware_lpm_store(struct device *dev,
 
        if (!ret) {
                udev->usb2_hw_lpm_allowed = value;
-               ret = usb_set_usb2_hardware_lpm(udev, value);
+               if (value)
+                       ret = usb_enable_usb2_hardware_lpm(udev);
+               else
+                       ret = usb_disable_usb2_hardware_lpm(udev);
        }
 
        usb_unlock_device(udev);
index bb95f98fe48c443792c2d62bfa0505ea6f38097f..2b80123399088a27ac47f28f8ee17f20a2ba5646 100644 (file)
@@ -91,7 +91,8 @@ extern int usb_remote_wakeup(struct usb_device *dev);
 extern int usb_runtime_suspend(struct device *dev);
 extern int usb_runtime_resume(struct device *dev);
 extern int usb_runtime_idle(struct device *dev);
-extern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable);
+extern int usb_enable_usb2_hardware_lpm(struct usb_device *udev);
+extern int usb_disable_usb2_hardware_lpm(struct usb_device *udev);
 
 #else
 
@@ -111,7 +112,12 @@ static inline int usb_autoresume_device(struct usb_device *udev)
        return 0;
 }
 
-static inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
+static inline int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
+{
+       return 0;
+}
+
+static inline int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
 {
        return 0;
 }