Lines Matching +full:tx +full:- +full:level +full:- +full:trig

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
20 RTW8922A_FW_BASENAME "-" __stringify(RTW8922A_FW_FORMAT_MAX) ".bin"
268 struct rtw89_hal *hal = &rtwdev->hal; in rtw8922a_pwr_on_func()
373 if (hal->cv != CHIP_CAV) { in rtw8922a_pwr_on_func()
393 set_bit(RTW89_FLAG_DMAC_FUNC, rtwdev->flags); in rtw8922a_pwr_on_func()
404 set_bit(RTW89_FLAG_CMAC0_FUNC, rtwdev->flags); in rtw8922a_pwr_on_func()
504 struct rtw8922a_tssi_offset *ofst[] = {&map->path_a_tssi, &map->path_b_tssi}; in rtw8922a_efuse_parsing_tssi()
505 u8 *bw40_1s_tssi_6g_ofst[] = {map->bw40_1s_tssi_6g_a, map->bw40_1s_tssi_6g_b}; in rtw8922a_efuse_parsing_tssi()
506 struct rtw89_tssi_info *tssi = &rtwdev->tssi; in rtw8922a_efuse_parsing_tssi()
509 tssi->thermal[RF_PATH_A] = map->path_a_therm; in rtw8922a_efuse_parsing_tssi()
510 tssi->thermal[RF_PATH_B] = map->path_b_therm; in rtw8922a_efuse_parsing_tssi()
513 memcpy(tssi->tssi_cck[i], ofst[i]->cck_tssi, in rtw8922a_efuse_parsing_tssi()
514 sizeof(ofst[i]->cck_tssi)); in rtw8922a_efuse_parsing_tssi()
519 i, j, tssi->tssi_cck[i][j]); in rtw8922a_efuse_parsing_tssi()
521 memcpy(tssi->tssi_mcs[i], ofst[i]->bw40_tssi, in rtw8922a_efuse_parsing_tssi()
522 sizeof(ofst[i]->bw40_tssi)); in rtw8922a_efuse_parsing_tssi()
523 memcpy(tssi->tssi_mcs[i] + TSSI_MCS_2G_CH_GROUP_NUM, in rtw8922a_efuse_parsing_tssi()
524 ofst[i]->bw40_1s_tssi_5g, sizeof(ofst[i]->bw40_1s_tssi_5g)); in rtw8922a_efuse_parsing_tssi()
525 memcpy(tssi->tssi_6g_mcs[i], bw40_1s_tssi_6g_ofst[i], in rtw8922a_efuse_parsing_tssi()
526 sizeof(tssi->tssi_6g_mcs[i])); in rtw8922a_efuse_parsing_tssi()
531 i, j, tssi->tssi_mcs[i][j]); in rtw8922a_efuse_parsing_tssi()
538 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8922a_efuse_parsing_gain_offset()
543 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_2G_CCK] = map->rx_gain_a._2g_cck; in rtw8922a_efuse_parsing_gain_offset()
544 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_2G_CCK] = map->rx_gain_b._2g_cck; in rtw8922a_efuse_parsing_gain_offset()
545 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_2G_OFDM] = map->rx_gain_a._2g_ofdm; in rtw8922a_efuse_parsing_gain_offset()
546 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_2G_OFDM] = map->rx_gain_b._2g_ofdm; in rtw8922a_efuse_parsing_gain_offset()
547 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_LOW] = map->rx_gain_a._5g_low; in rtw8922a_efuse_parsing_gain_offset()
548 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_LOW] = map->rx_gain_b._5g_low; in rtw8922a_efuse_parsing_gain_offset()
549 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_MID] = map->rx_gain_a._5g_mid; in rtw8922a_efuse_parsing_gain_offset()
550 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_MID] = map->rx_gain_b._5g_mid; in rtw8922a_efuse_parsing_gain_offset()
551 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_HIGH] = map->rx_gain_a._5g_high; in rtw8922a_efuse_parsing_gain_offset()
552 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_HIGH] = map->rx_gain_b._5g_high; in rtw8922a_efuse_parsing_gain_offset()
553 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_L0] = map->rx_gain_6g_a._6g_l0; in rtw8922a_efuse_parsing_gain_offset()
554 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_L0] = map->rx_gain_6g_b._6g_l0; in rtw8922a_efuse_parsing_gain_offset()
555 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_L1] = map->rx_gain_6g_a._6g_l1; in rtw8922a_efuse_parsing_gain_offset()
556 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_L1] = map->rx_gain_6g_b._6g_l1; in rtw8922a_efuse_parsing_gain_offset()
557 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_M0] = map->rx_gain_6g_a._6g_m0; in rtw8922a_efuse_parsing_gain_offset()
558 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_M0] = map->rx_gain_6g_b._6g_m0; in rtw8922a_efuse_parsing_gain_offset()
559 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_M1] = map->rx_gain_6g_a._6g_m1; in rtw8922a_efuse_parsing_gain_offset()
560 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_M1] = map->rx_gain_6g_b._6g_m1; in rtw8922a_efuse_parsing_gain_offset()
561 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_H0] = map->rx_gain_6g_a._6g_h0; in rtw8922a_efuse_parsing_gain_offset()
562 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_H0] = map->rx_gain_6g_b._6g_h0; in rtw8922a_efuse_parsing_gain_offset()
563 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_H1] = map->rx_gain_6g_a._6g_h1; in rtw8922a_efuse_parsing_gain_offset()
564 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_H1] = map->rx_gain_6g_b._6g_h1; in rtw8922a_efuse_parsing_gain_offset()
565 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_UH0] = map->rx_gain_6g_a._6g_uh0; in rtw8922a_efuse_parsing_gain_offset()
566 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_UH0] = map->rx_gain_6g_b._6g_uh0; in rtw8922a_efuse_parsing_gain_offset()
567 gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_UH1] = map->rx_gain_6g_a._6g_uh1; in rtw8922a_efuse_parsing_gain_offset()
568 gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_UH1] = map->rx_gain_6g_b._6g_uh1; in rtw8922a_efuse_parsing_gain_offset()
572 t = gain->offset[i][j]; in rtw8922a_efuse_parsing_gain_offset()
578 /* transform: sign-bit + U(7,2) to S(8,2) */ in rtw8922a_efuse_parsing_gain_offset()
580 gain->offset[i][j] = (t ^ 0x7f) + 1; in rtw8922a_efuse_parsing_gain_offset()
583 gain->offset_valid = !all_0xff && !all_0x00; in rtw8922a_efuse_parsing_gain_offset()
588 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw8922a_read_efuse_mac_addr()
594 efuse->addr[i] = val & 0xff; in rtw8922a_read_efuse_mac_addr()
595 efuse->addr[i + 1] = val >> 8; in rtw8922a_read_efuse_mac_addr()
601 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw8922a_read_efuse_pci_sdio()
603 if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) in rtw8922a_read_efuse_pci_sdio()
606 ether_addr_copy(efuse->addr, log_map + 0x001A); in rtw8922a_read_efuse_pci_sdio()
621 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw8922a_read_efuse_rf()
623 efuse->rfe_type = map->rfe_type; in rtw8922a_read_efuse_rf()
624 efuse->xtal_cap = map->xtal_k; in rtw8922a_read_efuse_rf()
625 efuse->country_code[0] = map->country_code[0]; in rtw8922a_read_efuse_rf()
626 efuse->country_code[1] = map->country_code[1]; in rtw8922a_read_efuse_rf()
630 rtw89_info(rtwdev, "chip rfe_type is %d\n", efuse->rfe_type); in rtw8922a_read_efuse_rf()
657 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_phycap_parsing_thermal_trim()
658 u32 addr = rtwdev->chip->phycap_addr; in rtw8922a_phycap_parsing_thermal_trim()
665 pg_th = phycap_map[thm_trim_addr[i] - addr]; in rtw8922a_phycap_parsing_thermal_trim()
667 info->thermal_trim[i] = 0; in rtw8922a_phycap_parsing_thermal_trim()
675 val *= -1; in rtw8922a_phycap_parsing_thermal_trim()
677 info->thermal_trim[i] = val; in rtw8922a_phycap_parsing_thermal_trim()
684 info->pg_thermal_trim = pg; in rtw8922a_phycap_parsing_thermal_trim()
692 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_phycap_parsing_pa_bias_trim()
693 u32 addr = rtwdev->chip->phycap_addr; in rtw8922a_phycap_parsing_pa_bias_trim()
697 val = phycap_map[check_pa_pad_trim_addr - addr]; in rtw8922a_phycap_parsing_pa_bias_trim()
699 info->pg_pa_bias_trim = true; in rtw8922a_phycap_parsing_pa_bias_trim()
702 info->pa_bias_trim[i] = phycap_map[pabias_trim_addr[i] - addr]; in rtw8922a_phycap_parsing_pa_bias_trim()
706 i, info->pa_bias_trim[i]); in rtw8922a_phycap_parsing_pa_bias_trim()
712 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_pa_bias_trim()
716 if (!info->pg_pa_bias_trim) { in rtw8922a_pa_bias_trim()
724 pabias_2g = FIELD_GET(GENMASK(3, 0), info->pa_bias_trim[i]); in rtw8922a_pa_bias_trim()
725 pabias_5g = FIELD_GET(GENMASK(7, 4), info->pa_bias_trim[i]); in rtw8922a_pa_bias_trim()
740 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_phycap_parsing_pad_bias_trim()
741 u32 addr = rtwdev->chip->phycap_addr; in rtw8922a_phycap_parsing_pad_bias_trim()
745 info->pad_bias_trim[i] = phycap_map[pad_bias_trim_addr[i] - addr]; in rtw8922a_phycap_parsing_pad_bias_trim()
749 i, info->pad_bias_trim[i]); in rtw8922a_phycap_parsing_pad_bias_trim()
755 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_pad_bias_trim()
759 if (!info->pg_pa_bias_trim) { in rtw8922a_pad_bias_trim()
766 pad_bias_2g = u8_get_bits(info->pad_bias_trim[i], GENMASK(3, 0)); in rtw8922a_pad_bias_trim()
767 pad_bias_5g = u8_get_bits(info->pad_bias_trim[i], GENMASK(7, 4)); in rtw8922a_pad_bias_trim()
805 switch (chan->band_width) { in rtw8922a_set_channel_mac()
819 switch (chan->band_width) { in rtw8922a_set_channel_mac()
848 switch (chan->band_type) { in rtw8922a_set_channel_mac()
857 rtw89_warn(rtwdev, "Invalid band_type:%d\n", chan->band_type); in rtw8922a_set_channel_mac()
865 switch (chan->band_width) { in rtw8922a_set_channel_mac()
901 return -EINVAL; in rtw8922a_ctrl_sco_cck()
903 ch_element = primary_ch - 1; in rtw8922a_ctrl_sco_cck()
1021 const struct rtw89_phy_bb_gain_info_be *gain = &rtwdev->bb_gain.be; in rtw8922a_set_rpl_gain()
1022 u8 gain_band = rtw89_subband_to_gain_band_be(chan->subband_type); in rtw8922a_set_rpl_gain()
1035 val = gain->rpl_ofst_160[gain_band][path][i]; in rtw8922a_set_rpl_gain()
1042 val = gain->rpl_ofst_80[gain_band][path][i]; in rtw8922a_set_rpl_gain()
1049 val = gain->rpl_ofst_40[gain_band][path][i]; in rtw8922a_set_rpl_gain()
1056 val = gain->rpl_ofst_20[gain_band][path][i]; in rtw8922a_set_rpl_gain()
1066 const struct rtw89_phy_bb_gain_info_be *gain = &rtwdev->bb_gain.be; in rtw8922a_set_lna_tia_gain()
1067 u8 gain_band = rtw89_subband_to_gain_band_be(chan->subband_type); in rtw8922a_set_lna_tia_gain()
1074 bw_type = chan->band_width <= RTW89_CHANNEL_WIDTH_40 ? in rtw8922a_set_lna_tia_gain()
1078 if (chan->band_type == RTW89_BAND_2G) { in rtw8922a_set_lna_tia_gain()
1085 val = gain->lna_gain[gain_band][bw_type][path][i]; in rtw8922a_set_lna_tia_gain()
1090 if (chan->band_type == RTW89_BAND_2G) { in rtw8922a_set_lna_tia_gain()
1097 val = gain->tia_gain[gain_band][bw_type][path][i]; in rtw8922a_set_lna_tia_gain()
1102 if (chan->band_type == RTW89_BAND_2G) { in rtw8922a_set_lna_tia_gain()
1109 val = gain->lna_op1db[gain_band][bw_type][path][i]; in rtw8922a_set_lna_tia_gain()
1114 if (chan->band_type == RTW89_BAND_2G) { in rtw8922a_set_lna_tia_gain()
1121 val = gain->tia_lna_op1db[gain_band][bw_type][path][i]; in rtw8922a_set_lna_tia_gain()
1139 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8922a_set_rx_gain_normal_cck()
1140 s8 value = -gain->offset[path][RTW89_GAIN_OFFSET_2G_CCK]; /* S(8,2) */ in rtw8922a_set_rx_gain_normal_cck()
1145 (0x4 - fraction) << 1); in rtw8922a_set_rx_gain_normal_cck()
1147 (0x4 - fraction) << 1); in rtw8922a_set_rx_gain_normal_cck()
1171 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8922a_set_rx_gain_normal_ofdm()
1176 gain_band = rtw89_subband_to_gain_offset_band_of_ofdm(chan->subband_type); in rtw8922a_set_rx_gain_normal_ofdm()
1177 value = gain->offset[path][gain_band]; in rtw8922a_set_rx_gain_normal_ofdm()
1180 value *= -4; in rtw8922a_set_rx_gain_normal_ofdm()
1182 value -= v1; in rtw8922a_set_rx_gain_normal_ofdm()
1184 value -= v2; in rtw8922a_set_rx_gain_normal_ofdm()
1200 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8922a_set_rx_gain_normal()
1202 if (!gain->offset_valid) in rtw8922a_set_rx_gain_normal()
1205 if (chan->band_type == RTW89_BAND_2G) in rtw8922a_set_rx_gain_normal()
1240 u16 central_freq = chan->freq; in rtw8922a_ctrl_ch()
1241 u8 central_ch = chan->channel; in rtw8922a_ctrl_ch()
1242 u8 band = chan->band_type; in rtw8922a_ctrl_ch()
1269 chan_idx = rtw89_encode_chan_idx(rtwdev, chan->primary_channel, band); in rtw8922a_ctrl_ch()
1362 freq_diff = (spur_freq - chan->freq) * 1000000; in rtw8922a_set_csi_tone_idx()
1404 rtw89_phy_write32_idx(rtwdev, nbi->notch1_en.addr, in rtw8922a_set_nbi_tone_idx()
1405 nbi->notch1_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1406 rtw89_phy_write32_idx(rtwdev, nbi->notch2_en.addr, in rtw8922a_set_nbi_tone_idx()
1407 nbi->notch2_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1411 fc = chan->freq; in rtw8922a_set_nbi_tone_idx()
1412 if (chan->band_width == RTW89_CHANNEL_WIDTH_160) { in rtw8922a_set_nbi_tone_idx()
1413 fc = (spur_freq > fc) ? fc + 40 : fc - 40; in rtw8922a_set_nbi_tone_idx()
1415 chan->channel < chan->primary_channel) || in rtw8922a_set_nbi_tone_idx()
1417 chan->channel > chan->primary_channel)) in rtw8922a_set_nbi_tone_idx()
1421 freq_diff = (spur_freq - fc) * 1000000; in rtw8922a_set_nbi_tone_idx()
1425 if (chan->band_width == RTW89_CHANNEL_WIDTH_20) { in rtw8922a_set_nbi_tone_idx()
1428 u16 tone_para = (chan->band_width == RTW89_CHANNEL_WIDTH_40) ? in rtw8922a_set_nbi_tone_idx()
1436 if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && notch2_chk) { in rtw8922a_set_nbi_tone_idx()
1437 rtw89_phy_write32_idx(rtwdev, nbi->notch2_idx.addr, in rtw8922a_set_nbi_tone_idx()
1438 nbi->notch2_idx.mask, nbi_tone_idx, phy_idx); in rtw8922a_set_nbi_tone_idx()
1439 rtw89_phy_write32_idx(rtwdev, nbi->notch2_frac_idx.addr, in rtw8922a_set_nbi_tone_idx()
1440 nbi->notch2_frac_idx.mask, nbi_frac_tone_idx, in rtw8922a_set_nbi_tone_idx()
1442 rtw89_phy_write32_idx(rtwdev, nbi->notch2_en.addr, in rtw8922a_set_nbi_tone_idx()
1443 nbi->notch2_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1444 rtw89_phy_write32_idx(rtwdev, nbi->notch2_en.addr, in rtw8922a_set_nbi_tone_idx()
1445 nbi->notch2_en.mask, 1, phy_idx); in rtw8922a_set_nbi_tone_idx()
1446 rtw89_phy_write32_idx(rtwdev, nbi->notch1_en.addr, in rtw8922a_set_nbi_tone_idx()
1447 nbi->notch1_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1449 rtw89_phy_write32_idx(rtwdev, nbi->notch1_idx.addr, in rtw8922a_set_nbi_tone_idx()
1450 nbi->notch1_idx.mask, nbi_tone_idx, phy_idx); in rtw8922a_set_nbi_tone_idx()
1451 rtw89_phy_write32_idx(rtwdev, nbi->notch1_frac_idx.addr, in rtw8922a_set_nbi_tone_idx()
1452 nbi->notch1_frac_idx.mask, nbi_frac_tone_idx, in rtw8922a_set_nbi_tone_idx()
1454 rtw89_phy_write32_idx(rtwdev, nbi->notch1_en.addr, in rtw8922a_set_nbi_tone_idx()
1455 nbi->notch1_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1456 rtw89_phy_write32_idx(rtwdev, nbi->notch1_en.addr, in rtw8922a_set_nbi_tone_idx()
1457 nbi->notch1_en.mask, 1, phy_idx); in rtw8922a_set_nbi_tone_idx()
1458 rtw89_phy_write32_idx(rtwdev, nbi->notch2_en.addr, in rtw8922a_set_nbi_tone_idx()
1459 nbi->notch2_en.mask, 0, phy_idx); in rtw8922a_set_nbi_tone_idx()
1539 rtw89_bbmcu_write32(rtwdev, reg->addr, reg->data, phy_idx); in rtw8922a_bbmcu_cr_init()
1632 if (phy_idx == RTW89_PHY_1 && !rtwdev->dbcc_en) in rtw8922a_ctrl_tx_path_tmac()
1657 ret = -EINVAL; in rtw8922a_ctrl_tx_path_tmac()
1700 return -EINVAL; in rtw8922a_cfg_rx_nss_limit()
1710 if (rtwdev->mlo_dbcc_mode == MLO_1_PLUS_1_1RF) { in rtw8922a_tssi_reset()
1751 return -EINVAL; in rtw8922a_ctrl_rx_path_tmac()
1796 bool enable = chan->band_type != RTW89_BAND_2G; in rtw8922a_digital_pwr_comp()
1799 if (rtwdev->mlo_dbcc_mode == MLO_1_PLUS_1_1RF) { in rtw8922a_digital_pwr_comp()
1823 return -EOPNOTSUPP; in rtw8922a_ctrl_mlo()
1837 rtw8922a_ctrl_afe_dac(rtwdev, chan0->band_width, RF_PATH_A); in rtw8922a_ctrl_mlo()
1838 rtw8922a_ctrl_afe_dac(rtwdev, chan1->band_width, RF_PATH_B); in rtw8922a_ctrl_mlo()
1872 if (rtwdev->dbcc_en) { in rtw8922a_bb_sethw()
1877 rtw8922a_ctrl_mlo(rtwdev, rtwdev->mlo_dbcc_mode); in rtw8922a_bb_sethw()
1900 bool cck_en = chan->band_type == RTW89_BAND_2G; in rtw8922a_set_channel_bb()
1901 u8 pri_sb = chan->pri_sb_idx; in rtw8922a_set_channel_bb()
1904 rtw8922a_ctrl_sco_cck(rtwdev, chan->primary_channel, in rtw8922a_set_channel_bb()
1905 chan->band_width, phy_idx); in rtw8922a_set_channel_bb()
1908 rtw8922a_ctrl_bw(rtwdev, pri_sb, chan->band_width, phy_idx); in rtw8922a_set_channel_bb()
1919 if (!rtwdev->dbcc_en) in rtw8922a_pre_set_channel_bb()
1942 if (!rtwdev->dbcc_en) in rtw8922a_post_set_channel_bb()
2004 if (rtwdev->mlo_dbcc_mode == MLO_1_PLUS_1_1RF) { in rtw8922a_adc_en()
2049 rtw8922a_hal_reset(rtwdev, phy_idx, mac_idx, chan->band_type, &p->tx_en, enter); in rtw8922a_set_channel_help()
2052 rtw8922a_post_set_channel_bb(rtwdev, rtwdev->mlo_dbcc_mode, phy_idx); in rtw8922a_set_channel_help()
2059 struct rtw89_rfk_mcc_info *rfk_mcc = &rtwdev->rfk_mcc; in rtw8922a_rfk_init()
2061 rtwdev->is_tssi_mode[RF_PATH_A] = false; in rtw8922a_rfk_init()
2062 rtwdev->is_tssi_mode[RF_PATH_B] = false; in rtw8922a_rfk_init()
2081 if (rtwdev->dbcc_en) in rtw8922a_rfk_init_late()
2107 enum rtw89_chanctx_idx chanctx_idx = rtwvif_link->chanctx_idx; in rtw8922a_rfk_channel()
2109 enum rtw89_phy_idx phy_idx = rtwvif_link->phy_idx; in rtw8922a_rfk_channel()
2175 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw8922a_set_txpwr_diff()
2186 if (rtwdev->hal.cv == CHIP_CAV) in rtw8922a_set_txpwr_diff()
2189 pwr_ref <<= chip->txpwr_factor_rf; in rtw8922a_set_txpwr_diff()
2190 pwr_ref_ofst = pwr_ref - rtw89_phy_txpwr_bb_to_rf(rtwdev, abs(pwr_ofst)); in rtw8922a_set_txpwr_diff()
2221 const struct rtw89_rfe_parms *rfe_parms = rtwdev->rfe_parms; in rtw8922a_set_tx_shape()
2222 const struct rtw89_tx_shape *tx_shape = &rfe_parms->tx_shape; in rtw8922a_set_tx_shape()
2226 band = chan->band_type; in rtw8922a_set_tx_shape()
2228 tx_shape_idx = (*tx_shape->lmt)[band][RTW89_RS_OFDM][regd]; in rtw8922a_set_tx_shape()
2319 enum rtw89_band band = chan->band_type; in rtw8922a_bb_cfg_txrx_path()
2320 struct rtw89_hal *hal = &rtwdev->hal; in rtw8922a_bb_cfg_txrx_path()
2324 if (hal->antenna_tx == RF_A) in rtw8922a_bb_cfg_txrx_path()
2326 else if (hal->antenna_tx == RF_B) in rtw8922a_bb_cfg_txrx_path()
2330 if (rtwdev->dbcc_en) in rtw8922a_bb_cfg_txrx_path()
2337 if (rtwdev->dbcc_en) in rtw8922a_bb_cfg_txrx_path()
2344 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8922a_get_thermal()
2345 struct rtw89_hal *hal = &rtwdev->hal; in rtw8922a_get_thermal()
2350 !hal->thermal_prot_th) in rtw8922a_get_thermal()
2360 th += (s8)info->thermal_trim[rf_path]; in rtw8922a_get_thermal()
2367 union rtw89_btc_module_info *md = &rtwdev->btc.mdinfo; in rtw8922a_btc_set_rfe()
2368 struct rtw89_btc_module_v7 *module = &md->md_v7; in rtw8922a_btc_set_rfe()
2370 module->rfe_type = rtwdev->efuse.rfe_type; in rtw8922a_btc_set_rfe()
2371 module->kt_ver = rtwdev->hal.cv; in rtw8922a_btc_set_rfe()
2372 module->bt_solo = 0; in rtw8922a_btc_set_rfe()
2373 module->switch_type = BTC_SWITCH_INTERNAL; in rtw8922a_btc_set_rfe()
2374 module->wa_type = 0; in rtw8922a_btc_set_rfe()
2376 module->ant.type = BTC_ANT_SHARED; in rtw8922a_btc_set_rfe()
2377 module->ant.num = 2; in rtw8922a_btc_set_rfe()
2378 module->ant.isolation = 10; in rtw8922a_btc_set_rfe()
2379 module->ant.diversity = 0; in rtw8922a_btc_set_rfe()
2380 module->ant.single_pos = RF_PATH_A; in rtw8922a_btc_set_rfe()
2381 module->ant.btg_pos = RF_PATH_B; in rtw8922a_btc_set_rfe()
2383 if (module->kt_ver <= 1) in rtw8922a_btc_set_rfe()
2384 module->wa_type |= BTC_WA_HFP_ZB; in rtw8922a_btc_set_rfe()
2386 rtwdev->btc.cx.other.type = BTC_3CX_NONE; in rtw8922a_btc_set_rfe()
2388 if (module->rfe_type == 0) { in rtw8922a_btc_set_rfe()
2389 rtwdev->btc.dm.error.map.rfe_type0 = true; in rtw8922a_btc_set_rfe()
2393 module->ant.num = (module->rfe_type % 2) ? 2 : 3; in rtw8922a_btc_set_rfe()
2395 if (module->kt_ver == 0) in rtw8922a_btc_set_rfe()
2396 module->ant.num = 2; in rtw8922a_btc_set_rfe()
2398 if (module->ant.num == 3) { in rtw8922a_btc_set_rfe()
2399 module->ant.type = BTC_ANT_DEDICATED; in rtw8922a_btc_set_rfe()
2400 module->bt_pos = BTC_BT_ALONE; in rtw8922a_btc_set_rfe()
2402 module->ant.type = BTC_ANT_SHARED; in rtw8922a_btc_set_rfe()
2403 module->bt_pos = BTC_BT_BTG; in rtw8922a_btc_set_rfe()
2405 rtwdev->btc.btg_pos = module->ant.btg_pos; in rtw8922a_btc_set_rfe()
2406 rtwdev->btc.ant_type = module->ant.type; in rtw8922a_btc_set_rfe()
2418 struct rtw89_btc *btc = &rtwdev->btc; in rtw8922a_btc_init_cfg()
2419 struct rtw89_btc_ant_info_v7 *ant = &btc->mdinfo.md_v7.ant; in rtw8922a_btc_init_cfg()
2423 /* for 1-Ant && 1-ss case: only 1-path */ in rtw8922a_btc_init_cfg()
2424 if (ant->num == 1) { in rtw8922a_btc_init_cfg()
2425 path_min = ant->single_pos; in rtw8922a_btc_init_cfg()
2435 /* set DEBUG_LUT_RFMODE_MASK = 1 to start trx-mask-setup */ in rtw8922a_btc_init_cfg()
2438 /* if GNT_WL=0 && BT=SS_group --> WL Tx/Rx = THRU */ in rtw8922a_btc_init_cfg()
2441 /* if GNT_WL=0 && BT=Rx_group --> WL-Rx = THRU + WL-Tx = MASK */ in rtw8922a_btc_init_cfg()
2444 /* if GNT_WL = 0 && BT = Tx_group --> in rtw8922a_btc_init_cfg()
2445 * Shared-Ant && BTG-path:WL mask(0x55f), others:WL THRU(0x5ff) in rtw8922a_btc_init_cfg()
2447 if (btc->ant_type == BTC_ANT_SHARED && btc->btg_pos == path) in rtw8922a_btc_init_cfg()
2455 /* set WL PTA Hi-Pri: Ack-Tx, beacon-tx, Trig-frame-Tx, Null-Tx*/ in rtw8922a_btc_init_cfg()
2463 /* ZB coex table init for HFP PTA req-cmd bit-4 define issue COEX-900*/ in rtw8922a_btc_init_cfg()
2469 btc->cx.wl.status.map.init_ok = true; in rtw8922a_btc_init_cfg()
2512 return clamp_t(s8, val, -100, 0) + 100; in rtw8922a_btc_get_bt_rssi()
2516 {255, 0, 0, 7}, /* 0 -> original */
2517 {255, 2, 0, 7}, /* 1 -> for BT-connected ACI issue && BTG co-rx */
2518 {255, 0, 0, 7}, /* 2 ->reserved for shared-antenna */
2519 {255, 0, 0, 7}, /* 3- >reserved for shared-antenna */
2520 {255, 0, 0, 7}, /* 4 ->reserved for shared-antenna */
2521 {255, 1, 0, 7}, /* the below id is for non-shared-antenna free-run */
2528 {255, 0, 0, 7}, /* 0 -> original */
2529 {255, 2, 0, 7}, /* 1 -> reserved for shared-antenna */
2530 {255, 0, 0, 7}, /* 2 ->reserved for shared-antenna */
2531 {255, 0, 0, 7}, /* 3- >reserved for shared-antenna */
2532 {255, 0, 0, 7}, /* 4 ->reserved for shared-antenna */
2533 {255, 1, 0, 7}, /* the below id is for non-shared-antenna free-run */
2600 static void rtw8922a_btc_set_wl_rx_gain(struct rtw89_dev *rtwdev, u32 level) in rtw8922a_btc_set_wl_rx_gain() argument
2608 u8 chan_idx = phy_ppdu->chan_idx; in rtw8922a_fill_freq_with_ppdu()
2616 status->freq = ieee80211_channel_to_frequency(ch, band); in rtw8922a_fill_freq_with_ppdu()
2617 status->band = band; in rtw8922a_fill_freq_with_ppdu()
2625 u8 *rx_power = phy_ppdu->rssi; in rtw8922a_query_ppdu()
2627 if (!status->signal) in rtw8922a_query_ppdu()
2628 status->signal = RTW89_RSSI_RAW_TO_DBM(max(rx_power[RF_PATH_A], in rtw8922a_query_ppdu()
2631 for (path = 0; path < rtwdev->chip->rf_path_num; path++) { in rtw8922a_query_ppdu()
2632 status->chains |= BIT(path); in rtw8922a_query_ppdu()
2633 status->chain_signal[path] = RTW89_RSSI_RAW_TO_DBM(rx_power[path]); in rtw8922a_query_ppdu()
2635 if (phy_ppdu->valid) in rtw8922a_query_ppdu()
2644 u8 *rssi = phy_ppdu->rssi; in rtw8922a_convert_rpl_to_rssi()
2649 if (phy_ppdu->bw_idx < ARRAY_SIZE(bw_compensate)) in rtw8922a_convert_rpl_to_rssi()
2650 compensate = bw_compensate[phy_ppdu->bw_idx]; in rtw8922a_convert_rpl_to_rssi()
2653 if (!(phy_ppdu->rx_path_en & BIT(i))) { in rtw8922a_convert_rpl_to_rssi()
2655 phy_ppdu->rpl_path[i] = 0; in rtw8922a_convert_rpl_to_rssi()
2656 phy_ppdu->rpl_fd[i] = 0; in rtw8922a_convert_rpl_to_rssi()
2658 if (phy_ppdu->rate >= RTW89_HW_RATE_OFDM6) { in rtw8922a_convert_rpl_to_rssi()
2659 rpl_tmp = phy_ppdu->rpl_fd[i]; in rtw8922a_convert_rpl_to_rssi()
2663 phy_ppdu->rpl_path[i] = rpl_tmp; in rtw8922a_convert_rpl_to_rssi()
2665 rssi[i] = phy_ppdu->rpl_path[i]; in rtw8922a_convert_rpl_to_rssi()
2668 phy_ppdu->rssi_avg = phy_ppdu->rpl_avg; in rtw8922a_convert_rpl_to_rssi()
2675 if (desc_info->rssi <= 0x1 || (desc_info->rssi >> 2) > MAX_RSSI) in rtw8922a_phy_rpt_to_rssi()
2678 rx_status->signal = (desc_info->rssi >> 2) - MAX_RSSI; in rtw8922a_phy_rpt_to_rssi()