Lines Matching refs:path

141 			  u8 path)  in _adc_fifo_rst()  argument
149 enum rtw89_rf_path path, bool is_bybb) in _rfk_rf_direct_cntrl() argument
152 rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x1); in _rfk_rf_direct_cntrl()
154 rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x0); in _rfk_rf_direct_cntrl()
158 enum rtw89_rf_path path, bool is_bybb) in _rfk_drf_direct_cntrl() argument
161 rtw89_write_rf(rtwdev, path, RR_BBDC, RR_BBDC_SEL, 0x1); in _rfk_drf_direct_cntrl()
163 rtw89_write_rf(rtwdev, path, RR_BBDC, RR_BBDC_SEL, 0x0); in _rfk_drf_direct_cntrl()
169 u8 path; in _wait_rx_mode() local
172 for (path = 0; path < RF_PATH_MAX; path++) { in _wait_rx_mode()
173 if (!(kpath & BIT(path))) in _wait_rx_mode()
178 rtwdev, path, 0x00, RR_MOD_MASK); in _wait_rx_mode()
181 path, ret); in _wait_rx_mode()
185 static void _dack_reset(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dack_reset() argument
268 enum rtw89_rf_path path, u8 index) in _dack_reload_by_path() argument
281 if (path == RF_PATH_A) in _dack_reload_by_path()
294 tmp |= dack->msbk_d[path][index][i + 12] << (i * 8); in _dack_reload_by_path()
303 tmp |= dack->msbk_d[path][index][i + 8] << (i * 8); in _dack_reload_by_path()
312 tmp |= dack->msbk_d[path][index][i + 4] << (i * 8); in _dack_reload_by_path()
321 tmp |= dack->msbk_d[path][index][i] << (i * 8); in _dack_reload_by_path()
329 tmp = (dack->biask_d[path][index] << 22) | in _dack_reload_by_path()
330 (dack->dadck_d[path][index] << 14); in _dack_reload_by_path()
339 static void _dack_reload(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dack_reload() argument
344 _dack_reload_by_path(rtwdev, path, index); in _dack_reload()
524 enum rtw89_rf_path path, bool is_afe) in _rx_dck_info() argument
529 "[RX_DCK] ==== S%d RX DCK (%s / CH%d / %s / by %s)====\n", path, in _rx_dck_info()
538 static void _rxbb_ofst_swap(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 rf_mode) in _rxbb_ofst_swap() argument
542 val_i = rtw89_read_rf(rtwdev, path, RR_DCK, RR_DCK_S1); in _rxbb_ofst_swap()
543 val_q = rtw89_read_rf(rtwdev, path, RR_DCK1, RR_DCK1_S1); in _rxbb_ofst_swap()
547 rtw89_write_rf(rtwdev, path, RR_LUTWE2, RR_LUTWE2_DIS, 0x1); in _rxbb_ofst_swap()
548 rtw89_write_rf(rtwdev, path, RR_LUTWA, RFREG_MASK, rf_mode); in _rxbb_ofst_swap()
549 rtw89_write_rf(rtwdev, path, RR_LUTWD0, RFREG_MASK, val); in _rxbb_ofst_swap()
550 rtw89_write_rf(rtwdev, path, RR_LUTWE2, RR_LUTWE2_DIS, 0x0); in _rxbb_ofst_swap()
557 static void _set_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 rf_mode) in _set_rx_dck() argument
562 rtw89_write_rf(rtwdev, path, RR_DCK, RR_DCK_LV, 0x0); in _set_rx_dck()
563 rtw89_write_rf(rtwdev, path, RR_DCK, RR_DCK_LV, 0x1); in _set_rx_dck()
567 rtwdev, path, RR_DCK, BIT(8)); in _set_rx_dck()
569 rtw89_write_rf(rtwdev, path, RR_DCK, RR_DCK_LV, 0x0); in _set_rx_dck()
572 path, ret); in _set_rx_dck()
574 _rxbb_ofst_swap(rtwdev, path, rf_mode); in _set_rx_dck()
580 u8 path; in _rx_dck() local
586 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _rx_dck()
587 _rx_dck_info(rtwdev, phy, path, is_afe); in _rx_dck()
589 rf_reg5 = rtw89_read_rf(rtwdev, path, RR_RSV1, RFREG_MASK); in _rx_dck()
591 if (rtwdev->is_tssi_mode[path]) in _rx_dck()
593 R_P0_TSSI_TRK + (path << 13), in _rx_dck()
596 rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x0); in _rx_dck()
597 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_MASK, RF_RX); in _rx_dck()
598 _set_rx_dck(rtwdev, path, RF_RX); in _rx_dck()
599 rtw89_write_rf(rtwdev, path, RR_RSV1, RFREG_MASK, rf_reg5); in _rx_dck()
601 if (rtwdev->is_tssi_mode[path]) in _rx_dck()
603 R_P0_TSSI_TRK + (path << 13), in _rx_dck()
608 static void _iqk_sram(struct rtw89_dev *rtwdev, u8 path) in _iqk_sram() argument
638 static void _iqk_rxk_setting(struct rtw89_dev *rtwdev, u8 path) in _iqk_rxk_setting() argument
640 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_MASK, 0xc); in _iqk_rxk_setting()
641 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_POW, 0x0); in _iqk_rxk_setting()
642 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_POW, 0x1); in _iqk_rxk_setting()
645 static bool _iqk_check_cal(struct rtw89_dev *rtwdev, u8 path) in _iqk_check_cal() argument
676 path, ret, fail1 || fail2, fail1, fail2); in _iqk_check_cal()
682 u8 path, u8 ktype) in _iqk_one_shot() argument
691 "[IQK]============ S%d ID_A_FLOK_COARSE ============\n", path); in _iqk_one_shot()
693 iqk_cmd = 0x108 | (1 << (4 + path)); in _iqk_one_shot()
697 "[IQK]============ S%d ID_G_FLOK_COARSE ============\n", path); in _iqk_one_shot()
699 iqk_cmd = 0x108 | (1 << (4 + path)); in _iqk_one_shot()
703 "[IQK]============ S%d ID_A_FLOK_FINE ============\n", path); in _iqk_one_shot()
705 iqk_cmd = 0x308 | (1 << (4 + path)); in _iqk_one_shot()
709 "[IQK]============ S%d ID_G_FLOK_FINE ============\n", path); in _iqk_one_shot()
711 iqk_cmd = 0x308 | (1 << (4 + path)); in _iqk_one_shot()
715 "[IQK]============ S%d ID_TXK ============\n", path); in _iqk_one_shot()
717 iqk_cmd = 0x008 | (1 << (path + 4)) | in _iqk_one_shot()
718 (((0x8 + iqk_info->iqk_bw[path]) & 0xf) << 8); in _iqk_one_shot()
722 "[IQK]============ S%d ID_RXAGC ============\n", path); in _iqk_one_shot()
724 iqk_cmd = 0x708 | (1 << (4 + path)) | (path << 1); in _iqk_one_shot()
728 "[IQK]============ S%d ID_RXK ============\n", path); in _iqk_one_shot()
730 iqk_cmd = 0x008 | (1 << (path + 4)) | in _iqk_one_shot()
731 (((0xc + iqk_info->iqk_bw[path]) & 0xf) << 8); in _iqk_one_shot()
735 "[IQK]============ S%d ID_NBTXK ============\n", path); in _iqk_one_shot()
739 iqk_cmd = 0x408 | (1 << (4 + path)); in _iqk_one_shot()
743 "[IQK]============ S%d ID_NBRXK ============\n", path); in _iqk_one_shot()
747 iqk_cmd = 0x608 | (1 << (4 + path)); in _iqk_one_shot()
754 notready = _iqk_check_cal(rtwdev, path); in _iqk_one_shot()
757 _iqk_sram(rtwdev, path); in _iqk_one_shot()
762 path, ktype, iqk_cmd + 1, notready); in _iqk_one_shot()
768 enum rtw89_phy_idx phy_idx, u8 path) in _rxk_2g_group_sel() argument
779 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, gp = %x\n", path, gp); in _rxk_2g_group_sel()
781 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_RGM, g_idxrxgain[gp]); in _rxk_2g_group_sel()
782 rtw89_write_rf(rtwdev, path, RR_RXBB, RR_RXBB_C2, g_idxattc2[gp]); in _rxk_2g_group_sel()
787 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RFREG_MASK, 0x80013); in _rxk_2g_group_sel()
789 rf_0 = rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK); in _rxk_2g_group_sel()
794 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXAGC); in _rxk_2g_group_sel()
797 "[IQK]S%x, RXAGC 0x8008 = 0x%x, rxbb = %x\n", path, in _rxk_2g_group_sel()
799 rtw89_read_rf(rtwdev, path, RR_MOD, 0x003e0)); in _rxk_2g_group_sel()
801 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_OFF, 0x13); in _rxk_2g_group_sel()
803 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBRXK); in _rxk_2g_group_sel()
804 iqk_info->nb_rxcfir[path] = in _rxk_2g_group_sel()
807 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXK); in _rxk_2g_group_sel()
810 "[IQK]S%x, WBRXK 0x8008 = 0x%x\n", path, in _rxk_2g_group_sel()
818 _iqk_sram(rtwdev, path); in _rxk_2g_group_sel()
821 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), in _rxk_2g_group_sel()
822 MASKDWORD, iqk_info->nb_rxcfir[path] | 0x2); in _rxk_2g_group_sel()
823 iqk_info->is_wb_txiqk[path] = false; in _rxk_2g_group_sel()
825 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), in _rxk_2g_group_sel()
827 iqk_info->is_wb_txiqk[path] = true; in _rxk_2g_group_sel()
831 "[IQK]S%x, kfail = 0x%x, 0x8%x3c = 0x%x\n", path, kfail, in _rxk_2g_group_sel()
832 1 << path, iqk_info->nb_rxcfir[path]); in _rxk_2g_group_sel()
837 enum rtw89_phy_idx phy_idx, u8 path) in _rxk_5g_group_sel() argument
851 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, gp = %x\n", path, gp); in _rxk_5g_group_sel()
860 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RFREG_MASK, 0x80013); in _rxk_5g_group_sel()
862 rf_0 = rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK); in _rxk_5g_group_sel()
866 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXAGC); in _rxk_5g_group_sel()
869 "[IQK]S%x, RXAGC 0x8008 = 0x%x, rxbb = %x\n", path, in _rxk_5g_group_sel()
871 rtw89_read_rf(rtwdev, path, RR_MOD, RR_MOD_RXB)); in _rxk_5g_group_sel()
873 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_OFF, 0x13); in _rxk_5g_group_sel()
875 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBRXK); in _rxk_5g_group_sel()
876 iqk_info->nb_rxcfir[path] = in _rxk_5g_group_sel()
880 "[IQK]S%x, NBRXK 0x8008 = 0x%x\n", path, in _rxk_5g_group_sel()
883 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXK); in _rxk_5g_group_sel()
886 "[IQK]S%x, WBRXK 0x8008 = 0x%x\n", path, in _rxk_5g_group_sel()
894 _iqk_sram(rtwdev, path); in _rxk_5g_group_sel()
897 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), MASKDWORD, in _rxk_5g_group_sel()
898 iqk_info->nb_rxcfir[path] | 0x2); in _rxk_5g_group_sel()
899 iqk_info->is_wb_txiqk[path] = false; in _rxk_5g_group_sel()
901 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), MASKDWORD, in _rxk_5g_group_sel()
903 iqk_info->is_wb_txiqk[path] = true; in _rxk_5g_group_sel()
907 "[IQK]S%x, kfail = 0x%x, 0x8%x3c = 0x%x\n", path, kfail, in _rxk_5g_group_sel()
908 1 << path, iqk_info->nb_rxcfir[path]); in _rxk_5g_group_sel()
913 u8 path) in _iqk_5g_nbrxk() argument
925 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, gp = %x\n", path, gp); in _iqk_5g_nbrxk()
934 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RFREG_MASK, 0x80013); in _iqk_5g_nbrxk()
936 rf_0 = rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK); in _iqk_5g_nbrxk()
940 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXAGC); in _iqk_5g_nbrxk()
943 "[IQK]S%x, RXAGC 0x8008 = 0x%x, rxbb = %x\n", path, in _iqk_5g_nbrxk()
945 rtw89_read_rf(rtwdev, path, RR_MOD, 0x003e0)); in _iqk_5g_nbrxk()
947 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_OFF, 0x13); in _iqk_5g_nbrxk()
949 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBRXK); in _iqk_5g_nbrxk()
950 iqk_info->nb_rxcfir[path] = in _iqk_5g_nbrxk()
954 "[IQK]S%x, NBRXK 0x8008 = 0x%x\n", path, in _iqk_5g_nbrxk()
958 path, rtw89_phy_read32_mask(rtwdev, R_NCTL_RPT, MASKDWORD)); in _iqk_5g_nbrxk()
964 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), in _iqk_5g_nbrxk()
966 iqk_info->is_wb_rxiqk[path] = false; in _iqk_5g_nbrxk()
968 iqk_info->is_wb_rxiqk[path] = false; in _iqk_5g_nbrxk()
972 "[IQK]S%x, kfail = 0x%x, 0x8%x3c = 0x%x\n", path, kfail, in _iqk_5g_nbrxk()
973 1 << path, iqk_info->nb_rxcfir[path]); in _iqk_5g_nbrxk()
979 u8 path) in _iqk_2g_nbrxk() argument
988 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, gp = %x\n", path, gp); in _iqk_2g_nbrxk()
990 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_RGM, g_idxrxgain[gp]); in _iqk_2g_nbrxk()
991 rtw89_write_rf(rtwdev, path, RR_RXBB, RR_RXBB_C2, g_idxattc2[gp]); in _iqk_2g_nbrxk()
996 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RFREG_MASK, 0x80013); in _iqk_2g_nbrxk()
998 rf_0 = rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK); in _iqk_2g_nbrxk()
1002 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_RXAGC); in _iqk_2g_nbrxk()
1006 path, rtw89_phy_read32_mask(rtwdev, R_NCTL_RPT, MASKDWORD), in _iqk_2g_nbrxk()
1007 rtw89_read_rf(rtwdev, path, RR_MOD, 0x003e0)); in _iqk_2g_nbrxk()
1009 rtw89_write_rf(rtwdev, path, RR_RXKPLL, RR_RXKPLL_OFF, 0x13); in _iqk_2g_nbrxk()
1011 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBRXK); in _iqk_2g_nbrxk()
1012 iqk_info->nb_rxcfir[path] = in _iqk_2g_nbrxk()
1016 "[IQK]S%x, NBRXK 0x8008 = 0x%x\n", path, in _iqk_2g_nbrxk()
1020 path, rtw89_phy_read32_mask(rtwdev, R_NCTL_RPT, MASKDWORD)); in _iqk_2g_nbrxk()
1026 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), in _iqk_2g_nbrxk()
1028 iqk_info->is_wb_rxiqk[path] = false; in _iqk_2g_nbrxk()
1030 iqk_info->is_wb_rxiqk[path] = false; in _iqk_2g_nbrxk()
1034 "[IQK]S%x, kfail = 0x%x, 0x8%x3c = 0x%x\n", path, kfail, in _iqk_2g_nbrxk()
1035 1 << path, iqk_info->nb_rxcfir[path]); in _iqk_2g_nbrxk()
1039 static void _iqk_rxclk_setting(struct rtw89_dev *rtwdev, u8 path) in _iqk_rxclk_setting() argument
1043 rtw89_write_rf(rtwdev, path, RR_RXBB2, RR_RXBB2_CKT, 0x1); in _iqk_rxclk_setting()
1045 if (iqk_info->iqk_bw[path] == RTW89_CHANNEL_WIDTH_80) in _iqk_rxclk_setting()
1052 enum rtw89_phy_idx phy_idx, u8 path) in _txk_5g_group_sel() argument
1062 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR0, a_power_range[gp]); in _txk_5g_group_sel()
1063 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR1, a_track_range[gp]); in _txk_5g_group_sel()
1064 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_TG, a_gain_bb[gp]); in _txk_5g_group_sel()
1073 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBTXK); in _txk_5g_group_sel()
1074 iqk_info->nb_txcfir[path] = in _txk_5g_group_sel()
1077 rtw89_phy_write32_mask(rtwdev, R_KIP_IQP + (path << 8), in _txk_5g_group_sel()
1079 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_TXK); in _txk_5g_group_sel()
1086 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _txk_5g_group_sel()
1087 MASKDWORD, iqk_info->nb_txcfir[path] | 0x2); in _txk_5g_group_sel()
1088 iqk_info->is_wb_txiqk[path] = false; in _txk_5g_group_sel()
1090 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _txk_5g_group_sel()
1092 iqk_info->is_wb_txiqk[path] = true; in _txk_5g_group_sel()
1096 "[IQK]S%x, kfail = 0x%x, 0x8%x38 = 0x%x\n", path, kfail, in _txk_5g_group_sel()
1097 1 << path, iqk_info->nb_txcfir[path]); in _txk_5g_group_sel()
1102 enum rtw89_phy_idx phy_idx, u8 path) in _txk_2g_group_sel() argument
1112 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR0, g_power_range[gp]); in _txk_2g_group_sel()
1113 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR1, g_track_range[gp]); in _txk_2g_group_sel()
1114 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_TG, g_gain_bb[gp]); in _txk_2g_group_sel()
1123 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBTXK); in _txk_2g_group_sel()
1124 iqk_info->nb_txcfir[path] = in _txk_2g_group_sel()
1127 rtw89_phy_write32_mask(rtwdev, R_KIP_IQP + (path << 8), in _txk_2g_group_sel()
1129 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_TXK); in _txk_2g_group_sel()
1136 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _txk_2g_group_sel()
1137 MASKDWORD, iqk_info->nb_txcfir[path] | 0x2); in _txk_2g_group_sel()
1138 iqk_info->is_wb_txiqk[path] = false; in _txk_2g_group_sel()
1140 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _txk_2g_group_sel()
1142 iqk_info->is_wb_txiqk[path] = true; in _txk_2g_group_sel()
1146 "[IQK]S%x, kfail = 0x%x, 0x8%x38 = 0x%x\n", path, kfail, in _txk_2g_group_sel()
1147 1 << path, iqk_info->nb_txcfir[path]); in _txk_2g_group_sel()
1152 u8 path) in _iqk_5g_nbtxk() argument
1162 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR0, a_power_range[gp]); in _iqk_5g_nbtxk()
1163 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR1, a_track_range[gp]); in _iqk_5g_nbtxk()
1164 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_TG, a_gain_bb[gp]); in _iqk_5g_nbtxk()
1173 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBTXK); in _iqk_5g_nbtxk()
1174 iqk_info->nb_txcfir[path] = in _iqk_5g_nbtxk()
1182 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _iqk_5g_nbtxk()
1184 iqk_info->is_wb_rxiqk[path] = false; in _iqk_5g_nbtxk()
1186 iqk_info->is_wb_rxiqk[path] = false; in _iqk_5g_nbtxk()
1190 "[IQK]S%x, kfail = 0x%x, 0x8%x38 = 0x%x\n", path, kfail, in _iqk_5g_nbtxk()
1191 1 << path, iqk_info->nb_txcfir[path]); in _iqk_5g_nbtxk()
1196 u8 path) in _iqk_2g_nbtxk() argument
1206 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR0, g_power_range[gp]); in _iqk_2g_nbtxk()
1207 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR1, g_track_range[gp]); in _iqk_2g_nbtxk()
1208 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_TG, g_gain_bb[gp]); in _iqk_2g_nbtxk()
1217 notready = _iqk_one_shot(rtwdev, phy_idx, path, ID_NBTXK); in _iqk_2g_nbtxk()
1218 iqk_info->nb_txcfir[path] = in _iqk_2g_nbtxk()
1219 rtw89_phy_read32_mask(rtwdev, R_TXIQC + (path << 8), in _iqk_2g_nbtxk()
1227 rtw89_phy_write32_mask(rtwdev, R_TXIQC + (path << 8), in _iqk_2g_nbtxk()
1229 iqk_info->is_wb_rxiqk[path] = false; in _iqk_2g_nbtxk()
1231 iqk_info->is_wb_rxiqk[path] = false; in _iqk_2g_nbtxk()
1235 "[IQK]S%x, kfail = 0x%x, 0x8%x38 = 0x%x\n", path, kfail, in _iqk_2g_nbtxk()
1236 1 << path, iqk_info->nb_txcfir[path]); in _iqk_2g_nbtxk()
1241 u8 path) in _iqk_2g_lok() argument
1265 0x00000109 | (1 << (4 + path))); in _iqk_2g_lok()
1266 fail |= _iqk_check_cal(rtwdev, path); in _iqk_2g_lok()
1271 0x00000309 | (1 << (4 + path))); in _iqk_2g_lok()
1272 fail |= _iqk_check_cal(rtwdev, path); in _iqk_2g_lok()
1294 u8 path) in _iqk_5g_lok() argument
1318 0x00000109 | (1 << (4 + path))); in _iqk_5g_lok()
1319 fail |= _iqk_check_cal(rtwdev, path); in _iqk_5g_lok()
1325 0x00000309 | (1 << (4 + path))); in _iqk_5g_lok()
1326 fail |= _iqk_check_cal(rtwdev, path); in _iqk_5g_lok()
1347 static void _iqk_txk_setting(struct rtw89_dev *rtwdev, u8 path) in _iqk_txk_setting() argument
1351 switch (iqk_info->iqk_band[path]) { in _iqk_txk_setting()
1368 u8 path) in _iqk_by_path() argument
1377 _iqk_txk_setting(rtwdev, path); in _iqk_by_path()
1378 if (iqk_info->iqk_band[path] == RTW89_BAND_2G) in _iqk_by_path()
1379 lok_is_fail = _iqk_2g_lok(rtwdev, phy_idx, path); in _iqk_by_path()
1381 lok_is_fail = _iqk_5g_lok(rtwdev, phy_idx, path); in _iqk_by_path()
1388 if (iqk_info->iqk_band[path] == RTW89_BAND_2G) in _iqk_by_path()
1389 iqk_info->iqk_tx_fail[0][path] = in _iqk_by_path()
1390 _iqk_2g_nbtxk(rtwdev, phy_idx, path); in _iqk_by_path()
1392 iqk_info->iqk_tx_fail[0][path] = in _iqk_by_path()
1393 _iqk_5g_nbtxk(rtwdev, phy_idx, path); in _iqk_by_path()
1395 if (iqk_info->iqk_band[path] == RTW89_BAND_2G) in _iqk_by_path()
1396 iqk_info->iqk_tx_fail[0][path] = in _iqk_by_path()
1397 _txk_2g_group_sel(rtwdev, phy_idx, path); in _iqk_by_path()
1399 iqk_info->iqk_tx_fail[0][path] = in _iqk_by_path()
1400 _txk_5g_group_sel(rtwdev, phy_idx, path); in _iqk_by_path()
1403 _iqk_rxclk_setting(rtwdev, path); in _iqk_by_path()
1404 _iqk_rxk_setting(rtwdev, path); in _iqk_by_path()
1405 _adc_fifo_rst(rtwdev, phy_idx, path); in _iqk_by_path()
1408 if (iqk_info->iqk_band[path] == RTW89_BAND_2G) in _iqk_by_path()
1409 iqk_info->iqk_rx_fail[0][path] = in _iqk_by_path()
1410 _iqk_2g_nbrxk(rtwdev, phy_idx, path); in _iqk_by_path()
1412 iqk_info->iqk_rx_fail[0][path] = in _iqk_by_path()
1413 _iqk_5g_nbrxk(rtwdev, phy_idx, path); in _iqk_by_path()
1415 if (iqk_info->iqk_band[path] == RTW89_BAND_2G) in _iqk_by_path()
1416 iqk_info->iqk_rx_fail[0][path] = in _iqk_by_path()
1417 _rxk_2g_group_sel(rtwdev, phy_idx, path); in _iqk_by_path()
1419 iqk_info->iqk_rx_fail[0][path] = in _iqk_by_path()
1420 _rxk_5g_group_sel(rtwdev, phy_idx, path); in _iqk_by_path()
1484 u8 path) in _iqk_get_ch_info() argument
1490 iqk_info->iqk_band[path] = chan->band_type; in _iqk_get_ch_info()
1491 iqk_info->iqk_bw[path] = chan->band_width; in _iqk_get_ch_info()
1492 iqk_info->iqk_ch[path] = chan->channel; in _iqk_get_ch_info()
1493 iqk_info->iqk_table_idx[path] = idx; in _iqk_get_ch_info()
1496 path, phy, rtwdev->dbcc_en ? "on" : "off", in _iqk_get_ch_info()
1497 iqk_info->iqk_band[path] == 0 ? "2G" : in _iqk_get_ch_info()
1498 iqk_info->iqk_band[path] == 1 ? "5G" : "6G", in _iqk_get_ch_info()
1499 iqk_info->iqk_ch[path], in _iqk_get_ch_info()
1500 iqk_info->iqk_bw[path] == 0 ? "20M" : in _iqk_get_ch_info()
1501 iqk_info->iqk_bw[path] == 1 ? "40M" : "80M"); in _iqk_get_ch_info()
1505 path, iqk_info->syn1to2); in _iqk_get_ch_info()
1509 u8 path) in _iqk_start_iqk() argument
1511 _iqk_by_path(rtwdev, phy_idx, path); in _iqk_start_iqk()
1514 static void _iqk_restore(struct rtw89_dev *rtwdev, u8 path) in _iqk_restore() argument
1522 fail = _iqk_check_cal(rtwdev, path); in _iqk_restore()
1534 enum rtw89_phy_idx phy_idx, u8 path) in _iqk_afebb_restore() argument
1539 static void _iqk_preset(struct rtw89_dev *rtwdev, u8 path) in _iqk_preset() argument
1543 rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x0); in _iqk_preset()
1549 enum rtw89_phy_idx phy_idx, u8 path) in _iqk_macbb_setting() argument
1559 u8 idx, path; in _iqk_init() local
1578 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _iqk_init()
1579 iqk_info->lok_cor_fail[idx][path] = false; in _iqk_init()
1580 iqk_info->lok_fin_fail[idx][path] = false; in _iqk_init()
1581 iqk_info->iqk_tx_fail[idx][path] = false; in _iqk_init()
1582 iqk_info->iqk_rx_fail[idx][path] = false; in _iqk_init()
1583 iqk_info->iqk_table_idx[path] = 0x0; in _iqk_init()
1589 enum rtw89_phy_idx phy_idx, u8 path) in _doiqk() argument
1605 _iqk_get_ch_info(rtwdev, phy_idx, path); in _doiqk()
1608 _rfk_backup_rf_reg(rtwdev, &backup_rf_val[path][0], path); in _doiqk()
1609 _iqk_macbb_setting(rtwdev, phy_idx, path); in _doiqk()
1610 _iqk_preset(rtwdev, path); in _doiqk()
1611 _iqk_start_iqk(rtwdev, phy_idx, path); in _doiqk()
1612 _iqk_restore(rtwdev, path); in _doiqk()
1613 _iqk_afebb_restore(rtwdev, phy_idx, path); in _doiqk()
1615 _rfk_restore_rf_reg(rtwdev, &backup_rf_val[path][0], path); in _doiqk()
1627 u32 reg_bkup[][DPK_KIP_REG_NUM_8851B], u8 path) in _dpk_bkup_kip() argument
1632 reg_bkup[path][i] = in _dpk_bkup_kip()
1633 rtw89_phy_read32_mask(rtwdev, reg[i] + (path << 8), MASKDWORD); in _dpk_bkup_kip()
1636 reg[i] + (path << 8), reg_bkup[path][i]); in _dpk_bkup_kip()
1641 u32 rf_bkup[][DPK_RF_REG_NUM_8851B], u8 path) in _dpk_bkup_rf() argument
1646 rf_bkup[path][i] = rtw89_read_rf(rtwdev, path, rf_reg[i], RFREG_MASK); in _dpk_bkup_rf()
1649 path, rf_reg[i], rf_bkup[path][i]); in _dpk_bkup_rf()
1654 u32 reg_bkup[][DPK_KIP_REG_NUM_8851B], u8 path) in _dpk_reload_kip() argument
1659 rtw89_phy_write32_mask(rtwdev, reg[i] + (path << 8), MASKDWORD, in _dpk_reload_kip()
1660 reg_bkup[path][i]); in _dpk_reload_kip()
1664 reg[i] + (path << 8), reg_bkup[path][i]); in _dpk_reload_kip()
1669 u32 rf_bkup[][DPK_RF_REG_NUM_8851B], u8 path) in _dpk_reload_rf() argument
1674 rtw89_write_rf(rtwdev, path, rf_reg[i], RFREG_MASK, rf_bkup[path][i]); in _dpk_reload_rf()
1677 "[DPK] Reload RF S%d 0x%x = %x\n", path, in _dpk_reload_rf()
1678 rf_reg[i], rf_bkup[path][i]); in _dpk_reload_rf()
1683 enum rtw89_rf_path path, enum dpk_id id) in _dpk_one_shot() argument
1689 dpk_cmd = ((id << 8) | (0x19 + path * 0x12)); in _dpk_one_shot()
1722 static void _dpk_onoff(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, in _dpk_onoff() argument
1726 u8 kidx = dpk->cur_idx[path]; in _dpk_onoff()
1730 val = dpk->is_dpk_enable * off_reverse * dpk->bp[path][kidx].path_ok; in _dpk_onoff()
1732 rtw89_phy_write32_mask(rtwdev, R_DPD_CH0A + (path << 8) + (kidx << 2), in _dpk_onoff()
1735 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d[%d] DPK %s !!!\n", path, in _dpk_onoff()
1739 static void _dpk_init(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dpk_init() argument
1743 u8 kidx = dpk->cur_idx[path]; in _dpk_init()
1745 dpk->bp[path][kidx].path_ok = 0; in _dpk_init()
1749 enum rtw89_rf_path path) in _dpk_information() argument
1754 u8 kidx = dpk->cur_idx[path]; in _dpk_information()
1756 dpk->bp[path][kidx].band = chan->band_type; in _dpk_information()
1757 dpk->bp[path][kidx].ch = chan->band_width; in _dpk_information()
1758 dpk->bp[path][kidx].bw = chan->channel; in _dpk_information()
1762 path, dpk->cur_idx[path], phy, in _dpk_information()
1763 rtwdev->is_tssi_mode[path] ? "on" : "off", in _dpk_information()
1765 dpk->bp[path][kidx].band == 0 ? "2G" : in _dpk_information()
1766 dpk->bp[path][kidx].band == 1 ? "5G" : "6G", in _dpk_information()
1767 dpk->bp[path][kidx].ch, in _dpk_information()
1768 dpk->bp[path][kidx].bw == 0 ? "20M" : in _dpk_information()
1769 dpk->bp[path][kidx].bw == 1 ? "40M" : in _dpk_information()
1770 dpk->bp[path][kidx].bw == 2 ? "80M" : "160M"); in _dpk_information()
1773 static void _dpk_rxagc_onoff(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, in _dpk_rxagc_onoff() argument
1776 if (path == RF_PATH_A) in _dpk_rxagc_onoff()
1781 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d RXAGC is %s\n", path, in _dpk_rxagc_onoff()
1785 static void _dpk_bb_afe_setting(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dpk_bb_afe_setting() argument
1787 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(16 + path), 0x1); in _dpk_bb_afe_setting()
1788 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(20 + path), 0x0); in _dpk_bb_afe_setting()
1789 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(24 + path), 0x1); in _dpk_bb_afe_setting()
1790 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(28 + path), 0x0); in _dpk_bb_afe_setting()
1791 rtw89_phy_write32_mask(rtwdev, R_UPD_CLK + (path << 13), MASKDWORD, 0xd801dffd); in _dpk_bb_afe_setting()
1795 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(20 + path), 0x1); in _dpk_bb_afe_setting()
1796 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(28 + path), 0x1); in _dpk_bb_afe_setting()
1798 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d BB/AFE setting\n", path); in _dpk_bb_afe_setting()
1801 static void _dpk_bb_afe_restore(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dpk_bb_afe_restore() argument
1803 rtw89_phy_write32_mask(rtwdev, R_P0_NRBW + (path << 13), B_P0_NRBW_DBG, 0x0); in _dpk_bb_afe_restore()
1804 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(16 + path), 0x1); in _dpk_bb_afe_restore()
1805 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(20 + path), 0x0); in _dpk_bb_afe_restore()
1806 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(24 + path), 0x1); in _dpk_bb_afe_restore()
1807 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(28 + path), 0x0); in _dpk_bb_afe_restore()
1808 rtw89_phy_write32_mask(rtwdev, R_UPD_CLK + (path << 13), MASKDWORD, 0x00000000); in _dpk_bb_afe_restore()
1809 rtw89_phy_write32_mask(rtwdev, R_P0_RXCK + (path << 13), B_P0_TXCK_ALL, 0x00); in _dpk_bb_afe_restore()
1810 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(16 + path), 0x0); in _dpk_bb_afe_restore()
1811 rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, BIT(24 + path), 0x0); in _dpk_bb_afe_restore()
1813 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d BB/AFE restore\n", path); in _dpk_bb_afe_restore()
1816 static void _dpk_tssi_pause(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, in _dpk_tssi_pause() argument
1819 rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_TRK + (path << 13), in _dpk_tssi_pause()
1822 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d TSSI %s\n", path, in _dpk_tssi_pause()
1826 static void _dpk_tpg_sel(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 kidx) in _dpk_tpg_sel() argument
1830 if (dpk->bp[path][kidx].bw == RTW89_CHANNEL_WIDTH_80) { in _dpk_tpg_sel()
1833 } else if (dpk->bp[path][kidx].bw == RTW89_CHANNEL_WIDTH_40) { in _dpk_tpg_sel()
1842 dpk->bp[path][kidx].bw == RTW89_CHANNEL_WIDTH_80 ? "80M" : in _dpk_tpg_sel()
1843 dpk->bp[path][kidx].bw == RTW89_CHANNEL_WIDTH_40 ? "40M" : "20M"); in _dpk_tpg_sel()
1847 enum rtw89_rf_path path, bool force) in _dpk_txpwr_bb_force() argument
1849 rtw89_phy_write32_mask(rtwdev, R_TXPWRB + (path << 13), B_TXPWRB_ON, force); in _dpk_txpwr_bb_force()
1850 rtw89_phy_write32_mask(rtwdev, R_TXPWRB_H + (path << 13), B_TXPWRB_RDY, force); in _dpk_txpwr_bb_force()
1853 path, force ? "on" : "off"); in _dpk_txpwr_bb_force()
1869 enum rtw89_rf_path path, bool ctrl_by_kip) in _dpk_kip_control_rfc() argument
1871 rtw89_phy_write32_mask(rtwdev, R_UPD_CLK + (path << 13), in _dpk_kip_control_rfc()
1879 enum rtw89_rf_path path, u8 kidx) in _dpk_kip_preset() argument
1882 rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK)); in _dpk_kip_preset()
1883 rtw89_phy_write32_mask(rtwdev, R_DPD_CH0A + (path << 8) + (kidx << 2), in _dpk_kip_preset()
1886 _dpk_kip_control_rfc(rtwdev, path, true); in _dpk_kip_preset()
1887 _dpk_one_shot(rtwdev, phy, path, D_KIP_PRESET); in _dpk_kip_preset()
1891 enum rtw89_rf_path path) in _dpk_kip_restore() argument
1893 _dpk_one_shot(rtwdev, phy, path, D_KIP_RESTORE); in _dpk_kip_restore()
1894 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_kip_restore()
1895 _dpk_txpwr_bb_force(rtwdev, path, false); in _dpk_kip_restore()
1897 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d restore KIP\n", path); in _dpk_kip_restore()
1900 static void _dpk_kset_query(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dpk_kset_query() argument
1904 rtw89_phy_write32_mask(rtwdev, R_KIP_RPT + (path << 8), B_KIP_RPT_SEL, 0x10); in _dpk_kset_query()
1907 rtw89_phy_read32_mask(rtwdev, R_RPT_PER + (path << 8), B_RPT_PER_KSET) - 1; in _dpk_kset_query()
1910 static void _dpk_para_query(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 kidx) in _dpk_para_query() argument
1925 para = rtw89_phy_read32_mask(rtwdev, reg[kidx][cur_k_set] + (path << 8), in _dpk_para_query()
1928 dpk->bp[path][kidx].txagc_dpk = (para >> 10) & 0x3f; in _dpk_para_query()
1929 dpk->bp[path][kidx].ther_dpk = (para >> 26) & 0x3f; in _dpk_para_query()
1933 dpk->cur_k_set, dpk->bp[path][kidx].ther_dpk, in _dpk_para_query()
1934 dpk->bp[path][kidx].txagc_dpk); in _dpk_para_query()
1937 static bool _dpk_sync_check(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 kidx) in _dpk_sync_check() argument
1948 dpk->corr_idx[path][kidx] = corr_idx; in _dpk_sync_check()
1949 dpk->corr_val[path][kidx] = corr_val; in _dpk_sync_check()
1961 path, corr_idx, corr_val, dc_i, dc_q); in _dpk_sync_check()
1963 dpk->dc_i[path][kidx] = dc_i; in _dpk_sync_check()
1964 dpk->dc_q[path][kidx] = dc_q; in _dpk_sync_check()
1974 path, rxbb, in _dpk_sync_check()
1985 enum rtw89_rf_path path, u8 dbm, in _dpk_kip_set_txagc() argument
1992 "[DPK] set S%d txagc to %ddBm\n", path, dbm); in _dpk_kip_set_txagc()
1993 rtw89_phy_write32_mask(rtwdev, R_TXPWRB + (path << 13), in _dpk_kip_set_txagc()
1997 _dpk_one_shot(rtwdev, phy, path, D_TXAGC); in _dpk_kip_set_txagc()
1998 _dpk_kset_query(rtwdev, path); in _dpk_kip_set_txagc()
2002 enum rtw89_rf_path path, u8 kidx) in _dpk_kip_set_rxagc() argument
2004 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_kip_set_rxagc()
2006 rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK)); in _dpk_kip_set_rxagc()
2007 _dpk_kip_control_rfc(rtwdev, path, true); in _dpk_kip_set_rxagc()
2009 _dpk_one_shot(rtwdev, phy, path, D_RXAGC); in _dpk_kip_set_rxagc()
2010 return _dpk_sync_check(rtwdev, path, kidx); in _dpk_kip_set_rxagc()
2014 enum rtw89_rf_path path) in _dpk_lbk_rxiqk() argument
2019 rtw89_phy_write32_mask(rtwdev, R_DPD_V1 + (path << 8), B_DPD_LBK, 0x1); in _dpk_lbk_rxiqk()
2022 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_lbk_rxiqk()
2024 cur_rxbb = rtw89_read_rf(rtwdev, path, RR_MOD, RR_MOD_RXB); in _dpk_lbk_rxiqk()
2025 rf_11 = rtw89_read_rf(rtwdev, path, RR_TXIG, RFREG_MASK); in _dpk_lbk_rxiqk()
2026 reg_81cc = rtw89_phy_read32_mask(rtwdev, R_KIP_IQP + (path << 8), in _dpk_lbk_rxiqk()
2029 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR0, 0x0); in _dpk_lbk_rxiqk()
2030 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_GR1, 0x3); in _dpk_lbk_rxiqk()
2031 rtw89_write_rf(rtwdev, path, RR_TXIG, RR_TXIG_TG, 0xd); in _dpk_lbk_rxiqk()
2032 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_RXB, 0x1f); in _dpk_lbk_rxiqk()
2034 rtw89_phy_write32_mask(rtwdev, R_KIP_IQP + (path << 8), B_KIP_IQP_IQSW, 0x12); in _dpk_lbk_rxiqk()
2035 rtw89_phy_write32_mask(rtwdev, R_KIP_IQP + (path << 8), B_KIP_IQP_SW, 0x3); in _dpk_lbk_rxiqk()
2037 _dpk_kip_control_rfc(rtwdev, path, true); in _dpk_lbk_rxiqk()
2041 _dpk_one_shot(rtwdev, phy, path, LBK_RXIQK); in _dpk_lbk_rxiqk()
2043 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d LBK RXIQC = 0x%x\n", path, in _dpk_lbk_rxiqk()
2044 rtw89_phy_read32_mask(rtwdev, R_RXIQC + (path << 8), MASKDWORD)); in _dpk_lbk_rxiqk()
2046 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_lbk_rxiqk()
2048 rtw89_write_rf(rtwdev, path, RR_TXIG, RFREG_MASK, rf_11); in _dpk_lbk_rxiqk()
2049 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_RXB, cur_rxbb); in _dpk_lbk_rxiqk()
2050 rtw89_phy_write32_mask(rtwdev, R_KIP_IQP + (path << 8), B_KIP_IQP_SW, reg_81cc); in _dpk_lbk_rxiqk()
2054 rtw89_phy_write32_mask(rtwdev, R_LOAD_COEF + (path << 8), B_LOAD_COEF_DI, 0x1); in _dpk_lbk_rxiqk()
2056 _dpk_kip_control_rfc(rtwdev, path, true); in _dpk_lbk_rxiqk()
2059 static void _dpk_rf_setting(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, u8 kidx) in _dpk_rf_setting() argument
2063 if (dpk->bp[path][kidx].band == RTW89_BAND_2G) { in _dpk_rf_setting()
2064 rtw89_write_rf(rtwdev, path, RR_MOD, RFREG_MASK, 0x50521); in _dpk_rf_setting()
2065 rtw89_write_rf(rtwdev, path, RR_MOD_V1, RR_MOD_MASK, RF_DPK); in _dpk_rf_setting()
2066 rtw89_write_rf(rtwdev, path, RR_RXBB, RR_RXBB_ATTC, 0x0); in _dpk_rf_setting()
2067 rtw89_write_rf(rtwdev, path, RR_RXBB, RR_RXBB_ATTR, 0x7); in _dpk_rf_setting()
2069 rtw89_write_rf(rtwdev, path, RR_MOD, RFREG_MASK, in _dpk_rf_setting()
2071 rtw89_write_rf(rtwdev, path, RR_MOD_V1, RR_MOD_MASK, RF_DPK); in _dpk_rf_setting()
2072 rtw89_write_rf(rtwdev, path, RR_RXA2, RR_RAA2_SATT, 0x3); in _dpk_rf_setting()
2075 rtw89_write_rf(rtwdev, path, RR_RCKD, RR_RCKD_BW, 0x1); in _dpk_rf_setting()
2076 rtw89_write_rf(rtwdev, path, RR_BTC, RR_BTC_TXBB, dpk->bp[path][kidx].bw + 1); in _dpk_rf_setting()
2077 rtw89_write_rf(rtwdev, path, RR_BTC, RR_BTC_RXBB, 0x0); in _dpk_rf_setting()
2078 rtw89_write_rf(rtwdev, path, RR_RXBB2, RR_RXBB2_EBW, 0x0); in _dpk_rf_setting()
2081 static void _dpk_bypass_rxiqc(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _dpk_bypass_rxiqc() argument
2083 rtw89_phy_write32_mask(rtwdev, R_DPD_V1 + (path << 8), B_DPD_LBK, 0x1); in _dpk_bypass_rxiqc()
2084 rtw89_phy_write32_mask(rtwdev, R_RXIQC + (path << 8), MASKDWORD, 0x40000002); in _dpk_bypass_rxiqc()
2115 enum rtw89_rf_path path, u8 kidx) in _dpk_gainloss() argument
2117 _dpk_one_shot(rtwdev, phy, path, D_GAIN_LOSS); in _dpk_gainloss()
2118 _dpk_kip_set_txagc(rtwdev, phy, path, 0xff, false); in _dpk_gainloss()
2120 rtw89_phy_write32_mask(rtwdev, R_DPK_GL + (path << 8), B_DPK_GL_A1, 0xf078); in _dpk_gainloss()
2121 rtw89_phy_write32_mask(rtwdev, R_DPK_GL + (path << 8), B_DPK_GL_A0, 0x0); in _dpk_gainloss()
2173 enum rtw89_rf_path path, u8 kidx, u8 init_xdbm, u8 loss_only) in _dpk_agc() argument
2187 is_fail = _dpk_kip_set_rxagc(rtwdev, phy, path, kidx); in _dpk_agc()
2197 _dpk_one_shot(rtwdev, phy, path, D_SYNC); in _dpk_agc()
2202 if (dpk->bp[path][kidx].band == RTW89_BAND_2G) in _dpk_agc()
2203 _dpk_bypass_rxiqc(rtwdev, path); in _dpk_agc()
2205 _dpk_lbk_rxiqk(rtwdev, phy, path); in _dpk_agc()
2211 tmp_gl_idx = _dpk_gainloss(rtwdev, phy, path, kidx); in _dpk_agc()
2231 _dpk_kip_set_txagc(rtwdev, phy, path, tmp_dbm, true); in _dpk_agc()
2244 _dpk_kip_set_txagc(rtwdev, phy, path, tmp_dbm, true); in _dpk_agc()
2251 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_agc()
2252 tmp_rxbb = rtw89_read_rf(rtwdev, path, RR_MOD, RR_MOD_RXB); in _dpk_agc()
2255 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_RXB, tmp_rxbb); in _dpk_agc()
2260 _dpk_kip_control_rfc(rtwdev, path, true); in _dpk_agc()
2312 enum rtw89_rf_path path, u8 kidx) in _dpk_idl_mpa() argument
2326 _dpk_one_shot(rtwdev, phy, path, D_MDPK_IDL); in _dpk_idl_mpa()
2357 enum rtw89_rf_path path, u8 kidx, bool is_execute) in _dpk_gain_normalize() argument
2372 rtw89_phy_write32_mask(rtwdev, R_DPK_GN + (path << 8), in _dpk_gain_normalize()
2374 rtw89_phy_write32_mask(rtwdev, R_DPK_GN + (path << 8), in _dpk_gain_normalize()
2377 _dpk_one_shot(rtwdev, phy, path, D_GAIN_NORM); in _dpk_gain_normalize()
2379 rtw89_phy_write32_mask(rtwdev, reg[kidx][cur_k_set] + (path << 8), in _dpk_gain_normalize()
2383 dpk->bp[path][kidx].gs = in _dpk_gain_normalize()
2384 rtw89_phy_read32_mask(rtwdev, reg[kidx][cur_k_set] + (path << 8), in _dpk_gain_normalize()
2389 enum rtw89_rf_path path, u8 kidx) in _dpk_on() argument
2393 rtw89_phy_write32_mask(rtwdev, R_LOAD_COEF + (path << 8), B_LOAD_COEF_MDPD, 0x1); in _dpk_on()
2394 rtw89_phy_write32_mask(rtwdev, R_LOAD_COEF + (path << 8), B_LOAD_COEF_MDPD, 0x0); in _dpk_on()
2395 rtw89_phy_write32_mask(rtwdev, R_DPD_CH0A + (path << 8) + (kidx << 2), in _dpk_on()
2398 dpk->bp[path][kidx].path_ok = in _dpk_on()
2399 dpk->bp[path][kidx].path_ok | BIT(dpk->cur_k_set); in _dpk_on()
2402 path, kidx, dpk->bp[path][kidx].path_ok); in _dpk_on()
2404 rtw89_phy_write32_mask(rtwdev, R_DPD_CH0A + (path << 8) + (kidx << 2), in _dpk_on()
2405 B_DPD_MEN, dpk->bp[path][kidx].path_ok); in _dpk_on()
2407 _dpk_gain_normalize(rtwdev, phy, path, kidx, false); in _dpk_on()
2411 enum rtw89_rf_path path) in _dpk_main() argument
2414 u8 kidx = dpk->cur_idx[path]; in _dpk_main()
2418 if (dpk->bp[path][kidx].band != RTW89_BAND_2G) in _dpk_main()
2421 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_main()
2422 _rfk_rf_direct_cntrl(rtwdev, path, false); in _dpk_main()
2423 rtw89_write_rf(rtwdev, path, RR_BBDC, RFREG_MASK, 0x03ffd); in _dpk_main()
2425 _dpk_rf_setting(rtwdev, path, kidx); in _dpk_main()
2426 _set_rx_dck(rtwdev, path, RF_DPK); in _dpk_main()
2429 _dpk_kip_preset(rtwdev, phy, path, kidx); in _dpk_main()
2430 _dpk_txpwr_bb_force(rtwdev, path, true); in _dpk_main()
2431 _dpk_kip_set_txagc(rtwdev, phy, path, init_xdbm, true); in _dpk_main()
2432 _dpk_tpg_sel(rtwdev, path, kidx); in _dpk_main()
2433 is_fail = _dpk_agc(rtwdev, phy, path, kidx, init_xdbm, false); in _dpk_main()
2437 _dpk_idl_mpa(rtwdev, phy, path, kidx); in _dpk_main()
2438 _dpk_para_query(rtwdev, path, kidx); in _dpk_main()
2440 _dpk_on(rtwdev, phy, path, kidx); in _dpk_main()
2442 _dpk_kip_control_rfc(rtwdev, path, false); in _dpk_main()
2443 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_MASK, RF_RX); in _dpk_main()
2445 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DPK] S%d[%d]_K%d %s\n", path, kidx, in _dpk_main()
2458 u8 path; in _dpk_cal_select() local
2460 for (path = 0; path < RF_PATH_NUM_8851B; path++) in _dpk_cal_select()
2461 dpk->cur_idx[path] = 0; in _dpk_cal_select()
2463 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _dpk_cal_select()
2464 if (!(kpath & BIT(path))) in _dpk_cal_select()
2466 _dpk_bkup_kip(rtwdev, dpk_kip_reg, kip_bkup, path); in _dpk_cal_select()
2467 _dpk_bkup_rf(rtwdev, dpk_rf_reg, rf_bkup, path); in _dpk_cal_select()
2468 _dpk_information(rtwdev, phy, path); in _dpk_cal_select()
2469 _dpk_init(rtwdev, path); in _dpk_cal_select()
2471 if (rtwdev->is_tssi_mode[path]) in _dpk_cal_select()
2472 _dpk_tssi_pause(rtwdev, path, true); in _dpk_cal_select()
2475 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _dpk_cal_select()
2476 if (!(kpath & BIT(path))) in _dpk_cal_select()
2481 path, dpk->cur_idx[path]); in _dpk_cal_select()
2483 _dpk_rxagc_onoff(rtwdev, path, false); in _dpk_cal_select()
2484 _rfk_drf_direct_cntrl(rtwdev, path, false); in _dpk_cal_select()
2485 _dpk_bb_afe_setting(rtwdev, path); in _dpk_cal_select()
2487 is_fail = _dpk_main(rtwdev, phy, path); in _dpk_cal_select()
2488 _dpk_onoff(rtwdev, path, is_fail); in _dpk_cal_select()
2491 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _dpk_cal_select()
2492 if (!(kpath & BIT(path))) in _dpk_cal_select()
2495 _dpk_kip_restore(rtwdev, phy, path); in _dpk_cal_select()
2496 _dpk_reload_kip(rtwdev, dpk_kip_reg, kip_bkup, path); in _dpk_cal_select()
2497 _dpk_reload_rf(rtwdev, dpk_rf_reg, rf_bkup, path); in _dpk_cal_select()
2498 _dpk_bb_afe_restore(rtwdev, path); in _dpk_cal_select()
2499 _dpk_rxagc_onoff(rtwdev, path, true); in _dpk_cal_select()
2501 if (rtwdev->is_tssi_mode[path]) in _dpk_cal_select()
2502 _dpk_tssi_pause(rtwdev, path, false); in _dpk_cal_select()
2523 u8 path, kidx; in _dpk_track() local
2527 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _dpk_track()
2528 kidx = dpk->cur_idx[path]; in _dpk_track()
2532 path, kidx, dpk->bp[path][kidx].ch); in _dpk_track()
2534 txagc_rf = rtw89_phy_read32_mask(rtwdev, R_TXAGC_BB + (path << 13), in _dpk_track()
2536 txagc_bb = rtw89_phy_read32_mask(rtwdev, R_TXAGC_BB + (path << 13), in _dpk_track()
2538 txagc_bb_tp = rtw89_phy_read32_mask(rtwdev, R_TXAGC_BTP + (path << 13), in _dpk_track()
2541 rtw89_phy_write32_mask(rtwdev, R_KIP_RPT + (path << 8), in _dpk_track()
2543 cur_ther = rtw89_phy_read32_mask(rtwdev, R_RPT_PER + (path << 8), in _dpk_track()
2545 txagc_ofst = rtw89_phy_read32_mask(rtwdev, R_RPT_PER + (path << 8), in _dpk_track()
2547 pwsf_tssi_ofst = rtw89_phy_read32_mask(rtwdev, R_RPT_PER + (path << 8), in _dpk_track()
2551 delta_ther = cur_ther - dpk->bp[path][kidx].ther_dpk; in _dpk_track()
2557 delta_ther, cur_ther, dpk->bp[path][kidx].ther_dpk); in _dpk_track()
2561 txagc_rf - dpk->bp[path][kidx].txagc_dpk, in _dpk_track()
2562 txagc_rf, dpk->bp[path][kidx].txagc_dpk); in _dpk_track()
2578 R_DPD_BND + (path << 8) + (kidx << 2), in _dpk_track()
2584 static void _rck(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _rck() argument
2591 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[RCK] ====== S%d RCK ======\n", path); in _rck()
2593 rf_reg5 = rtw89_read_rf(rtwdev, path, RR_RSV1, RFREG_MASK); in _rck()
2595 rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x0); in _rck()
2596 rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_MASK, RR_MOD_V_RX); in _rck()
2599 rtw89_read_rf(rtwdev, path, RR_MOD, RFREG_MASK)); in _rck()
2602 rtw89_write_rf(rtwdev, path, RR_RCKC, RFREG_MASK, 0x00240); in _rck()
2605 false, rtwdev, path, RR_RCKS, BIT(3)); in _rck()
2607 rck_val = rtw89_read_rf(rtwdev, path, RR_RCKC, RR_RCKC_CA); in _rck()
2612 rtw89_write_rf(rtwdev, path, RR_RCKC, RFREG_MASK, rck_val); in _rck()
2613 rtw89_write_rf(rtwdev, path, RR_RSV1, RFREG_MASK, rf_reg5); in _rck()
2616 rtw89_read_rf(rtwdev, path, RR_RCKC, RFREG_MASK)); in _rck()
2620 enum rtw89_rf_path path) in _tssi_set_sys() argument
2634 enum rtw89_rf_path path) in _tssi_ini_txpwr_ctrl_bb() argument
2641 enum rtw89_rf_path path) in _tssi_ini_txpwr_ctrl_bb_he_tb() argument
2647 enum rtw89_rf_path path) in _tssi_set_dck() argument
2653 enum rtw89_rf_path path) in _tssi_set_tmeter_tbl() argument
2697 if (path == RF_PATH_A) { in _tssi_set_tmeter_tbl()
2752 enum rtw89_rf_path path) in _tssi_set_dac_gain_tbl() argument
2758 enum rtw89_rf_path path) in _tssi_slope_cal_org() argument
2769 enum rtw89_rf_path path, bool all) in _tssi_alignment_default() argument
2780 enum rtw89_rf_path path) in _tssi_set_tssi_slope() argument
2786 enum rtw89_rf_path path) in _tssi_set_tssi_track() argument
2793 enum rtw89_rf_path path) in _tssi_set_txagc_offset_mv_avg() argument
2947 enum rtw89_rf_path path) in _tssi_get_ofdm_de() argument
2960 "[TSSI][TRIM]: path=%d mcs group_idx=0x%x\n", path, gidx); in _tssi_get_ofdm_de()
2965 de_1st = tssi_info->tssi_mcs[path][gidx_1st]; in _tssi_get_ofdm_de()
2966 de_2nd = tssi_info->tssi_mcs[path][gidx_2nd]; in _tssi_get_ofdm_de()
2971 path, val, de_1st, de_2nd); in _tssi_get_ofdm_de()
2973 val = tssi_info->tssi_mcs[path][gidx]; in _tssi_get_ofdm_de()
2976 "[TSSI][TRIM]: path=%d mcs de=%d\n", path, val); in _tssi_get_ofdm_de()
2983 enum rtw89_rf_path path) in _tssi_get_ofdm_trim_de() argument
2997 path, tgidx); in _tssi_get_ofdm_trim_de()
3002 tde_1st = tssi_info->tssi_trim[path][tgidx_1st]; in _tssi_get_ofdm_trim_de()
3003 tde_2nd = tssi_info->tssi_trim[path][tgidx_2nd]; in _tssi_get_ofdm_trim_de()
3008 path, val, tde_1st, tde_2nd); in _tssi_get_ofdm_trim_de()
3010 val = tssi_info->tssi_trim[path][tgidx]; in _tssi_get_ofdm_trim_de()
3014 path, val); in _tssi_get_ofdm_trim_de()
3075 static void _tssi_alimentk_dump_result(struct rtw89_dev *rtwdev, enum rtw89_rf_path path) in _tssi_alimentk_dump_result() argument
3080 R_TSSI_PA_K1 + (path << 13), in _tssi_alimentk_dump_result()
3081 rtw89_phy_read32_mask(rtwdev, R_TSSI_PA_K1 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3082 R_TSSI_PA_K2 + (path << 13), in _tssi_alimentk_dump_result()
3083 rtw89_phy_read32_mask(rtwdev, R_TSSI_PA_K2 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3084 R_P0_TSSI_ALIM1 + (path << 13), in _tssi_alimentk_dump_result()
3085 rtw89_phy_read32_mask(rtwdev, R_P0_TSSI_ALIM1 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3086 R_P0_TSSI_ALIM3 + (path << 13), in _tssi_alimentk_dump_result()
3087 rtw89_phy_read32_mask(rtwdev, R_P0_TSSI_ALIM3 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3088 R_TSSI_PA_K5 + (path << 13), in _tssi_alimentk_dump_result()
3089 rtw89_phy_read32_mask(rtwdev, R_TSSI_PA_K5 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3090 R_P0_TSSI_ALIM2 + (path << 13), in _tssi_alimentk_dump_result()
3091 rtw89_phy_read32_mask(rtwdev, R_P0_TSSI_ALIM2 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3092 R_P0_TSSI_ALIM4 + (path << 13), in _tssi_alimentk_dump_result()
3093 rtw89_phy_read32_mask(rtwdev, R_P0_TSSI_ALIM4 + (path << 13), MASKDWORD), in _tssi_alimentk_dump_result()
3094 R_TSSI_PA_K8 + (path << 13), in _tssi_alimentk_dump_result()
3095 rtw89_phy_read32_mask(rtwdev, R_TSSI_PA_K8 + (path << 13), MASKDWORD)); in _tssi_alimentk_dump_result()
3099 enum rtw89_phy_idx phy, enum rtw89_rf_path path) in _tssi_alimentk_done() argument
3107 "======>%s phy=%d path=%d\n", __func__, phy, path); in _tssi_alimentk_done()
3120 if (tssi_info->alignment_done[path][band]) { in _tssi_alimentk_done()
3121 rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_ALIM1 + (path << 13), MASKDWORD, in _tssi_alimentk_done()
3122 tssi_info->alignment_value[path][band][0]); in _tssi_alimentk_done()
3123 rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_ALIM3 + (path << 13), MASKDWORD, in _tssi_alimentk_done()
3124 tssi_info->alignment_value[path][band][1]); in _tssi_alimentk_done()
3125 rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_ALIM2 + (path << 13), MASKDWORD, in _tssi_alimentk_done()
3126 tssi_info->alignment_value[path][band][2]); in _tssi_alimentk_done()
3127 rtw89_phy_write32_mask(rtwdev, R_P0_TSSI_ALIM4 + (path << 13), MASKDWORD, in _tssi_alimentk_done()
3128 tssi_info->alignment_value[path][band][3]); in _tssi_alimentk_done()
3131 _tssi_alimentk_dump_result(rtwdev, path); in _tssi_alimentk_done()
3402 static void _bw_setting(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, in _bw_setting() argument
3410 rf_reg18 = rtw89_read_rf(rtwdev, path, reg18_addr, RFREG_MASK); in _bw_setting()
3413 "[RFK]Invalid RF_0x18 for Path-%d\n", path); in _bw_setting()
3437 rtw89_write_rf(rtwdev, path, reg18_addr, RFREG_MASK, rf_reg18); in _bw_setting()
3440 bw, path, reg18_addr, in _bw_setting()
3441 rtw89_read_rf(rtwdev, path, reg18_addr, RFREG_MASK)); in _bw_setting()
3528 static void _ch_setting(struct rtw89_dev *rtwdev, enum rtw89_rf_path path, in _ch_setting() argument
3537 rf_reg18 = rtw89_read_rf(rtwdev, path, reg18_addr, RFREG_MASK); in _ch_setting()
3550 if (path == RF_PATH_A && dav) in _ch_setting()
3553 rtw89_write_rf(rtwdev, path, reg18_addr, RFREG_MASK, rf_reg18); in _ch_setting()
3555 rtw89_write_rf(rtwdev, path, RR_LCKST, RR_LCKST_BIN, 0); in _ch_setting()
3556 rtw89_write_rf(rtwdev, path, RR_LCKST, RR_LCKST_BIN, 1); in _ch_setting()
3560 central_ch, path, reg18_addr, in _ch_setting()
3561 rtw89_read_rf(rtwdev, path, reg18_addr, RFREG_MASK)); in _ch_setting()
3571 enum rtw89_rf_path path) in _set_rxbb_bw() argument
3573 rtw89_write_rf(rtwdev, path, RR_LUTWE2, RR_LUTWE2_RTXBW, 0x1); in _set_rxbb_bw()
3574 rtw89_write_rf(rtwdev, path, RR_LUTWA, RR_LUTWA_M2, 0x12); in _set_rxbb_bw()
3577 rtw89_write_rf(rtwdev, path, RR_LUTWD0, RR_LUTWD0_LB, 0x1b); in _set_rxbb_bw()
3579 rtw89_write_rf(rtwdev, path, RR_LUTWD0, RR_LUTWD0_LB, 0x13); in _set_rxbb_bw()
3581 rtw89_write_rf(rtwdev, path, RR_LUTWD0, RR_LUTWD0_LB, 0xb); in _set_rxbb_bw()
3583 rtw89_write_rf(rtwdev, path, RR_LUTWD0, RR_LUTWD0_LB, 0x3); in _set_rxbb_bw()
3585 rtw89_debug(rtwdev, RTW89_DBG_RFK, "[RFK] set S%d RXBB BW 0x3F = 0x%x\n", path, in _set_rxbb_bw()
3586 rtw89_read_rf(rtwdev, path, RR_LUTWD0, RR_LUTWD0_LB)); in _set_rxbb_bw()
3588 rtw89_write_rf(rtwdev, path, RR_LUTWE2, RR_LUTWE2_RTXBW, 0x0); in _set_rxbb_bw()
3594 u8 kpath, path; in _rxbb_bw() local
3598 for (path = 0; path < RF_PATH_NUM_8851B; path++) { in _rxbb_bw()
3599 if (!(kpath & BIT(path))) in _rxbb_bw()
3602 _set_rxbb_bw(rtwdev, bw, path); in _rxbb_bw()