Lines Matching full:path

112 	u32 path, i;  in rtw8822c_dac_backup_reg()  local
127 for (path = 0; path < DACK_PATH_8822C; path++) { in rtw8822c_dac_backup_reg()
130 val = rtw_read_rf(rtwdev, path, reg, RFREG_MASK); in rtw8822c_dac_backup_reg()
131 backup_rf[path * i + i].reg = reg; in rtw8822c_dac_backup_reg()
132 backup_rf[path * i + i].val = val; in rtw8822c_dac_backup_reg()
141 u32 path, i; in rtw8822c_dac_restore_reg() local
147 for (path = 0; path < DACK_PATH_8822C; path++) { in rtw8822c_dac_restore_reg()
149 val = backup_rf[path * i + i].val; in rtw8822c_dac_restore_reg()
150 reg = backup_rf[path * i + i].reg; in rtw8822c_dac_restore_reg()
151 rtw_write_rf(rtwdev, path, reg, RFREG_MASK, val); in rtw8822c_dac_restore_reg()
236 static u32 rtw8822c_get_path_write_addr(u8 path) in rtw8822c_get_path_write_addr() argument
240 switch (path) { in rtw8822c_get_path_write_addr()
255 static u32 rtw8822c_get_path_read_addr(u8 path) in rtw8822c_get_path_read_addr() argument
259 switch (path) { in rtw8822c_get_path_read_addr()
371 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-A=0x%05x\n", rf_a); in rtw8822c_dac_cal_rf_mode()
372 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-B=0x%05x\n", rf_b); in rtw8822c_dac_cal_rf_mode()
395 u8 path, u32 *adc_ic, u32 *adc_qc) in rtw8822c_dac_cal_adc() argument
403 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK path(%d)\n", path); in rtw8822c_dac_cal_adc()
405 base_addr = rtw8822c_get_path_write_addr(path); in rtw8822c_dac_cal_adc()
406 switch (path) { in rtw8822c_dac_cal_adc()
420 if (path == RF_PATH_B) in rtw8822c_dac_cal_adc()
447 dm_info->dack_adck[path] = temp; in rtw8822c_dac_cal_adc()
468 /* release pull low switch on IQ path */ in rtw8822c_dac_cal_adc()
469 rtw_write_rf(rtwdev, path, 0x8f, BIT(13), 0x1); in rtw8822c_dac_cal_adc()
472 static void rtw8822c_dac_cal_step1(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_step1() argument
478 base_addr = rtw8822c_get_path_write_addr(path); in rtw8822c_dac_cal_step1()
479 read_addr = rtw8822c_get_path_read_addr(path); in rtw8822c_dac_cal_step1()
481 rtw_write32(rtwdev, base_addr + 0x68, dm_info->dack_adck[path]); in rtw8822c_dac_cal_step1()
483 if (path == RF_PATH_A) { in rtw8822c_dac_cal_step1()
518 u8 path, u32 *ic_out, u32 *qc_out) in rtw8822c_dac_cal_step2() argument
523 base_addr = rtw8822c_get_path_write_addr(path); in rtw8822c_dac_cal_step2()
566 static void rtw8822c_dac_cal_step3(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dac_cal_step3() argument
576 base_addr = rtw8822c_get_path_write_addr(path); in rtw8822c_dac_cal_step3()
577 read_addr = rtw8822c_get_path_read_addr(path); in rtw8822c_dac_cal_step3()
643 static void rtw8822c_dac_cal_step4(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_step4() argument
645 u32 base_addr = rtw8822c_get_path_write_addr(path); in rtw8822c_dac_cal_step4()
654 u8 path, u8 vec, u32 w_addr, u32 r_addr) in rtw8822c_dac_cal_backup_vec() argument
666 dm_info->dack_msbk[path][vec][i] = val; in rtw8822c_dac_cal_backup_vec()
670 static void rtw8822c_dac_cal_backup_path(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_backup_path() argument
676 if (WARN_ON(path >= 2)) in rtw8822c_dac_cal_backup_path()
680 w_addr = rtw8822c_get_path_write_addr(path) + 0xb0; in rtw8822c_dac_cal_backup_path()
681 r_addr = rtw8822c_get_path_read_addr(path) + 0x10; in rtw8822c_dac_cal_backup_path()
682 rtw8822c_dac_cal_backup_vec(rtwdev, path, 0, w_addr, r_addr); in rtw8822c_dac_cal_backup_path()
685 w_addr = rtw8822c_get_path_write_addr(path) + 0xb0 + w_off; in rtw8822c_dac_cal_backup_path()
686 r_addr = rtw8822c_get_path_read_addr(path) + 0x10 + r_off; in rtw8822c_dac_cal_backup_path()
687 rtw8822c_dac_cal_backup_vec(rtwdev, path, 1, w_addr, r_addr); in rtw8822c_dac_cal_backup_path()
725 /* backup path-A I/Q */ in rtw8822c_dac_cal_backup()
730 /* backup path-B I/Q */ in rtw8822c_dac_cal_backup()
844 static bool rtw8822c_dac_cal_restore_path(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dac_cal_restore_path() argument
853 w_i = rtw8822c_get_path_write_addr(path) + 0xb0; in rtw8822c_dac_cal_restore_path()
854 r_i = rtw8822c_get_path_read_addr(path) + 0x08; in rtw8822c_dac_cal_restore_path()
855 w_q = rtw8822c_get_path_write_addr(path) + 0xb0 + w_off; in rtw8822c_dac_cal_restore_path()
856 r_q = rtw8822c_get_path_read_addr(path) + 0x08 + r_off; in rtw8822c_dac_cal_restore_path()
863 value = dm_info->dack_msbk[path][0][i]; in rtw8822c_dac_cal_restore_path()
876 value = dm_info->dack_msbk[path][1][i]; in rtw8822c_dac_cal_restore_path()
907 /* sample the first element for both path's IQ vector */ in rtw8822c_dac_cal_restore()
961 /* path-A */ in rtw8822c_rf_dac_cal()
977 /* path-B */ in rtw8822c_rf_dac_cal()
1004 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()
1005 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()
1006 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()
1007 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()
1032 u8 path; in rtw8822c_set_power_trim() local
1034 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_set_power_trim()
1035 rtw_write_rf(rtwdev, path, 0xee, BIT(19), 1); in rtw8822c_set_power_trim()
1036 RF_SET_POWER_TRIM(path, 0x0, 0); in rtw8822c_set_power_trim()
1037 RF_SET_POWER_TRIM(path, 0x1, 1); in rtw8822c_set_power_trim()
1038 RF_SET_POWER_TRIM(path, 0x2, 2); in rtw8822c_set_power_trim()
1039 RF_SET_POWER_TRIM(path, 0x3, 2); in rtw8822c_set_power_trim()
1040 RF_SET_POWER_TRIM(path, 0x4, 3); in rtw8822c_set_power_trim()
1041 RF_SET_POWER_TRIM(path, 0x5, 4); in rtw8822c_set_power_trim()
1042 RF_SET_POWER_TRIM(path, 0x6, 5); in rtw8822c_set_power_trim()
1043 RF_SET_POWER_TRIM(path, 0x7, 6); in rtw8822c_set_power_trim()
1044 RF_SET_POWER_TRIM(path, 0x8, 7); in rtw8822c_set_power_trim()
1045 RF_SET_POWER_TRIM(path, 0x9, 3); in rtw8822c_set_power_trim()
1046 RF_SET_POWER_TRIM(path, 0xa, 4); in rtw8822c_set_power_trim()
1047 RF_SET_POWER_TRIM(path, 0xb, 5); in rtw8822c_set_power_trim()
1048 RF_SET_POWER_TRIM(path, 0xc, 6); in rtw8822c_set_power_trim()
1049 RF_SET_POWER_TRIM(path, 0xd, 7); in rtw8822c_set_power_trim()
1050 RF_SET_POWER_TRIM(path, 0xe, 7); in rtw8822c_set_power_trim()
1051 rtw_write_rf(rtwdev, path, 0xee, BIT(19), 0); in rtw8822c_set_power_trim()
1058 u8 pg_pwr = 0xff, i, path, idx; in rtw8822c_power_trim() local
1077 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_power_trim()
1078 rtw_read8_physical_efuse(rtwdev, rf_efuse_5g[path][i], in rtw8822c_power_trim()
1084 bb_gain[path][idx] = FIELD_GET(PPG_5G_MASK, pg_pwr); in rtw8822c_power_trim()
1096 u8 pg_therm = 0xff, thermal[2] = {0}, path; in rtw8822c_thermal_trim() local
1098 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_thermal_trim()
1099 rtw_read8_physical_efuse(rtwdev, rf_efuse[path], &pg_therm); in rtw8822c_thermal_trim()
1105 thermal[path] = FIELD_GET(GENMASK(3, 1), pg_therm); in rtw8822c_thermal_trim()
1106 thermal[path] |= FIELD_PREP(BIT(3), pg_therm & BIT(0)); in rtw8822c_thermal_trim()
1107 rtw_write_rf(rtwdev, path, 0x43, RF_THEMAL_MASK, thermal[path]); in rtw8822c_thermal_trim()
1115 u8 pg_pa_bias = 0xff, path; in rtw8822c_pa_bias() local
1117 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1118 rtw_read8_physical_efuse(rtwdev, rf_efuse_2g[path], in rtw8822c_pa_bias()
1123 rtw_write_rf(rtwdev, path, RF_PA, RF_PABIAS_2G_MASK, pg_pa_bias); in rtw8822c_pa_bias()
1125 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1126 rtw_read8_physical_efuse(rtwdev, rf_efuse_5g[path], in rtw8822c_pa_bias()
1129 rtw_write_rf(rtwdev, path, RF_PA, RF_PABIAS_5G_MASK, pg_pa_bias); in rtw8822c_pa_bias()
1182 u8 path; in rtw8822c_rfk_power_save() local
1184 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_rfk_power_save()
1185 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in rtw8822c_rfk_power_save()
1248 static void rtw8822c_txgapk_bb_dpk(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_bb_dpk() argument
1261 if (path == RF_PATH_A) { in rtw8822c_txgapk_bb_dpk()
1268 } else if (path == RF_PATH_B) { in rtw8822c_txgapk_bb_dpk()
1280 static void rtw8822c_txgapk_afe_dpk(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_afe_dpk() argument
1286 if (path == RF_PATH_A) { in rtw8822c_txgapk_afe_dpk()
1288 } else if (path == RF_PATH_B) { in rtw8822c_txgapk_afe_dpk()
1291 rtw_err(rtwdev, "[TXGAPK] unknown path %d!!\n", path); in rtw8822c_txgapk_afe_dpk()
1316 static void rtw8822c_txgapk_afe_dpk_restore(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_afe_dpk_restore() argument
1322 if (path == RF_PATH_A) { in rtw8822c_txgapk_afe_dpk_restore()
1324 } else if (path == RF_PATH_B) { in rtw8822c_txgapk_afe_dpk_restore()
1327 rtw_err(rtwdev, "[TXGAPK] unknown path %d!!\n", path); in rtw8822c_txgapk_afe_dpk_restore()
1349 static void rtw8822c_txgapk_bb_dpk_restore(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_bb_dpk_restore() argument
1353 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x0); in rtw8822c_txgapk_bb_dpk_restore()
1354 rtw_write_rf(rtwdev, path, RF_DIS_BYPASS_TXBB, BIT_TIA_BYPASS, 0x0); in rtw8822c_txgapk_bb_dpk_restore()
1355 rtw_write_rf(rtwdev, path, RF_DIS_BYPASS_TXBB, BIT_TXBB, 0x0); in rtw8822c_txgapk_bb_dpk_restore()
1368 if (path == RF_PATH_A) { in rtw8822c_txgapk_bb_dpk_restore()
1375 } else if (path == RF_PATH_B) { in rtw8822c_txgapk_bb_dpk_restore()
1399 u8 band, u8 path) in _rtw8822c_txgapk_write_gain_bb_table() argument
1405 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in _rtw8822c_txgapk_write_gain_bb_table()
1428 v = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1431 tmp_3f = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1436 txgapk->rf3f_bp[band][gain][path]); in _rtw8822c_txgapk_write_gain_bb_table()
1438 tmp_3f = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1447 "[TXGAPK] Band=%d 0x1b98[11:0]=0x%03X path=%d\n", in _rtw8822c_txgapk_write_gain_bb_table()
1448 band, tmp_3f, path); in _rtw8822c_txgapk_write_gain_bb_table()
1454 u8 path, band; in rtw8822c_txgapk_write_gain_bb_table() local
1460 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_write_gain_bb_table()
1462 band, path); in rtw8822c_txgapk_write_gain_bb_table()
1467 static void rtw8822c_txgapk_read_offset(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_read_offset() argument
1478 if (path >= ARRAY_SIZE(cfg1_1b00) || in rtw8822c_txgapk_read_offset()
1479 path >= ARRAY_SIZE(cfg2_1b00) || in rtw8822c_txgapk_read_offset()
1480 path >= ARRAY_SIZE(set_pi) || in rtw8822c_txgapk_read_offset()
1481 path >= ARRAY_SIZE(path_setting)) { in rtw8822c_txgapk_read_offset()
1482 rtw_warn(rtwdev, "[TXGAPK] wrong path %d\n", path); in rtw8822c_txgapk_read_offset()
1486 rtw_write32_mask(rtwdev, REG_ANTMAP0, BIT_ANT_PATH, path + 1); in rtw8822c_txgapk_read_offset()
1489 rtw_write32_mask(rtwdev, path_setting[path], MASK20BITS, 0x33312); in rtw8822c_txgapk_read_offset()
1490 rtw_write32_mask(rtwdev, path_setting[path], BIT_PATH_EN, 0x1); in rtw8822c_txgapk_read_offset()
1491 rtw_write32_mask(rtwdev, set_pi[path], BITS_RFC_DIRECT, 0x0); in rtw8822c_txgapk_read_offset()
1492 rtw_write_rf(rtwdev, path, RF_LUTDBG, BIT_TXA_TANK, 0x1); in rtw8822c_txgapk_read_offset()
1493 rtw_write_rf(rtwdev, path, RF_IDAC, BIT_TX_MODE, 0x820); in rtw8822c_txgapk_read_offset()
1494 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in rtw8822c_txgapk_read_offset()
1505 rtw_write32_mask(rtwdev, REG_NCTL0, MASKDWORD, cfg1_1b00[path]); in rtw8822c_txgapk_read_offset()
1506 rtw_write32_mask(rtwdev, REG_NCTL0, MASKDWORD, cfg2_1b00[path]); in rtw8822c_txgapk_read_offset()
1512 rtw_write32_mask(rtwdev, set_pi[path], BITS_RFC_DIRECT, 0x2); in rtw8822c_txgapk_read_offset()
1513 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in rtw8822c_txgapk_read_offset()
1519 txgapk->offset[0][path] = (s8)FIELD_GET(BIT_GAPK_RPT0, val); in rtw8822c_txgapk_read_offset()
1520 txgapk->offset[1][path] = (s8)FIELD_GET(BIT_GAPK_RPT1, val); in rtw8822c_txgapk_read_offset()
1521 txgapk->offset[2][path] = (s8)FIELD_GET(BIT_GAPK_RPT2, val); in rtw8822c_txgapk_read_offset()
1522 txgapk->offset[3][path] = (s8)FIELD_GET(BIT_GAPK_RPT3, val); in rtw8822c_txgapk_read_offset()
1523 txgapk->offset[4][path] = (s8)FIELD_GET(BIT_GAPK_RPT4, val); in rtw8822c_txgapk_read_offset()
1524 txgapk->offset[5][path] = (s8)FIELD_GET(BIT_GAPK_RPT5, val); in rtw8822c_txgapk_read_offset()
1525 txgapk->offset[6][path] = (s8)FIELD_GET(BIT_GAPK_RPT6, val); in rtw8822c_txgapk_read_offset()
1526 txgapk->offset[7][path] = (s8)FIELD_GET(BIT_GAPK_RPT7, val); in rtw8822c_txgapk_read_offset()
1531 txgapk->offset[8][path] = (s8)FIELD_GET(BIT_GAPK_RPT0, val); in rtw8822c_txgapk_read_offset()
1532 txgapk->offset[9][path] = (s8)FIELD_GET(BIT_GAPK_RPT1, val); in rtw8822c_txgapk_read_offset()
1535 if (txgapk->offset[i][path] & BIT(3)) in rtw8822c_txgapk_read_offset()
1536 txgapk->offset[i][path] = txgapk->offset[i][path] | in rtw8822c_txgapk_read_offset()
1540 "[TXGAPK] offset %d %d path=%d\n", in rtw8822c_txgapk_read_offset()
1541 txgapk->offset[i][path], i, path); in rtw8822c_txgapk_read_offset()
1544 static void rtw8822c_txgapk_calculate_offset(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_calculate_offset() argument
1561 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in rtw8822c_txgapk_calculate_offset()
1564 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x1); in rtw8822c_txgapk_calculate_offset()
1565 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x5000f); in rtw8822c_txgapk_calculate_offset()
1566 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_RF_GAIN, 0x0); in rtw8822c_txgapk_calculate_offset()
1567 rtw_write_rf(rtwdev, path, RF_RXG_GAIN, BIT_RXG_GAIN, 0x1); in rtw8822c_txgapk_calculate_offset()
1568 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RXAGC, 0x0f); in rtw8822c_txgapk_calculate_offset()
1569 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x1); in rtw8822c_txgapk_calculate_offset()
1570 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x1); in rtw8822c_txgapk_calculate_offset()
1571 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_RXBB, 0x0); in rtw8822c_txgapk_calculate_offset()
1572 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT_PW_EXT_TIA, 0x1); in rtw8822c_txgapk_calculate_offset()
1577 rtw8822c_txgapk_read_offset(rtwdev, path); in rtw8822c_txgapk_calculate_offset()
1583 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SEL_PATH, path); in rtw8822c_txgapk_calculate_offset()
1586 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x1); in rtw8822c_txgapk_calculate_offset()
1587 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x50011); in rtw8822c_txgapk_calculate_offset()
1588 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_TXA_LB_ATT, 0x3); in rtw8822c_txgapk_calculate_offset()
1589 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_ATT, 0x3); in rtw8822c_txgapk_calculate_offset()
1590 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_SW, 0x1); in rtw8822c_txgapk_calculate_offset()
1591 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_calculate_offset()
1593 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RXAGC, 0x12); in rtw8822c_txgapk_calculate_offset()
1594 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x1); in rtw8822c_txgapk_calculate_offset()
1595 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_RXBB, 0x0); in rtw8822c_txgapk_calculate_offset()
1596 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT_PW_EXT_TIA, 0x1); in rtw8822c_txgapk_calculate_offset()
1597 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RF_MODE, 0x5); in rtw8822c_txgapk_calculate_offset()
1611 rtw8822c_txgapk_read_offset(rtwdev, path); in rtw8822c_txgapk_calculate_offset()
1618 static void rtw8822c_txgapk_rf_restore(struct rtw_dev *rtwdev, u8 path) in rtw8822c_txgapk_rf_restore() argument
1622 if (path >= rtwdev->hal.rf_path_num) in rtw8822c_txgapk_rf_restore()
1625 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RF_MODE, 0x3); in rtw8822c_txgapk_rf_restore()
1626 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x0); in rtw8822c_txgapk_rf_restore()
1627 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT_PW_EXT_TIA, 0x0); in rtw8822c_txgapk_rf_restore()
1659 u8 path, band = RF_BAND_2G_OFDM, channel = txgapk->channel; in rtw8822c_txgapk_write_tx_gain() local
1680 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_write_tx_gain()
1684 v = txgapk->rf3f_bp[band][j][path]; in rtw8822c_txgapk_write_tx_gain()
1688 offset_tmp[i] += txgapk->offset[j][path]; in rtw8822c_txgapk_write_tx_gain()
1689 txgapk->fianl_offset[i][path] = offset_tmp[i]; in rtw8822c_txgapk_write_tx_gain()
1692 v = txgapk->rf3f_bp[band][i][path]; in rtw8822c_txgapk_write_tx_gain()
1696 txgapk->rf3f_bp[band][i][path]); in rtw8822c_txgapk_write_tx_gain()
1698 txgapk->rf3f_fs[path][i] = offset_tmp[i]; in rtw8822c_txgapk_write_tx_gain()
1705 rtw_write_rf(rtwdev, path, RF_LUTWE2, RFREG_MASK, 0x10000); in rtw8822c_txgapk_write_tx_gain()
1707 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_write_tx_gain()
1711 txgapk->rf3f_bp[band][i][path], in rtw8822c_txgapk_write_tx_gain()
1713 rtw_write_rf(rtwdev, path, RF_LUTWD0, in rtw8822c_txgapk_write_tx_gain()
1720 rtw_write_rf(rtwdev, path, RF_LUTWE2, RFREG_MASK, 0x0); in rtw8822c_txgapk_write_tx_gain()
1731 u8 path, band, gain, rf0_idx; in rtw8822c_txgapk_save_all_tx_gain_table() local
1747 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_save_all_tx_gain_table()
1748 rf18 = rtw_read_rf(rtwdev, path, RF_CFGCH, RFREG_MASK); in rtw8822c_txgapk_save_all_tx_gain_table()
1751 three_wire[path], BIT_3WIRE_EN, 0x0); in rtw8822c_txgapk_save_all_tx_gain_table()
1752 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_save_all_tx_gain_table()
1754 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_save_all_tx_gain_table()
1756 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_save_all_tx_gain_table()
1758 rtw_write_rf(rtwdev, path, in rtw8822c_txgapk_save_all_tx_gain_table()
1762 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, in rtw8822c_txgapk_save_all_tx_gain_table()
1764 v = rtw_read_rf(rtwdev, path, in rtw8822c_txgapk_save_all_tx_gain_table()
1766 txgapk->rf3f_bp[band][gain][path] = v & BIT_DATA_L; in rtw8822c_txgapk_save_all_tx_gain_table()
1769 "[TXGAPK] 0x5f=0x%03X band=%d path=%d\n", in rtw8822c_txgapk_save_all_tx_gain_table()
1770 txgapk->rf3f_bp[band][gain][path], in rtw8822c_txgapk_save_all_tx_gain_table()
1771 band, path); in rtw8822c_txgapk_save_all_tx_gain_table()
1774 rtw_write_rf(rtwdev, path, RF_CFGCH, RFREG_MASK, rf18); in rtw8822c_txgapk_save_all_tx_gain_table()
1776 three_wire[path], BIT_3WIRE_EN, 0x3); in rtw8822c_txgapk_save_all_tx_gain_table()
1788 u8 path; in rtw8822c_txgapk() local
1810 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk()
1811 txgapk->channel = rtw_read_rf(rtwdev, path, in rtw8822c_txgapk()
1813 rtw8822c_txgapk_bb_dpk(rtwdev, path); in rtw8822c_txgapk()
1814 rtw8822c_txgapk_afe_dpk(rtwdev, path); in rtw8822c_txgapk()
1815 rtw8822c_txgapk_calculate_offset(rtwdev, path); in rtw8822c_txgapk()
1816 rtw8822c_txgapk_rf_restore(rtwdev, path); in rtw8822c_txgapk()
1817 rtw8822c_txgapk_afe_dpk_restore(rtwdev, path); in rtw8822c_txgapk()
1818 rtw8822c_txgapk_bb_dpk_restore(rtwdev, path); in rtw8822c_txgapk()
1850 u8 path; in rtw8822c_pwrtrack_init() local
1852 for (path = RF_PATH_A; path < RTW_RF_PATH_MAX; path++) { in rtw8822c_pwrtrack_init()
1853 dm_info->delta_power_index[path] = 0; in rtw8822c_pwrtrack_init()
1854 ewma_thermal_init(&dm_info->avg_thermal[path]); in rtw8822c_pwrtrack_init()
1855 dm_info->thermal_avg[path] = 0xff; in rtw8822c_pwrtrack_init()
2558 int path; in query_phy_status_page0() local
2587 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page0()
2588 rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[path], 1); in query_phy_status_page0()
2589 dm_info->rssi[path] = rssi; in query_phy_status_page0()
2608 int path; in query_phy_status_page1() local
2647 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page1()
2648 rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[path], 1); in query_phy_status_page1()
2649 dm_info->rssi[path] = rssi; in query_phy_status_page1()
2650 if (path == RF_PATH_A) { in query_phy_status_page1()
2653 } else if (path == RF_PATH_B) { in query_phy_status_page1()
2657 dm_info->rx_snr[path] = pkt_stat->rx_snr[path] >> 1; in query_phy_status_page1()
2658 dm_info->cfo_tail[path] = (pkt_stat->cfo_tail[path] * 5) >> 1; in query_phy_status_page1()
2660 rx_evm = pkt_stat->rx_evm[path]; in query_phy_status_page1()
2668 dm_info->rx_evm_dbm[path] = evm_dbm; in query_phy_status_page1()
2700 u8 path; in rtw8822c_set_write_tx_power_ref() local
2702 for (path = 0; path < hal->rf_path_num; path++) { in rtw8822c_set_write_tx_power_ref()
2704 rtw_write32_mask(rtwdev, txref_cck[path], 0x7f0000, in rtw8822c_set_write_tx_power_ref()
2705 tx_pwr_ref_cck[path]); in rtw8822c_set_write_tx_power_ref()
2707 for (path = 0; path < hal->rf_path_num; path++) { in rtw8822c_set_write_tx_power_ref()
2709 rtw_write32_mask(rtwdev, txref_ofdm[path], 0x1fc00, in rtw8822c_set_write_tx_power_ref()
2710 tx_pwr_ref_ofdm[path]); in rtw8822c_set_write_tx_power_ref()
2782 rtw_warn(rtwdev, "unsupported tx path 0x%x\n", antenna_tx); in rtw8822c_set_antenna()
2786 /* path B only is not available for RX */ in rtw8822c_set_antenna()
2792 rtw_warn(rtwdev, "unsupported rx path 0x%x\n", antenna_rx); in rtw8822c_set_antenna()
3000 * or antenna path is separated in rtw8822c_coex_cfg_gnt_fix()
3251 static void rtw8822c_dpk_rxbb_dc_cal(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_rxbb_dc_cal() argument
3253 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800); in rtw8822c_dpk_rxbb_dc_cal()
3255 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84801); in rtw8822c_dpk_rxbb_dc_cal()
3257 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800); in rtw8822c_dpk_rxbb_dc_cal()
3260 static u8 rtw8822c_dpk_dc_corr_check(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_dc_corr_check() argument
3317 u8 path; in rtw8822c_dpk_pre_setting() local
3319 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_pre_setting()
3320 rtw_write_rf(rtwdev, path, RF_RXAGC_OFFSET, RFREG_MASK, 0x0); in rtw8822c_dpk_pre_setting()
3321 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1)); in rtw8822c_dpk_pre_setting()
3334 static u32 rtw8822c_dpk_rf_setting(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_rf_setting() argument
3338 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x50017); in rtw8822c_dpk_rf_setting()
3339 ori_txbb = rtw_read_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK); in rtw8822c_dpk_rf_setting()
3341 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x1); in rtw8822c_dpk_rf_setting()
3342 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_PWR_TRIM, 0x1); in rtw8822c_dpk_rf_setting()
3343 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_BB_GAIN, 0x0); in rtw8822c_dpk_rf_setting()
3344 rtw_write_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK, ori_txbb); in rtw8822c_dpk_rf_setting()
3347 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_RF_GAIN, 0x1); in rtw8822c_dpk_rf_setting()
3348 rtw_write_rf(rtwdev, path, RF_RXG_GAIN, BIT_RXG_GAIN, 0x0); in rtw8822c_dpk_rf_setting()
3350 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_TXA_LB_ATT, 0x0); in rtw8822c_dpk_rf_setting()
3351 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_ATT, 0x6); in rtw8822c_dpk_rf_setting()
3352 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_SW, 0x1); in rtw8822c_dpk_rf_setting()
3353 rtw_write_rf(rtwdev, path, RF_RXA_MIX_GAIN, BIT_RXA_MIX_GAIN, 0); in rtw8822c_dpk_rf_setting()
3356 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf); in rtw8822c_dpk_rf_setting()
3357 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x1); in rtw8822c_dpk_rf_setting()
3358 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_RXBB, 0x0); in rtw8822c_dpk_rf_setting()
3361 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x2); in rtw8822c_dpk_rf_setting()
3363 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x1); in rtw8822c_dpk_rf_setting()
3365 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT(1), 0x1); in rtw8822c_dpk_rf_setting()
3372 static u16 rtw8822c_dpk_get_cmd(struct rtw_dev *rtwdev, u8 action, u8 path) in rtw8822c_dpk_get_cmd() argument
3379 cmd = 0x14 + path; in rtw8822c_dpk_get_cmd()
3382 cmd = 0x16 + path + bw; in rtw8822c_dpk_get_cmd()
3385 cmd = 0x1a + path; in rtw8822c_dpk_get_cmd()
3388 cmd = 0x1c + path + bw; in rtw8822c_dpk_get_cmd()
3397 static u8 rtw8822c_dpk_one_shot(struct rtw_dev *rtwdev, u8 path, u8 action) in rtw8822c_dpk_one_shot() argument
3415 0x8 | (path << 1)); in rtw8822c_dpk_one_shot()
3418 dpk_cmd = rtw8822c_dpk_get_cmd(rtwdev, action, path); in rtw8822c_dpk_one_shot()
3427 0x8 | (path << 1)); in rtw8822c_dpk_one_shot()
3438 static u16 rtw8822c_dpk_dgain_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_dgain_read() argument
3450 static u8 rtw8822c_dpk_thermal_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_thermal_read() argument
3452 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1); in rtw8822c_dpk_thermal_read()
3453 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x0); in rtw8822c_dpk_thermal_read()
3454 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1); in rtw8822c_dpk_thermal_read()
3457 return (u8)rtw_read_rf(rtwdev, path, RF_T_METER, 0x0007e); in rtw8822c_dpk_thermal_read()
3460 static u32 rtw8822c_dpk_pas_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_pas_read() argument
3464 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1)); in rtw8822c_dpk_pas_read()
3509 static u8 rtw8822c_dpk_gainloss_result(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_gainloss_result() argument
3513 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_gainloss_result()
3524 static u8 rtw8822c_dpk_agc_gain_chk(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dpk_agc_gain_chk() argument
3530 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_agc_gain_chk()
3531 dgain = rtw8822c_dpk_dgain_read(rtwdev, path); in rtw8822c_dpk_agc_gain_chk()
3541 static u8 rtw8822c_dpk_agc_loss_chk(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_agc_loss_chk() argument
3545 loss = rtw8822c_dpk_pas_read(rtwdev, path); in rtw8822c_dpk_agc_loss_chk()
3565 u8 path; member
3573 data->txbb = (u8)rtw_read_rf(rtwdev, data->path, RF_TX_GAIN, in rtw8822c_gain_check_state()
3575 data->pga = (u8)rtw_read_rf(rtwdev, data->path, RF_MODE_TRXAGC, in rtw8822c_gain_check_state()
3583 state = rtw8822c_dpk_agc_gain_chk(rtwdev, data->path, in rtw8822c_gain_check_state()
3604 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_large_state()
3606 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0x0); in rtw8822c_gain_large_state()
3619 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_less_state()
3621 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf); in rtw8822c_gain_less_state()
3641 rtw_write_rf(rtwdev, data->path, RF_TX_GAIN, BIT_GAIN_TXBB, data->txbb); in rtw8822c_gl_state()
3662 u8 path = data->path; in rtw8822c_loss_check_state() local
3665 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_GAIN_LOSS); in rtw8822c_loss_check_state()
3666 state = rtw8822c_dpk_agc_loss_chk(rtwdev, path); in rtw8822c_loss_check_state()
3677 static u8 rtw8822c_dpk_pas_agc(struct rtw_dev *rtwdev, u8 path, in rtw8822c_dpk_pas_agc() argument
3686 data.path = path; in rtw8822c_dpk_pas_agc()
3732 static void rtw8822c_dpk_coef_tbl_apply(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_coef_tbl_apply() argument
3740 dpk_info->coef[path][i] = rtw8822c_dpk_coef_transfer(rtwdev); in rtw8822c_dpk_coef_tbl_apply()
3744 static void rtw8822c_dpk_get_coef(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_get_coef() argument
3748 if (path == RF_PATH_A) { in rtw8822c_dpk_get_coef()
3751 } else if (path == RF_PATH_B) { in rtw8822c_dpk_get_coef()
3756 rtw8822c_dpk_coef_tbl_apply(rtwdev, path); in rtw8822c_dpk_get_coef()
3759 static u8 rtw8822c_dpk_coef_read(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_coef_read() argument
3766 coef_i = FIELD_GET(0x1fff0000, dpk_info->coef[path][addr]); in rtw8822c_dpk_coef_read()
3767 coef_q = FIELD_GET(0x1fff, dpk_info->coef[path][addr]); in rtw8822c_dpk_coef_read()
3777 static void rtw8822c_dpk_coef_write(struct rtw_dev *rtwdev, u8 path, u8 result) in rtw8822c_dpk_coef_write() argument
3794 coef = dpk_info->coef[path][addr]; in rtw8822c_dpk_coef_write()
3796 rtw_write32(rtwdev, reg[path] + addr * 4, coef); in rtw8822c_dpk_coef_write()
3801 u8 path, u8 result) in rtw8822c_dpk_fill_result() argument
3805 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_fill_result()
3812 dpk_info->result[path] = result; in rtw8822c_dpk_fill_result()
3813 dpk_info->dpk_txagc[path] = rtw_read8(rtwdev, REG_DPD_AGC); in rtw8822c_dpk_fill_result()
3815 rtw8822c_dpk_coef_write(rtwdev, path, result); in rtw8822c_dpk_fill_result()
3818 static u32 rtw8822c_dpk_gainloss(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_gainloss() argument
3823 ori_txbb = rtw8822c_dpk_rf_setting(rtwdev, path); in rtw8822c_dpk_gainloss()
3824 ori_txagc = (u8)rtw_read_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_TXAGC); in rtw8822c_dpk_gainloss()
3826 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_dpk_gainloss()
3827 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_gainloss()
3828 rtw8822c_dpk_dgain_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3830 if (rtw8822c_dpk_dc_corr_check(rtwdev, path)) { in rtw8822c_dpk_gainloss()
3831 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_dpk_gainloss()
3832 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC); in rtw8822c_dpk_gainloss()
3833 rtw8822c_dpk_dc_corr_check(rtwdev, path); in rtw8822c_dpk_gainloss()
3836 t1 = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3837 tx_bb = rtw8822c_dpk_pas_agc(rtwdev, path, false, true); in rtw8822c_dpk_gainloss()
3838 tx_agc_search = rtw8822c_dpk_gainloss_result(rtwdev, path); in rtw8822c_dpk_gainloss()
3845 rtw_write_rf(rtwdev, path, RF_TX_GAIN, BIT_GAIN_TXBB, tx_bb); in rtw8822c_dpk_gainloss()
3849 t2 = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_gainloss()
3851 dpk_info->thermal_dpk_delta[path] = abs(t2 - t1); in rtw8822c_dpk_gainloss()
3856 static u8 rtw8822c_dpk_by_path(struct rtw_dev *rtwdev, u32 tx_agc, u8 path) in rtw8822c_dpk_by_path() argument
3860 result = rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DO_DPK); in rtw8822c_dpk_by_path()
3862 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_by_path()
3866 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x33e14); in rtw8822c_dpk_by_path()
3868 rtw8822c_dpk_get_coef(rtwdev, path); in rtw8822c_dpk_by_path()
3873 static void rtw8822c_dpk_cal_gs(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_cal_gs() argument
3878 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_cal_gs()
3886 if (path == RF_PATH_A) { in rtw8822c_dpk_cal_gs()
3903 0x05020000 | (BIT(path) << 28)); in rtw8822c_dpk_cal_gs()
3911 0x05020008 | (BIT(path) << 28)); in rtw8822c_dpk_cal_gs()
3914 rtw_write32_mask(rtwdev, REG_DPD_CTL0, MASKBYTE3, 0x8 | path); in rtw8822c_dpk_cal_gs()
3916 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_CAL_PWR); in rtw8822c_dpk_cal_gs()
3919 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_cal_gs()
3924 if (path == RF_PATH_A) in rtw8822c_dpk_cal_gs()
3935 if (path == RF_PATH_A) in rtw8822c_dpk_cal_gs()
3940 dpk_info->dpk_gs[path] = tmp_gs; in rtw8822c_dpk_cal_gs()
3948 u8 path; in rtw8822c_dpk_cal_coef1() local
3961 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_cal_coef1()
3962 i_scaling = 0x16c00 / dpk_info->dpk_gs[path]; in rtw8822c_dpk_cal_coef1()
3964 rtw_write32_mask(rtwdev, 0x1b18 + offset[path], MASKHWORD, in rtw8822c_dpk_cal_coef1()
3966 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3968 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3970 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3972 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0 + offset[path], in rtw8822c_dpk_cal_coef1()
3977 static void rtw8822c_dpk_on(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_on() argument
3981 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON); in rtw8822c_dpk_on()
3983 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1)); in rtw8822c_dpk_on()
3986 if (test_bit(path, dpk_info->dpk_path_ok)) in rtw8822c_dpk_on()
3987 rtw8822c_dpk_cal_gs(rtwdev, path); in rtw8822c_dpk_on()
3991 u32 dpk_txagc, u8 path) in rtw8822c_dpk_check_pass() argument
3996 if (rtw8822c_dpk_coef_read(rtwdev, path)) in rtw8822c_dpk_check_pass()
4004 rtw8822c_dpk_fill_result(rtwdev, dpk_txagc, path, result); in rtw8822c_dpk_check_pass()
4012 u8 path; in rtw8822c_dpk_result_reset() local
4014 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_result_reset()
4015 clear_bit(path, dpk_info->dpk_path_ok); in rtw8822c_dpk_result_reset()
4017 0x8 | (path << 1)); in rtw8822c_dpk_result_reset()
4020 dpk_info->dpk_txagc[path] = 0; in rtw8822c_dpk_result_reset()
4021 dpk_info->result[path] = 0; in rtw8822c_dpk_result_reset()
4022 dpk_info->dpk_gs[path] = 0x5b; in rtw8822c_dpk_result_reset()
4023 dpk_info->pre_pwsf[path] = 0; in rtw8822c_dpk_result_reset()
4024 dpk_info->thermal_dpk[path] = rtw8822c_dpk_thermal_read(rtwdev, in rtw8822c_dpk_result_reset()
4025 path); in rtw8822c_dpk_result_reset()
4029 static void rtw8822c_dpk_calibrate(struct rtw_dev *rtwdev, u8 path) in rtw8822c_dpk_calibrate() argument
4035 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk start\n", path); in rtw8822c_dpk_calibrate()
4037 dpk_txagc = rtw8822c_dpk_gainloss(rtwdev, path); in rtw8822c_dpk_calibrate()
4039 dpk_fail = rtw8822c_dpk_by_path(rtwdev, dpk_txagc, path); in rtw8822c_dpk_calibrate()
4041 if (!rtw8822c_dpk_check_pass(rtwdev, dpk_fail, dpk_txagc, path)) in rtw8822c_dpk_calibrate()
4044 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk finish\n", path); in rtw8822c_dpk_calibrate()
4046 if (dpk_info->result[path]) in rtw8822c_dpk_calibrate()
4047 set_bit(path, dpk_info->dpk_path_ok); in rtw8822c_dpk_calibrate()
4084 u8 path; in rtw8822c_dpk_reload_data() local
4091 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_reload_data()
4093 0x8 | (path << 1)); in rtw8822c_dpk_reload_data()
4099 rtw_write8(rtwdev, REG_DPD_AGC, dpk_info->dpk_txagc[path]); in rtw8822c_dpk_reload_data()
4101 rtw8822c_dpk_coef_write(rtwdev, path, in rtw8822c_dpk_reload_data()
4102 test_bit(path, dpk_info->dpk_path_ok)); in rtw8822c_dpk_reload_data()
4104 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON); in rtw8822c_dpk_reload_data()
4108 if (path == RF_PATH_A) in rtw8822c_dpk_reload_data()
4110 dpk_info->dpk_gs[path]); in rtw8822c_dpk_reload_data()
4113 dpk_info->dpk_gs[path]); in rtw8822c_dpk_reload_data()
4148 u8 path; in rtw8822c_do_dpk() local
4157 for (path = RF_PATH_A; path < DPK_RF_PATH_NUM; path++) in rtw8822c_do_dpk()
4158 ewma_thermal_init(&dpk_info->avg_thermal[path]); in rtw8822c_do_dpk()
4174 for (path = 0; path < rtwdev->hal.rf_path_num; path++) in rtw8822c_do_dpk()
4175 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path); in rtw8822c_do_dpk()
4191 u8 path; in rtw8822c_dpk_track() local
4198 for (path = 0; path < DPK_RF_PATH_NUM; path++) { in rtw8822c_dpk_track()
4199 thermal_value[path] = rtw8822c_dpk_thermal_read(rtwdev, path); in rtw8822c_dpk_track()
4200 ewma_thermal_add(&dpk_info->avg_thermal[path], in rtw8822c_dpk_track()
4201 thermal_value[path]); in rtw8822c_dpk_track()
4202 thermal_value[path] = in rtw8822c_dpk_track()
4203 ewma_thermal_read(&dpk_info->avg_thermal[path]); in rtw8822c_dpk_track()
4204 delta_dpk[path] = dpk_info->thermal_dpk[path] - in rtw8822c_dpk_track()
4205 thermal_value[path]; in rtw8822c_dpk_track()
4206 offset[path] = delta_dpk[path] - in rtw8822c_dpk_track()
4207 dpk_info->thermal_dpk_delta[path]; in rtw8822c_dpk_track()
4208 offset[path] &= 0x7f; in rtw8822c_dpk_track()
4210 if (offset[path] != dpk_info->pre_pwsf[path]) { in rtw8822c_dpk_track()
4212 0x8 | (path << 1)); in rtw8822c_dpk_track()
4214 offset[path]); in rtw8822c_dpk_track()
4215 dpk_info->pre_pwsf[path] = offset[path]; in rtw8822c_dpk_track()
4444 static void rtw8822c_pwr_track_stats(struct rtw_dev *rtwdev, u8 path) in rtw8822c_pwr_track_stats() argument
4448 if (rtwdev->efuse.thermal_meter[path] == 0xff) in rtw8822c_pwr_track_stats()
4451 thermal_value = rtw_read_rf(rtwdev, path, RF_T_METER, 0x7e); in rtw8822c_pwr_track_stats()
4452 rtw_phy_pwrtrack_avg(rtwdev, thermal_value, path); in rtw8822c_pwr_track_stats()
4457 u8 path) in rtw8822c_pwr_track_path() argument
4462 delta = rtw_phy_pwrtrack_get_delta(rtwdev, path); in rtw8822c_pwr_track_path()
4463 dm_info->delta_power_index[path] = in rtw8822c_pwr_track_path()
4464 rtw_phy_pwrtrack_get_pwridx(rtwdev, swing_table, path, path, in rtw8822c_pwr_track_path()
4466 rtw8822c_pwrtrack_set(rtwdev, path); in rtw8822c_pwr_track_path()