|
@@ -266,6 +266,7 @@ void btc8723b2ant_limited_rx(struct btc_coexist *btcoexist, bool force_exec,
|
|
|
static void btc8723b2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
|
|
|
{
|
|
|
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
|
|
+ struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
|
|
|
u32 reg_hp_txrx, reg_lp_txrx, u32tmp;
|
|
|
u32 reg_hp_tx = 0, reg_hp_rx = 0;
|
|
|
u32 reg_lp_tx = 0, reg_lp_rx = 0;
|
|
@@ -286,6 +287,17 @@ static void btc8723b2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
|
|
|
coex_sta->low_priority_tx = reg_lp_tx;
|
|
|
coex_sta->low_priority_rx = reg_lp_rx;
|
|
|
|
|
|
+ if ((coex_sta->low_priority_tx > 1050) &&
|
|
|
+ (!coex_sta->c2h_bt_inquiry_page))
|
|
|
+ coex_sta->pop_event_cnt++;
|
|
|
+
|
|
|
+ if ((coex_sta->low_priority_rx >= 950) &&
|
|
|
+ (coex_sta->low_priority_rx >= coex_sta->low_priority_tx) &&
|
|
|
+ (!coex_sta->under_ips))
|
|
|
+ bt_link_info->slave_role = true;
|
|
|
+ else
|
|
|
+ bt_link_info->slave_role = false;
|
|
|
+
|
|
|
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
|
|
|
"[BTCoex], High Priority Tx/Rx(reg 0x%x)=0x%x(%d)/0x%x(%d)\n",
|
|
|
reg_hp_txrx, reg_hp_tx, reg_hp_tx, reg_hp_rx, reg_hp_rx);
|
|
@@ -1084,6 +1096,8 @@ static void btc8723b2ant_ps_tdma(struct btc_coexist *btcoexist, bool force_exec,
|
|
|
bool turn_on, u8 type)
|
|
|
{
|
|
|
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
|
|
+ struct btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;
|
|
|
+ u8 tdma_byte4_modify = 0x0;
|
|
|
|
|
|
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
|
|
|
"[BTCoex], %s turn %s PS TDMA, type=%d\n",
|
|
@@ -1104,75 +1118,92 @@ static void btc8723b2ant_ps_tdma(struct btc_coexist *btcoexist, bool force_exec,
|
|
|
(coex_dm->pre_ps_tdma == coex_dm->cur_ps_tdma))
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ if ((bt_link_info->slave_role) && (bt_link_info->a2dp_exist))
|
|
|
+ /* 0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts) */
|
|
|
+ tdma_byte4_modify = 0x1;
|
|
|
+
|
|
|
if (turn_on) {
|
|
|
switch (type) {
|
|
|
case 1:
|
|
|
default:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
|
|
|
- 0x1a, 0xe1, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x3c,
|
|
|
+ 0x03, 0xf1, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 2:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
|
|
|
- 0x12, 0xe1, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x2d,
|
|
|
+ 0x03, 0xf1, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 3:
|
|
|
- /* This call breaks BT when wireless is active -
|
|
|
- * comment it out for now until a better fix is found:
|
|
|
- * btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
|
|
|
- * 0x3, 0xf1, 0x90);
|
|
|
- */
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
|
|
|
+ 0x3, 0xf1,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 4:
|
|
|
btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
|
|
|
- 0x03, 0xf1, 0x90);
|
|
|
+ 0x03, 0xf1,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 5:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
|
|
|
- 0x1a, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x3c,
|
|
|
+ 0x3, 0x70, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 6:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
|
|
|
- 0x12, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x2d,
|
|
|
+ 0x3, 0x70, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 7:
|
|
|
btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
|
|
|
- 0x3, 0x70, 0x90);
|
|
|
+ 0x3, 0x70,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 8:
|
|
|
btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x10,
|
|
|
- 0x3, 0x70, 0x90);
|
|
|
+ 0x3, 0x70,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 9:
|
|
|
btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
|
|
|
0x1a, 0xe1, 0x90);
|
|
|
break;
|
|
|
case 10:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
|
|
|
- 0x12, 0xe1, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x2d,
|
|
|
+ 0x03, 0xf1, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 11:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
|
|
|
- 0xa, 0xe1, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
|
|
|
+ 0x3, 0xf1,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 12:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
|
|
|
- 0x5, 0xe1, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
|
|
|
+ 0x3, 0xf1,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 13:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1a,
|
|
|
- 0x1a, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x3c,
|
|
|
+ 0x3, 0x70, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 14:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x12,
|
|
|
- 0x12, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(
|
|
|
+ btcoexist, 0xe3, 0x2d,
|
|
|
+ 0x3, 0x70, 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 15:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0xa,
|
|
|
- 0xa, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x1c,
|
|
|
+ 0x3, 0x70,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 16:
|
|
|
- btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x5,
|
|
|
- 0x5, 0x60, 0x90);
|
|
|
+ btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xe3, 0x10,
|
|
|
+ 0x3, 0x70,
|
|
|
+ 0x90 | tdma_byte4_modify);
|
|
|
break;
|
|
|
case 17:
|
|
|
btc8723b2ant_set_fw_ps_tdma(btcoexist, 0xa3, 0x2f,
|