From: Ping-Ke Shih <[email protected]>

If BT is under WHCK, we enter a special mode.

Signed-off-by: Ping-Ke Shih <[email protected]>
Signed-off-by: Larry Finger <[email protected]>
Cc: Yan-Hsuan Chuang <[email protected]>
Cc: Birming Chiu <[email protected]>
Cc: Shaofu <[email protected]>
Cc: Steven Ting <[email protected]>
---
 .../realtek/rtlwifi/btcoexist/halbtc8723b1ant.c    | 25 ++++++++++++++++++++++
 .../realtek/rtlwifi/btcoexist/halbtc8723b1ant.h    |  1 +
 2 files changed, 26 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.c 
b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.c
index 51c92e5603a5..44a4855fc9aa 100644
--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.c
+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.c
@@ -1674,6 +1674,18 @@ static void 
halbtc8723b1ant_monitor_bt_enable_disable(struct btc_coexist
  *     Non-Software Coex Mechanism start
  *
  *****************************************************/
+
+static void halbtc8723b1ant_action_bt_whck_test(struct btc_coexist *btcoexist)
+{
+       halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,
+                                        0x0);
+
+       halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 8);
+       halbtc8723b1ant_set_ant_path(btcoexist, BTC_ANT_PATH_PTA, NORMAL_EXEC,
+                                    false, false);
+       halbtc8723b1ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
+}
+
 static void halbtc8723b1ant_action_wifi_multiport(struct btc_coexist 
*btcoexist)
 {
        halbtc8723b1ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
@@ -2047,6 +2059,13 @@ static void halbtc8723b1ant_run_coexist_mechanism(struct 
btc_coexist *btcoexist)
                return;
        }
 
+       if (coex_sta->bt_whck_test) {
+               RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
+                        "[BTCoex], wifi is under IPS !!!\n");
+               halbtc8723b1ant_action_bt_whck_test(btcoexist);
+               return;
+       }
+
        if (coex_dm->bt_status == BT_8723B_1ANT_BT_STATUS_ACL_BUSY ||
            coex_dm->bt_status == BT_8723B_1ANT_BT_STATUS_SCO_BUSY ||
            coex_dm->bt_status == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
@@ -2857,6 +2876,12 @@ void ex_halbtc8723b1ant_bt_info_notify(struct 
btc_coexist *btcoexist,
                                 "0x%02x, ", tmp_buf[i]);
        }
 
+       /* if 0xff, it means BT is under WHCK test */
+       if (bt_info == 0xff)
+               coex_sta->bt_whck_test = true;
+       else
+               coex_sta->bt_whck_test = false;
+
        if (rsp_source != BT_INFO_SRC_8723B_1ANT_WIFI_FW) {
                coex_sta->bt_retry_cnt = /* [3:0] */
                        coex_sta->bt_info_c2h[rsp_source][2] & 0xf;
diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h 
b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h
index b48cd5bb0ece..67b35d72ebd0 100644
--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h
+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h
@@ -164,6 +164,7 @@ struct coex_sta_8723b_1ant {
        bool c2h_bt_info_req_sent;
        u8 bt_info_c2h[BT_INFO_SRC_8723B_1ANT_MAX][10];
        u32 bt_info_c2h_cnt[BT_INFO_SRC_8723B_1ANT_MAX];
+       bool bt_whck_test;
        bool c2h_bt_inquiry_page;
        bool c2h_bt_remote_name_req;
        u8 bt_retry_cnt;
-- 
2.12.0

Reply via email to