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

rtlwifi: btcoex: 21a 2ant: dec bt power according to bt rssi and set tdma

Check the bt rssi first and decrease it if the bt rssi is too high.
Then set the tdma and coex table.
Signed-off-by: default avatarYan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: Pkshih <pkshih@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent f76184d0
...@@ -3009,28 +3009,31 @@ static void btc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist) ...@@ -3009,28 +3009,31 @@ static void btc8821a2ant_action_pan_edr(struct btc_coexist *btcoexist)
/* PAN(HS) only */ /* PAN(HS) only */
static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state; u8 wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0); wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0); wifi_rssi_state1 = btc8821a2ant_wifi_rssi_state(btcoexist, 1, 2,
BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist,
2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
btc8821a2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8); btc8821a2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); if (BTC_RSSI_HIGH(bt_rssi_state))
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
else
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
if (BTC_WIFI_BW_HT40 == wifi_bw) { btc8821a2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
/* fw mechanism */ btc8821a2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
} else {
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
}
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
/* sw mechanism */ btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (wifi_bw == BTC_WIFI_BW_HT40) {
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mechanism1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
...@@ -3044,22 +3047,6 @@ static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist) ...@@ -3044,22 +3047,6 @@ static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist)
false, 0x18); false, 0x18);
} }
} else { } else {
/* fw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, true);
} else {
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
}
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
} else {
btc8821a2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
}
/* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mechanism1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
...@@ -3078,12 +3065,18 @@ static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist) ...@@ -3078,12 +3065,18 @@ static void btc8821a2ant_action_pan_hs(struct btc_coexist *btcoexist)
/* PAN(EDR)+A2DP */ /* PAN(EDR)+A2DP */
static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
{ {
u8 wifi_rssi_state, bt_rssi_state, bt_info_ext; u8 wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;
u32 wifi_bw; u32 wifi_bw;
bt_info_ext = coex_sta->bt_info_ext;
wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0); wifi_rssi_state = btc8821a2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist, 2, 35, 0); wifi_rssi_state1 = btc8821a2ant_wifi_rssi_state(btcoexist, 1, 2,
BT_8821A_2ANT_WIFI_RSSI_COEXSWITCH_THRES, 0);
bt_rssi_state = btc8821a2ant_bt_rssi_state(btcoexist,
2, BT_8821A_2ANT_BT_RSSI_COEXSWITCH_THRES, 0);
btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
btc8821a2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6); btc8821a2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
...@@ -3092,44 +3085,32 @@ static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -3092,44 +3085,32 @@ static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
else else
btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0); btc8821a2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state))
btc8821a2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
0x0, 0x0);
else
btc8821a2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
0x4);
btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw); btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
if (wifi_bw == BTC_WIFI_BW_LEGACY) { if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
/* for HID at 11b/g mode */ (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 12);
0x5afa5afa, 0xffff, 0x3);
if (wifi_bw == BTC_WIFI_BW_HT40)
btc8821a2ant_tdma_duration_adjust(btcoexist, false,
true, 3);
else
btc8821a2ant_tdma_duration_adjust(btcoexist, false,
false, 3);
} else { } else {
/* for HID quality & wifi performance balance at 11n mode */ btc8821a2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 13);
btc8821a2ant_coex_table(btcoexist, NORMAL_EXEC, 0x55ff55ff, btc8821a2ant_tdma_duration_adjust(btcoexist, false, true, 3);
0x5afa5afa, 0xffff, 0x3);
} }
if (BTC_WIFI_BW_HT40 == wifi_bw) { /* sw mechanism */
/* fw mechanism */ if (wifi_bw == BTC_WIFI_BW_HT40) {
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
if (bt_info_ext&BIT0) {
/* a2dp basic rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, false, 3);
} else {
/* a2dp edr rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, false, 3);
}
} else {
if (bt_info_ext&BIT0) {
/* a2dp basic rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, true, 3);
} else {
/* a2dp edr rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, true, 3);
}
}
/* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mechanism1(btcoexist, true, false, btc8821a2ant_sw_mechanism1(btcoexist, true, false,
...@@ -3141,33 +3122,8 @@ static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist) ...@@ -3141,33 +3122,8 @@ static void btc8821a2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
false, false); false, false);
btc8821a2ant_sw_mechanism2(btcoexist, false, false, btc8821a2ant_sw_mechanism2(btcoexist, false, false,
false, 0x18); false, 0x18);
};
} else {
/* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
(bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
if (bt_info_ext&BIT0) {
/* a2dp basic rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, false, 3);
} else {
/* a2dp edr rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, false, 3);
}
} else {
if (bt_info_ext&BIT0) {
/* a2dp basic rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, true, 3);
} else {
/* a2dp edr rate */
btc8821a2ant_tdma_duration_adjust(btcoexist,
false, true, 3);
}
} }
} else {
/* sw mechanism */
if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) || if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
(wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) { (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
btc8821a2ant_sw_mechanism1(btcoexist, false, false, btc8821a2ant_sw_mechanism1(btcoexist, false, false,
......
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