diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-01-12 05:01:12 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-01-12 05:01:12 -0500 |
commit | 1f16f116b01c110db20ab808562c8b8bc3ee3d6e (patch) | |
tree | 44db563f64cf5f8d62af8f99a61e2b248c44ea3a /drivers/usb | |
parent | 03724ac3d48f8f0e3caf1d30fa134f8fd96c94e2 (diff) | |
parent | f9eccf24615672896dc13251410c3f2f33a14f95 (diff) |
Merge branches 'clockevents/4.4-fixes' and 'clockevents/4.5-fixes' of http://git.linaro.org/people/daniel.lezcano/linux into timers/urgent
Pull in fixes from Daniel Lezcano:
- Fix the vt8500 timer leading to a system lock up when dealing with too
small delta (Roman Volkov)
- Select the CLKSRC_MMIO when the fsl_ftm_timer is enabled with COMPILE_TEST
(Daniel Lezcano)
- Prevent to compile timers using the 'iomem' API when the architecture has
not HAS_IOMEM set (Richard Weinberger)
Diffstat (limited to 'drivers/usb')
28 files changed, 215 insertions, 72 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index b30e7423549b..26ca4f910cb0 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -1838,6 +1838,11 @@ static const struct usb_device_id acm_ids[] = { | |||
1838 | }, | 1838 | }, |
1839 | #endif | 1839 | #endif |
1840 | 1840 | ||
1841 | /* Exclude Infineon Flash Loader utility */ | ||
1842 | { USB_DEVICE(0x058b, 0x0041), | ||
1843 | .driver_info = IGNORE_DEVICE, | ||
1844 | }, | ||
1845 | |||
1841 | /* control interfaces without any protocol set */ | 1846 | /* control interfaces without any protocol set */ |
1842 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1847 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
1843 | USB_CDC_PROTO_NONE) }, | 1848 | USB_CDC_PROTO_NONE) }, |
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index 7caff020106e..5050760f5e17 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c | |||
@@ -115,7 +115,8 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno, | |||
115 | USB_SS_MULT(desc->bmAttributes) > 3) { | 115 | USB_SS_MULT(desc->bmAttributes) > 3) { |
116 | dev_warn(ddev, "Isoc endpoint has Mult of %d in " | 116 | dev_warn(ddev, "Isoc endpoint has Mult of %d in " |
117 | "config %d interface %d altsetting %d ep %d: " | 117 | "config %d interface %d altsetting %d ep %d: " |
118 | "setting to 3\n", desc->bmAttributes + 1, | 118 | "setting to 3\n", |
119 | USB_SS_MULT(desc->bmAttributes), | ||
119 | cfgno, inum, asnum, ep->desc.bEndpointAddress); | 120 | cfgno, inum, asnum, ep->desc.bEndpointAddress); |
120 | ep->ss_ep_comp.bmAttributes = 2; | 121 | ep->ss_ep_comp.bmAttributes = 2; |
121 | } | 122 | } |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index bdeadc112d29..ddbf32d599cb 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -124,6 +124,10 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev) | |||
124 | 124 | ||
125 | int usb_device_supports_lpm(struct usb_device *udev) | 125 | int usb_device_supports_lpm(struct usb_device *udev) |
126 | { | 126 | { |
127 | /* Some devices have trouble with LPM */ | ||
128 | if (udev->quirks & USB_QUIRK_NO_LPM) | ||
129 | return 0; | ||
130 | |||
127 | /* USB 2.1 (and greater) devices indicate LPM support through | 131 | /* USB 2.1 (and greater) devices indicate LPM support through |
128 | * their USB 2.0 Extended Capabilities BOS descriptor. | 132 | * their USB 2.0 Extended Capabilities BOS descriptor. |
129 | */ | 133 | */ |
@@ -1031,10 +1035,20 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) | |||
1031 | unsigned delay; | 1035 | unsigned delay; |
1032 | 1036 | ||
1033 | /* Continue a partial initialization */ | 1037 | /* Continue a partial initialization */ |
1034 | if (type == HUB_INIT2) | 1038 | if (type == HUB_INIT2 || type == HUB_INIT3) { |
1035 | goto init2; | 1039 | device_lock(hub->intfdev); |
1036 | if (type == HUB_INIT3) | 1040 | |
1041 | /* Was the hub disconnected while we were waiting? */ | ||
1042 | if (hub->disconnected) { | ||
1043 | device_unlock(hub->intfdev); | ||
1044 | kref_put(&hub->kref, hub_release); | ||
1045 | return; | ||
1046 | } | ||
1047 | if (type == HUB_INIT2) | ||
1048 | goto init2; | ||
1037 | goto init3; | 1049 | goto init3; |
1050 | } | ||
1051 | kref_get(&hub->kref); | ||
1038 | 1052 | ||
1039 | /* The superspeed hub except for root hub has to use Hub Depth | 1053 | /* The superspeed hub except for root hub has to use Hub Depth |
1040 | * value as an offset into the route string to locate the bits | 1054 | * value as an offset into the route string to locate the bits |
@@ -1232,6 +1246,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) | |||
1232 | queue_delayed_work(system_power_efficient_wq, | 1246 | queue_delayed_work(system_power_efficient_wq, |
1233 | &hub->init_work, | 1247 | &hub->init_work, |
1234 | msecs_to_jiffies(delay)); | 1248 | msecs_to_jiffies(delay)); |
1249 | device_unlock(hub->intfdev); | ||
1235 | return; /* Continues at init3: below */ | 1250 | return; /* Continues at init3: below */ |
1236 | } else { | 1251 | } else { |
1237 | msleep(delay); | 1252 | msleep(delay); |
@@ -1253,6 +1268,11 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) | |||
1253 | /* Allow autosuspend if it was suppressed */ | 1268 | /* Allow autosuspend if it was suppressed */ |
1254 | if (type <= HUB_INIT3) | 1269 | if (type <= HUB_INIT3) |
1255 | usb_autopm_put_interface_async(to_usb_interface(hub->intfdev)); | 1270 | usb_autopm_put_interface_async(to_usb_interface(hub->intfdev)); |
1271 | |||
1272 | if (type == HUB_INIT2 || type == HUB_INIT3) | ||
1273 | device_unlock(hub->intfdev); | ||
1274 | |||
1275 | kref_put(&hub->kref, hub_release); | ||
1256 | } | 1276 | } |
1257 | 1277 | ||
1258 | /* Implement the continuations for the delays above */ | 1278 | /* Implement the continuations for the delays above */ |
@@ -4512,6 +4532,8 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1, | |||
4512 | goto fail; | 4532 | goto fail; |
4513 | } | 4533 | } |
4514 | 4534 | ||
4535 | usb_detect_quirks(udev); | ||
4536 | |||
4515 | if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) { | 4537 | if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) { |
4516 | retval = usb_get_bos_descriptor(udev); | 4538 | retval = usb_get_bos_descriptor(udev); |
4517 | if (!retval) { | 4539 | if (!retval) { |
@@ -4710,7 +4732,6 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, | |||
4710 | if (status < 0) | 4732 | if (status < 0) |
4711 | goto loop; | 4733 | goto loop; |
4712 | 4734 | ||
4713 | usb_detect_quirks(udev); | ||
4714 | if (udev->quirks & USB_QUIRK_DELAY_INIT) | 4735 | if (udev->quirks & USB_QUIRK_DELAY_INIT) |
4715 | msleep(1000); | 4736 | msleep(1000); |
4716 | 4737 | ||
@@ -5326,9 +5347,6 @@ static int usb_reset_and_verify_device(struct usb_device *udev) | |||
5326 | if (udev->usb2_hw_lpm_enabled == 1) | 5347 | if (udev->usb2_hw_lpm_enabled == 1) |
5327 | usb_set_usb2_hardware_lpm(udev, 0); | 5348 | usb_set_usb2_hardware_lpm(udev, 0); |
5328 | 5349 | ||
5329 | bos = udev->bos; | ||
5330 | udev->bos = NULL; | ||
5331 | |||
5332 | /* Disable LPM and LTM while we reset the device and reinstall the alt | 5350 | /* Disable LPM and LTM while we reset the device and reinstall the alt |
5333 | * settings. Device-initiated LPM settings, and system exit latency | 5351 | * settings. Device-initiated LPM settings, and system exit latency |
5334 | * settings are cleared when the device is reset, so we have to set | 5352 | * settings are cleared when the device is reset, so we have to set |
@@ -5337,15 +5355,18 @@ static int usb_reset_and_verify_device(struct usb_device *udev) | |||
5337 | ret = usb_unlocked_disable_lpm(udev); | 5355 | ret = usb_unlocked_disable_lpm(udev); |
5338 | if (ret) { | 5356 | if (ret) { |
5339 | dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__); | 5357 | dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__); |
5340 | goto re_enumerate; | 5358 | goto re_enumerate_no_bos; |
5341 | } | 5359 | } |
5342 | ret = usb_disable_ltm(udev); | 5360 | ret = usb_disable_ltm(udev); |
5343 | if (ret) { | 5361 | if (ret) { |
5344 | dev_err(&udev->dev, "%s Failed to disable LTM\n.", | 5362 | dev_err(&udev->dev, "%s Failed to disable LTM\n.", |
5345 | __func__); | 5363 | __func__); |
5346 | goto re_enumerate; | 5364 | goto re_enumerate_no_bos; |
5347 | } | 5365 | } |
5348 | 5366 | ||
5367 | bos = udev->bos; | ||
5368 | udev->bos = NULL; | ||
5369 | |||
5349 | for (i = 0; i < SET_CONFIG_TRIES; ++i) { | 5370 | for (i = 0; i < SET_CONFIG_TRIES; ++i) { |
5350 | 5371 | ||
5351 | /* ep0 maxpacket size may change; let the HCD know about it. | 5372 | /* ep0 maxpacket size may change; let the HCD know about it. |
@@ -5442,10 +5463,11 @@ done: | |||
5442 | return 0; | 5463 | return 0; |
5443 | 5464 | ||
5444 | re_enumerate: | 5465 | re_enumerate: |
5445 | /* LPM state doesn't matter when we're about to destroy the device. */ | ||
5446 | hub_port_logical_disconnect(parent_hub, port1); | ||
5447 | usb_release_bos_descriptor(udev); | 5466 | usb_release_bos_descriptor(udev); |
5448 | udev->bos = bos; | 5467 | udev->bos = bos; |
5468 | re_enumerate_no_bos: | ||
5469 | /* LPM state doesn't matter when we're about to destroy the device. */ | ||
5470 | hub_port_logical_disconnect(parent_hub, port1); | ||
5449 | return -ENODEV; | 5471 | return -ENODEV; |
5450 | } | 5472 | } |
5451 | 5473 | ||
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index 210618319f10..5487fe308f01 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c | |||
@@ -206,7 +206,7 @@ static int link_peers(struct usb_port *left, struct usb_port *right) | |||
206 | else | 206 | else |
207 | method = "default"; | 207 | method = "default"; |
208 | 208 | ||
209 | pr_warn("usb: failed to peer %s and %s by %s (%s:%s) (%s:%s)\n", | 209 | pr_debug("usb: failed to peer %s and %s by %s (%s:%s) (%s:%s)\n", |
210 | dev_name(&left->dev), dev_name(&right->dev), method, | 210 | dev_name(&left->dev), dev_name(&right->dev), method, |
211 | dev_name(&left->dev), | 211 | dev_name(&left->dev), |
212 | lpeer ? dev_name(&lpeer->dev) : "none", | 212 | lpeer ? dev_name(&lpeer->dev) : "none", |
@@ -265,7 +265,7 @@ static void link_peers_report(struct usb_port *left, struct usb_port *right) | |||
265 | if (rc == 0) { | 265 | if (rc == 0) { |
266 | dev_dbg(&left->dev, "peered to %s\n", dev_name(&right->dev)); | 266 | dev_dbg(&left->dev, "peered to %s\n", dev_name(&right->dev)); |
267 | } else { | 267 | } else { |
268 | dev_warn(&left->dev, "failed to peer to %s (%d)\n", | 268 | dev_dbg(&left->dev, "failed to peer to %s (%d)\n", |
269 | dev_name(&right->dev), rc); | 269 | dev_name(&right->dev), rc); |
270 | pr_warn_once("usb: port power management may be unreliable\n"); | 270 | pr_warn_once("usb: port power management may be unreliable\n"); |
271 | usb_port_block_power_off = 1; | 271 | usb_port_block_power_off = 1; |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index f5a381945db2..6dc810bce295 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
125 | { USB_DEVICE(0x04f3, 0x016f), .driver_info = | 125 | { USB_DEVICE(0x04f3, 0x016f), .driver_info = |
126 | USB_QUIRK_DEVICE_QUALIFIER }, | 126 | USB_QUIRK_DEVICE_QUALIFIER }, |
127 | 127 | ||
128 | { USB_DEVICE(0x04f3, 0x21b8), .driver_info = | ||
129 | USB_QUIRK_DEVICE_QUALIFIER }, | ||
130 | |||
128 | /* Roland SC-8820 */ | 131 | /* Roland SC-8820 */ |
129 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, | 132 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, |
130 | 133 | ||
@@ -199,6 +202,12 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
199 | { USB_DEVICE(0x1a0a, 0x0200), .driver_info = | 202 | { USB_DEVICE(0x1a0a, 0x0200), .driver_info = |
200 | USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, | 203 | USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, |
201 | 204 | ||
205 | /* Blackmagic Design Intensity Shuttle */ | ||
206 | { USB_DEVICE(0x1edb, 0xbd3b), .driver_info = USB_QUIRK_NO_LPM }, | ||
207 | |||
208 | /* Blackmagic Design UltraStudio SDI */ | ||
209 | { USB_DEVICE(0x1edb, 0xbd4f), .driver_info = USB_QUIRK_NO_LPM }, | ||
210 | |||
202 | { } /* terminating entry must be last */ | 211 | { } /* terminating entry must be last */ |
203 | }; | 212 | }; |
204 | 213 | ||
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index e61d773cf65e..39c1cbf0e75d 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c | |||
@@ -125,9 +125,11 @@ static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg) | |||
125 | if (ret) | 125 | if (ret) |
126 | return ret; | 126 | return ret; |
127 | 127 | ||
128 | ret = clk_prepare_enable(hsotg->clk); | 128 | if (hsotg->clk) { |
129 | if (ret) | 129 | ret = clk_prepare_enable(hsotg->clk); |
130 | return ret; | 130 | if (ret) |
131 | return ret; | ||
132 | } | ||
131 | 133 | ||
132 | if (hsotg->uphy) | 134 | if (hsotg->uphy) |
133 | ret = usb_phy_init(hsotg->uphy); | 135 | ret = usb_phy_init(hsotg->uphy); |
@@ -175,7 +177,8 @@ static int __dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) | |||
175 | if (ret) | 177 | if (ret) |
176 | return ret; | 178 | return ret; |
177 | 179 | ||
178 | clk_disable_unprepare(hsotg->clk); | 180 | if (hsotg->clk) |
181 | clk_disable_unprepare(hsotg->clk); | ||
179 | 182 | ||
180 | ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), | 183 | ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), |
181 | hsotg->supplies); | 184 | hsotg->supplies); |
@@ -212,14 +215,41 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) | |||
212 | */ | 215 | */ |
213 | hsotg->phy = devm_phy_get(hsotg->dev, "usb2-phy"); | 216 | hsotg->phy = devm_phy_get(hsotg->dev, "usb2-phy"); |
214 | if (IS_ERR(hsotg->phy)) { | 217 | if (IS_ERR(hsotg->phy)) { |
215 | hsotg->phy = NULL; | 218 | ret = PTR_ERR(hsotg->phy); |
219 | switch (ret) { | ||
220 | case -ENODEV: | ||
221 | case -ENOSYS: | ||
222 | hsotg->phy = NULL; | ||
223 | break; | ||
224 | case -EPROBE_DEFER: | ||
225 | return ret; | ||
226 | default: | ||
227 | dev_err(hsotg->dev, "error getting phy %d\n", ret); | ||
228 | return ret; | ||
229 | } | ||
230 | } | ||
231 | |||
232 | if (!hsotg->phy) { | ||
216 | hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2); | 233 | hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2); |
217 | if (IS_ERR(hsotg->uphy)) | 234 | if (IS_ERR(hsotg->uphy)) { |
218 | hsotg->uphy = NULL; | 235 | ret = PTR_ERR(hsotg->uphy); |
219 | else | 236 | switch (ret) { |
220 | hsotg->plat = dev_get_platdata(hsotg->dev); | 237 | case -ENODEV: |
238 | case -ENXIO: | ||
239 | hsotg->uphy = NULL; | ||
240 | break; | ||
241 | case -EPROBE_DEFER: | ||
242 | return ret; | ||
243 | default: | ||
244 | dev_err(hsotg->dev, "error getting usb phy %d\n", | ||
245 | ret); | ||
246 | return ret; | ||
247 | } | ||
248 | } | ||
221 | } | 249 | } |
222 | 250 | ||
251 | hsotg->plat = dev_get_platdata(hsotg->dev); | ||
252 | |||
223 | if (hsotg->phy) { | 253 | if (hsotg->phy) { |
224 | /* | 254 | /* |
225 | * If using the generic PHY framework, check if the PHY bus | 255 | * If using the generic PHY framework, check if the PHY bus |
@@ -229,11 +259,6 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) | |||
229 | hsotg->phyif = GUSBCFG_PHYIF8; | 259 | hsotg->phyif = GUSBCFG_PHYIF8; |
230 | } | 260 | } |
231 | 261 | ||
232 | if (!hsotg->phy && !hsotg->uphy && !hsotg->plat) { | ||
233 | dev_err(hsotg->dev, "no platform data or transceiver defined\n"); | ||
234 | return -EPROBE_DEFER; | ||
235 | } | ||
236 | |||
237 | /* Clock */ | 262 | /* Clock */ |
238 | hsotg->clk = devm_clk_get(hsotg->dev, "otg"); | 263 | hsotg->clk = devm_clk_get(hsotg->dev, "otg"); |
239 | if (IS_ERR(hsotg->clk)) { | 264 | if (IS_ERR(hsotg->clk)) { |
@@ -342,20 +367,6 @@ static int dwc2_driver_probe(struct platform_device *dev) | |||
342 | if (retval) | 367 | if (retval) |
343 | return retval; | 368 | return retval; |
344 | 369 | ||
345 | irq = platform_get_irq(dev, 0); | ||
346 | if (irq < 0) { | ||
347 | dev_err(&dev->dev, "missing IRQ resource\n"); | ||
348 | return irq; | ||
349 | } | ||
350 | |||
351 | dev_dbg(hsotg->dev, "registering common handler for irq%d\n", | ||
352 | irq); | ||
353 | retval = devm_request_irq(hsotg->dev, irq, | ||
354 | dwc2_handle_common_intr, IRQF_SHARED, | ||
355 | dev_name(hsotg->dev), hsotg); | ||
356 | if (retval) | ||
357 | return retval; | ||
358 | |||
359 | res = platform_get_resource(dev, IORESOURCE_MEM, 0); | 370 | res = platform_get_resource(dev, IORESOURCE_MEM, 0); |
360 | hsotg->regs = devm_ioremap_resource(&dev->dev, res); | 371 | hsotg->regs = devm_ioremap_resource(&dev->dev, res); |
361 | if (IS_ERR(hsotg->regs)) | 372 | if (IS_ERR(hsotg->regs)) |
@@ -390,6 +401,20 @@ static int dwc2_driver_probe(struct platform_device *dev) | |||
390 | 401 | ||
391 | dwc2_set_all_params(hsotg->core_params, -1); | 402 | dwc2_set_all_params(hsotg->core_params, -1); |
392 | 403 | ||
404 | irq = platform_get_irq(dev, 0); | ||
405 | if (irq < 0) { | ||
406 | dev_err(&dev->dev, "missing IRQ resource\n"); | ||
407 | return irq; | ||
408 | } | ||
409 | |||
410 | dev_dbg(hsotg->dev, "registering common handler for irq%d\n", | ||
411 | irq); | ||
412 | retval = devm_request_irq(hsotg->dev, irq, | ||
413 | dwc2_handle_common_intr, IRQF_SHARED, | ||
414 | dev_name(hsotg->dev), hsotg); | ||
415 | if (retval) | ||
416 | return retval; | ||
417 | |||
393 | retval = dwc2_lowlevel_hw_enable(hsotg); | 418 | retval = dwc2_lowlevel_hw_enable(hsotg); |
394 | if (retval) | 419 | if (retval) |
395 | return retval; | 420 | return retval; |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index e24a01cc98df..a58376fd65fe 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -1078,6 +1078,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) | |||
1078 | * little bit faster. | 1078 | * little bit faster. |
1079 | */ | 1079 | */ |
1080 | if (!usb_endpoint_xfer_isoc(dep->endpoint.desc) && | 1080 | if (!usb_endpoint_xfer_isoc(dep->endpoint.desc) && |
1081 | !usb_endpoint_xfer_int(dep->endpoint.desc) && | ||
1081 | !(dep->flags & DWC3_EP_BUSY)) { | 1082 | !(dep->flags & DWC3_EP_BUSY)) { |
1082 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); | 1083 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); |
1083 | goto out; | 1084 | goto out; |
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index adc6d52efa46..cf43e9e18368 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c | |||
@@ -423,7 +423,7 @@ static ssize_t __ffs_ep0_read_events(struct ffs_data *ffs, char __user *buf, | |||
423 | spin_unlock_irq(&ffs->ev.waitq.lock); | 423 | spin_unlock_irq(&ffs->ev.waitq.lock); |
424 | mutex_unlock(&ffs->mutex); | 424 | mutex_unlock(&ffs->mutex); |
425 | 425 | ||
426 | return unlikely(__copy_to_user(buf, events, size)) ? -EFAULT : size; | 426 | return unlikely(copy_to_user(buf, events, size)) ? -EFAULT : size; |
427 | } | 427 | } |
428 | 428 | ||
429 | static ssize_t ffs_ep0_read(struct file *file, char __user *buf, | 429 | static ssize_t ffs_ep0_read(struct file *file, char __user *buf, |
@@ -513,7 +513,7 @@ static ssize_t ffs_ep0_read(struct file *file, char __user *buf, | |||
513 | 513 | ||
514 | /* unlocks spinlock */ | 514 | /* unlocks spinlock */ |
515 | ret = __ffs_ep0_queue_wait(ffs, data, len); | 515 | ret = __ffs_ep0_queue_wait(ffs, data, len); |
516 | if (likely(ret > 0) && unlikely(__copy_to_user(buf, data, len))) | 516 | if (likely(ret > 0) && unlikely(copy_to_user(buf, data, len))) |
517 | ret = -EFAULT; | 517 | ret = -EFAULT; |
518 | goto done_mutex; | 518 | goto done_mutex; |
519 | 519 | ||
@@ -3493,7 +3493,7 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len) | |||
3493 | if (unlikely(!data)) | 3493 | if (unlikely(!data)) |
3494 | return ERR_PTR(-ENOMEM); | 3494 | return ERR_PTR(-ENOMEM); |
3495 | 3495 | ||
3496 | if (unlikely(__copy_from_user(data, buf, len))) { | 3496 | if (unlikely(copy_from_user(data, buf, len))) { |
3497 | kfree(data); | 3497 | kfree(data); |
3498 | return ERR_PTR(-EFAULT); | 3498 | return ERR_PTR(-EFAULT); |
3499 | } | 3499 | } |
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c index 42acb45e1ab4..898a570319f1 100644 --- a/drivers/usb/gadget/function/f_midi.c +++ b/drivers/usb/gadget/function/f_midi.c | |||
@@ -370,6 +370,7 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt) | |||
370 | if (err) { | 370 | if (err) { |
371 | ERROR(midi, "%s queue req: %d\n", | 371 | ERROR(midi, "%s queue req: %d\n", |
372 | midi->out_ep->name, err); | 372 | midi->out_ep->name, err); |
373 | free_ep_req(midi->out_ep, req); | ||
373 | } | 374 | } |
374 | } | 375 | } |
375 | 376 | ||
@@ -545,7 +546,7 @@ static void f_midi_transmit(struct f_midi *midi, struct usb_request *req) | |||
545 | } | 546 | } |
546 | } | 547 | } |
547 | 548 | ||
548 | if (req->length > 0) { | 549 | if (req->length > 0 && ep->enabled) { |
549 | int err; | 550 | int err; |
550 | 551 | ||
551 | err = usb_ep_queue(ep, req, GFP_ATOMIC); | 552 | err = usb_ep_queue(ep, req, GFP_ATOMIC); |
diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c index 289ebca316d3..ad8c9b05572d 100644 --- a/drivers/usb/gadget/function/uvc_configfs.c +++ b/drivers/usb/gadget/function/uvc_configfs.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #define UVC_ATTR(prefix, cname, aname) \ | 20 | #define UVC_ATTR(prefix, cname, aname) \ |
21 | static struct configfs_attribute prefix##attr_##cname = { \ | 21 | static struct configfs_attribute prefix##attr_##cname = { \ |
22 | .ca_name = __stringify(aname), \ | 22 | .ca_name = __stringify(aname), \ |
23 | .ca_mode = S_IRUGO, \ | 23 | .ca_mode = S_IRUGO | S_IWUGO, \ |
24 | .ca_owner = THIS_MODULE, \ | 24 | .ca_owner = THIS_MODULE, \ |
25 | .show = prefix##cname##_show, \ | 25 | .show = prefix##cname##_show, \ |
26 | .store = prefix##cname##_store, \ | 26 | .store = prefix##cname##_store, \ |
diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c index 670ac0b12f00..001a3b74a993 100644 --- a/drivers/usb/gadget/udc/pxa27x_udc.c +++ b/drivers/usb/gadget/udc/pxa27x_udc.c | |||
@@ -2536,6 +2536,9 @@ static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state) | |||
2536 | udc->pullup_resume = udc->pullup_on; | 2536 | udc->pullup_resume = udc->pullup_on; |
2537 | dplus_pullup(udc, 0); | 2537 | dplus_pullup(udc, 0); |
2538 | 2538 | ||
2539 | if (udc->driver) | ||
2540 | udc->driver->disconnect(&udc->gadget); | ||
2541 | |||
2539 | return 0; | 2542 | return 0; |
2540 | } | 2543 | } |
2541 | 2544 | ||
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 342ffd140122..8c6e15bd6ff0 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c | |||
@@ -473,6 +473,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) | |||
473 | if (!pdata) | 473 | if (!pdata) |
474 | return -ENOMEM; | 474 | return -ENOMEM; |
475 | 475 | ||
476 | pdev->dev.platform_data = pdata; | ||
477 | |||
476 | if (!of_property_read_u32(np, "num-ports", &ports)) | 478 | if (!of_property_read_u32(np, "num-ports", &ports)) |
477 | pdata->ports = ports; | 479 | pdata->ports = ports; |
478 | 480 | ||
@@ -483,6 +485,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) | |||
483 | */ | 485 | */ |
484 | if (i >= pdata->ports) { | 486 | if (i >= pdata->ports) { |
485 | pdata->vbus_pin[i] = -EINVAL; | 487 | pdata->vbus_pin[i] = -EINVAL; |
488 | pdata->overcurrent_pin[i] = -EINVAL; | ||
486 | continue; | 489 | continue; |
487 | } | 490 | } |
488 | 491 | ||
@@ -513,10 +516,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) | |||
513 | } | 516 | } |
514 | 517 | ||
515 | at91_for_each_port(i) { | 518 | at91_for_each_port(i) { |
516 | if (i >= pdata->ports) { | 519 | if (i >= pdata->ports) |
517 | pdata->overcurrent_pin[i] = -EINVAL; | 520 | break; |
518 | continue; | ||
519 | } | ||
520 | 521 | ||
521 | pdata->overcurrent_pin[i] = | 522 | pdata->overcurrent_pin[i] = |
522 | of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags); | 523 | of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags); |
@@ -552,8 +553,6 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) | |||
552 | } | 553 | } |
553 | } | 554 | } |
554 | 555 | ||
555 | pdev->dev.platform_data = pdata; | ||
556 | |||
557 | device_init_wakeup(&pdev->dev, 1); | 556 | device_init_wakeup(&pdev->dev, 1); |
558 | return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); | 557 | return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); |
559 | } | 558 | } |
diff --git a/drivers/usb/host/whci/qset.c b/drivers/usb/host/whci/qset.c index dc31c425ce01..9f1c0538b211 100644 --- a/drivers/usb/host/whci/qset.c +++ b/drivers/usb/host/whci/qset.c | |||
@@ -377,6 +377,10 @@ static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_f | |||
377 | if (std->pl_virt == NULL) | 377 | if (std->pl_virt == NULL) |
378 | return -ENOMEM; | 378 | return -ENOMEM; |
379 | std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE); | 379 | std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE); |
380 | if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) { | ||
381 | kfree(std->pl_virt); | ||
382 | return -EFAULT; | ||
383 | } | ||
380 | 384 | ||
381 | for (p = 0; p < std->num_pointers; p++) { | 385 | for (p = 0; p < std->num_pointers; p++) { |
382 | std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); | 386 | std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr); |
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 0230965fb78c..f980c239eded 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c | |||
@@ -733,8 +733,30 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, | |||
733 | if ((raw_port_status & PORT_RESET) || | 733 | if ((raw_port_status & PORT_RESET) || |
734 | !(raw_port_status & PORT_PE)) | 734 | !(raw_port_status & PORT_PE)) |
735 | return 0xffffffff; | 735 | return 0xffffffff; |
736 | if (time_after_eq(jiffies, | 736 | /* did port event handler already start resume timing? */ |
737 | bus_state->resume_done[wIndex])) { | 737 | if (!bus_state->resume_done[wIndex]) { |
738 | /* If not, maybe we are in a host initated resume? */ | ||
739 | if (test_bit(wIndex, &bus_state->resuming_ports)) { | ||
740 | /* Host initated resume doesn't time the resume | ||
741 | * signalling using resume_done[]. | ||
742 | * It manually sets RESUME state, sleeps 20ms | ||
743 | * and sets U0 state. This should probably be | ||
744 | * changed, but not right now. | ||
745 | */ | ||
746 | } else { | ||
747 | /* port resume was discovered now and here, | ||
748 | * start resume timing | ||
749 | */ | ||
750 | unsigned long timeout = jiffies + | ||
751 | msecs_to_jiffies(USB_RESUME_TIMEOUT); | ||
752 | |||
753 | set_bit(wIndex, &bus_state->resuming_ports); | ||
754 | bus_state->resume_done[wIndex] = timeout; | ||
755 | mod_timer(&hcd->rh_timer, timeout); | ||
756 | } | ||
757 | /* Has resume been signalled for USB_RESUME_TIME yet? */ | ||
758 | } else if (time_after_eq(jiffies, | ||
759 | bus_state->resume_done[wIndex])) { | ||
738 | int time_left; | 760 | int time_left; |
739 | 761 | ||
740 | xhci_dbg(xhci, "Resume USB2 port %d\n", | 762 | xhci_dbg(xhci, "Resume USB2 port %d\n", |
@@ -775,13 +797,26 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, | |||
775 | } else { | 797 | } else { |
776 | /* | 798 | /* |
777 | * The resume has been signaling for less than | 799 | * The resume has been signaling for less than |
778 | * 20ms. Report the port status as SUSPEND, | 800 | * USB_RESUME_TIME. Report the port status as SUSPEND, |
779 | * let the usbcore check port status again | 801 | * let the usbcore check port status again and clear |
780 | * and clear resume signaling later. | 802 | * resume signaling later. |
781 | */ | 803 | */ |
782 | status |= USB_PORT_STAT_SUSPEND; | 804 | status |= USB_PORT_STAT_SUSPEND; |
783 | } | 805 | } |
784 | } | 806 | } |
807 | /* | ||
808 | * Clear stale usb2 resume signalling variables in case port changed | ||
809 | * state during resume signalling. For example on error | ||
810 | */ | ||
811 | if ((bus_state->resume_done[wIndex] || | ||
812 | test_bit(wIndex, &bus_state->resuming_ports)) && | ||
813 | (raw_port_status & PORT_PLS_MASK) != XDEV_U3 && | ||
814 | (raw_port_status & PORT_PLS_MASK) != XDEV_RESUME) { | ||
815 | bus_state->resume_done[wIndex] = 0; | ||
816 | clear_bit(wIndex, &bus_state->resuming_ports); | ||
817 | } | ||
818 | |||
819 | |||
785 | if ((raw_port_status & PORT_PLS_MASK) == XDEV_U0 && | 820 | if ((raw_port_status & PORT_PLS_MASK) == XDEV_U0 && |
786 | (raw_port_status & PORT_POWER)) { | 821 | (raw_port_status & PORT_POWER)) { |
787 | if (bus_state->suspended_ports & (1 << wIndex)) { | 822 | if (bus_state->suspended_ports & (1 << wIndex)) { |
@@ -1115,6 +1150,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | |||
1115 | if ((temp & PORT_PE) == 0) | 1150 | if ((temp & PORT_PE) == 0) |
1116 | goto error; | 1151 | goto error; |
1117 | 1152 | ||
1153 | set_bit(wIndex, &bus_state->resuming_ports); | ||
1118 | xhci_set_link_state(xhci, port_array, wIndex, | 1154 | xhci_set_link_state(xhci, port_array, wIndex, |
1119 | XDEV_RESUME); | 1155 | XDEV_RESUME); |
1120 | spin_unlock_irqrestore(&xhci->lock, flags); | 1156 | spin_unlock_irqrestore(&xhci->lock, flags); |
@@ -1122,6 +1158,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | |||
1122 | spin_lock_irqsave(&xhci->lock, flags); | 1158 | spin_lock_irqsave(&xhci->lock, flags); |
1123 | xhci_set_link_state(xhci, port_array, wIndex, | 1159 | xhci_set_link_state(xhci, port_array, wIndex, |
1124 | XDEV_U0); | 1160 | XDEV_U0); |
1161 | clear_bit(wIndex, &bus_state->resuming_ports); | ||
1125 | } | 1162 | } |
1126 | bus_state->port_c_suspend |= 1 << wIndex; | 1163 | bus_state->port_c_suspend |= 1 << wIndex; |
1127 | 1164 | ||
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 17f6897acde2..c62109091d12 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -188,10 +188,14 @@ static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) | |||
188 | 0xb7, 0x0c, 0x34, 0xac, 0x01, 0xe9, 0xbf, 0x45, | 188 | 0xb7, 0x0c, 0x34, 0xac, 0x01, 0xe9, 0xbf, 0x45, |
189 | 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23, | 189 | 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23, |
190 | }; | 190 | }; |
191 | acpi_evaluate_dsm(ACPI_HANDLE(&dev->dev), intel_dsm_uuid, 3, 1, NULL); | 191 | union acpi_object *obj; |
192 | |||
193 | obj = acpi_evaluate_dsm(ACPI_HANDLE(&dev->dev), intel_dsm_uuid, 3, 1, | ||
194 | NULL); | ||
195 | ACPI_FREE(obj); | ||
192 | } | 196 | } |
193 | #else | 197 | #else |
194 | static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } | 198 | static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } |
195 | #endif /* CONFIG_ACPI */ | 199 | #endif /* CONFIG_ACPI */ |
196 | 200 | ||
197 | /* called during probe() after chip reset completes */ | 201 | /* called during probe() after chip reset completes */ |
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 6c5e8133cf87..eeaa6c6bd540 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
@@ -1583,7 +1583,8 @@ static void handle_port_status(struct xhci_hcd *xhci, | |||
1583 | */ | 1583 | */ |
1584 | bogus_port_status = true; | 1584 | bogus_port_status = true; |
1585 | goto cleanup; | 1585 | goto cleanup; |
1586 | } else { | 1586 | } else if (!test_bit(faked_port_index, |
1587 | &bus_state->resuming_ports)) { | ||
1587 | xhci_dbg(xhci, "resume HS port %d\n", port_id); | 1588 | xhci_dbg(xhci, "resume HS port %d\n", port_id); |
1588 | bus_state->resume_done[faked_port_index] = jiffies + | 1589 | bus_state->resume_done[faked_port_index] = jiffies + |
1589 | msecs_to_jiffies(USB_RESUME_TIMEOUT); | 1590 | msecs_to_jiffies(USB_RESUME_TIMEOUT); |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index dfa44d3e8eee..3f912705dcef 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -4778,8 +4778,16 @@ int xhci_update_hub_device(struct usb_hcd *hcd, struct usb_device *hdev, | |||
4778 | ctrl_ctx->add_flags |= cpu_to_le32(SLOT_FLAG); | 4778 | ctrl_ctx->add_flags |= cpu_to_le32(SLOT_FLAG); |
4779 | slot_ctx = xhci_get_slot_ctx(xhci, config_cmd->in_ctx); | 4779 | slot_ctx = xhci_get_slot_ctx(xhci, config_cmd->in_ctx); |
4780 | slot_ctx->dev_info |= cpu_to_le32(DEV_HUB); | 4780 | slot_ctx->dev_info |= cpu_to_le32(DEV_HUB); |
4781 | /* | ||
4782 | * refer to section 6.2.2: MTT should be 0 for full speed hub, | ||
4783 | * but it may be already set to 1 when setup an xHCI virtual | ||
4784 | * device, so clear it anyway. | ||
4785 | */ | ||
4781 | if (tt->multi) | 4786 | if (tt->multi) |
4782 | slot_ctx->dev_info |= cpu_to_le32(DEV_MTT); | 4787 | slot_ctx->dev_info |= cpu_to_le32(DEV_MTT); |
4788 | else if (hdev->speed == USB_SPEED_FULL) | ||
4789 | slot_ctx->dev_info &= cpu_to_le32(~DEV_MTT); | ||
4790 | |||
4783 | if (xhci->hci_version > 0x95) { | 4791 | if (xhci->hci_version > 0x95) { |
4784 | xhci_dbg(xhci, "xHCI version %x needs hub " | 4792 | xhci_dbg(xhci, "xHCI version %x needs hub " |
4785 | "TT think time and number of ports\n", | 4793 | "TT think time and number of ports\n", |
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index 1f2037bbeb0d..45c83baf675d 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig | |||
@@ -159,7 +159,7 @@ config USB_TI_CPPI_DMA | |||
159 | 159 | ||
160 | config USB_TI_CPPI41_DMA | 160 | config USB_TI_CPPI41_DMA |
161 | bool 'TI CPPI 4.1 (AM335x)' | 161 | bool 'TI CPPI 4.1 (AM335x)' |
162 | depends on ARCH_OMAP | 162 | depends on ARCH_OMAP && DMADEVICES |
163 | select TI_CPPI41 | 163 | select TI_CPPI41 |
164 | 164 | ||
165 | config USB_TUSB_OMAP_DMA | 165 | config USB_TUSB_OMAP_DMA |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 18cfc0a361cb..ee9ff7028b92 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -2017,7 +2017,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2017 | /* We need musb_read/write functions initialized for PM */ | 2017 | /* We need musb_read/write functions initialized for PM */ |
2018 | pm_runtime_use_autosuspend(musb->controller); | 2018 | pm_runtime_use_autosuspend(musb->controller); |
2019 | pm_runtime_set_autosuspend_delay(musb->controller, 200); | 2019 | pm_runtime_set_autosuspend_delay(musb->controller, 200); |
2020 | pm_runtime_irq_safe(musb->controller); | ||
2021 | pm_runtime_enable(musb->controller); | 2020 | pm_runtime_enable(musb->controller); |
2022 | 2021 | ||
2023 | /* The musb_platform_init() call: | 2022 | /* The musb_platform_init() call: |
@@ -2095,6 +2094,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2095 | #ifndef CONFIG_MUSB_PIO_ONLY | 2094 | #ifndef CONFIG_MUSB_PIO_ONLY |
2096 | if (!musb->ops->dma_init || !musb->ops->dma_exit) { | 2095 | if (!musb->ops->dma_init || !musb->ops->dma_exit) { |
2097 | dev_err(dev, "DMA controller not set\n"); | 2096 | dev_err(dev, "DMA controller not set\n"); |
2097 | status = -ENODEV; | ||
2098 | goto fail2; | 2098 | goto fail2; |
2099 | } | 2099 | } |
2100 | musb_dma_controller_create = musb->ops->dma_init; | 2100 | musb_dma_controller_create = musb->ops->dma_init; |
@@ -2218,6 +2218,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2218 | 2218 | ||
2219 | pm_runtime_put(musb->controller); | 2219 | pm_runtime_put(musb->controller); |
2220 | 2220 | ||
2221 | /* | ||
2222 | * For why this is currently needed, see commit 3e43a0725637 | ||
2223 | * ("usb: musb: core: add pm_runtime_irq_safe()") | ||
2224 | */ | ||
2225 | pm_runtime_irq_safe(musb->controller); | ||
2226 | |||
2221 | return 0; | 2227 | return 0; |
2222 | 2228 | ||
2223 | fail5: | 2229 | fail5: |
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c index 80eb991c2506..0d19a6d61a71 100644 --- a/drivers/usb/phy/phy-msm-usb.c +++ b/drivers/usb/phy/phy-msm-usb.c | |||
@@ -1506,7 +1506,6 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg) | |||
1506 | { | 1506 | { |
1507 | struct msm_otg_platform_data *pdata; | 1507 | struct msm_otg_platform_data *pdata; |
1508 | struct extcon_dev *ext_id, *ext_vbus; | 1508 | struct extcon_dev *ext_id, *ext_vbus; |
1509 | const struct of_device_id *id; | ||
1510 | struct device_node *node = pdev->dev.of_node; | 1509 | struct device_node *node = pdev->dev.of_node; |
1511 | struct property *prop; | 1510 | struct property *prop; |
1512 | int len, ret, words; | 1511 | int len, ret, words; |
@@ -1518,8 +1517,9 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg) | |||
1518 | 1517 | ||
1519 | motg->pdata = pdata; | 1518 | motg->pdata = pdata; |
1520 | 1519 | ||
1521 | id = of_match_device(msm_otg_dt_match, &pdev->dev); | 1520 | pdata->phy_type = (enum msm_usb_phy_type)of_device_get_match_data(&pdev->dev); |
1522 | pdata->phy_type = (enum msm_usb_phy_type) id->data; | 1521 | if (!pdata->phy_type) |
1522 | return 1; | ||
1523 | 1523 | ||
1524 | motg->link_rst = devm_reset_control_get(&pdev->dev, "link"); | 1524 | motg->link_rst = devm_reset_control_get(&pdev->dev, "link"); |
1525 | if (IS_ERR(motg->link_rst)) | 1525 | if (IS_ERR(motg->link_rst)) |
diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c index b7536af777ab..c2936dc48ca7 100644 --- a/drivers/usb/phy/phy-mxs-usb.c +++ b/drivers/usb/phy/phy-mxs-usb.c | |||
@@ -143,12 +143,17 @@ static const struct mxs_phy_data imx6sx_phy_data = { | |||
143 | .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS, | 143 | .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS, |
144 | }; | 144 | }; |
145 | 145 | ||
146 | static const struct mxs_phy_data imx6ul_phy_data = { | ||
147 | .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS, | ||
148 | }; | ||
149 | |||
146 | static const struct of_device_id mxs_phy_dt_ids[] = { | 150 | static const struct of_device_id mxs_phy_dt_ids[] = { |
147 | { .compatible = "fsl,imx6sx-usbphy", .data = &imx6sx_phy_data, }, | 151 | { .compatible = "fsl,imx6sx-usbphy", .data = &imx6sx_phy_data, }, |
148 | { .compatible = "fsl,imx6sl-usbphy", .data = &imx6sl_phy_data, }, | 152 | { .compatible = "fsl,imx6sl-usbphy", .data = &imx6sl_phy_data, }, |
149 | { .compatible = "fsl,imx6q-usbphy", .data = &imx6q_phy_data, }, | 153 | { .compatible = "fsl,imx6q-usbphy", .data = &imx6q_phy_data, }, |
150 | { .compatible = "fsl,imx23-usbphy", .data = &imx23_phy_data, }, | 154 | { .compatible = "fsl,imx23-usbphy", .data = &imx23_phy_data, }, |
151 | { .compatible = "fsl,vf610-usbphy", .data = &vf610_phy_data, }, | 155 | { .compatible = "fsl,vf610-usbphy", .data = &vf610_phy_data, }, |
156 | { .compatible = "fsl,imx6ul-usbphy", .data = &imx6ul_phy_data, }, | ||
152 | { /* sentinel */ } | 157 | { /* sentinel */ } |
153 | }; | 158 | }; |
154 | MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids); | 159 | MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids); |
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index de4f97d84a82..8f7a78e70975 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c | |||
@@ -131,7 +131,8 @@ static void __usbhsg_queue_pop(struct usbhsg_uep *uep, | |||
131 | struct device *dev = usbhsg_gpriv_to_dev(gpriv); | 131 | struct device *dev = usbhsg_gpriv_to_dev(gpriv); |
132 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); | 132 | struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); |
133 | 133 | ||
134 | dev_dbg(dev, "pipe %d : queue pop\n", usbhs_pipe_number(pipe)); | 134 | if (pipe) |
135 | dev_dbg(dev, "pipe %d : queue pop\n", usbhs_pipe_number(pipe)); | ||
135 | 136 | ||
136 | ureq->req.status = status; | 137 | ureq->req.status = status; |
137 | spin_unlock(usbhs_priv_to_lock(priv)); | 138 | spin_unlock(usbhs_priv_to_lock(priv)); |
@@ -685,7 +686,13 @@ static int usbhsg_ep_dequeue(struct usb_ep *ep, struct usb_request *req) | |||
685 | struct usbhsg_request *ureq = usbhsg_req_to_ureq(req); | 686 | struct usbhsg_request *ureq = usbhsg_req_to_ureq(req); |
686 | struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep); | 687 | struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep); |
687 | 688 | ||
688 | usbhs_pkt_pop(pipe, usbhsg_ureq_to_pkt(ureq)); | 689 | if (pipe) |
690 | usbhs_pkt_pop(pipe, usbhsg_ureq_to_pkt(ureq)); | ||
691 | |||
692 | /* | ||
693 | * To dequeue a request, this driver should call the usbhsg_queue_pop() | ||
694 | * even if the pipe is NULL. | ||
695 | */ | ||
689 | usbhsg_queue_pop(uep, ureq, -ECONNRESET); | 696 | usbhsg_queue_pop(uep, ureq, -ECONNRESET); |
690 | 697 | ||
691 | return 0; | 698 | return 0; |
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index eac7ccaa3c85..7d4f51a32e66 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c | |||
@@ -132,7 +132,6 @@ static const struct usb_device_id id_table[] = { | |||
132 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | 132 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
133 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | 133 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
134 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ | 134 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ |
135 | { USB_DEVICE(0x10C4, 0xEA80) }, /* Silicon Labs factory default */ | ||
136 | { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */ | 135 | { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */ |
137 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ | 136 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ |
138 | { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */ | 137 | { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */ |
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index f51a5d52c0ed..ec1b8f2c1183 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
@@ -531,7 +531,8 @@ static int ipaq_open(struct tty_struct *tty, | |||
531 | * through. Since this has a reasonably high failure rate, we retry | 531 | * through. Since this has a reasonably high failure rate, we retry |
532 | * several times. | 532 | * several times. |
533 | */ | 533 | */ |
534 | while (retries--) { | 534 | while (retries) { |
535 | retries--; | ||
535 | result = usb_control_msg(serial->dev, | 536 | result = usb_control_msg(serial->dev, |
536 | usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21, | 537 | usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21, |
537 | 0x1, 0, NULL, 0, 100); | 538 | 0x1, 0, NULL, 0, 100); |
diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c index 3658662898fc..a204782ae530 100644 --- a/drivers/usb/serial/usb-serial-simple.c +++ b/drivers/usb/serial/usb-serial-simple.c | |||
@@ -53,6 +53,7 @@ DEVICE(funsoft, FUNSOFT_IDS); | |||
53 | 53 | ||
54 | /* Infineon Flashloader driver */ | 54 | /* Infineon Flashloader driver */ |
55 | #define FLASHLOADER_IDS() \ | 55 | #define FLASHLOADER_IDS() \ |
56 | { USB_DEVICE_INTERFACE_CLASS(0x058b, 0x0041, USB_CLASS_CDC_DATA) }, \ | ||
56 | { USB_DEVICE(0x8087, 0x0716) } | 57 | { USB_DEVICE(0x8087, 0x0716) } |
57 | DEVICE(flashloader, FLASHLOADER_IDS); | 58 | DEVICE(flashloader, FLASHLOADER_IDS); |
58 | 59 | ||
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c index e69151664436..5c66d3f7a6d0 100644 --- a/drivers/usb/storage/uas.c +++ b/drivers/usb/storage/uas.c | |||
@@ -796,6 +796,10 @@ static int uas_slave_configure(struct scsi_device *sdev) | |||
796 | if (devinfo->flags & US_FL_NO_REPORT_OPCODES) | 796 | if (devinfo->flags & US_FL_NO_REPORT_OPCODES) |
797 | sdev->no_report_opcodes = 1; | 797 | sdev->no_report_opcodes = 1; |
798 | 798 | ||
799 | /* A few buggy USB-ATA bridges don't understand FUA */ | ||
800 | if (devinfo->flags & US_FL_BROKEN_FUA) | ||
801 | sdev->broken_fua = 1; | ||
802 | |||
799 | scsi_change_queue_depth(sdev, devinfo->qdepth - 2); | 803 | scsi_change_queue_depth(sdev, devinfo->qdepth - 2); |
800 | return 0; | 804 | return 0; |
801 | } | 805 | } |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 6b2479123de7..7ffe4209067b 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -1987,7 +1987,7 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201, | |||
1987 | US_FL_IGNORE_RESIDUE ), | 1987 | US_FL_IGNORE_RESIDUE ), |
1988 | 1988 | ||
1989 | /* Reported by Michael Büsch <m@bues.ch> */ | 1989 | /* Reported by Michael Büsch <m@bues.ch> */ |
1990 | UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0114, | 1990 | UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116, |
1991 | "JMicron", | 1991 | "JMicron", |
1992 | "USB to ATA/ATAPI Bridge", | 1992 | "USB to ATA/ATAPI Bridge", |
1993 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 1993 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h index c85ea530085f..ccc113e83d88 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h | |||
@@ -132,7 +132,7 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, | |||
132 | "JMicron", | 132 | "JMicron", |
133 | "JMS567", | 133 | "JMS567", |
134 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 134 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
135 | US_FL_NO_REPORT_OPCODES), | 135 | US_FL_BROKEN_FUA | US_FL_NO_REPORT_OPCODES), |
136 | 136 | ||
137 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | 137 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ |
138 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, | 138 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, |