• Mike Looijmans's avatar
    usb: hub: Cycle HUB power when initialization fails · 973593a9
    Mike Looijmans authored
    Sometimes the USB device gets confused about the state of the initialization and
    the connection fails. In particular, the device thinks that it's already set up
    and running while the host thinks the device still needs to be configured. To
    work around this issue, power-cycle the hub's output to issue a sort of "reset"
    to the device. This makes the device restart its state machine and then the
    initialization succeeds.
    
    This fixes problems where the kernel reports a list of errors like this:
    
    usb 1-1.3: device not accepting address 19, error -71
    
    The end result is a non-functioning device. After this patch, the sequence
    becomes like this:
    
    usb 1-1.3: new high-speed USB device number 18 using ci_hdrc
    usb 1-1.3: device not accepting address 18, error -71
    usb 1-1.3: new high-speed USB device number 19 using ci_hdrc
    usb 1-1.3: device not accepting address 19, error -71
    usb 1-1-port3: attempt power cycle
    usb 1-1.3: new high-speed USB device number 21 using ci_hdrc
    usb-storage 1-1.3:1.2: USB Mass Storage device detected
    Signed-off-by: default avatarMike Looijmans <mike.looijmans@topic.nl>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    973593a9
hub.c 166 KB