mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-04 04:54:18 +00:00
36f6d6ddcd
Backport support for RTL8812AU/RTL8821AU USB adapters Manually backported patch: 045-v6.13-wifi-rtw88-Enable-the-new-RTL8821AU-RTL8812AU-driver Patches from 046 to 051 are pending. Signed-off-by: Marty Jones <mj8263788@gmail.com> Link: https://github.com/openwrt/openwrt/pull/17079 [Move BPAUTO_WANT_DEV_COREDUMP to original patch] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
68 lines
2.6 KiB
Diff
68 lines
2.6 KiB
Diff
From bfcee5ee924fc5f706d20f5dc31586ca47912304 Mon Sep 17 00:00:00 2001
|
|
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Date: Wed, 23 Oct 2024 17:14:45 +0300
|
|
Subject: [PATCH] wifi: rtw88: 8821a: Regularly ask for BT info updates
|
|
|
|
The RTL8821AU firmware sends C2H_BT_INFO by itself when bluetooth
|
|
headphones are connected, but not when they are disconnected. This leads
|
|
to the coexistence code still using the A2DP algorithm long after the
|
|
headphones are disconnected, which means the wifi speeds are much lower
|
|
than they should be. Work around this by asking for updates every two
|
|
seconds if the chip is RTL8821AU.
|
|
|
|
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Link: https://patch.msgid.link/358acdd2-6aae-46c1-9c66-fcce4e700b96@gmail.com
|
|
---
|
|
drivers/net/wireless/realtek/rtw88/coex.c | 2 +-
|
|
drivers/net/wireless/realtek/rtw88/coex.h | 11 +++++++++++
|
|
drivers/net/wireless/realtek/rtw88/main.c | 1 +
|
|
3 files changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
|
@@ -446,7 +446,7 @@ static void rtw_coex_check_rfk(struct rt
|
|
}
|
|
}
|
|
|
|
-static void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
|
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
|
{
|
|
struct rtw_coex *coex = &rtwdev->coex;
|
|
struct rtw_coex_stat *coex_stat = &coex->stat;
|
|
--- a/drivers/net/wireless/realtek/rtw88/coex.h
|
|
+++ b/drivers/net/wireless/realtek/rtw88/coex.h
|
|
@@ -384,6 +384,7 @@ u32 rtw_coex_read_indirect_reg(struct rt
|
|
void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr,
|
|
u32 mask, u32 val);
|
|
void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set);
|
|
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev);
|
|
|
|
void rtw_coex_bt_relink_work(struct work_struct *work);
|
|
void rtw_coex_bt_reenable_work(struct work_struct *work);
|
|
@@ -419,4 +420,14 @@ static inline bool rtw_coex_disabled(str
|
|
return coex_stat->bt_disabled;
|
|
}
|
|
|
|
+static inline void rtw_coex_active_query_bt_info(struct rtw_dev *rtwdev)
|
|
+{
|
|
+ /* The RTL8821AU firmware doesn't send C2H_BT_INFO by itself
|
|
+ * when bluetooth headphones are disconnected, so we have to
|
|
+ * ask for it regularly.
|
|
+ */
|
|
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8821A && rtwdev->efuse.btcoex)
|
|
+ rtw_coex_query_bt_info(rtwdev);
|
|
+}
|
|
+
|
|
#endif
|
|
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
|
@@ -274,6 +274,7 @@ static void rtw_watch_dog_work(struct wo
|
|
rtw_leave_lps(rtwdev);
|
|
rtw_coex_wl_status_check(rtwdev);
|
|
rtw_coex_query_bt_hid_list(rtwdev);
|
|
+ rtw_coex_active_query_bt_info(rtwdev);
|
|
|
|
rtw_phy_dynamic_mechanism(rtwdev);
|
|
|