• Alan Stern's avatar
    USB: don't send Set-Interface after reset · 4fe0387a
    Alan Stern authored
    This patch (as1221) changes the way usbcore reinitializes a device
    following a reset or a reset-resume.  Currently we call
    usb_set_interface() for every interface in the active configuration;
    this is to put the interface into the same altsetting as before the
    reset and to make sure that the host's endpoint state matches the
    device's endpoint state.
    
    However, sending a Set-Interface request is a waste of time if an
    interface was already in altsetting 0 before the reset, since it is
    certainly in altsetting 0 afterward.  In addition, many devices can't
    handle Set-Interface requests -- they crash when they receive them.
    
    So instead, the patch adds code to check each interface.  If the
    interface wasn't in altsetting 0 before the reset, we go head with the
    Set-Interface request as before.  But if it was then we skip sending
    the Set-Interface request, and we clear out the host-side endpoint
    state by calling usb_disable_interface() followed by
    usb_enable_interface().
    
    The patch also adds a couple of new comments to explain what's going
    on.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    4fe0387a
hub.c 101 KB