wifi: rtw89: coex: set higher priority to BT when WL scan and BT A2DP exist
authorChing-Te Ku <ku920601@realtek.com>
Thu, 31 Oct 2024 02:30:32 +0000 (10:30 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Wed, 6 Nov 2024 06:26:27 +0000 (14:26 +0800)
If WiFi operation channel & scan channel both at 2.4GHz, original will keep
going at WL > BT priority table for a long time. It makes A2DP can not sent
audio data to SUT device in time then performed a lag audio. Assign
a BT > WL priority table when A2DP exist, to avoid the issue.

Signed-off-by: Ching-Te Ku <ku920601@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20241031023032.7102-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/coex.c

index 8398bd007aaf86fc0db82b289143fc0c617db120..ced42f9d297da2567896efaa15b7097059872705 100644 (file)
@@ -3699,6 +3699,7 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
        struct rtw89_btc_dm *dm = &btc->dm;
        struct rtw89_btc_fbtc_tdma *t = &dm->tdma;
        struct rtw89_btc_wl_role_info_v1 *wl_rinfo = &btc->cx.wl.role_info_v1;
+       struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
        struct rtw89_btc_bt_hid_desc *hid = &btc->cx.bt.link_info.hid_desc;
        struct rtw89_btc_bt_hfp_desc *hfp = &btc->cx.bt.link_info.hfp_desc;
        struct rtw89_btc_wl_info *wl = &btc->cx.wl;
@@ -3857,7 +3858,10 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
                                     s_def[CXST_ENULL].cxtbl, s_def[CXST_ENULL].cxtype);
                        break;
                case BTC_CXP_OFFE_2GBWMIXB:
-                       _slot_set(btc, CXST_E2G, 0, tbl_w1, SLOT_MIX);
+                       if (a2dp->exist)
+                               _slot_set(btc, CXST_E2G, 0, cxtbl[2], SLOT_MIX);
+                       else
+                               _slot_set(btc, CXST_E2G, 0, tbl_w1, SLOT_MIX);
                        _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
                                     s_def[CXST_EBT].cxtbl, s_def[CXST_EBT].cxtype);
                        break;