summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2009-01-21 17:12:01 +0100
committerRemy Bohmer <linux@bohmer.net>2009-01-28 19:57:31 +0100
commit597eb28bd9691266b7b804364cda577cdb51d106 (patch)
treee5a2802486bee6d50593c0aff6a8ca36ccef1728 /drivers/usb
parent20cc06611ea33fc0a67a5e56e6476379d2de3091 (diff)
USB: Fix speed detection on EHCI cntr with root hub transaction translators
This patch fixes an issue that the speed of USB devices was not detected correctly on some EHCI controllers. This will be used on the upcoming VCT EHCI support. Signed-off-by: Stefan Roese <sr@denx.de> Signed-off-by: Remy Bohmer <linux@bohmer.net>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/usb_ehci_core.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/usb/usb_ehci_core.c b/drivers/usb/usb_ehci_core.c
index 97367076e2..28962fa026 100644
--- a/drivers/usb/usb_ehci_core.c
+++ b/drivers/usb/usb_ehci_core.c
@@ -546,7 +546,22 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
}
if (reg & EHCI_PS_PP)
tmpbuf[1] |= USB_PORT_STAT_POWER >> 8;
- tmpbuf[1] |= USB_PORT_STAT_HIGH_SPEED >> 8;
+
+ if (ehci_is_TDI()) {
+ switch ((reg >> 26) & 3) {
+ case 0:
+ break;
+ case 1:
+ tmpbuf[1] |= USB_PORT_STAT_LOW_SPEED >> 8;
+ break;
+ case 2:
+ default:
+ tmpbuf[1] |= USB_PORT_STAT_HIGH_SPEED >> 8;
+ break;
+ }
+ } else {
+ tmpbuf[1] |= USB_PORT_STAT_HIGH_SPEED >> 8;
+ }
if (reg & EHCI_PS_CSC)
tmpbuf[2] |= USB_PORT_STAT_C_CONNECTION;