diff mbox

[U-Boot,01/16] usb: Fix maxpacketsize for first descriptor read for low-speed usb devs

Message ID 1430862979-4684-2-git-send-email-hdegoede@redhat.com
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Hans de Goede May 5, 2015, 9:56 p.m. UTC
This fixes descriptor reading of lowspeed devices through ohci not working.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 common/usb.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

Comments

Marek Vasut May 5, 2015, 10:54 p.m. UTC | #1
On Tuesday, May 05, 2015 at 11:56:04 PM, Hans de Goede wrote:
> This fixes descriptor reading of lowspeed devices through ohci not working.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Acked-by: Marek Vasut <marex@denx.de>

Best regards,
Marek Vasut
Simon Glass May 6, 2015, 9:43 p.m. UTC | #2
On 5 May 2015 at 16:54, Marek Vasut <marex@denx.de> wrote:
> On Tuesday, May 05, 2015 at 11:56:04 PM, Hans de Goede wrote:
>> This fixes descriptor reading of lowspeed devices through ohci not working.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>
> Acked-by: Marek Vasut <marex@denx.de>

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/common/usb.c b/common/usb.c
index 48f0780..4a09583 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -948,13 +948,18 @@  static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
 	 * send 64-byte GET-DEVICE-DESCRIPTOR request.  Since the descriptor is
 	 * only 18 bytes long, this will terminate with a short packet.  But if
 	 * the maxpacket size is 8 or 16 the device may be waiting to transmit
-	 * some more, or keeps on retransmitting the 8 byte header. */
+	 * some more, or keeps on retransmitting the 8 byte header.
+	 */
 
-	dev->descriptor.bMaxPacketSize0 = 64;	    /* Start off at 64 bytes  */
-	/* Default to 64 byte max packet size */
-	dev->maxpacketsize = PACKET_SIZE_64;
-	dev->epmaxpacketin[0] = 64;
-	dev->epmaxpacketout[0] = 64;
+	if (dev->speed == USB_SPEED_LOW) {
+		dev->descriptor.bMaxPacketSize0 = 8;
+		dev->maxpacketsize = PACKET_SIZE_8;
+	} else {
+		dev->descriptor.bMaxPacketSize0 = 64;
+		dev->maxpacketsize = PACKET_SIZE_64;
+	}
+	dev->epmaxpacketin[0] = dev->descriptor.bMaxPacketSize0;
+	dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
 
 	if (do_read) {
 		int err;