diff options
Diffstat (limited to 'drivers/bluetooth')
| -rw-r--r-- | drivers/bluetooth/ath3k.c | 1 | ||||
| -rw-r--r-- | drivers/bluetooth/btmrvl_sdio.c | 4 | ||||
| -rw-r--r-- | drivers/bluetooth/btusb.c | 19 | ||||
| -rw-r--r-- | drivers/bluetooth/btwilink.c | 16 | 
4 files changed, 27 insertions, 13 deletions
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c index a5854735bb2..db7cb8111fb 100644 --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c @@ -63,6 +63,7 @@ static struct usb_device_id ath3k_table[] = {  	/* Atheros AR3011 with sflash firmware*/  	{ USB_DEVICE(0x0CF3, 0x3002) },  	{ USB_DEVICE(0x13d3, 0x3304) }, +	{ USB_DEVICE(0x0930, 0x0215) },  	/* Atheros AR9285 Malbec with sflash firmware */  	{ USB_DEVICE(0x03F0, 0x311D) }, diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index 7f521d4ac65..c827d737cce 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c @@ -81,7 +81,7 @@ static const struct btmrvl_sdio_card_reg btmrvl_reg_8787 = {  	.io_port_2 = 0x7a,  }; -static const struct btmrvl_sdio_device btmrvl_sdio_sd6888 = { +static const struct btmrvl_sdio_device btmrvl_sdio_sd8688 = {  	.helper		= "sd8688_helper.bin",  	.firmware	= "sd8688.bin",  	.reg		= &btmrvl_reg_8688, @@ -98,7 +98,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8787 = {  static const struct sdio_device_id btmrvl_sdio_ids[] = {  	/* Marvell SD8688 Bluetooth device */  	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9105), -			.driver_data = (unsigned long) &btmrvl_sdio_sd6888 }, +			.driver_data = (unsigned long) &btmrvl_sdio_sd8688 },  	/* Marvell SD8787 Bluetooth device */  	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x911A),  			.driver_data = (unsigned long) &btmrvl_sdio_sd8787 }, diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 91d13a9e8c6..9cbac6b445e 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -72,9 +72,15 @@ static struct usb_device_id btusb_table[] = {  	/* Apple MacBookAir3,1, MacBookAir3,2 */  	{ USB_DEVICE(0x05ac, 0x821b) }, +	/* Apple MacBookAir4,1 */ +	{ USB_DEVICE(0x05ac, 0x821f) }, +  	/* Apple MacBookPro8,2 */  	{ USB_DEVICE(0x05ac, 0x821a) }, +	/* Apple MacMini5,1 */ +	{ USB_DEVICE(0x05ac, 0x8281) }, +  	/* AVM BlueFRITZ! USB v2.0 */  	{ USB_DEVICE(0x057c, 0x3800) }, @@ -106,6 +112,7 @@ static struct usb_device_id blacklist_table[] = {  	/* Atheros 3011 with sflash firmware */  	{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },  	{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE }, +	{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },  	/* Atheros AR9285 Malbec with sflash firmware */  	{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, @@ -256,7 +263,9 @@ static void btusb_intr_complete(struct urb *urb)  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err < 0) { -		if (err != -EPERM) +		/* -EPERM: urb is being killed; +		 * -ENODEV: device got disconnected */ +		if (err != -EPERM && err != -ENODEV)  			BT_ERR("%s urb %p failed to resubmit (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb); @@ -341,7 +350,9 @@ static void btusb_bulk_complete(struct urb *urb)  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err < 0) { -		if (err != -EPERM) +		/* -EPERM: urb is being killed; +		 * -ENODEV: device got disconnected */ +		if (err != -EPERM && err != -ENODEV)  			BT_ERR("%s urb %p failed to resubmit (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb); @@ -431,7 +442,9 @@ static void btusb_isoc_complete(struct urb *urb)  	err = usb_submit_urb(urb, GFP_ATOMIC);  	if (err < 0) { -		if (err != -EPERM) +		/* -EPERM: urb is being killed; +		 * -ENODEV: device got disconnected */ +		if (err != -EPERM && err != -ENODEV)  			BT_ERR("%s urb %p failed to resubmit (%d)",  						hdev->name, urb, -err);  		usb_unanchor_urb(urb); diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c index 65d27aff553..04d353f58d7 100644 --- a/drivers/bluetooth/btwilink.c +++ b/drivers/bluetooth/btwilink.c @@ -125,6 +125,13 @@ static long st_receive(void *priv_data, struct sk_buff *skb)  /* protocol structure registered with shared transport */  static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = {  	{ +		.chnl_id = HCI_EVENT_PKT, /* HCI Events */ +		.hdr_len = sizeof(struct hci_event_hdr), +		.offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), +		.len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ +		.reserve = 8, +	}, +	{  		.chnl_id = HCI_ACLDATA_PKT, /* ACL */  		.hdr_len = sizeof(struct hci_acl_hdr),  		.offset_len_in_hdr = offsetof(struct hci_acl_hdr, dlen), @@ -138,13 +145,6 @@ static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = {  		.len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */  		.reserve = 8,  	}, -	{ -		.chnl_id = HCI_EVENT_PKT, /* HCI Events */ -		.hdr_len = sizeof(struct hci_event_hdr), -		.offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), -		.len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ -		.reserve = 8, -	},  };  /* Called from HCI core to initialize the device */ @@ -240,7 +240,7 @@ static int ti_st_close(struct hci_dev *hdev)  	if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))  		return 0; -	for (i = 0; i < MAX_BT_CHNL_IDS; i++) { +	for (i = MAX_BT_CHNL_IDS-1; i >= 0; i--) {  		err = st_unregister(&ti_st_proto[i]);  		if (err)  			BT_ERR("st_unregister(%d) failed with error %d",  |