• Alan Stern's avatar
    USB: improve port transitions when EHCI starts up · 05768918
    Alan Stern authored
    It seems to be getting more common recently for EHCI host controllers
    to be probed after their companion UHCI or OHCI controllers.  This may
    be caused partly by splitting the ehci-pci driver out from ehci-hcd,
    or it may be caused by changes in the way the kernel does driver
    probing.
    
    Regardless, it has a tendency to cause problems.  When an EHCI
    controller is initialized, it takes ownership of all the ports away
    from the companions.  In effect, it forcefully disconnects all the USB
    devices that may already be using a companion controller.
    
    This patch (as1672b) tries to make the transition more orderly by
    deconfiguring the root hubs for all the companion controllers before
    initializing the EHCI controller, and reconfiguring them afterward.
    The result is a soft disconnect rather than a hard one.
    
    Internally, the patch refactors the code involved in associating EHCI
    controllers with their companions.  The old approach, in which a
    single function is called with an argument telling it what to do (the
    companion_action enum), has been replaced with a scheme using multiple
    callback functions, each performing a single task.
    
    This patch won't solve all the problems people encounter when their
    EHCI controllers start up, but it will at least reduce the number of
    error messages generated by the unexpected disconnections.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Tested-by: default avatarJenya Y <jy.gerstmaier@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    05768918
hcd-pci.c 17.2 KB