]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: coex: Limit Wi-Fi scan slot cost to avoid A2DP glitch
authorChing-Te Ku <ku920601@realtek.com>
Tue, 19 Aug 2025 03:44:28 +0000 (11:44 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 26 Aug 2025 01:16:05 +0000 (09:16 +0800)
When Wi-Fi is scanning at 2.4GHz, PTA will abort almost all the BT request.
Once the Wi-Fi slot stay too long, BT audio device can not get enough data,
audio glitch will happened. This patch limit 2.4Ghz Wi-Fi slot to 80ms
while Wi-Fi is scanning to avoid audio glitch.

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

index e4e6daf51a1ba30f86451835a637319c2cd61a10..0f7ae572ef91510d169f2176a04174ba535c34fe 100644 (file)
@@ -93,7 +93,7 @@ static const struct rtw89_btc_fbtc_slot s_def[] = {
        [CXST_E2G]      = __DEF_FBTC_SLOT(5,   0xea5a5a5a, SLOT_MIX),
        [CXST_E5G]      = __DEF_FBTC_SLOT(5,   0xffffffff, SLOT_ISO),
        [CXST_EBT]      = __DEF_FBTC_SLOT(5,   0xe5555555, SLOT_MIX),
-       [CXST_ENULL]    = __DEF_FBTC_SLOT(5,   0xaaaaaaaa, SLOT_ISO),
+       [CXST_ENULL]    = __DEF_FBTC_SLOT(5,   0x55555555, SLOT_MIX),
        [CXST_WLK]      = __DEF_FBTC_SLOT(250, 0xea5a5a5a, SLOT_MIX),
        [CXST_W1FDD]    = __DEF_FBTC_SLOT(50,  0xffffffff, SLOT_ISO),
        [CXST_B1FDD]    = __DEF_FBTC_SLOT(50,  0xffffdfff, SLOT_ISO),
@@ -4153,6 +4153,7 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
                                     s_def[CXST_EBT].cxtbl, s_def[CXST_EBT].cxtype);
                        _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
                                     s_def[CXST_ENULL].cxtbl, s_def[CXST_ENULL].cxtype);
+                       _slot_set_dur(btc, CXST_EBT, dur_2);
                        break;
                case BTC_CXP_OFFE_DEF2:
                        _slot_set(btc, CXST_E2G, 20, cxtbl[1], SLOT_ISO);
@@ -4162,6 +4163,7 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
                                     s_def[CXST_EBT].cxtbl, s_def[CXST_EBT].cxtype);
                        _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
                                     s_def[CXST_ENULL].cxtbl, s_def[CXST_ENULL].cxtype);
+                       _slot_set_dur(btc, CXST_EBT, dur_2);
                        break;
                case BTC_CXP_OFFE_2GBWMIXB:
                        if (a2dp->exist)
@@ -4170,6 +4172,7 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
                                _slot_set(btc, CXST_E2G, 5, tbl_w1, SLOT_MIX);
                        _slot_set_le(btc, CXST_EBT, cpu_to_le16(40),
                                     s_def[CXST_EBT].cxtbl, s_def[CXST_EBT].cxtype);
+                       _slot_set_dur(btc, CXST_EBT, dur_2);
                        break;
                case BTC_CXP_OFFE_WL: /* for 4-way */
                        _slot_set(btc, CXST_E2G, 5, cxtbl[1], SLOT_MIX);