linux/drivers/usb/core
Stanislaw Ledwon e171ce5cc6 usb: Add support for root hub port status CAS
commit 8bea2bd37d upstream.

The host controller port status register supports CAS (Cold Attach
Status) bit. This bit could be set when USB3.0 device is connected
when system is in Sx state. When the system wakes to S0 this port
status with CAS bit is reported and this port can't be used by any
device.

When CAS bit is set the port should be reset by warm reset. This
was not supported by xhci driver.

The issue was found when pendrive was connected to suspended
platform. The link state of "Compliance Mode" was reported together
with CAS bit. This link state was also not supported by xhci and
core/hub.c.

The CAS bit is defined only for xhci root hub port and it is
not supported on regular hubs. The link status is used to force
warm reset on port. Make the USB core issue a warm reset when port
is in ether the 'inactive' or 'compliance mode'. Change the xHCI driver
to report 'compliance mode' when the CAS is set. This force warm reset
on the root hub port.

This patch should be backported to stable kernels as old as 3.2, that
contain the commit 10d674a82e "USB: When
hot reset for USB3 fails, try warm reset."

Signed-off-by: Stanislaw Ledwon <staszek.ledwon@linux.intel.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Acked-by: Andiry Xu <andiry.xu@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-07-16 09:04:38 -07:00
..
buffer.c USB: Core: Fix minor coding style issues 2011-01-22 19:35:39 -08:00
config.c usbcore: get BOS descriptor set 2011-09-26 15:51:08 -07:00
devices.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
devio.c USB: Remove races in devio.c 2012-06-01 15:18:22 +08:00
driver.c USB: don't ignore suspend errors for root hubs 2012-04-09 15:36:21 -07:00
endpoint.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
file.c switch device_get_devnode() and ->devnode() to umode_t * 2012-01-03 22:54:55 -05:00
generic.c USB: accept RNDIS configs if there's no alternative 2010-08-10 14:35:43 -07:00
hcd-pci.c USB: add NO_D3_DURING_SLEEP flag and revert 151b612847 2012-06-22 11:37:13 -07:00
hcd.c USB: fix race between root-hub suspend and remote wakeup 2012-04-09 15:43:21 -07:00
hub.c usb: Add support for root hub port status CAS 2012-07-16 09:04:38 -07:00
inode.c simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
Kconfig kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT 2011-01-20 17:02:05 -08:00
Makefile usb: makefile cleanup 2010-10-22 10:22:07 -07:00
message.c USB: fix gathering of interface associations 2012-06-22 11:37:14 -07:00
notify.c usb: Add export.h for EXPORT_SYMBOL/THIS_MODULE where needed 2011-10-31 19:31:25 -04:00
otg_whitelist.h
quirks.c usb: add USB_QUIRK_RESET_RESUME for M-Audio 88es 2012-06-01 15:18:22 +08:00
sysfs.c usb: Add support for indicating whether a port is removable 2012-02-09 08:40:11 -08:00
urb.c usbhid: prevent deadlock during timeout 2012-06-01 15:18:17 +08:00
usb.c USB: cleanup the handling of the PM complete call 2012-01-24 14:23:49 -08:00
usb.h USB: cleanup the handling of the PM complete call 2012-01-24 14:23:49 -08:00