diff options
author | David Brownell <david-b@pacbell.net> | 2005-06-13 10:15:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-13 11:20:41 -0400 |
commit | c22fa3acbc2ef79ea57217643f6cd6d226963069 (patch) | |
tree | d79cf44149684a0cefc825f1619f0fbd33ea7e59 /drivers/usb | |
parent | c0105338eb4e61e537ca34ae06921177cb6efcf0 (diff) |
[PATCH] spin longer for ehci port reset completion
This makes the EHCI driver spin a bit longer before concluding that the
port reset failed. "Obviously safe."
It allows some devices to enumerate that previously didn't. We've seen
a bunch of these problem reports recently, this will make some go away.
As reported by Michael Zapf <Michael.Zapf@uni-kassel.de>, some EHCI
controllers seem to take forever to finish port resets and produce
"port N reset error -110" type errors. Spinning a bit longer helps.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 429330bc38de..d7b4f7939ded 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
@@ -439,9 +439,12 @@ static int ehci_hub_control ( | |||
439 | /* force reset to complete */ | 439 | /* force reset to complete */ |
440 | writel (temp & ~PORT_RESET, | 440 | writel (temp & ~PORT_RESET, |
441 | &ehci->regs->port_status [wIndex]); | 441 | &ehci->regs->port_status [wIndex]); |
442 | /* REVISIT: some hardware needs 550+ usec to clear | ||
443 | * this bit; seems too long to spin routinely... | ||
444 | */ | ||
442 | retval = handshake ( | 445 | retval = handshake ( |
443 | &ehci->regs->port_status [wIndex], | 446 | &ehci->regs->port_status [wIndex], |
444 | PORT_RESET, 0, 500); | 447 | PORT_RESET, 0, 750); |
445 | if (retval != 0) { | 448 | if (retval != 0) { |
446 | ehci_err (ehci, "port %d reset error %d\n", | 449 | ehci_err (ehci, "port %d reset error %d\n", |
447 | wIndex + 1, retval); | 450 | wIndex + 1, retval); |