From: Yan-Hsuan Chuang <[email protected]>

When driver is going to sleep, it does not leave LPS/IPS, thus the
BTCoex may have mismatch when driver wakes up. To avoid that, BTCoex
needs to clear the IPS/LPS state when it receives a pnp notify, then
it can properly set up the hw when driver wakes up.

Signed-off-by: Yan-Hsuan Chuang <[email protected]>
Signed-off-by: Larry Finger <[email protected]>
Cc: Pkshih <[email protected]>
Cc: Birming Chiu <[email protected]>
Cc: Shaofu <[email protected]>
Cc: Steven Ting <[email protected]>
---
 .../net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.c  | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.c 
b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.c
index 0509ffab9e6f..5e9f3b0f7a25 100644
--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.c
+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.c
@@ -2905,11 +2905,18 @@ void ex_btc8821a1ant_pnp_notify(struct btc_coexist 
*btcoexist, u8 pnp_state)
        if (BTC_WIFI_PNP_SLEEP == pnp_state) {
                RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
                         "[BTCoex], Pnp notify to SLEEP\n");
+               /* BT should clear UnderIPS/UnderLPS state to avoid mismatch
+                * state after wakeup.
+                */
+               coex_sta->under_ips = false;
+               coex_sta->under_lps = false;
                btcoexist->stop_coex_dm = true;
-               btc8821a1ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
                btc8821a1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
                                              0x0, 0x0);
-               btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 9);
+               btc8821a1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
+               btc8821a1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
+               btc8821a1ant_set_ant_path(btcoexist, BTC_ANT_PATH_BT, false,
+                                         true);
        } else if (BTC_WIFI_PNP_WAKE_UP == pnp_state) {
                RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
                         "[BTCoex], Pnp notify to WAKE UP\n");
-- 
2.12.0

Reply via email to