rtlwifi: btcoex: 23b 1ant: check PS state before setting tdma duration
authorPing-Ke Shih <pkshih@realtek.com>
Tue, 16 May 2017 13:19:57 +0000 (08:19 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 18 May 2017 14:09:52 +0000 (17:09 +0300)
For time division multiple access, the wifi and bt take turns to
transmit, but we need to let AP know that wifi is under standby mode by
sending null data to "pretend" entering power saving state using lps
rpwm.

But, the fw does not know if it is the actual power saving mode or just a
fake one to cheat to the AP. Hence, before fw setting the tdma duration,
the fw needs the driver to check the power saving state first.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.c
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h

index b07883eaec5e68290c48c3dd5b727c1097559c8d..f3704d7db4d522ab894e7b8381c03afd7a1be211 100644 (file)
@@ -1401,6 +1401,7 @@ static void halbtc8723b1ant_power_save_state(struct btc_coexist *btcoexist,
                btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
                                   &low_pwr_disable);
                btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS, NULL);
+               coex_sta->force_lps_on = false;
                break;
        case BTC_PS_LPS_ON:
                halbtc8723b1ant_ps_tdma_chk_pwr_save(btcoexist, true);
@@ -1412,10 +1413,12 @@ static void halbtc8723b1ant_power_save_state(struct btc_coexist *btcoexist,
                                   &low_pwr_disable);
                /* power save must executed before psTdma */
                btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL);
+               coex_sta->force_lps_on = true;
                break;
        case BTC_PS_LPS_OFF:
                halbtc8723b1ant_ps_tdma_chk_pwr_save(btcoexist, false);
                btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS, NULL);
+               coex_sta->force_lps_on = false;
                break;
        default:
                break;
index 0b7b9b2a8e12320aec4f245475a1ffa3d4106565..d502a31812ab213e9ce3d565ce9f5c8feab81236 100644 (file)
@@ -161,6 +161,7 @@ struct coex_sta_8723b_1ant {
        u8 bt_retry_cnt;
        u8 bt_info_ext;
        bool cck_ever_lock;
+       bool force_lps_on;
        u32 pop_event_cnt;
 
        u32 crc_ok_cck;