[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240412095713.25641-1-hao.qin@mediatek.com>
Date: Fri, 12 Apr 2024 17:57:13 +0800
From: Hao Qin <hao.qin@...iatek.com>
To: Marcel Holtmann <marcel@...tmann.org>, Johan Hedberg
<johan.hedberg@...il.com>, Luiz Von Dentz <luiz.dentz@...il.com>
CC: Sean Wang <sean.wang@...iatek.com>, Deren Wu <deren.Wu@...iatek.com>,
Aaron Hou <aaron.hou@...iatek.com>, Chris Lu <chris.lu@...iatek.com>, "Steve
Lee" <steve.lee@...iatek.com>, linux-bluetooth
<linux-bluetooth@...r.kernel.org>, linux-kernel
<linux-kernel@...r.kernel.org>, linux-mediatek
<linux-mediatek@...ts.infradead.org>, Hao Qin <hao.qin@...iatek.com>
Subject: [PATCH] Bluetooth: btusb: mediatek: Support auto revert for MT7922
Add support for auto reverting MT7922 during reset process.
Signed-off-by: Hao Qin <hao.qin@...iatek.com>
---
drivers/bluetooth/btusb.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 4c0cc13adb47..0ad96ec8d31d 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3032,7 +3032,16 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
usb_kill_anchored_urbs(&data->tx_anchor);
mediatek = hci_get_priv(hdev);
- if (mediatek->dev_id == 0x7925) {
+ if (mediatek->dev_id == 0x7922) {
+ btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
+ val |= 0x00002020;
+ btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, val);
+ btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, 0x00010001);
+ btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
+ val |= BIT(0);
+ btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, val);
+ msleep(100);
+ } else if (mediatek->dev_id == 0x7925) {
btusb_mtk_uhw_reg_read(data, MTK_BT_RESET_REG_CONNV3, &val);
val |= (1 << 5);
btusb_mtk_uhw_reg_write(data, MTK_BT_RESET_REG_CONNV3, val);
@@ -3072,6 +3081,9 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
if (err < 0)
bt_dev_err(hdev, "Reset timeout");
+ if (mediatek->dev_id == 0x7922)
+ btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
+
btusb_mtk_id_get(data, 0x70010200, &val);
if (!val)
bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
--
2.18.0
Powered by blists - more mailing lists