OSDN Git Service

btusb: Avoid reset of ISOC endpoint alt settings to zero
authorChethan Tumkur Narayan <chethan.tumkur.narayan@intel.com>
Mon, 3 Oct 2022 06:48:36 +0000 (12:18 +0530)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 12 Dec 2022 22:19:23 +0000 (14:19 -0800)
In case of suspend/resume and HCI_RESET (BT On and Off),
ISOC endpoint set to alt setting 0 when no SCO connection exists.
This patch shall avoid resetting of ISOC endpoint to alt setting to 0.

Signed-off-by: Chethan Tumkur Narayan <chethan.tumkur.narayan@intel.com>
Signed-off-by: Kiran K <kiran.k@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btusb.c

index f050189..3b4ae79 100644 (file)
@@ -1981,10 +1981,11 @@ static void btusb_work(struct work_struct *work)
                if (btusb_switch_alt_setting(hdev, new_alts) < 0)
                        bt_dev_err(hdev, "set USB alt:(%d) failed!", new_alts);
        } else {
-               clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
                usb_kill_anchored_urbs(&data->isoc_anchor);
 
-               __set_isoc_interface(hdev, 0);
+               if (test_and_clear_bit(BTUSB_ISOC_RUNNING, &data->flags))
+                       __set_isoc_interface(hdev, 0);
+
                if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
                        usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
        }