Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/genesis-2.6 into devel-stable
[sfrench/cifs-2.6.git] / drivers / bluetooth / btusb.c
index 5d9cc53bd64315cdc1995af32f4895eecdf20fd6..d22ce3cc611e7bb60f0377ff344fa41fb7bde2db 100644 (file)
@@ -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);
-               }
        }
 }