rtlwifi: btcoex: Remove 23b 1ant configuration parameter
authorLarry Finger <Larry.Finger@lwfinger.net>
Thu, 4 May 2017 18:46:59 +0000 (13:46 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 18 May 2017 14:06:43 +0000 (17:06 +0300)
In file halbtc8723b1ant.c, there are directives that depend on an
undocumented configuration parameter BT_AUTO_REPORT_ONLY_8723B_1ANT
that cannot be set from Kconfig. This parameter is replaced by a
boolean in the main structure used by all routines. It still cannot
be changed dynamically, but it is easier to document.

The following routines are restored:
halbtc8723b1ant_bt_auto_report()
halbtc8723b1ant_set_bt_auto_report()
halbtc8723b1ant_action_wifi_only()
halbtc8723b1ant_monitor_bt_enable_disable()

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Pkshih <pkshih@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 2003c8c..f23c9e3 100644 (file)
@@ -333,6 +333,35 @@ static void halbtc8723b1ant_update_bt_link_info(struct btc_coexist *btcoexist)
                bt_link_info->hid_only = false;
 }
 
+static void halbtc8723b1ant_set_bt_auto_report(struct btc_coexist *btcoexist,
+                                              bool enable_auto_report)
+{
+       u8 h2c_parameter[1] = {0};
+
+       h2c_parameter[0] = 0;
+
+       if (enable_auto_report)
+               h2c_parameter[0] |= BIT(0);
+
+       btcoexist->btc_fill_h2c(btcoexist, 0x68, 1, h2c_parameter);
+}
+
+static void halbtc8723b1ant_bt_auto_report(struct btc_coexist *btcoexist,
+                                          bool force_exec,
+                                          bool enable_auto_report)
+{
+       coex_dm->cur_bt_auto_report = enable_auto_report;
+
+       if (!force_exec) {
+               if (coex_dm->pre_bt_auto_report == coex_dm->cur_bt_auto_report)
+                       return;
+       }
+       halbtc8723b1ant_set_bt_auto_report(btcoexist,
+                                          coex_dm->cur_bt_auto_report);
+
+       coex_dm->pre_bt_auto_report = coex_dm->cur_bt_auto_report;
+}
+
 static void btc8723b1ant_set_sw_pen_tx_rate_adapt(struct btc_coexist *btcoexist,
                                                  bool low_penalty_ra)
 {
@@ -1099,6 +1128,57 @@ static void halbtc8723b1ant_power_save_state(struct btc_coexist *btcoexist,
        }
 }
 
+static void halbtc8723b1ant_action_wifi_only(struct btc_coexist *btcoexist)
+{
+       halbtc8723b1ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
+       halbtc8723b1ant_ps_tdma(btcoexist, FORCE_EXEC, false, 8);
+       halbtc8723b1ant_set_ant_path(btcoexist, false, false, BTC_ANT_PATH_PTA);
+}
+
+/* check if BT is disabled */
+static void halbtc8723b1ant_monitor_bt_enable_disable(struct btc_coexist
+                                                     *btcoexist)
+{
+       struct rtl_priv *rtlpriv = btcoexist->adapter;
+       static u32 bt_disable_cnt;
+       bool bt_active = true, bt_disabled;
+
+       if (coex_sta->high_priority_tx == 0 &&
+           coex_sta->high_priority_rx == 0 && coex_sta->low_priority_tx == 0 &&
+           coex_sta->low_priority_rx == 0)
+               bt_active = false;
+       if (coex_sta->high_priority_tx == 0xffff &&
+           coex_sta->high_priority_rx == 0xffff &&
+           coex_sta->low_priority_tx == 0xffff &&
+           coex_sta->low_priority_rx == 0xffff)
+               bt_active = false;
+       if (bt_active) {
+               bt_disable_cnt = 0;
+               bt_disabled = false;
+       } else {
+               bt_disable_cnt++;
+               if (bt_disable_cnt >= 2)
+                       bt_disabled = true;
+       }
+       if (coex_sta->bt_disabled != bt_disabled) {
+               RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
+                        "[BTCoex], BT is from %s to %s!!\n",
+                        (coex_sta->bt_disabled ? "disabled" : "enabled"),
+                        (bt_disabled ? "disabled" : "enabled"));
+
+               coex_sta->bt_disabled = bt_disabled;
+               btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,
+                                  &bt_disabled);
+               if (bt_disabled) {
+                       halbtc8723b1ant_action_wifi_only(btcoexist);
+                       btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS,
+                                          NULL);
+                       btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS,
+                                          NULL);
+               }
+       }
+}
+
 /*****************************************************
  *
  *     Non-Software Coex Mechanism start
@@ -1638,6 +1718,7 @@ static void halbtc8723b1ant_init_hw_config(struct btc_coexist *btcoexist,
 void ex_halbtc8723b1ant_init_hwconfig(struct btc_coexist *btcoexist)
 {
        halbtc8723b1ant_init_hw_config(btcoexist, true);
+       btcoexist->auto_report_1ant = true;
 }
 
 void ex_halbtc8723b1ant_init_coex_dm(struct btc_coexist *btcoexist)
@@ -1926,9 +2007,8 @@ void ex_halbtc8723b1ant_display_coex_info(struct btc_coexist *btcoexist)
        RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "\r\n %-35s = %d/ %d",
                 "0x774(low-pri rx/tx)", coex_sta->low_priority_rx,
                 coex_sta->low_priority_tx);
-#if (BT_AUTO_REPORT_ONLY_8723B_1ANT == 1)
-       halbtc8723b1ant_monitor_bt_ctr(btcoexist);
-#endif
+       if (btcoexist->auto_report_1ant)
+               halbtc8723b1ant_monitor_bt_ctr(btcoexist);
        btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS);
 }
 
@@ -2247,14 +2327,15 @@ void ex_halbtc8723b1ant_bt_info_notify(struct btc_coexist *btcoexist,
                } else {
                        /* BT already NOT ignore Wlan active, do nothing here.*/
                }
