Bluetooth: btusb: mediatek: readx_poll_timeout replaces open coding
authorSean Wang <sean.wang@mediatek.com>
Wed, 28 Jun 2023 22:54:55 +0000 (06:54 +0800)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 11 Aug 2023 18:41:19 +0000 (11:41 -0700)
Use readx_poll_timeout instead of open coding to poll the hardware reset
status until it is done.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btusb.c

index e1e271e..2122e86 100644 (file)
@@ -2657,8 +2657,6 @@ static int btusb_recv_event_realtek(struct hci_dev *hdev, struct sk_buff *skb)
 #define MTK_EP_RST_OPT         0x74011890
 #define MTK_EP_RST_IN_OUT_OPT  0x00010001
 #define MTK_BT_RST_DONE                0x00000100
-#define MTK_BT_RESET_WAIT_MS   100
-#define MTK_BT_RESET_NUM_TRIES 10
 #define MTK_BT_RESET_REG_CONNV3        0x70028610
 #define MTK_BT_READ_DEV_ID     0x70010200
 
@@ -3032,6 +3030,16 @@ static int btusb_mtk_id_get(struct btusb_data *data, u32 reg, u32 *id)
        return btusb_mtk_reg_read(data, reg, id);
 }
 
+static u32 btusb_mtk_reset_done(struct hci_dev *hdev)
+{
+       struct btusb_data *data = hci_get_drvdata(hdev);
+       u32 val = 0;
+
+       btusb_mtk_uhw_reg_read(data, MTK_BT_MISC, &val);
+
+       return val & MTK_BT_RST_DONE;
+}
+
 static int btusb_mtk_setup(struct hci_dev *hdev)
 {
        struct btusb_data *data = hci_get_drvdata(hdev);
@@ -3232,7 +3240,7 @@ static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
 {
        struct btusb_data *data = hci_get_drvdata(hdev);
        u32 val;
-       int err, retry = 0;
+       int err;
        struct btmediatek_data *mediatek;
 
        /* It's MediaTek specific bluetooth reset mechanism via USB */
@@ -3284,18 +3292,10 @@ static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
                btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
        }
 
-       /* Poll the register until reset is completed */
-       do {
-               btusb_mtk_uhw_reg_read(data, MTK_BT_MISC, &val);
-               if (val & MTK_BT_RST_DONE) {
-                       bt_dev_dbg(hdev, "Bluetooth Reset Successfully");
-                       break;
-               }
-
-               bt_dev_dbg(hdev, "Polling Bluetooth Reset CR");
-               retry++;
-               msleep(MTK_BT_RESET_WAIT_MS);
-       } while (retry < MTK_BT_RESET_NUM_TRIES);
+       err = readx_poll_timeout(btusb_mtk_reset_done, hdev, val,
+                                val & MTK_BT_RST_DONE, 20000, 1000000);
+       if (err < 0)
+               bt_dev_err(hdev, "Reset timeout");
 
        btusb_mtk_id_get(data, 0x70010200, &val);
        if (!val)