]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - queue-4.4/usb-add-new-usb-lpm-helpers.patch
4.4-stable patches
[thirdparty/kernel/stable-queue.git] / queue-4.4 / usb-add-new-usb-lpm-helpers.patch
CommitLineData
4fa5b95e
GKH
1From 7529b2574a7aaf902f1f8159fbc2a7caa74be559 Mon Sep 17 00:00:00 2001
2From: Kai-Heng Feng <kai.heng.feng@canonical.com>
3Date: Sat, 12 Jan 2019 03:54:24 +0800
4Subject: USB: Add new USB LPM helpers
5
6From: Kai-Heng Feng <kai.heng.feng@canonical.com>
7
8commit 7529b2574a7aaf902f1f8159fbc2a7caa74be559 upstream.
9
10Use new helpers to make LPM enabling/disabling more clear.
11
12This is a preparation to subsequent patch.
13
14Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
15Cc: stable <stable@vger.kernel.org> # after much soaking
16Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
17
18---
19 drivers/usb/core/driver.c | 12 +++++++++++-
20 drivers/usb/core/hub.c | 12 ++++++------
21 drivers/usb/core/message.c | 2 +-
22 drivers/usb/core/sysfs.c | 5 ++++-
23 drivers/usb/core/usb.h | 10 ++++++++--
24 5 files changed, 30 insertions(+), 11 deletions(-)
25
26--- a/drivers/usb/core/driver.c
27+++ b/drivers/usb/core/driver.c
28@@ -1888,7 +1888,7 @@ int usb_runtime_idle(struct device *dev)
29 return -EBUSY;
30 }
31
32-int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
33+static int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
34 {
35 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
36 int ret = -EPERM;
37@@ -1905,6 +1905,16 @@ int usb_set_usb2_hardware_lpm(struct usb
38 return ret;
39 }
40
41+int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
42+{
43+ return usb_set_usb2_hardware_lpm(udev, 1);
44+}
45+
46+int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
47+{
48+ return usb_set_usb2_hardware_lpm(udev, 0);
49+}
50+
51 #endif /* CONFIG_PM */
52
53 struct bus_type usb_bus_type = {
54--- a/drivers/usb/core/hub.c
55+++ b/drivers/usb/core/hub.c
56@@ -3117,7 +3117,7 @@ int usb_port_suspend(struct usb_device *
57
58 /* disable USB2 hardware LPM */
59 if (udev->usb2_hw_lpm_enabled == 1)
60- usb_set_usb2_hardware_lpm(udev, 0);
61+ usb_disable_usb2_hardware_lpm(udev);
62
63 if (usb_disable_ltm(udev)) {
64 dev_err(&udev->dev, "Failed to disable LTM before suspend\n.");
65@@ -3164,7 +3164,7 @@ int usb_port_suspend(struct usb_device *
66 err_ltm:
67 /* Try to enable USB2 hardware LPM again */
68 if (udev->usb2_hw_lpm_capable == 1)
69- usb_set_usb2_hardware_lpm(udev, 1);
70+ usb_enable_usb2_hardware_lpm(udev);
71
72 if (udev->do_remote_wakeup)
73 (void) usb_disable_remote_wakeup(udev);
74@@ -3444,7 +3444,7 @@ int usb_port_resume(struct usb_device *u
75 } else {
76 /* Try to enable USB2 hardware LPM */
77 if (udev->usb2_hw_lpm_capable == 1)
78- usb_set_usb2_hardware_lpm(udev, 1);
79+ usb_enable_usb2_hardware_lpm(udev);
80
81 /* Try to enable USB3 LTM and LPM */
82 usb_enable_ltm(udev);
83@@ -4270,7 +4270,7 @@ static void hub_set_initial_usb2_lpm_pol
84 if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) ||
85 connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
86 udev->usb2_hw_lpm_allowed = 1;
87- usb_set_usb2_hardware_lpm(udev, 1);
88+ usb_enable_usb2_hardware_lpm(udev);
89 }
90 }
91
92@@ -5416,7 +5416,7 @@ static int usb_reset_and_verify_device(s
93 * It will be re-enabled by the enumeration process.
94 */
95 if (udev->usb2_hw_lpm_enabled == 1)
96- usb_set_usb2_hardware_lpm(udev, 0);
97+ usb_disable_usb2_hardware_lpm(udev);
98
99 /* Disable LPM and LTM while we reset the device and reinstall the alt
100 * settings. Device-initiated LPM settings, and system exit latency
101@@ -5526,7 +5526,7 @@ static int usb_reset_and_verify_device(s
102
103 done:
104 /* Now that the alt settings are re-installed, enable LTM and LPM. */
105- usb_set_usb2_hardware_lpm(udev, 1);
106+ usb_enable_usb2_hardware_lpm(udev);
107 usb_unlocked_enable_lpm(udev);
108 usb_enable_ltm(udev);
109 usb_release_bos_descriptor(udev);
110--- a/drivers/usb/core/message.c
111+++ b/drivers/usb/core/message.c
112@@ -1185,7 +1185,7 @@ void usb_disable_device(struct usb_devic
113 }
114
115 if (dev->usb2_hw_lpm_enabled == 1)
116- usb_set_usb2_hardware_lpm(dev, 0);
117+ usb_disable_usb2_hardware_lpm(dev);
118 usb_unlocked_disable_lpm(dev);
119 usb_disable_ltm(dev);
120
121--- a/drivers/usb/core/sysfs.c
122+++ b/drivers/usb/core/sysfs.c
123@@ -472,7 +472,10 @@ static ssize_t usb2_hardware_lpm_store(s
124
125 if (!ret) {
126 udev->usb2_hw_lpm_allowed = value;
127- ret = usb_set_usb2_hardware_lpm(udev, value);
128+ if (value)
129+ ret = usb_enable_usb2_hardware_lpm(udev);
130+ else
131+ ret = usb_disable_usb2_hardware_lpm(udev);
132 }
133
134 usb_unlock_device(udev);
135--- a/drivers/usb/core/usb.h
136+++ b/drivers/usb/core/usb.h
137@@ -84,7 +84,8 @@ extern int usb_remote_wakeup(struct usb_
138 extern int usb_runtime_suspend(struct device *dev);
139 extern int usb_runtime_resume(struct device *dev);
140 extern int usb_runtime_idle(struct device *dev);
141-extern int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable);
142+extern int usb_enable_usb2_hardware_lpm(struct usb_device *udev);
143+extern int usb_disable_usb2_hardware_lpm(struct usb_device *udev);
144
145 #else
146
147@@ -104,7 +105,12 @@ static inline int usb_autoresume_device(
148 return 0;
149 }
150
151-static inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
152+static inline int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
153+{
154+ return 0;
155+}
156+
157+static inline int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
158 {
159 return 0;
160 }