162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/* Copyright(c) 2012  Realtek Corporation.*/
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/***************************************************************
562306a36Sopenharmony_ci * Description:
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * This file is for RTL8723B Co-exist mechanism
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * History
1062306a36Sopenharmony_ci * 2012/11/15 Cosa first check in.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci **************************************************************/
1362306a36Sopenharmony_ci/**************************************************************
1462306a36Sopenharmony_ci * include files
1562306a36Sopenharmony_ci **************************************************************/
1662306a36Sopenharmony_ci#include "halbt_precomp.h"
1762306a36Sopenharmony_ci/**************************************************************
1862306a36Sopenharmony_ci * Global variables, these are static variables
1962306a36Sopenharmony_ci **************************************************************/
2062306a36Sopenharmony_cistatic struct coex_dm_8723b_2ant glcoex_dm_8723b_2ant;
2162306a36Sopenharmony_cistatic struct coex_dm_8723b_2ant *coex_dm = &glcoex_dm_8723b_2ant;
2262306a36Sopenharmony_cistatic struct coex_sta_8723b_2ant glcoex_sta_8723b_2ant;
2362306a36Sopenharmony_cistatic struct coex_sta_8723b_2ant *coex_sta = &glcoex_sta_8723b_2ant;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic const char *const glbt_info_src_8723b_2ant[] = {
2662306a36Sopenharmony_ci	"BT Info[wifi fw]",
2762306a36Sopenharmony_ci	"BT Info[bt rsp]",
2862306a36Sopenharmony_ci	"BT Info[bt auto report]",
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic u32 glcoex_ver_date_8723b_2ant = 20131113;
3262306a36Sopenharmony_cistatic u32 glcoex_ver_8723b_2ant = 0x3f;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/**************************************************************
3562306a36Sopenharmony_ci * local function proto type if needed
3662306a36Sopenharmony_ci **************************************************************/
3762306a36Sopenharmony_ci/**************************************************************
3862306a36Sopenharmony_ci * local function start with btc8723b2ant_
3962306a36Sopenharmony_ci **************************************************************/
4062306a36Sopenharmony_cistatic u8 btc8723b2ant_bt_rssi_state(struct btc_coexist *btcoexist,
4162306a36Sopenharmony_ci				     u8 level_num, u8 rssi_thresh,
4262306a36Sopenharmony_ci				     u8 rssi_thresh1)
4362306a36Sopenharmony_ci{
4462306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
4562306a36Sopenharmony_ci	s32 bt_rssi = 0;
4662306a36Sopenharmony_ci	u8 bt_rssi_state = coex_sta->pre_bt_rssi_state;
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci	bt_rssi = coex_sta->bt_rssi;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	if (level_num == 2) {
5162306a36Sopenharmony_ci		if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
5262306a36Sopenharmony_ci		    (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
5362306a36Sopenharmony_ci			if (bt_rssi >= rssi_thresh +
5462306a36Sopenharmony_ci				       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
5562306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_HIGH;
5662306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
5762306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to High\n");
5862306a36Sopenharmony_ci			} else {
5962306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;
6062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
6162306a36Sopenharmony_ci					"[BTCoex], BT Rssi state stay at Low\n");
6262306a36Sopenharmony_ci			}
6362306a36Sopenharmony_ci		} else {
6462306a36Sopenharmony_ci			if (bt_rssi < rssi_thresh) {
6562306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_LOW;
6662306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
6762306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to Low\n");
6862306a36Sopenharmony_ci			} else {
6962306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
7062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
7162306a36Sopenharmony_ci					"[BTCoex], BT Rssi state stay at High\n");
7262306a36Sopenharmony_ci			}
7362306a36Sopenharmony_ci		}
7462306a36Sopenharmony_ci	} else if (level_num == 3) {
7562306a36Sopenharmony_ci		if (rssi_thresh > rssi_thresh1) {
7662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
7762306a36Sopenharmony_ci				"[BTCoex], BT Rssi thresh error!!\n");
7862306a36Sopenharmony_ci			return coex_sta->pre_bt_rssi_state;
7962306a36Sopenharmony_ci		}
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci		if ((coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||
8262306a36Sopenharmony_ci		    (coex_sta->pre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {
8362306a36Sopenharmony_ci			if (bt_rssi >= rssi_thresh +
8462306a36Sopenharmony_ci				       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
8562306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_MEDIUM;
8662306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
8762306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to Medium\n");
8862306a36Sopenharmony_ci			} else {
8962306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;
9062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
9162306a36Sopenharmony_ci					"[BTCoex], BT Rssi state stay at Low\n");
9262306a36Sopenharmony_ci			}
9362306a36Sopenharmony_ci		} else if ((coex_sta->pre_bt_rssi_state ==
9462306a36Sopenharmony_ci						BTC_RSSI_STATE_MEDIUM) ||
9562306a36Sopenharmony_ci			   (coex_sta->pre_bt_rssi_state ==
9662306a36Sopenharmony_ci						BTC_RSSI_STATE_STAY_MEDIUM)) {
9762306a36Sopenharmony_ci			if (bt_rssi >= rssi_thresh1 +
9862306a36Sopenharmony_ci				       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
9962306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_HIGH;
10062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
10162306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to High\n");
10262306a36Sopenharmony_ci			} else if (bt_rssi < rssi_thresh) {
10362306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_LOW;
10462306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
10562306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to Low\n");
10662306a36Sopenharmony_ci			} else {
10762306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
10862306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
10962306a36Sopenharmony_ci					"[BTCoex], BT Rssi state stay at Medium\n");
11062306a36Sopenharmony_ci			}
11162306a36Sopenharmony_ci		} else {
11262306a36Sopenharmony_ci			if (bt_rssi < rssi_thresh1) {
11362306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_MEDIUM;
11462306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
11562306a36Sopenharmony_ci					"[BTCoex], BT Rssi state switch to Medium\n");
11662306a36Sopenharmony_ci			} else {
11762306a36Sopenharmony_ci				bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
11862306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
11962306a36Sopenharmony_ci					"[BTCoex], BT Rssi state stay at High\n");
12062306a36Sopenharmony_ci			}
12162306a36Sopenharmony_ci		}
12262306a36Sopenharmony_ci	}
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci	coex_sta->pre_bt_rssi_state = bt_rssi_state;
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci	return bt_rssi_state;
12762306a36Sopenharmony_ci}
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_cistatic u8 btc8723b2ant_wifi_rssi_state(struct btc_coexist *btcoexist,
13062306a36Sopenharmony_ci				       u8 index, u8 level_num,
13162306a36Sopenharmony_ci				       u8 rssi_thresh, u8 rssi_thresh1)
13262306a36Sopenharmony_ci{
13362306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
13462306a36Sopenharmony_ci	s32 wifi_rssi = 0;
13562306a36Sopenharmony_ci	u8 wifi_rssi_state = coex_sta->pre_wifi_rssi_state[index];
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifi_rssi);
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci	if (level_num == 2) {
14062306a36Sopenharmony_ci		if ((coex_sta->pre_wifi_rssi_state[index] ==
14162306a36Sopenharmony_ci						BTC_RSSI_STATE_LOW) ||
14262306a36Sopenharmony_ci		    (coex_sta->pre_wifi_rssi_state[index] ==
14362306a36Sopenharmony_ci						BTC_RSSI_STATE_STAY_LOW)) {
14462306a36Sopenharmony_ci			if (wifi_rssi >= rssi_thresh +
14562306a36Sopenharmony_ci					 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
14662306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_HIGH;
14762306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
14862306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to High\n");
14962306a36Sopenharmony_ci			} else {
15062306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;
15162306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
15262306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state stay at Low\n");
15362306a36Sopenharmony_ci			}
15462306a36Sopenharmony_ci		} else {
15562306a36Sopenharmony_ci			if (wifi_rssi < rssi_thresh) {
15662306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_LOW;
15762306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
15862306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to Low\n");
15962306a36Sopenharmony_ci			} else {
16062306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
16162306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
16262306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state stay at High\n");
16362306a36Sopenharmony_ci			}
16462306a36Sopenharmony_ci		}
16562306a36Sopenharmony_ci	} else if (level_num == 3) {
16662306a36Sopenharmony_ci		if (rssi_thresh > rssi_thresh1) {
16762306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
16862306a36Sopenharmony_ci				"[BTCoex], wifi RSSI thresh error!!\n");
16962306a36Sopenharmony_ci			return coex_sta->pre_wifi_rssi_state[index];
17062306a36Sopenharmony_ci		}
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci		if ((coex_sta->pre_wifi_rssi_state[index] ==
17362306a36Sopenharmony_ci						BTC_RSSI_STATE_LOW) ||
17462306a36Sopenharmony_ci		    (coex_sta->pre_wifi_rssi_state[index] ==
17562306a36Sopenharmony_ci						BTC_RSSI_STATE_STAY_LOW)) {
17662306a36Sopenharmony_ci			if (wifi_rssi >= rssi_thresh +
17762306a36Sopenharmony_ci					BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
17862306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
17962306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
18062306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to Medium\n");
18162306a36Sopenharmony_ci			} else {
18262306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;
18362306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
18462306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state stay at Low\n");
18562306a36Sopenharmony_ci			}
18662306a36Sopenharmony_ci		} else if ((coex_sta->pre_wifi_rssi_state[index] ==
18762306a36Sopenharmony_ci						BTC_RSSI_STATE_MEDIUM) ||
18862306a36Sopenharmony_ci			   (coex_sta->pre_wifi_rssi_state[index] ==
18962306a36Sopenharmony_ci						BTC_RSSI_STATE_STAY_MEDIUM)) {
19062306a36Sopenharmony_ci			if (wifi_rssi >= rssi_thresh1 +
19162306a36Sopenharmony_ci					 BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT) {
19262306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_HIGH;
19362306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
19462306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to High\n");
19562306a36Sopenharmony_ci			} else if (wifi_rssi < rssi_thresh) {
19662306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_LOW;
19762306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
19862306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to Low\n");
19962306a36Sopenharmony_ci			} else {
20062306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;
20162306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
20262306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state stay at Medium\n");
20362306a36Sopenharmony_ci			}
20462306a36Sopenharmony_ci		} else {
20562306a36Sopenharmony_ci			if (wifi_rssi < rssi_thresh1) {
20662306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;
20762306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
20862306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state switch to Medium\n");
20962306a36Sopenharmony_ci			} else {
21062306a36Sopenharmony_ci				wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;
21162306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
21262306a36Sopenharmony_ci					"[BTCoex], wifi RSSI state stay at High\n");
21362306a36Sopenharmony_ci			}
21462306a36Sopenharmony_ci		}
21562306a36Sopenharmony_ci	}
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ci	coex_sta->pre_wifi_rssi_state[index] = wifi_rssi_state;
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci	return wifi_rssi_state;
22062306a36Sopenharmony_ci}
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_cistatic
22362306a36Sopenharmony_civoid btc8723b2ant_limited_rx(struct btc_coexist *btcoexist, bool force_exec,
22462306a36Sopenharmony_ci			     bool rej_ap_agg_pkt, bool bt_ctrl_agg_buf_size,
22562306a36Sopenharmony_ci			     u8 agg_buf_size)
22662306a36Sopenharmony_ci{
22762306a36Sopenharmony_ci	bool reject_rx_agg = rej_ap_agg_pkt;
22862306a36Sopenharmony_ci	bool bt_ctrl_rx_agg_size = bt_ctrl_agg_buf_size;
22962306a36Sopenharmony_ci	u8 rx_agg_size = agg_buf_size;
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci	/* ============================================ */
23262306a36Sopenharmony_ci	/*	Rx Aggregation related setting		*/
23362306a36Sopenharmony_ci	/* ============================================ */
23462306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT,
23562306a36Sopenharmony_ci			   &reject_rx_agg);
23662306a36Sopenharmony_ci	/* decide BT control aggregation buf size or not */
23762306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE,
23862306a36Sopenharmony_ci			   &bt_ctrl_rx_agg_size);
23962306a36Sopenharmony_ci	/* aggregate buf size, only work when BT control Rx aggregate size */
24062306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_U1_AGG_BUF_SIZE, &rx_agg_size);
24162306a36Sopenharmony_ci	/* real update aggregation setting */
24262306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
24362306a36Sopenharmony_ci}
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_cistatic void btc8723b2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
24662306a36Sopenharmony_ci{
24762306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
24862306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
24962306a36Sopenharmony_ci	u32 reg_hp_txrx, reg_lp_txrx, u32tmp;
25062306a36Sopenharmony_ci	u32 reg_hp_tx = 0, reg_hp_rx = 0;
25162306a36Sopenharmony_ci	u32 reg_lp_tx = 0, reg_lp_rx = 0;
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	reg_hp_txrx = 0x770;
25462306a36Sopenharmony_ci	reg_lp_txrx = 0x774;
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci	u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx);
25762306a36Sopenharmony_ci	reg_hp_tx = u32tmp & MASKLWORD;
25862306a36Sopenharmony_ci	reg_hp_rx = (u32tmp & MASKHWORD) >> 16;
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci	u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx);
26162306a36Sopenharmony_ci	reg_lp_tx = u32tmp & MASKLWORD;
26262306a36Sopenharmony_ci	reg_lp_rx = (u32tmp & MASKHWORD) >> 16;
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci	coex_sta->high_priority_tx = reg_hp_tx;
26562306a36Sopenharmony_ci	coex_sta->high_priority_rx = reg_hp_rx;
26662306a36Sopenharmony_ci	coex_sta->low_priority_tx = reg_lp_tx;
26762306a36Sopenharmony_ci	coex_sta->low_priority_rx = reg_lp_rx;
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci	if ((coex_sta->low_priority_tx > 1050) &&
27062306a36Sopenharmony_ci	    (!coex_sta->c2h_bt_inquiry_page))
27162306a36Sopenharmony_ci		coex_sta->pop_event_cnt++;
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci	if ((coex_sta->low_priority_rx >= 950) &&
27462306a36Sopenharmony_ci	    (coex_sta->low_priority_rx >= coex_sta->low_priority_tx) &&
27562306a36Sopenharmony_ci	    (!coex_sta->under_ips))
27662306a36Sopenharmony_ci		bt_link_info->slave_role = true;
27762306a36Sopenharmony_ci	else
27862306a36Sopenharmony_ci		bt_link_info->slave_role = false;
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
28162306a36Sopenharmony_ci		"[BTCoex], High Priority Tx/Rx(reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
28262306a36Sopenharmony_ci		reg_hp_txrx, reg_hp_tx, reg_hp_tx, reg_hp_rx, reg_hp_rx);
28362306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
28462306a36Sopenharmony_ci		"[BTCoex], Low Priority Tx/Rx(reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
28562306a36Sopenharmony_ci		reg_lp_txrx, reg_lp_tx, reg_lp_tx, reg_lp_rx, reg_lp_rx);
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci	/* reset counter */
28862306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
28962306a36Sopenharmony_ci}
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_cistatic void btc8723b2ant_monitor_wifi_ctr(struct btc_coexist *btcoexist)
29262306a36Sopenharmony_ci{
29362306a36Sopenharmony_ci	if (coex_sta->under_ips) {
29462306a36Sopenharmony_ci		coex_sta->crc_ok_cck = 0;
29562306a36Sopenharmony_ci		coex_sta->crc_ok_11g = 0;
29662306a36Sopenharmony_ci		coex_sta->crc_ok_11n = 0;
29762306a36Sopenharmony_ci		coex_sta->crc_ok_11n_agg = 0;
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci		coex_sta->crc_err_cck = 0;
30062306a36Sopenharmony_ci		coex_sta->crc_err_11g = 0;
30162306a36Sopenharmony_ci		coex_sta->crc_err_11n = 0;
30262306a36Sopenharmony_ci		coex_sta->crc_err_11n_agg = 0;
30362306a36Sopenharmony_ci	} else {
30462306a36Sopenharmony_ci		coex_sta->crc_ok_cck =
30562306a36Sopenharmony_ci			btcoexist->btc_read_4byte(btcoexist, 0xf88);
30662306a36Sopenharmony_ci		coex_sta->crc_ok_11g =
30762306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xf94);
30862306a36Sopenharmony_ci		coex_sta->crc_ok_11n =
30962306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xf90);
31062306a36Sopenharmony_ci		coex_sta->crc_ok_11n_agg =
31162306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xfb8);
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci		coex_sta->crc_err_cck =
31462306a36Sopenharmony_ci			btcoexist->btc_read_4byte(btcoexist, 0xf84);
31562306a36Sopenharmony_ci		coex_sta->crc_err_11g =
31662306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xf96);
31762306a36Sopenharmony_ci		coex_sta->crc_err_11n =
31862306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xf92);
31962306a36Sopenharmony_ci		coex_sta->crc_err_11n_agg =
32062306a36Sopenharmony_ci			btcoexist->btc_read_2byte(btcoexist, 0xfba);
32162306a36Sopenharmony_ci	}
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ci	/* reset counter */
32462306a36Sopenharmony_ci	btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x1);
32562306a36Sopenharmony_ci	btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x0);
32662306a36Sopenharmony_ci}
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_cistatic void btc8723b2ant_query_bt_info(struct btc_coexist *btcoexist)
32962306a36Sopenharmony_ci{
33062306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
33162306a36Sopenharmony_ci	u8 h2c_parameter[1] = {0};
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci	coex_sta->c2h_bt_info_req_sent = true;
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ci	h2c_parameter[0] |= BIT0;	/* trigger */
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
33862306a36Sopenharmony_ci		"[BTCoex], Query Bt Info, FW write 0x61 = 0x%x\n",
33962306a36Sopenharmony_ci		h2c_parameter[0]);
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);
34262306a36Sopenharmony_ci}
34362306a36Sopenharmony_ci
34462306a36Sopenharmony_cistatic bool btc8723b2ant_is_wifi_status_changed(struct btc_coexist *btcoexist)
34562306a36Sopenharmony_ci{
34662306a36Sopenharmony_ci	static bool pre_wifi_busy;
34762306a36Sopenharmony_ci	static bool pre_under_4way;
34862306a36Sopenharmony_ci	static bool pre_bt_hs_on;
34962306a36Sopenharmony_ci	bool wifi_busy = false, under_4way = false, bt_hs_on = false;
35062306a36Sopenharmony_ci	bool wifi_connected = false;
35162306a36Sopenharmony_ci	u8 wifi_rssi_state = BTC_RSSI_STATE_HIGH;
35262306a36Sopenharmony_ci	u8 tmp;
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
35562306a36Sopenharmony_ci			   &wifi_connected);
35662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
35762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
35862306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS,
35962306a36Sopenharmony_ci			   &under_4way);
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci	if (wifi_connected) {
36262306a36Sopenharmony_ci		if (wifi_busy != pre_wifi_busy) {
36362306a36Sopenharmony_ci			pre_wifi_busy = wifi_busy;
36462306a36Sopenharmony_ci			return true;
36562306a36Sopenharmony_ci		}
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci		if (under_4way != pre_under_4way) {
36862306a36Sopenharmony_ci			pre_under_4way = under_4way;
36962306a36Sopenharmony_ci			return true;
37062306a36Sopenharmony_ci		}
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci		if (bt_hs_on != pre_bt_hs_on) {
37362306a36Sopenharmony_ci			pre_bt_hs_on = bt_hs_on;
37462306a36Sopenharmony_ci			return true;
37562306a36Sopenharmony_ci		}
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci		tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
37862306a36Sopenharmony_ci				 coex_dm->switch_thres_offset;
37962306a36Sopenharmony_ci		wifi_rssi_state =
38062306a36Sopenharmony_ci		     btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, tmp, 0);
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ci		if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||
38362306a36Sopenharmony_ci		    (wifi_rssi_state == BTC_RSSI_STATE_LOW))
38462306a36Sopenharmony_ci			return true;
38562306a36Sopenharmony_ci	}
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci	return false;
38862306a36Sopenharmony_ci}
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_cistatic void btc8723b2ant_update_bt_link_info(struct btc_coexist *btcoexist)
39162306a36Sopenharmony_ci{
39262306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
39362306a36Sopenharmony_ci	bool bt_hs_on = false;
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci	bt_link_info->bt_link_exist = coex_sta->bt_link_exist;
39862306a36Sopenharmony_ci	bt_link_info->sco_exist = coex_sta->sco_exist;
39962306a36Sopenharmony_ci	bt_link_info->a2dp_exist = coex_sta->a2dp_exist;
40062306a36Sopenharmony_ci	bt_link_info->pan_exist = coex_sta->pan_exist;
40162306a36Sopenharmony_ci	bt_link_info->hid_exist = coex_sta->hid_exist;
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ci	/* work around for HS mode. */
40462306a36Sopenharmony_ci	if (bt_hs_on) {
40562306a36Sopenharmony_ci		bt_link_info->pan_exist = true;
40662306a36Sopenharmony_ci		bt_link_info->bt_link_exist = true;
40762306a36Sopenharmony_ci	}
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ci	/* check if Sco only */
41062306a36Sopenharmony_ci	if (bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
41162306a36Sopenharmony_ci	    !bt_link_info->pan_exist && !bt_link_info->hid_exist)
41262306a36Sopenharmony_ci		bt_link_info->sco_only = true;
41362306a36Sopenharmony_ci	else
41462306a36Sopenharmony_ci		bt_link_info->sco_only = false;
41562306a36Sopenharmony_ci
41662306a36Sopenharmony_ci	/* check if A2dp only */
41762306a36Sopenharmony_ci	if (!bt_link_info->sco_exist && bt_link_info->a2dp_exist &&
41862306a36Sopenharmony_ci	    !bt_link_info->pan_exist && !bt_link_info->hid_exist)
41962306a36Sopenharmony_ci		bt_link_info->a2dp_only = true;
42062306a36Sopenharmony_ci	else
42162306a36Sopenharmony_ci		bt_link_info->a2dp_only = false;
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci	/* check if Pan only */
42462306a36Sopenharmony_ci	if (!bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
42562306a36Sopenharmony_ci	    bt_link_info->pan_exist && !bt_link_info->hid_exist)
42662306a36Sopenharmony_ci		bt_link_info->pan_only = true;
42762306a36Sopenharmony_ci	else
42862306a36Sopenharmony_ci		bt_link_info->pan_only = false;
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_ci	/* check if Hid only */
43162306a36Sopenharmony_ci	if (!bt_link_info->sco_exist && !bt_link_info->a2dp_exist &&
43262306a36Sopenharmony_ci	    !bt_link_info->pan_exist && bt_link_info->hid_exist)
43362306a36Sopenharmony_ci		bt_link_info->hid_only = true;
43462306a36Sopenharmony_ci	else
43562306a36Sopenharmony_ci		bt_link_info->hid_only = false;
43662306a36Sopenharmony_ci}
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_cistatic u8 btc8723b2ant_action_algorithm(struct btc_coexist *btcoexist)
43962306a36Sopenharmony_ci{
44062306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
44162306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
44262306a36Sopenharmony_ci	bool bt_hs_on = false;
44362306a36Sopenharmony_ci	u8 algorithm = BT_8723B_2ANT_COEX_ALGO_UNDEFINED;
44462306a36Sopenharmony_ci	u8 num_of_diff_profile = 0;
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_ci	if (!bt_link_info->bt_link_exist) {
44962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
45062306a36Sopenharmony_ci			"[BTCoex], No BT link exists!!!\n");
45162306a36Sopenharmony_ci		return algorithm;
45262306a36Sopenharmony_ci	}
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ci	if (bt_link_info->sco_exist)
45562306a36Sopenharmony_ci		num_of_diff_profile++;
45662306a36Sopenharmony_ci	if (bt_link_info->hid_exist)
45762306a36Sopenharmony_ci		num_of_diff_profile++;
45862306a36Sopenharmony_ci	if (bt_link_info->pan_exist)
45962306a36Sopenharmony_ci		num_of_diff_profile++;
46062306a36Sopenharmony_ci	if (bt_link_info->a2dp_exist)
46162306a36Sopenharmony_ci		num_of_diff_profile++;
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ci	if (num_of_diff_profile == 1) {
46462306a36Sopenharmony_ci		if (bt_link_info->sco_exist) {
46562306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
46662306a36Sopenharmony_ci				"[BTCoex], SCO only\n");
46762306a36Sopenharmony_ci			algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
46862306a36Sopenharmony_ci		} else {
46962306a36Sopenharmony_ci			if (bt_link_info->hid_exist) {
47062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
47162306a36Sopenharmony_ci					"[BTCoex], HID only\n");
47262306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
47362306a36Sopenharmony_ci			} else if (bt_link_info->a2dp_exist) {
47462306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
47562306a36Sopenharmony_ci					"[BTCoex], A2DP only\n");
47662306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;
47762306a36Sopenharmony_ci			} else if (bt_link_info->pan_exist) {
47862306a36Sopenharmony_ci				if (bt_hs_on) {
47962306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
48062306a36Sopenharmony_ci						DBG_LOUD,
48162306a36Sopenharmony_ci						"[BTCoex], PAN(HS) only\n");
48262306a36Sopenharmony_ci					algorithm =
48362306a36Sopenharmony_ci						BT_8723B_2ANT_COEX_ALGO_PANHS;
48462306a36Sopenharmony_ci				} else {
48562306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
48662306a36Sopenharmony_ci						DBG_LOUD,
48762306a36Sopenharmony_ci						"[BTCoex], PAN(EDR) only\n");
48862306a36Sopenharmony_ci					algorithm =
48962306a36Sopenharmony_ci						BT_8723B_2ANT_COEX_ALGO_PANEDR;
49062306a36Sopenharmony_ci				}
49162306a36Sopenharmony_ci			}
49262306a36Sopenharmony_ci		}
49362306a36Sopenharmony_ci	} else if (num_of_diff_profile == 2) {
49462306a36Sopenharmony_ci		if (bt_link_info->sco_exist) {
49562306a36Sopenharmony_ci			if (bt_link_info->hid_exist) {
49662306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
49762306a36Sopenharmony_ci					"[BTCoex], SCO + HID\n");
49862306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
49962306a36Sopenharmony_ci			} else if (bt_link_info->a2dp_exist) {
50062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
50162306a36Sopenharmony_ci					"[BTCoex], SCO + A2DP ==> SCO\n");
50262306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
50362306a36Sopenharmony_ci			} else if (bt_link_info->pan_exist) {
50462306a36Sopenharmony_ci				if (bt_hs_on) {
50562306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
50662306a36Sopenharmony_ci						DBG_LOUD,
50762306a36Sopenharmony_ci						"[BTCoex], SCO + PAN(HS)\n");
50862306a36Sopenharmony_ci					algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
50962306a36Sopenharmony_ci				} else {
51062306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
51162306a36Sopenharmony_ci						DBG_LOUD,
51262306a36Sopenharmony_ci						"[BTCoex], SCO + PAN(EDR)\n");
51362306a36Sopenharmony_ci					algorithm =
51462306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
51562306a36Sopenharmony_ci				}
51662306a36Sopenharmony_ci			}
51762306a36Sopenharmony_ci		} else {
51862306a36Sopenharmony_ci			if (bt_link_info->hid_exist &&
51962306a36Sopenharmony_ci			    bt_link_info->a2dp_exist) {
52062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
52162306a36Sopenharmony_ci					"[BTCoex], HID + A2DP\n");
52262306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
52362306a36Sopenharmony_ci			} else if (bt_link_info->hid_exist &&
52462306a36Sopenharmony_ci				   bt_link_info->pan_exist) {
52562306a36Sopenharmony_ci				if (bt_hs_on) {
52662306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
52762306a36Sopenharmony_ci						DBG_LOUD,
52862306a36Sopenharmony_ci						"[BTCoex], HID + PAN(HS)\n");
52962306a36Sopenharmony_ci					algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
53062306a36Sopenharmony_ci				} else {
53162306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
53262306a36Sopenharmony_ci						DBG_LOUD,
53362306a36Sopenharmony_ci						"[BTCoex], HID + PAN(EDR)\n");
53462306a36Sopenharmony_ci					algorithm =
53562306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
53662306a36Sopenharmony_ci				}
53762306a36Sopenharmony_ci			} else if (bt_link_info->pan_exist &&
53862306a36Sopenharmony_ci				   bt_link_info->a2dp_exist) {
53962306a36Sopenharmony_ci				if (bt_hs_on) {
54062306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
54162306a36Sopenharmony_ci						DBG_LOUD,
54262306a36Sopenharmony_ci						"[BTCoex], A2DP + PAN(HS)\n");
54362306a36Sopenharmony_ci					algorithm =
54462306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;
54562306a36Sopenharmony_ci				} else {
54662306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
54762306a36Sopenharmony_ci						DBG_LOUD,
54862306a36Sopenharmony_ci						"[BTCoex],A2DP + PAN(EDR)\n");
54962306a36Sopenharmony_ci					algorithm =
55062306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;
55162306a36Sopenharmony_ci				}
55262306a36Sopenharmony_ci			}
55362306a36Sopenharmony_ci		}
55462306a36Sopenharmony_ci	} else if (num_of_diff_profile == 3) {
55562306a36Sopenharmony_ci		if (bt_link_info->sco_exist) {
55662306a36Sopenharmony_ci			if (bt_link_info->hid_exist &&
55762306a36Sopenharmony_ci			    bt_link_info->a2dp_exist) {
55862306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
55962306a36Sopenharmony_ci					"[BTCoex], SCO + HID + A2DP ==> HID\n");
56062306a36Sopenharmony_ci				algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
56162306a36Sopenharmony_ci			} else if (bt_link_info->hid_exist &&
56262306a36Sopenharmony_ci				   bt_link_info->pan_exist) {
56362306a36Sopenharmony_ci				if (bt_hs_on) {
56462306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
56562306a36Sopenharmony_ci						DBG_LOUD,
56662306a36Sopenharmony_ci						"[BTCoex], SCO + HID + PAN(HS)\n");
56762306a36Sopenharmony_ci					algorithm =
56862306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
56962306a36Sopenharmony_ci				} else {
57062306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
57162306a36Sopenharmony_ci						DBG_LOUD,
57262306a36Sopenharmony_ci						"[BTCoex], SCO + HID + PAN(EDR)\n");
57362306a36Sopenharmony_ci					algorithm =
57462306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
57562306a36Sopenharmony_ci				}
57662306a36Sopenharmony_ci			} else if (bt_link_info->pan_exist &&
57762306a36Sopenharmony_ci				   bt_link_info->a2dp_exist) {
57862306a36Sopenharmony_ci				if (bt_hs_on) {
57962306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
58062306a36Sopenharmony_ci						DBG_LOUD,
58162306a36Sopenharmony_ci						"[BTCoex], SCO + A2DP + PAN(HS)\n");
58262306a36Sopenharmony_ci					algorithm =
58362306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
58462306a36Sopenharmony_ci				} else {
58562306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
58662306a36Sopenharmony_ci						DBG_LOUD,
58762306a36Sopenharmony_ci						"[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n");
58862306a36Sopenharmony_ci					algorithm =
58962306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
59062306a36Sopenharmony_ci				}
59162306a36Sopenharmony_ci			}
59262306a36Sopenharmony_ci		} else {
59362306a36Sopenharmony_ci			if (bt_link_info->hid_exist &&
59462306a36Sopenharmony_ci			    bt_link_info->pan_exist &&
59562306a36Sopenharmony_ci			    bt_link_info->a2dp_exist) {
59662306a36Sopenharmony_ci				if (bt_hs_on) {
59762306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
59862306a36Sopenharmony_ci						DBG_LOUD,
59962306a36Sopenharmony_ci						"[BTCoex], HID + A2DP + PAN(HS)\n");
60062306a36Sopenharmony_ci					algorithm =
60162306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
60262306a36Sopenharmony_ci				} else {
60362306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
60462306a36Sopenharmony_ci						DBG_LOUD,
60562306a36Sopenharmony_ci						"[BTCoex], HID + A2DP + PAN(EDR)\n");
60662306a36Sopenharmony_ci					algorithm =
60762306a36Sopenharmony_ci					BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
60862306a36Sopenharmony_ci				}
60962306a36Sopenharmony_ci			}
61062306a36Sopenharmony_ci		}
61162306a36Sopenharmony_ci	} else if (num_of_diff_profile >= 3) {
61262306a36Sopenharmony_ci		if (bt_link_info->sco_exist) {
61362306a36Sopenharmony_ci			if (bt_link_info->hid_exist &&
61462306a36Sopenharmony_ci			    bt_link_info->pan_exist &&
61562306a36Sopenharmony_ci			    bt_link_info->a2dp_exist) {
61662306a36Sopenharmony_ci				if (bt_hs_on) {
61762306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
61862306a36Sopenharmony_ci						DBG_LOUD,
61962306a36Sopenharmony_ci						"[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n");
62062306a36Sopenharmony_ci				} else {
62162306a36Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_BT_COEXIST,
62262306a36Sopenharmony_ci						DBG_LOUD,
62362306a36Sopenharmony_ci						"[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n");
62462306a36Sopenharmony_ci					algorithm =
62562306a36Sopenharmony_ci					    BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
62662306a36Sopenharmony_ci				}
62762306a36Sopenharmony_ci			}
62862306a36Sopenharmony_ci		}
62962306a36Sopenharmony_ci	}
63062306a36Sopenharmony_ci	return algorithm;
63162306a36Sopenharmony_ci}
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_cistatic void btc8723b2ant_set_fw_dac_swing_level(struct btc_coexist *btcoexist,
63462306a36Sopenharmony_ci						u8 dac_swing_lvl)
63562306a36Sopenharmony_ci{
63662306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
63762306a36Sopenharmony_ci	u8 h2c_parameter[1] = {0};
63862306a36Sopenharmony_ci
63962306a36Sopenharmony_ci	/* There are several type of dacswing
64062306a36Sopenharmony_ci	 * 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6
64162306a36Sopenharmony_ci	 */
64262306a36Sopenharmony_ci	h2c_parameter[0] = dac_swing_lvl;
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
64562306a36Sopenharmony_ci		"[BTCoex], Set Dac Swing Level=0x%x\n", dac_swing_lvl);
64662306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
64762306a36Sopenharmony_ci		"[BTCoex], FW write 0x64=0x%x\n", h2c_parameter[0]);
64862306a36Sopenharmony_ci
64962306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter);
65062306a36Sopenharmony_ci}
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_cistatic void btc8723b2ant_set_fw_dec_bt_pwr(struct btc_coexist *btcoexist,
65362306a36Sopenharmony_ci					   u8 dec_bt_pwr_lvl)
65462306a36Sopenharmony_ci{
65562306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
65662306a36Sopenharmony_ci	u8 h2c_parameter[1] = {0};
65762306a36Sopenharmony_ci
65862306a36Sopenharmony_ci	h2c_parameter[0] = dec_bt_pwr_lvl;
65962306a36Sopenharmony_ci
66062306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
66162306a36Sopenharmony_ci		"[BTCoex], decrease Bt Power Level : %u\n", dec_bt_pwr_lvl);
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter);
66462306a36Sopenharmony_ci}
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_cistatic void btc8723b2ant_dec_bt_pwr(struct btc_coexist *btcoexist,
66762306a36Sopenharmony_ci				    bool force_exec, u8 dec_bt_pwr_lvl)
66862306a36Sopenharmony_ci{
66962306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
67062306a36Sopenharmony_ci
67162306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
67262306a36Sopenharmony_ci		"[BTCoex], Dec BT power level = %u\n", dec_bt_pwr_lvl);
67362306a36Sopenharmony_ci	coex_dm->cur_dec_bt_pwr_lvl = dec_bt_pwr_lvl;
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci	if (!force_exec) {
67662306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
67762306a36Sopenharmony_ci			"[BTCoex], PreDecBtPwrLvl=%d, CurDecBtPwrLvl=%d\n",
67862306a36Sopenharmony_ci			coex_dm->pre_dec_bt_pwr_lvl,
67962306a36Sopenharmony_ci			coex_dm->cur_dec_bt_pwr_lvl);
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ci		if (coex_dm->pre_dec_bt_pwr_lvl == coex_dm->cur_dec_bt_pwr_lvl)
68262306a36Sopenharmony_ci			return;
68362306a36Sopenharmony_ci	}
68462306a36Sopenharmony_ci	btc8723b2ant_set_fw_dec_bt_pwr(btcoexist, coex_dm->cur_dec_bt_pwr_lvl);
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_ci	coex_dm->pre_dec_bt_pwr_lvl = coex_dm->cur_dec_bt_pwr_lvl;
68762306a36Sopenharmony_ci}
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_cistatic
69062306a36Sopenharmony_civoid halbtc8723b2ant_set_bt_auto_report(struct btc_coexist *btcoexist,
69162306a36Sopenharmony_ci					bool enable_auto_report)
69262306a36Sopenharmony_ci{
69362306a36Sopenharmony_ci	u8 h2c_parameter[1] = {0};
69462306a36Sopenharmony_ci
69562306a36Sopenharmony_ci	h2c_parameter[0] = 0;
69662306a36Sopenharmony_ci
69762306a36Sopenharmony_ci	if (enable_auto_report)
69862306a36Sopenharmony_ci		h2c_parameter[0] |= BIT(0);
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x68, 1, h2c_parameter);
70162306a36Sopenharmony_ci}
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_cistatic
70462306a36Sopenharmony_civoid btc8723b2ant_bt_auto_report(struct btc_coexist *btcoexist,
70562306a36Sopenharmony_ci				 bool force_exec, bool enable_auto_report)
70662306a36Sopenharmony_ci{
70762306a36Sopenharmony_ci	coex_dm->cur_bt_auto_report = enable_auto_report;
70862306a36Sopenharmony_ci
70962306a36Sopenharmony_ci	if (!force_exec) {
71062306a36Sopenharmony_ci		if (coex_dm->pre_bt_auto_report == coex_dm->cur_bt_auto_report)
71162306a36Sopenharmony_ci			return;
71262306a36Sopenharmony_ci	}
71362306a36Sopenharmony_ci	halbtc8723b2ant_set_bt_auto_report(btcoexist,
71462306a36Sopenharmony_ci					   coex_dm->cur_bt_auto_report);
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_ci	coex_dm->pre_bt_auto_report = coex_dm->cur_bt_auto_report;
71762306a36Sopenharmony_ci}
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_cistatic void btc8723b2ant_fw_dac_swing_lvl(struct btc_coexist *btcoexist,
72062306a36Sopenharmony_ci					  bool force_exec, u8 fw_dac_swing_lvl)
72162306a36Sopenharmony_ci{
72262306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
72562306a36Sopenharmony_ci		"[BTCoex], %s set FW Dac Swing level = %d\n",
72662306a36Sopenharmony_ci		(force_exec ? "force to" : ""), fw_dac_swing_lvl);
72762306a36Sopenharmony_ci	coex_dm->cur_fw_dac_swing_lvl = fw_dac_swing_lvl;
72862306a36Sopenharmony_ci
72962306a36Sopenharmony_ci	if (!force_exec) {
73062306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
73162306a36Sopenharmony_ci			"[BTCoex], preFwDacSwingLvl=%d, curFwDacSwingLvl=%d\n",
73262306a36Sopenharmony_ci			coex_dm->pre_fw_dac_swing_lvl,
73362306a36Sopenharmony_ci			coex_dm->cur_fw_dac_swing_lvl);
73462306a36Sopenharmony_ci
73562306a36Sopenharmony_ci		if (coex_dm->pre_fw_dac_swing_lvl ==
73662306a36Sopenharmony_ci		   coex_dm->cur_fw_dac_swing_lvl)
73762306a36Sopenharmony_ci			return;
73862306a36Sopenharmony_ci	}
73962306a36Sopenharmony_ci
74062306a36Sopenharmony_ci	btc8723b2ant_set_fw_dac_swing_level(btcoexist,
74162306a36Sopenharmony_ci					    coex_dm->cur_fw_dac_swing_lvl);
74262306a36Sopenharmony_ci	coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl;
74362306a36Sopenharmony_ci}
74462306a36Sopenharmony_ci
74562306a36Sopenharmony_cistatic void btc8723b_set_penalty_txrate(struct btc_coexist *btcoexist,
74662306a36Sopenharmony_ci					bool low_penalty_ra)
74762306a36Sopenharmony_ci{
74862306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
74962306a36Sopenharmony_ci	u8 h2c_parameter[6] = {0};
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_ci	h2c_parameter[0] = 0x6;	/* op_code, 0x6 = Retry_Penalty */
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_ci	if (low_penalty_ra) {
75462306a36Sopenharmony_ci		h2c_parameter[1] |= BIT0;
75562306a36Sopenharmony_ci		/* normal rate except MCS7/6/5, OFDM54/48/36 */
75662306a36Sopenharmony_ci		h2c_parameter[2] = 0x00;
75762306a36Sopenharmony_ci		h2c_parameter[3] = 0xf4; /* MCS7 or OFDM54 */
75862306a36Sopenharmony_ci		h2c_parameter[4] = 0xf5; /* MCS6 or OFDM48 */
75962306a36Sopenharmony_ci		h2c_parameter[5] = 0xf6; /* MCS5 or OFDM36 */
76062306a36Sopenharmony_ci	}
76162306a36Sopenharmony_ci
76262306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
76362306a36Sopenharmony_ci		"[BTCoex], set WiFi Low-Penalty Retry: %s",
76462306a36Sopenharmony_ci		(low_penalty_ra ? "ON!!" : "OFF!!"));
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter);
76762306a36Sopenharmony_ci}
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_cistatic void btc8723b2ant_low_penalty_ra(struct btc_coexist *btcoexist,
77062306a36Sopenharmony_ci					bool force_exec, bool low_penalty_ra)
77162306a36Sopenharmony_ci{
77262306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
77362306a36Sopenharmony_ci
77462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
77562306a36Sopenharmony_ci		"[BTCoex], %s turn LowPenaltyRA = %s\n",
77662306a36Sopenharmony_ci		(force_exec ? "force to" : ""), (low_penalty_ra ?
77762306a36Sopenharmony_ci						 "ON" : "OFF"));
77862306a36Sopenharmony_ci	coex_dm->cur_low_penalty_ra = low_penalty_ra;
77962306a36Sopenharmony_ci
78062306a36Sopenharmony_ci	if (!force_exec) {
78162306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
78262306a36Sopenharmony_ci			"[BTCoex], bPreLowPenaltyRa=%d, bCurLowPenaltyRa=%d\n",
78362306a36Sopenharmony_ci			coex_dm->pre_low_penalty_ra,
78462306a36Sopenharmony_ci			coex_dm->cur_low_penalty_ra);
78562306a36Sopenharmony_ci
78662306a36Sopenharmony_ci		if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra)
78762306a36Sopenharmony_ci			return;
78862306a36Sopenharmony_ci	}
78962306a36Sopenharmony_ci	btc8723b_set_penalty_txrate(btcoexist, coex_dm->cur_low_penalty_ra);
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_ci	coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra;
79262306a36Sopenharmony_ci}
79362306a36Sopenharmony_ci
79462306a36Sopenharmony_cistatic void btc8723b2ant_set_dac_swing_reg(struct btc_coexist *btcoexist,
79562306a36Sopenharmony_ci					   u32 level)
79662306a36Sopenharmony_ci{
79762306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
79862306a36Sopenharmony_ci	u8 val = (u8) level;
79962306a36Sopenharmony_ci
80062306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
80162306a36Sopenharmony_ci		"[BTCoex], Write SwDacSwing = 0x%x\n", level);
80262306a36Sopenharmony_ci	btcoexist->btc_write_1byte_bitmask(btcoexist, 0x883, 0x3e, val);
80362306a36Sopenharmony_ci}
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_cistatic void btc8723b2ant_set_sw_fulltime_dac_swing(struct btc_coexist *btcoex,
80662306a36Sopenharmony_ci						   bool sw_dac_swing_on,
80762306a36Sopenharmony_ci						   u32 sw_dac_swing_lvl)
80862306a36Sopenharmony_ci{
80962306a36Sopenharmony_ci	if (sw_dac_swing_on)
81062306a36Sopenharmony_ci		btc8723b2ant_set_dac_swing_reg(btcoex, sw_dac_swing_lvl);
81162306a36Sopenharmony_ci	else
81262306a36Sopenharmony_ci		btc8723b2ant_set_dac_swing_reg(btcoex, 0x18);
81362306a36Sopenharmony_ci}
81462306a36Sopenharmony_ci
81562306a36Sopenharmony_cistatic void btc8723b2ant_dac_swing(struct btc_coexist *btcoexist,
81662306a36Sopenharmony_ci				   bool force_exec, bool dac_swing_on,
81762306a36Sopenharmony_ci				   u32 dac_swing_lvl)
81862306a36Sopenharmony_ci{
81962306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
82062306a36Sopenharmony_ci
82162306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
82262306a36Sopenharmony_ci		"[BTCoex], %s turn DacSwing=%s, dac_swing_lvl=0x%x\n",
82362306a36Sopenharmony_ci		(force_exec ? "force to" : ""),
82462306a36Sopenharmony_ci		(dac_swing_on ? "ON" : "OFF"), dac_swing_lvl);
82562306a36Sopenharmony_ci	coex_dm->cur_dac_swing_on = dac_swing_on;
82662306a36Sopenharmony_ci	coex_dm->cur_dac_swing_lvl = dac_swing_lvl;
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ci	if (!force_exec) {
82962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
83062306a36Sopenharmony_ci			"[BTCoex], bPreDacSwingOn=%d, preDacSwingLvl=0x%x, bCurDacSwingOn=%d, curDacSwingLvl=0x%x\n",
83162306a36Sopenharmony_ci			coex_dm->pre_dac_swing_on,
83262306a36Sopenharmony_ci			coex_dm->pre_dac_swing_lvl,
83362306a36Sopenharmony_ci			coex_dm->cur_dac_swing_on,
83462306a36Sopenharmony_ci			coex_dm->cur_dac_swing_lvl);
83562306a36Sopenharmony_ci
83662306a36Sopenharmony_ci		if ((coex_dm->pre_dac_swing_on == coex_dm->cur_dac_swing_on) &&
83762306a36Sopenharmony_ci		    (coex_dm->pre_dac_swing_lvl == coex_dm->cur_dac_swing_lvl))
83862306a36Sopenharmony_ci			return;
83962306a36Sopenharmony_ci	}
84062306a36Sopenharmony_ci	mdelay(30);
84162306a36Sopenharmony_ci	btc8723b2ant_set_sw_fulltime_dac_swing(btcoexist, dac_swing_on,
84262306a36Sopenharmony_ci					       dac_swing_lvl);
84362306a36Sopenharmony_ci
84462306a36Sopenharmony_ci	coex_dm->pre_dac_swing_on = coex_dm->cur_dac_swing_on;
84562306a36Sopenharmony_ci	coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl;
84662306a36Sopenharmony_ci}
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_cistatic void btc8723b2ant_set_coex_table(struct btc_coexist *btcoexist,
84962306a36Sopenharmony_ci					u32 val0x6c0, u32 val0x6c4,
85062306a36Sopenharmony_ci					u32 val0x6c8, u8 val0x6cc)
85162306a36Sopenharmony_ci{
85262306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
85362306a36Sopenharmony_ci
85462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
85562306a36Sopenharmony_ci		"[BTCoex], set coex table, set 0x6c0=0x%x\n", val0x6c0);
85662306a36Sopenharmony_ci	btcoexist->btc_write_4byte(btcoexist, 0x6c0, val0x6c0);
85762306a36Sopenharmony_ci
85862306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
85962306a36Sopenharmony_ci		"[BTCoex], set coex table, set 0x6c4=0x%x\n", val0x6c4);
86062306a36Sopenharmony_ci	btcoexist->btc_write_4byte(btcoexist, 0x6c4, val0x6c4);
86162306a36Sopenharmony_ci
86262306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
86362306a36Sopenharmony_ci		"[BTCoex], set coex table, set 0x6c8=0x%x\n", val0x6c8);
86462306a36Sopenharmony_ci	btcoexist->btc_write_4byte(btcoexist, 0x6c8, val0x6c8);
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
86762306a36Sopenharmony_ci		"[BTCoex], set coex table, set 0x6cc=0x%x\n", val0x6cc);
86862306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);
86962306a36Sopenharmony_ci}
87062306a36Sopenharmony_ci
87162306a36Sopenharmony_cistatic void btc8723b2ant_coex_table(struct btc_coexist *btcoexist,
87262306a36Sopenharmony_ci				    bool force_exec, u32 val0x6c0,
87362306a36Sopenharmony_ci				    u32 val0x6c4, u32 val0x6c8,
87462306a36Sopenharmony_ci				    u8 val0x6cc)
87562306a36Sopenharmony_ci{
87662306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
87762306a36Sopenharmony_ci
87862306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
87962306a36Sopenharmony_ci		"[BTCoex], %s write Coex Table 0x6c0=0x%x, 0x6c4=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
88062306a36Sopenharmony_ci		force_exec ? "force to" : "",
88162306a36Sopenharmony_ci		val0x6c0, val0x6c4, val0x6c8, val0x6cc);
88262306a36Sopenharmony_ci	coex_dm->cur_val0x6c0 = val0x6c0;
88362306a36Sopenharmony_ci	coex_dm->cur_val0x6c4 = val0x6c4;
88462306a36Sopenharmony_ci	coex_dm->cur_val0x6c8 = val0x6c8;
88562306a36Sopenharmony_ci	coex_dm->cur_val0x6cc = val0x6cc;
88662306a36Sopenharmony_ci
88762306a36Sopenharmony_ci	if (!force_exec) {
88862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
88962306a36Sopenharmony_ci			"[BTCoex], preVal0x6c0=0x%x, preVal0x6c4=0x%x, preVal0x6c8=0x%x, preVal0x6cc=0x%x !!\n",
89062306a36Sopenharmony_ci			coex_dm->pre_val0x6c0, coex_dm->pre_val0x6c4,
89162306a36Sopenharmony_ci			coex_dm->pre_val0x6c8, coex_dm->pre_val0x6cc);
89262306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
89362306a36Sopenharmony_ci			"[BTCoex], curVal0x6c0=0x%x, curVal0x6c4=0x%x, curVal0x6c8=0x%x, curVal0x6cc=0x%x !!\n",
89462306a36Sopenharmony_ci			coex_dm->cur_val0x6c0, coex_dm->cur_val0x6c4,
89562306a36Sopenharmony_ci			coex_dm->cur_val0x6c8, coex_dm->cur_val0x6cc);
89662306a36Sopenharmony_ci
89762306a36Sopenharmony_ci		if ((coex_dm->pre_val0x6c0 == coex_dm->cur_val0x6c0) &&
89862306a36Sopenharmony_ci		    (coex_dm->pre_val0x6c4 == coex_dm->cur_val0x6c4) &&
89962306a36Sopenharmony_ci		    (coex_dm->pre_val0x6c8 == coex_dm->cur_val0x6c8) &&
90062306a36Sopenharmony_ci		    (coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc))
90162306a36Sopenharmony_ci			return;
90262306a36Sopenharmony_ci	}
90362306a36Sopenharmony_ci	btc8723b2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4,
90462306a36Sopenharmony_ci				    val0x6c8, val0x6cc);
90562306a36Sopenharmony_ci
90662306a36Sopenharmony_ci	coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0;
90762306a36Sopenharmony_ci	coex_dm->pre_val0x6c4 = coex_dm->cur_val0x6c4;
90862306a36Sopenharmony_ci	coex_dm->pre_val0x6c8 = coex_dm->cur_val0x6c8;
90962306a36Sopenharmony_ci	coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;
91062306a36Sopenharmony_ci}
91162306a36Sopenharmony_ci
91262306a36Sopenharmony_cistatic void btc8723b2ant_coex_table_with_type(struct btc_coexist *btcoexist,
91362306a36Sopenharmony_ci					      bool force_exec, u8 type)
91462306a36Sopenharmony_ci{
91562306a36Sopenharmony_ci	switch (type) {
91662306a36Sopenharmony_ci	case 0:
91762306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55555555,
91862306a36Sopenharmony_ci					0x55555555, 0xffffff, 0x3);
91962306a36Sopenharmony_ci		break;
92062306a36Sopenharmony_ci	case 1:
92162306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55555555,
92262306a36Sopenharmony_ci					0x5afa5afa, 0xffffff, 0x3);
92362306a36Sopenharmony_ci		break;
92462306a36Sopenharmony_ci	case 2:
92562306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x5ada5ada,
92662306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
92762306a36Sopenharmony_ci		break;
92862306a36Sopenharmony_ci	case 3:
92962306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0xaaaaaaaa,
93062306a36Sopenharmony_ci					0xaaaaaaaa, 0xffffff, 0x3);
93162306a36Sopenharmony_ci		break;
93262306a36Sopenharmony_ci	case 4:
93362306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0xffffffff,
93462306a36Sopenharmony_ci					0xffffffff, 0xffffff, 0x3);
93562306a36Sopenharmony_ci		break;
93662306a36Sopenharmony_ci	case 5:
93762306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x5fff5fff,
93862306a36Sopenharmony_ci					0x5fff5fff, 0xffffff, 0x3);
93962306a36Sopenharmony_ci		break;
94062306a36Sopenharmony_ci	case 6:
94162306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55ff55ff,
94262306a36Sopenharmony_ci					0x5a5a5a5a, 0xffffff, 0x3);
94362306a36Sopenharmony_ci		break;
94462306a36Sopenharmony_ci	case 7:
94562306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
94662306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
94762306a36Sopenharmony_ci		break;
94862306a36Sopenharmony_ci	case 8:
94962306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
95062306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
95162306a36Sopenharmony_ci		break;
95262306a36Sopenharmony_ci	case 9:
95362306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
95462306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
95562306a36Sopenharmony_ci		break;
95662306a36Sopenharmony_ci	case 10:
95762306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
95862306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
95962306a36Sopenharmony_ci		break;
96062306a36Sopenharmony_ci	case 11:
96162306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
96262306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
96362306a36Sopenharmony_ci		break;
96462306a36Sopenharmony_ci	case 12:
96562306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
96662306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
96762306a36Sopenharmony_ci		break;
96862306a36Sopenharmony_ci	case 13:
96962306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x5fff5fff,
97062306a36Sopenharmony_ci					0xaaaaaaaa, 0xffffff, 0x3);
97162306a36Sopenharmony_ci		break;
97262306a36Sopenharmony_ci	case 14:
97362306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x5fff5fff,
97462306a36Sopenharmony_ci					0x5ada5ada, 0xffffff, 0x3);
97562306a36Sopenharmony_ci		break;
97662306a36Sopenharmony_ci	case 15:
97762306a36Sopenharmony_ci		btc8723b2ant_coex_table(btcoexist, force_exec, 0x55dd55dd,
97862306a36Sopenharmony_ci					0xaaaaaaaa, 0xffffff, 0x3);
97962306a36Sopenharmony_ci		break;
98062306a36Sopenharmony_ci	default:
98162306a36Sopenharmony_ci		break;
98262306a36Sopenharmony_ci	}
98362306a36Sopenharmony_ci}
98462306a36Sopenharmony_ci
98562306a36Sopenharmony_cistatic void btc8723b2ant_set_fw_ignore_wlan_act(struct btc_coexist *btcoexist,
98662306a36Sopenharmony_ci						bool enable)
98762306a36Sopenharmony_ci{
98862306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
98962306a36Sopenharmony_ci	u8 h2c_parameter[1] = {0};
99062306a36Sopenharmony_ci
99162306a36Sopenharmony_ci	if (enable)
99262306a36Sopenharmony_ci		h2c_parameter[0] |= BIT0; /* function enable */
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
99562306a36Sopenharmony_ci		"[BTCoex], set FW for BT Ignore Wlan_Act, FW write 0x63=0x%x\n",
99662306a36Sopenharmony_ci		h2c_parameter[0]);
99762306a36Sopenharmony_ci
99862306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter);
99962306a36Sopenharmony_ci}
100062306a36Sopenharmony_ci
100162306a36Sopenharmony_cistatic void btc8723b2ant_set_lps_rpwm(struct btc_coexist *btcoexist,
100262306a36Sopenharmony_ci				      u8 lps_val, u8 rpwm_val)
100362306a36Sopenharmony_ci{
100462306a36Sopenharmony_ci	u8 lps = lps_val;
100562306a36Sopenharmony_ci	u8 rpwm = rpwm_val;
100662306a36Sopenharmony_ci
100762306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_U1_LPS_VAL, &lps);
100862306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm);
100962306a36Sopenharmony_ci}
101062306a36Sopenharmony_ci
101162306a36Sopenharmony_cistatic void btc8723b2ant_lps_rpwm(struct btc_coexist *btcoexist,
101262306a36Sopenharmony_ci				  bool force_exec, u8 lps_val, u8 rpwm_val)
101362306a36Sopenharmony_ci{
101462306a36Sopenharmony_ci	coex_dm->cur_lps = lps_val;
101562306a36Sopenharmony_ci	coex_dm->cur_rpwm = rpwm_val;
101662306a36Sopenharmony_ci
101762306a36Sopenharmony_ci	if (!force_exec) {
101862306a36Sopenharmony_ci		if ((coex_dm->pre_lps == coex_dm->cur_lps) &&
101962306a36Sopenharmony_ci		    (coex_dm->pre_rpwm == coex_dm->cur_rpwm))
102062306a36Sopenharmony_ci			return;
102162306a36Sopenharmony_ci	}
102262306a36Sopenharmony_ci	btc8723b2ant_set_lps_rpwm(btcoexist, lps_val, rpwm_val);
102362306a36Sopenharmony_ci
102462306a36Sopenharmony_ci	coex_dm->pre_lps = coex_dm->cur_lps;
102562306a36Sopenharmony_ci	coex_dm->pre_rpwm = coex_dm->cur_rpwm;
102662306a36Sopenharmony_ci}
102762306a36Sopenharmony_ci
102862306a36Sopenharmony_cistatic void btc8723b2ant_ignore_wlan_act(struct btc_coexist *btcoexist,
102962306a36Sopenharmony_ci					 bool force_exec, bool enable)
103062306a36Sopenharmony_ci{
103162306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
103462306a36Sopenharmony_ci		"[BTCoex], %s turn Ignore WlanAct %s\n",
103562306a36Sopenharmony_ci		(force_exec ? "force to" : ""), (enable ? "ON" : "OFF"));
103662306a36Sopenharmony_ci	coex_dm->cur_ignore_wlan_act = enable;
103762306a36Sopenharmony_ci
103862306a36Sopenharmony_ci	if (!force_exec) {
103962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
104062306a36Sopenharmony_ci			"[BTCoex], bPreIgnoreWlanAct = %d, bCurIgnoreWlanAct = %d!!\n",
104162306a36Sopenharmony_ci			coex_dm->pre_ignore_wlan_act,
104262306a36Sopenharmony_ci			coex_dm->cur_ignore_wlan_act);
104362306a36Sopenharmony_ci
104462306a36Sopenharmony_ci		if (coex_dm->pre_ignore_wlan_act ==
104562306a36Sopenharmony_ci		    coex_dm->cur_ignore_wlan_act)
104662306a36Sopenharmony_ci			return;
104762306a36Sopenharmony_ci	}
104862306a36Sopenharmony_ci	btc8723b2ant_set_fw_ignore_wlan_act(btcoexist, enable);
104962306a36Sopenharmony_ci
105062306a36Sopenharmony_ci	coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;
105162306a36Sopenharmony_ci}
105262306a36Sopenharmony_ci
105362306a36Sopenharmony_cistatic void btc8723b2ant_set_fw_ps_tdma(struct btc_coexist *btcoexist, u8 byte1,
105462306a36Sopenharmony_ci					u8 byte2, u8 byte3, u8 byte4, u8 byte5)
105562306a36Sopenharmony_ci{
105662306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
105762306a36Sopenharmony_ci	u8 h2c_parameter[5];
105862306a36Sopenharmony_ci	if ((coex_sta->a2dp_exist) && (coex_sta->hid_exist))
105962306a36Sopenharmony_ci		byte5 = byte5 | 0x1;
106062306a36Sopenharmony_ci
106162306a36Sopenharmony_ci	h2c_parameter[0] = byte1;
106262306a36Sopenharmony_ci	h2c_parameter[1] = byte2;
106362306a36Sopenharmony_ci	h2c_parameter[2] = byte3;
106462306a36Sopenharmony_ci	h2c_parameter[3] = byte4;
106562306a36Sopenharmony_ci	h2c_parameter[4] = byte5;
106662306a36Sopenharmony_ci
106762306a36Sopenharmony_ci	coex_dm->ps_tdma_para[0] = byte1;
106862306a36Sopenharmony_ci	coex_dm->ps_tdma_para[1] = byte2;
106962306a36Sopenharmony_ci	coex_dm->ps_tdma_para[2] = byte3;
107062306a36Sopenharmony_ci	coex_dm->ps_tdma_para[3] = byte4;
107162306a36Sopenharmony_ci	coex_dm->ps_tdma_para[4] = byte5;
107262306a36Sopenharmony_ci
107362306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
107462306a36Sopenharmony_ci		"[BTCoex], FW write 0x60(5bytes)=0x%x%08x\n",
107562306a36Sopenharmony_ci		h2c_parameter[0],
107662306a36Sopenharmony_ci		h2c_parameter[1] << 24 | h2c_parameter[2] << 16 |
107762306a36Sopenharmony_ci		h2c_parameter[3] << 8 | h2c_parameter[4]);
107862306a36Sopenharmony_ci
107962306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);
108062306a36Sopenharmony_ci}
108162306a36Sopenharmony_ci
108262306a36Sopenharmony_cistatic void btc8723b2ant_sw_mechanism(struct btc_coexist *btcoexist,
108362306a36Sopenharmony_ci				      bool shrink_rx_lpf, bool low_penalty_ra,
108462306a36Sopenharmony_ci				      bool limited_dig, bool bt_lna_constrain)
108562306a36Sopenharmony_ci{
108662306a36Sopenharmony_ci	btc8723b2ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);
108762306a36Sopenharmony_ci}
108862306a36Sopenharmony_ci
108962306a36Sopenharmony_cistatic void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
109062306a36Sopenharmony_ci				      u8 antpos_type, bool init_hwcfg,
109162306a36Sopenharmony_ci				      bool wifi_off)
109262306a36Sopenharmony_ci{
109362306a36Sopenharmony_ci	struct btc_board_info *board_info = &btcoexist->board_info;
109462306a36Sopenharmony_ci	u32 fw_ver = 0, u32tmp = 0;
109562306a36Sopenharmony_ci	bool pg_ext_switch = false;
109662306a36Sopenharmony_ci	bool use_ext_switch = false;
109762306a36Sopenharmony_ci	u8 h2c_parameter[2] = {0};
109862306a36Sopenharmony_ci
109962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_EXT_SWITCH, &pg_ext_switch);
110062306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
110162306a36Sopenharmony_ci
110262306a36Sopenharmony_ci	if ((fw_ver < 0xc0000) || pg_ext_switch)
110362306a36Sopenharmony_ci		use_ext_switch = true;
110462306a36Sopenharmony_ci
110562306a36Sopenharmony_ci	if (init_hwcfg) {
110662306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x39, 0x8, 0x1);
110762306a36Sopenharmony_ci		btcoexist->btc_write_1byte(btcoexist, 0x974, 0xff);
110862306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x944, 0x3, 0x3);
110962306a36Sopenharmony_ci		btcoexist->btc_write_1byte(btcoexist, 0x930, 0x77);
111062306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x1);
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci		if (fw_ver >= 0x180000) {
111362306a36Sopenharmony_ci			/* Use H2C to set GNT_BT to High to avoid A2DP click */
111462306a36Sopenharmony_ci			h2c_parameter[0] = 1;
111562306a36Sopenharmony_ci			btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1,
111662306a36Sopenharmony_ci						h2c_parameter);
111762306a36Sopenharmony_ci		} else {
111862306a36Sopenharmony_ci			btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18);
111962306a36Sopenharmony_ci		}
112062306a36Sopenharmony_ci
112162306a36Sopenharmony_ci		btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);
112262306a36Sopenharmony_ci
112362306a36Sopenharmony_ci		/* WiFi TRx Mask off */
112462306a36Sopenharmony_ci		btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A,
112562306a36Sopenharmony_ci					  0x1, 0xfffff, 0x0);
112662306a36Sopenharmony_ci
112762306a36Sopenharmony_ci		if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
112862306a36Sopenharmony_ci			/* tell firmware "no antenna inverse" */
112962306a36Sopenharmony_ci			h2c_parameter[0] = 0;
113062306a36Sopenharmony_ci		} else {
113162306a36Sopenharmony_ci			/* tell firmware "antenna inverse" */
113262306a36Sopenharmony_ci			h2c_parameter[0] = 1;
113362306a36Sopenharmony_ci		}
113462306a36Sopenharmony_ci
113562306a36Sopenharmony_ci		if (use_ext_switch) {
113662306a36Sopenharmony_ci			/* ext switch type */
113762306a36Sopenharmony_ci			h2c_parameter[1] = 1;
113862306a36Sopenharmony_ci		} else {
113962306a36Sopenharmony_ci			/* int switch type */
114062306a36Sopenharmony_ci			h2c_parameter[1] = 0;
114162306a36Sopenharmony_ci		}
114262306a36Sopenharmony_ci		btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, h2c_parameter);
114362306a36Sopenharmony_ci	} else {
114462306a36Sopenharmony_ci		if (fw_ver >= 0x180000) {
114562306a36Sopenharmony_ci			/* Use H2C to set GNT_BT to "Control by PTA"*/
114662306a36Sopenharmony_ci			h2c_parameter[0] = 0;
114762306a36Sopenharmony_ci			btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1,
114862306a36Sopenharmony_ci						h2c_parameter);
114962306a36Sopenharmony_ci		} else {
115062306a36Sopenharmony_ci			btcoexist->btc_write_1byte(btcoexist, 0x765, 0x0);
115162306a36Sopenharmony_ci		}
115262306a36Sopenharmony_ci	}
115362306a36Sopenharmony_ci
115462306a36Sopenharmony_ci	/* ext switch setting */
115562306a36Sopenharmony_ci	if (use_ext_switch) {
115662306a36Sopenharmony_ci		if (init_hwcfg) {
115762306a36Sopenharmony_ci			/* 0x4c[23] = 0, 0x4c[24] = 1 Ant controlled by WL/BT */
115862306a36Sopenharmony_ci			u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
115962306a36Sopenharmony_ci			u32tmp &= ~BIT23;
116062306a36Sopenharmony_ci			u32tmp |= BIT24;
116162306a36Sopenharmony_ci			btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
116262306a36Sopenharmony_ci		}
116362306a36Sopenharmony_ci
116462306a36Sopenharmony_ci		/* fixed internal switch S1->WiFi, S0->BT */
116562306a36Sopenharmony_ci		if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT)
116662306a36Sopenharmony_ci			btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
116762306a36Sopenharmony_ci		else
116862306a36Sopenharmony_ci			btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
116962306a36Sopenharmony_ci
117062306a36Sopenharmony_ci		switch (antpos_type) {
117162306a36Sopenharmony_ci		case BTC_ANT_WIFI_AT_MAIN:
117262306a36Sopenharmony_ci			/* ext switch main at wifi */
117362306a36Sopenharmony_ci			btcoexist->btc_write_1byte_bitmask(btcoexist, 0x92c,
117462306a36Sopenharmony_ci							   0x3, 0x1);
117562306a36Sopenharmony_ci			break;
117662306a36Sopenharmony_ci		case BTC_ANT_WIFI_AT_AUX:
117762306a36Sopenharmony_ci			/* ext switch aux at wifi */
117862306a36Sopenharmony_ci			btcoexist->btc_write_1byte_bitmask(btcoexist,
117962306a36Sopenharmony_ci							   0x92c, 0x3, 0x2);
118062306a36Sopenharmony_ci			break;
118162306a36Sopenharmony_ci		}
118262306a36Sopenharmony_ci	} else {
118362306a36Sopenharmony_ci		/* internal switch */
118462306a36Sopenharmony_ci		if (init_hwcfg) {
118562306a36Sopenharmony_ci			/* 0x4c[23] = 0, 0x4c[24] = 1 Ant controlled by WL/BT */
118662306a36Sopenharmony_ci			u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);
118762306a36Sopenharmony_ci			u32tmp |= BIT23;
118862306a36Sopenharmony_ci			u32tmp &= ~BIT24;
118962306a36Sopenharmony_ci			btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);
119062306a36Sopenharmony_ci		}
119162306a36Sopenharmony_ci
119262306a36Sopenharmony_ci		/* fixed ext switch, S1->Main, S0->Aux */
119362306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64, 0x1, 0x0);
119462306a36Sopenharmony_ci		switch (antpos_type) {
119562306a36Sopenharmony_ci		case BTC_ANT_WIFI_AT_MAIN:
119662306a36Sopenharmony_ci			/* fixed internal switch S1->WiFi, S0->BT */
119762306a36Sopenharmony_ci			btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
119862306a36Sopenharmony_ci			break;
119962306a36Sopenharmony_ci		case BTC_ANT_WIFI_AT_AUX:
120062306a36Sopenharmony_ci			/* fixed internal switch S0->WiFi, S1->BT */
120162306a36Sopenharmony_ci			btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
120262306a36Sopenharmony_ci			break;
120362306a36Sopenharmony_ci		}
120462306a36Sopenharmony_ci	}
120562306a36Sopenharmony_ci}
120662306a36Sopenharmony_ci
120762306a36Sopenharmony_cistatic void btc8723b2ant_ps_tdma(struct btc_coexist *btcoexist, bool force_exec,
120862306a36Sopenharmony_ci				 bool turn_on, u8 type)
120962306a36Sopenharmony_ci{
121062306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
121162306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
121262306a36Sopenharmony_ci	u8 wifi_rssi_state, bt_rssi_state;
121362306a36Sopenharmony_ci	s8 wifi_duration_adjust = 0x0;
121462306a36Sopenharmony_ci	u8 tdma_byte4_modify = 0x0;
121562306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
121662306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
121762306a36Sopenharmony_ci
121862306a36Sopenharmony_ci	wifi_rssi_state = btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, tmp, 0);
121962306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
122062306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
122162306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
122262306a36Sopenharmony_ci
122362306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
122462306a36Sopenharmony_ci		"[BTCoex], %s turn %s PS TDMA, type=%d\n",
122562306a36Sopenharmony_ci		(force_exec ? "force to" : ""),
122662306a36Sopenharmony_ci		(turn_on ? "ON" : "OFF"), type);
122762306a36Sopenharmony_ci	coex_dm->cur_ps_tdma_on = turn_on;
122862306a36Sopenharmony_ci	coex_dm->cur_ps_tdma = type;
122962306a36Sopenharmony_ci
123062306a36Sopenharmony_ci	if (!(BTC_RSSI_HIGH(wifi_rssi_state) &&
123162306a36Sopenharmony_ci	      BTC_RSSI_HIGH(bt_rssi_state)) && turn_on) {
123262306a36Sopenharmony_ci		 /* for WiFi RSSI low or BT RSSI low */
123362306a36Sopenharmony_ci		type = type + 100;
123462306a36Sopenharmony_ci		coex_dm->is_switch_to_1dot5_ant = true;
123562306a36Sopenharmony_ci	} else {
123662306a36Sopenharmony_ci		coex_dm->is_switch_to_1dot5_ant = false;
123762306a36Sopenharmony_ci	}
123862306a36Sopenharmony_ci
123962306a36Sopenharmony_ci	if (!force_exec) {
124062306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
124162306a36Sopenharmony_ci			"[BTCoex], bPrePsTdmaOn = %d, bCurPsTdmaOn = %d!!\n",
124262306a36Sopenharmony_ci			coex_dm->pre_ps_tdma_on, coex_dm->cur_ps_tdma_on);
124362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
124462306a36Sopenharmony_ci			"[BTCoex], prePsTdma = %d, curPsTdma = %d!!\n",
124562306a36Sopenharmony_ci			coex_dm->pre_ps_tdma, coex_dm->cur_ps_tdma);
124662306a36Sopenharmony_ci
124762306a36Sopenharmony_ci		if ((coex_dm->pre_ps_tdma_on == coex_dm->cur_ps_tdma_on) &&
124862306a36Sopenharmony_ci		    (coex_dm->pre_ps_tdma == coex_dm->cur_ps_tdma))
124962306a36Sopenharmony_ci			return;
125062306a36Sopenharmony_ci	}
125162306a36Sopenharmony_ci
125262306a36Sopenharmony_ci	if (coex_sta->scan_ap_num <= 5) {
125362306a36Sopenharmony_ci		if (coex_sta->a2dp_bit_pool >= 45)
125462306a36Sopenharmony_ci			wifi_duration_adjust = -15;
125562306a36Sopenharmony_ci		else if (coex_sta->a2dp_bit_pool >= 35)
125662306a36Sopenharmony_ci			wifi_duration_adjust = -10;
125762306a36Sopenharmony_ci		else
125862306a36Sopenharmony_ci			wifi_duration_adjust = 5;
125962306a36Sopenharmony_ci	} else if (coex_sta->scan_ap_num <= 20) {
126062306a36Sopenharmony_ci		if (coex_sta->a2dp_bit_pool >= 45)
126162306a36Sopenharmony_ci			wifi_duration_adjust = -15;
126262306a36Sopenharmony_ci		else if (coex_sta->a2dp_bit_pool >= 35)
126362306a36Sopenharmony_ci			wifi_duration_adjust = -10;
126462306a36Sopenharmony_ci		else
126562306a36Sopenharmony_ci			wifi_duration_adjust = 0;
126662306a36Sopenharmony_ci	} else if (coex_sta->scan_ap_num <= 40) {
126762306a36Sopenharmony_ci		if (coex_sta->a2dp_bit_pool >= 45)
126862306a36Sopenharmony_ci			wifi_duration_adjust = -15;
126962306a36Sopenharmony_ci		else if (coex_sta->a2dp_bit_pool >= 35)
127062306a36Sopenharmony_ci			wifi_duration_adjust = -10;
127162306a36Sopenharmony_ci		else
127262306a36Sopenharmony_ci			wifi_duration_adjust = -5;
127362306a36Sopenharmony_ci	} else {
127462306a36Sopenharmony_ci		if (coex_sta->a2dp_bit_pool >= 45)
127562306a36Sopenharmony_ci			wifi_duration_adjust = -15;
127662306a36Sopenharmony_ci		else if (coex_sta->a2dp_bit_pool >= 35)
127762306a36Sopenharmony_ci			wifi_duration_adjust = -10;
127862306a36Sopenharmony_ci		else
127962306a36Sopenharmony_ci			wifi_duration_adjust = -10;
128062306a36Sopenharmony_ci	}
128162306a36Sopenharmony_ci
128262306a36Sopenharmony_ci	if ((bt_link_info->slave_role) && (bt_link_info->a2dp_exist))
128362306a36Sopenharmony_ci		/* 0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts) */
128462306a36Sopenharmony_ci		tdma_byte4_modify = 0x1;
128562306a36Sopenharmony_ci
128662306a36Sopenharmony_ci	if (turn_on) {
128762306a36Sopenharmony_ci		switch (type) {
128862306a36Sopenharmony_ci		case 1:
128962306a36Sopenharmony_ci		default:
129062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
129162306a36Sopenharmony_ci				btcoexist, 0xe3, 0x3c,
129262306a36Sopenharmony_ci				0x03, 0xf1, 0x90 | tdma_byte4_modify);
129362306a36Sopenharmony_ci			break;
129462306a36Sopenharmony_ci		case 2:
129562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
129662306a36Sopenharmony_ci				btcoexist, 0xe3, 0x2d,
129762306a36Sopenharmony_ci				0x03, 0xf1, 0x90 | tdma_byte4_modify);
129862306a36Sopenharmony_ci			break;
129962306a36Sopenharmony_ci		case 3:
130062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
130162306a36Sopenharmony_ci						    0x3, 0xf1,
130262306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
130362306a36Sopenharmony_ci			break;
130462306a36Sopenharmony_ci		case 4:
130562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
130662306a36Sopenharmony_ci						    0x03, 0xf1,
130762306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
130862306a36Sopenharmony_ci			break;
130962306a36Sopenharmony_ci		case 5:
131062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
131162306a36Sopenharmony_ci				btcoexist, 0xe3, 0x3c,
131262306a36Sopenharmony_ci				0x3, 0x70, 0x90 | tdma_byte4_modify);
131362306a36Sopenharmony_ci			break;
131462306a36Sopenharmony_ci		case 6:
131562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
131662306a36Sopenharmony_ci				btcoexist, 0xe3, 0x2d,
131762306a36Sopenharmony_ci				0x3, 0x70, 0x90 | tdma_byte4_modify);
131862306a36Sopenharmony_ci			break;
131962306a36Sopenharmony_ci		case 7:
132062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
132162306a36Sopenharmony_ci						    0x3, 0x70,
132262306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
132362306a36Sopenharmony_ci			break;
132462306a36Sopenharmony_ci		case 8:
132562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x10,
132662306a36Sopenharmony_ci						    0x3, 0x70,
132762306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
132862306a36Sopenharmony_ci			break;
132962306a36Sopenharmony_ci		case 9:
133062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
133162306a36Sopenharmony_ci				btcoexist, 0xe3, 0x3c + wifi_duration_adjust,
133262306a36Sopenharmony_ci				0x03, 0xf1, 0x90 | tdma_byte4_modify);
133362306a36Sopenharmony_ci			break;
133462306a36Sopenharmony_ci		case 10:
133562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
133662306a36Sopenharmony_ci				btcoexist, 0xe3, 0x2d,
133762306a36Sopenharmony_ci				0x03, 0xf1, 0x90 | tdma_byte4_modify);
133862306a36Sopenharmony_ci			break;
133962306a36Sopenharmony_ci		case 11:
134062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
134162306a36Sopenharmony_ci						    0x3, 0xf1,
134262306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
134362306a36Sopenharmony_ci			break;
134462306a36Sopenharmony_ci		case 12:
134562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
134662306a36Sopenharmony_ci						    0x3, 0xf1,
134762306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
134862306a36Sopenharmony_ci			break;
134962306a36Sopenharmony_ci		case 13:
135062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
135162306a36Sopenharmony_ci				btcoexist, 0xe3, 0x3c,
135262306a36Sopenharmony_ci				0x3, 0x70, 0x90 | tdma_byte4_modify);
135362306a36Sopenharmony_ci			break;
135462306a36Sopenharmony_ci		case 14:
135562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
135662306a36Sopenharmony_ci				btcoexist, 0xe3, 0x2d,
135762306a36Sopenharmony_ci				0x3, 0x70, 0x90 | tdma_byte4_modify);
135862306a36Sopenharmony_ci			break;
135962306a36Sopenharmony_ci		case 15:
136062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
136162306a36Sopenharmony_ci						    0x3, 0x70,
136262306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
136362306a36Sopenharmony_ci			break;
136462306a36Sopenharmony_ci		case 16:
136562306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
136662306a36Sopenharmony_ci						    0x3, 0x70,
136762306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
136862306a36Sopenharmony_ci			break;
136962306a36Sopenharmony_ci		case 17:
137062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x2f,
137162306a36Sopenharmony_ci						    0x2f, 0x60, 0x90);
137262306a36Sopenharmony_ci			break;
137362306a36Sopenharmony_ci		case 18:
137462306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5, 0x5,
137562306a36Sopenharmony_ci						    0xe1, 0x90);
137662306a36Sopenharmony_ci			break;
137762306a36Sopenharmony_ci		case 19:
137862306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
137962306a36Sopenharmony_ci						    0x25, 0xe1, 0x90);
138062306a36Sopenharmony_ci			break;
138162306a36Sopenharmony_ci		case 20:
138262306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x25,
138362306a36Sopenharmony_ci						    0x25, 0x60, 0x90);
138462306a36Sopenharmony_ci			break;
138562306a36Sopenharmony_ci		case 21:
138662306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x15,
138762306a36Sopenharmony_ci						    0x03, 0x70, 0x90);
138862306a36Sopenharmony_ci			break;
138962306a36Sopenharmony_ci
139062306a36Sopenharmony_ci		case 23:
139162306a36Sopenharmony_ci		case 123:
139262306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x35,
139362306a36Sopenharmony_ci						    0x03, 0x71, 0x10);
139462306a36Sopenharmony_ci			break;
139562306a36Sopenharmony_ci		case 71:
139662306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
139762306a36Sopenharmony_ci				btcoexist, 0xe3, 0x3c + wifi_duration_adjust,
139862306a36Sopenharmony_ci				0x03, 0xf1, 0x90);
139962306a36Sopenharmony_ci			break;
140062306a36Sopenharmony_ci		case 101:
140162306a36Sopenharmony_ci		case 105:
140262306a36Sopenharmony_ci		case 113:
140362306a36Sopenharmony_ci		case 171:
140462306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
140562306a36Sopenharmony_ci				btcoexist, 0xd3, 0x3a + wifi_duration_adjust,
140662306a36Sopenharmony_ci				0x03, 0x70, 0x50 | tdma_byte4_modify);
140762306a36Sopenharmony_ci			break;
140862306a36Sopenharmony_ci		case 102:
140962306a36Sopenharmony_ci		case 106:
141062306a36Sopenharmony_ci		case 110:
141162306a36Sopenharmony_ci		case 114:
141262306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(
141362306a36Sopenharmony_ci				btcoexist, 0xd3, 0x2d + wifi_duration_adjust,
141462306a36Sopenharmony_ci				0x03, 0x70, 0x50 | tdma_byte4_modify);
141562306a36Sopenharmony_ci			break;
141662306a36Sopenharmony_ci		case 103:
141762306a36Sopenharmony_ci		case 107:
141862306a36Sopenharmony_ci		case 111:
141962306a36Sopenharmony_ci		case 115:
142062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x1c,
142162306a36Sopenharmony_ci						    0x03, 0x70,
142262306a36Sopenharmony_ci						    0x50 | tdma_byte4_modify);
142362306a36Sopenharmony_ci			break;
142462306a36Sopenharmony_ci		case 104:
142562306a36Sopenharmony_ci		case 108:
142662306a36Sopenharmony_ci		case 112:
142762306a36Sopenharmony_ci		case 116:
142862306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xd3, 0x10,
142962306a36Sopenharmony_ci						    0x03, 0x70,
143062306a36Sopenharmony_ci						    0x50 | tdma_byte4_modify);
143162306a36Sopenharmony_ci			break;
143262306a36Sopenharmony_ci		case 109:
143362306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x3c,
143462306a36Sopenharmony_ci						    0x03, 0xf1,
143562306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
143662306a36Sopenharmony_ci			break;
143762306a36Sopenharmony_ci		case 121:
143862306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x15,
143962306a36Sopenharmony_ci						    0x03, 0x70,
144062306a36Sopenharmony_ci						    0x90 | tdma_byte4_modify);
144162306a36Sopenharmony_ci			break;
144262306a36Sopenharmony_ci		case 22:
144362306a36Sopenharmony_ci		case 122:
144462306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x35,
144562306a36Sopenharmony_ci						    0x03, 0x71, 0x11);
144662306a36Sopenharmony_ci			break;
144762306a36Sopenharmony_ci		}
144862306a36Sopenharmony_ci	} else {
144962306a36Sopenharmony_ci		/* disable PS tdma */
145062306a36Sopenharmony_ci		switch (type) {
145162306a36Sopenharmony_ci		case 0:
145262306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
145362306a36Sopenharmony_ci						    0x40, 0x0);
145462306a36Sopenharmony_ci			break;
145562306a36Sopenharmony_ci		case 1:
145662306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
145762306a36Sopenharmony_ci						    0x48, 0x0);
145862306a36Sopenharmony_ci			break;
145962306a36Sopenharmony_ci		default:
146062306a36Sopenharmony_ci			btc8723b2ant_set_fw_ps_tdma(btcoexist, 0x0, 0x0, 0x0,
146162306a36Sopenharmony_ci						    0x40, 0x0);
146262306a36Sopenharmony_ci			break;
146362306a36Sopenharmony_ci		}
146462306a36Sopenharmony_ci	}
146562306a36Sopenharmony_ci
146662306a36Sopenharmony_ci	/* update pre state */
146762306a36Sopenharmony_ci	coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on;
146862306a36Sopenharmony_ci	coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;
146962306a36Sopenharmony_ci}
147062306a36Sopenharmony_ci
147162306a36Sopenharmony_cistatic void btc8723b2ant_ps_tdma_check_for_power_save_state(
147262306a36Sopenharmony_ci		struct btc_coexist *btcoexist, bool new_ps_state)
147362306a36Sopenharmony_ci{
147462306a36Sopenharmony_ci	u8 lps_mode = 0x0;
147562306a36Sopenharmony_ci
147662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_LPS_MODE, &lps_mode);
147762306a36Sopenharmony_ci
147862306a36Sopenharmony_ci	if (lps_mode) {
147962306a36Sopenharmony_ci		/* already under LPS state */
148062306a36Sopenharmony_ci		if (new_ps_state) {
148162306a36Sopenharmony_ci			/* keep state under LPS, do nothing. */
148262306a36Sopenharmony_ci		} else {
148362306a36Sopenharmony_ci			/* will leave LPS state, turn off psTdma first */
148462306a36Sopenharmony_ci			btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
148562306a36Sopenharmony_ci		}
148662306a36Sopenharmony_ci	} else {
148762306a36Sopenharmony_ci		/* NO PS state */
148862306a36Sopenharmony_ci		if (new_ps_state) {
148962306a36Sopenharmony_ci			/* will enter LPS state, turn off psTdma first */
149062306a36Sopenharmony_ci			btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
149162306a36Sopenharmony_ci		} else {
149262306a36Sopenharmony_ci			/* keep state under NO PS state, do nothing. */
149362306a36Sopenharmony_ci		}
149462306a36Sopenharmony_ci	}
149562306a36Sopenharmony_ci}
149662306a36Sopenharmony_ci
149762306a36Sopenharmony_cistatic void btc8723b2ant_power_save_state(struct btc_coexist *btcoexist,
149862306a36Sopenharmony_ci					  u8 ps_type, u8 lps_val, u8 rpwm_val)
149962306a36Sopenharmony_ci{
150062306a36Sopenharmony_ci	bool low_pwr_disable = false;
150162306a36Sopenharmony_ci
150262306a36Sopenharmony_ci	switch (ps_type) {
150362306a36Sopenharmony_ci	case BTC_PS_WIFI_NATIVE:
150462306a36Sopenharmony_ci		/* recover to original 32k low power setting */
150562306a36Sopenharmony_ci		low_pwr_disable = false;
150662306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
150762306a36Sopenharmony_ci				   &low_pwr_disable);
150862306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS, NULL);
150962306a36Sopenharmony_ci		coex_sta->force_lps_on = false;
151062306a36Sopenharmony_ci		break;
151162306a36Sopenharmony_ci	case BTC_PS_LPS_ON:
151262306a36Sopenharmony_ci		btc8723b2ant_ps_tdma_check_for_power_save_state(btcoexist,
151362306a36Sopenharmony_ci								true);
151462306a36Sopenharmony_ci		btc8723b2ant_lps_rpwm(btcoexist, NORMAL_EXEC, lps_val,
151562306a36Sopenharmony_ci				      rpwm_val);
151662306a36Sopenharmony_ci		/* when coex force to enter LPS, do not enter 32k low power */
151762306a36Sopenharmony_ci		low_pwr_disable = true;
151862306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
151962306a36Sopenharmony_ci				   &low_pwr_disable);
152062306a36Sopenharmony_ci		/* power save must executed before psTdma */
152162306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS, NULL);
152262306a36Sopenharmony_ci		coex_sta->force_lps_on = true;
152362306a36Sopenharmony_ci		break;
152462306a36Sopenharmony_ci	case BTC_PS_LPS_OFF:
152562306a36Sopenharmony_ci		btc8723b2ant_ps_tdma_check_for_power_save_state(btcoexist,
152662306a36Sopenharmony_ci								false);
152762306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS, NULL);
152862306a36Sopenharmony_ci		coex_sta->force_lps_on = false;
152962306a36Sopenharmony_ci		break;
153062306a36Sopenharmony_ci	default:
153162306a36Sopenharmony_ci		break;
153262306a36Sopenharmony_ci	}
153362306a36Sopenharmony_ci}
153462306a36Sopenharmony_ci
153562306a36Sopenharmony_cistatic void btc8723b2ant_coex_alloff(struct btc_coexist *btcoexist)
153662306a36Sopenharmony_ci{
153762306a36Sopenharmony_ci	/* fw all off */
153862306a36Sopenharmony_ci	btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
153962306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
154062306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
154162306a36Sopenharmony_ci	btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
154262306a36Sopenharmony_ci
154362306a36Sopenharmony_ci	/* sw all off */
154462306a36Sopenharmony_ci	btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
154562306a36Sopenharmony_ci
154662306a36Sopenharmony_ci	/* hw all off */
154762306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
154862306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
154962306a36Sopenharmony_ci}
155062306a36Sopenharmony_ci
155162306a36Sopenharmony_cistatic void btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
155262306a36Sopenharmony_ci{
155362306a36Sopenharmony_ci	/* force to reset coex mechanism*/
155462306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
155562306a36Sopenharmony_ci	btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
155662306a36Sopenharmony_ci
155762306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);
155862306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
155962306a36Sopenharmony_ci	btc8723b2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, 0);
156062306a36Sopenharmony_ci
156162306a36Sopenharmony_ci	btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
156262306a36Sopenharmony_ci
156362306a36Sopenharmony_ci	coex_sta->pop_event_cnt = 0;
156462306a36Sopenharmony_ci}
156562306a36Sopenharmony_ci
156662306a36Sopenharmony_cistatic void btc8723b2ant_action_bt_inquiry(struct btc_coexist *btcoexist)
156762306a36Sopenharmony_ci{
156862306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
156962306a36Sopenharmony_ci	bool wifi_connected = false;
157062306a36Sopenharmony_ci	bool low_pwr_disable = true;
157162306a36Sopenharmony_ci	bool scan = false, link = false, roam = false;
157262306a36Sopenharmony_ci
157362306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
157462306a36Sopenharmony_ci			   &low_pwr_disable);
157562306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
157662306a36Sopenharmony_ci			   &wifi_connected);
157762306a36Sopenharmony_ci
157862306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
157962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
158062306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
158162306a36Sopenharmony_ci
158262306a36Sopenharmony_ci	btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
158362306a36Sopenharmony_ci
158462306a36Sopenharmony_ci	if (coex_sta->bt_abnormal_scan) {
158562306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 23);
158662306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);
158762306a36Sopenharmony_ci	} else if (scan || link || roam) {
158862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
158962306a36Sopenharmony_ci			"[BTCoex], Wifi link process + BT Inq/Page!!\n");
159062306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 15);
159162306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);
159262306a36Sopenharmony_ci	} else if (wifi_connected) {
159362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
159462306a36Sopenharmony_ci			"[BTCoex], Wifi connected + BT Inq/Page!!\n");
159562306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 15);
159662306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);
159762306a36Sopenharmony_ci	} else {
159862306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
159962306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
160062306a36Sopenharmony_ci	}
160162306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);
160262306a36Sopenharmony_ci	btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
160362306a36Sopenharmony_ci
160462306a36Sopenharmony_ci	btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
160562306a36Sopenharmony_ci}
160662306a36Sopenharmony_ci
160762306a36Sopenharmony_cistatic void btc8723b2ant_action_wifi_link_process(struct btc_coexist
160862306a36Sopenharmony_ci						     *btcoexist)
160962306a36Sopenharmony_ci{
161062306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
161162306a36Sopenharmony_ci	u32 u32tmp;
161262306a36Sopenharmony_ci	u8 u8tmpa, u8tmpb;
161362306a36Sopenharmony_ci
161462306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 15);
161562306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);
161662306a36Sopenharmony_ci
161762306a36Sopenharmony_ci	btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
161862306a36Sopenharmony_ci
161962306a36Sopenharmony_ci	u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x948);
162062306a36Sopenharmony_ci	u8tmpa = btcoexist->btc_read_1byte(btcoexist, 0x765);
162162306a36Sopenharmony_ci	u8tmpb = btcoexist->btc_read_1byte(btcoexist, 0x76e);
162262306a36Sopenharmony_ci
162362306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
162462306a36Sopenharmony_ci		"[BTCoex], 0x948 = 0x%x, 0x765 = 0x%x, 0x76e = 0x%x\n",
162562306a36Sopenharmony_ci		u32tmp, u8tmpa, u8tmpb);
162662306a36Sopenharmony_ci}
162762306a36Sopenharmony_ci
162862306a36Sopenharmony_cistatic bool btc8723b2ant_action_wifi_idle_process(struct btc_coexist *btcoexist)
162962306a36Sopenharmony_ci{
163062306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
163162306a36Sopenharmony_ci	u8 wifi_rssi_state1;
163262306a36Sopenharmony_ci	u8 ap_num = 0;
163362306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
163462306a36Sopenharmony_ci		 coex_dm->switch_thres_offset - coex_dm->switch_thres_offset;
163562306a36Sopenharmony_ci
163662306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
163762306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
163862306a36Sopenharmony_ci							tmp, 0);
163962306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
164062306a36Sopenharmony_ci	      coex_dm->switch_thres_offset - coex_dm->switch_thres_offset;
164162306a36Sopenharmony_ci	btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
164262306a36Sopenharmony_ci
164362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);
164462306a36Sopenharmony_ci
164562306a36Sopenharmony_ci	/* office environment */
164662306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && (coex_sta->hid_exist) &&
164762306a36Sopenharmony_ci	    (coex_sta->a2dp_exist)) {
164862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
164962306a36Sopenharmony_ci			"[BTCoex], Wifi  idle process for BT HID+A2DP exist!!\n");
165062306a36Sopenharmony_ci
165162306a36Sopenharmony_ci		btc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, true, 0x6);
165262306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
165362306a36Sopenharmony_ci
165462306a36Sopenharmony_ci		/* sw all off */
165562306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false, false,
165662306a36Sopenharmony_ci					  false);
165762306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
165862306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
165962306a36Sopenharmony_ci					      0x0, 0x0);
166062306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
166162306a36Sopenharmony_ci
166262306a36Sopenharmony_ci		return true;
166362306a36Sopenharmony_ci	}
166462306a36Sopenharmony_ci
166562306a36Sopenharmony_ci	btc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, true, 0x18);
166662306a36Sopenharmony_ci	return false;
166762306a36Sopenharmony_ci}
166862306a36Sopenharmony_ci
166962306a36Sopenharmony_cistatic bool btc8723b2ant_is_common_action(struct btc_coexist *btcoexist)
167062306a36Sopenharmony_ci{
167162306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
167262306a36Sopenharmony_ci	bool common = false, wifi_connected = false;
167362306a36Sopenharmony_ci	bool wifi_busy = false;
167462306a36Sopenharmony_ci	bool bt_hs_on = false, low_pwr_disable = false;
167562306a36Sopenharmony_ci
167662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
167762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
167862306a36Sopenharmony_ci			   &wifi_connected);
167962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
168062306a36Sopenharmony_ci
168162306a36Sopenharmony_ci	if (!wifi_connected) {
168262306a36Sopenharmony_ci		low_pwr_disable = false;
168362306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,
168462306a36Sopenharmony_ci				   &low_pwr_disable);
168562306a36Sopenharmony_ci		btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC,
168662306a36Sopenharmony_ci					false, false, 0x8);
168762306a36Sopenharmony_ci
168862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
168962306a36Sopenharmony_ci			"[BTCoex], Wifi non-connected idle!!\n");
169062306a36Sopenharmony_ci
169162306a36Sopenharmony_ci		btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
169262306a36Sopenharmony_ci					  0x0);
169362306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
169462306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
169562306a36Sopenharmony_ci		btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
169662306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
169762306a36Sopenharmony_ci
169862306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false, false,
169962306a36Sopenharmony_ci					  false);
170062306a36Sopenharmony_ci
170162306a36Sopenharmony_ci		common = true;
170262306a36Sopenharmony_ci	} else {
170362306a36Sopenharmony_ci		if (BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==
170462306a36Sopenharmony_ci		    coex_dm->bt_status) {
170562306a36Sopenharmony_ci			low_pwr_disable = false;
170662306a36Sopenharmony_ci			btcoexist->btc_set(btcoexist,
170762306a36Sopenharmony_ci					   BTC_SET_ACT_DISABLE_LOW_POWER,
170862306a36Sopenharmony_ci					   &low_pwr_disable);
170962306a36Sopenharmony_ci			btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC,
171062306a36Sopenharmony_ci						false, false, 0x8);
171162306a36Sopenharmony_ci
171262306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
171362306a36Sopenharmony_ci				"[BTCoex], Wifi connected + BT non connected-idle!!\n");
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_ci			btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
171662306a36Sopenharmony_ci						  0xfffff, 0x0);
171762306a36Sopenharmony_ci			btc8723b2ant_coex_table_with_type(btcoexist,
171862306a36Sopenharmony_ci							  NORMAL_EXEC, 0);
171962306a36Sopenharmony_ci			btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
172062306a36Sopenharmony_ci			btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
172162306a36Sopenharmony_ci						      0xb);
172262306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
172362306a36Sopenharmony_ci
172462306a36Sopenharmony_ci			btc8723b2ant_sw_mechanism(btcoexist, false, false,
172562306a36Sopenharmony_ci						  false, false);
172662306a36Sopenharmony_ci
172762306a36Sopenharmony_ci			common = true;
172862306a36Sopenharmony_ci		} else if (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE ==
172962306a36Sopenharmony_ci			   coex_dm->bt_status) {
173062306a36Sopenharmony_ci			low_pwr_disable = true;
173162306a36Sopenharmony_ci			btcoexist->btc_set(btcoexist,
173262306a36Sopenharmony_ci					   BTC_SET_ACT_DISABLE_LOW_POWER,
173362306a36Sopenharmony_ci					   &low_pwr_disable);
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ci			if (bt_hs_on)
173662306a36Sopenharmony_ci				return false;
173762306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
173862306a36Sopenharmony_ci				"[BTCoex], Wifi connected + BT connected-idle!!\n");
173962306a36Sopenharmony_ci			btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC,
174062306a36Sopenharmony_ci						false, false, 0x8);
174162306a36Sopenharmony_ci
174262306a36Sopenharmony_ci			btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
174362306a36Sopenharmony_ci						  0xfffff, 0x0);
174462306a36Sopenharmony_ci			btc8723b2ant_coex_table_with_type(btcoexist,
174562306a36Sopenharmony_ci							  NORMAL_EXEC, 0);
174662306a36Sopenharmony_ci			btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
174762306a36Sopenharmony_ci			btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
174862306a36Sopenharmony_ci						      0xb);
174962306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
175062306a36Sopenharmony_ci
175162306a36Sopenharmony_ci			btc8723b2ant_sw_mechanism(btcoexist, true, false,
175262306a36Sopenharmony_ci						  false, false);
175362306a36Sopenharmony_ci
175462306a36Sopenharmony_ci			common = true;
175562306a36Sopenharmony_ci		} else {
175662306a36Sopenharmony_ci			low_pwr_disable = true;
175762306a36Sopenharmony_ci			btcoexist->btc_set(btcoexist,
175862306a36Sopenharmony_ci					   BTC_SET_ACT_DISABLE_LOW_POWER,
175962306a36Sopenharmony_ci					   &low_pwr_disable);
176062306a36Sopenharmony_ci
176162306a36Sopenharmony_ci			if (wifi_busy) {
176262306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
176362306a36Sopenharmony_ci					"[BTCoex], Wifi Connected-Busy + BT Busy!!\n");
176462306a36Sopenharmony_ci				common = false;
176562306a36Sopenharmony_ci			} else {
176662306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
176762306a36Sopenharmony_ci					"[BTCoex], Wifi Connected-Idle + BT Busy!!\n");
176862306a36Sopenharmony_ci
176962306a36Sopenharmony_ci				common =
177062306a36Sopenharmony_ci				    btc8723b2ant_action_wifi_idle_process(
177162306a36Sopenharmony_ci						btcoexist);
177262306a36Sopenharmony_ci			}
177362306a36Sopenharmony_ci		}
177462306a36Sopenharmony_ci	}
177562306a36Sopenharmony_ci
177662306a36Sopenharmony_ci	return common;
177762306a36Sopenharmony_ci}
177862306a36Sopenharmony_ci
177962306a36Sopenharmony_cistatic void btc8723b2ant_tdma_duration_adjust(struct btc_coexist *btcoexist,
178062306a36Sopenharmony_ci					  bool sco_hid, bool tx_pause,
178162306a36Sopenharmony_ci					  u8 max_interval)
178262306a36Sopenharmony_ci{
178362306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
178462306a36Sopenharmony_ci	static s32 up, dn, m, n, wait_count;
178562306a36Sopenharmony_ci	/*0: no change, +1: increase WiFi duration, -1: decrease WiFi duration*/
178662306a36Sopenharmony_ci	s32 result;
178762306a36Sopenharmony_ci	u8 retry_count = 0;
178862306a36Sopenharmony_ci
178962306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
179062306a36Sopenharmony_ci		"[BTCoex], TdmaDurationAdjust()\n");
179162306a36Sopenharmony_ci
179262306a36Sopenharmony_ci	if (!coex_dm->auto_tdma_adjust) {
179362306a36Sopenharmony_ci		coex_dm->auto_tdma_adjust = true;
179462306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
179562306a36Sopenharmony_ci			"[BTCoex], first run TdmaDurationAdjust()!!\n");
179662306a36Sopenharmony_ci		if (sco_hid) {
179762306a36Sopenharmony_ci			if (tx_pause) {
179862306a36Sopenharmony_ci				if (max_interval == 1) {
179962306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
180062306a36Sopenharmony_ci							     NORMAL_EXEC,
180162306a36Sopenharmony_ci							     true, 13);
180262306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 13;
180362306a36Sopenharmony_ci				} else if (max_interval == 2) {
180462306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
180562306a36Sopenharmony_ci							     NORMAL_EXEC,
180662306a36Sopenharmony_ci							     true, 14);
180762306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 14;
180862306a36Sopenharmony_ci				} else if (max_interval == 3) {
180962306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
181062306a36Sopenharmony_ci							     NORMAL_EXEC,
181162306a36Sopenharmony_ci							     true, 15);
181262306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
181362306a36Sopenharmony_ci				} else {
181462306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
181562306a36Sopenharmony_ci							     NORMAL_EXEC,
181662306a36Sopenharmony_ci							     true, 15);
181762306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
181862306a36Sopenharmony_ci				}
181962306a36Sopenharmony_ci			} else {
182062306a36Sopenharmony_ci				if (max_interval == 1) {
182162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
182262306a36Sopenharmony_ci							     NORMAL_EXEC,
182362306a36Sopenharmony_ci							     true, 9);
182462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 9;
182562306a36Sopenharmony_ci				} else if (max_interval == 2) {
182662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
182762306a36Sopenharmony_ci							     NORMAL_EXEC,
182862306a36Sopenharmony_ci							     true, 10);
182962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 10;
183062306a36Sopenharmony_ci				} else if (max_interval == 3) {
183162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
183262306a36Sopenharmony_ci							     NORMAL_EXEC,
183362306a36Sopenharmony_ci						     true, 11);
183462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
183562306a36Sopenharmony_ci				} else {
183662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
183762306a36Sopenharmony_ci							     NORMAL_EXEC,
183862306a36Sopenharmony_ci							     true, 11);
183962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
184062306a36Sopenharmony_ci				}
184162306a36Sopenharmony_ci			}
184262306a36Sopenharmony_ci		} else {
184362306a36Sopenharmony_ci			if (tx_pause) {
184462306a36Sopenharmony_ci				if (max_interval == 1) {
184562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
184662306a36Sopenharmony_ci							     NORMAL_EXEC,
184762306a36Sopenharmony_ci							     true, 5);
184862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 5;
184962306a36Sopenharmony_ci				} else if (max_interval == 2) {
185062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
185162306a36Sopenharmony_ci							     NORMAL_EXEC,
185262306a36Sopenharmony_ci							     true, 6);
185362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 6;
185462306a36Sopenharmony_ci				} else if (max_interval == 3) {
185562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
185662306a36Sopenharmony_ci							     NORMAL_EXEC,
185762306a36Sopenharmony_ci							     true, 7);
185862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
185962306a36Sopenharmony_ci				} else {
186062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
186162306a36Sopenharmony_ci							     NORMAL_EXEC,
186262306a36Sopenharmony_ci							     true, 7);
186362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
186462306a36Sopenharmony_ci				}
186562306a36Sopenharmony_ci			} else {
186662306a36Sopenharmony_ci				if (max_interval == 1) {
186762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
186862306a36Sopenharmony_ci							     NORMAL_EXEC,
186962306a36Sopenharmony_ci							     true, 1);
187062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 1;
187162306a36Sopenharmony_ci				} else if (max_interval == 2) {
187262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
187362306a36Sopenharmony_ci							     NORMAL_EXEC,
187462306a36Sopenharmony_ci							     true, 2);
187562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 2;
187662306a36Sopenharmony_ci				} else if (max_interval == 3) {
187762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
187862306a36Sopenharmony_ci							     NORMAL_EXEC,
187962306a36Sopenharmony_ci							     true, 3);
188062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
188162306a36Sopenharmony_ci				} else {
188262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
188362306a36Sopenharmony_ci							     NORMAL_EXEC,
188462306a36Sopenharmony_ci							     true, 3);
188562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
188662306a36Sopenharmony_ci				}
188762306a36Sopenharmony_ci			}
188862306a36Sopenharmony_ci		}
188962306a36Sopenharmony_ci
189062306a36Sopenharmony_ci		up = 0;
189162306a36Sopenharmony_ci		dn = 0;
189262306a36Sopenharmony_ci		m = 1;
189362306a36Sopenharmony_ci		n = 3;
189462306a36Sopenharmony_ci		result = 0;
189562306a36Sopenharmony_ci		wait_count = 0;
189662306a36Sopenharmony_ci	} else {
189762306a36Sopenharmony_ci		/*accquire the BT TRx retry count from BT_Info byte2*/
189862306a36Sopenharmony_ci		retry_count = coex_sta->bt_retry_cnt;
189962306a36Sopenharmony_ci
190062306a36Sopenharmony_ci		if ((coex_sta->low_priority_tx) > 1050 ||
190162306a36Sopenharmony_ci		    (coex_sta->low_priority_rx) > 1250)
190262306a36Sopenharmony_ci			retry_count++;
190362306a36Sopenharmony_ci
190462306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
190562306a36Sopenharmony_ci			"[BTCoex], retry_count = %d\n", retry_count);
190662306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
190762306a36Sopenharmony_ci			"[BTCoex], up=%d, dn=%d, m=%d, n=%d, wait_count=%d\n",
190862306a36Sopenharmony_ci			up, dn, m, n, wait_count);
190962306a36Sopenharmony_ci		result = 0;
191062306a36Sopenharmony_ci		wait_count++;
191162306a36Sopenharmony_ci		 /* no retry in the last 2-second duration*/
191262306a36Sopenharmony_ci		if (retry_count == 0) {
191362306a36Sopenharmony_ci			up++;
191462306a36Sopenharmony_ci			dn--;
191562306a36Sopenharmony_ci
191662306a36Sopenharmony_ci			if (dn <= 0)
191762306a36Sopenharmony_ci				dn = 0;
191862306a36Sopenharmony_ci
191962306a36Sopenharmony_ci			if (up >= n) {
192062306a36Sopenharmony_ci				/* if retry count during continuous n*2
192162306a36Sopenharmony_ci				 * seconds is 0, enlarge WiFi duration
192262306a36Sopenharmony_ci				 */
192362306a36Sopenharmony_ci				wait_count = 0;
192462306a36Sopenharmony_ci				n = 3;
192562306a36Sopenharmony_ci				up = 0;
192662306a36Sopenharmony_ci				dn = 0;
192762306a36Sopenharmony_ci				result = 1;
192862306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
192962306a36Sopenharmony_ci					"[BTCoex], Increase wifi duration!!\n");
193062306a36Sopenharmony_ci			} /* <=3 retry in the last 2-second duration*/
193162306a36Sopenharmony_ci		} else if (retry_count <= 3) {
193262306a36Sopenharmony_ci			up--;
193362306a36Sopenharmony_ci			dn++;
193462306a36Sopenharmony_ci
193562306a36Sopenharmony_ci			if (up <= 0)
193662306a36Sopenharmony_ci				up = 0;
193762306a36Sopenharmony_ci
193862306a36Sopenharmony_ci			if (dn == 2) {
193962306a36Sopenharmony_ci				/* if continuous 2 retry count(every 2
194062306a36Sopenharmony_ci				 * seconds) >0 and < 3, reduce WiFi duration
194162306a36Sopenharmony_ci				 */
194262306a36Sopenharmony_ci				if (wait_count <= 2)
194362306a36Sopenharmony_ci					/* avoid loop between the two levels */
194462306a36Sopenharmony_ci					m++;
194562306a36Sopenharmony_ci				else
194662306a36Sopenharmony_ci					m = 1;
194762306a36Sopenharmony_ci
194862306a36Sopenharmony_ci				if (m >= 20)
194962306a36Sopenharmony_ci					/* maximum of m = 20 ' will recheck if
195062306a36Sopenharmony_ci					 * need to adjust wifi duration in
195162306a36Sopenharmony_ci					 * maximum time interval 120 seconds
195262306a36Sopenharmony_ci					 */
195362306a36Sopenharmony_ci					m = 20;
195462306a36Sopenharmony_ci
195562306a36Sopenharmony_ci				n = 3 * m;
195662306a36Sopenharmony_ci				up = 0;
195762306a36Sopenharmony_ci				dn = 0;
195862306a36Sopenharmony_ci				wait_count = 0;
195962306a36Sopenharmony_ci				result = -1;
196062306a36Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
196162306a36Sopenharmony_ci					"[BTCoex], Decrease wifi duration for retry_counter<3!!\n");
196262306a36Sopenharmony_ci			}
196362306a36Sopenharmony_ci		} else {
196462306a36Sopenharmony_ci			/* retry count > 3, once retry count > 3, to reduce
196562306a36Sopenharmony_ci			 *  WiFi duration
196662306a36Sopenharmony_ci			 */
196762306a36Sopenharmony_ci			if (wait_count == 1)
196862306a36Sopenharmony_ci				/* to avoid loop between the two levels */
196962306a36Sopenharmony_ci				m++;
197062306a36Sopenharmony_ci			else
197162306a36Sopenharmony_ci				m = 1;
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_ci			if (m >= 20)
197462306a36Sopenharmony_ci				/* maximum of m = 20 ' will recheck if need to
197562306a36Sopenharmony_ci				 * adjust wifi duration in maximum time interval
197662306a36Sopenharmony_ci				 * 120 seconds
197762306a36Sopenharmony_ci				 */
197862306a36Sopenharmony_ci				m = 20;
197962306a36Sopenharmony_ci
198062306a36Sopenharmony_ci			n = 3 * m;
198162306a36Sopenharmony_ci			up = 0;
198262306a36Sopenharmony_ci			dn = 0;
198362306a36Sopenharmony_ci			wait_count = 0;
198462306a36Sopenharmony_ci			result = -1;
198562306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
198662306a36Sopenharmony_ci				"[BTCoex], Decrease wifi duration for retry_counter>3!!\n");
198762306a36Sopenharmony_ci		}
198862306a36Sopenharmony_ci
198962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
199062306a36Sopenharmony_ci			"[BTCoex], max Interval = %d\n", max_interval);
199162306a36Sopenharmony_ci		if (max_interval == 1) {
199262306a36Sopenharmony_ci			if (tx_pause) {
199362306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 71) {
199462306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
199562306a36Sopenharmony_ci							     NORMAL_EXEC,
199662306a36Sopenharmony_ci							     true, 5);
199762306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 5;
199862306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 1) {
199962306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
200062306a36Sopenharmony_ci							     NORMAL_EXEC,
200162306a36Sopenharmony_ci							     true, 5);
200262306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 5;
200362306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 2) {
200462306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
200562306a36Sopenharmony_ci							     NORMAL_EXEC,
200662306a36Sopenharmony_ci							     true, 6);
200762306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 6;
200862306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 3) {
200962306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
201062306a36Sopenharmony_ci							     NORMAL_EXEC,
201162306a36Sopenharmony_ci							     true, 7);
201262306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
201362306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 4) {
201462306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
201562306a36Sopenharmony_ci							     NORMAL_EXEC,
201662306a36Sopenharmony_ci							     true, 8);
201762306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 8;
201862306a36Sopenharmony_ci				}
201962306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 9) {
202062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
202162306a36Sopenharmony_ci							     NORMAL_EXEC,
202262306a36Sopenharmony_ci							     true, 13);
202362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 13;
202462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 10) {
202562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
202662306a36Sopenharmony_ci							     NORMAL_EXEC,
202762306a36Sopenharmony_ci							     true, 14);
202862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 14;
202962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 11) {
203062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
203162306a36Sopenharmony_ci							     NORMAL_EXEC,
203262306a36Sopenharmony_ci							     true, 15);
203362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
203462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 12) {
203562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
203662306a36Sopenharmony_ci							     NORMAL_EXEC,
203762306a36Sopenharmony_ci							     true, 16);
203862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 16;
203962306a36Sopenharmony_ci				}
204062306a36Sopenharmony_ci
204162306a36Sopenharmony_ci				if (result == -1) {
204262306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 5) {
204362306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
204462306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
204562306a36Sopenharmony_ci							true, 6);
204662306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
204762306a36Sopenharmony_ci							6;
204862306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
204962306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
205062306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
205162306a36Sopenharmony_ci							true, 7);
205262306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
205362306a36Sopenharmony_ci							7;
205462306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
205562306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
205662306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
205762306a36Sopenharmony_ci							true, 8);
205862306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
205962306a36Sopenharmony_ci							8;
206062306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 13) {
206162306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
206262306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
206362306a36Sopenharmony_ci							true, 14);
206462306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
206562306a36Sopenharmony_ci							14;
206662306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
206762306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
206862306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
206962306a36Sopenharmony_ci							true, 15);
207062306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
207162306a36Sopenharmony_ci							15;
207262306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
207362306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
207462306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
207562306a36Sopenharmony_ci							true, 16);
207662306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
207762306a36Sopenharmony_ci							16;
207862306a36Sopenharmony_ci					}
207962306a36Sopenharmony_ci				} else if (result == 1) {
208062306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 8) {
208162306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
208262306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
208362306a36Sopenharmony_ci							true, 7);
208462306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
208562306a36Sopenharmony_ci							7;
208662306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
208762306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
208862306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
208962306a36Sopenharmony_ci							true, 6);
209062306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
209162306a36Sopenharmony_ci							6;
209262306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
209362306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
209462306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
209562306a36Sopenharmony_ci							true, 5);
209662306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
209762306a36Sopenharmony_ci							5;
209862306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 16) {
209962306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
210062306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
210162306a36Sopenharmony_ci							true, 15);
210262306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
210362306a36Sopenharmony_ci							15;
210462306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
210562306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
210662306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
210762306a36Sopenharmony_ci							true, 14);
210862306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
210962306a36Sopenharmony_ci							14;
211062306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
211162306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
211262306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
211362306a36Sopenharmony_ci							true, 13);
211462306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
211562306a36Sopenharmony_ci							13;
211662306a36Sopenharmony_ci					}
211762306a36Sopenharmony_ci				}
211862306a36Sopenharmony_ci			} else {
211962306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 5) {
212062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
212162306a36Sopenharmony_ci							     NORMAL_EXEC,
212262306a36Sopenharmony_ci							     true, 71);
212362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 71;
212462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 6) {
212562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
212662306a36Sopenharmony_ci							     NORMAL_EXEC,
212762306a36Sopenharmony_ci							     true, 2);
212862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 2;
212962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 7) {
213062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
213162306a36Sopenharmony_ci							     NORMAL_EXEC,
213262306a36Sopenharmony_ci							     true, 3);
213362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
213462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 8) {
213562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
213662306a36Sopenharmony_ci							     NORMAL_EXEC,
213762306a36Sopenharmony_ci							     true, 4);
213862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 4;
213962306a36Sopenharmony_ci				}
214062306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 13) {
214162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
214262306a36Sopenharmony_ci							     NORMAL_EXEC,
214362306a36Sopenharmony_ci							     true, 9);
214462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 9;
214562306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 14) {
214662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
214762306a36Sopenharmony_ci							     NORMAL_EXEC,
214862306a36Sopenharmony_ci							     true, 10);
214962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 10;
215062306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 15) {
215162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
215262306a36Sopenharmony_ci							     NORMAL_EXEC,
215362306a36Sopenharmony_ci							     true, 11);
215462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
215562306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 16) {
215662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
215762306a36Sopenharmony_ci							     NORMAL_EXEC,
215862306a36Sopenharmony_ci							     true, 12);
215962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 12;
216062306a36Sopenharmony_ci				}
216162306a36Sopenharmony_ci
216262306a36Sopenharmony_ci				if (result == -1) {
216362306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 71) {
216462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
216562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
216662306a36Sopenharmony_ci							true, 1);
216762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
216862306a36Sopenharmony_ci							1;
216962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 1) {
217062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
217162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
217262306a36Sopenharmony_ci							true, 2);
217362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
217462306a36Sopenharmony_ci							2;
217562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
217662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
217762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
217862306a36Sopenharmony_ci							true, 3);
217962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
218062306a36Sopenharmony_ci							3;
218162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
218262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
218362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
218462306a36Sopenharmony_ci							true, 4);
218562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
218662306a36Sopenharmony_ci							4;
218762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 9) {
218862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
218962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
219062306a36Sopenharmony_ci							true, 10);
219162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
219262306a36Sopenharmony_ci							10;
219362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
219462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
219562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
219662306a36Sopenharmony_ci							true, 11);
219762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
219862306a36Sopenharmony_ci							11;
219962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
220062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
220162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
220262306a36Sopenharmony_ci							true, 12);
220362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
220462306a36Sopenharmony_ci							12;
220562306a36Sopenharmony_ci					}
220662306a36Sopenharmony_ci				} else if (result == 1) {
220762306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 4) {
220862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
220962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
221062306a36Sopenharmony_ci							true, 3);
221162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
221262306a36Sopenharmony_ci							3;
221362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
221462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
221562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
221662306a36Sopenharmony_ci							true, 2);
221762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
221862306a36Sopenharmony_ci							2;
221962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
222062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
222162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
222262306a36Sopenharmony_ci							true, 1);
222362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
222462306a36Sopenharmony_ci							1;
222562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 1) {
222662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
222762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
222862306a36Sopenharmony_ci							true, 71);
222962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
223062306a36Sopenharmony_ci							71;
223162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 12) {
223262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
223362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
223462306a36Sopenharmony_ci							true, 11);
223562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
223662306a36Sopenharmony_ci							11;
223762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
223862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
223962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
224062306a36Sopenharmony_ci							true, 10);
224162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
224262306a36Sopenharmony_ci							10;
224362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
224462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
224562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
224662306a36Sopenharmony_ci							true, 9);
224762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
224862306a36Sopenharmony_ci							9;
224962306a36Sopenharmony_ci					}
225062306a36Sopenharmony_ci				}
225162306a36Sopenharmony_ci			}
225262306a36Sopenharmony_ci		} else if (max_interval == 2) {
225362306a36Sopenharmony_ci			if (tx_pause) {
225462306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 1) {
225562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
225662306a36Sopenharmony_ci							     NORMAL_EXEC,
225762306a36Sopenharmony_ci							     true, 6);
225862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 6;
225962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 2) {
226062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
226162306a36Sopenharmony_ci							     NORMAL_EXEC,
226262306a36Sopenharmony_ci							     true, 6);
226362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 6;
226462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 3) {
226562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
226662306a36Sopenharmony_ci							     NORMAL_EXEC,
226762306a36Sopenharmony_ci							     true, 7);
226862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
226962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 4) {
227062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
227162306a36Sopenharmony_ci							     NORMAL_EXEC,
227262306a36Sopenharmony_ci							     true, 8);
227362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 8;
227462306a36Sopenharmony_ci				}
227562306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 9) {
227662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
227762306a36Sopenharmony_ci							     NORMAL_EXEC,
227862306a36Sopenharmony_ci							     true, 14);
227962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 14;
228062306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 10) {
228162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
228262306a36Sopenharmony_ci							     NORMAL_EXEC,
228362306a36Sopenharmony_ci							     true, 14);
228462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 14;
228562306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 11) {
228662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
228762306a36Sopenharmony_ci							     NORMAL_EXEC,
228862306a36Sopenharmony_ci							     true, 15);
228962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
229062306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 12) {
229162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
229262306a36Sopenharmony_ci							     NORMAL_EXEC,
229362306a36Sopenharmony_ci							     true, 16);
229462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 16;
229562306a36Sopenharmony_ci				}
229662306a36Sopenharmony_ci				if (result == -1) {
229762306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 5) {
229862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
229962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
230062306a36Sopenharmony_ci							true, 6);
230162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
230262306a36Sopenharmony_ci							6;
230362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
230462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
230562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
230662306a36Sopenharmony_ci							true, 7);
230762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
230862306a36Sopenharmony_ci							7;
230962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
231062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
231162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
231262306a36Sopenharmony_ci							true, 8);
231362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
231462306a36Sopenharmony_ci							8;
231562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 13) {
231662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
231762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
231862306a36Sopenharmony_ci							true, 14);
231962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
232062306a36Sopenharmony_ci							14;
232162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
232262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
232362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
232462306a36Sopenharmony_ci							true, 15);
232562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
232662306a36Sopenharmony_ci							15;
232762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
232862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
232962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
233062306a36Sopenharmony_ci							true, 16);
233162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
233262306a36Sopenharmony_ci							16;
233362306a36Sopenharmony_ci					}
233462306a36Sopenharmony_ci				} else if (result == 1) {
233562306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 8) {
233662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
233762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
233862306a36Sopenharmony_ci							true, 7);
233962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
234062306a36Sopenharmony_ci							7;
234162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
234262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
234362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
234462306a36Sopenharmony_ci							true, 6);
234562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
234662306a36Sopenharmony_ci							6;
234762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
234862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
234962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
235062306a36Sopenharmony_ci							true, 6);
235162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
235262306a36Sopenharmony_ci							6;
235362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 16) {
235462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
235562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
235662306a36Sopenharmony_ci							true, 15);
235762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
235862306a36Sopenharmony_ci							15;
235962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
236062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
236162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
236262306a36Sopenharmony_ci							true, 14);
236362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
236462306a36Sopenharmony_ci							14;
236562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
236662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
236762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
236862306a36Sopenharmony_ci							true, 14);
236962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
237062306a36Sopenharmony_ci							14;
237162306a36Sopenharmony_ci					}
237262306a36Sopenharmony_ci				}
237362306a36Sopenharmony_ci			} else {
237462306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 5) {
237562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
237662306a36Sopenharmony_ci							     NORMAL_EXEC,
237762306a36Sopenharmony_ci							     true, 2);
237862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 2;
237962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 6) {
238062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
238162306a36Sopenharmony_ci							     NORMAL_EXEC,
238262306a36Sopenharmony_ci							     true, 2);
238362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 2;
238462306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 7) {
238562306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
238662306a36Sopenharmony_ci							     NORMAL_EXEC,
238762306a36Sopenharmony_ci							     true, 3);
238862306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
238962306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 8) {
239062306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
239162306a36Sopenharmony_ci							     NORMAL_EXEC,
239262306a36Sopenharmony_ci							     true, 4);
239362306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 4;
239462306a36Sopenharmony_ci				}
239562306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 13) {
239662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
239762306a36Sopenharmony_ci							     NORMAL_EXEC,
239862306a36Sopenharmony_ci							     true, 10);
239962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 10;
240062306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 14) {
240162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
240262306a36Sopenharmony_ci							     NORMAL_EXEC,
240362306a36Sopenharmony_ci							     true, 10);
240462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 10;
240562306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 15) {
240662306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
240762306a36Sopenharmony_ci							     NORMAL_EXEC,
240862306a36Sopenharmony_ci							     true, 11);
240962306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
241062306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 16) {
241162306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
241262306a36Sopenharmony_ci							     NORMAL_EXEC,
241362306a36Sopenharmony_ci							     true, 12);
241462306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 12;
241562306a36Sopenharmony_ci				}
241662306a36Sopenharmony_ci				if (result == -1) {
241762306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 1) {
241862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
241962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
242062306a36Sopenharmony_ci							true, 2);
242162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
242262306a36Sopenharmony_ci							2;
242362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
242462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
242562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
242662306a36Sopenharmony_ci							true, 3);
242762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
242862306a36Sopenharmony_ci							3;
242962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
243062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
243162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
243262306a36Sopenharmony_ci							true, 4);
243362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
243462306a36Sopenharmony_ci							4;
243562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 9) {
243662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
243762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
243862306a36Sopenharmony_ci							true, 10);
243962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
244062306a36Sopenharmony_ci							10;
244162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
244262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
244362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
244462306a36Sopenharmony_ci							true, 11);
244562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
244662306a36Sopenharmony_ci							11;
244762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
244862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
244962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
245062306a36Sopenharmony_ci							true, 12);
245162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
245262306a36Sopenharmony_ci							12;
245362306a36Sopenharmony_ci					}
245462306a36Sopenharmony_ci				} else if (result == 1) {
245562306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 4) {
245662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
245762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
245862306a36Sopenharmony_ci							true, 3);
245962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
246062306a36Sopenharmony_ci							3;
246162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
246262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
246362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
246462306a36Sopenharmony_ci							true, 2);
246562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
246662306a36Sopenharmony_ci							2;
246762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
246862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
246962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
247062306a36Sopenharmony_ci							true, 2);
247162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
247262306a36Sopenharmony_ci							2;
247362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 12) {
247462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
247562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
247662306a36Sopenharmony_ci							true, 11);
247762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
247862306a36Sopenharmony_ci							11;
247962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
248062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
248162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
248262306a36Sopenharmony_ci							true, 10);
248362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
248462306a36Sopenharmony_ci							10;
248562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
248662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
248762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
248862306a36Sopenharmony_ci							true, 10);
248962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
249062306a36Sopenharmony_ci							10;
249162306a36Sopenharmony_ci					}
249262306a36Sopenharmony_ci				}
249362306a36Sopenharmony_ci			}
249462306a36Sopenharmony_ci		} else if (max_interval == 3) {
249562306a36Sopenharmony_ci			if (tx_pause) {
249662306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 1) {
249762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
249862306a36Sopenharmony_ci							     NORMAL_EXEC,
249962306a36Sopenharmony_ci							     true, 7);
250062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
250162306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 2) {
250262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
250362306a36Sopenharmony_ci							     NORMAL_EXEC,
250462306a36Sopenharmony_ci							     true, 7);
250562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
250662306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 3) {
250762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
250862306a36Sopenharmony_ci							     NORMAL_EXEC,
250962306a36Sopenharmony_ci							     true, 7);
251062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 7;
251162306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 4) {
251262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
251362306a36Sopenharmony_ci							     NORMAL_EXEC,
251462306a36Sopenharmony_ci							     true, 8);
251562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 8;
251662306a36Sopenharmony_ci				}
251762306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 9) {
251862306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
251962306a36Sopenharmony_ci							     NORMAL_EXEC,
252062306a36Sopenharmony_ci							     true, 15);
252162306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
252262306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 10) {
252362306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
252462306a36Sopenharmony_ci							     NORMAL_EXEC,
252562306a36Sopenharmony_ci							     true, 15);
252662306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
252762306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 11) {
252862306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
252962306a36Sopenharmony_ci							     NORMAL_EXEC,
253062306a36Sopenharmony_ci							     true, 15);
253162306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 15;
253262306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 12) {
253362306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
253462306a36Sopenharmony_ci							     NORMAL_EXEC,
253562306a36Sopenharmony_ci							     true, 16);
253662306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 16;
253762306a36Sopenharmony_ci				}
253862306a36Sopenharmony_ci				if (result == -1) {
253962306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 5) {
254062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
254162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
254262306a36Sopenharmony_ci							true, 7);
254362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
254462306a36Sopenharmony_ci							7;
254562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
254662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
254762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
254862306a36Sopenharmony_ci							true, 7);
254962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
255062306a36Sopenharmony_ci							7;
255162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
255262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
255362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
255462306a36Sopenharmony_ci							true, 8);
255562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
255662306a36Sopenharmony_ci							8;
255762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 13) {
255862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
255962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
256062306a36Sopenharmony_ci							true, 15);
256162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
256262306a36Sopenharmony_ci							15;
256362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
256462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
256562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
256662306a36Sopenharmony_ci							true, 15);
256762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
256862306a36Sopenharmony_ci							15;
256962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
257062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
257162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
257262306a36Sopenharmony_ci							true, 16);
257362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
257462306a36Sopenharmony_ci							16;
257562306a36Sopenharmony_ci					}
257662306a36Sopenharmony_ci				} else if (result == 1) {
257762306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 8) {
257862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
257962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
258062306a36Sopenharmony_ci							true, 7);
258162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
258262306a36Sopenharmony_ci							7;
258362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 7) {
258462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
258562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
258662306a36Sopenharmony_ci							true, 7);
258762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
258862306a36Sopenharmony_ci							7;
258962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 6) {
259062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
259162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
259262306a36Sopenharmony_ci							true, 7);
259362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
259462306a36Sopenharmony_ci							7;
259562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 16) {
259662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
259762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
259862306a36Sopenharmony_ci							true, 15);
259962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
260062306a36Sopenharmony_ci							15;
260162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 15) {
260262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
260362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
260462306a36Sopenharmony_ci							true, 15);
260562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
260662306a36Sopenharmony_ci							15;
260762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 14) {
260862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
260962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
261062306a36Sopenharmony_ci							true, 15);
261162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
261262306a36Sopenharmony_ci							15;
261362306a36Sopenharmony_ci					}
261462306a36Sopenharmony_ci				}
261562306a36Sopenharmony_ci			} else {
261662306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 5) {
261762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
261862306a36Sopenharmony_ci							     NORMAL_EXEC,
261962306a36Sopenharmony_ci							     true, 3);
262062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
262162306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 6) {
262262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
262362306a36Sopenharmony_ci							     NORMAL_EXEC,
262462306a36Sopenharmony_ci							     true, 3);
262562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
262662306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 7) {
262762306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
262862306a36Sopenharmony_ci							     NORMAL_EXEC,
262962306a36Sopenharmony_ci							     true, 3);
263062306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 3;
263162306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 8) {
263262306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
263362306a36Sopenharmony_ci							     NORMAL_EXEC,
263462306a36Sopenharmony_ci							     true, 4);
263562306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 4;
263662306a36Sopenharmony_ci				}
263762306a36Sopenharmony_ci				if (coex_dm->cur_ps_tdma == 13) {
263862306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
263962306a36Sopenharmony_ci							     NORMAL_EXEC,
264062306a36Sopenharmony_ci							     true, 11);
264162306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
264262306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 14) {
264362306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
264462306a36Sopenharmony_ci							     NORMAL_EXEC,
264562306a36Sopenharmony_ci							     true, 11);
264662306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
264762306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 15) {
264862306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
264962306a36Sopenharmony_ci							     NORMAL_EXEC,
265062306a36Sopenharmony_ci							     true, 11);
265162306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 11;
265262306a36Sopenharmony_ci				} else if (coex_dm->cur_ps_tdma == 16) {
265362306a36Sopenharmony_ci					btc8723b2ant_ps_tdma(btcoexist,
265462306a36Sopenharmony_ci							     NORMAL_EXEC,
265562306a36Sopenharmony_ci							     true, 12);
265662306a36Sopenharmony_ci					coex_dm->ps_tdma_du_adj_type = 12;
265762306a36Sopenharmony_ci				}
265862306a36Sopenharmony_ci				if (result == -1) {
265962306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 1) {
266062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
266162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
266262306a36Sopenharmony_ci							true, 3);
266362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
266462306a36Sopenharmony_ci							3;
266562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
266662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
266762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
266862306a36Sopenharmony_ci							true, 3);
266962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
267062306a36Sopenharmony_ci							3;
267162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
267262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
267362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
267462306a36Sopenharmony_ci							true, 4);
267562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
267662306a36Sopenharmony_ci							4;
267762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 9) {
267862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
267962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
268062306a36Sopenharmony_ci							true, 11);
268162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
268262306a36Sopenharmony_ci							11;
268362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
268462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
268562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
268662306a36Sopenharmony_ci							true, 11);
268762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
268862306a36Sopenharmony_ci							11;
268962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
269062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
269162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
269262306a36Sopenharmony_ci							true, 12);
269362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
269462306a36Sopenharmony_ci							12;
269562306a36Sopenharmony_ci					}
269662306a36Sopenharmony_ci				} else if (result == 1) {
269762306a36Sopenharmony_ci					if (coex_dm->cur_ps_tdma == 4) {
269862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
269962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
270062306a36Sopenharmony_ci							true, 3);
270162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
270262306a36Sopenharmony_ci							3;
270362306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 3) {
270462306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
270562306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
270662306a36Sopenharmony_ci							true, 3);
270762306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
270862306a36Sopenharmony_ci							3;
270962306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 2) {
271062306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
271162306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
271262306a36Sopenharmony_ci							true, 3);
271362306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
271462306a36Sopenharmony_ci							3;
271562306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 12) {
271662306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
271762306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
271862306a36Sopenharmony_ci							true, 11);
271962306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
272062306a36Sopenharmony_ci							11;
272162306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 11) {
272262306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
272362306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
272462306a36Sopenharmony_ci							true, 11);
272562306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
272662306a36Sopenharmony_ci							11;
272762306a36Sopenharmony_ci					} else if (coex_dm->cur_ps_tdma == 10) {
272862306a36Sopenharmony_ci						btc8723b2ant_ps_tdma(
272962306a36Sopenharmony_ci							btcoexist, NORMAL_EXEC,
273062306a36Sopenharmony_ci							true, 11);
273162306a36Sopenharmony_ci						coex_dm->ps_tdma_du_adj_type =
273262306a36Sopenharmony_ci							11;
273362306a36Sopenharmony_ci					}
273462306a36Sopenharmony_ci				}
273562306a36Sopenharmony_ci			}
273662306a36Sopenharmony_ci		}
273762306a36Sopenharmony_ci	}
273862306a36Sopenharmony_ci
273962306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
274062306a36Sopenharmony_ci		"[BTCoex], max Interval = %d\n", max_interval);
274162306a36Sopenharmony_ci
274262306a36Sopenharmony_ci	/* if current PsTdma not match with the recorded one (scan, dhcp, ...),
274362306a36Sopenharmony_ci	 * then we have to adjust it back to the previous recorded one.
274462306a36Sopenharmony_ci	 */
274562306a36Sopenharmony_ci	if (coex_dm->cur_ps_tdma != coex_dm->ps_tdma_du_adj_type) {
274662306a36Sopenharmony_ci		bool scan = false, link = false, roam = false;
274762306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
274862306a36Sopenharmony_ci			"[BTCoex], PsTdma type mismatch!!!, curPsTdma=%d, recordPsTdma=%d\n",
274962306a36Sopenharmony_ci			coex_dm->cur_ps_tdma, coex_dm->ps_tdma_du_adj_type);
275062306a36Sopenharmony_ci
275162306a36Sopenharmony_ci		btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
275262306a36Sopenharmony_ci		btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
275362306a36Sopenharmony_ci		btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
275462306a36Sopenharmony_ci
275562306a36Sopenharmony_ci		if (!scan && !link && !roam)
275662306a36Sopenharmony_ci			btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true,
275762306a36Sopenharmony_ci					     coex_dm->ps_tdma_du_adj_type);
275862306a36Sopenharmony_ci		else
275962306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
276062306a36Sopenharmony_ci				"[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n");
276162306a36Sopenharmony_ci	}
276262306a36Sopenharmony_ci}
276362306a36Sopenharmony_ci
276462306a36Sopenharmony_ci/* SCO only or SCO+PAN(HS) */
276562306a36Sopenharmony_cistatic void btc8723b2ant_action_sco(struct btc_coexist *btcoexist)
276662306a36Sopenharmony_ci{
276762306a36Sopenharmony_ci	u8 bt_rssi_state;
276862306a36Sopenharmony_ci	u32 wifi_bw;
276962306a36Sopenharmony_ci
277062306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
277162306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(
277262306a36Sopenharmony_ci		btcoexist, 2, BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
277362306a36Sopenharmony_ci					       coex_dm->switch_thres_offset,
277462306a36Sopenharmony_ci		0);
277562306a36Sopenharmony_ci
277662306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
277762306a36Sopenharmony_ci
277862306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
277962306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 4);
278062306a36Sopenharmony_ci
278162306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
278262306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
278362306a36Sopenharmony_ci	else
278462306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
278562306a36Sopenharmony_ci
278662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
278762306a36Sopenharmony_ci
278862306a36Sopenharmony_ci	if (BTC_WIFI_BW_LEGACY == wifi_bw)
278962306a36Sopenharmony_ci		/* for SCO quality at 11b/g mode */
279062306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);
279162306a36Sopenharmony_ci	else
279262306a36Sopenharmony_ci		/* for SCO quality & wifi performance balance at 11n mode */
279362306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 8);
279462306a36Sopenharmony_ci
279562306a36Sopenharmony_ci	/* for voice quality */
279662306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 0);
279762306a36Sopenharmony_ci
279862306a36Sopenharmony_ci	/* sw mechanism */
279962306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
280062306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, true,
280162306a36Sopenharmony_ci					  false, false);
280262306a36Sopenharmony_ci	} else {
280362306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, true,
280462306a36Sopenharmony_ci					  false, false);
280562306a36Sopenharmony_ci	}
280662306a36Sopenharmony_ci}
280762306a36Sopenharmony_ci
280862306a36Sopenharmony_cistatic void btc8723b2ant_action_hid(struct btc_coexist *btcoexist)
280962306a36Sopenharmony_ci{
281062306a36Sopenharmony_ci	u8 bt_rssi_state;
281162306a36Sopenharmony_ci	u32 wifi_bw;
281262306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
281362306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
281462306a36Sopenharmony_ci
281562306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
281662306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
281762306a36Sopenharmony_ci
281862306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
281962306a36Sopenharmony_ci
282062306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
282162306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
282262306a36Sopenharmony_ci
282362306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
282462306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
282562306a36Sopenharmony_ci	else
282662306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
282762306a36Sopenharmony_ci
282862306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
282962306a36Sopenharmony_ci
283062306a36Sopenharmony_ci	if (wifi_bw == BTC_WIFI_BW_LEGACY)
283162306a36Sopenharmony_ci		/* for HID at 11b/g mode */
283262306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
283362306a36Sopenharmony_ci	else
283462306a36Sopenharmony_ci		/* for HID quality & wifi performance balance at 11n mode */
283562306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 9);
283662306a36Sopenharmony_ci
283762306a36Sopenharmony_ci	btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
283862306a36Sopenharmony_ci
283962306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
284062306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
284162306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);
284262306a36Sopenharmony_ci	else
284362306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);
284462306a36Sopenharmony_ci
284562306a36Sopenharmony_ci	/* sw mechanism */
284662306a36Sopenharmony_ci	if (wifi_bw == BTC_WIFI_BW_HT40)
284762306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, true, false, false);
284862306a36Sopenharmony_ci	else
284962306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, true, false, false);
285062306a36Sopenharmony_ci}
285162306a36Sopenharmony_ci
285262306a36Sopenharmony_ci/* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
285362306a36Sopenharmony_cistatic void btc8723b2ant_action_a2dp(struct btc_coexist *btcoexist)
285462306a36Sopenharmony_ci{
285562306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
285662306a36Sopenharmony_ci	u32 wifi_bw;
285762306a36Sopenharmony_ci	u8 ap_num = 0;
285862306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
285962306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
286062306a36Sopenharmony_ci
286162306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
286262306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2, 40, 0);
286362306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
286462306a36Sopenharmony_ci
286562306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);
286662306a36Sopenharmony_ci
286762306a36Sopenharmony_ci	/* define the office environment */
286862306a36Sopenharmony_ci	/* driver don't know AP num in Linux, so we will never enter this if */
286962306a36Sopenharmony_ci	if (ap_num >= 10 && BTC_RSSI_HIGH(wifi_rssi_state1)) {
287062306a36Sopenharmony_ci		btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
287162306a36Sopenharmony_ci					  0x0);
287262306a36Sopenharmony_ci		btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
287362306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, false);
287462306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
287562306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
287662306a36Sopenharmony_ci
287762306a36Sopenharmony_ci		/* sw mechanism */
287862306a36Sopenharmony_ci		btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
287962306a36Sopenharmony_ci		if (BTC_WIFI_BW_HT40 == wifi_bw) {
288062306a36Sopenharmony_ci			btc8723b2ant_sw_mechanism(btcoexist, true, false,
288162306a36Sopenharmony_ci						  false, false);
288262306a36Sopenharmony_ci		} else {
288362306a36Sopenharmony_ci			btc8723b2ant_sw_mechanism(btcoexist, false, false,
288462306a36Sopenharmony_ci						  false, false);
288562306a36Sopenharmony_ci		}
288662306a36Sopenharmony_ci		return;
288762306a36Sopenharmony_ci	}
288862306a36Sopenharmony_ci
288962306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
289062306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
289162306a36Sopenharmony_ci
289262306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
289362306a36Sopenharmony_ci
289462306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
289562306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
289662306a36Sopenharmony_ci	else
289762306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
289862306a36Sopenharmony_ci
289962306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
290062306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
290162306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
290262306a36Sopenharmony_ci					      0x0, 0x0);
290362306a36Sopenharmony_ci	} else {
290462306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 13);
290562306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
290662306a36Sopenharmony_ci					      0x4);
290762306a36Sopenharmony_ci	}
290862306a36Sopenharmony_ci
290962306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
291062306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
291162306a36Sopenharmony_ci		btc8723b2ant_tdma_duration_adjust(btcoexist, false,
291262306a36Sopenharmony_ci						  false, 1);
291362306a36Sopenharmony_ci	else
291462306a36Sopenharmony_ci		btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 1);
291562306a36Sopenharmony_ci
291662306a36Sopenharmony_ci	/* sw mechanism */
291762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
291862306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
291962306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, false,
292062306a36Sopenharmony_ci					  false, false);
292162306a36Sopenharmony_ci	} else {
292262306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false,
292362306a36Sopenharmony_ci					  false, false);
292462306a36Sopenharmony_ci	}
292562306a36Sopenharmony_ci}
292662306a36Sopenharmony_ci
292762306a36Sopenharmony_cistatic void btc8723b2ant_action_a2dp_pan_hs(struct btc_coexist *btcoexist)
292862306a36Sopenharmony_ci{
292962306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
293062306a36Sopenharmony_ci	u32 wifi_bw;
293162306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
293262306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
293362306a36Sopenharmony_ci
293462306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
293562306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
293662306a36Sopenharmony_ci							tmp, 0);
293762306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
293862306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
293962306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
294062306a36Sopenharmony_ci
294162306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
294262306a36Sopenharmony_ci
294362306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
294462306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
294562306a36Sopenharmony_ci
294662306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
294762306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
294862306a36Sopenharmony_ci	else
294962306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
295062306a36Sopenharmony_ci
295162306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
295262306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
295362306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
295462306a36Sopenharmony_ci					      0x0, 0x0);
295562306a36Sopenharmony_ci	} else {
295662306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 13);
295762306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
295862306a36Sopenharmony_ci					      0x4);
295962306a36Sopenharmony_ci	}
296062306a36Sopenharmony_ci
296162306a36Sopenharmony_ci	btc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 2);
296262306a36Sopenharmony_ci
296362306a36Sopenharmony_ci	/* sw mechanism */
296462306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
296562306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
296662306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, false,
296762306a36Sopenharmony_ci					  false, false);
296862306a36Sopenharmony_ci	} else {
296962306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false,
297062306a36Sopenharmony_ci					  false, false);
297162306a36Sopenharmony_ci	}
297262306a36Sopenharmony_ci}
297362306a36Sopenharmony_ci
297462306a36Sopenharmony_cistatic void btc8723b2ant_action_pan_edr(struct btc_coexist *btcoexist)
297562306a36Sopenharmony_ci{
297662306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
297762306a36Sopenharmony_ci	u32 wifi_bw;
297862306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
297962306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
298062306a36Sopenharmony_ci
298162306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
298262306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
298362306a36Sopenharmony_ci							tmp, 0);
298462306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
298562306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
298662306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
298762306a36Sopenharmony_ci
298862306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
298962306a36Sopenharmony_ci
299062306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
299162306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
299262306a36Sopenharmony_ci
299362306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
299462306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
299562306a36Sopenharmony_ci	else
299662306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
299762306a36Sopenharmony_ci
299862306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
299962306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 10);
300062306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
300162306a36Sopenharmony_ci					      0x0, 0x0);
300262306a36Sopenharmony_ci	} else {
300362306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 13);
300462306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
300562306a36Sopenharmony_ci					      0x4);
300662306a36Sopenharmony_ci	}
300762306a36Sopenharmony_ci
300862306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
300962306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))
301062306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 1);
301162306a36Sopenharmony_ci	else
301262306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);
301362306a36Sopenharmony_ci
301462306a36Sopenharmony_ci	/* sw mechanism */
301562306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
301662306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
301762306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, false,
301862306a36Sopenharmony_ci					  false, false);
301962306a36Sopenharmony_ci	} else {
302062306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false,
302162306a36Sopenharmony_ci					  false, false);
302262306a36Sopenharmony_ci	}
302362306a36Sopenharmony_ci}
302462306a36Sopenharmony_ci
302562306a36Sopenharmony_ci/* PAN(HS) only */
302662306a36Sopenharmony_cistatic void btc8723b2ant_action_pan_hs(struct btc_coexist *btcoexist)
302762306a36Sopenharmony_ci{
302862306a36Sopenharmony_ci	u8 bt_rssi_state;
302962306a36Sopenharmony_ci	u32 wifi_bw;
303062306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
303162306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
303262306a36Sopenharmony_ci
303362306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
303462306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
303562306a36Sopenharmony_ci							tmp, 0);
303662306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
303762306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
303862306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
303962306a36Sopenharmony_ci
304062306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
304162306a36Sopenharmony_ci
304262306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
304362306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
304462306a36Sopenharmony_ci
304562306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
304662306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
304762306a36Sopenharmony_ci	else
304862306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
304962306a36Sopenharmony_ci
305062306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
305162306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
305262306a36Sopenharmony_ci
305362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
305462306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
305562306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, false,
305662306a36Sopenharmony_ci					  false, false);
305762306a36Sopenharmony_ci	} else {
305862306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false,
305962306a36Sopenharmony_ci					  false, false);
306062306a36Sopenharmony_ci	}
306162306a36Sopenharmony_ci}
306262306a36Sopenharmony_ci
306362306a36Sopenharmony_ci/* PAN(EDR) + A2DP */
306462306a36Sopenharmony_cistatic void btc8723b2ant_action_pan_edr_a2dp(struct btc_coexist *btcoexist)
306562306a36Sopenharmony_ci{
306662306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
306762306a36Sopenharmony_ci	u32 wifi_bw;
306862306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
306962306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
307062306a36Sopenharmony_ci
307162306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
307262306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
307362306a36Sopenharmony_ci							tmp, 0);
307462306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
307562306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
307662306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
307762306a36Sopenharmony_ci
307862306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
307962306a36Sopenharmony_ci
308062306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
308162306a36Sopenharmony_ci
308262306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
308362306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
308462306a36Sopenharmony_ci	else
308562306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
308662306a36Sopenharmony_ci
308762306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state))
308862306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
308962306a36Sopenharmony_ci					      0x0, 0x0);
309062306a36Sopenharmony_ci	else
309162306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
309262306a36Sopenharmony_ci					      0x4);
309362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
309462306a36Sopenharmony_ci
309562306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
309662306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
309762306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 12);
309862306a36Sopenharmony_ci		if (BTC_WIFI_BW_HT40 == wifi_bw)
309962306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, false,
310062306a36Sopenharmony_ci							  true, 3);
310162306a36Sopenharmony_ci		else
310262306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, false,
310362306a36Sopenharmony_ci							  false, 3);
310462306a36Sopenharmony_ci	} else {
310562306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
310662306a36Sopenharmony_ci		btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);
310762306a36Sopenharmony_ci	}
310862306a36Sopenharmony_ci
310962306a36Sopenharmony_ci	/* sw mechanism	*/
311062306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
311162306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, false,
311262306a36Sopenharmony_ci					  false, false);
311362306a36Sopenharmony_ci	} else {
311462306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, false,
311562306a36Sopenharmony_ci					  false, false);
311662306a36Sopenharmony_ci	}
311762306a36Sopenharmony_ci}
311862306a36Sopenharmony_ci
311962306a36Sopenharmony_cistatic void btc8723b2ant_action_pan_edr_hid(struct btc_coexist *btcoexist)
312062306a36Sopenharmony_ci{
312162306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
312262306a36Sopenharmony_ci	u32 wifi_bw;
312362306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
312462306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
312562306a36Sopenharmony_ci
312662306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
312762306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
312862306a36Sopenharmony_ci							tmp, 0);
312962306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
313062306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
313162306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
313262306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
313362306a36Sopenharmony_ci
313462306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
313562306a36Sopenharmony_ci
313662306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
313762306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
313862306a36Sopenharmony_ci	else
313962306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
314062306a36Sopenharmony_ci
314162306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
314262306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
314362306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
314462306a36Sopenharmony_ci					      0x0, 0x0);
314562306a36Sopenharmony_ci	} else {
314662306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 14);
314762306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
314862306a36Sopenharmony_ci					      0x4);
314962306a36Sopenharmony_ci	}
315062306a36Sopenharmony_ci
315162306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
315262306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
315362306a36Sopenharmony_ci		if (BTC_WIFI_BW_HT40 == wifi_bw) {
315462306a36Sopenharmony_ci			btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
315562306a36Sopenharmony_ci						      3);
315662306a36Sopenharmony_ci			btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
315762306a36Sopenharmony_ci						  0xfffff, 0x780);
315862306a36Sopenharmony_ci		} else {
315962306a36Sopenharmony_ci			btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,
316062306a36Sopenharmony_ci						      6);
316162306a36Sopenharmony_ci			btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,
316262306a36Sopenharmony_ci						  0xfffff, 0x0);
316362306a36Sopenharmony_ci		}
316462306a36Sopenharmony_ci		btc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2);
316562306a36Sopenharmony_ci	} else {
316662306a36Sopenharmony_ci		btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
316762306a36Sopenharmony_ci		btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,
316862306a36Sopenharmony_ci					  0x0);
316962306a36Sopenharmony_ci		btc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2);
317062306a36Sopenharmony_ci	}
317162306a36Sopenharmony_ci
317262306a36Sopenharmony_ci	/* sw mechanism */
317362306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
317462306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, true,
317562306a36Sopenharmony_ci					  false, false);
317662306a36Sopenharmony_ci	} else {
317762306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, true,
317862306a36Sopenharmony_ci					  false, false);
317962306a36Sopenharmony_ci	}
318062306a36Sopenharmony_ci}
318162306a36Sopenharmony_ci
318262306a36Sopenharmony_ci/* HID + A2DP + PAN(EDR) */
318362306a36Sopenharmony_cistatic void btc8723b2ant_action_hid_a2dp_pan_edr(struct btc_coexist *btcoexist)
318462306a36Sopenharmony_ci{
318562306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
318662306a36Sopenharmony_ci	u32 wifi_bw;
318762306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
318862306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
318962306a36Sopenharmony_ci
319062306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
319162306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
319262306a36Sopenharmony_ci							tmp, 0);
319362306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
319462306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
319562306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 2, tmp, 0);
319662306a36Sopenharmony_ci
319762306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
319862306a36Sopenharmony_ci
319962306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);
320062306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
320162306a36Sopenharmony_ci
320262306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state))
320362306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
320462306a36Sopenharmony_ci	else
320562306a36Sopenharmony_ci		btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
320662306a36Sopenharmony_ci
320762306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
320862306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
320962306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
321062306a36Sopenharmony_ci					      0x0, 0x0);
321162306a36Sopenharmony_ci	} else {
321262306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 14);
321362306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
321462306a36Sopenharmony_ci					      0x4);
321562306a36Sopenharmony_ci	}
321662306a36Sopenharmony_ci
321762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
321862306a36Sopenharmony_ci
321962306a36Sopenharmony_ci
322062306a36Sopenharmony_ci	if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
322162306a36Sopenharmony_ci	    (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {
322262306a36Sopenharmony_ci		if (BTC_WIFI_BW_HT40 == wifi_bw)
322362306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
322462306a36Sopenharmony_ci							  true, 2);
322562306a36Sopenharmony_ci		else
322662306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
322762306a36Sopenharmony_ci							  false, 3);
322862306a36Sopenharmony_ci	} else {
322962306a36Sopenharmony_ci		btc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 3);
323062306a36Sopenharmony_ci	}
323162306a36Sopenharmony_ci
323262306a36Sopenharmony_ci	/* sw mechanism */
323362306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
323462306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, true,
323562306a36Sopenharmony_ci					  false, false);
323662306a36Sopenharmony_ci	} else {
323762306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, true,
323862306a36Sopenharmony_ci					  false, false);
323962306a36Sopenharmony_ci	}
324062306a36Sopenharmony_ci}
324162306a36Sopenharmony_ci
324262306a36Sopenharmony_cistatic void btc8723b2ant_action_hid_a2dp(struct btc_coexist *btcoexist)
324362306a36Sopenharmony_ci{
324462306a36Sopenharmony_ci	u8 wifi_rssi_state1, bt_rssi_state;
324562306a36Sopenharmony_ci	u32 wifi_bw;
324662306a36Sopenharmony_ci	u8 ap_num = 0;
324762306a36Sopenharmony_ci	u8 tmp = BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -
324862306a36Sopenharmony_ci			coex_dm->switch_thres_offset;
324962306a36Sopenharmony_ci
325062306a36Sopenharmony_ci	btc8723b2ant_wifi_rssi_state(btcoexist, 0, 2, 15, 0);
325162306a36Sopenharmony_ci	wifi_rssi_state1 = btc8723b2ant_wifi_rssi_state(btcoexist, 1, 2,
325262306a36Sopenharmony_ci							tmp, 0);
325362306a36Sopenharmony_ci	tmp = BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -
325462306a36Sopenharmony_ci			 coex_dm->switch_thres_offset;
325562306a36Sopenharmony_ci	bt_rssi_state = btc8723b2ant_bt_rssi_state(btcoexist, 3, tmp, 37);
325662306a36Sopenharmony_ci
325762306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
325862306a36Sopenharmony_ci
325962306a36Sopenharmony_ci	btc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, true, 0x5);
326062306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
326162306a36Sopenharmony_ci
326262306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
326362306a36Sopenharmony_ci
326462306a36Sopenharmony_ci	if (wifi_bw == BTC_WIFI_BW_LEGACY) {
326562306a36Sopenharmony_ci		if (BTC_RSSI_HIGH(bt_rssi_state))
326662306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
326762306a36Sopenharmony_ci		else if (BTC_RSSI_MEDIUM(bt_rssi_state))
326862306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
326962306a36Sopenharmony_ci		else
327062306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
327162306a36Sopenharmony_ci	} else {
327262306a36Sopenharmony_ci		/* only 802.11N mode we have to dec bt power to 4 degree */
327362306a36Sopenharmony_ci		if (BTC_RSSI_HIGH(bt_rssi_state)) {
327462306a36Sopenharmony_ci			/* need to check ap Number of Not */
327562306a36Sopenharmony_ci			if (ap_num < 10)
327662306a36Sopenharmony_ci				btc8723b2ant_dec_bt_pwr(btcoexist,
327762306a36Sopenharmony_ci							NORMAL_EXEC, 4);
327862306a36Sopenharmony_ci			else
327962306a36Sopenharmony_ci				btc8723b2ant_dec_bt_pwr(btcoexist,
328062306a36Sopenharmony_ci							NORMAL_EXEC, 2);
328162306a36Sopenharmony_ci		} else if (BTC_RSSI_MEDIUM(bt_rssi_state)) {
328262306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);
328362306a36Sopenharmony_ci		} else {
328462306a36Sopenharmony_ci			btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
328562306a36Sopenharmony_ci		}
328662306a36Sopenharmony_ci	}
328762306a36Sopenharmony_ci
328862306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {
328962306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);
329062306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,
329162306a36Sopenharmony_ci					      0x0, 0x0);
329262306a36Sopenharmony_ci	} else {
329362306a36Sopenharmony_ci		btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 14);
329462306a36Sopenharmony_ci		btc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,
329562306a36Sopenharmony_ci					      0x4);
329662306a36Sopenharmony_ci	}
329762306a36Sopenharmony_ci
329862306a36Sopenharmony_ci	if (BTC_RSSI_HIGH(bt_rssi_state)) {
329962306a36Sopenharmony_ci		if (ap_num < 10)
330062306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
330162306a36Sopenharmony_ci							  false, 1);
330262306a36Sopenharmony_ci		else
330362306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
330462306a36Sopenharmony_ci							  false, 3);
330562306a36Sopenharmony_ci	} else {
330662306a36Sopenharmony_ci		btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 18);
330762306a36Sopenharmony_ci		btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38);
330862306a36Sopenharmony_ci		btcoexist->btc_write_2byte(btcoexist, 0x42a, 0x0808);
330962306a36Sopenharmony_ci		btcoexist->btc_write_4byte(btcoexist, 0x430, 0x0);
331062306a36Sopenharmony_ci		btcoexist->btc_write_4byte(btcoexist, 0x434, 0x01010000);
331162306a36Sopenharmony_ci
331262306a36Sopenharmony_ci		if (ap_num < 10)
331362306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
331462306a36Sopenharmony_ci							  true, 1);
331562306a36Sopenharmony_ci		else
331662306a36Sopenharmony_ci			btc8723b2ant_tdma_duration_adjust(btcoexist, true,
331762306a36Sopenharmony_ci							  true, 3);
331862306a36Sopenharmony_ci	}
331962306a36Sopenharmony_ci
332062306a36Sopenharmony_ci	/* sw mechanism */
332162306a36Sopenharmony_ci	if (BTC_WIFI_BW_HT40 == wifi_bw) {
332262306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, true, true,
332362306a36Sopenharmony_ci					  false, false);
332462306a36Sopenharmony_ci	} else {
332562306a36Sopenharmony_ci		btc8723b2ant_sw_mechanism(btcoexist, false, true,
332662306a36Sopenharmony_ci					  false, false);
332762306a36Sopenharmony_ci	}
332862306a36Sopenharmony_ci}
332962306a36Sopenharmony_ci
333062306a36Sopenharmony_cistatic void btc8723b2ant_action_wifi_multi_port(struct btc_coexist *btcoexist)
333162306a36Sopenharmony_ci{
333262306a36Sopenharmony_ci	btc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);
333362306a36Sopenharmony_ci	btc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);
333462306a36Sopenharmony_ci
333562306a36Sopenharmony_ci	/* sw all off */
333662306a36Sopenharmony_ci	btc8723b2ant_sw_mechanism(btcoexist, false, false, false, false);
333762306a36Sopenharmony_ci
333862306a36Sopenharmony_ci	/* hw all off */
333962306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);
334062306a36Sopenharmony_ci
334162306a36Sopenharmony_ci	btc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
334262306a36Sopenharmony_ci	btc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);
334362306a36Sopenharmony_ci}
334462306a36Sopenharmony_ci
334562306a36Sopenharmony_cistatic void btc8723b2ant_run_coexist_mechanism(struct btc_coexist *btcoexist)
334662306a36Sopenharmony_ci{
334762306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
334862306a36Sopenharmony_ci	u8 algorithm = 0;
334962306a36Sopenharmony_ci	u32 num_of_wifi_link = 0;
335062306a36Sopenharmony_ci	u32 wifi_link_status = 0;
335162306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
335262306a36Sopenharmony_ci	bool miracast_plus_bt = false;
335362306a36Sopenharmony_ci	bool scan = false, link = false, roam = false;
335462306a36Sopenharmony_ci
335562306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
335662306a36Sopenharmony_ci		"[BTCoex], RunCoexistMechanism()===>\n");
335762306a36Sopenharmony_ci
335862306a36Sopenharmony_ci	if (btcoexist->manual_control) {
335962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
336062306a36Sopenharmony_ci			"[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n");
336162306a36Sopenharmony_ci		return;
336262306a36Sopenharmony_ci	}
336362306a36Sopenharmony_ci
336462306a36Sopenharmony_ci	if (coex_sta->under_ips) {
336562306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
336662306a36Sopenharmony_ci			"[BTCoex], wifi is under IPS !!!\n");
336762306a36Sopenharmony_ci		return;
336862306a36Sopenharmony_ci	}
336962306a36Sopenharmony_ci
337062306a36Sopenharmony_ci	algorithm = btc8723b2ant_action_algorithm(btcoexist);
337162306a36Sopenharmony_ci	if (coex_sta->c2h_bt_inquiry_page &&
337262306a36Sopenharmony_ci	    (BT_8723B_2ANT_COEX_ALGO_PANHS != algorithm)) {
337362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
337462306a36Sopenharmony_ci			"[BTCoex], BT is under inquiry/page scan !!\n");
337562306a36Sopenharmony_ci		btc8723b2ant_action_bt_inquiry(btcoexist);
337662306a36Sopenharmony_ci		return;
337762306a36Sopenharmony_ci	}
337862306a36Sopenharmony_ci
337962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
338062306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
338162306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
338262306a36Sopenharmony_ci
338362306a36Sopenharmony_ci	if (scan || link || roam) {
338462306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
338562306a36Sopenharmony_ci			"[BTCoex], WiFi is under Link Process !!\n");
338662306a36Sopenharmony_ci		btc8723b2ant_action_wifi_link_process(btcoexist);
338762306a36Sopenharmony_ci		return;
338862306a36Sopenharmony_ci	}
338962306a36Sopenharmony_ci
339062306a36Sopenharmony_ci	/* for P2P */
339162306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_LINK_STATUS,
339262306a36Sopenharmony_ci			   &wifi_link_status);
339362306a36Sopenharmony_ci	num_of_wifi_link = wifi_link_status >> 16;
339462306a36Sopenharmony_ci
339562306a36Sopenharmony_ci	if ((num_of_wifi_link >= 2) ||
339662306a36Sopenharmony_ci	    (wifi_link_status & WIFI_P2P_GO_CONNECTED)) {
339762306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
339862306a36Sopenharmony_ci			"############# [BTCoex],  Multi-Port num_of_wifi_link = %d, wifi_link_status = 0x%x\n",
339962306a36Sopenharmony_ci			num_of_wifi_link, wifi_link_status);
340062306a36Sopenharmony_ci
340162306a36Sopenharmony_ci		if (bt_link_info->bt_link_exist)
340262306a36Sopenharmony_ci			miracast_plus_bt = true;
340362306a36Sopenharmony_ci		else
340462306a36Sopenharmony_ci			miracast_plus_bt = false;
340562306a36Sopenharmony_ci
340662306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_BL_MIRACAST_PLUS_BT,
340762306a36Sopenharmony_ci				   &miracast_plus_bt);
340862306a36Sopenharmony_ci		btc8723b2ant_action_wifi_multi_port(btcoexist);
340962306a36Sopenharmony_ci
341062306a36Sopenharmony_ci		return;
341162306a36Sopenharmony_ci	}
341262306a36Sopenharmony_ci
341362306a36Sopenharmony_ci	miracast_plus_bt = false;
341462306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_BL_MIRACAST_PLUS_BT,
341562306a36Sopenharmony_ci			   &miracast_plus_bt);
341662306a36Sopenharmony_ci
341762306a36Sopenharmony_ci	coex_dm->cur_algorithm = algorithm;
341862306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
341962306a36Sopenharmony_ci		"[BTCoex], Algorithm = %d\n",
342062306a36Sopenharmony_ci		coex_dm->cur_algorithm);
342162306a36Sopenharmony_ci
342262306a36Sopenharmony_ci	if (btc8723b2ant_is_common_action(btcoexist)) {
342362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
342462306a36Sopenharmony_ci			"[BTCoex], Action 2-Ant common\n");
342562306a36Sopenharmony_ci		coex_dm->auto_tdma_adjust = false;
342662306a36Sopenharmony_ci	} else {
342762306a36Sopenharmony_ci		if (coex_dm->cur_algorithm != coex_dm->pre_algorithm) {
342862306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
342962306a36Sopenharmony_ci				"[BTCoex], preAlgorithm=%d, curAlgorithm=%d\n",
343062306a36Sopenharmony_ci				coex_dm->pre_algorithm,
343162306a36Sopenharmony_ci				coex_dm->cur_algorithm);
343262306a36Sopenharmony_ci			coex_dm->auto_tdma_adjust = false;
343362306a36Sopenharmony_ci		}
343462306a36Sopenharmony_ci		switch (coex_dm->cur_algorithm) {
343562306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_SCO:
343662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
343762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = SCO\n");
343862306a36Sopenharmony_ci			btc8723b2ant_action_sco(btcoexist);
343962306a36Sopenharmony_ci			break;
344062306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_HID:
344162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
344262306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = HID\n");
344362306a36Sopenharmony_ci			btc8723b2ant_action_hid(btcoexist);
344462306a36Sopenharmony_ci			break;
344562306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_A2DP:
344662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
344762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = A2DP\n");
344862306a36Sopenharmony_ci			btc8723b2ant_action_a2dp(btcoexist);
344962306a36Sopenharmony_ci			break;
345062306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:
345162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
345262306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS)\n");
345362306a36Sopenharmony_ci			btc8723b2ant_action_a2dp_pan_hs(btcoexist);
345462306a36Sopenharmony_ci			break;
345562306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_PANEDR:
345662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
345762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = PAN(EDR)\n");
345862306a36Sopenharmony_ci			btc8723b2ant_action_pan_edr(btcoexist);
345962306a36Sopenharmony_ci			break;
346062306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_PANHS:
346162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
346262306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = HS mode\n");
346362306a36Sopenharmony_ci			btc8723b2ant_action_pan_hs(btcoexist);
346462306a36Sopenharmony_ci			break;
346562306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:
346662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
346762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = PAN+A2DP\n");
346862306a36Sopenharmony_ci			btc8723b2ant_action_pan_edr_a2dp(btcoexist);
346962306a36Sopenharmony_ci			break;
347062306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:
347162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
347262306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID\n");
347362306a36Sopenharmony_ci			btc8723b2ant_action_pan_edr_hid(btcoexist);
347462306a36Sopenharmony_ci			break;
347562306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
347662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
347762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN\n");
347862306a36Sopenharmony_ci			btc8723b2ant_action_hid_a2dp_pan_edr(btcoexist);
347962306a36Sopenharmony_ci			break;
348062306a36Sopenharmony_ci		case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:
348162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
348262306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = HID+A2DP\n");
348362306a36Sopenharmony_ci			btc8723b2ant_action_hid_a2dp(btcoexist);
348462306a36Sopenharmony_ci			break;
348562306a36Sopenharmony_ci		default:
348662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
348762306a36Sopenharmony_ci				"[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n");
348862306a36Sopenharmony_ci			btc8723b2ant_coex_alloff(btcoexist);
348962306a36Sopenharmony_ci			break;
349062306a36Sopenharmony_ci		}
349162306a36Sopenharmony_ci		coex_dm->pre_algorithm = coex_dm->cur_algorithm;
349262306a36Sopenharmony_ci	}
349362306a36Sopenharmony_ci}
349462306a36Sopenharmony_ci
349562306a36Sopenharmony_cistatic void btc8723b2ant_wifioff_hwcfg(struct btc_coexist *btcoexist)
349662306a36Sopenharmony_ci{
349762306a36Sopenharmony_ci	bool is_in_mp_mode = false;
349862306a36Sopenharmony_ci	u8 h2c_parameter[2] = {0};
349962306a36Sopenharmony_ci	u32 fw_ver = 0;
350062306a36Sopenharmony_ci
350162306a36Sopenharmony_ci	/* set wlan_act to low */
350262306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x76e, 0x4);
350362306a36Sopenharmony_ci
350462306a36Sopenharmony_ci	/* WiFi standby while GNT_BT 0 -> 1 */
350562306a36Sopenharmony_ci	btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);
350662306a36Sopenharmony_ci
350762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
350862306a36Sopenharmony_ci	if (fw_ver >= 0x180000) {
350962306a36Sopenharmony_ci		/* Use H2C to set GNT_BT to HIGH */
351062306a36Sopenharmony_ci		h2c_parameter[0] = 1;
351162306a36Sopenharmony_ci		btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1, h2c_parameter);
351262306a36Sopenharmony_ci	} else {
351362306a36Sopenharmony_ci		btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18);
351462306a36Sopenharmony_ci	}
351562306a36Sopenharmony_ci
351662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE,
351762306a36Sopenharmony_ci			   &is_in_mp_mode);
351862306a36Sopenharmony_ci	if (!is_in_mp_mode)
351962306a36Sopenharmony_ci		/* BT select s0/s1 is controlled by BT */
352062306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x0);
352162306a36Sopenharmony_ci	else
352262306a36Sopenharmony_ci		/* BT select s0/s1 is controlled by WiFi */
352362306a36Sopenharmony_ci		btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x1);
352462306a36Sopenharmony_ci}
352562306a36Sopenharmony_ci
352662306a36Sopenharmony_ci/*********************************************************************
352762306a36Sopenharmony_ci *  extern function start with ex_btc8723b2ant_
352862306a36Sopenharmony_ci *********************************************************************/
352962306a36Sopenharmony_civoid ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist)
353062306a36Sopenharmony_ci{
353162306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
353262306a36Sopenharmony_ci	u8 u8tmp = 0;
353362306a36Sopenharmony_ci
353462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
353562306a36Sopenharmony_ci		"[BTCoex], 2Ant Init HW Config!!\n");
353662306a36Sopenharmony_ci	coex_dm->bt_rf0x1e_backup =
353762306a36Sopenharmony_ci		btcoexist->btc_get_rf_reg(btcoexist, BTC_RF_A, 0x1e, 0xfffff);
353862306a36Sopenharmony_ci
353962306a36Sopenharmony_ci	/* 0x790[5:0] = 0x5 */
354062306a36Sopenharmony_ci	u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x790);
354162306a36Sopenharmony_ci	u8tmp &= 0xc0;
354262306a36Sopenharmony_ci	u8tmp |= 0x5;
354362306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);
354462306a36Sopenharmony_ci
354562306a36Sopenharmony_ci	/* Antenna config */
354662306a36Sopenharmony_ci	btc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN,
354762306a36Sopenharmony_ci				  true, false);
354862306a36Sopenharmony_ci	coex_sta->dis_ver_info_cnt = 0;
354962306a36Sopenharmony_ci
355062306a36Sopenharmony_ci	/* PTA parameter */
355162306a36Sopenharmony_ci	btc8723b2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);
355262306a36Sopenharmony_ci
355362306a36Sopenharmony_ci	/* Enable counter statistics */
355462306a36Sopenharmony_ci	/* 0x76e[3] = 1, WLAN_ACT controlled by PTA */
355562306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x76e, 0x4);
355662306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);
355762306a36Sopenharmony_ci	btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);
355862306a36Sopenharmony_ci	btcoexist->auto_report_2ant = true;
355962306a36Sopenharmony_ci}
356062306a36Sopenharmony_ci
356162306a36Sopenharmony_civoid ex_btc8723b2ant_power_on_setting(struct btc_coexist *btcoexist)
356262306a36Sopenharmony_ci{
356362306a36Sopenharmony_ci	struct btc_board_info *board_info = &btcoexist->board_info;
356462306a36Sopenharmony_ci	u16 u16tmp = 0x0;
356562306a36Sopenharmony_ci	u32 value = 0;
356662306a36Sopenharmony_ci
356762306a36Sopenharmony_ci	btcoexist->btc_write_1byte(btcoexist, 0x67, 0x20);
356862306a36Sopenharmony_ci
356962306a36Sopenharmony_ci	/* enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly */
357062306a36Sopenharmony_ci	u16tmp = btcoexist->btc_read_2byte(btcoexist, 0x2);
357162306a36Sopenharmony_ci	btcoexist->btc_write_2byte(btcoexist, 0x2, u16tmp | BIT0 | BIT1);
357262306a36Sopenharmony_ci
357362306a36Sopenharmony_ci	btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);
357462306a36Sopenharmony_ci
357562306a36Sopenharmony_ci	if (btcoexist->chip_interface == BTC_INTF_USB) {
357662306a36Sopenharmony_ci		/* fixed at S0 for USB interface */
357762306a36Sopenharmony_ci		board_info->btdm_ant_pos = BTC_ANTENNA_AT_AUX_PORT;
357862306a36Sopenharmony_ci	} else {
357962306a36Sopenharmony_ci		/* for PCIE and SDIO interface, we check efuse 0xc3[6] */
358062306a36Sopenharmony_ci		if (board_info->single_ant_path == 0) {
358162306a36Sopenharmony_ci			/* set to S1 */
358262306a36Sopenharmony_ci			board_info->btdm_ant_pos = BTC_ANTENNA_AT_MAIN_PORT;
358362306a36Sopenharmony_ci		} else if (board_info->single_ant_path == 1) {
358462306a36Sopenharmony_ci			/* set to S0 */
358562306a36Sopenharmony_ci			board_info->btdm_ant_pos = BTC_ANTENNA_AT_AUX_PORT;
358662306a36Sopenharmony_ci		}
358762306a36Sopenharmony_ci		btcoexist->btc_set(btcoexist, BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,
358862306a36Sopenharmony_ci				   &value);
358962306a36Sopenharmony_ci	}
359062306a36Sopenharmony_ci}
359162306a36Sopenharmony_ci
359262306a36Sopenharmony_civoid ex_btc8723b2ant_pre_load_firmware(struct btc_coexist *btcoexist)
359362306a36Sopenharmony_ci{
359462306a36Sopenharmony_ci	struct btc_board_info *board_info = &btcoexist->board_info;
359562306a36Sopenharmony_ci	u8 u8tmp = 0x4; /* Set BIT2 by default since it's 2ant case */
359662306a36Sopenharmony_ci
359762306a36Sopenharmony_ci	/**
359862306a36Sopenharmony_ci	 * S0 or S1 setting and Local register setting(By this fw can get
359962306a36Sopenharmony_ci	 * ant number, S0/S1, ... info)
360062306a36Sopenharmony_ci	 *
360162306a36Sopenharmony_ci	 * Local setting bit define
360262306a36Sopenharmony_ci	 *	BIT0: "0" : no antenna inverse; "1" : antenna inverse
360362306a36Sopenharmony_ci	 *	BIT1: "0" : internal switch; "1" : external switch
360462306a36Sopenharmony_ci	 *	BIT2: "0" : one antenna; "1" : two antennas
360562306a36Sopenharmony_ci	 *
360662306a36Sopenharmony_ci	 * NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and
360762306a36Sopenharmony_ci	 * BIT2 = 0
360862306a36Sopenharmony_ci	 */
360962306a36Sopenharmony_ci	if (btcoexist->chip_interface == BTC_INTF_USB) {
361062306a36Sopenharmony_ci		/* fixed at S0 for USB interface */
361162306a36Sopenharmony_ci		u8tmp |= 0x1; /* antenna inverse */
361262306a36Sopenharmony_ci		btcoexist->btc_write_local_reg_1byte(btcoexist, 0xfe08, u8tmp);
361362306a36Sopenharmony_ci	} else {
361462306a36Sopenharmony_ci		/* for PCIE and SDIO interface, we check efuse 0xc3[6] */
361562306a36Sopenharmony_ci		if (board_info->single_ant_path == 0) {
361662306a36Sopenharmony_ci		} else if (board_info->single_ant_path == 1) {
361762306a36Sopenharmony_ci			/* set to S0 */
361862306a36Sopenharmony_ci			u8tmp |= 0x1; /* antenna inverse */
361962306a36Sopenharmony_ci		}
362062306a36Sopenharmony_ci
362162306a36Sopenharmony_ci		if (btcoexist->chip_interface == BTC_INTF_PCI)
362262306a36Sopenharmony_ci			btcoexist->btc_write_local_reg_1byte(btcoexist, 0x384,
362362306a36Sopenharmony_ci							     u8tmp);
362462306a36Sopenharmony_ci		else if (btcoexist->chip_interface == BTC_INTF_SDIO)
362562306a36Sopenharmony_ci			btcoexist->btc_write_local_reg_1byte(btcoexist, 0x60,
362662306a36Sopenharmony_ci							     u8tmp);
362762306a36Sopenharmony_ci	}
362862306a36Sopenharmony_ci}
362962306a36Sopenharmony_ci
363062306a36Sopenharmony_civoid ex_btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist)
363162306a36Sopenharmony_ci{
363262306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
363362306a36Sopenharmony_ci
363462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
363562306a36Sopenharmony_ci		"[BTCoex], Coex Mechanism Init!!\n");
363662306a36Sopenharmony_ci	btc8723b2ant_init_coex_dm(btcoexist);
363762306a36Sopenharmony_ci}
363862306a36Sopenharmony_ci
363962306a36Sopenharmony_civoid ex_btc8723b2ant_display_coex_info(struct btc_coexist *btcoexist,
364062306a36Sopenharmony_ci				       struct seq_file *m)
364162306a36Sopenharmony_ci{
364262306a36Sopenharmony_ci	struct btc_board_info *board_info = &btcoexist->board_info;
364362306a36Sopenharmony_ci	struct btc_stack_info *stack_info = &btcoexist->stack_info;
364462306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
364562306a36Sopenharmony_ci	u8 u8tmp[4], i, bt_info_ext, ps_tdma_case = 0;
364662306a36Sopenharmony_ci	u32 u32tmp[4];
364762306a36Sopenharmony_ci	bool roam = false, scan = false;
364862306a36Sopenharmony_ci	bool link = false, wifi_under_5g = false;
364962306a36Sopenharmony_ci	bool bt_hs_on = false, wifi_busy = false;
365062306a36Sopenharmony_ci	s32 wifi_rssi = 0, bt_hs_rssi = 0;
365162306a36Sopenharmony_ci	u32 wifi_bw, wifi_traffic_dir, fa_ofdm, fa_cck;
365262306a36Sopenharmony_ci	u8 wifi_dot11_chnl, wifi_hs_chnl;
365362306a36Sopenharmony_ci	u32 fw_ver = 0, bt_patch_ver = 0;
365462306a36Sopenharmony_ci	u8 ap_num = 0;
365562306a36Sopenharmony_ci
365662306a36Sopenharmony_ci	seq_puts(m, "\n ============[BT Coexist info]============");
365762306a36Sopenharmony_ci
365862306a36Sopenharmony_ci	if (btcoexist->manual_control) {
365962306a36Sopenharmony_ci		seq_puts(m, "\n ==========[Under Manual Control]============");
366062306a36Sopenharmony_ci		seq_puts(m, "\n ==========================================");
366162306a36Sopenharmony_ci	}
366262306a36Sopenharmony_ci
366362306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d ",
366462306a36Sopenharmony_ci		   "Ant PG number/ Ant mechanism:",
366562306a36Sopenharmony_ci		   board_info->pg_ant_num, board_info->btdm_ant_num);
366662306a36Sopenharmony_ci
366762306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %s / %d",
366862306a36Sopenharmony_ci		   "BT stack/ hci ext ver",
366962306a36Sopenharmony_ci		   ((stack_info->profile_notified) ? "Yes" : "No"),
367062306a36Sopenharmony_ci		   stack_info->hci_version);
367162306a36Sopenharmony_ci
367262306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER, &bt_patch_ver);
367362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);
367462306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)",
367562306a36Sopenharmony_ci		   "CoexVer/ FwVer/ PatchVer",
367662306a36Sopenharmony_ci		   glcoex_ver_date_8723b_2ant, glcoex_ver_8723b_2ant,
367762306a36Sopenharmony_ci		   fw_ver, bt_patch_ver, bt_patch_ver);
367862306a36Sopenharmony_ci
367962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);
368062306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_DOT11_CHNL,
368162306a36Sopenharmony_ci			   &wifi_dot11_chnl);
368262306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_HS_CHNL, &wifi_hs_chnl);
368362306a36Sopenharmony_ci
368462306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d / %d(%d)",
368562306a36Sopenharmony_ci		   "Dot11 channel / HsChnl(HsMode)",
368662306a36Sopenharmony_ci		   wifi_dot11_chnl, wifi_hs_chnl, bt_hs_on);
368762306a36Sopenharmony_ci
368862306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %3ph ",
368962306a36Sopenharmony_ci		   "H2C Wifi inform bt chnl Info", coex_dm->wifi_chnl_info);
369062306a36Sopenharmony_ci
369162306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifi_rssi);
369262306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_S4_HS_RSSI, &bt_hs_rssi);
369362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);
369462306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d/ %d",
369562306a36Sopenharmony_ci		   "Wifi rssi/ HS rssi/ AP#", wifi_rssi, bt_hs_rssi, ap_num);
369662306a36Sopenharmony_ci
369762306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);
369862306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);
369962306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);
370062306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d/ %d ",
370162306a36Sopenharmony_ci		   "Wifi link/ roam/ scan", link, roam, scan);
370262306a36Sopenharmony_ci
370362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_UNDER_5G, &wifi_under_5g);
370462306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);
370562306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);
370662306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
370762306a36Sopenharmony_ci			   &wifi_traffic_dir);
370862306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %s / %s/ %s ",
370962306a36Sopenharmony_ci		   "Wifi status", (wifi_under_5g ? "5G" : "2.4G"),
371062306a36Sopenharmony_ci		 ((wifi_bw == BTC_WIFI_BW_LEGACY) ? "Legacy" :
371162306a36Sopenharmony_ci		 (((wifi_bw == BTC_WIFI_BW_HT40) ? "HT40" : "HT20"))),
371262306a36Sopenharmony_ci		 ((!wifi_busy) ? "idle" :
371362306a36Sopenharmony_ci		 ((wifi_traffic_dir == BTC_WIFI_TRAFFIC_TX) ?
371462306a36Sopenharmony_ci		  "uplink" : "downlink")));
371562306a36Sopenharmony_ci
371662306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d / %d / %d / %d",
371762306a36Sopenharmony_ci		   "SCO/HID/PAN/A2DP",
371862306a36Sopenharmony_ci		   bt_link_info->sco_exist, bt_link_info->hid_exist,
371962306a36Sopenharmony_ci		   bt_link_info->pan_exist, bt_link_info->a2dp_exist);
372062306a36Sopenharmony_ci	btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_BT_LINK_INFO, m);
372162306a36Sopenharmony_ci
372262306a36Sopenharmony_ci	bt_info_ext = coex_sta->bt_info_ext;
372362306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %s",
372462306a36Sopenharmony_ci		   "BT Info A2DP rate",
372562306a36Sopenharmony_ci		   (bt_info_ext & BIT0) ? "Basic rate" : "EDR rate");
372662306a36Sopenharmony_ci
372762306a36Sopenharmony_ci	for (i = 0; i < BT_INFO_SRC_8723B_2ANT_MAX; i++) {
372862306a36Sopenharmony_ci		if (coex_sta->bt_info_c2h_cnt[i]) {
372962306a36Sopenharmony_ci			seq_printf(m, "\n %-35s = %7ph(%d)",
373062306a36Sopenharmony_ci				   glbt_info_src_8723b_2ant[i],
373162306a36Sopenharmony_ci				   coex_sta->bt_info_c2h[i],
373262306a36Sopenharmony_ci				   coex_sta->bt_info_c2h_cnt[i]);
373362306a36Sopenharmony_ci		}
373462306a36Sopenharmony_ci	}
373562306a36Sopenharmony_ci
373662306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %s/%s",
373762306a36Sopenharmony_ci		   "PS state, IPS/LPS",
373862306a36Sopenharmony_ci		   ((coex_sta->under_ips ? "IPS ON" : "IPS OFF")),
373962306a36Sopenharmony_ci		   ((coex_sta->under_lps ? "LPS ON" : "LPS OFF")));
374062306a36Sopenharmony_ci	btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_FW_PWR_MODE_CMD, m);
374162306a36Sopenharmony_ci
374262306a36Sopenharmony_ci	/* Sw mechanism	*/
374362306a36Sopenharmony_ci	seq_printf(m,
374462306a36Sopenharmony_ci		   "\n %-35s", "============[Sw mechanism]============");
374562306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d/ %d ",
374662306a36Sopenharmony_ci		   "SM1[ShRf/ LpRA/ LimDig]", coex_dm->cur_rf_rx_lpf_shrink,
374762306a36Sopenharmony_ci		   coex_dm->cur_low_penalty_ra, coex_dm->limited_dig);
374862306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d/ %d(0x%x) ",
374962306a36Sopenharmony_ci		   "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]",
375062306a36Sopenharmony_ci		   coex_dm->cur_agc_table_en, coex_dm->cur_adc_back_off,
375162306a36Sopenharmony_ci		   coex_dm->cur_dac_swing_on, coex_dm->cur_dac_swing_lvl);
375262306a36Sopenharmony_ci
375362306a36Sopenharmony_ci	/* Fw mechanism	*/
375462306a36Sopenharmony_ci	seq_printf(m, "\n %-35s",
375562306a36Sopenharmony_ci		   "============[Fw mechanism]============");
375662306a36Sopenharmony_ci
375762306a36Sopenharmony_ci	ps_tdma_case = coex_dm->cur_ps_tdma;
375862306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %5ph case-%d (auto:%d)",
375962306a36Sopenharmony_ci		   "PS TDMA", coex_dm->ps_tdma_para,
376062306a36Sopenharmony_ci		   ps_tdma_case, coex_dm->auto_tdma_adjust);
376162306a36Sopenharmony_ci
376262306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d ",
376362306a36Sopenharmony_ci		   "DecBtPwr/ IgnWlanAct", coex_dm->cur_dec_bt_pwr_lvl,
376462306a36Sopenharmony_ci		   coex_dm->cur_ignore_wlan_act);
376562306a36Sopenharmony_ci
376662306a36Sopenharmony_ci	/* Hw setting */
376762306a36Sopenharmony_ci	seq_printf(m, "\n %-35s",
376862306a36Sopenharmony_ci		   "============[Hw setting]============");
376962306a36Sopenharmony_ci
377062306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x",
377162306a36Sopenharmony_ci		   "RF-A, 0x1e initVal", coex_dm->bt_rf0x1e_backup);
377262306a36Sopenharmony_ci
377362306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x778);
377462306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x880);
377562306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x",
377662306a36Sopenharmony_ci		   "0x778/0x880[29:25]", u8tmp[0],
377762306a36Sopenharmony_ci		   (u32tmp[0] & 0x3e000000) >> 25);
377862306a36Sopenharmony_ci
377962306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);
378062306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x67);
378162306a36Sopenharmony_ci	u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x765);
378262306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x/ 0x%x",
378362306a36Sopenharmony_ci		   "0x948/ 0x67[5] / 0x765",
378462306a36Sopenharmony_ci		   u32tmp[0], ((u8tmp[0] & 0x20) >> 5), u8tmp[1]);
378562306a36Sopenharmony_ci
378662306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x92c);
378762306a36Sopenharmony_ci	u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x930);
378862306a36Sopenharmony_ci	u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x944);
378962306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x/ 0x%x",
379062306a36Sopenharmony_ci		   "0x92c[1:0]/ 0x930[7:0]/0x944[1:0]",
379162306a36Sopenharmony_ci		   u32tmp[0] & 0x3, u32tmp[1] & 0xff, u32tmp[2] & 0x3);
379262306a36Sopenharmony_ci
379362306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x39);
379462306a36Sopenharmony_ci	u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x40);
379562306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x4c);
379662306a36Sopenharmony_ci	u8tmp[2] = btcoexist->btc_read_1byte(btcoexist, 0x64);
379762306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",
379862306a36Sopenharmony_ci		   "0x38[11]/0x40/0x4c[24:23]/0x64[0]",
379962306a36Sopenharmony_ci		   ((u8tmp[0] & 0x8) >> 3), u8tmp[1],
380062306a36Sopenharmony_ci		   ((u32tmp[0] & 0x01800000) >> 23), u8tmp[2] & 0x1);
380162306a36Sopenharmony_ci
380262306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x550);
380362306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x522);
380462306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x",
380562306a36Sopenharmony_ci		   "0x550(bcn ctrl)/0x522", u32tmp[0], u8tmp[0]);
380662306a36Sopenharmony_ci
380762306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xc50);
380862306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x49c);
380962306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x",
381062306a36Sopenharmony_ci		   "0xc50(dig)/0x49c(null-drop)", u32tmp[0] & 0xff, u8tmp[0]);
381162306a36Sopenharmony_ci
381262306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xda0);
381362306a36Sopenharmony_ci	u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0xda4);
381462306a36Sopenharmony_ci	u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0xda8);
381562306a36Sopenharmony_ci	u32tmp[3] = btcoexist->btc_read_4byte(btcoexist, 0xcf0);
381662306a36Sopenharmony_ci
381762306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0xa5b);
381862306a36Sopenharmony_ci	u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0xa5c);
381962306a36Sopenharmony_ci
382062306a36Sopenharmony_ci	fa_ofdm = ((u32tmp[0]&0xffff0000) >> 16) +
382162306a36Sopenharmony_ci		  ((u32tmp[1]&0xffff0000) >> 16) +
382262306a36Sopenharmony_ci		   (u32tmp[1] & 0xffff) +
382362306a36Sopenharmony_ci		   (u32tmp[2] & 0xffff) +
382462306a36Sopenharmony_ci		  ((u32tmp[3]&0xffff0000) >> 16) +
382562306a36Sopenharmony_ci		   (u32tmp[3] & 0xffff);
382662306a36Sopenharmony_ci	fa_cck = (u8tmp[0] << 8) + u8tmp[1];
382762306a36Sopenharmony_ci
382862306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x/ 0x%x",
382962306a36Sopenharmony_ci		   "OFDM-CCA/OFDM-FA/CCK-FA",
383062306a36Sopenharmony_ci		   u32tmp[0] & 0xffff, fa_ofdm, fa_cck);
383162306a36Sopenharmony_ci
383262306a36Sopenharmony_ci	u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x6c0);
383362306a36Sopenharmony_ci	u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x6c4);
383462306a36Sopenharmony_ci	u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x6c8);
383562306a36Sopenharmony_ci	u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x6cc);
383662306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",
383762306a36Sopenharmony_ci		   "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)",
383862306a36Sopenharmony_ci		   u32tmp[0], u32tmp[1], u32tmp[2], u8tmp[0]);
383962306a36Sopenharmony_ci
384062306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d",
384162306a36Sopenharmony_ci		   "0x770(high-pri rx/tx)",
384262306a36Sopenharmony_ci		   coex_sta->high_priority_rx, coex_sta->high_priority_tx);
384362306a36Sopenharmony_ci	seq_printf(m, "\n %-35s = %d/ %d",
384462306a36Sopenharmony_ci		   "0x774(low-pri rx/tx)", coex_sta->low_priority_rx,
384562306a36Sopenharmony_ci		   coex_sta->low_priority_tx);
384662306a36Sopenharmony_ci	if (btcoexist->auto_report_2ant)
384762306a36Sopenharmony_ci		btc8723b2ant_monitor_bt_ctr(btcoexist);
384862306a36Sopenharmony_ci	btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS, m);
384962306a36Sopenharmony_ci}
385062306a36Sopenharmony_ci
385162306a36Sopenharmony_civoid ex_btc8723b2ant_ips_notify(struct btc_coexist *btcoexist, u8 type)
385262306a36Sopenharmony_ci{
385362306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
385462306a36Sopenharmony_ci
385562306a36Sopenharmony_ci	if (BTC_IPS_ENTER == type) {
385662306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
385762306a36Sopenharmony_ci			"[BTCoex], IPS ENTER notify\n");
385862306a36Sopenharmony_ci		coex_sta->under_ips = true;
385962306a36Sopenharmony_ci		btc8723b2ant_wifioff_hwcfg(btcoexist);
386062306a36Sopenharmony_ci		btc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
386162306a36Sopenharmony_ci		btc8723b2ant_coex_alloff(btcoexist);
386262306a36Sopenharmony_ci	} else if (BTC_IPS_LEAVE == type) {
386362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
386462306a36Sopenharmony_ci			"[BTCoex], IPS LEAVE notify\n");
386562306a36Sopenharmony_ci		coex_sta->under_ips = false;
386662306a36Sopenharmony_ci		ex_btc8723b2ant_init_hwconfig(btcoexist);
386762306a36Sopenharmony_ci		btc8723b2ant_init_coex_dm(btcoexist);
386862306a36Sopenharmony_ci		btc8723b2ant_query_bt_info(btcoexist);
386962306a36Sopenharmony_ci	}
387062306a36Sopenharmony_ci}
387162306a36Sopenharmony_ci
387262306a36Sopenharmony_civoid ex_btc8723b2ant_lps_notify(struct btc_coexist *btcoexist, u8 type)
387362306a36Sopenharmony_ci{
387462306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
387562306a36Sopenharmony_ci
387662306a36Sopenharmony_ci	if (BTC_LPS_ENABLE == type) {
387762306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
387862306a36Sopenharmony_ci			"[BTCoex], LPS ENABLE notify\n");
387962306a36Sopenharmony_ci		coex_sta->under_lps = true;
388062306a36Sopenharmony_ci	} else if (BTC_LPS_DISABLE == type) {
388162306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
388262306a36Sopenharmony_ci			"[BTCoex], LPS DISABLE notify\n");
388362306a36Sopenharmony_ci		coex_sta->under_lps = false;
388462306a36Sopenharmony_ci	}
388562306a36Sopenharmony_ci}
388662306a36Sopenharmony_ci
388762306a36Sopenharmony_civoid ex_btc8723b2ant_scan_notify(struct btc_coexist *btcoexist, u8 type)
388862306a36Sopenharmony_ci{
388962306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
389062306a36Sopenharmony_ci	u32 u32tmp;
389162306a36Sopenharmony_ci	u8 u8tmpa, u8tmpb;
389262306a36Sopenharmony_ci
389362306a36Sopenharmony_ci	u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x948);
389462306a36Sopenharmony_ci	u8tmpa = btcoexist->btc_read_1byte(btcoexist, 0x765);
389562306a36Sopenharmony_ci	u8tmpb = btcoexist->btc_read_1byte(btcoexist, 0x76e);
389662306a36Sopenharmony_ci
389762306a36Sopenharmony_ci	if (BTC_SCAN_START == type)
389862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
389962306a36Sopenharmony_ci			"[BTCoex], SCAN START notify\n");
390062306a36Sopenharmony_ci	else if (BTC_SCAN_FINISH == type)
390162306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
390262306a36Sopenharmony_ci			"[BTCoex], SCAN FINISH notify\n");
390362306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,
390462306a36Sopenharmony_ci			   &coex_sta->scan_ap_num);
390562306a36Sopenharmony_ci
390662306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
390762306a36Sopenharmony_ci		"############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",
390862306a36Sopenharmony_ci		u32tmp, u8tmpa, u8tmpb);
390962306a36Sopenharmony_ci}
391062306a36Sopenharmony_ci
391162306a36Sopenharmony_civoid ex_btc8723b2ant_connect_notify(struct btc_coexist *btcoexist, u8 type)
391262306a36Sopenharmony_ci{
391362306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
391462306a36Sopenharmony_ci
391562306a36Sopenharmony_ci	if (BTC_ASSOCIATE_START == type)
391662306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
391762306a36Sopenharmony_ci			"[BTCoex], CONNECT START notify\n");
391862306a36Sopenharmony_ci	else if (BTC_ASSOCIATE_FINISH == type)
391962306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
392062306a36Sopenharmony_ci			"[BTCoex], CONNECT FINISH notify\n");
392162306a36Sopenharmony_ci}
392262306a36Sopenharmony_ci
392362306a36Sopenharmony_civoid ex_btc8723b2ant_media_status_notify(struct btc_coexist *btcoexist,
392462306a36Sopenharmony_ci					 u8 type)
392562306a36Sopenharmony_ci{
392662306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
392762306a36Sopenharmony_ci	u8 h2c_parameter[3] = {0};
392862306a36Sopenharmony_ci	u32 wifi_bw;
392962306a36Sopenharmony_ci	u8 wifi_central_chnl;
393062306a36Sopenharmony_ci	u8 ap_num = 0;
393162306a36Sopenharmony_ci
393262306a36Sopenharmony_ci	if (BTC_MEDIA_CONNECT == type)
393362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
393462306a36Sopenharmony_ci			"[BTCoex], MEDIA connect notify\n");
393562306a36Sopenharmony_ci	else
393662306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
393762306a36Sopenharmony_ci			"[BTCoex], MEDIA disconnect notify\n");
393862306a36Sopenharmony_ci
393962306a36Sopenharmony_ci	/* only 2.4G we need to inform bt the chnl mask */
394062306a36Sopenharmony_ci	btcoexist->btc_get(btcoexist,
394162306a36Sopenharmony_ci		BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifi_central_chnl);
394262306a36Sopenharmony_ci	if ((BTC_MEDIA_CONNECT == type) &&
394362306a36Sopenharmony_ci	    (wifi_central_chnl <= 14)) {
394462306a36Sopenharmony_ci		h2c_parameter[0] = 0x1;
394562306a36Sopenharmony_ci		h2c_parameter[1] = wifi_central_chnl;
394662306a36Sopenharmony_ci		btcoexist->btc_get(btcoexist,
394762306a36Sopenharmony_ci			BTC_GET_U4_WIFI_BW, &wifi_bw);
394862306a36Sopenharmony_ci		if (wifi_bw == BTC_WIFI_BW_HT40) {
394962306a36Sopenharmony_ci			h2c_parameter[2] = 0x30;
395062306a36Sopenharmony_ci		} else {
395162306a36Sopenharmony_ci			btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,
395262306a36Sopenharmony_ci					   &ap_num);
395362306a36Sopenharmony_ci			if (ap_num < 10)
395462306a36Sopenharmony_ci				h2c_parameter[2] = 0x30;
395562306a36Sopenharmony_ci			else
395662306a36Sopenharmony_ci				h2c_parameter[2] = 0x20;
395762306a36Sopenharmony_ci		}
395862306a36Sopenharmony_ci	}
395962306a36Sopenharmony_ci
396062306a36Sopenharmony_ci	coex_dm->wifi_chnl_info[0] = h2c_parameter[0];
396162306a36Sopenharmony_ci	coex_dm->wifi_chnl_info[1] = h2c_parameter[1];
396262306a36Sopenharmony_ci	coex_dm->wifi_chnl_info[2] = h2c_parameter[2];
396362306a36Sopenharmony_ci
396462306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
396562306a36Sopenharmony_ci		"[BTCoex], FW write 0x66=0x%x\n",
396662306a36Sopenharmony_ci		h2c_parameter[0] << 16 | h2c_parameter[1] << 8 |
396762306a36Sopenharmony_ci		h2c_parameter[2]);
396862306a36Sopenharmony_ci
396962306a36Sopenharmony_ci	btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);
397062306a36Sopenharmony_ci}
397162306a36Sopenharmony_ci
397262306a36Sopenharmony_civoid ex_btc8723b2ant_special_packet_notify(struct btc_coexist *btcoexist,
397362306a36Sopenharmony_ci					   u8 type)
397462306a36Sopenharmony_ci{
397562306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
397662306a36Sopenharmony_ci
397762306a36Sopenharmony_ci	if (type == BTC_PACKET_DHCP)
397862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
397962306a36Sopenharmony_ci			"[BTCoex], DHCP Packet notify\n");
398062306a36Sopenharmony_ci}
398162306a36Sopenharmony_ci
398262306a36Sopenharmony_civoid ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
398362306a36Sopenharmony_ci				    u8 *tmpbuf, u8 length)
398462306a36Sopenharmony_ci{
398562306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
398662306a36Sopenharmony_ci	u8 bt_info = 0;
398762306a36Sopenharmony_ci	u8 i, rsp_source = 0;
398862306a36Sopenharmony_ci	bool bt_busy = false, limited_dig = false;
398962306a36Sopenharmony_ci	bool wifi_connected = false;
399062306a36Sopenharmony_ci
399162306a36Sopenharmony_ci	coex_sta->c2h_bt_info_req_sent = false;
399262306a36Sopenharmony_ci
399362306a36Sopenharmony_ci	rsp_source = tmpbuf[0]&0xf;
399462306a36Sopenharmony_ci	if (rsp_source >= BT_INFO_SRC_8723B_2ANT_MAX)
399562306a36Sopenharmony_ci		rsp_source = BT_INFO_SRC_8723B_2ANT_WIFI_FW;
399662306a36Sopenharmony_ci	coex_sta->bt_info_c2h_cnt[rsp_source]++;
399762306a36Sopenharmony_ci
399862306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
399962306a36Sopenharmony_ci		"[BTCoex], Bt info[%d], length=%d, hex data=[",
400062306a36Sopenharmony_ci		rsp_source, length);
400162306a36Sopenharmony_ci	for (i = 0; i < length; i++) {
400262306a36Sopenharmony_ci		coex_sta->bt_info_c2h[rsp_source][i] = tmpbuf[i];
400362306a36Sopenharmony_ci		if (i == 1)
400462306a36Sopenharmony_ci			bt_info = tmpbuf[i];
400562306a36Sopenharmony_ci		if (i == length - 1)
400662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
400762306a36Sopenharmony_ci				"0x%02x]\n", tmpbuf[i]);
400862306a36Sopenharmony_ci		else
400962306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
401062306a36Sopenharmony_ci				"0x%02x, ", tmpbuf[i]);
401162306a36Sopenharmony_ci	}
401262306a36Sopenharmony_ci
401362306a36Sopenharmony_ci	if (btcoexist->manual_control) {
401462306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
401562306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n");
401662306a36Sopenharmony_ci		return;
401762306a36Sopenharmony_ci	}
401862306a36Sopenharmony_ci
401962306a36Sopenharmony_ci	if (BT_INFO_SRC_8723B_2ANT_WIFI_FW != rsp_source) {
402062306a36Sopenharmony_ci		coex_sta->bt_retry_cnt =
402162306a36Sopenharmony_ci			coex_sta->bt_info_c2h[rsp_source][2] & 0xf;
402262306a36Sopenharmony_ci
402362306a36Sopenharmony_ci		if (coex_sta->bt_retry_cnt >= 1)
402462306a36Sopenharmony_ci			coex_sta->pop_event_cnt++;
402562306a36Sopenharmony_ci
402662306a36Sopenharmony_ci		coex_sta->bt_rssi =
402762306a36Sopenharmony_ci			coex_sta->bt_info_c2h[rsp_source][3] * 2 + 10;
402862306a36Sopenharmony_ci
402962306a36Sopenharmony_ci		coex_sta->bt_info_ext = coex_sta->bt_info_c2h[rsp_source][4];
403062306a36Sopenharmony_ci
403162306a36Sopenharmony_ci		if (coex_sta->bt_info_c2h[rsp_source][2] & 0x20)
403262306a36Sopenharmony_ci			coex_sta->c2h_bt_remote_name_req = true;
403362306a36Sopenharmony_ci		else
403462306a36Sopenharmony_ci			coex_sta->c2h_bt_remote_name_req = false;
403562306a36Sopenharmony_ci
403662306a36Sopenharmony_ci		if (coex_sta->bt_info_c2h[rsp_source][1] == 0x49)
403762306a36Sopenharmony_ci			coex_sta->a2dp_bit_pool =
403862306a36Sopenharmony_ci				coex_sta->bt_info_c2h[rsp_source][6];
403962306a36Sopenharmony_ci		else
404062306a36Sopenharmony_ci			coex_sta->a2dp_bit_pool = 0;
404162306a36Sopenharmony_ci
404262306a36Sopenharmony_ci		/* Here we need to resend some wifi info to BT
404362306a36Sopenharmony_ci		 * because BT is reset and loss of the info.
404462306a36Sopenharmony_ci		 */
404562306a36Sopenharmony_ci		if ((coex_sta->bt_info_ext & BIT1)) {
404662306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
404762306a36Sopenharmony_ci				"[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n");
404862306a36Sopenharmony_ci			btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,
404962306a36Sopenharmony_ci					   &wifi_connected);
405062306a36Sopenharmony_ci			if (wifi_connected)
405162306a36Sopenharmony_ci				ex_btc8723b2ant_media_status_notify(
405262306a36Sopenharmony_ci							btcoexist,
405362306a36Sopenharmony_ci							BTC_MEDIA_CONNECT);
405462306a36Sopenharmony_ci			else
405562306a36Sopenharmony_ci				ex_btc8723b2ant_media_status_notify(
405662306a36Sopenharmony_ci							btcoexist,
405762306a36Sopenharmony_ci							BTC_MEDIA_DISCONNECT);
405862306a36Sopenharmony_ci		}
405962306a36Sopenharmony_ci
406062306a36Sopenharmony_ci		if ((coex_sta->bt_info_ext & BIT3)) {
406162306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
406262306a36Sopenharmony_ci				"[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n");
406362306a36Sopenharmony_ci			btc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC,
406462306a36Sopenharmony_ci						     false);
406562306a36Sopenharmony_ci		} else {
406662306a36Sopenharmony_ci			/* BT already NOT ignore Wlan active, do nothing here.*/
406762306a36Sopenharmony_ci		}
406862306a36Sopenharmony_ci		if (!btcoexist->auto_report_2ant) {
406962306a36Sopenharmony_ci			if (!(coex_sta->bt_info_ext & BIT4))
407062306a36Sopenharmony_ci				btc8723b2ant_bt_auto_report(btcoexist,
407162306a36Sopenharmony_ci							    FORCE_EXEC, true);
407262306a36Sopenharmony_ci		}
407362306a36Sopenharmony_ci	}
407462306a36Sopenharmony_ci
407562306a36Sopenharmony_ci	/* check BIT2 first ==> check if bt is under inquiry or page scan */
407662306a36Sopenharmony_ci	if (bt_info & BT_INFO_8723B_2ANT_B_INQ_PAGE)
407762306a36Sopenharmony_ci		coex_sta->c2h_bt_inquiry_page = true;
407862306a36Sopenharmony_ci	else
407962306a36Sopenharmony_ci		coex_sta->c2h_bt_inquiry_page = false;
408062306a36Sopenharmony_ci
408162306a36Sopenharmony_ci	if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) {
408262306a36Sopenharmony_ci		/* set link exist status */
408362306a36Sopenharmony_ci		coex_sta->bt_link_exist = false;
408462306a36Sopenharmony_ci		coex_sta->pan_exist = false;
408562306a36Sopenharmony_ci		coex_sta->a2dp_exist = false;
408662306a36Sopenharmony_ci		coex_sta->hid_exist = false;
408762306a36Sopenharmony_ci		coex_sta->sco_exist = false;
408862306a36Sopenharmony_ci	} else {
408962306a36Sopenharmony_ci		/* connection exists */
409062306a36Sopenharmony_ci		coex_sta->bt_link_exist = true;
409162306a36Sopenharmony_ci		if (bt_info & BT_INFO_8723B_2ANT_B_FTP)
409262306a36Sopenharmony_ci			coex_sta->pan_exist = true;
409362306a36Sopenharmony_ci		else
409462306a36Sopenharmony_ci			coex_sta->pan_exist = false;
409562306a36Sopenharmony_ci		if (bt_info & BT_INFO_8723B_2ANT_B_A2DP)
409662306a36Sopenharmony_ci			coex_sta->a2dp_exist = true;
409762306a36Sopenharmony_ci		else
409862306a36Sopenharmony_ci			coex_sta->a2dp_exist = false;
409962306a36Sopenharmony_ci		if (bt_info & BT_INFO_8723B_2ANT_B_HID)
410062306a36Sopenharmony_ci			coex_sta->hid_exist = true;
410162306a36Sopenharmony_ci		else
410262306a36Sopenharmony_ci			coex_sta->hid_exist = false;
410362306a36Sopenharmony_ci		if (bt_info & BT_INFO_8723B_2ANT_B_SCO_ESCO)
410462306a36Sopenharmony_ci			coex_sta->sco_exist = true;
410562306a36Sopenharmony_ci		else
410662306a36Sopenharmony_ci			coex_sta->sco_exist = false;
410762306a36Sopenharmony_ci
410862306a36Sopenharmony_ci		if ((!coex_sta->hid_exist) &&
410962306a36Sopenharmony_ci		    (!coex_sta->c2h_bt_inquiry_page) &&
411062306a36Sopenharmony_ci		    (!coex_sta->sco_exist)) {
411162306a36Sopenharmony_ci			if (coex_sta->high_priority_tx +
411262306a36Sopenharmony_ci				    coex_sta->high_priority_rx >= 160) {
411362306a36Sopenharmony_ci				coex_sta->hid_exist = true;
411462306a36Sopenharmony_ci				bt_info = bt_info | 0x28;
411562306a36Sopenharmony_ci			}
411662306a36Sopenharmony_ci		}
411762306a36Sopenharmony_ci	}
411862306a36Sopenharmony_ci
411962306a36Sopenharmony_ci	btc8723b2ant_update_bt_link_info(btcoexist);
412062306a36Sopenharmony_ci
412162306a36Sopenharmony_ci	if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) {
412262306a36Sopenharmony_ci		coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
412362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
412462306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n");
412562306a36Sopenharmony_ci	/* connection exists but no busy */
412662306a36Sopenharmony_ci	} else if (bt_info == BT_INFO_8723B_2ANT_B_CONNECTION) {
412762306a36Sopenharmony_ci		coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;
412862306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
412962306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n");
413062306a36Sopenharmony_ci	} else if ((bt_info & BT_INFO_8723B_2ANT_B_SCO_ESCO) ||
413162306a36Sopenharmony_ci		   (bt_info & BT_INFO_8723B_2ANT_B_SCO_BUSY)) {
413262306a36Sopenharmony_ci		coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;
413362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
413462306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), BT SCO busy!!!\n");
413562306a36Sopenharmony_ci	} else if (bt_info&BT_INFO_8723B_2ANT_B_ACL_BUSY) {
413662306a36Sopenharmony_ci		coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;
413762306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
413862306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), BT ACL busy!!!\n");
413962306a36Sopenharmony_ci	} else {
414062306a36Sopenharmony_ci		coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_MAX;
414162306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
414262306a36Sopenharmony_ci			"[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n");
414362306a36Sopenharmony_ci	}
414462306a36Sopenharmony_ci
414562306a36Sopenharmony_ci	if ((BT_8723B_2ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) ||
414662306a36Sopenharmony_ci	    (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) ||
414762306a36Sopenharmony_ci	    (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == coex_dm->bt_status)) {
414862306a36Sopenharmony_ci		bt_busy = true;
414962306a36Sopenharmony_ci		limited_dig = true;
415062306a36Sopenharmony_ci	} else {
415162306a36Sopenharmony_ci		bt_busy = false;
415262306a36Sopenharmony_ci		limited_dig = false;
415362306a36Sopenharmony_ci	}
415462306a36Sopenharmony_ci
415562306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy);
415662306a36Sopenharmony_ci
415762306a36Sopenharmony_ci	coex_dm->limited_dig = limited_dig;
415862306a36Sopenharmony_ci	btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_LIMITED_DIG, &limited_dig);
415962306a36Sopenharmony_ci
416062306a36Sopenharmony_ci	btc8723b2ant_run_coexist_mechanism(btcoexist);
416162306a36Sopenharmony_ci}
416262306a36Sopenharmony_ci
416362306a36Sopenharmony_civoid ex_btc8723b2ant_halt_notify(struct btc_coexist *btcoexist)
416462306a36Sopenharmony_ci{
416562306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
416662306a36Sopenharmony_ci
416762306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, "[BTCoex], Halt notify\n");
416862306a36Sopenharmony_ci
416962306a36Sopenharmony_ci	btc8723b2ant_wifioff_hwcfg(btcoexist);
417062306a36Sopenharmony_ci	btc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);
417162306a36Sopenharmony_ci	ex_btc8723b2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);
417262306a36Sopenharmony_ci}
417362306a36Sopenharmony_ci
417462306a36Sopenharmony_civoid ex_btc8723b2ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state)
417562306a36Sopenharmony_ci{
417662306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
417762306a36Sopenharmony_ci
417862306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, "[BTCoex], Pnp notify\n");
417962306a36Sopenharmony_ci
418062306a36Sopenharmony_ci	if (pnp_state == BTC_WIFI_PNP_SLEEP) {
418162306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
418262306a36Sopenharmony_ci			"[BTCoex], Pnp notify to SLEEP\n");
418362306a36Sopenharmony_ci
418462306a36Sopenharmony_ci		/* Driver do not leave IPS/LPS when driver is going to sleep, so
418562306a36Sopenharmony_ci		 * BTCoexistence think wifi is still under IPS/LPS
418662306a36Sopenharmony_ci		 *
418762306a36Sopenharmony_ci		 * BT should clear UnderIPS/UnderLPS state to avoid mismatch
418862306a36Sopenharmony_ci		 * state after wakeup.
418962306a36Sopenharmony_ci		 */
419062306a36Sopenharmony_ci		coex_sta->under_ips = false;
419162306a36Sopenharmony_ci		coex_sta->under_lps = false;
419262306a36Sopenharmony_ci	} else if (pnp_state == BTC_WIFI_PNP_WAKE_UP) {
419362306a36Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
419462306a36Sopenharmony_ci			"[BTCoex], Pnp notify to WAKE UP\n");
419562306a36Sopenharmony_ci		ex_btc8723b2ant_init_hwconfig(btcoexist);
419662306a36Sopenharmony_ci		btc8723b2ant_init_coex_dm(btcoexist);
419762306a36Sopenharmony_ci		btc8723b2ant_query_bt_info(btcoexist);
419862306a36Sopenharmony_ci	}
419962306a36Sopenharmony_ci}
420062306a36Sopenharmony_ci
420162306a36Sopenharmony_civoid ex_btc8723b2ant_periodical(struct btc_coexist *btcoexist)
420262306a36Sopenharmony_ci{
420362306a36Sopenharmony_ci	struct rtl_priv *rtlpriv = btcoexist->adapter;
420462306a36Sopenharmony_ci	struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
420562306a36Sopenharmony_ci
420662306a36Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
420762306a36Sopenharmony_ci		"[BTCoex], ==========================Periodical===========================\n");
420862306a36Sopenharmony_ci
420962306a36Sopenharmony_ci	if (coex_sta->dis_ver_info_cnt <= 5) {
421062306a36Sopenharmony_ci		coex_sta->dis_ver_info_cnt += 1;
421162306a36Sopenharmony_ci		if (coex_sta->dis_ver_info_cnt == 3) {
421262306a36Sopenharmony_ci			/* Antenna config to set 0x765 = 0x0 (GNT_BT control by
421362306a36Sopenharmony_ci			 * PTA) after initial
421462306a36Sopenharmony_ci			 */
421562306a36Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
421662306a36Sopenharmony_ci				"[BTCoex], Set GNT_BT control by PTA\n");
421762306a36Sopenharmony_ci			btc8723b2ant_set_ant_path(
421862306a36Sopenharmony_ci				btcoexist, BTC_ANT_WIFI_AT_MAIN, false, false);
421962306a36Sopenharmony_ci		}
422062306a36Sopenharmony_ci	}
422162306a36Sopenharmony_ci
422262306a36Sopenharmony_ci	if (!btcoexist->auto_report_2ant) {
422362306a36Sopenharmony_ci		btc8723b2ant_query_bt_info(btcoexist);
422462306a36Sopenharmony_ci	} else {
422562306a36Sopenharmony_ci		btc8723b2ant_monitor_bt_ctr(btcoexist);
422662306a36Sopenharmony_ci		btc8723b2ant_monitor_wifi_ctr(btcoexist);
422762306a36Sopenharmony_ci
422862306a36Sopenharmony_ci		/* for some BT speakers that High-Priority pkts appear before
422962306a36Sopenharmony_ci		 * playing, this will cause HID exist
423062306a36Sopenharmony_ci		 */
423162306a36Sopenharmony_ci		if ((coex_sta->high_priority_tx +
423262306a36Sopenharmony_ci		    coex_sta->high_priority_rx < 50) &&
423362306a36Sopenharmony_ci		    (bt_link_info->hid_exist))
423462306a36Sopenharmony_ci			bt_link_info->hid_exist = false;
423562306a36Sopenharmony_ci
423662306a36Sopenharmony_ci		if (btc8723b2ant_is_wifi_status_changed(btcoexist) ||
423762306a36Sopenharmony_ci		    coex_dm->auto_tdma_adjust)
423862306a36Sopenharmony_ci			btc8723b2ant_run_coexist_mechanism(btcoexist);
423962306a36Sopenharmony_ci	}
424062306a36Sopenharmony_ci}
4241