rtlwifi: btcoex: settings before firmware is downloaded
authorYan-Hsuan Chuang <yhchuang@realtek.com>
Mon, 5 Jun 2017 15:29:53 +0000 (10:29 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 13 Jun 2017 07:02:27 +0000 (10:02 +0300)
The btcoex is sometimes unstable because there are some unexpected
behaviors before the firmware has been downloaded successfully.

Therefore we force the antenna path settings to avoid this, then let the
firmware control the btcoexistence when the firmware is ready.

Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Ping-Ke Shih <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/halbtc8723b2ant.h
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a2ant.h
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h

index 50726beaeead2fba66dcc7e6c70600b24b70838b..a98b9548c3c7a155bb9c331465df42e6d0f0c951 100644 (file)
@@ -196,5 +196,6 @@ void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
 void ex_btc8723b2ant_halt_notify(struct btc_coexist *btcoexist);
 void ex_btc8723b2ant_periodical(struct btc_coexist *btcoexist);
 void ex_btc8723b2ant_display_coex_info(struct btc_coexist *btcoexist);
+void ex_btc8723b2ant_pre_load_firmware(struct btc_coexist *btcoexist);
 
 #endif
index 1d6e3e9abd917526693aa9a0636a009aa2e5aee7..a839d557442206a1e3bcd92e2974d5eb777df20b 100644 (file)
@@ -228,3 +228,5 @@ void
 ex_btc8821a2ant_display_coex_info(
        struct btc_coexist *btcoexist
        );
+void ex_btc8821a2ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
+void ex_btc8821a2ant_pre_load_firmware(struct btc_coexist *btcoexist);
index f1300061291375dda7084923dd4682d7ad13ce25..0cd4926c1ed795493a3271493714fc1044fe8473 100644 (file)
@@ -690,6 +690,19 @@ bool exhalbtc_initlize_variables(struct rtl_priv *adapter)
        return true;
 }
 
+void exhalbtc_pre_load_firmware(struct btc_coexist *btcoexist)
+{
+       if (!halbtc_is_bt_coexist_available(btcoexist))
+               return;
+
+       btcoexist->statistics.cnt_pre_load_firmware++;
+
+       if (IS_HARDWARE_TYPE_8723B(btcoexist->adapter)) {
+               if (btcoexist->board_info.btdm_ant_num == 2)
+                       ex_btc8723b2ant_pre_load_firmware(btcoexist);
+       }
+}
+
 void exhalbtc_init_hw_config(struct btc_coexist *btcoexist)
 {
        struct rtl_priv *rtlpriv = btcoexist->adapter;
index c5c360e011a970259a43872c5470085a921dcc45..eca0e5a78ada6e4be872a45d787e8a6eab38b60e 100644 (file)
@@ -486,6 +486,7 @@ struct btc_statistics {
        u32 cnt_coex_dm_switch;
        u32 cnt_stack_operation_notify;
        u32 cnt_dbg_ctrl;
+       u32 cnt_pre_load_firmware;
 };
 
 struct btc_bt_link_info {