aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r--drivers/bluetooth/btusb.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 4cefa91e6c34..411ae9c9b384 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -105,6 +105,12 @@ static struct usb_device_id blacklist_table[] = {
105 /* Atheros AR9285 Malbec with sflash firmware */ 105 /* Atheros AR9285 Malbec with sflash firmware */
106 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, 106 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
107 107
108 /* Atheros 3012 with sflash firmware */
109 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE },
110
111 /* Atheros AR5BBU12 with sflash firmware */
112 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
113
108 /* Broadcom BCM2035 */ 114 /* Broadcom BCM2035 */
109 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, 115 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
110 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, 116 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
@@ -711,15 +717,11 @@ static int btusb_send_frame(struct sk_buff *skb)
711 pipe = usb_sndisocpipe(data->udev, 717 pipe = usb_sndisocpipe(data->udev,
712 data->isoc_tx_ep->bEndpointAddress); 718 data->isoc_tx_ep->bEndpointAddress);
713 719
714 urb->dev = data->udev; 720 usb_fill_int_urb(urb, data->udev, pipe,
715 urb->pipe = pipe; 721 skb->data, skb->len, btusb_isoc_tx_complete,
716 urb->context = skb; 722 skb, data->isoc_tx_ep->bInterval);
717 urb->complete = btusb_isoc_tx_complete;
718 urb->interval = data->isoc_tx_ep->bInterval;
719 723
720 urb->transfer_flags = URB_ISO_ASAP; 724 urb->transfer_flags = URB_ISO_ASAP;
721 urb->transfer_buffer = skb->data;
722 urb->transfer_buffer_length = skb->len;
723 725
724 __fill_isoc_descriptor(urb, skb->len, 726 __fill_isoc_descriptor(urb, skb->len,
725 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize)); 727 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
@@ -829,7 +831,7 @@ static void btusb_work(struct work_struct *work)
829 831
830 if (hdev->conn_hash.sco_num > 0) { 832 if (hdev->conn_hash.sco_num > 0) {
831 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { 833 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
832 err = usb_autopm_get_interface(data->isoc); 834 err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
833 if (err < 0) { 835 if (err < 0) {
834 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 836 clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
835 usb_kill_anchored_urbs(&data->isoc_anchor); 837 usb_kill_anchored_urbs(&data->isoc_anchor);
@@ -858,7 +860,7 @@ static void btusb_work(struct work_struct *work)
858 860
859 __set_isoc_interface(hdev, 0); 861 __set_isoc_interface(hdev, 0);
860 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) 862 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
861 usb_autopm_put_interface(data->isoc); 863 usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
862 } 864 }
863} 865}
864 866