1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#define BT_INFO_8822B_2ANT_B_FTP BIT(7)
19#define BT_INFO_8822B_2ANT_B_A2DP BIT(6)
20#define BT_INFO_8822B_2ANT_B_HID BIT(5)
21#define BT_INFO_8822B_2ANT_B_SCO_BUSY BIT(4)
22#define BT_INFO_8822B_2ANT_B_ACL_BUSY BIT(3)
23#define BT_INFO_8822B_2ANT_B_INQ_PAGE BIT(2)
24#define BT_INFO_8822B_2ANT_B_SCO_ESCO BIT(1)
25#define BT_INFO_8822B_2ANT_B_CONNECTION BIT(0)
26
27#define BTC_RSSI_COEX_THRESH_TOL_8822B_2ANT 2
28
29
30
31
32#define BT_8822B_2ANT_WIFI_RSSI_COEXSWITCH_THRES1 80
33
34
35
36#define BT_8822B_2ANT_BT_RSSI_COEXSWITCH_THRES1 80
37
38
39
40#define BT_8822B_2ANT_WIFI_RSSI_COEXSWITCH_THRES2 80
41
42
43
44#define BT_8822B_2ANT_BT_RSSI_COEXSWITCH_THRES2 80
45#define BT_8822B_2ANT_DEFAULT_ISOLATION 15
46#define BT_8822B_2ANT_WIFI_MAX_TX_POWER 15
47#define BT_8822B_2ANT_BT_MAX_TX_POWER 3
48#define BT_8822B_2ANT_WIFI_SIR_THRES1 -15
49#define BT_8822B_2ANT_WIFI_SIR_THRES2 -30
50#define BT_8822B_2ANT_BT_SIR_THRES1 -15
51#define BT_8822B_2ANT_BT_SIR_THRES2 -30
52
53
54#define BT_8822B_2ANT_ANTDET_PSDTHRES_BACKGROUND 50
55#define BT_8822B_2ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION 70
56#define BT_8822B_2ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION 52
57#define BT_8822B_2ANT_ANTDET_PSDTHRES_1ANT 40
58#define BT_8822B_2ANT_ANTDET_RETRY_INTERVAL \
59 10
60#define BT_8822B_2ANT_ANTDET_SWEEPPOINT_DELAY 60000
61#define BT_8822B_2ANT_ANTDET_ENABLE 0
62#define BT_8822B_2ANT_ANTDET_BTTXTIME 100
63#define BT_8822B_2ANT_ANTDET_BTTXCHANNEL 39
64#define BT_8822B_2ANT_ANTDET_PSD_SWWEEPCOUNT 50
65
66#define BT_8822B_2ANT_LTECOEX_INDIRECTREG_ACCESS_TIMEOUT 30000
67
68enum bt_8822b_2ant_signal_state {
69 BT_8822B_2ANT_SIG_STA_SET_TO_LOW = 0x0,
70 BT_8822B_2ANT_SIG_STA_SET_BY_HW = 0x0,
71 BT_8822B_2ANT_SIG_STA_SET_TO_HIGH = 0x1,
72 BT_8822B_2ANT_SIG_STA_MAX
73};
74
75enum bt_8822b_2ant_path_ctrl_owner {
76 BT_8822B_2ANT_PCO_BTSIDE = 0x0,
77 BT_8822B_2ANT_PCO_WLSIDE = 0x1,
78 BT_8822B_2ANT_PCO_MAX
79};
80
81enum bt_8822b_2ant_gnt_ctrl_type {
82 BT_8822B_2ANT_GNT_TYPE_CTRL_BY_PTA = 0x0,
83 BT_8822B_2ANT_GNT_TYPE_CTRL_BY_SW = 0x1,
84 BT_8822B_2ANT_GNT_TYPE_MAX
85};
86
87enum bt_8822b_2ant_gnt_ctrl_block {
88 BT_8822B_2ANT_GNT_BLOCK_RFC_BB = 0x0,
89 BT_8822B_2ANT_GNT_BLOCK_RFC = 0x1,
90 BT_8822B_2ANT_GNT_BLOCK_BB = 0x2,
91 BT_8822B_2ANT_GNT_BLOCK_MAX
92};
93
94enum bt_8822b_2ant_lte_coex_table_type {
95 BT_8822B_2ANT_CTT_WL_VS_LTE = 0x0,
96 BT_8822B_2ANT_CTT_BT_VS_LTE = 0x1,
97 BT_8822B_2ANT_CTT_MAX
98};
99
100enum bt_8822b_2ant_lte_break_table_type {
101 BT_8822B_2ANT_LBTT_WL_BREAK_LTE = 0x0,
102 BT_8822B_2ANT_LBTT_BT_BREAK_LTE = 0x1,
103 BT_8822B_2ANT_LBTT_LTE_BREAK_WL = 0x2,
104 BT_8822B_2ANT_LBTT_LTE_BREAK_BT = 0x3,
105 BT_8822B_2ANT_LBTT_MAX
106};
107
108enum bt_info_src_8822b_2ant {
109 BT_INFO_SRC_8822B_2ANT_WIFI_FW = 0x0,
110 BT_INFO_SRC_8822B_2ANT_BT_RSP = 0x1,
111 BT_INFO_SRC_8822B_2ANT_BT_ACTIVE_SEND = 0x2,
112 BT_INFO_SRC_8822B_2ANT_MAX
113};
114
115enum bt_8822b_2ant_bt_status {
116 BT_8822B_2ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
117 BT_8822B_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
118 BT_8822B_2ANT_BT_STATUS_INQ_PAGE = 0x2,
119 BT_8822B_2ANT_BT_STATUS_ACL_BUSY = 0x3,
120 BT_8822B_2ANT_BT_STATUS_SCO_BUSY = 0x4,
121 BT_8822B_2ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
122 BT_8822B_2ANT_BT_STATUS_MAX
123};
124
125enum bt_8822b_2ant_coex_algo {
126 BT_8822B_2ANT_COEX_ALGO_UNDEFINED = 0x0,
127 BT_8822B_2ANT_COEX_ALGO_SCO = 0x1,
128 BT_8822B_2ANT_COEX_ALGO_HID = 0x2,
129 BT_8822B_2ANT_COEX_ALGO_A2DP = 0x3,
130 BT_8822B_2ANT_COEX_ALGO_A2DP_PANHS = 0x4,
131 BT_8822B_2ANT_COEX_ALGO_PANEDR = 0x5,
132 BT_8822B_2ANT_COEX_ALGO_PANHS = 0x6,
133 BT_8822B_2ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
134 BT_8822B_2ANT_COEX_ALGO_PANEDR_HID = 0x8,
135 BT_8822B_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
136 BT_8822B_2ANT_COEX_ALGO_HID_A2DP = 0xa,
137 BT_8822B_2ANT_COEX_ALGO_NOPROFILEBUSY = 0xb,
138 BT_8822B_2ANT_COEX_ALGO_A2DPSINK = 0xc,
139 BT_8822B_2ANT_COEX_ALGO_MAX
140};
141
142enum bt_8822b_2ant_ext_ant_switch_type {
143 BT_8822B_2ANT_EXT_ANT_SWITCH_USE_DPDT = 0x0,
144 BT_8822B_2ANT_EXT_ANT_SWITCH_USE_SPDT = 0x1,
145 BT_8822B_2ANT_EXT_ANT_SWITCH_NONE = 0x2,
146 BT_8822B_2ANT_EXT_ANT_SWITCH_MAX
147};
148
149enum bt_8822b_2ant_ext_ant_switch_ctrl_type {
150 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_BY_BBSW = 0x0,
151 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_BY_PTA = 0x1,
152 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_BY_ANTDIV = 0x2,
153 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_BY_MAC = 0x3,
154 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_BY_BT = 0x4,
155 BT_8822B_2ANT_EXT_ANT_SWITCH_CTRL_MAX
156};
157
158enum bt_8822b_2ant_ext_ant_switch_pos_type {
159 BT_8822B_2ANT_EXT_ANT_SWITCH_MAIN_TO_BT = 0x0,
160 BT_8822B_2ANT_EXT_ANT_SWITCH_MAIN_TO_WLG = 0x1,
161 BT_8822B_2ANT_EXT_ANT_SWITCH_MAIN_TO_WLA = 0x2,
162 BT_8822B_2ANT_EXT_ANT_SWITCH_MAIN_TO_NOCARE = 0x3,
163 BT_8822B_2ANT_EXT_ANT_SWITCH_MAIN_TO_MAX
164};
165
166enum bt_8822b_2ant_ext_band_switch_pos_type {
167 BT_8822B_2ANT_EXT_BAND_SWITCH_TO_WLG = 0x0,
168 BT_8822B_2ANT_EXT_BAND_SWITCH_TO_WLA = 0x1,
169 BT_8822B_2ANT_EXT_BAND_SWITCH_TO_MAX
170};
171
172enum bt_8822b_2ant_int_block {
173 BT_8822B_2ANT_INT_BLOCK_SWITCH_TO_WLG_OF_BTG = 0x0,
174 BT_8822B_2ANT_INT_BLOCK_SWITCH_TO_WLG_OF_WLAG = 0x1,
175 BT_8822B_2ANT_INT_BLOCK_SWITCH_TO_WLA_OF_WLAG = 0x2,
176 BT_8822B_2ANT_INT_BLOCK_SWITCH_TO_MAX
177};
178
179enum bt_8822b_2ant_phase {
180 BT_8822B_2ANT_PHASE_COEX_INIT = 0x0,
181 BT_8822B_2ANT_PHASE_WLANONLY_INIT = 0x1,
182 BT_8822B_2ANT_PHASE_WLAN_OFF = 0x2,
183 BT_8822B_2ANT_PHASE_2G_RUNTIME = 0x3,
184 BT_8822B_2ANT_PHASE_5G_RUNTIME = 0x4,
185 BT_8822B_2ANT_PHASE_BTMPMODE = 0x5,
186 BT_8822B_2ANT_PHASE_ANTENNA_DET = 0x6,
187 BT_8822B_2ANT_PHASE_COEX_POWERON = 0x7,
188 BT_8822B_2ANT_PHASE_2G_RUNTIME_CONCURRENT = 0x8,
189 BT_8822B_2ANT_PHASE_MAX
190};
191
192
193
194enum bt_8822b_2ant_scoreboard {
195 BT_8822B_2ANT_SCOREBOARD_ACTIVE = BIT(0),
196 BT_8822B_2ANT_SCOREBOARD_ONOFF = BIT(1),
197 BT_8822B_2ANT_SCOREBOARD_SCAN = BIT(2),
198 BT_8822B_2ANT_SCOREBOARD_UNDERTEST = BIT(3),
199 BT_8822B_2ANT_SCOREBOARD_WLBUSY = BIT(6)
200};
201
202struct coex_dm_8822b_2ant {
203
204 u32 pre_ant_pos_type;
205 u32 cur_ant_pos_type;
206
207 u8 pre_bt_dec_pwr_lvl;
208 u8 cur_bt_dec_pwr_lvl;
209 u8 pre_fw_dac_swing_lvl;
210 u8 cur_fw_dac_swing_lvl;
211 bool cur_ignore_wlan_act;
212 bool pre_ignore_wlan_act;
213 u8 pre_ps_tdma;
214 u8 cur_ps_tdma;
215 u8 ps_tdma_para[5];
216 u8 ps_tdma_du_adj_type;
217 bool reset_tdma_adjust;
218 bool pre_ps_tdma_on;
219 bool cur_ps_tdma_on;
220 bool pre_bt_auto_report;
221 bool cur_bt_auto_report;
222
223
224 bool pre_rf_rx_lpf_shrink;
225 bool cur_rf_rx_lpf_shrink;
226 u32 bt_rf_0x1e_backup;
227 bool pre_low_penalty_ra;
228 bool cur_low_penalty_ra;
229 bool pre_dac_swing_on;
230 u32 pre_dac_swing_lvl;
231 bool cur_dac_swing_on;
232 u32 cur_dac_swing_lvl;
233 bool pre_adc_back_off;
234 bool cur_adc_back_off;
235 bool pre_agc_table_en;
236 bool cur_agc_table_en;
237 u32 pre_val0x6c0;
238 u32 cur_val0x6c0;
239 u32 pre_val0x6c4;
240 u32 cur_val0x6c4;
241 u32 pre_val0x6c8;
242 u32 cur_val0x6c8;
243 u8 pre_val0x6cc;
244 u8 cur_val0x6cc;
245 bool limited_dig;
246
247
248 u8 pre_algorithm;
249 u8 cur_algorithm;
250 u8 bt_status;
251 u8 wifi_chnl_info[3];
252
253 bool need_recover0x948;
254 u32 backup0x948;
255
256 u8 pre_lps;
257 u8 cur_lps;
258 u8 pre_rpwm;
259 u8 cur_rpwm;
260
261 bool is_switch_to_1dot5_ant;
262 u8 switch_thres_offset;
263 u32 arp_cnt;
264
265 u32 pre_ext_ant_switch_status;
266 u32 cur_ext_ant_switch_status;
267
268 u8 pre_ext_band_switch_status;
269 u8 cur_ext_band_switch_status;
270
271 u8 pre_int_block_status;
272 u8 cur_int_block_status;
273};
274
275struct coex_sta_8822b_2ant {
276 bool bt_disabled;
277 bool bt_link_exist;
278 bool sco_exist;
279 bool a2dp_exist;
280 bool hid_exist;
281 bool pan_exist;
282
283 bool under_lps;
284 bool under_ips;
285 u32 high_priority_tx;
286 u32 high_priority_rx;
287 u32 low_priority_tx;
288 u32 low_priority_rx;
289 bool is_hi_pri_rx_overhead;
290 u8 bt_rssi;
291 u8 pre_bt_rssi_state;
292 u8 pre_wifi_rssi_state[4];
293 u8 bt_info_c2h[BT_INFO_SRC_8822B_2ANT_MAX][10];
294 u32 bt_info_c2h_cnt[BT_INFO_SRC_8822B_2ANT_MAX];
295 bool bt_whck_test;
296 bool c2h_bt_inquiry_page;
297 bool c2h_bt_remote_name_req;
298
299 u8 bt_info_ext;
300 u8 bt_info_ext2;
301 u32 pop_event_cnt;
302 u8 scan_ap_num;
303 u8 bt_retry_cnt;
304
305 u32 crc_ok_cck;
306 u32 crc_ok_11g;
307 u32 crc_ok_11n;
308 u32 crc_ok_11n_vht;
309
310 u32 crc_err_cck;
311 u32 crc_err_11g;
312 u32 crc_err_11n;
313 u32 crc_err_11n_vht;
314
315 u32 acc_crc_ratio;
316 u32 now_crc_ratio;
317
318 bool cck_lock;
319 bool pre_ccklock;
320 bool cck_ever_lock;
321
322 u8 coex_table_type;
323 bool force_lps_ctrl;
324
325 u8 dis_ver_info_cnt;
326
327 u8 a2dp_bit_pool;
328 u8 cut_version;
329
330 bool concurrent_rx_mode_on;
331
332 u16 score_board;
333 u8 isolation_btween_wb;
334 u8 wifi_coex_thres;
335 u8 bt_coex_thres;
336 u8 wifi_coex_thres2;
337 u8 bt_coex_thres2;
338
339 u8 num_of_profile;
340 bool acl_busy;
341 bool bt_create_connection;
342 bool wifi_is_high_pri_task;
343 u32 specific_pkt_period_cnt;
344 u32 bt_coex_supported_feature;
345 u32 bt_coex_supported_version;
346
347 u8 bt_ble_scan_type;
348 u32 bt_ble_scan_para[3];
349
350 bool run_time_state;
351 bool freeze_coexrun_by_btinfo;
352
353 bool is_A2DP_3M;
354 bool voice_over_HOGP;
355 u8 bt_info;
356 bool is_autoslot;
357 u8 forbidden_slot;
358 u8 hid_busy_num;
359 u8 hid_pair_cnt;
360
361 u32 cnt_remote_name_req;
362 u32 cnt_setup_link;
363 u32 cnt_reinit;
364 u32 cnt_ign_wlan_act;
365 u32 cnt_page;
366 u32 cnt_role_switch;
367
368 u16 bt_reg_vendor_ac;
369 u16 bt_reg_vendor_ae;
370
371 bool is_setup_link;
372 u8 wl_noisy_level;
373 u32 gnt_error_cnt;
374
375 u8 bt_afh_map[10];
376 u8 bt_relink_downcount;
377 bool is_tdma_btautoslot;
378 bool is_tdma_btautoslot_hang;
379
380 bool is_esco_mode;
381 u8 switch_band_notify_to;
382 bool is_rf_state_off;
383
384 bool is_hid_low_pri_tx_overhead;
385 bool is_bt_multi_link;
386 bool is_bt_a2dp_sink;
387
388 bool is_set_ps_state_fail;
389 u8 cnt_set_ps_state_fail;
390};
391
392#define BT_8822B_2ANT_EXT_BAND_SWITCH_USE_DPDT 0
393#define BT_8822B_2ANT_EXT_BAND_SWITCH_USE_SPDT 1
394
395struct rfe_type_8822b_2ant {
396 u8 rfe_module_type;
397 bool ext_ant_switch_exist;
398 u8 ext_ant_switch_type;
399
400 u8 ext_ant_switch_ctrl_polarity;
401
402 bool ext_band_switch_exist;
403 u8 ext_band_switch_type;
404 u8 ext_band_switch_ctrl_polarity;
405
406
407 bool wlg_locate_at_btg;
408
409 bool ext_ant_switch_diversity;
410};
411
412#define BT_8822B_2ANT_ANTDET_PSD_POINTS 256
413#define BT_8822B_2ANT_ANTDET_PSD_AVGNUM 1
414#define BT_8822B_2ANT_ANTDET_BUF_LEN 16
415
416struct psdscan_sta_8822b_2ant {
417 u32 ant_det_bt_le_channel;
418 u32 ant_det_bt_tx_time;
419 u32 ant_det_pre_psdscan_peak_val;
420 bool ant_det_is_ant_det_available;
421 u32 ant_det_psd_scan_peak_val;
422 bool ant_det_is_btreply_available;
423 u32 ant_det_psd_scan_peak_freq;
424
425 u8 ant_det_result;
426 u8 ant_det_peak_val[BT_8822B_2ANT_ANTDET_BUF_LEN];
427 u8 ant_det_peak_freq[BT_8822B_2ANT_ANTDET_BUF_LEN];
428 u32 ant_det_try_count;
429 u32 ant_det_fail_count;
430 u32 ant_det_inteval_count;
431 u32 ant_det_thres_offset;
432
433 u32 real_cent_freq;
434 s32 real_offset;
435 u32 real_span;
436
437 u32 psd_band_width;
438 u32 psd_point;
439 u32 psd_report[1024];
440 u32 psd_report_max_hold[1024];
441 u32 psd_start_point;
442 u32 psd_stop_point;
443 u32 psd_max_value_point;
444 u32 psd_max_value;
445 u32 psd_max_value2;
446
447
448
449 u32 psd_avg_value;
450
451 u32 psd_loop_max_value[BT_8822B_2ANT_ANTDET_PSD_SWWEEPCOUNT];
452 u32 psd_start_base;
453 u32 psd_avg_num;
454 u32 psd_gen_count;
455 bool is_ant_det_running;
456 bool is_psd_show_max_only;
457};
458
459
460
461
462void ex_btc8822b2ant_power_on_setting(struct btc_coexist *btcoexist);
463void ex_btc8822b2ant_pre_load_firmware(struct btc_coexist *btcoexist);
464void ex_btc8822b2ant_init_hw_config(struct btc_coexist *btcoexist,
465 bool wifi_only);
466void ex_btc8822b2ant_init_coex_dm(struct btc_coexist *btcoexist);
467void ex_btc8822b2ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
468void ex_btc8822b2ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
469void ex_btc8822b2ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
470void ex_btc8822b2ant_switchband_notify(struct btc_coexist *btcoexist, u8 type);
471void ex_btc8822b2ant_connect_notify(struct btc_coexist *btcoexist, u8 type);
472void ex_btc8822b2ant_media_status_notify(struct btc_coexist *btcoexist,
473 u8 type);
474void ex_btc8822b2ant_specific_packet_notify(struct btc_coexist *btcoexist,
475 u8 type);
476void ex_btc8822b2ant_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
477 u8 length);
478void ex_btc8822b2ant_rf_status_notify(struct btc_coexist *btcoexist, u8 type);
479void ex_btc8822b2ant_halt_notify(struct btc_coexist *btcoexist);
480void ex_btc8822b2ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
481void ex_btc8822b2ant_periodical(struct btc_coexist *btcoexist);
482void ex_btc8822b2ant_display_coex_info(struct btc_coexist *btcoexist,
483 struct seq_file *m);
484void ex_btc8822b2ant_antenna_detection(struct btc_coexist *btcoexist,
485 u32 cent_freq, u32 offset, u32 span,
486 u32 seconds);
487void ex_btc8822b2ant_display_ant_detection(struct btc_coexist *btcoexist);
488