-#if (BT_AUTO_REPORT_ONLY_8723B_1ANT == 0)
-               if (coex_sta->bt_info_ext & BIT4) {
-                       /* BT auto report already enabled, do nothing */
-               } else {
-                       halbtc8723b1ant_bt_auto_report(btcoexist, FORCE_EXEC,
-                                                      true);
+               if (!btcoexist->auto_report_1ant) {
+                       if (coex_sta->bt_info_ext & BIT4) {
+                               /* BT auto report already enabled, do nothing */
+                       } else {
+                               halbtc8723b1ant_bt_auto_report(btcoexist,
+                                                              FORCE_EXEC,
+                                                              true);
+                       }
                }
-#endif
        }
 
        /* check BIT2 first ==> check if bt is under inquiry or page scan */
@@ -2425,16 +2506,15 @@ void ex_halbtc8723b1ant_periodical(struct btc_coexist *btcoexist)
                         "[BTCoex], ****************************************************************\n");
        }
 
-#if (BT_AUTO_REPORT_ONLY_8723B_1ANT == 0)
-       halbtc8723b1ant_query_bt_info(btcoexist);
-       halbtc8723b1ant_monitor_bt_ctr(btcoexist);
-       halbtc8723b1ant_monitor_bt_enable_disable(btcoexist);
-#else
-       if (btc8723b1ant_is_wifi_status_changed(btcoexist) ||
-           coex_dm->auto_tdma_adjust) {
-               halbtc8723b1ant_run_coexist_mechanism(btcoexist);
+       if (!btcoexist->auto_report_1ant) {
+               halbtc8723b1ant_query_bt_info(btcoexist);
+               halbtc8723b1ant_monitor_bt_ctr(btcoexist);
+               halbtc8723b1ant_monitor_bt_enable_disable(btcoexist);
+       } else {
+               if (btc8723b1ant_is_wifi_status_changed(btcoexist) ||
+                   coex_dm->auto_tdma_adjust) {
+                       halbtc8723b1ant_run_coexist_mechanism(btcoexist);
+               }
+               coex_sta->special_pkt_period_cnt++;
        }
-
-       coex_sta->special_pkt_period_cnt++;
-#endif
 }
index 75f8094..7e91901 100644 (file)
@@ -25,8 +25,6 @@
 /**********************************************************************
  * The following is for 8723B 1ANT BT Co-exist definition
  **********************************************************************/
-#define        BT_AUTO_REPORT_ONLY_8723B_1ANT                  1
-
 #define        BT_INFO_8723B_1ANT_B_FTP                        BIT7
 #define        BT_INFO_8723B_1ANT_B_A2DP                       BIT6
 #define        BT_INFO_8723B_1ANT_B_HID                        BIT5
@@ -138,6 +136,7 @@ struct coex_dm_8723b_1ant {
 };
 
 struct coex_sta_8723b_1ant {
+       bool bt_disabled;
        bool bt_link_exist;
        bool sco_exist;
        bool a2dp_exist;