From: Hans de Goede Date: Tue, 5 May 2015 21:56:04 +0000 (+0200) Subject: usb: Fix maxpacketsize for first descriptor read for low-speed usb devs X-Git-Tag: v2015.07-rc2~285^2~14 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2b338ef41127351089254b748de5cefd95c3e800;p=oweals%2Fu-boot.git usb: Fix maxpacketsize for first descriptor read for low-speed usb devs This fixes descriptor reading of lowspeed devices through ohci not working. Signed-off-by: Hans de Goede Acked-by: Marek Vasut --- diff --git a/common/usb.c b/common/usb.c index a4820d3e94..1b26bfab36 100644 --- a/common/usb.c +++ b/common/usb.c @@ -946,13 +946,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;