|
@@ -1792,14 +1792,15 @@ free_interfaces:
|
|
|
* installed, so that the xHCI driver can recalculate the U1/U2
|
|
|
* timeouts.
|
|
|
*/
|
|
|
- if (usb_disable_lpm(dev)) {
|
|
|
+ if (dev->actconfig && usb_disable_lpm(dev)) {
|
|
|
dev_err(&dev->dev, "%s Failed to disable LPM\n.", __func__);
|
|
|
mutex_unlock(hcd->bandwidth_mutex);
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
|
|
|
if (ret < 0) {
|
|
|
- usb_enable_lpm(dev);
|
|
|
+ if (dev->actconfig)
|
|
|
+ usb_enable_lpm(dev);
|
|
|
mutex_unlock(hcd->bandwidth_mutex);
|
|
|
usb_autosuspend_device(dev);
|
|
|
goto free_interfaces;
|
|
@@ -1819,7 +1820,7 @@ free_interfaces:
|
|
|
if (!cp) {
|
|
|
usb_set_device_state(dev, USB_STATE_ADDRESS);
|
|
|
usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
|
|
|
- usb_enable_lpm(dev);
|
|
|
+ /* Leave LPM disabled while the device is unconfigured. */
|
|
|
mutex_unlock(hcd->bandwidth_mutex);
|
|
|
usb_autosuspend_device(dev);
|
|
|
goto free_interfaces;
|