diff options
Diffstat (limited to 'drivers/bluetooth/btusb.c')
| -rw-r--r-- | drivers/bluetooth/btusb.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 5d9cc53bd64..d22ce3cc611 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -59,6 +59,9 @@ static struct usb_device_id btusb_table[] = {  	/* Generic Bluetooth USB device */  	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, +	/* Apple iMac11,1 */ +	{ USB_DEVICE(0x05ac, 0x8215) }, +  	/* AVM BlueFRITZ! USB v2.0 */  	{ USB_DEVICE(0x057c, 0x3800) }, @@ -146,6 +149,7 @@ static struct usb_device_id blacklist_table[] = {  #define BTUSB_BULK_RUNNING	1  #define BTUSB_ISOC_RUNNING	2  #define BTUSB_SUSPENDING	3 +#define BTUSB_DID_ISO_RESUME	4  struct btusb_data {  	struct hci_dev       *hdev; @@ -179,7 +183,6 @@ struct btusb_data {  	unsigned int sco_num;  	int isoc_altsetting;  	int suspend_count; -	int did_iso_resume:1;  };  static int inc_tx(struct btusb_data *data) @@ -807,7 +810,7 @@ static void btusb_work(struct work_struct *work)  	int err;  	if (hdev->conn_hash.sco_num > 0) { -		if (!data->did_iso_resume) { +		if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {  			err = usb_autopm_get_interface(data->isoc);  			if (err < 0) {  				clear_bit(BTUSB_ISOC_RUNNING, &data->flags); @@ -815,7 +818,7 @@ static void btusb_work(struct work_struct *work)  				return;  			} -			data->did_iso_resume = 1; +			set_bit(BTUSB_DID_ISO_RESUME, &data->flags);  		}  		if (data->isoc_altsetting != 2) {  			clear_bit(BTUSB_ISOC_RUNNING, &data->flags); @@ -836,10 +839,8 @@ static void btusb_work(struct work_struct *work)  		usb_kill_anchored_urbs(&data->isoc_anchor);  		__set_isoc_interface(hdev, 0); -		if (data->did_iso_resume) { -			data->did_iso_resume = 0; +		if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))  			usb_autopm_put_interface(data->isoc); -		}  	}  }  |