mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 01:26:42 +07:00
rtlwifi: btcoexist: Implement antenna selection
The previous patch added an option to rtl8723be to manually select the antenna for those cases when only a single antenna is present, and the on-board EEPROM is incorrectly programmed. This patch implements the necessary changes in the Bluetooth coexistence driver. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: Stable <stable@vger.kernel.org> [V4.0+] Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
c18d8f5095
commit
baa1702290
@ -1203,7 +1203,6 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
|
||||
|
||||
/* Force GNT_BT to low */
|
||||
btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x0);
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
|
||||
|
||||
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
|
||||
/* tell firmware "no antenna inverse" */
|
||||
@ -1211,19 +1210,25 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
|
||||
h2c_parameter[1] = 1; /* ext switch type */
|
||||
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
|
||||
h2c_parameter);
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
|
||||
} else {
|
||||
/* tell firmware "antenna inverse" */
|
||||
h2c_parameter[0] = 1;
|
||||
h2c_parameter[1] = 1; /* ext switch type */
|
||||
btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
|
||||
h2c_parameter);
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
|
||||
}
|
||||
}
|
||||
|
||||
/* ext switch setting */
|
||||
if (use_ext_switch) {
|
||||
/* fixed internal switch S1->WiFi, S0->BT */
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
|
||||
if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT)
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
|
||||
else
|
||||
btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
|
||||
|
||||
switch (antpos_type) {
|
||||
case BTC_ANT_WIFI_AT_MAIN:
|
||||
/* ext switch main at wifi */
|
||||
|
@ -965,13 +965,38 @@ void exhalbtc_set_chip_type(u8 chip_type)
|
||||
}
|
||||
}
|
||||
|
||||
void exhalbtc_set_ant_num(u8 type, u8 ant_num)
|
||||
void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num)
|
||||
{
|
||||
if (BT_COEX_ANT_TYPE_PG == type) {
|
||||
gl_bt_coexist.board_info.pg_ant_num = ant_num;
|
||||
gl_bt_coexist.board_info.btdm_ant_num = ant_num;
|
||||
/* The antenna position:
|
||||
* Main (default) or Aux for pgAntNum=2 && btdmAntNum =1.
|
||||
* The antenna position should be determined by
|
||||
* auto-detect mechanism.
|
||||
* The following is assumed to main,
|
||||
* and those must be modified
|
||||
* if y auto-detect mechanism is ready
|
||||
*/
|
||||
if ((gl_bt_coexist.board_info.pg_ant_num == 2) &&
|
||||
(gl_bt_coexist.board_info.btdm_ant_num == 1))
|
||||
gl_bt_coexist.board_info.btdm_ant_pos =
|
||||
BTC_ANTENNA_AT_MAIN_PORT;
|
||||
else
|
||||
gl_bt_coexist.board_info.btdm_ant_pos =
|
||||
BTC_ANTENNA_AT_MAIN_PORT;
|
||||
} else if (BT_COEX_ANT_TYPE_ANTDIV == type) {
|
||||
gl_bt_coexist.board_info.btdm_ant_num = ant_num;
|
||||
gl_bt_coexist.board_info.btdm_ant_pos =
|
||||
BTC_ANTENNA_AT_MAIN_PORT;
|
||||
} else if (type == BT_COEX_ANT_TYPE_DETECTED) {
|
||||
gl_bt_coexist.board_info.btdm_ant_num = ant_num;
|
||||
if (rtlpriv->cfg->mod_params->ant_sel == 1)
|
||||
gl_bt_coexist.board_info.btdm_ant_pos =
|
||||
BTC_ANTENNA_AT_AUX_PORT;
|
||||
else
|
||||
gl_bt_coexist.board_info.btdm_ant_pos =
|
||||
BTC_ANTENNA_AT_MAIN_PORT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -535,7 +535,7 @@ void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version);
|
||||
void exhalbtc_update_min_bt_rssi(char bt_rssi);
|
||||
void exhalbtc_set_bt_exist(bool bt_exist);
|
||||
void exhalbtc_set_chip_type(u8 chip_type);
|
||||
void exhalbtc_set_ant_num(u8 type, u8 ant_num);
|
||||
void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
|
||||
void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
|
||||
u8 *rssi_wifi, u8 *rssi_bt);
|
||||
|
@ -72,7 +72,10 @@ void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv)
|
||||
__func__, bt_type);
|
||||
exhalbtc_set_chip_type(bt_type);
|
||||
|
||||
exhalbtc_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num);
|
||||
if (rtlpriv->cfg->mod_params->ant_sel == 1)
|
||||
exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_DETECTED, 1);
|
||||
else
|
||||
exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_PG, ant_num);
|
||||
}
|
||||
|
||||
void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv)
|
||||
|
Loading…
Reference in New Issue
Block a user