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)
commit4296c70a5ec316903ef037ed15f154dd3d354ad7
tree9e56518a0470c2884420864dda4717cf4bd2d0cb
parent3b9b6acd4798aafe9b9f64ccb7e8eb76f27f904a
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