diff options
| author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-10-08 11:30:22 +0000 |
|---|---|---|
| committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-10-08 11:30:22 +0000 |
| commit | c3a38d6c91d5d251dd481bb5bbbbf347f3c54595 (patch) | |
| tree | c431506adfacc145ee2fdd0630c2bb794135e8e6 | |
| parent | eccb2148970790cec6074ef8f274ddce3f44dca2 (diff) | |
Notes
| -rw-r--r-- | sys/dev/usb/usb_request.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c index fbbab17544b4a..36c6a28124c59 100644 --- a/sys/dev/usb/usb_request.c +++ b/sys/dev/usb/usb_request.c @@ -1973,9 +1973,23 @@ usbd_setup_device_desc(struct usb_device *udev, struct mtx *mtx) /* get partial device descriptor, some devices crash on this */ err = usbd_req_get_desc(udev, mtx, NULL, &udev->ddesc, USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0); - if (err != 0) - break; - + if (err != 0) { + DPRINTF("Trying fallback for getting the USB device descriptor\n"); + /* try 8 bytes bMaxPacketSize */ + udev->ddesc.bMaxPacketSize = 8; + /* get full device descriptor */ + err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc); + if (err == 0) + break; + /* try 16 bytes bMaxPacketSize */ + udev->ddesc.bMaxPacketSize = 16; + /* get full device descriptor */ + err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc); + if (err == 0) + break; + /* try 32/64 bytes bMaxPacketSize */ + udev->ddesc.bMaxPacketSize = 32; + } /* get the full device descriptor */ err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc); break; |
