|
Lee, Chun-Yi |
bcac01 |
From: Sean Wang <sean.wang@mediatek.com>
|
|
Lee, Chun-Yi |
bcac01 |
Date: Fri, 13 May 2022 05:38:12 +0800
|
|
Lee, Chun-Yi |
bcac01 |
Subject: Bluetooth: btmtksdio: fix possible FW initialization failure
|
|
Lee, Chun-Yi |
bcac01 |
Patch-mainline: v5.19-rc1
|
|
Lee, Chun-Yi |
bcac01 |
Git-commit: 7469720563e01f479ec5afe06bd6f440f965d523
|
|
Lee, Chun-Yi |
bcac01 |
References: jsc#PED-1407
|
|
Lee, Chun-Yi |
bcac01 |
|
|
Lee, Chun-Yi |
bcac01 |
According to FW advised sequence, mt7921s need to re-acquire privilege
|
|
Lee, Chun-Yi |
bcac01 |
immediately after the firmware download is complete before normal running.
|
|
Lee, Chun-Yi |
bcac01 |
Otherwise, it is still possible the bus may be stuck in an abnormal status
|
|
Lee, Chun-Yi |
bcac01 |
that causes FW initialization failure in the current driver.
|
|
Lee, Chun-Yi |
bcac01 |
|
|
Lee, Chun-Yi |
bcac01 |
Fixes: 752aea58489f ("Bluetooth: mt7921s: fix bus hang with wrong privilege")
|
|
Lee, Chun-Yi |
bcac01 |
Co-developed-by: Yake Yang <yake.yang@mediatek.com>
|
|
Lee, Chun-Yi |
bcac01 |
Signed-off-by: Yake Yang <yake.yang@mediatek.com>
|
|
Lee, Chun-Yi |
bcac01 |
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
|
|
Lee, Chun-Yi |
bcac01 |
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|
Lee, Chun-Yi |
bcac01 |
Acked-by: Lee, Chun-Yi <jlee@suse.com>
|
|
Lee, Chun-Yi |
bcac01 |
---
|
|
Lee, Chun-Yi |
bcac01 |
drivers/bluetooth/btmtksdio.c | 16 ++++++++--------
|
|
Lee, Chun-Yi |
bcac01 |
1 file changed, 8 insertions(+), 8 deletions(-)
|
|
Lee, Chun-Yi |
bcac01 |
|
|
Lee, Chun-Yi |
bcac01 |
--- a/drivers/bluetooth/btmtksdio.c
|
|
Lee, Chun-Yi |
bcac01 |
+++ b/drivers/bluetooth/btmtksdio.c
|
|
Lee, Chun-Yi |
bcac01 |
@@ -864,6 +864,14 @@ static int mt79xx_setup(struct hci_dev *
|
|
Lee, Chun-Yi |
bcac01 |
return err;
|
|
Lee, Chun-Yi |
bcac01 |
}
|
|
Lee, Chun-Yi |
bcac01 |
|
|
Lee, Chun-Yi |
bcac01 |
+ err = btmtksdio_fw_pmctrl(bdev);
|
|
Lee, Chun-Yi |
bcac01 |
+ if (err < 0)
|
|
Lee, Chun-Yi |
bcac01 |
+ return err;
|
|
Lee, Chun-Yi |
bcac01 |
+
|
|
Lee, Chun-Yi |
bcac01 |
+ err = btmtksdio_drv_pmctrl(bdev);
|
|
Lee, Chun-Yi |
bcac01 |
+ if (err < 0)
|
|
Lee, Chun-Yi |
bcac01 |
+ return err;
|
|
Lee, Chun-Yi |
bcac01 |
+
|
|
Lee, Chun-Yi |
bcac01 |
/* Enable Bluetooth protocol */
|
|
Lee, Chun-Yi |
bcac01 |
wmt_params.op = BTMTK_WMT_FUNC_CTRL;
|
|
Lee, Chun-Yi |
bcac01 |
wmt_params.flag = 0;
|
|
Lee, Chun-Yi |
bcac01 |
@@ -1109,14 +1117,6 @@ static int btmtksdio_setup(struct hci_de
|
|
Lee, Chun-Yi |
bcac01 |
if (err < 0)
|
|
Lee, Chun-Yi |
bcac01 |
return err;
|
|
Lee, Chun-Yi |
bcac01 |
|
|
Lee, Chun-Yi |
bcac01 |
- err = btmtksdio_fw_pmctrl(bdev);
|
|
Lee, Chun-Yi |
bcac01 |
- if (err < 0)
|
|
Lee, Chun-Yi |
bcac01 |
- return err;
|
|
Lee, Chun-Yi |
bcac01 |
-
|
|
Lee, Chun-Yi |
bcac01 |
- err = btmtksdio_drv_pmctrl(bdev);
|
|
Lee, Chun-Yi |
bcac01 |
- if (err < 0)
|
|
Lee, Chun-Yi |
bcac01 |
- return err;
|
|
Lee, Chun-Yi |
bcac01 |
-
|
|
Lee, Chun-Yi |
bcac01 |
/* Enable SCO over I2S/PCM */
|
|
Lee, Chun-Yi |
bcac01 |
err = btmtksdio_sco_setting(hdev);
|
|
Lee, Chun-Yi |
bcac01 |
if (err < 0) {
|