]> git.baikalelectronics.ru Git - kernel.git/commit
USB/xHCI: Enable USB 3.0 hub remote wakeup.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Fri, 6 Jan 2012 18:34:31 +0000 (10:34 -0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Tue, 14 Feb 2012 20:12:24 +0000 (12:12 -0800)
commitbcf2019793bc03f02ac49ba847350513229649f2
tree9e56518a0470c2884420864dda4717cf4bd2d0cb
parenta3c5734f06b7e509078b15784f6cadd9783c60d3
USB/xHCI: Enable USB 3.0 hub remote wakeup.

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: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/core/hub.c
drivers/usb/host/xhci-hub.c
include/linux/usb/ch11.h