Commit bcd37f4a authored by Yan-Hsuan Chuang's avatar Yan-Hsuan Chuang Committed by Kalle Valo

rtlwifi: btcoex: 23b 2ant: let bt transmit when hw initialisation done

During hw initialisation, wifi may be ready after bt has already been
ready, which causes bt to act abnormally. To avoid this, set GNT_BT to
high during hw init.
Signed-off-by: default avatarYan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Stable <stable@vger.kernel.org>
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: default avatarKalle Valo <kvalo@codeaurora.org>
parent 3b4fa04d
...@@ -1083,12 +1083,7 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -1083,12 +1083,7 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
use_ext_switch = true; use_ext_switch = true;
if (init_hwcfg) { if (init_hwcfg) {
/* 0x4c[23] = 0, 0x4c[24] = 1 Antenna control by WL/BT */ btcoexist->btc_write_1byte_bitmask(btcoexist, 0x39, 0x8, 0x1);
u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
u32tmp &= ~BIT23;
u32tmp |= BIT24;
btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
btcoexist->btc_write_1byte(btcoexist, 0x974, 0xff); btcoexist->btc_write_1byte(btcoexist, 0x974, 0xff);
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x944, 0x3, 0x3); btcoexist->btc_write_1byte_bitmask(btcoexist, 0x944, 0x3, 0x3);
btcoexist->btc_write_1byte(btcoexist, 0x930, 0x77); btcoexist->btc_write_1byte(btcoexist, 0x930, 0x77);
...@@ -1103,6 +1098,12 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -1103,6 +1098,12 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18); btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18);
} }
btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);
/* WiFi TRx Mask off */
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A,
0x1, 0xfffff, 0x0);
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) { if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
/* tell firmware "no antenna inverse" */ /* tell firmware "no antenna inverse" */
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
...@@ -1125,17 +1126,23 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -1125,17 +1126,23 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
h2c_parameter[0] = 0; h2c_parameter[0] = 0;
btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1, btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1,
h2c_parameter); h2c_parameter);
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); } else {
btcoexist->btc_write_1byte(btcoexist, 0x765, 0x0);
} }
} }
/* ext switch setting */ /* ext switch setting */
if (use_ext_switch) { if (use_ext_switch) {
if (init_hwcfg) {
/* 0x4c[23] = 0, 0x4c[24] = 1 Ant controlled by WL/BT */
u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
u32tmp &= ~BIT23;
u32tmp |= BIT24;
btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
}
/* fixed internal switch S1->WiFi, S0->BT */ /* fixed internal switch S1->WiFi, S0->BT */
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
else
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
switch (antpos_type) { switch (antpos_type) {
case BTC_ANT_WIFI_AT_MAIN: case BTC_ANT_WIFI_AT_MAIN:
...@@ -1149,9 +1156,18 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, ...@@ -1149,9 +1156,18 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
0x92c, 0x3, 0x2); 0x92c, 0x3, 0x2);
break; break;
} }
} else { /* internal switch */ } else {
/* fixed ext switch */ /* internal switch */
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c, 0x3, 0x1); if (init_hwcfg) {
/* 0x4c[23] = 0, 0x4c[24] = 1 Ant controlled by WL/BT */
u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
u32tmp |= BIT23;
u32tmp &= ~BIT24;
btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
}
/* fixed ext switch, S1->Main, S0->Aux */
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64, 0x1, 0x0);
switch (antpos_type) { switch (antpos_type) {
case BTC_ANT_WIFI_AT_MAIN: case BTC_ANT_WIFI_AT_MAIN:
/* fixed internal switch S1->WiFi, S0->BT */ /* fixed internal switch S1->WiFi, S0->BT */
...@@ -1458,6 +1474,7 @@ static void btc8723b2ant_coex_alloff(struct btc_coexist *btcoexist) ...@@ -1458,6 +1474,7 @@ static void btc8723b2ant_coex_alloff(struct btc_coexist *btcoexist)
static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist) static void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
{ {
/* force to reset coex mechanism*/ /* force to reset coex mechanism*/
btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0); btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
btc8723b2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1); btc8723b2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment