diff options
author | Peter Chen <peter.chen@freescale.com> | 2014-01-24 14:59:30 +0800 |
---|---|---|
committer | Peter Chen <peter.chen@freescale.com> | 2014-01-24 17:23:58 +0800 |
commit | 830e4457155d7df2dce35bb7a91fa1f11a34ceca (patch) | |
tree | 1cafa6efd17f9b84b7bbd455493031a5c4286d8a /drivers | |
parent | 93e5d4ce0373789ace11c1e5c5e91cab73790d48 (diff) |
ENGR00296519 USB: EHCI: wait more than 3ms until the device enters full-speed idle
If the high-speed device does not enter full-speed idle after
wakeup on disconnect logic has effected, there will be an
unexpected disconnect wakeup interrupt due to the bus is still SE0.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index c17e60be0665..8cca8e15e76f 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -289,6 +289,15 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) ehci_vdbg (ehci, "port %d, %08x -> %08x\n", port + 1, t1, t2); ehci_writel(ehci, t2, reg); + if ((t2 & PORT_WKDISC_E) + && (ehci_port_speed(ehci, t2) == + USB_PORT_STAT_HIGH_SPEED)) + /* + * If the high-speed device has not switched + * to full-speed idle before WKDISC_E has + * effected, there will be a WKDISC event. + */ + mdelay(4); changed = 1; } } |