mirror of
https://github.com/libretro/Lakka-LibreELEC.git
synced 2025-02-12 16:18:11 +00:00
77 lines
3.1 KiB
Diff
77 lines
3.1 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(-)
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
|
|
index 8f2b472589db..c929db1e53ca 100644
|
|
--- 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 rtw_dev *rtwdev)
|
|
}
|
|
}
|
|
|
|
-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;
|
|
diff --git a/drivers/net/wireless/realtek/rtw88/coex.h b/drivers/net/wireless/realtek/rtw88/coex.h
|
|
index 57cf29da9ea4..c398be8391f7 100644
|
|
--- 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 rtw_dev *rtwdev, u16 addr);
|
|
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(struct rtw_dev *rtwdev)
|
|
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
|
|
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
|
index 65d20ad02667..e91530ed05a0 100644
|
|
--- 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 work_struct *work)
|
|
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);
|
|
|
|
--
|
|
2.43.0
|
|
|