USB: Fix speed detection on EHCI cntr with root hub transaction translators
authorStefan Roese <sr@denx.de>
Wed, 21 Jan 2009 16:12:01 +0000 (17:12 +0100)
committerRemy Bohmer <linux@bohmer.net>
Wed, 28 Jan 2009 18:57:31 +0000 (19:57 +0100)
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>
drivers/usb/usb_ehci_core.c

index 97367076e2f8052444ccb8db43f9b837a29a35b0..28962fa0267077dc74ac6bb07cb2c548f3138766 100644 (file)
@@ -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;