diff options
Diffstat (limited to 'drivers/bluetooth/btusb.c')
| -rw-r--r-- | drivers/bluetooth/btusb.c | 49 | 
1 files changed, 18 insertions, 31 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 789c9b579aea..480cad920048 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {  	/* Broadcom BCM20702A0 */  	{ USB_DEVICE(0x0a5c, 0x21e3) }, +	{ USB_DEVICE(0x0a5c, 0x21e6) },  	{ USB_DEVICE(0x0a5c, 0x21f3) },  	{ USB_DEVICE(0x413c, 0x8197) }, @@ -121,12 +122,14 @@ static struct usb_device_id blacklist_table[] = {  	{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },  	{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },  	{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE }, +	{ USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },  	/* Atheros AR9285 Malbec with sflash firmware */  	{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },  	/* Atheros 3012 with sflash firmware */  	{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, +	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },  	/* Atheros AR5BBU12 with sflash firmware */  	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, @@ -243,7 +246,7 @@ static int inc_tx(struct btusb_data *data)  static void btusb_intr_complete(struct urb *urb)  {  	struct hci_dev *hdev = urb->context; -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	int err;  	BT_DBG("%s urb %p status %d count %d", hdev->name, @@ -282,7 +285,7 @@ static void btusb_intr_complete(struct urb *urb)  static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	struct urb *urb;  	unsigned char *buf;  	unsigned int pipe; @@ -331,7 +334,7 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)  static void btusb_bulk_complete(struct urb *urb)  {  	struct hci_dev *hdev = urb->context; -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	int err;  	BT_DBG("%s urb %p status %d count %d", hdev->name, @@ -370,7 +373,7 @@ static void btusb_bulk_complete(struct urb *urb)  static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	struct urb *urb;  	unsigned char *buf;  	unsigned int pipe; @@ -417,7 +420,7 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)  static void btusb_isoc_complete(struct urb *urb)  {  	struct hci_dev *hdev = urb->context; -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	int i, err;  	BT_DBG("%s urb %p status %d count %d", hdev->name, @@ -484,7 +487,7 @@ static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu)  static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	struct urb *urb;  	unsigned char *buf;  	unsigned int pipe; @@ -537,7 +540,7 @@ static void btusb_tx_complete(struct urb *urb)  {  	struct sk_buff *skb = urb->context;  	struct hci_dev *hdev = (struct hci_dev *) skb->dev; -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	BT_DBG("%s urb %p status %d count %d", hdev->name,  					urb, urb->status, urb->actual_length); @@ -584,7 +587,7 @@ done:  static int btusb_open(struct hci_dev *hdev)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	int err;  	BT_DBG("%s", hdev->name); @@ -634,7 +637,7 @@ static void btusb_stop_traffic(struct btusb_data *data)  static int btusb_close(struct hci_dev *hdev)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	int err;  	BT_DBG("%s", hdev->name); @@ -664,7 +667,7 @@ failed:  static int btusb_flush(struct hci_dev *hdev)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	BT_DBG("%s", hdev->name); @@ -676,7 +679,7 @@ static int btusb_flush(struct hci_dev *hdev)  static int btusb_send_frame(struct sk_buff *skb)  {  	struct hci_dev *hdev = (struct hci_dev *) skb->dev; -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	struct usb_ctrlrequest *dr;  	struct urb *urb;  	unsigned int pipe; @@ -784,18 +787,9 @@ done:  	return err;  } -static void btusb_destruct(struct hci_dev *hdev) -{ -	struct btusb_data *data = hdev->driver_data; - -	BT_DBG("%s", hdev->name); - -	kfree(data); -} -  static void btusb_notify(struct hci_dev *hdev, unsigned int evt)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	BT_DBG("%s evt %d", hdev->name, evt); @@ -807,7 +801,7 @@ static void btusb_notify(struct hci_dev *hdev, unsigned int evt)  static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)  { -	struct btusb_data *data = hdev->driver_data; +	struct btusb_data *data = hci_get_drvdata(hdev);  	struct usb_interface *intf = data->isoc;  	struct usb_endpoint_descriptor *ep_desc;  	int i, err; @@ -995,7 +989,7 @@ static int btusb_probe(struct usb_interface *intf,  	}  	hdev->bus = HCI_USB; -	hdev->driver_data = data; +	hci_set_drvdata(hdev, data);  	data->hdev = hdev; @@ -1005,11 +999,8 @@ static int btusb_probe(struct usb_interface *intf,  	hdev->close    = btusb_close;  	hdev->flush    = btusb_flush;  	hdev->send     = btusb_send_frame; -	hdev->destruct = btusb_destruct;  	hdev->notify   = btusb_notify; -	hdev->owner = THIS_MODULE; -  	/* Interface numbers are hardcoded in the specification */  	data->isoc = usb_ifnum_to_if(data->udev, 1); @@ -1091,9 +1082,6 @@ static void btusb_disconnect(struct usb_interface *intf)  		return;  	hdev = data->hdev; - -	__hci_dev_hold(hdev); -  	usb_set_intfdata(data->intf, NULL);  	if (data->isoc) @@ -1106,9 +1094,8 @@ static void btusb_disconnect(struct usb_interface *intf)  	else if (data->isoc)  		usb_driver_release_interface(&btusb_driver, data->isoc); -	__hci_dev_put(hdev); -  	hci_free_dev(hdev); +	kfree(data);  }  #ifdef CONFIG_PM  | 
