diff options
Diffstat (limited to 'drivers/bluetooth/btusb.c')
| -rw-r--r-- | drivers/bluetooth/btusb.c | 27 | 
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 8e16f0af6358..c0ff34f2d2df 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -50,7 +50,7 @@ static struct usb_driver btusb_driver;  #define BTUSB_ATH3012		0x80  #define BTUSB_INTEL		0x100 -static struct usb_device_id btusb_table[] = { +static const struct usb_device_id btusb_table[] = {  	/* Generic Bluetooth USB device */  	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, @@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {  	/* Broadcom BCM20702A0 */  	{ USB_DEVICE(0x0b05, 0x17b5) }, +	{ USB_DEVICE(0x0b05, 0x17cb) },  	{ USB_DEVICE(0x04ca, 0x2003) },  	{ USB_DEVICE(0x0489, 0xe042) },  	{ USB_DEVICE(0x413c, 0x8197) }, @@ -112,12 +113,15 @@ static struct usb_device_id btusb_table[] = {  	/*Broadcom devices with vendor specific id */  	{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }, +	/* Belkin F8065bf - Broadcom based */ +	{ USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01) }, +  	{ }	/* Terminating entry */  };  MODULE_DEVICE_TABLE(usb, btusb_table); -static struct usb_device_id blacklist_table[] = { +static const struct usb_device_id blacklist_table[] = {  	/* CSR BlueCore devices */  	{ USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR }, @@ -148,6 +152,7 @@ static struct usb_device_id blacklist_table[] = {  	{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },  	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },  	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, +	{ USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },  	{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },  	{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },  	{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, @@ -711,9 +716,8 @@ static int btusb_flush(struct hci_dev *hdev)  	return 0;  } -static int btusb_send_frame(struct sk_buff *skb) +static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)  { -	struct hci_dev *hdev = (struct hci_dev *) skb->dev;  	struct btusb_data *data = hci_get_drvdata(hdev);  	struct usb_ctrlrequest *dr;  	struct urb *urb; @@ -725,6 +729,8 @@ static int btusb_send_frame(struct sk_buff *skb)  	if (!test_bit(HCI_RUNNING, &hdev->flags))  		return -EBUSY; +	skb->dev = (void *) hdev; +  	switch (bt_cb(skb)->pkt_type) {  	case HCI_COMMAND_PKT:  		urb = usb_alloc_urb(0, GFP_ATOMIC); @@ -769,7 +775,7 @@ static int btusb_send_frame(struct sk_buff *skb)  		break;  	case HCI_SCODATA_PKT: -		if (!data->isoc_tx_ep || hdev->conn_hash.sco_num < 1) +		if (!data->isoc_tx_ep || hci_conn_num(hdev, SCO_LINK) < 1)  			return -ENODEV;  		urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_ATOMIC); @@ -828,8 +834,8 @@ static void btusb_notify(struct hci_dev *hdev, unsigned int evt)  	BT_DBG("%s evt %d", hdev->name, evt); -	if (hdev->conn_hash.sco_num != data->sco_num) { -		data->sco_num = hdev->conn_hash.sco_num; +	if (hci_conn_num(hdev, SCO_LINK) != data->sco_num) { +		data->sco_num = hci_conn_num(hdev, SCO_LINK);  		schedule_work(&data->work);  	}  } @@ -884,7 +890,7 @@ static void btusb_work(struct work_struct *work)  	int new_alts;  	int err; -	if (hdev->conn_hash.sco_num > 0) { +	if (data->sco_num > 0) {  		if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {  			err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);  			if (err < 0) { @@ -898,9 +904,9 @@ static void btusb_work(struct work_struct *work)  		if (hdev->voice_setting & 0x0020) {  			static const int alts[3] = { 2, 4, 5 }; -			new_alts = alts[hdev->conn_hash.sco_num - 1]; +			new_alts = alts[data->sco_num - 1];  		} else { -			new_alts = hdev->conn_hash.sco_num; +			new_alts = data->sco_num;  		}  		if (data->isoc_altsetting != new_alts) { @@ -1623,7 +1629,6 @@ static struct usb_driver btusb_driver = {  #ifdef CONFIG_PM  	.suspend	= btusb_suspend,  	.resume		= btusb_resume, -	.reset_resume	= btusb_resume,  #endif  	.id_table	= btusb_table,  	.supports_autosuspend = 1,  |