Lines Matching refs:rtwdev

21 static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path,
30 static int rtw8822c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) in rtw8822c_read_efuse() argument
32 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_read_efuse()
55 switch (rtw_hci_type(rtwdev)) { in rtw8822c_read_efuse()
67 static void rtw8822c_header_file_init(struct rtw_dev *rtwdev, bool pre) in rtw8822c_header_file_init() argument
69 rtw_write32_set(rtwdev, REG_3WIRE, BIT_3WIRE_TX_EN | BIT_3WIRE_RX_EN); in rtw8822c_header_file_init()
70 rtw_write32_set(rtwdev, REG_3WIRE, BIT_3WIRE_PI_ON); in rtw8822c_header_file_init()
71 rtw_write32_set(rtwdev, REG_3WIRE2, BIT_3WIRE_TX_EN | BIT_3WIRE_RX_EN); in rtw8822c_header_file_init()
72 rtw_write32_set(rtwdev, REG_3WIRE2, BIT_3WIRE_PI_ON); in rtw8822c_header_file_init()
75 rtw_write32_clr(rtwdev, REG_ENCCK, BIT_CCK_OFDM_BLK_EN); in rtw8822c_header_file_init()
77 rtw_write32_set(rtwdev, REG_ENCCK, BIT_CCK_OFDM_BLK_EN); in rtw8822c_header_file_init()
80 static void rtw8822c_dac_backup_reg(struct rtw_dev *rtwdev, in rtw8822c_dac_backup_reg() argument
96 backup[i].val = rtw_read32(rtwdev, addrs[i]); in rtw8822c_dac_backup_reg()
102 val = rtw_read_rf(rtwdev, path, reg, RFREG_MASK); in rtw8822c_dac_backup_reg()
109 static void rtw8822c_dac_restore_reg(struct rtw_dev *rtwdev, in rtw8822c_dac_restore_reg() argument
117 rtw_restore_reg(rtwdev, backup, DACK_REG_8822C); in rtw8822c_dac_restore_reg()
123 rtw_write_rf(rtwdev, path, reg, RFREG_MASK, val); in rtw8822c_dac_restore_reg()
128 static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtwdev, u32 value, in rtw8822c_rf_minmax_cmp() argument
157 static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *v1, u32 *v2) in __rtw8822c_dac_iq_sort() argument
170 static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *iv, u32 *qv) in rtw8822c_dac_iq_sort() argument
176 __rtw8822c_dac_iq_sort(rtwdev, &iv[j], &iv[j + 1]); in rtw8822c_dac_iq_sort()
177 __rtw8822c_dac_iq_sort(rtwdev, &qv[j], &qv[j + 1]); in rtw8822c_dac_iq_sort()
182 static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, u32 *vec, u32 *val) in rtw8822c_dac_iq_offset() argument
246 static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, u32 value) in rtw8822c_dac_iq_check() argument
253 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] Error overflow\n"); in rtw8822c_dac_iq_check()
259 static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, u32 *iv, u32 *qv) in rtw8822c_dac_cal_iq_sample() argument
266 temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); in rtw8822c_dac_cal_iq_sample()
270 if (rtw8822c_dac_iq_check(rtwdev, iv[i]) && in rtw8822c_dac_cal_iq_sample()
271 rtw8822c_dac_iq_check(rtwdev, qv[i])) in rtw8822c_dac_cal_iq_sample()
276 static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_iq_search() argument
291 rtw8822c_rf_minmax_cmp(rtwdev, iv[i], &i_min, &i_max); in rtw8822c_dac_cal_iq_search()
292 rtw8822c_rf_minmax_cmp(rtwdev, qv[i], &q_min, &q_max); in rtw8822c_dac_cal_iq_search()
309 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dac_cal_iq_search()
312 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dac_cal_iq_search()
316 rtw8822c_dac_iq_sort(rtwdev, iv, qv); in rtw8822c_dac_cal_iq_search()
319 temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); in rtw8822c_dac_cal_iq_search()
322 temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); in rtw8822c_dac_cal_iq_search()
330 rtw8822c_dac_iq_offset(rtwdev, iv, i_value); in rtw8822c_dac_cal_iq_search()
331 rtw8822c_dac_iq_offset(rtwdev, qv, q_value); in rtw8822c_dac_cal_iq_search()
334 static void rtw8822c_dac_cal_rf_mode(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_rf_mode() argument
340 rf_a = rtw_read_rf(rtwdev, RF_PATH_A, 0x0, RFREG_MASK); in rtw8822c_dac_cal_rf_mode()
341 rf_b = rtw_read_rf(rtwdev, RF_PATH_B, 0x0, RFREG_MASK); in rtw8822c_dac_cal_rf_mode()
343 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-A=0x%05x\n", rf_a); in rtw8822c_dac_cal_rf_mode()
344 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-B=0x%05x\n", rf_b); in rtw8822c_dac_cal_rf_mode()
346 rtw8822c_dac_cal_iq_sample(rtwdev, iv, qv); in rtw8822c_dac_cal_rf_mode()
347 rtw8822c_dac_cal_iq_search(rtwdev, iv, qv, i_value, q_value); in rtw8822c_dac_cal_rf_mode()
350 static void rtw8822c_dac_bb_setting(struct rtw_dev *rtwdev) in rtw8822c_dac_bb_setting() argument
352 rtw_write32_mask(rtwdev, 0x1d58, 0xff8, 0x1ff); in rtw8822c_dac_bb_setting()
353 rtw_write32_mask(rtwdev, 0x1a00, 0x3, 0x2); in rtw8822c_dac_bb_setting()
354 rtw_write32_mask(rtwdev, 0x1a14, 0x300, 0x3); in rtw8822c_dac_bb_setting()
355 rtw_write32(rtwdev, 0x1d70, 0x7e7e7e7e); in rtw8822c_dac_bb_setting()
356 rtw_write32_mask(rtwdev, 0x180c, 0x3, 0x0); in rtw8822c_dac_bb_setting()
357 rtw_write32_mask(rtwdev, 0x410c, 0x3, 0x0); in rtw8822c_dac_bb_setting()
358 rtw_write32(rtwdev, 0x1b00, 0x00000008); in rtw8822c_dac_bb_setting()
359 rtw_write8(rtwdev, 0x1bcc, 0x3f); in rtw8822c_dac_bb_setting()
360 rtw_write32(rtwdev, 0x1b00, 0x0000000a); in rtw8822c_dac_bb_setting()
361 rtw_write8(rtwdev, 0x1bcc, 0x3f); in rtw8822c_dac_bb_setting()
362 rtw_write32_mask(rtwdev, 0x1e24, BIT(31), 0x0); in rtw8822c_dac_bb_setting()
363 rtw_write32_mask(rtwdev, 0x1e28, 0xf, 0x3); in rtw8822c_dac_bb_setting()
366 static void rtw8822c_dac_cal_adc(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_adc() argument
369 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_adc()
375 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK path(%d)\n", path); in rtw8822c_dac_cal_adc()
391 rtw_write32_mask(rtwdev, base_addr + 0x30, BIT(30), 0x0); in rtw8822c_dac_cal_adc()
393 rtw_write32(rtwdev, base_addr + 0x30, 0x30db8041); in rtw8822c_dac_cal_adc()
394 rtw_write32(rtwdev, base_addr + 0x60, 0xf0040ff0); in rtw8822c_dac_cal_adc()
395 rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); in rtw8822c_dac_cal_adc()
396 rtw_write32(rtwdev, base_addr + 0x10, 0x02dd08c4); in rtw8822c_dac_cal_adc()
397 rtw_write32(rtwdev, base_addr + 0x0c, 0x10000260); in rtw8822c_dac_cal_adc()
398 rtw_write_rf(rtwdev, RF_PATH_A, 0x0, RFREG_MASK, 0x10000); in rtw8822c_dac_cal_adc()
399 rtw_write_rf(rtwdev, RF_PATH_B, 0x0, RFREG_MASK, 0x10000); in rtw8822c_dac_cal_adc()
401 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK count=%d\n", i); in rtw8822c_dac_cal_adc()
402 rtw_write32(rtwdev, 0x1c3c, path_sel + 0x8003); in rtw8822c_dac_cal_adc()
403 rtw_write32(rtwdev, 0x1c24, 0x00010002); in rtw8822c_dac_cal_adc()
404 rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); in rtw8822c_dac_cal_adc()
405 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dac_cal_adc()
418 rtw_write32(rtwdev, base_addr + 0x68, temp); in rtw8822c_dac_cal_adc()
420 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK 0x%08x=0x08%x\n", in rtw8822c_dac_cal_adc()
423 rtw_write32(rtwdev, 0x1c3c, path_sel + 0x8103); in rtw8822c_dac_cal_adc()
424 rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); in rtw8822c_dac_cal_adc()
425 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dac_cal_adc()
436 rtw_write32(rtwdev, 0x1c3c, 0x00000003); in rtw8822c_dac_cal_adc()
437 rtw_write32(rtwdev, base_addr + 0x0c, 0x10000260); in rtw8822c_dac_cal_adc()
438 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c4); in rtw8822c_dac_cal_adc()
441 rtw_write_rf(rtwdev, path, 0x8f, BIT(13), 0x1); in rtw8822c_dac_cal_adc()
444 static void rtw8822c_dac_cal_step1(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_step1() argument
446 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_step1()
453 rtw_write32(rtwdev, base_addr + 0x68, dm_info->dack_adck[path]); in rtw8822c_dac_cal_step1()
454 rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); in rtw8822c_dac_cal_step1()
456 rtw_write32(rtwdev, base_addr + 0x60, 0xf0040ff0); in rtw8822c_dac_cal_step1()
457 rtw_write32(rtwdev, 0x1c38, 0xffffffff); in rtw8822c_dac_cal_step1()
459 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); in rtw8822c_dac_cal_step1()
460 rtw_write32(rtwdev, 0x9b4, 0xdb66db00); in rtw8822c_dac_cal_step1()
461 rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb88); in rtw8822c_dac_cal_step1()
462 rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff81); in rtw8822c_dac_cal_step1()
463 rtw_write32(rtwdev, base_addr + 0xc0, 0x0003d208); in rtw8822c_dac_cal_step1()
464 rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb88); in rtw8822c_dac_cal_step1()
465 rtw_write32(rtwdev, base_addr + 0xd8, 0x0008ff81); in rtw8822c_dac_cal_step1()
466 rtw_write32(rtwdev, base_addr + 0xdc, 0x0003d208); in rtw8822c_dac_cal_step1()
467 rtw_write32(rtwdev, base_addr + 0xb8, 0x60000000); in rtw8822c_dac_cal_step1()
469 rtw_write32(rtwdev, base_addr + 0xbc, 0x000aff8d); in rtw8822c_dac_cal_step1()
471 rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb89); in rtw8822c_dac_cal_step1()
472 rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb89); in rtw8822c_dac_cal_step1()
474 rtw_write32(rtwdev, base_addr + 0xb8, 0x62000000); in rtw8822c_dac_cal_step1()
475 rtw_write32(rtwdev, base_addr + 0xd4, 0x62000000); in rtw8822c_dac_cal_step1()
477 if (!check_hw_ready(rtwdev, read_addr + 0x08, 0x7fff80, 0xffff) || in rtw8822c_dac_cal_step1()
478 !check_hw_ready(rtwdev, read_addr + 0x34, 0x7fff80, 0xffff)) in rtw8822c_dac_cal_step1()
479 rtw_err(rtwdev, "failed to wait for dack ready\n"); in rtw8822c_dac_cal_step1()
480 rtw_write32(rtwdev, base_addr + 0xb8, 0x02000000); in rtw8822c_dac_cal_step1()
482 rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff87); in rtw8822c_dac_cal_step1()
483 rtw_write32(rtwdev, 0x9b4, 0xdb6db600); in rtw8822c_dac_cal_step1()
484 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); in rtw8822c_dac_cal_step1()
485 rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff87); in rtw8822c_dac_cal_step1()
486 rtw_write32(rtwdev, base_addr + 0x60, 0xf0000000); in rtw8822c_dac_cal_step1()
489 static void rtw8822c_dac_cal_step2(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_step2() argument
496 rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xf0000000, 0x0); in rtw8822c_dac_cal_step2()
497 rtw_write32_mask(rtwdev, base_addr + 0xc0, 0xf, 0x8); in rtw8822c_dac_cal_step2()
498 rtw_write32_mask(rtwdev, base_addr + 0xd8, 0xf0000000, 0x0); in rtw8822c_dac_cal_step2()
499 rtw_write32_mask(rtwdev, base_addr + 0xdc, 0xf, 0x8); in rtw8822c_dac_cal_step2()
501 rtw_write32(rtwdev, 0x1b00, 0x00000008); in rtw8822c_dac_cal_step2()
502 rtw_write8(rtwdev, 0x1bcc, 0x03f); in rtw8822c_dac_cal_step2()
503 rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); in rtw8822c_dac_cal_step2()
504 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); in rtw8822c_dac_cal_step2()
505 rtw_write32(rtwdev, 0x1c3c, 0x00088103); in rtw8822c_dac_cal_step2()
507 rtw8822c_dac_cal_rf_mode(rtwdev, &ic_in, &qc_in); in rtw8822c_dac_cal_step2()
534 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] before i=0x%x, q=0x%x\n", ic_in, qc_in); in rtw8822c_dac_cal_step2()
535 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] after i=0x%x, q=0x%x\n", ic, qc); in rtw8822c_dac_cal_step2()
538 static void rtw8822c_dac_cal_step3(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dac_cal_step3() argument
553 rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); in rtw8822c_dac_cal_step3()
554 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); in rtw8822c_dac_cal_step3()
555 rtw_write32(rtwdev, 0x9b4, 0xdb66db00); in rtw8822c_dac_cal_step3()
556 rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb88); in rtw8822c_dac_cal_step3()
557 rtw_write32(rtwdev, base_addr + 0xbc, 0xc008ff81); in rtw8822c_dac_cal_step3()
558 rtw_write32(rtwdev, base_addr + 0xc0, 0x0003d208); in rtw8822c_dac_cal_step3()
559 rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xf0000000, ic & 0xf); in rtw8822c_dac_cal_step3()
560 rtw_write32_mask(rtwdev, base_addr + 0xc0, 0xf, (ic & 0xf0) >> 4); in rtw8822c_dac_cal_step3()
561 rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb88); in rtw8822c_dac_cal_step3()
562 rtw_write32(rtwdev, base_addr + 0xd8, 0xe008ff81); in rtw8822c_dac_cal_step3()
563 rtw_write32(rtwdev, base_addr + 0xdc, 0x0003d208); in rtw8822c_dac_cal_step3()
564 rtw_write32_mask(rtwdev, base_addr + 0xd8, 0xf0000000, qc & 0xf); in rtw8822c_dac_cal_step3()
565 rtw_write32_mask(rtwdev, base_addr + 0xdc, 0xf, (qc & 0xf0) >> 4); in rtw8822c_dac_cal_step3()
566 rtw_write32(rtwdev, base_addr + 0xb8, 0x60000000); in rtw8822c_dac_cal_step3()
568 rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xe, 0x6); in rtw8822c_dac_cal_step3()
570 rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb89); in rtw8822c_dac_cal_step3()
571 rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb89); in rtw8822c_dac_cal_step3()
573 rtw_write32(rtwdev, base_addr + 0xb8, 0x62000000); in rtw8822c_dac_cal_step3()
574 rtw_write32(rtwdev, base_addr + 0xd4, 0x62000000); in rtw8822c_dac_cal_step3()
576 if (!check_hw_ready(rtwdev, read_addr + 0x24, 0x07f80000, ic) || in rtw8822c_dac_cal_step3()
577 !check_hw_ready(rtwdev, read_addr + 0x50, 0x07f80000, qc)) in rtw8822c_dac_cal_step3()
578 rtw_err(rtwdev, "failed to write IQ vector to hardware\n"); in rtw8822c_dac_cal_step3()
579 rtw_write32(rtwdev, base_addr + 0xb8, 0x02000000); in rtw8822c_dac_cal_step3()
581 rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xe, 0x3); in rtw8822c_dac_cal_step3()
582 rtw_write32(rtwdev, 0x9b4, 0xdb6db600); in rtw8822c_dac_cal_step3()
586 rtw_write32(rtwdev, base_addr + 0x68, temp); in rtw8822c_dac_cal_step3()
587 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); in rtw8822c_dac_cal_step3()
588 rtw_write32(rtwdev, base_addr + 0x60, 0xf0000000); in rtw8822c_dac_cal_step3()
589 rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); in rtw8822c_dac_cal_step3()
611 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dac_cal_step3()
615 static void rtw8822c_dac_cal_step4(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_step4() argument
619 rtw_write32(rtwdev, base_addr + 0x68, 0x0); in rtw8822c_dac_cal_step4()
620 rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c4); in rtw8822c_dac_cal_step4()
621 rtw_write32_mask(rtwdev, base_addr + 0xbc, 0x1, 0x0); in rtw8822c_dac_cal_step4()
622 rtw_write32_mask(rtwdev, base_addr + 0x30, BIT(30), 0x1); in rtw8822c_dac_cal_step4()
625 static void rtw8822c_dac_cal_backup_vec(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_backup_vec() argument
628 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_backup_vec()
636 rtw_write32_mask(rtwdev, w_addr, 0xf0000000, i); in rtw8822c_dac_cal_backup_vec()
637 val = (u16)rtw_read32_mask(rtwdev, r_addr, 0x7fc0000); in rtw8822c_dac_cal_backup_vec()
642 static void rtw8822c_dac_cal_backup_path(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_backup_path() argument
654 rtw8822c_dac_cal_backup_vec(rtwdev, path, 0, w_addr, r_addr); in rtw8822c_dac_cal_backup_path()
659 rtw8822c_dac_cal_backup_vec(rtwdev, path, 1, w_addr, r_addr); in rtw8822c_dac_cal_backup_path()
662 static void rtw8822c_dac_cal_backup_dck(struct rtw_dev *rtwdev) in rtw8822c_dac_cal_backup_dck() argument
664 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_backup_dck()
667 val = (u8)rtw_read32_mask(rtwdev, REG_DCKA_I_0, 0xf0000000); in rtw8822c_dac_cal_backup_dck()
669 val = (u8)rtw_read32_mask(rtwdev, REG_DCKA_I_1, 0xf); in rtw8822c_dac_cal_backup_dck()
671 val = (u8)rtw_read32_mask(rtwdev, REG_DCKA_Q_0, 0xf0000000); in rtw8822c_dac_cal_backup_dck()
673 val = (u8)rtw_read32_mask(rtwdev, REG_DCKA_Q_1, 0xf); in rtw8822c_dac_cal_backup_dck()
676 val = (u8)rtw_read32_mask(rtwdev, REG_DCKB_I_0, 0xf0000000); in rtw8822c_dac_cal_backup_dck()
678 val = (u8)rtw_read32_mask(rtwdev, REG_DCKB_I_1, 0xf); in rtw8822c_dac_cal_backup_dck()
680 val = (u8)rtw_read32_mask(rtwdev, REG_DCKB_Q_0, 0xf0000000); in rtw8822c_dac_cal_backup_dck()
682 val = (u8)rtw_read32_mask(rtwdev, REG_DCKB_Q_1, 0xf); in rtw8822c_dac_cal_backup_dck()
686 static void rtw8822c_dac_cal_backup(struct rtw_dev *rtwdev) in rtw8822c_dac_cal_backup() argument
690 temp[0] = rtw_read32(rtwdev, 0x1860); in rtw8822c_dac_cal_backup()
691 temp[1] = rtw_read32(rtwdev, 0x4160); in rtw8822c_dac_cal_backup()
692 temp[2] = rtw_read32(rtwdev, 0x9b4); in rtw8822c_dac_cal_backup()
695 rtw_write32(rtwdev, 0x9b4, 0xdb66db00); in rtw8822c_dac_cal_backup()
698 rtw_write32_clr(rtwdev, 0x1830, BIT(30)); in rtw8822c_dac_cal_backup()
699 rtw_write32_mask(rtwdev, 0x1860, 0xfc000000, 0x3c); in rtw8822c_dac_cal_backup()
700 rtw8822c_dac_cal_backup_path(rtwdev, RF_PATH_A); in rtw8822c_dac_cal_backup()
703 rtw_write32_clr(rtwdev, 0x4130, BIT(30)); in rtw8822c_dac_cal_backup()
704 rtw_write32_mask(rtwdev, 0x4160, 0xfc000000, 0x3c); in rtw8822c_dac_cal_backup()
705 rtw8822c_dac_cal_backup_path(rtwdev, RF_PATH_B); in rtw8822c_dac_cal_backup()
707 rtw8822c_dac_cal_backup_dck(rtwdev); in rtw8822c_dac_cal_backup()
708 rtw_write32_set(rtwdev, 0x1830, BIT(30)); in rtw8822c_dac_cal_backup()
709 rtw_write32_set(rtwdev, 0x4130, BIT(30)); in rtw8822c_dac_cal_backup()
711 rtw_write32(rtwdev, 0x1860, temp[0]); in rtw8822c_dac_cal_backup()
712 rtw_write32(rtwdev, 0x4160, temp[1]); in rtw8822c_dac_cal_backup()
713 rtw_write32(rtwdev, 0x9b4, temp[2]); in rtw8822c_dac_cal_backup()
716 static void rtw8822c_dac_cal_restore_dck(struct rtw_dev *rtwdev) in rtw8822c_dac_cal_restore_dck() argument
718 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore_dck()
721 rtw_write32_set(rtwdev, REG_DCKA_I_0, BIT(19)); in rtw8822c_dac_cal_restore_dck()
723 rtw_write32_mask(rtwdev, REG_DCKA_I_0, 0xf0000000, val); in rtw8822c_dac_cal_restore_dck()
725 rtw_write32_mask(rtwdev, REG_DCKA_I_1, 0xf, val); in rtw8822c_dac_cal_restore_dck()
727 rtw_write32_set(rtwdev, REG_DCKA_Q_0, BIT(19)); in rtw8822c_dac_cal_restore_dck()
729 rtw_write32_mask(rtwdev, REG_DCKA_Q_0, 0xf0000000, val); in rtw8822c_dac_cal_restore_dck()
731 rtw_write32_mask(rtwdev, REG_DCKA_Q_1, 0xf, val); in rtw8822c_dac_cal_restore_dck()
733 rtw_write32_set(rtwdev, REG_DCKB_I_0, BIT(19)); in rtw8822c_dac_cal_restore_dck()
735 rtw_write32_mask(rtwdev, REG_DCKB_I_0, 0xf0000000, val); in rtw8822c_dac_cal_restore_dck()
737 rtw_write32_mask(rtwdev, REG_DCKB_I_1, 0xf, val); in rtw8822c_dac_cal_restore_dck()
739 rtw_write32_set(rtwdev, REG_DCKB_Q_0, BIT(19)); in rtw8822c_dac_cal_restore_dck()
741 rtw_write32_mask(rtwdev, REG_DCKB_Q_0, 0xf0000000, val); in rtw8822c_dac_cal_restore_dck()
743 rtw_write32_mask(rtwdev, REG_DCKB_Q_1, 0xf, val); in rtw8822c_dac_cal_restore_dck()
746 static void rtw8822c_dac_cal_restore_prepare(struct rtw_dev *rtwdev) in rtw8822c_dac_cal_restore_prepare() argument
748 rtw_write32(rtwdev, 0x9b4, 0xdb66db00); in rtw8822c_dac_cal_restore_prepare()
750 rtw_write32_mask(rtwdev, 0x18b0, BIT(27), 0x0); in rtw8822c_dac_cal_restore_prepare()
751 rtw_write32_mask(rtwdev, 0x18cc, BIT(27), 0x0); in rtw8822c_dac_cal_restore_prepare()
752 rtw_write32_mask(rtwdev, 0x41b0, BIT(27), 0x0); in rtw8822c_dac_cal_restore_prepare()
753 rtw_write32_mask(rtwdev, 0x41cc, BIT(27), 0x0); in rtw8822c_dac_cal_restore_prepare()
755 rtw_write32_mask(rtwdev, 0x1830, BIT(30), 0x0); in rtw8822c_dac_cal_restore_prepare()
756 rtw_write32_mask(rtwdev, 0x1860, 0xfc000000, 0x3c); in rtw8822c_dac_cal_restore_prepare()
757 rtw_write32_mask(rtwdev, 0x18b4, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
758 rtw_write32_mask(rtwdev, 0x18d0, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
760 rtw_write32_mask(rtwdev, 0x4130, BIT(30), 0x0); in rtw8822c_dac_cal_restore_prepare()
761 rtw_write32_mask(rtwdev, 0x4160, 0xfc000000, 0x3c); in rtw8822c_dac_cal_restore_prepare()
762 rtw_write32_mask(rtwdev, 0x41b4, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
763 rtw_write32_mask(rtwdev, 0x41d0, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
765 rtw_write32_mask(rtwdev, 0x18b0, 0xf00, 0x0); in rtw8822c_dac_cal_restore_prepare()
766 rtw_write32_mask(rtwdev, 0x18c0, BIT(14), 0x0); in rtw8822c_dac_cal_restore_prepare()
767 rtw_write32_mask(rtwdev, 0x18cc, 0xf00, 0x0); in rtw8822c_dac_cal_restore_prepare()
768 rtw_write32_mask(rtwdev, 0x18dc, BIT(14), 0x0); in rtw8822c_dac_cal_restore_prepare()
770 rtw_write32_mask(rtwdev, 0x18b0, BIT(0), 0x0); in rtw8822c_dac_cal_restore_prepare()
771 rtw_write32_mask(rtwdev, 0x18cc, BIT(0), 0x0); in rtw8822c_dac_cal_restore_prepare()
772 rtw_write32_mask(rtwdev, 0x18b0, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
773 rtw_write32_mask(rtwdev, 0x18cc, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
775 rtw8822c_dac_cal_restore_dck(rtwdev); in rtw8822c_dac_cal_restore_prepare()
777 rtw_write32_mask(rtwdev, 0x18c0, 0x38000, 0x7); in rtw8822c_dac_cal_restore_prepare()
778 rtw_write32_mask(rtwdev, 0x18dc, 0x38000, 0x7); in rtw8822c_dac_cal_restore_prepare()
779 rtw_write32_mask(rtwdev, 0x41c0, 0x38000, 0x7); in rtw8822c_dac_cal_restore_prepare()
780 rtw_write32_mask(rtwdev, 0x41dc, 0x38000, 0x7); in rtw8822c_dac_cal_restore_prepare()
782 rtw_write32_mask(rtwdev, 0x18b8, BIT(26) | BIT(25), 0x1); in rtw8822c_dac_cal_restore_prepare()
783 rtw_write32_mask(rtwdev, 0x18d4, BIT(26) | BIT(25), 0x1); in rtw8822c_dac_cal_restore_prepare()
785 rtw_write32_mask(rtwdev, 0x41b0, 0xf00, 0x0); in rtw8822c_dac_cal_restore_prepare()
786 rtw_write32_mask(rtwdev, 0x41c0, BIT(14), 0x0); in rtw8822c_dac_cal_restore_prepare()
787 rtw_write32_mask(rtwdev, 0x41cc, 0xf00, 0x0); in rtw8822c_dac_cal_restore_prepare()
788 rtw_write32_mask(rtwdev, 0x41dc, BIT(14), 0x0); in rtw8822c_dac_cal_restore_prepare()
790 rtw_write32_mask(rtwdev, 0x41b0, BIT(0), 0x0); in rtw8822c_dac_cal_restore_prepare()
791 rtw_write32_mask(rtwdev, 0x41cc, BIT(0), 0x0); in rtw8822c_dac_cal_restore_prepare()
792 rtw_write32_mask(rtwdev, 0x41b0, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
793 rtw_write32_mask(rtwdev, 0x41cc, BIT(0), 0x1); in rtw8822c_dac_cal_restore_prepare()
795 rtw_write32_mask(rtwdev, 0x41b8, BIT(26) | BIT(25), 0x1); in rtw8822c_dac_cal_restore_prepare()
796 rtw_write32_mask(rtwdev, 0x41d4, BIT(26) | BIT(25), 0x1); in rtw8822c_dac_cal_restore_prepare()
799 static bool rtw8822c_dac_cal_restore_wait(struct rtw_dev *rtwdev, in rtw8822c_dac_cal_restore_wait() argument
805 rtw_write32_mask(rtwdev, toggle_addr, BIT(26) | BIT(25), 0x0); in rtw8822c_dac_cal_restore_wait()
806 rtw_write32_mask(rtwdev, toggle_addr, BIT(26) | BIT(25), 0x2); in rtw8822c_dac_cal_restore_wait()
808 if (rtw_read32_mask(rtwdev, target_addr, 0xf) == 0x6) in rtw8822c_dac_cal_restore_wait()
816 static bool rtw8822c_dac_cal_restore_path(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_restore_path() argument
818 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore_path()
830 if (!rtw8822c_dac_cal_restore_wait(rtwdev, r_i, w_i + 0x8)) in rtw8822c_dac_cal_restore_path()
834 rtw_write32_mask(rtwdev, w_i + 0x4, BIT(2), 0x0); in rtw8822c_dac_cal_restore_path()
836 rtw_write32_mask(rtwdev, w_i + 0x4, 0xff8, value); in rtw8822c_dac_cal_restore_path()
837 rtw_write32_mask(rtwdev, w_i, 0xf0000000, i); in rtw8822c_dac_cal_restore_path()
838 rtw_write32_mask(rtwdev, w_i + 0x4, BIT(2), 0x1); in rtw8822c_dac_cal_restore_path()
841 rtw_write32_mask(rtwdev, w_i + 0x4, BIT(2), 0x0); in rtw8822c_dac_cal_restore_path()
843 if (!rtw8822c_dac_cal_restore_wait(rtwdev, r_q, w_q + 0x8)) in rtw8822c_dac_cal_restore_path()
847 rtw_write32_mask(rtwdev, w_q + 0x4, BIT(2), 0x0); in rtw8822c_dac_cal_restore_path()
849 rtw_write32_mask(rtwdev, w_q + 0x4, 0xff8, value); in rtw8822c_dac_cal_restore_path()
850 rtw_write32_mask(rtwdev, w_q, 0xf0000000, i); in rtw8822c_dac_cal_restore_path()
851 rtw_write32_mask(rtwdev, w_q + 0x4, BIT(2), 0x1); in rtw8822c_dac_cal_restore_path()
853 rtw_write32_mask(rtwdev, w_q + 0x4, BIT(2), 0x0); in rtw8822c_dac_cal_restore_path()
855 rtw_write32_mask(rtwdev, w_i + 0x8, BIT(26) | BIT(25), 0x0); in rtw8822c_dac_cal_restore_path()
856 rtw_write32_mask(rtwdev, w_q + 0x8, BIT(26) | BIT(25), 0x0); in rtw8822c_dac_cal_restore_path()
857 rtw_write32_mask(rtwdev, w_i + 0x4, BIT(0), 0x0); in rtw8822c_dac_cal_restore_path()
858 rtw_write32_mask(rtwdev, w_q + 0x4, BIT(0), 0x0); in rtw8822c_dac_cal_restore_path()
863 static bool __rtw8822c_dac_cal_restore(struct rtw_dev *rtwdev) in __rtw8822c_dac_cal_restore() argument
865 if (!rtw8822c_dac_cal_restore_path(rtwdev, RF_PATH_A)) in __rtw8822c_dac_cal_restore()
868 if (!rtw8822c_dac_cal_restore_path(rtwdev, RF_PATH_B)) in __rtw8822c_dac_cal_restore()
874 static bool rtw8822c_dac_cal_restore(struct rtw_dev *rtwdev) in rtw8822c_dac_cal_restore() argument
876 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore()
886 temp[0] = rtw_read32(rtwdev, 0x1860); in rtw8822c_dac_cal_restore()
887 temp[1] = rtw_read32(rtwdev, 0x4160); in rtw8822c_dac_cal_restore()
888 temp[2] = rtw_read32(rtwdev, 0x9b4); in rtw8822c_dac_cal_restore()
890 rtw8822c_dac_cal_restore_prepare(rtwdev); in rtw8822c_dac_cal_restore()
891 if (!check_hw_ready(rtwdev, 0x2808, 0x7fff80, 0xffff) || in rtw8822c_dac_cal_restore()
892 !check_hw_ready(rtwdev, 0x2834, 0x7fff80, 0xffff) || in rtw8822c_dac_cal_restore()
893 !check_hw_ready(rtwdev, 0x4508, 0x7fff80, 0xffff) || in rtw8822c_dac_cal_restore()
894 !check_hw_ready(rtwdev, 0x4534, 0x7fff80, 0xffff)) in rtw8822c_dac_cal_restore()
897 if (!__rtw8822c_dac_cal_restore(rtwdev)) { in rtw8822c_dac_cal_restore()
898 rtw_err(rtwdev, "failed to restore dack vectors\n"); in rtw8822c_dac_cal_restore()
902 rtw_write32_mask(rtwdev, 0x1830, BIT(30), 0x1); in rtw8822c_dac_cal_restore()
903 rtw_write32_mask(rtwdev, 0x4130, BIT(30), 0x1); in rtw8822c_dac_cal_restore()
904 rtw_write32(rtwdev, 0x1860, temp[0]); in rtw8822c_dac_cal_restore()
905 rtw_write32(rtwdev, 0x4160, temp[1]); in rtw8822c_dac_cal_restore()
906 rtw_write32_mask(rtwdev, 0x18b0, BIT(27), 0x1); in rtw8822c_dac_cal_restore()
907 rtw_write32_mask(rtwdev, 0x18cc, BIT(27), 0x1); in rtw8822c_dac_cal_restore()
908 rtw_write32_mask(rtwdev, 0x41b0, BIT(27), 0x1); in rtw8822c_dac_cal_restore()
909 rtw_write32_mask(rtwdev, 0x41cc, BIT(27), 0x1); in rtw8822c_dac_cal_restore()
910 rtw_write32(rtwdev, 0x9b4, temp[2]); in rtw8822c_dac_cal_restore()
915 static void rtw8822c_rf_dac_cal(struct rtw_dev *rtwdev) in rtw8822c_rf_dac_cal() argument
924 if (rtw8822c_dac_cal_restore(rtwdev)) in rtw8822c_rf_dac_cal()
929 rtw8822c_dac_backup_reg(rtwdev, backup, backup_rf); in rtw8822c_rf_dac_cal()
931 rtw8822c_dac_bb_setting(rtwdev); in rtw8822c_rf_dac_cal()
934 rtw8822c_dac_cal_adc(rtwdev, RF_PATH_A, &adc_ic_a, &adc_qc_a); in rtw8822c_rf_dac_cal()
936 rtw8822c_dac_cal_step1(rtwdev, RF_PATH_A); in rtw8822c_rf_dac_cal()
937 rtw8822c_dac_cal_step2(rtwdev, RF_PATH_A, &ic, &qc); in rtw8822c_rf_dac_cal()
941 rtw8822c_dac_cal_step3(rtwdev, RF_PATH_A, adc_ic_a, adc_qc_a, in rtw8822c_rf_dac_cal()
947 rtw8822c_dac_cal_step4(rtwdev, RF_PATH_A); in rtw8822c_rf_dac_cal()
950 rtw8822c_dac_cal_adc(rtwdev, RF_PATH_B, &adc_ic_b, &adc_qc_b); in rtw8822c_rf_dac_cal()
952 rtw8822c_dac_cal_step1(rtwdev, RF_PATH_B); in rtw8822c_rf_dac_cal()
953 rtw8822c_dac_cal_step2(rtwdev, RF_PATH_B, &ic, &qc); in rtw8822c_rf_dac_cal()
957 rtw8822c_dac_cal_step3(rtwdev, RF_PATH_B, adc_ic_b, adc_qc_b, in rtw8822c_rf_dac_cal()
963 rtw8822c_dac_cal_step4(rtwdev, RF_PATH_B); in rtw8822c_rf_dac_cal()
965 rtw_write32(rtwdev, 0x1b00, 0x00000008); in rtw8822c_rf_dac_cal()
966 rtw_write32_mask(rtwdev, 0x4130, BIT(30), 0x1); in rtw8822c_rf_dac_cal()
967 rtw_write8(rtwdev, 0x1bcc, 0x0); in rtw8822c_rf_dac_cal()
968 rtw_write32(rtwdev, 0x1b00, 0x0000000a); in rtw8822c_rf_dac_cal()
969 rtw_write8(rtwdev, 0x1bcc, 0x0); in rtw8822c_rf_dac_cal()
971 rtw8822c_dac_restore_reg(rtwdev, backup, backup_rf); in rtw8822c_rf_dac_cal()
974 rtw8822c_dac_cal_backup(rtwdev); in rtw8822c_rf_dac_cal()
976 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path A: ic=0x%x, qc=0x%x\n", ic_a, qc_a); in rtw8822c_rf_dac_cal()
977 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path B: ic=0x%x, qc=0x%x\n", ic_b, qc_b); in rtw8822c_rf_dac_cal()
978 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path A: i=0x%x, q=0x%x\n", i_a, q_a); in rtw8822c_rf_dac_cal()
979 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path B: i=0x%x, q=0x%x\n", i_b, q_b); in rtw8822c_rf_dac_cal()
982 static void rtw8822c_rf_x2_check(struct rtw_dev *rtwdev) in rtw8822c_rf_x2_check() argument
987 x2k_busy = rtw_read_rf(rtwdev, RF_PATH_A, 0xb8, BIT(15)); in rtw8822c_rf_x2_check()
989 rtw_write_rf(rtwdev, RF_PATH_A, 0xb8, RFREG_MASK, 0xC4440); in rtw8822c_rf_x2_check()
990 rtw_write_rf(rtwdev, RF_PATH_A, 0xba, RFREG_MASK, 0x6840D); in rtw8822c_rf_x2_check()
991 rtw_write_rf(rtwdev, RF_PATH_A, 0xb8, RFREG_MASK, 0x80440); in rtw8822c_rf_x2_check()
996 static void rtw8822c_set_power_trim(struct rtw_dev *rtwdev, s8 bb_gain[2][8]) in rtw8822c_set_power_trim() argument
1000 rtw_write_rf(rtwdev, _path, 0x33, RFREG_MASK, _seq); \ in rtw8822c_set_power_trim()
1001 rtw_write_rf(rtwdev, _path, 0x3f, RFREG_MASK, \ in rtw8822c_set_power_trim()
1006 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_set_power_trim()
1007 rtw_write_rf(rtwdev, path, 0xee, BIT(19), 1); in rtw8822c_set_power_trim()
1023 rtw_write_rf(rtwdev, path, 0xee, BIT(19), 0); in rtw8822c_set_power_trim()
1028 static void rtw8822c_power_trim(struct rtw_dev *rtwdev) in rtw8822c_power_trim() argument
1040 rtw_read8_physical_efuse(rtwdev, rf_efuse_2g[i], &pg_pwr); in rtw8822c_power_trim()
1049 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_power_trim()
1050 rtw_read8_physical_efuse(rtwdev, rf_efuse_5g[path][i], in rtw8822c_power_trim()
1060 rtw8822c_set_power_trim(rtwdev, bb_gain); in rtw8822c_power_trim()
1062 rtw_write32_mask(rtwdev, REG_DIS_DPD, DIS_DPD_MASK, DIS_DPD_RATEALL); in rtw8822c_power_trim()
1065 static void rtw8822c_thermal_trim(struct rtw_dev *rtwdev) in rtw8822c_thermal_trim() argument
1070 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_thermal_trim()
1071 rtw_read8_physical_efuse(rtwdev, rf_efuse[path], &pg_therm); in rtw8822c_thermal_trim()
1079 rtw_write_rf(rtwdev, path, 0x43, RF_THEMAL_MASK, thermal[path]); in rtw8822c_thermal_trim()
1083 static void rtw8822c_pa_bias(struct rtw_dev *rtwdev) in rtw8822c_pa_bias() argument
1089 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1090 rtw_read8_physical_efuse(rtwdev, rf_efuse_2g[path], in rtw8822c_pa_bias()
1095 rtw_write_rf(rtwdev, path, 0x60, RF_PABIAS_2G_MASK, pg_pa_bias); in rtw8822c_pa_bias()
1097 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1098 rtw_read8_physical_efuse(rtwdev, rf_efuse_5g[path], in rtw8822c_pa_bias()
1101 rtw_write_rf(rtwdev, path, 0x60, RF_PABIAS_5G_MASK, pg_pa_bias); in rtw8822c_pa_bias()
1105 static void rtw8822c_rf_init(struct rtw_dev *rtwdev) in rtw8822c_rf_init() argument
1107 rtw8822c_rf_dac_cal(rtwdev); in rtw8822c_rf_init()
1108 rtw8822c_rf_x2_check(rtwdev); in rtw8822c_rf_init()
1109 rtw8822c_thermal_trim(rtwdev); in rtw8822c_rf_init()
1110 rtw8822c_power_trim(rtwdev); in rtw8822c_rf_init()
1111 rtw8822c_pa_bias(rtwdev); in rtw8822c_rf_init()
1114 static void rtw8822c_pwrtrack_init(struct rtw_dev *rtwdev) in rtw8822c_pwrtrack_init() argument
1116 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwrtrack_init()
1126 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; in rtw8822c_pwrtrack_init()
1129 static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) in rtw8822c_phy_set_param() argument
1131 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_phy_set_param()
1132 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_phy_set_param()
1141 rtw_write8_set(rtwdev, REG_SYS_FUNC_EN, in rtw8822c_phy_set_param()
1143 rtw_write8_set(rtwdev, REG_RF_CTRL, in rtw8822c_phy_set_param()
1145 rtw_write32_set(rtwdev, REG_WLRF1, BIT_WLRF1_BBRF_EN); in rtw8822c_phy_set_param()
1148 rtw_write32_mask(rtwdev, REG_DIS_DPD, DIS_DPD_MASK, DIS_DPD_RATEALL); in rtw8822c_phy_set_param()
1151 rtw8822c_header_file_init(rtwdev, true); in rtw8822c_phy_set_param()
1153 rtw_phy_load_tables(rtwdev); in rtw8822c_phy_set_param()
1155 crystal_cap = rtwdev->efuse.crystal_cap & 0x7f; in rtw8822c_phy_set_param()
1156 rtw_write32_mask(rtwdev, REG_ANAPAR_XTAL_0, 0xfffc00, in rtw8822c_phy_set_param()
1160 rtw8822c_header_file_init(rtwdev, false); in rtw8822c_phy_set_param()
1163 rtw8822c_config_trx_mode(rtwdev, hal->antenna_tx, hal->antenna_rx, in rtw8822c_phy_set_param()
1165 rtw_phy_init(rtwdev); in rtw8822c_phy_set_param()
1167 cck_gi_u_bnd_msb = (u8)rtw_read32_mask(rtwdev, 0x1a98, 0xc000); in rtw8822c_phy_set_param()
1168 cck_gi_u_bnd_lsb = (u8)rtw_read32_mask(rtwdev, 0x1aa8, 0xf0000); in rtw8822c_phy_set_param()
1169 cck_gi_l_bnd_msb = (u8)rtw_read32_mask(rtwdev, 0x1a98, 0xc0); in rtw8822c_phy_set_param()
1170 cck_gi_l_bnd_lsb = (u8)rtw_read32_mask(rtwdev, 0x1a70, 0x0f000000); in rtw8822c_phy_set_param()
1175 rtw8822c_rf_init(rtwdev); in rtw8822c_phy_set_param()
1176 rtw8822c_pwrtrack_init(rtwdev); in rtw8822c_phy_set_param()
1178 rtw_bf_phy_init(rtwdev); in rtw8822c_phy_set_param()
1270 static int rtw8822c_mac_init(struct rtw_dev *rtwdev) in rtw8822c_mac_init() argument
1278 value8 = rtw_read8(rtwdev, REG_FWHW_TXQ_CTRL); in rtw8822c_mac_init()
1280 rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL, value8); in rtw8822c_mac_init()
1281 rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL + 1, WLAN_TXQ_RPT_EN); in rtw8822c_mac_init()
1283 rtw_write16(rtwdev, REG_SPEC_SIFS, WLAN_SIFS_DUR_TUNE); in rtw8822c_mac_init()
1284 rtw_write32(rtwdev, REG_SIFS, WLAN_SIFS_CFG); in rtw8822c_mac_init()
1285 rtw_write16(rtwdev, REG_RESP_SIFS_CCK, in rtw8822c_mac_init()
1287 rtw_write16(rtwdev, REG_RESP_SIFS_OFDM, in rtw8822c_mac_init()
1290 rtw_write32(rtwdev, REG_DARFRC, WLAN_DATA_RATE_FB_CNT_1_4); in rtw8822c_mac_init()
1291 rtw_write32(rtwdev, REG_DARFRCH, WLAN_DATA_RATE_FB_CNT_5_8); in rtw8822c_mac_init()
1292 rtw_write32(rtwdev, REG_RARFRCH, WLAN_RTS_RATE_FB_CNT_5_8); in rtw8822c_mac_init()
1293 rtw_write32(rtwdev, REG_ARFR0, WLAN_DATA_RATE_FB_RATE0); in rtw8822c_mac_init()
1294 rtw_write32(rtwdev, REG_ARFRH0, WLAN_DATA_RATE_FB_RATE0_H); in rtw8822c_mac_init()
1295 rtw_write32(rtwdev, REG_ARFR1_V1, WLAN_RTS_RATE_FB_RATE1); in rtw8822c_mac_init()
1296 rtw_write32(rtwdev, REG_ARFRH1_V1, WLAN_RTS_RATE_FB_RATE1_H); in rtw8822c_mac_init()
1297 rtw_write32(rtwdev, REG_ARFR4, WLAN_RTS_RATE_FB_RATE4); in rtw8822c_mac_init()
1298 rtw_write32(rtwdev, REG_ARFRH4, WLAN_RTS_RATE_FB_RATE4_H); in rtw8822c_mac_init()
1299 rtw_write32(rtwdev, REG_ARFR5, WLAN_RTS_RATE_FB_RATE5); in rtw8822c_mac_init()
1300 rtw_write32(rtwdev, REG_ARFRH5, WLAN_RTS_RATE_FB_RATE5_H); in rtw8822c_mac_init()
1302 rtw_write8(rtwdev, REG_AMPDU_MAX_TIME_V1, WLAN_AMPDU_MAX_TIME); in rtw8822c_mac_init()
1303 rtw_write8_set(rtwdev, REG_TX_HANG_CTRL, BIT_EN_EOF_V1); in rtw8822c_mac_init()
1305 rtw_write8(rtwdev, REG_PRECNT_CTRL, (u8)(pre_txcnt & 0xFF)); in rtw8822c_mac_init()
1306 rtw_write8(rtwdev, REG_PRECNT_CTRL + 1, (u8)(pre_txcnt >> 8)); in rtw8822c_mac_init()
1310 rtw_write32(rtwdev, REG_PROT_MODE_CTRL, value32); in rtw8822c_mac_init()
1311 rtw_write16(rtwdev, REG_BAR_MODE_CTRL + 2, in rtw8822c_mac_init()
1313 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING, FAST_EDCA_VO_TH); in rtw8822c_mac_init()
1314 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING + 2, FAST_EDCA_VI_TH); in rtw8822c_mac_init()
1315 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING, FAST_EDCA_BE_TH); in rtw8822c_mac_init()
1316 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING + 2, FAST_EDCA_BK_TH); in rtw8822c_mac_init()
1318 rtw_write8_clr(rtwdev, REG_LIFETIME_EN, BIT_BA_PARSER_EN); in rtw8822c_mac_init()
1319 rtw_write32_clr(rtwdev, REG_RRSR, BITS_RRSR_RSC); in rtw8822c_mac_init()
1322 rtw_write32(rtwdev, REG_EDCA_VO_PARAM, WLAN_EDCA_VO_PARAM); in rtw8822c_mac_init()
1323 rtw_write32(rtwdev, REG_EDCA_VI_PARAM, WLAN_EDCA_VI_PARAM); in rtw8822c_mac_init()
1324 rtw_write32(rtwdev, REG_EDCA_BE_PARAM, WLAN_EDCA_BE_PARAM); in rtw8822c_mac_init()
1325 rtw_write32(rtwdev, REG_EDCA_BK_PARAM, WLAN_EDCA_BK_PARAM); in rtw8822c_mac_init()
1326 rtw_write8(rtwdev, REG_PIFS, WLAN_PIFS_TIME); in rtw8822c_mac_init()
1327 rtw_write8_clr(rtwdev, REG_TX_PTCL_CTRL + 1, BIT_SIFS_BK_EN >> 8); in rtw8822c_mac_init()
1328 rtw_write8_set(rtwdev, REG_RD_CTRL + 1, in rtw8822c_mac_init()
1333 rtw_write32_clr(rtwdev, REG_AFE_CTRL1, BIT_MAC_CLK_SEL); in rtw8822c_mac_init()
1334 rtw_write8(rtwdev, REG_USTIME_TSF, MAC_CLK_SPEED); in rtw8822c_mac_init()
1335 rtw_write8(rtwdev, REG_USTIME_EDCA, MAC_CLK_SPEED); in rtw8822c_mac_init()
1337 rtw_write8_set(rtwdev, REG_MISC_CTRL, in rtw8822c_mac_init()
1339 rtw_write8_clr(rtwdev, REG_TIMER0_SRC_SEL, BIT_TSFT_SEL_TIMER0); in rtw8822c_mac_init()
1340 rtw_write16(rtwdev, REG_TXPAUSE, 0x0000); in rtw8822c_mac_init()
1341 rtw_write8(rtwdev, REG_SLOT, WLAN_SLOT_TIME); in rtw8822c_mac_init()
1342 rtw_write32(rtwdev, REG_RD_NAV_NXT, WLAN_NAV_CFG); in rtw8822c_mac_init()
1343 rtw_write16(rtwdev, REG_RXTSF_OFFSET_CCK, WLAN_RX_TSF_CFG); in rtw8822c_mac_init()
1345 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8822c_mac_init()
1347 rtw_write32(rtwdev, REG_TBTT_PROHIBIT, WLAN_TBTT_TIME); in rtw8822c_mac_init()
1348 rtw_write8(rtwdev, REG_DRVERLYINT, WLAN_DRV_EARLY_INT); in rtw8822c_mac_init()
1349 rtw_write8(rtwdev, REG_BCN_CTRL_CLINT0, WLAN_BCN_CTRL_CLT0); in rtw8822c_mac_init()
1350 rtw_write8(rtwdev, REG_BCNDMATIM, WLAN_BCN_DMA_TIME); in rtw8822c_mac_init()
1351 rtw_write8(rtwdev, REG_BCN_MAX_ERR, WLAN_BCN_MAX_ERR); in rtw8822c_mac_init()
1354 rtw_write32(rtwdev, REG_MAR, WLAN_MULTI_ADDR); in rtw8822c_mac_init()
1355 rtw_write32(rtwdev, REG_MAR + 4, WLAN_MULTI_ADDR); in rtw8822c_mac_init()
1356 rtw_write8(rtwdev, REG_BBPSF_CTRL + 2, WLAN_RESP_TXRATE); in rtw8822c_mac_init()
1357 rtw_write8(rtwdev, REG_ACKTO, WLAN_ACK_TO); in rtw8822c_mac_init()
1358 rtw_write8(rtwdev, REG_ACKTO_CCK, WLAN_ACK_TO_CCK); in rtw8822c_mac_init()
1359 rtw_write16(rtwdev, REG_EIFS, WLAN_EIFS_DUR_TUNE); in rtw8822c_mac_init()
1360 rtw_write8(rtwdev, REG_NAV_CTRL + 2, WLAN_NAV_MAX); in rtw8822c_mac_init()
1361 rtw_write8(rtwdev, REG_WMAC_TRXPTCL_CTL_H + 2, WLAN_BAR_ACK_TYPE); in rtw8822c_mac_init()
1362 rtw_write32(rtwdev, REG_RXFLTMAP0, WLAN_RX_FILTER0); in rtw8822c_mac_init()
1363 rtw_write16(rtwdev, REG_RXFLTMAP2, WLAN_RX_FILTER2); in rtw8822c_mac_init()
1364 rtw_write32(rtwdev, REG_RCR, WLAN_RCR_CFG); in rtw8822c_mac_init()
1365 rtw_write8(rtwdev, REG_RX_PKT_LIMIT, WLAN_RXPKT_MAX_SZ_512); in rtw8822c_mac_init()
1366 rtw_write8(rtwdev, REG_TCR + 2, WLAN_TX_FUNC_CFG2); in rtw8822c_mac_init()
1367 rtw_write8(rtwdev, REG_TCR + 1, WLAN_TX_FUNC_CFG1); in rtw8822c_mac_init()
1368 rtw_write32_set(rtwdev, REG_GENERAL_OPTION, BIT_DUMMY_FCS_READY_MASK_EN); in rtw8822c_mac_init()
1369 rtw_write32(rtwdev, REG_WMAC_OPTION_FUNCTION + 8, WLAN_MAC_OPT_FUNC2); in rtw8822c_mac_init()
1370 rtw_write8(rtwdev, REG_WMAC_OPTION_FUNCTION_1, WLAN_MAC_OPT_NORM_FUNC1); in rtw8822c_mac_init()
1373 value16 = rtw_read16(rtwdev, REG_RXPSF_CTRL + 2) & 0xF00F; in rtw8822c_mac_init()
1376 rtw_write16(rtwdev, REG_RXPSF_CTRL + 2, value16); in rtw8822c_mac_init()
1382 rtw_write16(rtwdev, REG_RXPSF_CTRL, value16); in rtw8822c_mac_init()
1383 rtw_write32(rtwdev, REG_RXPSF_TYPE_CTRL, 0xFFFFFFFF); in rtw8822c_mac_init()
1385 value16 = rtw_read16(rtwdev, REG_RXPSF_CTRL); in rtw8822c_mac_init()
1389 rtw_write16(rtwdev, REG_RXPSF_CTRL, value16); in rtw8822c_mac_init()
1392 rtw_write32(rtwdev, REG_INT_MIG, WLAN_MAC_INT_MIG_CFG); in rtw8822c_mac_init()
1397 static void rtw8822c_rstb_3wire(struct rtw_dev *rtwdev, bool enable) in rtw8822c_rstb_3wire() argument
1400 rtw_write32_mask(rtwdev, REG_RSTB, BIT_RSTB_3WIRE, 0x1); in rtw8822c_rstb_3wire()
1401 rtw_write32_mask(rtwdev, REG_ANAPAR_A, BIT_ANAPAR_UPDATE, 0x1); in rtw8822c_rstb_3wire()
1402 rtw_write32_mask(rtwdev, REG_ANAPAR_B, BIT_ANAPAR_UPDATE, 0x1); in rtw8822c_rstb_3wire()
1404 rtw_write32_mask(rtwdev, REG_RSTB, BIT_RSTB_3WIRE, 0x0); in rtw8822c_rstb_3wire()
1408 static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) in rtw8822c_set_channel_rf() argument
1425 rf_reg18 = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); in rtw8822c_set_channel_rf()
1456 rtw8822c_rstb_3wire(rtwdev, false); in rtw8822c_set_channel_rf()
1458 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, 0x04, 0x01); in rtw8822c_set_channel_rf()
1459 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, 0x1f, 0x12); in rtw8822c_set_channel_rf()
1460 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, 0xfffff, rf_rxbb); in rtw8822c_set_channel_rf()
1461 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, 0x04, 0x00); in rtw8822c_set_channel_rf()
1463 rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWE2, 0x04, 0x01); in rtw8822c_set_channel_rf()
1464 rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWA, 0x1f, 0x12); in rtw8822c_set_channel_rf()
1465 rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWD0, 0xfffff, rf_rxbb); in rtw8822c_set_channel_rf()
1466 rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWE2, 0x04, 0x00); in rtw8822c_set_channel_rf()
1468 rtw_write_rf(rtwdev, RF_PATH_A, RF_CFGCH, RFREG_MASK, rf_reg18); in rtw8822c_set_channel_rf()
1469 rtw_write_rf(rtwdev, RF_PATH_B, RF_CFGCH, RFREG_MASK, rf_reg18); in rtw8822c_set_channel_rf()
1471 rtw8822c_rstb_3wire(rtwdev, true); in rtw8822c_set_channel_rf()
1474 static void rtw8822c_toggle_igi(struct rtw_dev *rtwdev) in rtw8822c_toggle_igi() argument
1478 igi = rtw_read32_mask(rtwdev, REG_RXIGI, 0x7f); in rtw8822c_toggle_igi()
1479 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f, igi - 2); in rtw8822c_toggle_igi()
1480 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f00, igi - 2); in rtw8822c_toggle_igi()
1481 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f, igi); in rtw8822c_toggle_igi()
1482 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f00, igi); in rtw8822c_toggle_igi()
1485 static void rtw8822c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8822c_set_channel_bb() argument
1489 rtw_write32_clr(rtwdev, REG_BGCTRL, BITS_RX_IQ_WEIGHT); in rtw8822c_set_channel_bb()
1490 rtw_write32_set(rtwdev, REG_TXF4, BIT(20)); in rtw8822c_set_channel_bb()
1491 rtw_write32_clr(rtwdev, REG_CCK_CHECK, BIT_CHECK_CCK_EN); in rtw8822c_set_channel_bb()
1492 rtw_write32_clr(rtwdev, REG_CCKTXONLY, BIT_BB_CCK_CHECK_EN); in rtw8822c_set_channel_bb()
1493 rtw_write32_mask(rtwdev, REG_CCAMSK, 0x3F000000, 0xF); in rtw8822c_set_channel_bb()
1497 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_CCK, in rtw8822c_set_channel_bb()
1499 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_CCK, in rtw8822c_set_channel_bb()
1501 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1503 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1507 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_CCK, in rtw8822c_set_channel_bb()
1509 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_CCK, in rtw8822c_set_channel_bb()
1511 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1513 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1518 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x969); in rtw8822c_set_channel_bb()
1520 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x96a); in rtw8822c_set_channel_bb()
1522 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x9aa); in rtw8822c_set_channel_bb()
1524 rtw_write32_mask(rtwdev, REG_TXF0, MASKHWORD, 0x3da0); in rtw8822c_set_channel_bb()
1525 rtw_write32_mask(rtwdev, REG_TXF1, MASKDWORD, in rtw8822c_set_channel_bb()
1527 rtw_write32_mask(rtwdev, REG_TXF2, MASKLWORD, 0x6aa3); in rtw8822c_set_channel_bb()
1528 rtw_write32_mask(rtwdev, REG_TXF3, MASKHWORD, 0xaa7b); in rtw8822c_set_channel_bb()
1529 rtw_write32_mask(rtwdev, REG_TXF4, MASKLWORD, 0xf3d7); in rtw8822c_set_channel_bb()
1530 rtw_write32_mask(rtwdev, REG_TXF5, MASKDWORD, 0x0); in rtw8822c_set_channel_bb()
1531 rtw_write32_mask(rtwdev, REG_TXF6, MASKDWORD, in rtw8822c_set_channel_bb()
1533 rtw_write32_mask(rtwdev, REG_TXF7, MASKDWORD, 0xffff); in rtw8822c_set_channel_bb()
1535 rtw_write32_mask(rtwdev, REG_TXF0, MASKHWORD, 0x5284); in rtw8822c_set_channel_bb()
1536 rtw_write32_mask(rtwdev, REG_TXF1, MASKDWORD, in rtw8822c_set_channel_bb()
1538 rtw_write32_mask(rtwdev, REG_TXF2, MASKLWORD, 0x0a88); in rtw8822c_set_channel_bb()
1539 rtw_write32_mask(rtwdev, REG_TXF3, MASKHWORD, 0xacc4); in rtw8822c_set_channel_bb()
1540 rtw_write32_mask(rtwdev, REG_TXF4, MASKLWORD, 0xc8b2); in rtw8822c_set_channel_bb()
1541 rtw_write32_mask(rtwdev, REG_TXF5, MASKDWORD, in rtw8822c_set_channel_bb()
1543 rtw_write32_mask(rtwdev, REG_TXF6, MASKDWORD, in rtw8822c_set_channel_bb()
1545 rtw_write32_mask(rtwdev, REG_TXF7, MASKDWORD, in rtw8822c_set_channel_bb()
1549 rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x3); in rtw8822c_set_channel_bb()
1551 rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x1); in rtw8822c_set_channel_bb()
1553 rtw_write32_set(rtwdev, REG_CCKTXONLY, BIT_BB_CCK_CHECK_EN); in rtw8822c_set_channel_bb()
1554 rtw_write32_set(rtwdev, REG_CCK_CHECK, BIT_CHECK_CCK_EN); in rtw8822c_set_channel_bb()
1555 rtw_write32_set(rtwdev, REG_BGCTRL, BITS_RX_IQ_WEIGHT); in rtw8822c_set_channel_bb()
1556 rtw_write32_clr(rtwdev, REG_TXF4, BIT(20)); in rtw8822c_set_channel_bb()
1557 rtw_write32_mask(rtwdev, REG_CCAMSK, 0x3F000000, 0x22); in rtw8822c_set_channel_bb()
1558 rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x3); in rtw8822c_set_channel_bb()
1560 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1562 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1565 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1567 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1570 rtw_write32_mask(rtwdev, REG_RXAGCCTL0, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1572 rtw_write32_mask(rtwdev, REG_RXAGCCTL, BITS_RXAGC_OFDM, in rtw8822c_set_channel_bb()
1577 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x494); in rtw8822c_set_channel_bb()
1579 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x493); in rtw8822c_set_channel_bb()
1581 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x453); in rtw8822c_set_channel_bb()
1583 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x452); in rtw8822c_set_channel_bb()
1585 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x412); in rtw8822c_set_channel_bb()
1587 rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x411); in rtw8822c_set_channel_bb()
1592 rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x19B); in rtw8822c_set_channel_bb()
1593 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); in rtw8822c_set_channel_bb()
1594 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x0); in rtw8822c_set_channel_bb()
1595 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x7); in rtw8822c_set_channel_bb()
1596 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x6); in rtw8822c_set_channel_bb()
1597 rtw_write32_mask(rtwdev, REG_CCK_SOURCE, BIT_NBI_EN, 0x0); in rtw8822c_set_channel_bb()
1598 rtw_write32_mask(rtwdev, REG_SBD, BITS_SUBTUNE, 0x1); in rtw8822c_set_channel_bb()
1599 rtw_write32_mask(rtwdev, REG_PT_CHSMO, BIT_PT_OPT, 0x0); in rtw8822c_set_channel_bb()
1602 rtw_write32_mask(rtwdev, REG_CCKSB, BIT(4), in rtw8822c_set_channel_bb()
1604 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x5); in rtw8822c_set_channel_bb()
1605 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xc0, 0x0); in rtw8822c_set_channel_bb()
1606 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xff00, in rtw8822c_set_channel_bb()
1608 rtw_write32_mask(rtwdev, REG_CCK_SOURCE, BIT_NBI_EN, 0x1); in rtw8822c_set_channel_bb()
1609 rtw_write32_mask(rtwdev, REG_SBD, BITS_SUBTUNE, 0x1); in rtw8822c_set_channel_bb()
1610 rtw_write32_mask(rtwdev, REG_PT_CHSMO, BIT_PT_OPT, 0x1); in rtw8822c_set_channel_bb()
1613 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0xa); in rtw8822c_set_channel_bb()
1614 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xc0, 0x0); in rtw8822c_set_channel_bb()
1615 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xff00, in rtw8822c_set_channel_bb()
1617 rtw_write32_mask(rtwdev, REG_SBD, BITS_SUBTUNE, 0x6); in rtw8822c_set_channel_bb()
1618 rtw_write32_mask(rtwdev, REG_PT_CHSMO, BIT_PT_OPT, 0x1); in rtw8822c_set_channel_bb()
1621 rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x2AB); in rtw8822c_set_channel_bb()
1622 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); in rtw8822c_set_channel_bb()
1623 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x1); in rtw8822c_set_channel_bb()
1624 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x4); in rtw8822c_set_channel_bb()
1625 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x4); in rtw8822c_set_channel_bb()
1626 rtw_write32_mask(rtwdev, REG_CCK_SOURCE, BIT_NBI_EN, 0x0); in rtw8822c_set_channel_bb()
1627 rtw_write32_mask(rtwdev, REG_SBD, BITS_SUBTUNE, 0x1); in rtw8822c_set_channel_bb()
1628 rtw_write32_mask(rtwdev, REG_PT_CHSMO, BIT_PT_OPT, 0x0); in rtw8822c_set_channel_bb()
1631 rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x2AB); in rtw8822c_set_channel_bb()
1632 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); in rtw8822c_set_channel_bb()
1633 rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x2); in rtw8822c_set_channel_bb()
1634 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x6); in rtw8822c_set_channel_bb()
1635 rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x5); in rtw8822c_set_channel_bb()
1636 rtw_write32_mask(rtwdev, REG_CCK_SOURCE, BIT_NBI_EN, 0x0); in rtw8822c_set_channel_bb()
1637 rtw_write32_mask(rtwdev, REG_SBD, BITS_SUBTUNE, 0x1); in rtw8822c_set_channel_bb()
1638 rtw_write32_mask(rtwdev, REG_PT_CHSMO, BIT_PT_OPT, 0x0); in rtw8822c_set_channel_bb()
1643 static void rtw8822c_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8822c_set_channel() argument
1646 rtw8822c_set_channel_bb(rtwdev, channel, bw, primary_chan_idx); in rtw8822c_set_channel()
1647 rtw_set_channel_mac(rtwdev, channel, bw, primary_chan_idx); in rtw8822c_set_channel()
1648 rtw8822c_set_channel_rf(rtwdev, channel, bw); in rtw8822c_set_channel()
1649 rtw8822c_toggle_igi(rtwdev); in rtw8822c_set_channel()
1652 static void rtw8822c_config_cck_rx_path(struct rtw_dev *rtwdev, u8 rx_path) in rtw8822c_config_cck_rx_path() argument
1655 rtw_write32_mask(rtwdev, REG_CCANRX, 0x00060000, 0x0); in rtw8822c_config_cck_rx_path()
1656 rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x0); in rtw8822c_config_cck_rx_path()
1658 rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x1); in rtw8822c_config_cck_rx_path()
1659 rtw_write32_mask(rtwdev, REG_CCANRX, 0x00060000, 0x1); in rtw8822c_config_cck_rx_path()
1663 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x0); in rtw8822c_config_cck_rx_path()
1665 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x5); in rtw8822c_config_cck_rx_path()
1667 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x1); in rtw8822c_config_cck_rx_path()
1670 static void rtw8822c_config_ofdm_rx_path(struct rtw_dev *rtwdev, u8 rx_path) in rtw8822c_config_ofdm_rx_path() argument
1673 rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x300, 0x0); in rtw8822c_config_ofdm_rx_path()
1674 rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x600000, 0x0); in rtw8822c_config_ofdm_rx_path()
1675 rtw_write32_mask(rtwdev, REG_AGCSWSH, BIT(17), 0x0); in rtw8822c_config_ofdm_rx_path()
1676 rtw_write32_mask(rtwdev, REG_ANTWTPD, BIT(20), 0x0); in rtw8822c_config_ofdm_rx_path()
1677 rtw_write32_mask(rtwdev, REG_MRCM, BIT(24), 0x0); in rtw8822c_config_ofdm_rx_path()
1679 rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x300, 0x1); in rtw8822c_config_ofdm_rx_path()
1680 rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x600000, 0x1); in rtw8822c_config_ofdm_rx_path()
1681 rtw_write32_mask(rtwdev, REG_AGCSWSH, BIT(17), 0x1); in rtw8822c_config_ofdm_rx_path()
1682 rtw_write32_mask(rtwdev, REG_ANTWTPD, BIT(20), 0x1); in rtw8822c_config_ofdm_rx_path()
1683 rtw_write32_mask(rtwdev, REG_MRCM, BIT(24), 0x1); in rtw8822c_config_ofdm_rx_path()
1686 rtw_write32_mask(rtwdev, 0x824, 0x0f000000, rx_path); in rtw8822c_config_ofdm_rx_path()
1687 rtw_write32_mask(rtwdev, 0x824, 0x000f0000, rx_path); in rtw8822c_config_ofdm_rx_path()
1690 static void rtw8822c_config_rx_path(struct rtw_dev *rtwdev, u8 rx_path) in rtw8822c_config_rx_path() argument
1692 rtw8822c_config_cck_rx_path(rtwdev, rx_path); in rtw8822c_config_rx_path()
1693 rtw8822c_config_ofdm_rx_path(rtwdev, rx_path); in rtw8822c_config_rx_path()
1696 static void rtw8822c_config_cck_tx_path(struct rtw_dev *rtwdev, u8 tx_path, in rtw8822c_config_cck_tx_path() argument
1700 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); in rtw8822c_config_cck_tx_path()
1702 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x4); in rtw8822c_config_cck_tx_path()
1705 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0xc); in rtw8822c_config_cck_tx_path()
1707 rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); in rtw8822c_config_cck_tx_path()
1711 static void rtw8822c_config_ofdm_tx_path(struct rtw_dev *rtwdev, u8 tx_path, in rtw8822c_config_ofdm_tx_path() argument
1715 rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x11); in rtw8822c_config_ofdm_tx_path()
1716 rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xff, 0x0); in rtw8822c_config_ofdm_tx_path()
1718 rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x12); in rtw8822c_config_ofdm_tx_path()
1719 rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xff, 0x0); in rtw8822c_config_ofdm_tx_path()
1722 rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x33); in rtw8822c_config_ofdm_tx_path()
1723 rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xffff, 0x0404); in rtw8822c_config_ofdm_tx_path()
1725 rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x31); in rtw8822c_config_ofdm_tx_path()
1726 rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xffff, 0x0400); in rtw8822c_config_ofdm_tx_path()
1731 static void rtw8822c_config_tx_path(struct rtw_dev *rtwdev, u8 tx_path, in rtw8822c_config_tx_path() argument
1734 rtw8822c_config_cck_tx_path(rtwdev, tx_path, is_tx2_path); in rtw8822c_config_tx_path()
1735 rtw8822c_config_ofdm_tx_path(rtwdev, tx_path, is_tx2_path); in rtw8822c_config_tx_path()
1738 static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, in rtw8822c_config_trx_mode() argument
1742 rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x33312); in rtw8822c_config_trx_mode()
1744 rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x11111); in rtw8822c_config_trx_mode()
1746 rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x33312); in rtw8822c_config_trx_mode()
1748 rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x11111); in rtw8822c_config_trx_mode()
1750 rtw8822c_config_rx_path(rtwdev, rx_path); in rtw8822c_config_trx_mode()
1751 rtw8822c_config_tx_path(rtwdev, tx_path, is_tx2_path); in rtw8822c_config_trx_mode()
1753 rtw8822c_toggle_igi(rtwdev); in rtw8822c_config_trx_mode()
1756 static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page0() argument
1759 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page0()
1788 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page0()
1799 static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page1() argument
1802 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page1()
1841 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page1()
1859 static void query_phy_status(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status() argument
1868 query_phy_status_page0(rtwdev, phy_status, pkt_stat); in query_phy_status()
1871 query_phy_status_page1(rtwdev, phy_status, pkt_stat); in query_phy_status()
1874 rtw_warn(rtwdev, "unused phy status page (%d)\n", page); in query_phy_status()
1879 static void rtw8822c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, in rtw8822c_query_rx_desc() argument
1884 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz; in rtw8822c_query_rx_desc()
1914 query_phy_status(rtwdev, phy_status, pkt_stat); in rtw8822c_query_rx_desc()
1917 rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); in rtw8822c_query_rx_desc()
1921 rtw8822c_set_write_tx_power_ref(struct rtw_dev *rtwdev, u8 *tx_pwr_ref_cck, in rtw8822c_set_write_tx_power_ref() argument
1924 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_write_tx_power_ref()
1930 rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0); in rtw8822c_set_write_tx_power_ref()
1931 rtw_write32_mask(rtwdev, txref_cck[path], 0x7f0000, in rtw8822c_set_write_tx_power_ref()
1935 rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0); in rtw8822c_set_write_tx_power_ref()
1936 rtw_write32_mask(rtwdev, txref_ofdm[path], 0x1fc00, in rtw8822c_set_write_tx_power_ref()
1941 static void rtw8822c_set_tx_power_diff(struct rtw_dev *rtwdev, u8 rate, in rtw8822c_set_tx_power_diff() argument
1958 rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0x0); in rtw8822c_set_tx_power_diff()
1959 rtw_write32_mask(rtwdev, offset_txagc + rate_idx, MASKDWORD, in rtw8822c_set_tx_power_diff()
1963 static void rtw8822c_set_tx_power_index(struct rtw_dev *rtwdev) in rtw8822c_set_tx_power_index() argument
1965 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_tx_power_index()
1975 rtw8822c_set_write_tx_power_ref(rtwdev, pwr_ref_cck, pwr_ref_ofdm); in rtw8822c_set_tx_power_index()
1990 rtw8822c_set_tx_power_diff(rtwdev, rate - 3, in rtw8822c_set_tx_power_index()
1996 static int rtw8822c_set_antenna(struct rtw_dev *rtwdev, in rtw8822c_set_antenna() argument
2000 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_antenna()
2008 rtw_info(rtwdev, "unsupported tx path 0x%x\n", antenna_tx); in rtw8822c_set_antenna()
2018 rtw_info(rtwdev, "unsupported rx path 0x%x\n", antenna_rx); in rtw8822c_set_antenna()
2025 rtw8822c_config_trx_mode(rtwdev, antenna_tx, antenna_rx, false); in rtw8822c_set_antenna()
2030 static void rtw8822c_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) in rtw8822c_cfg_ldo25() argument
2034 ldo_pwr = rtw_read8(rtwdev, REG_ANAPARLDO_POW_MAC); in rtw8822c_cfg_ldo25()
2036 rtw_write8(rtwdev, REG_ANAPARLDO_POW_MAC, ldo_pwr); in rtw8822c_cfg_ldo25()
2039 static void rtw8822c_false_alarm_statistics(struct rtw_dev *rtwdev) in rtw8822c_false_alarm_statistics() argument
2041 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_false_alarm_statistics()
2051 cck_enable = rtw_read32(rtwdev, REG_ENCCK) & BIT_CCK_BLK_EN; in rtw8822c_false_alarm_statistics()
2052 cck_fa_cnt = rtw_read16(rtwdev, REG_CCK_FACNT); in rtw8822c_false_alarm_statistics()
2054 ofdm_fa_cnt1 = rtw_read32(rtwdev, REG_OFDM_FACNT1); in rtw8822c_false_alarm_statistics()
2055 ofdm_fa_cnt2 = rtw_read32(rtwdev, REG_OFDM_FACNT2); in rtw8822c_false_alarm_statistics()
2056 ofdm_fa_cnt3 = rtw_read32(rtwdev, REG_OFDM_FACNT3); in rtw8822c_false_alarm_statistics()
2057 ofdm_fa_cnt4 = rtw_read32(rtwdev, REG_OFDM_FACNT4); in rtw8822c_false_alarm_statistics()
2058 ofdm_fa_cnt5 = rtw_read32(rtwdev, REG_OFDM_FACNT5); in rtw8822c_false_alarm_statistics()
2077 crc32_cnt = rtw_read32(rtwdev, 0x2c04); in rtw8822c_false_alarm_statistics()
2080 crc32_cnt = rtw_read32(rtwdev, 0x2c14); in rtw8822c_false_alarm_statistics()
2083 crc32_cnt = rtw_read32(rtwdev, 0x2c10); in rtw8822c_false_alarm_statistics()
2086 crc32_cnt = rtw_read32(rtwdev, 0x2c0c); in rtw8822c_false_alarm_statistics()
2090 cca32_cnt = rtw_read32(rtwdev, 0x2c08); in rtw8822c_false_alarm_statistics()
2097 rtw_write32_mask(rtwdev, REG_CCANRX, BIT_CCK_FA_RST, 0); in rtw8822c_false_alarm_statistics()
2098 rtw_write32_mask(rtwdev, REG_CCANRX, BIT_CCK_FA_RST, 2); in rtw8822c_false_alarm_statistics()
2099 rtw_write32_mask(rtwdev, REG_CCANRX, BIT_OFDM_FA_RST, 0); in rtw8822c_false_alarm_statistics()
2100 rtw_write32_mask(rtwdev, REG_CCANRX, BIT_OFDM_FA_RST, 2); in rtw8822c_false_alarm_statistics()
2103 rtw_write32_clr(rtwdev, REG_RX_BREAK, BIT_COM_RX_GCK_EN); in rtw8822c_false_alarm_statistics()
2104 rtw_write32_set(rtwdev, REG_CNT_CTRL, BIT_ALL_CNT_RST); in rtw8822c_false_alarm_statistics()
2105 rtw_write32_clr(rtwdev, REG_CNT_CTRL, BIT_ALL_CNT_RST); in rtw8822c_false_alarm_statistics()
2106 rtw_write32_set(rtwdev, REG_RX_BREAK, BIT_COM_RX_GCK_EN); in rtw8822c_false_alarm_statistics()
2109 static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) in rtw8822c_do_iqk() argument
2116 rtw_fw_do_iqk(rtwdev, &para); in rtw8822c_do_iqk()
2119 iqk_chk = rtw_read8(rtwdev, REG_RPT_CIP); in rtw8822c_do_iqk()
2124 rtw_write8(rtwdev, REG_IQKSTAT, 0x0); in rtw8822c_do_iqk()
2126 rtw_dbg(rtwdev, RTW_DBG_RFK, "iqk counter=%d\n", counter); in rtw8822c_do_iqk()
2130 static void rtw8822c_coex_cfg_init(struct rtw_dev *rtwdev) in rtw8822c_coex_cfg_init() argument
2133 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8822c_coex_cfg_init()
2137 rtw_write8_set(rtwdev, REG_BT_TDMA_TIME, 0x05); in rtw8822c_coex_cfg_init()
2140 rtw_write8(rtwdev, REG_BT_STAT_CTRL, 0x1); in rtw8822c_coex_cfg_init()
2143 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_BT_PTA_EN); in rtw8822c_coex_cfg_init()
2144 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_BT_AOD_GPIO3); in rtw8822c_coex_cfg_init()
2147 rtw_write8_set(rtwdev, REG_QUEUE_CTRL, BIT_PTA_WL_TX_EN); in rtw8822c_coex_cfg_init()
2149 rtw_write8_clr(rtwdev, REG_QUEUE_CTRL, BIT_PTA_EDCCA_EN); in rtw8822c_coex_cfg_init()
2151 rtw_write8_set(rtwdev, REG_BT_COEX_V2, BIT_GNT_BT_POLARITY); in rtw8822c_coex_cfg_init()
2153 rtw_write8_clr(rtwdev, REG_DUMMY_PAGE4_V1, BIT_BTCCA_CTRL); in rtw8822c_coex_cfg_init()
2156 rtw_write_rf(rtwdev, RF_PATH_B, 0x1, 0xfffff, 0x40000); in rtw8822c_coex_cfg_init()
2159 static void rtw8822c_coex_cfg_gnt_fix(struct rtw_dev *rtwdev) in rtw8822c_coex_cfg_gnt_fix() argument
2161 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_gnt_fix()
2163 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_coex_cfg_gnt_fix()
2180 rtw_write_rf(rtwdev, RF_PATH_B, 0x1, 0xfffff, rf_0x1); in rtw8822c_coex_cfg_gnt_fix()
2193 rtw_write8_mask(rtwdev, 0x1c32, BIT(6), 1); in rtw8822c_coex_cfg_gnt_fix()
2194 rtw_write8_mask(rtwdev, 0x1c39, BIT(4), 0); in rtw8822c_coex_cfg_gnt_fix()
2195 rtw_write8_mask(rtwdev, 0x1c3b, BIT(4), 1); in rtw8822c_coex_cfg_gnt_fix()
2196 rtw_write8_mask(rtwdev, 0x4160, BIT(3), 1); in rtw8822c_coex_cfg_gnt_fix()
2204 rtw_write8_mask(rtwdev, 0x1860, BIT(3), 0); in rtw8822c_coex_cfg_gnt_fix()
2205 rtw_write8_mask(rtwdev, 0x1ca7, BIT(3), 1); in rtw8822c_coex_cfg_gnt_fix()
2207 rtw_write8_mask(rtwdev, 0x1860, BIT(3), 1); in rtw8822c_coex_cfg_gnt_fix()
2211 rtw_write8_mask(rtwdev, 0x1860, BIT(3), 0); in rtw8822c_coex_cfg_gnt_fix()
2213 rtw_write8_mask(rtwdev, 0x1ca7, BIT(3), 0); in rtw8822c_coex_cfg_gnt_fix()
2217 static void rtw8822c_coex_cfg_gnt_debug(struct rtw_dev *rtwdev) in rtw8822c_coex_cfg_gnt_debug() argument
2219 rtw_write8_mask(rtwdev, 0x66, BIT(4), 0); in rtw8822c_coex_cfg_gnt_debug()
2220 rtw_write8_mask(rtwdev, 0x67, BIT(0), 0); in rtw8822c_coex_cfg_gnt_debug()
2221 rtw_write8_mask(rtwdev, 0x42, BIT(3), 0); in rtw8822c_coex_cfg_gnt_debug()
2222 rtw_write8_mask(rtwdev, 0x65, BIT(7), 0); in rtw8822c_coex_cfg_gnt_debug()
2223 rtw_write8_mask(rtwdev, 0x73, BIT(3), 0); in rtw8822c_coex_cfg_gnt_debug()
2226 static void rtw8822c_coex_cfg_rfe_type(struct rtw_dev *rtwdev) in rtw8822c_coex_cfg_rfe_type() argument
2228 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_rfe_type()
2230 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_coex_cfg_rfe_type()
2232 coex_rfe->rfe_module_type = rtwdev->efuse.rfe_option; in rtw8822c_coex_cfg_rfe_type()
2244 rtw_coex_write_indirect_reg(rtwdev, 0x38, BIT_LTE_COEX_EN, 0x0); in rtw8822c_coex_cfg_rfe_type()
2245 rtw_coex_write_indirect_reg(rtwdev, 0xa0, MASKLWORD, 0xffff); in rtw8822c_coex_cfg_rfe_type()
2246 rtw_coex_write_indirect_reg(rtwdev, 0xa4, MASKLWORD, 0xffff); in rtw8822c_coex_cfg_rfe_type()
2249 static void rtw8822c_coex_cfg_wl_tx_power(struct rtw_dev *rtwdev, u8 wl_pwr) in rtw8822c_coex_cfg_wl_tx_power() argument
2251 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_wl_tx_power()
2260 static void rtw8822c_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain) in rtw8822c_coex_cfg_wl_rx_gain() argument
2262 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_wl_rx_gain()
2272 rtw_write_rf(rtwdev, RF_PATH_A, 0xde, 0xfffff, 0x22); in rtw8822c_coex_cfg_wl_rx_gain()
2273 rtw_write_rf(rtwdev, RF_PATH_A, 0x1d, 0xfffff, 0x36); in rtw8822c_coex_cfg_wl_rx_gain()
2274 rtw_write_rf(rtwdev, RF_PATH_B, 0xde, 0xfffff, 0x22); in rtw8822c_coex_cfg_wl_rx_gain()
2275 rtw_write_rf(rtwdev, RF_PATH_B, 0x1d, 0xfffff, 0x36); in rtw8822c_coex_cfg_wl_rx_gain()
2278 rtw_write_rf(rtwdev, RF_PATH_A, 0xde, 0xfffff, 0x20); in rtw8822c_coex_cfg_wl_rx_gain()
2279 rtw_write_rf(rtwdev, RF_PATH_A, 0x1d, 0xfffff, 0x0); in rtw8822c_coex_cfg_wl_rx_gain()
2280 rtw_write_rf(rtwdev, RF_PATH_B, 0x1d, 0xfffff, 0x0); in rtw8822c_coex_cfg_wl_rx_gain()
2284 static void rtw8822c_bf_enable_bfee_su(struct rtw_dev *rtwdev, in rtw8822c_bf_enable_bfee_su() argument
2291 rtw_bf_enable_bfee_su(rtwdev, vif, bfee); in rtw8822c_bf_enable_bfee_su()
2293 tmp6dc = rtw_read32(rtwdev, REG_BBPSF_CTRL) | in rtw8822c_bf_enable_bfee_su()
2297 rtw_write32(rtwdev, REG_BBPSF_CTRL, tmp6dc | BIT(12)); in rtw8822c_bf_enable_bfee_su()
2299 rtw_write32(rtwdev, REG_BBPSF_CTRL, tmp6dc & ~BIT(12)); in rtw8822c_bf_enable_bfee_su()
2301 rtw_write32(rtwdev, REG_CSI_RRSR, 0x550); in rtw8822c_bf_enable_bfee_su()
2304 static void rtw8822c_bf_config_bfee_su(struct rtw_dev *rtwdev, in rtw8822c_bf_config_bfee_su() argument
2309 rtw8822c_bf_enable_bfee_su(rtwdev, vif, bfee); in rtw8822c_bf_config_bfee_su()
2311 rtw_bf_remove_bfee_su(rtwdev, bfee); in rtw8822c_bf_config_bfee_su()
2314 static void rtw8822c_bf_config_bfee_mu(struct rtw_dev *rtwdev, in rtw8822c_bf_config_bfee_mu() argument
2319 rtw_bf_enable_bfee_mu(rtwdev, vif, bfee); in rtw8822c_bf_config_bfee_mu()
2321 rtw_bf_remove_bfee_mu(rtwdev, bfee); in rtw8822c_bf_config_bfee_mu()
2324 static void rtw8822c_bf_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif, in rtw8822c_bf_config_bfee() argument
2328 rtw8822c_bf_config_bfee_su(rtwdev, vif, bfee, enable); in rtw8822c_bf_config_bfee()
2330 rtw8822c_bf_config_bfee_mu(rtwdev, vif, bfee, enable); in rtw8822c_bf_config_bfee()
2332 rtw_warn(rtwdev, "wrong bfee role\n"); in rtw8822c_bf_config_bfee()
2341 void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev, in rtw8822c_parse_tbl_dpk() argument
2350 rtw_write32_mask(rtwdev, p->addr, p->bitmask, p->data); in rtw8822c_parse_tbl_dpk()
2353 static void rtw8822c_dpk_set_gnt_wl(struct rtw_dev *rtwdev, bool is_before_k) in rtw8822c_dpk_set_gnt_wl() argument
2355 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_set_gnt_wl()
2358 dpk_info->gnt_control = rtw_read32(rtwdev, 0x70); in rtw8822c_dpk_set_gnt_wl()
2359 dpk_info->gnt_value = rtw_coex_read_indirect_reg(rtwdev, 0x38); in rtw8822c_dpk_set_gnt_wl()
2360 rtw_write32_mask(rtwdev, 0x70, BIT(26), 0x1); in rtw8822c_dpk_set_gnt_wl()
2361 rtw_coex_write_indirect_reg(rtwdev, 0x38, MASKBYTE1, 0x77); in rtw8822c_dpk_set_gnt_wl()
2363 rtw_coex_write_indirect_reg(rtwdev, 0x38, MASKDWORD, in rtw8822c_dpk_set_gnt_wl()
2365 rtw_write32(rtwdev, 0x70, dpk_info->gnt_control); in rtw8822c_dpk_set_gnt_wl()
2370 rtw8822c_dpk_restore_registers(struct rtw_dev *rtwdev, u32 reg_num, in rtw8822c_dpk_restore_registers() argument
2373 rtw_restore_reg(rtwdev, bckp, reg_num); in rtw8822c_dpk_restore_registers()
2374 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_restore_registers()
2375 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_DPD_CLK, 0x4); in rtw8822c_dpk_restore_registers()
2379 rtw8822c_dpk_backup_registers(struct rtw_dev *rtwdev, u32 *reg, in rtw8822c_dpk_backup_registers() argument
2387 bckp[i].val = rtw_read32(rtwdev, reg[i]); in rtw8822c_dpk_backup_registers()
2391 static void rtw8822c_dpk_backup_rf_registers(struct rtw_dev *rtwdev, in rtw8822c_dpk_backup_rf_registers() argument
2398 rf_reg_bak[i][RF_PATH_A] = rtw_read_rf(rtwdev, RF_PATH_A, in rtw8822c_dpk_backup_rf_registers()
2400 rf_reg_bak[i][RF_PATH_B] = rtw_read_rf(rtwdev, RF_PATH_B, in rtw8822c_dpk_backup_rf_registers()
2405 static void rtw8822c_dpk_reload_rf_registers(struct rtw_dev *rtwdev, in rtw8822c_dpk_reload_rf_registers() argument
2412 rtw_write_rf(rtwdev, RF_PATH_A, rf_reg[i], RFREG_MASK, in rtw8822c_dpk_reload_rf_registers()
2414 rtw_write_rf(rtwdev, RF_PATH_B, rf_reg[i], RFREG_MASK, in rtw8822c_dpk_reload_rf_registers()
2419 static void rtw8822c_dpk_information(struct rtw_dev *rtwdev) in rtw8822c_dpk_information() argument
2421 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_information()
2425 reg = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); in rtw8822c_dpk_information()
2433 static void rtw8822c_dpk_rxbb_dc_cal(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_rxbb_dc_cal() argument
2435 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800); in rtw8822c_dpk_rxbb_dc_cal()
2437 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84801); in rtw8822c_dpk_rxbb_dc_cal()
2439 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800); in rtw8822c_dpk_rxbb_dc_cal()
2442 static u8 rtw8822c_dpk_dc_corr_check(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_dc_corr_check() argument
2447 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000900f0); in rtw8822c_dpk_dc_corr_check()
2448 dc_i = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(27, 16)); in rtw8822c_dpk_dc_corr_check()
2449 dc_q = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(11, 0)); in rtw8822c_dpk_dc_corr_check()
2456 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0); in rtw8822c_dpk_dc_corr_check()
2457 corr_idx = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(7, 0)); in rtw8822c_dpk_dc_corr_check()
2458 corr_val = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(15, 8)); in rtw8822c_dpk_dc_corr_check()
2467 static void rtw8822c_dpk_tx_pause(struct rtw_dev *rtwdev) in rtw8822c_dpk_tx_pause() argument
2472 rtw_write8(rtwdev, 0x522, 0xff); in rtw8822c_dpk_tx_pause()
2473 rtw_write32_mask(rtwdev, 0x1e70, 0xf, 0x2); in rtw8822c_dpk_tx_pause()
2476 reg_a = (u8)rtw_read_rf(rtwdev, RF_PATH_A, 0x00, 0xf0000); in rtw8822c_dpk_tx_pause()
2477 reg_b = (u8)rtw_read_rf(rtwdev, RF_PATH_B, 0x00, 0xf0000); in rtw8822c_dpk_tx_pause()
2483 static void rtw8822c_dpk_mac_bb_setting(struct rtw_dev *rtwdev) in rtw8822c_dpk_mac_bb_setting() argument
2485 rtw8822c_dpk_tx_pause(rtwdev); in rtw8822c_dpk_mac_bb_setting()
2486 rtw_load_table(rtwdev, &rtw8822c_dpk_mac_bb_tbl); in rtw8822c_dpk_mac_bb_setting()
2489 static void rtw8822c_dpk_afe_setting(struct rtw_dev *rtwdev, bool is_do_dpk) in rtw8822c_dpk_afe_setting() argument
2492 rtw_load_table(rtwdev, &rtw8822c_dpk_afe_is_dpk_tbl); in rtw8822c_dpk_afe_setting()
2494 rtw_load_table(rtwdev, &rtw8822c_dpk_afe_no_dpk_tbl); in rtw8822c_dpk_afe_setting()
2497 static void rtw8822c_dpk_pre_setting(struct rtw_dev *rtwdev) in rtw8822c_dpk_pre_setting() argument
2501 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_pre_setting()
2502 rtw_write_rf(rtwdev, path, RF_RXAGC_OFFSET, RFREG_MASK, 0x0); in rtw8822c_dpk_pre_setting()
2503 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1)); in rtw8822c_dpk_pre_setting()
2504 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G) in rtw8822c_dpk_pre_setting()
2505 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f100000); in rtw8822c_dpk_pre_setting()
2507 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f0d0000); in rtw8822c_dpk_pre_setting()
2508 rtw_write32_mask(rtwdev, REG_DPD_LUT0, BIT_GLOSS_DB, 0x4); in rtw8822c_dpk_pre_setting()
2509 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x3); in rtw8822c_dpk_pre_setting()
2511 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_pre_setting()
2512 rtw_write32(rtwdev, REG_DPD_CTL11, 0x3b23170b); in rtw8822c_dpk_pre_setting()
2513 rtw_write32(rtwdev, REG_DPD_CTL12, 0x775f5347); in rtw8822c_dpk_pre_setting()
2516 static u32 rtw8822c_dpk_rf_setting(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_rf_setting() argument
2520 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x50017); in rtw8822c_dpk_rf_setting()
2521 ori_txbb = rtw_read_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK); in rtw8822c_dpk_rf_setting()
2523 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x1); in rtw8822c_dpk_rf_setting()
2524 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_PWR_TRIM, 0x1); in rtw8822c_dpk_rf_setting()
2525 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_TX_OFFSET_VAL, 0x0); in rtw8822c_dpk_rf_setting()
2526 rtw_write_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK, ori_txbb); in rtw8822c_dpk_rf_setting()
2528 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G) { in rtw8822c_dpk_rf_setting()
2529 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_LB_ATT, 0x1); in rtw8822c_dpk_rf_setting()
2530 rtw_write_rf(rtwdev, path, RF_RXG_GAIN, BIT_RXG_GAIN, 0x0); in rtw8822c_dpk_rf_setting()
2532 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_TXA_LB_ATT, 0x0); in rtw8822c_dpk_rf_setting()
2533 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_ATT, 0x6); in rtw8822c_dpk_rf_setting()
2534 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_SW, 0x1); in rtw8822c_dpk_rf_setting()
2535 rtw_write_rf(rtwdev, path, RF_RXA_MIX_GAIN, BIT_RXA_MIX_GAIN, 0); in rtw8822c_dpk_rf_setting()
2538 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf); in rtw8822c_dpk_rf_setting()
2539 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x1); in rtw8822c_dpk_rf_setting()
2540 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_RXBB, 0x0); in rtw8822c_dpk_rf_setting()
2542 if (rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80) in rtw8822c_dpk_rf_setting()
2543 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x2); in rtw8822c_dpk_rf_setting()
2545 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x1); in rtw8822c_dpk_rf_setting()
2547 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT(1), 0x1); in rtw8822c_dpk_rf_setting()
2554 static u16 rtw8822c_dpk_get_cmd(struct rtw_dev *rtwdev, u8 action, u8 path) in rtw8822c_dpk_get_cmd() argument
2557 u8 bw = rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80 ? 2 : 0; in rtw8822c_dpk_get_cmd()
2579 static u8 rtw8822c_dpk_one_shot(struct rtw_dev *rtwdev, u8 path, u8 action) in rtw8822c_dpk_one_shot() argument
2584 rtw8822c_dpk_set_gnt_wl(rtwdev, true); in rtw8822c_dpk_one_shot()
2587 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(12), 0x1); in rtw8822c_dpk_one_shot()
2588 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(12), 0x0); in rtw8822c_dpk_one_shot()
2589 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_RPT_SEL, 0x0); in rtw8822c_dpk_one_shot()
2591 if (!check_hw_ready(rtwdev, REG_STAT_RPT, BIT(31), 0x1)) { in rtw8822c_dpk_one_shot()
2593 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n"); in rtw8822c_dpk_one_shot()
2596 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, in rtw8822c_dpk_one_shot()
2598 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x9); in rtw8822c_dpk_one_shot()
2600 dpk_cmd = rtw8822c_dpk_get_cmd(rtwdev, action, path); in rtw8822c_dpk_one_shot()
2601 rtw_write32(rtwdev, REG_NCTL0, dpk_cmd); in rtw8822c_dpk_one_shot()
2602 rtw_write32(rtwdev, REG_NCTL0, dpk_cmd + 1); in rtw8822c_dpk_one_shot()
2604 if (!check_hw_ready(rtwdev, 0x2d9c, 0xff, 0x55)) { in rtw8822c_dpk_one_shot()
2606 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n"); in rtw8822c_dpk_one_shot()
2608 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, in rtw8822c_dpk_one_shot()
2610 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x0); in rtw8822c_dpk_one_shot()
2613 rtw8822c_dpk_set_gnt_wl(rtwdev, false); in rtw8822c_dpk_one_shot()
2615 rtw_write8(rtwdev, 0x1b10, 0x0); in rtw8822c_dpk_one_shot()
2620 static u16 rtw8822c_dpk_dgain_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_dgain_read() argument
2624 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_dgain_read()
2625 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, 0x00ff0000, 0x0); in rtw8822c_dpk_dgain_read()
2627 dgain = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(27, 16)); in rtw8822c_dpk_dgain_read()
2632 static u8 rtw8822c_dpk_thermal_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_thermal_read() argument
2634 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1); in rtw8822c_dpk_thermal_read()
2635 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x0); in rtw8822c_dpk_thermal_read()
2636 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1); in rtw8822c_dpk_thermal_read()
2639 return (u8)rtw_read_rf(rtwdev, path, RF_T_METER, 0x0007e); in rtw8822c_dpk_thermal_read()
2642 static u32 rtw8822c_dpk_pas_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_pas_read() argument
2646 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1)); in rtw8822c_dpk_pas_read()
2647 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x0); in rtw8822c_dpk_pas_read()
2648 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x00060001); in rtw8822c_dpk_pas_read()
2649 rtw_write32(rtwdev, 0x1b4c, 0x00000000); in rtw8822c_dpk_pas_read()
2650 rtw_write32(rtwdev, 0x1b4c, 0x00080000); in rtw8822c_dpk_pas_read()
2652 q_val = rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKHWORD); in rtw8822c_dpk_pas_read()
2653 i_val = rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKLWORD); in rtw8822c_dpk_pas_read()
2660 rtw_write32(rtwdev, 0x1b4c, 0x00000000); in rtw8822c_dpk_pas_read()
2691 static u8 rtw8822c_dpk_gainloss_result(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_gainloss_result() argument
2695 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_gainloss_result()
2696 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x1); in rtw8822c_dpk_gainloss_result()
2697 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x00060000); in rtw8822c_dpk_gainloss_result()
2699 result = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, 0x000000f0); in rtw8822c_dpk_gainloss_result()
2701 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x0); in rtw8822c_dpk_gainloss_result()
2706 static u8 rtw8822c_dpk_agc_gain_chk(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dpk_agc_gain_chk() argument
2712 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_agc_gain_chk()
2713 dgain = rtw8822c_dpk_dgain_read(rtwdev, path); in rtw8822c_dpk_agc_gain_chk()
2723 static u8 rtw8822c_dpk_agc_loss_chk(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_agc_loss_chk() argument
2727 loss = rtw8822c_dpk_pas_read(rtwdev, path); in rtw8822c_dpk_agc_loss_chk()
2750 static u8 rtw8822c_gain_check_state(struct rtw_dev *rtwdev, in rtw8822c_gain_check_state() argument
2755 data->txbb = (u8)rtw_read_rf(rtwdev, data->path, RF_TX_GAIN, in rtw8822c_gain_check_state()
2757 data->pga = (u8)rtw_read_rf(rtwdev, data->path, RF_MODE_TRXAGC, in rtw8822c_gain_check_state()
2765 state = rtw8822c_dpk_agc_gain_chk(rtwdev, data->path, in rtw8822c_gain_check_state()
2780 static u8 rtw8822c_gain_large_state(struct rtw_dev *rtwdev, in rtw8822c_gain_large_state() argument
2786 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_large_state()
2788 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0x0); in rtw8822c_gain_large_state()
2795 static u8 rtw8822c_gain_less_state(struct rtw_dev *rtwdev, in rtw8822c_gain_less_state() argument
2801 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_less_state()
2803 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf); in rtw8822c_gain_less_state()
2810 static u8 rtw8822c_gl_state(struct rtw_dev *rtwdev, in rtw8822c_gl_state() argument
2823 rtw_write_rf(rtwdev, data->path, RF_TX_GAIN, BIT_GAIN_TXBB, data->txbb); in rtw8822c_gl_state()
2829 static u8 rtw8822c_gl_large_state(struct rtw_dev *rtwdev, in rtw8822c_gl_large_state() argument
2832 return rtw8822c_gl_state(rtwdev, data, 1); in rtw8822c_gl_large_state()
2835 static u8 rtw8822c_gl_less_state(struct rtw_dev *rtwdev, in rtw8822c_gl_less_state() argument
2838 return rtw8822c_gl_state(rtwdev, data, 0); in rtw8822c_gl_less_state()
2841 static u8 rtw8822c_loss_check_state(struct rtw_dev *rtwdev, in rtw8822c_loss_check_state() argument
2847 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_GAIN_LOSS); in rtw8822c_loss_check_state()
2848 state = rtw8822c_dpk_agc_loss_chk(rtwdev, path); in rtw8822c_loss_check_state()
2853 static u8 (*dpk_state[])(struct rtw_dev *rtwdev,
2859 static u8 rtw8822c_dpk_pas_agc(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dpk_pas_agc() argument
2863 u8 (*func)(struct rtw_dev *rtwdev, struct rtw8822c_dpk_data *data); in rtw8822c_dpk_pas_agc()
2872 state = func(rtwdev, &data); in rtw8822c_dpk_pas_agc()
2880 static bool rtw8822c_dpk_coef_iq_check(struct rtw_dev *rtwdev, in rtw8822c_dpk_coef_iq_check() argument
2890 static u32 rtw8822c_dpk_coef_transfer(struct rtw_dev *rtwdev) in rtw8822c_dpk_coef_transfer() argument
2895 reg = rtw_read32(rtwdev, REG_STAT_RPT); in rtw8822c_dpk_coef_transfer()
2897 coef_i = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKHWORD) & 0x1fff; in rtw8822c_dpk_coef_transfer()
2898 coef_q = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKLWORD) & 0x1fff; in rtw8822c_dpk_coef_transfer()
2914 static void rtw8822c_dpk_coef_tbl_apply(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_coef_tbl_apply() argument
2916 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_tbl_apply()
2920 rtw_write32(rtwdev, REG_RXSRAM_CTL, in rtw8822c_dpk_coef_tbl_apply()
2922 dpk_info->coef[path][i] = rtw8822c_dpk_coef_transfer(rtwdev); in rtw8822c_dpk_coef_tbl_apply()
2926 static void rtw8822c_dpk_get_coef(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_get_coef() argument
2928 rtw_write32(rtwdev, REG_NCTL0, 0x0000000c); in rtw8822c_dpk_get_coef()
2931 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(24), 0x0); in rtw8822c_dpk_get_coef()
2932 rtw_write32(rtwdev, REG_DPD_CTL0_S0, 0x30000080); in rtw8822c_dpk_get_coef()
2934 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(24), 0x1); in rtw8822c_dpk_get_coef()
2935 rtw_write32(rtwdev, REG_DPD_CTL0_S1, 0x30000080); in rtw8822c_dpk_get_coef()
2938 rtw8822c_dpk_coef_tbl_apply(rtwdev, path); in rtw8822c_dpk_get_coef()
2941 static u8 rtw8822c_dpk_coef_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_coef_read() argument
2943 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_read()
2951 if (rtw8822c_dpk_coef_iq_check(rtwdev, coef_i, coef_q)) { in rtw8822c_dpk_coef_read()
2959 static void rtw8822c_dpk_coef_write(struct rtw_dev *rtwdev, u8 path, u8 result) in rtw8822c_dpk_coef_write() argument
2961 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_write()
2966 rtw_write32(rtwdev, REG_NCTL0, 0x0000000c); in rtw8822c_dpk_coef_write()
2967 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0); in rtw8822c_dpk_coef_write()
2978 rtw_write32(rtwdev, reg[path] + addr * 4, coef); in rtw8822c_dpk_coef_write()
2982 static void rtw8822c_dpk_fill_result(struct rtw_dev *rtwdev, u32 dpk_txagc, in rtw8822c_dpk_fill_result() argument
2985 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_fill_result()
2987 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_fill_result()
2990 rtw_write8(rtwdev, REG_DPD_AGC, (u8)(dpk_txagc - 6)); in rtw8822c_dpk_fill_result()
2992 rtw_write8(rtwdev, REG_DPD_AGC, 0x00); in rtw8822c_dpk_fill_result()
2995 dpk_info->dpk_txagc[path] = rtw_read8(rtwdev, REG_DPD_AGC); in rtw8822c_dpk_fill_result()
2997 rtw8822c_dpk_coef_write(rtwdev, path, result); in rtw8822c_dpk_fill_result()
3000 static u32 rtw8822c_dpk_gainloss(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_gainloss() argument
3002 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_gainloss()
3005 ori_txbb = rtw8822c_dpk_rf_setting(rtwdev, path); in rtw8822c_dpk_gainloss()
3006 ori_txagc = (u8)rtw_read_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_TXAGC); in rtw8822c_dpk_gainloss()
3008 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_dpk_gainloss()
3009 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_gainloss()
3010 rtw8822c_dpk_dgain_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3012 if (rtw8822c_dpk_dc_corr_check(rtwdev, path)) { in rtw8822c_dpk_gainloss()
3013 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_dpk_gainloss()
3014 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_gainloss()
3015 rtw8822c_dpk_dc_corr_check(rtwdev, path); in rtw8822c_dpk_gainloss()
3018 t1 = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3019 tx_bb = rtw8822c_dpk_pas_agc(rtwdev, path, false, true); in rtw8822c_dpk_gainloss()
3020 tx_agc_search = rtw8822c_dpk_gainloss_result(rtwdev, path); in rtw8822c_dpk_gainloss()
3027 rtw_write_rf(rtwdev, path, RF_TX_GAIN, BIT_GAIN_TXBB, tx_bb); in rtw8822c_dpk_gainloss()
3031 t2 = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3038 static u8 rtw8822c_dpk_by_path(struct rtw_dev *rtwdev, u32 tx_agc, u8 path) in rtw8822c_dpk_by_path() argument
3042 result = rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DO_DPK); in rtw8822c_dpk_by_path()
3044 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_by_path()
3046 result = result | (u8)rtw_read32_mask(rtwdev, REG_DPD_CTL1_S0, BIT(26)); in rtw8822c_dpk_by_path()
3048 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x33e14); in rtw8822c_dpk_by_path()
3050 rtw8822c_dpk_get_coef(rtwdev, path); in rtw8822c_dpk_by_path()
3055 static void rtw8822c_dpk_cal_gs(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_cal_gs() argument
3057 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_cal_gs()
3060 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_cal_gs()
3061 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_BYPASS_DPD, 0x0); in rtw8822c_dpk_cal_gs()
3062 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x0); in rtw8822c_dpk_cal_gs()
3063 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x9); in rtw8822c_dpk_cal_gs()
3064 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_INNER_LB, 0x1); in rtw8822c_dpk_cal_gs()
3065 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_cal_gs()
3066 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_DPD_CLK, 0xf); in rtw8822c_dpk_cal_gs()
3069 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, in rtw8822c_dpk_cal_gs()
3071 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, BIT_DPD_EN, 0x1); in rtw8822c_dpk_cal_gs()
3073 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, in rtw8822c_dpk_cal_gs()
3075 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, BIT_DPD_EN, 0x1); in rtw8822c_dpk_cal_gs()
3079 rtw_write32(rtwdev, REG_DPD_CTL16, 0x80001310); in rtw8822c_dpk_cal_gs()
3080 rtw_write32(rtwdev, REG_DPD_CTL16, 0x00001310); in rtw8822c_dpk_cal_gs()
3081 rtw_write32(rtwdev, REG_DPD_CTL16, 0x810000db); in rtw8822c_dpk_cal_gs()
3082 rtw_write32(rtwdev, REG_DPD_CTL16, 0x010000db); in rtw8822c_dpk_cal_gs()
3083 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0000b428); in rtw8822c_dpk_cal_gs()
3084 rtw_write32(rtwdev, REG_DPD_CTL15, in rtw8822c_dpk_cal_gs()
3087 rtw_write32(rtwdev, REG_DPD_CTL16, 0x8200190c); in rtw8822c_dpk_cal_gs()
3088 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0200190c); in rtw8822c_dpk_cal_gs()
3089 rtw_write32(rtwdev, REG_DPD_CTL16, 0x8301ee14); in rtw8822c_dpk_cal_gs()
3090 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0301ee14); in rtw8822c_dpk_cal_gs()
3091 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0000b428); in rtw8822c_dpk_cal_gs()
3092 rtw_write32(rtwdev, REG_DPD_CTL15, in rtw8822c_dpk_cal_gs()
3096 rtw_write32_mask(rtwdev, REG_DPD_CTL0, MASKBYTE3, 0x8 | path); in rtw8822c_dpk_cal_gs()
3098 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_CAL_PWR); in rtw8822c_dpk_cal_gs()
3100 rtw_write32_mask(rtwdev, REG_DPD_CTL15, MASKBYTE3, 0x0); in rtw8822c_dpk_cal_gs()
3101 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_cal_gs()
3102 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x0); in rtw8822c_dpk_cal_gs()
3103 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_INNER_LB, 0x0); in rtw8822c_dpk_cal_gs()
3104 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_cal_gs()
3107 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, 0x5b); in rtw8822c_dpk_cal_gs()
3109 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, 0x5b); in rtw8822c_dpk_cal_gs()
3111 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_RPT_SEL, 0x0); in rtw8822c_dpk_cal_gs()
3113 tmp_gs = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, BIT_RPT_DGAIN); in rtw8822c_dpk_cal_gs()
3118 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, tmp_gs); in rtw8822c_dpk_cal_gs()
3120 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, tmp_gs); in rtw8822c_dpk_cal_gs()
3125 static void rtw8822c_dpk_cal_coef1(struct rtw_dev *rtwdev) in rtw8822c_dpk_cal_coef1() argument
3127 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_cal_coef1()
3132 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c); in rtw8822c_dpk_cal_coef1()
3133 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0); in rtw8822c_dpk_cal_coef1()
3134 rtw_write32(rtwdev, REG_NCTL0, 0x00001148); in rtw8822c_dpk_cal_coef1()
3135 rtw_write32(rtwdev, REG_NCTL0, 0x00001149); in rtw8822c_dpk_cal_coef1()
3137 check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55); in rtw8822c_dpk_cal_coef1()
3139 rtw_write8(rtwdev, 0x1b10, 0x0); in rtw8822c_dpk_cal_coef1()
3140 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c); in rtw8822c_dpk_cal_coef1()
3142 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_cal_coef1()
3145 rtw_write32_mask(rtwdev, 0x1b18 + offset[path], MASKHWORD, in rtw8822c_dpk_cal_coef1()
3147 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3149 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3151 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3153 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3158 static void rtw8822c_dpk_on(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_on() argument
3160 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_on()
3162 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON); in rtw8822c_dpk_on()
3164 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_on()
3165 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x0); in rtw8822c_dpk_on()
3168 rtw8822c_dpk_cal_gs(rtwdev, path); in rtw8822c_dpk_on()
3171 static bool rtw8822c_dpk_check_pass(struct rtw_dev *rtwdev, bool is_fail, in rtw8822c_dpk_check_pass() argument
3177 if (rtw8822c_dpk_coef_read(rtwdev, path)) in rtw8822c_dpk_check_pass()
3185 rtw8822c_dpk_fill_result(rtwdev, dpk_txagc, path, result); in rtw8822c_dpk_check_pass()
3190 static void rtw8822c_dpk_result_reset(struct rtw_dev *rtwdev) in rtw8822c_dpk_result_reset() argument
3192 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_result_reset()
3195 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_result_reset()
3197 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, in rtw8822c_dpk_result_reset()
3199 rtw_write32_mask(rtwdev, 0x1b58, 0x0000007f, 0x0); in rtw8822c_dpk_result_reset()
3205 dpk_info->thermal_dpk[path] = rtw8822c_dpk_thermal_read(rtwdev, in rtw8822c_dpk_result_reset()
3210 static void rtw8822c_dpk_calibrate(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_calibrate() argument
3212 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_calibrate()
3216 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk start\n", path); in rtw8822c_dpk_calibrate()
3218 dpk_txagc = rtw8822c_dpk_gainloss(rtwdev, path); in rtw8822c_dpk_calibrate()
3220 dpk_fail = rtw8822c_dpk_by_path(rtwdev, dpk_txagc, path); in rtw8822c_dpk_calibrate()
3222 if (!rtw8822c_dpk_check_pass(rtwdev, dpk_fail, dpk_txagc, path)) in rtw8822c_dpk_calibrate()
3223 rtw_err(rtwdev, "failed to do dpk calibration\n"); in rtw8822c_dpk_calibrate()
3225 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk finish\n", path); in rtw8822c_dpk_calibrate()
3231 static void rtw8822c_dpk_path_select(struct rtw_dev *rtwdev) in rtw8822c_dpk_path_select() argument
3233 rtw8822c_dpk_calibrate(rtwdev, RF_PATH_A); in rtw8822c_dpk_path_select()
3234 rtw8822c_dpk_calibrate(rtwdev, RF_PATH_B); in rtw8822c_dpk_path_select()
3235 rtw8822c_dpk_on(rtwdev, RF_PATH_A); in rtw8822c_dpk_path_select()
3236 rtw8822c_dpk_on(rtwdev, RF_PATH_B); in rtw8822c_dpk_path_select()
3237 rtw8822c_dpk_cal_coef1(rtwdev); in rtw8822c_dpk_path_select()
3240 static void rtw8822c_dpk_enable_disable(struct rtw_dev *rtwdev) in rtw8822c_dpk_enable_disable() argument
3242 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_enable_disable()
3245 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_enable_disable()
3247 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, BIT_DPD_EN, in rtw8822c_dpk_enable_disable()
3249 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, BIT_DPD_EN, in rtw8822c_dpk_enable_disable()
3253 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, mask, 0x0); in rtw8822c_dpk_enable_disable()
3254 rtw_write8(rtwdev, REG_DPD_CTL0_S0, dpk_info->dpk_gs[RF_PATH_A]); in rtw8822c_dpk_enable_disable()
3257 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, mask, 0x0); in rtw8822c_dpk_enable_disable()
3258 rtw_write8(rtwdev, REG_DPD_CTL0_S1, dpk_info->dpk_gs[RF_PATH_B]); in rtw8822c_dpk_enable_disable()
3262 static void rtw8822c_dpk_reload_data(struct rtw_dev *rtwdev) in rtw8822c_dpk_reload_data() argument
3264 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_reload_data()
3272 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_reload_data()
3273 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, in rtw8822c_dpk_reload_data()
3276 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f100000); in rtw8822c_dpk_reload_data()
3278 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f0d0000); in rtw8822c_dpk_reload_data()
3280 rtw_write8(rtwdev, REG_DPD_AGC, dpk_info->dpk_txagc[path]); in rtw8822c_dpk_reload_data()
3282 rtw8822c_dpk_coef_write(rtwdev, path, in rtw8822c_dpk_reload_data()
3285 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON); in rtw8822c_dpk_reload_data()
3287 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc); in rtw8822c_dpk_reload_data()
3290 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, in rtw8822c_dpk_reload_data()
3293 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, in rtw8822c_dpk_reload_data()
3296 rtw8822c_dpk_cal_coef1(rtwdev); in rtw8822c_dpk_reload_data()
3299 static bool rtw8822c_dpk_reload(struct rtw_dev *rtwdev) in rtw8822c_dpk_reload() argument
3301 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_reload()
3306 channel = (u8)(rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK) & 0xff); in rtw8822c_dpk_reload()
3309 rtw_dbg(rtwdev, RTW_DBG_RFK, in rtw8822c_dpk_reload()
3311 rtw8822c_dpk_reload_data(rtwdev); in rtw8822c_dpk_reload()
3318 static void rtw8822c_do_dpk(struct rtw_dev *rtwdev) in rtw8822c_do_dpk() argument
3320 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_do_dpk()
3332 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] Skip DPK due to DPD PWR off\n"); in rtw8822c_do_dpk()
3334 } else if (rtw8822c_dpk_reload(rtwdev)) { in rtw8822c_do_dpk()
3341 rtw8822c_dpk_information(rtwdev); in rtw8822c_do_dpk()
3343 rtw8822c_dpk_backup_registers(rtwdev, bb_reg, DPK_BB_REG_NUM, bckp); in rtw8822c_do_dpk()
3344 rtw8822c_dpk_backup_rf_registers(rtwdev, rf_reg, rf_reg_backup); in rtw8822c_do_dpk()
3346 rtw8822c_dpk_mac_bb_setting(rtwdev); in rtw8822c_do_dpk()
3347 rtw8822c_dpk_afe_setting(rtwdev, true); in rtw8822c_do_dpk()
3348 rtw8822c_dpk_pre_setting(rtwdev); in rtw8822c_do_dpk()
3349 rtw8822c_dpk_result_reset(rtwdev); in rtw8822c_do_dpk()
3350 rtw8822c_dpk_path_select(rtwdev); in rtw8822c_do_dpk()
3351 rtw8822c_dpk_afe_setting(rtwdev, false); in rtw8822c_do_dpk()
3352 rtw8822c_dpk_enable_disable(rtwdev); in rtw8822c_do_dpk()
3354 rtw8822c_dpk_reload_rf_registers(rtwdev, rf_reg, rf_reg_backup); in rtw8822c_do_dpk()
3355 for (path = 0; path < rtwdev->hal.rf_path_num; path++) in rtw8822c_do_dpk()
3356 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_do_dpk()
3357 rtw8822c_dpk_restore_registers(rtwdev, DPK_BB_REG_NUM, bckp); in rtw8822c_do_dpk()
3360 static void rtw8822c_phy_calibration(struct rtw_dev *rtwdev) in rtw8822c_phy_calibration() argument
3362 rtw8822c_do_iqk(rtwdev); in rtw8822c_phy_calibration()
3363 rtw8822c_do_dpk(rtwdev); in rtw8822c_phy_calibration()
3366 static void rtw8822c_dpk_track(struct rtw_dev *rtwdev) in rtw8822c_dpk_track() argument
3368 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_track()
3377 thermal_value[path] = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_track()
3389 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, in rtw8822c_dpk_track()
3391 rtw_write32_mask(rtwdev, 0x1b58, GENMASK(6, 0), in rtw8822c_dpk_track()
3415 rtw8822c_phy_cck_pd_set_reg(struct rtw_dev *rtwdev, in rtw8822c_phy_cck_pd_set_reg() argument
3423 pd = rtw_read32_mask(rtwdev, in rtw8822c_phy_cck_pd_set_reg()
3426 cs = rtw_read32_mask(rtwdev, in rtw8822c_phy_cck_pd_set_reg()
3437 rtw_write32_mask(rtwdev, in rtw8822c_phy_cck_pd_set_reg()
3441 rtw_write32_mask(rtwdev, in rtw8822c_phy_cck_pd_set_reg()
3447 static void rtw8822c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl) in rtw8822c_phy_cck_pd_set() argument
3449 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_phy_cck_pd_set()
3455 nrx = (u8)rtw_read32_mask(rtwdev, 0x1a2c, 0x60000); in rtw8822c_phy_cck_pd_set()
3456 bw = (u8)rtw_read32_mask(rtwdev, 0x9b0, 0xc); in rtw8822c_phy_cck_pd_set()
3466 rtw8822c_phy_cck_pd_set_reg(rtwdev, in rtw8822c_phy_cck_pd_set()
3474 static void rtw8822c_pwrtrack_set(struct rtw_dev *rtwdev, u8 rf_path) in rtw8822c_pwrtrack_set() argument
3476 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwrtrack_set()
3480 rtw_write32_mask(rtwdev, 0x18a0, PWR_TRACK_MASK, in rtw8822c_pwrtrack_set()
3484 rtw_write32_mask(rtwdev, 0x41a0, PWR_TRACK_MASK, in rtw8822c_pwrtrack_set()
3492 static void rtw8822c_pwr_track_path(struct rtw_dev *rtwdev, in rtw8822c_pwr_track_path() argument
3496 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwr_track_path()
3499 if (rtwdev->efuse.thermal_meter[path] == 0xff) in rtw8822c_pwr_track_path()
3502 thermal_value = rtw_read_rf(rtwdev, path, RF_T_METER, 0x7e); in rtw8822c_pwr_track_path()
3504 rtw_phy_pwrtrack_avg(rtwdev, thermal_value, path); in rtw8822c_pwr_track_path()
3506 delta = rtw_phy_pwrtrack_get_delta(rtwdev, path); in rtw8822c_pwr_track_path()
3509 rtw_phy_pwrtrack_get_pwridx(rtwdev, swing_table, path, path, in rtw8822c_pwr_track_path()
3512 rtw8822c_pwrtrack_set(rtwdev, path); in rtw8822c_pwr_track_path()
3515 static void __rtw8822c_pwr_track(struct rtw_dev *rtwdev) in __rtw8822c_pwr_track() argument
3520 rtw_phy_config_swing_table(rtwdev, &swing_table); in __rtw8822c_pwr_track()
3522 for (i = 0; i < rtwdev->hal.rf_path_num; i++) in __rtw8822c_pwr_track()
3523 rtw8822c_pwr_track_path(rtwdev, &swing_table, i); in __rtw8822c_pwr_track()
3525 if (rtw_phy_pwrtrack_need_iqk(rtwdev)) in __rtw8822c_pwr_track()
3526 rtw8822c_do_iqk(rtwdev); in __rtw8822c_pwr_track()
3529 static void rtw8822c_pwr_track(struct rtw_dev *rtwdev) in rtw8822c_pwr_track() argument
3531 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_pwr_track()
3532 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwr_track()
3538 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, BIT(19), 0x01); in rtw8822c_pwr_track()
3539 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, BIT(19), 0x00); in rtw8822c_pwr_track()
3540 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, BIT(19), 0x01); in rtw8822c_pwr_track()
3542 rtw_write_rf(rtwdev, RF_PATH_B, RF_T_METER, BIT(19), 0x01); in rtw8822c_pwr_track()
3543 rtw_write_rf(rtwdev, RF_PATH_B, RF_T_METER, BIT(19), 0x00); in rtw8822c_pwr_track()
3544 rtw_write_rf(rtwdev, RF_PATH_B, RF_T_METER, BIT(19), 0x01); in rtw8822c_pwr_track()
3550 __rtw8822c_pwr_track(rtwdev); in rtw8822c_pwr_track()