diff options
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r-- | drivers/bluetooth/btusb.c | 20 |
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 | ||