]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Bluetooth: btmtksdio: fix the reset takes too long
authorSean Wang <sean.wang@mediatek.com>
Thu, 12 May 2022 21:38:11 +0000 (05:38 +0800)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 13 May 2022 11:19:01 +0000 (13:19 +0200)
Sending WMT command during the reset in progress is invalid and would get
no response from firmware until the reset is complete, so we ignore the WMT
command here to resolve the issue which causes the whole reset process
taking too long.

Fixes: 8fafe702253d ("Bluetooth: mt7921s: support bluetooth reset mechanism")
Co-developed-by: Yake Yang <yake.yang@mediatek.com>
Signed-off-by: Yake Yang <yake.yang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/btmtksdio.c

index 5d13c1f61bd36544c08ee0c0b29d4ec740f938c1..d6700efcfe8cd36fb12ef7b78feececca8108c75 100644 (file)
@@ -1189,6 +1189,10 @@ static int btmtksdio_shutdown(struct hci_dev *hdev)
         */
        pm_runtime_get_sync(bdev->dev);
 
+       /* wmt command only works until the reset is complete */
+       if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
+               goto ignore_wmt_cmd;
+
        /* Disable the device */
        wmt_params.op = BTMTK_WMT_FUNC_CTRL;
        wmt_params.flag = 0;
@@ -1202,6 +1206,7 @@ static int btmtksdio_shutdown(struct hci_dev *hdev)
                return err;
        }
 
+ignore_wmt_cmd:
        pm_runtime_put_noidle(bdev->dev);
        pm_runtime_disable(bdev->dev);