summaryrefslogtreecommitdiff
path: root/drivers/usb/core/hcd.c
diff options
context:
space:
mode:
authorSarah Sharp <sarah.a.sharp@linux.intel.com>2012-01-24 23:46:50 +0400
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2012-02-15 00:12:27 +0400
commit72937e1e342f5631d08df4ef0629e55bdcf74c76 (patch)
tree3e8138fbb3746f0c1d7112f67c06b0d424be050a /drivers/usb/core/hcd.c
parent4ee823b83bc9851743fab756c76b27d6a1e2472b (diff)
downloadlinux-72937e1e342f5631d08df4ef0629e55bdcf74c76.tar.xz
USB: Set wakeup bits for all children hubs.
This patch takes care of the race condition between the Function Wake Device Notification and the auto-suspend timeout for this situation: Roothub | (U3) hub A | (U3) hub B | (U3) device C When device C signals a resume, the xHCI driver will set the wakeup_bits for the roothub port that hub A is attached to. However, since USB 3.0 hubs do not set a link state change bit on device-initiated resume, hub A will not indicate a port event when polled. Without this patch, khubd will notice the wakeup-bits are set for the roothub port, it will resume hub A, and then it will poll the events bits for hub A and notice that nothing has changed. Then it will be suspended after 2 seconds. Change hub_activate() to look at the port link state for each USB 3.0 hub port, and set hub->change_bits if the link state is U0, indicating the device has finished resume. Change the resume function called by hub_events(), hub_handle_remote_wakeup(), to check the link status for resume instead of just the port's wakeup_bits. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Diffstat (limited to 'drivers/usb/core/hcd.c')
0 files changed, 0 insertions, 0 deletions