• Sarah Sharp's avatar
    USB/xHCI: Enable USB 3.0 hub remote wakeup. · 4296c70a
    Sarah Sharp authored
    USB 3.0 hubs have a different remote wakeup policy than USB 2.0 hubs.
    USB 2.0 hubs, once they have remote wakeup enabled, will always send
    remote wakes when anything changes on a port.
    
    However, USB 3.0 hubs have a per-port remote wake up policy that is off
    by default.  The Set Feature remote wake mask can be changed for any
    port, enabling remote wakeup for a connect, disconnect, or overcurrent
    event, much like EHCI and xHCI host controller "wake on" port status
    bits.  The bits are cleared to zero on the initial hub power on, or
    after the hub has been reset.
    
    Without this patch, when a USB 3.0 hub gets suspended, it will not send
    a remote wakeup on device connect or disconnect.  This would show up to
    the user as "dead ports" unless they ran lsusb -v (since newer versions
    of lsusb use the sysfs files, rather than sending control transfers).
    
    Change the hub driver's suspend method to enable remote wake up for
    disconnect, connect, and overcurrent for all ports on the hub.  Modify
    the xHCI driver's roothub code to handle that request, and set the "wake
    on" bits in the port status registers accordingly.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    4296c70a
xhci-hub.c 30.2 KB