• Sarah Sharp's avatar
    USB: Disable LPM while the device is unconfigured. · 9cf65991
    Sarah Sharp authored
    The USB 3.0 Set/Clear Feature U1/U2 Enable cannot be sent to a device in
    the Default or Addressed state.  It can only be sent to a configured
    device.  Change the USB core to initialize the LPM disable count to 1
    (disabled), which reflects this limitation.
    
    Change usb_set_configuration() to ensure that if the device is
    unconfigured on entry, usb_lpm_disable() is not called.  This avoids
    sending the Clear Feature U1/U2 when the device is in the Addressed
    state.  When usb_set_configuration() exits with a successfully installed
    configuration, usb_lpm_enable() will be called.
    
    Once the new configuration is installed, make sure
    usb_set_configuration() only calls usb_enable_lpm() if the device moved
    to the Configured state.  If we have unconfigured the device by sending
    it a Set Configuration for config 0, don't enable LPM.
    
    This commit should be backported to kernels as old as 3.5, that contain
    the commit 8306095f "USB: Disable USB
    3.0 LPM in critical sections."
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Cc: stable@vger.kernel.org
    9cf65991
usb.c 30.1 KB