aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2022-10-30 23:38:35 +0100
committerMarek Vasut <marex@denx.de>2022-11-03 23:36:48 +0100
commit3406e9d8afcc8ade8cb3e697be2bcf9cc85c9d04 (patch)
treeaaa4ad3aa950591bec8bfa92aa62cdb46d4c7e6b /common
parentf4917b4933458a5e5c6da7e6e2e74137e62cf596 (diff)
downloadu-boot-3406e9d8afcc8ade8cb3e697be2bcf9cc85c9d04.zip
u-boot-3406e9d8afcc8ade8cb3e697be2bcf9cc85c9d04.tar.gz
u-boot-3406e9d8afcc8ade8cb3e697be2bcf9cc85c9d04.tar.bz2
usb: Add 1ms delay after first Get Descriptor request
Logitech Unifying Receiver 046d:c52b bcdDevice 12.10 seems sensitive about the first Get Descriptor request. If there are any other requests in the same microframe, the device reports bogus data, first of the descriptor parts is not sent to the host. Wait over one microframe duration before issuing subsequent requests to avoid probe failure with this device, since it can be used to connect USB keyboards. Signed-off-by: Marek Vasut <marex@denx.de> Tested-by: Janne Grunau <j@jannau.net>
Diffstat (limited to 'common')
-rw-r--r--common/usb.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/common/usb.c b/common/usb.c
index 6fcf1e8..ae9253d 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -999,6 +999,17 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
err = get_descriptor_len(dev, 64, 8);
if (err)
return err;
+
+ /*
+ * Logitech Unifying Receiver 046d:c52b bcdDevice 12.10 seems
+ * sensitive about the first Get Descriptor request. If there
+ * are any other requests in the same microframe, the device
+ * reports bogus data, first of the descriptor parts is not
+ * sent to the host. Wait over one microframe duration here
+ * (1mS for USB 1.x , 125uS for USB 2.0) to avoid triggering
+ * the issue.
+ */
+ mdelay(1);
}
dev->epmaxpacketin[0] = dev->descriptor.bMaxPacketSize0;