|
@@ -5326,9 +5326,6 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
|
|
|
if (udev->usb2_hw_lpm_enabled == 1)
|
|
|
usb_set_usb2_hardware_lpm(udev, 0);
|
|
|
|
|
|
- bos = udev->bos;
|
|
|
- udev->bos = NULL;
|
|
|
-
|
|
|
/* Disable LPM and LTM while we reset the device and reinstall the alt
|
|
|
* settings. Device-initiated LPM settings, and system exit latency
|
|
|
* settings are cleared when the device is reset, so we have to set
|
|
@@ -5337,15 +5334,18 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
|
|
|
ret = usb_unlocked_disable_lpm(udev);
|
|
|
if (ret) {
|
|
|
dev_err(&udev->dev, "%s Failed to disable LPM\n.", __func__);
|
|
|
- goto re_enumerate;
|
|
|
+ goto re_enumerate_no_bos;
|
|
|
}
|
|
|
ret = usb_disable_ltm(udev);
|
|
|
if (ret) {
|
|
|
dev_err(&udev->dev, "%s Failed to disable LTM\n.",
|
|
|
__func__);
|
|
|
- goto re_enumerate;
|
|
|
+ goto re_enumerate_no_bos;
|
|
|
}
|
|
|
|
|
|
+ bos = udev->bos;
|
|
|
+ udev->bos = NULL;
|
|
|
+
|
|
|
for (i = 0; i < SET_CONFIG_TRIES; ++i) {
|
|
|
|
|
|
/* ep0 maxpacket size may change; let the HCD know about it.
|
|
@@ -5442,10 +5442,11 @@ done:
|
|
|
return 0;
|
|
|
|
|
|
re_enumerate:
|
|
|
- /* LPM state doesn't matter when we're about to destroy the device. */
|
|
|
- hub_port_logical_disconnect(parent_hub, port1);
|
|
|
usb_release_bos_descriptor(udev);
|
|
|
udev->bos = bos;
|
|
|
+re_enumerate_no_bos:
|
|
|
+ /* LPM state doesn't matter when we're about to destroy the device. */
|
|
|
+ hub_port_logical_disconnect(parent_hub, port1);
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|