25 lines
867 B
Diff
25 lines
867 B
Diff
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
|
|
index c0b6ef8ee5da..f72218c1037e 100644
|
|
--- a/drivers/bluetooth/btusb.c
|
|
+++ b/drivers/bluetooth/btusb.c
|
|
@@ -1366,10 +1366,15 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
|
if (!urb)
|
|
return -ENOMEM;
|
|
|
|
- /* Use maximum HCI Event size so the USB stack handles
|
|
- * ZPL/short-transfer automatically.
|
|
- */
|
|
- size = HCI_MAX_EVENT_SIZE;
|
|
+ if (le16_to_cpu(data->udev->descriptor.idVendor) == 0x0a12 &&
|
|
+ le16_to_cpu(data->udev->descriptor.idProduct) == 0x0001)
|
|
+ /* Fake CSR devices don't seem to support sort-transter */
|
|
+ size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
|
|
+ else
|
|
+ /* Use maximum HCI Event size so the USB stack handles
|
|
+ * ZPL/short-transfer automatically.
|
|
+ */
|
|
+ size = HCI_MAX_EVENT_SIZE;
|
|
|
|
buf = kmalloc(size, mem_flags);
|
|
if (!buf) {
|