diff options
Diffstat (limited to 'drivers/bluetooth/btusb.c')
| -rw-r--r-- | drivers/bluetooth/btusb.c | 44 | 
1 files changed, 17 insertions, 27 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index fe4ebc375b3..55ac349695c 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -101,6 +101,7 @@ static struct usb_device_id btusb_table[] = {  	{ USB_DEVICE(0x0c10, 0x0000) },  	/* Broadcom BCM20702A0 */ +	{ USB_DEVICE(0x0a5c, 0x21e3) },  	{ USB_DEVICE(0x413c, 0x8197) },  	{ }	/* Terminating entry */ @@ -315,7 +316,8 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)  	err = usb_submit_urb(urb, mem_flags);  	if (err < 0) { -		BT_ERR("%s urb %p submission failed (%d)", +		if (err != -EPERM && err != -ENODEV) +			BT_ERR("%s urb %p submission failed (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb);  	} @@ -400,7 +402,8 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)  	err = usb_submit_urb(urb, mem_flags);  	if (err < 0) { -		BT_ERR("%s urb %p submission failed (%d)", +		if (err != -EPERM && err != -ENODEV) +			BT_ERR("%s urb %p submission failed (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb);  	} @@ -506,15 +509,10 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)  	pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress); -	urb->dev      = data->udev; -	urb->pipe     = pipe; -	urb->context  = hdev; -	urb->complete = btusb_isoc_complete; -	urb->interval = data->isoc_rx_ep->bInterval; +	usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete, +				hdev, data->isoc_rx_ep->bInterval);  	urb->transfer_flags  = URB_FREE_BUFFER | URB_ISO_ASAP; -	urb->transfer_buffer = buf; -	urb->transfer_buffer_length = size;  	__fill_isoc_descriptor(urb, size,  			le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize)); @@ -523,7 +521,8 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)  	err = usb_submit_urb(urb, mem_flags);  	if (err < 0) { -		BT_ERR("%s urb %p submission failed (%d)", +		if (err != -EPERM && err != -ENODEV) +			BT_ERR("%s urb %p submission failed (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb);  	} @@ -727,6 +726,9 @@ static int btusb_send_frame(struct sk_buff *skb)  		usb_fill_bulk_urb(urb, data->udev, pipe,  				skb->data, skb->len, btusb_tx_complete, skb); +		if (skb->priority >= HCI_PRIO_MAX - 1) +			urb->transfer_flags  = URB_ISO_ASAP; +  		hdev->stat.acl_tx++;  		break; @@ -770,16 +772,17 @@ skip_waking:  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err < 0) { -		BT_ERR("%s urb %p submission failed", hdev->name, urb); +		if (err != -EPERM && err != -ENODEV) +			BT_ERR("%s urb %p submission failed (%d)", +						hdev->name, urb, -err);  		kfree(urb->setup_packet);  		usb_unanchor_urb(urb);  	} else {  		usb_mark_last_busy(data->udev);  	} -	usb_free_urb(urb); -  done: +	usb_free_urb(urb);  	return err;  } @@ -1223,20 +1226,7 @@ static struct usb_driver btusb_driver = {  	.supports_autosuspend = 1,  }; -static int __init btusb_init(void) -{ -	BT_INFO("Generic Bluetooth USB driver ver %s", VERSION); - -	return usb_register(&btusb_driver); -} - -static void __exit btusb_exit(void) -{ -	usb_deregister(&btusb_driver); -} - -module_init(btusb_init); -module_exit(btusb_exit); +module_usb_driver(btusb_driver);  module_param(ignore_dga, bool, 0644);  MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");  |