usb: Push USB2 LPM disable on disconnect into USB core.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Tue, 8 Oct 2013 15:28:43 +0000 (08:28 -0700)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Wed, 16 Oct 2013 19:24:21 +0000 (12:24 -0700)
The USB core currently handles enabling and disabling optional USB power
management features during device transitions (device suspend/resume,
driver bind/unbind, device reset, and device disconnect).  Those
optional power features include Latency Tolerance Messaging (LTM),
USB 3.0 Link PM, and USB 2.0 Link PM.

The USB core currently enables LPM on device enumeration and disables
USB 2.0 Link PM when the device is reset.  However, the xHCI driver
disables LPM when the device is disconnected and the device context is
freed.  Push the call up into the USB core, in order to be consistent
with the core handling all power management enabling and disabling.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/core/message.c
drivers/usb/host/xhci.c

index 82927e1ed27d078f513a69727ebf7e55ef885ad8..bb315970e475e3bd90b5985c45a0afc0daf61fd2 100644 (file)
@@ -1182,8 +1182,12 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
                        put_device(&dev->actconfig->interface[i]->dev);
                        dev->actconfig->interface[i] = NULL;
                }
+
+               if (dev->usb2_hw_lpm_enabled == 1)
+                       usb_set_usb2_hardware_lpm(dev, 0);
                usb_unlocked_disable_lpm(dev);
                usb_disable_ltm(dev);
+
                dev->actconfig = NULL;
                if (dev->state == USB_STATE_CONFIGURED)
                        usb_set_device_state(dev, USB_STATE_ADDRESS);
index 0ea253ec813d805af5e0581b55dec164b04ac272..e7571c90c40f56d91db9db6a392997738b3c497f 100644 (file)
@@ -3571,11 +3571,6 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
                del_timer_sync(&virt_dev->eps[i].stop_cmd_timer);
        }
 
-       if (udev->usb2_hw_lpm_enabled) {
-               xhci_set_usb2_hardware_lpm(hcd, udev, 0);
-               udev->usb2_hw_lpm_enabled = 0;
-       }
-
        spin_lock_irqsave(&xhci->lock, flags);
        /* Don't disable the slot if the host controller is dead. */
        state = xhci_readl(xhci, &xhci->op_regs->status);
This page took 0.031899 seconds and 5 git commands to generate.