]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - 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
1 From 7529b2574a7aaf902f1f8159fbc2a7caa74be559 Mon Sep 17 00:00:00 2001
2 From: Kai-Heng Feng <kai.heng.feng@canonical.com>
3 Date: Sat, 12 Jan 2019 03:54:24 +0800
4 Subject: USB: Add new USB LPM helpers
5
6 From: Kai-Heng Feng <kai.heng.feng@canonical.com>
7
8 commit 7529b2574a7aaf902f1f8159fbc2a7caa74be559 upstream.
9
10 Use new helpers to make LPM enabling/disabling more clear.
11
12 This is a preparation to subsequent patch.
13
14 Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
15 Cc: stable <stable@vger.kernel.org> # after much soaking
16 Signed-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 }