• Alan Stern's avatar
    USB: don't lose mode switch events on suspended devices · 527101ce
    Alan Stern authored
    This patch (as1268) changes the way usbcore handles child devices that
    undergo a disconnection and reconnection while the parent hub is
    suspended.  Currently, if the child isn't enabled for remote wakeup we
    leave it alone, figuring that it will go through a reset-resume when
    somebody tries to use it.
    
    However this isn't a good approach if the reason for the disconnection
    is that the child decided to switch modes or in some other way alter
    its descriptors.  In that case we want to re-enumerate it as soon as
    possible, not wait until somebody forces a reset-resume.
    
    To resolve the issue, this patch treats reconnected suspended child
    devices as though they had requested a remote wakeup, even if they
    weren't enabled for it.  The mode switch or descriptor change will be
    detected during the reset part of the reset-resume, and the device
    will be re-enumerated immediately.
    
    The disadvantage of this change is that it will cause autosuspended
    devices to be resumed when the computer wakes up from a system sleep
    during which the root hub was reset or lost power.  This shouldn't
    matter much; some people would even argue that autosuspended devices
    should _always_ be resumed when the system wakes up!
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Tested-by: default avatar"Yang Fei-AFY095" <fei.yang@motorola.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    527101ce
hub.c 105 KB