USB layer of U-Boot causes USB protocol errors while using USB memory sticks
authorRemy Bohmer <linux@bohmer.net>
Tue, 16 Sep 2008 12:55:44 +0000 (14:55 +0200)
committerMarkus Klotzbuecher <mk@denx.de>
Wed, 17 Sep 2008 13:41:21 +0000 (15:41 +0200)
commitc9e8436b10cca53fca4904ecbadcd6231ad72c38
tree82c0b1610d3cd0057c65ac3a2a0bdbfa7b0a5cfa
parent6f5794a6f78b313231256958fd73673c6aacc116
USB layer of U-Boot causes USB protocol errors while using USB memory sticks

There are several differences between Linux, Windows and U-boot for initialising the
USB devices. While analysing the behaviour of U-boot it turned out that U-boot does
things really different, and some are wrong (compared to the USB standard).

This patch fixes some errors:
* The NEW_init procedure that was already in the code is good, while the old procedure
  is wrong. See code comments for more info.
* On a Control request the data returned by the device can be more than 8 bytes, while
  the host limits it to 8 bytes. This caused the host to generate a DataOverrun error.
  This results in a lot of USB sticks not being recognised, and the transmission ended
  frequently with a CTL:TIMEOUT Error.
* Added a flag CONFIG_LEGACY_USB_INIT_SEQ to allow users to use the old init procedure.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
Signed-off-by: Markus Klotzbuecher <mk@denx.de>
common/usb.c