Bluetooth: btusb: mediatek: change the conditions for ISO interface
authorChris Lu <chris.lu@mediatek.com>
Mon, 23 Sep 2024 08:47:05 +0000 (16:47 +0800)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 14 Nov 2024 20:25:54 +0000 (15:25 -0500)
Change conditions for Bluetooth driver claiming and releasing usb
ISO interface for MediaTek ISO data transmission.

Signed-off-by: Chris Lu <chris.lu@mediatek.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btusb.c

index 79c178cd5db7830f11c36c086980d8acfabba58c..63c17d342fe9bc6647eaaca7508e2769c9159d68 100644 (file)
@@ -2623,7 +2623,7 @@ static void btusb_mtk_release_iso_intf(struct hci_dev *hdev)
 {
        struct btmtk_data *btmtk_data = hci_get_priv(hdev);
 
-       if (btmtk_data->isopkt_intf) {
+       if (test_bit(BTMTK_ISOPKT_OVER_INTR, &btmtk_data->flags)) {
                usb_kill_anchored_urbs(&btmtk_data->isopkt_anchor);
                clear_bit(BTMTK_ISOPKT_RUNNING, &btmtk_data->flags);
 
@@ -2663,8 +2663,8 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
        if (err < 0)
                return err;
 
-       if (test_bit(BTMTK_ISOPKT_RUNNING, &btmtk_data->flags))
-               btusb_mtk_release_iso_intf(hdev);
+       /* Release MediaTek ISO data interface */
+       btusb_mtk_release_iso_intf(hdev);
 
        btusb_stop_traffic(data);
        usb_kill_anchored_urbs(&data->tx_anchor);
@@ -2709,22 +2709,22 @@ static int btusb_mtk_setup(struct hci_dev *hdev)
        btmtk_data->reset_sync = btusb_mtk_reset;
 
        /* Claim ISO data interface and endpoint */
-       btmtk_data->isopkt_intf = usb_ifnum_to_if(data->udev, MTK_ISO_IFNUM);
-       if (btmtk_data->isopkt_intf)
+       if (!test_bit(BTMTK_ISOPKT_OVER_INTR, &btmtk_data->flags)) {
+               btmtk_data->isopkt_intf = usb_ifnum_to_if(data->udev, MTK_ISO_IFNUM);
                btusb_mtk_claim_iso_intf(data);
+       }
 
        return btmtk_usb_setup(hdev);
 }
 
 static int btusb_mtk_shutdown(struct hci_dev *hdev)
 {
-       struct btmtk_data *btmtk_data = hci_get_priv(hdev);
        int ret;
 
        ret = btmtk_usb_shutdown(hdev);
 
-       if (test_bit(BTMTK_ISOPKT_RUNNING, &btmtk_data->flags))
-               btusb_mtk_release_iso_intf(hdev);
+       /* Release MediaTek iso interface after shutdown */
+       btusb_mtk_release_iso_intf(hdev);
 
        return ret;
 }