Lines Matching +full:int +full:- +full:map +full:- +full:mask

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2019-2022 Realtek Corporation
21 RTW8852C_FW_BASENAME "-" __stringify(RTW8852C_FW_FORMAT_MAX) ".bin"
211 static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev) in rtw8852c_pwr_on_func()
214 int ret; in rtw8852c_pwr_on_func()
332 static int rtw8852c_pwr_off_func(struct rtw89_dev *rtwdev) in rtw8852c_pwr_off_func()
335 int ret; in rtw8852c_pwr_off_func()
399 struct rtw8852c_efuse *map) in rtw8852c_e_efuse_parsing() argument
401 ether_addr_copy(efuse->addr, map->e.mac_addr); in rtw8852c_e_efuse_parsing()
402 efuse->rfe_type = map->rfe_type; in rtw8852c_e_efuse_parsing()
403 efuse->xtal_cap = map->xtal_k; in rtw8852c_e_efuse_parsing()
407 struct rtw8852c_efuse *map) in rtw8852c_efuse_parsing_tssi() argument
409 struct rtw89_tssi_info *tssi = &rtwdev->tssi; in rtw8852c_efuse_parsing_tssi()
410 struct rtw8852c_tssi_offset *ofst[] = {&map->path_a_tssi, &map->path_b_tssi}; in rtw8852c_efuse_parsing_tssi()
411 u8 *bw40_1s_tssi_6g_ofst[] = {map->bw40_1s_tssi_6g_a, map->bw40_1s_tssi_6g_b}; in rtw8852c_efuse_parsing_tssi()
414 tssi->thermal[RF_PATH_A] = map->path_a_therm; in rtw8852c_efuse_parsing_tssi()
415 tssi->thermal[RF_PATH_B] = map->path_b_therm; in rtw8852c_efuse_parsing_tssi()
418 memcpy(tssi->tssi_cck[i], ofst[i]->cck_tssi, in rtw8852c_efuse_parsing_tssi()
419 sizeof(ofst[i]->cck_tssi)); in rtw8852c_efuse_parsing_tssi()
424 i, j, tssi->tssi_cck[i][j]); in rtw8852c_efuse_parsing_tssi()
426 memcpy(tssi->tssi_mcs[i], ofst[i]->bw40_tssi, in rtw8852c_efuse_parsing_tssi()
427 sizeof(ofst[i]->bw40_tssi)); in rtw8852c_efuse_parsing_tssi()
428 memcpy(tssi->tssi_mcs[i] + TSSI_MCS_2G_CH_GROUP_NUM, in rtw8852c_efuse_parsing_tssi()
429 ofst[i]->bw40_1s_tssi_5g, sizeof(ofst[i]->bw40_1s_tssi_5g)); in rtw8852c_efuse_parsing_tssi()
430 memcpy(tssi->tssi_6g_mcs[i], bw40_1s_tssi_6g_ofst[i], in rtw8852c_efuse_parsing_tssi()
431 sizeof(tssi->tssi_6g_mcs[i])); in rtw8852c_efuse_parsing_tssi()
436 i, j, tssi->tssi_mcs[i][j]); in rtw8852c_efuse_parsing_tssi()
451 struct rtw8852c_efuse *map) in rtw8852c_efuse_parsing_gain_offset() argument
453 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8852c_efuse_parsing_gain_offset()
456 valid |= _decode_efuse_gain(map->rx_gain_2g_cck, in rtw8852c_efuse_parsing_gain_offset()
457 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_2G_CCK], in rtw8852c_efuse_parsing_gain_offset()
458 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_2G_CCK]); in rtw8852c_efuse_parsing_gain_offset()
459 valid |= _decode_efuse_gain(map->rx_gain_2g_ofdm, in rtw8852c_efuse_parsing_gain_offset()
460 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_2G_OFDM], in rtw8852c_efuse_parsing_gain_offset()
461 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_2G_OFDM]); in rtw8852c_efuse_parsing_gain_offset()
462 valid |= _decode_efuse_gain(map->rx_gain_5g_low, in rtw8852c_efuse_parsing_gain_offset()
463 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_LOW], in rtw8852c_efuse_parsing_gain_offset()
464 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_LOW]); in rtw8852c_efuse_parsing_gain_offset()
465 valid |= _decode_efuse_gain(map->rx_gain_5g_mid, in rtw8852c_efuse_parsing_gain_offset()
466 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_MID], in rtw8852c_efuse_parsing_gain_offset()
467 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_MID]); in rtw8852c_efuse_parsing_gain_offset()
468 valid |= _decode_efuse_gain(map->rx_gain_5g_high, in rtw8852c_efuse_parsing_gain_offset()
469 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_5G_HIGH], in rtw8852c_efuse_parsing_gain_offset()
470 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_5G_HIGH]); in rtw8852c_efuse_parsing_gain_offset()
471 valid |= _decode_efuse_gain(map->rx_gain_6g_l0, in rtw8852c_efuse_parsing_gain_offset()
472 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_L0], in rtw8852c_efuse_parsing_gain_offset()
473 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_L0]); in rtw8852c_efuse_parsing_gain_offset()
474 valid |= _decode_efuse_gain(map->rx_gain_6g_l1, in rtw8852c_efuse_parsing_gain_offset()
475 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_L1], in rtw8852c_efuse_parsing_gain_offset()
476 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_L1]); in rtw8852c_efuse_parsing_gain_offset()
477 valid |= _decode_efuse_gain(map->rx_gain_6g_m0, in rtw8852c_efuse_parsing_gain_offset()
478 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_M0], in rtw8852c_efuse_parsing_gain_offset()
479 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_M0]); in rtw8852c_efuse_parsing_gain_offset()
480 valid |= _decode_efuse_gain(map->rx_gain_6g_m1, in rtw8852c_efuse_parsing_gain_offset()
481 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_M1], in rtw8852c_efuse_parsing_gain_offset()
482 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_M1]); in rtw8852c_efuse_parsing_gain_offset()
483 valid |= _decode_efuse_gain(map->rx_gain_6g_h0, in rtw8852c_efuse_parsing_gain_offset()
484 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_H0], in rtw8852c_efuse_parsing_gain_offset()
485 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_H0]); in rtw8852c_efuse_parsing_gain_offset()
486 valid |= _decode_efuse_gain(map->rx_gain_6g_h1, in rtw8852c_efuse_parsing_gain_offset()
487 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_H1], in rtw8852c_efuse_parsing_gain_offset()
488 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_H1]); in rtw8852c_efuse_parsing_gain_offset()
489 valid |= _decode_efuse_gain(map->rx_gain_6g_uh0, in rtw8852c_efuse_parsing_gain_offset()
490 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_UH0], in rtw8852c_efuse_parsing_gain_offset()
491 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_UH0]); in rtw8852c_efuse_parsing_gain_offset()
492 valid |= _decode_efuse_gain(map->rx_gain_6g_uh1, in rtw8852c_efuse_parsing_gain_offset()
493 &gain->offset[RF_PATH_A][RTW89_GAIN_OFFSET_6G_UH1], in rtw8852c_efuse_parsing_gain_offset()
494 &gain->offset[RF_PATH_B][RTW89_GAIN_OFFSET_6G_UH1]); in rtw8852c_efuse_parsing_gain_offset()
496 gain->offset_valid = valid; in rtw8852c_efuse_parsing_gain_offset()
499 static int rtw8852c_read_efuse(struct rtw89_dev *rtwdev, u8 *log_map, in rtw8852c_read_efuse()
502 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw8852c_read_efuse()
503 struct rtw8852c_efuse *map; in rtw8852c_read_efuse() local
505 map = (struct rtw8852c_efuse *)log_map; in rtw8852c_read_efuse()
507 efuse->country_code[0] = map->country_code[0]; in rtw8852c_read_efuse()
508 efuse->country_code[1] = map->country_code[1]; in rtw8852c_read_efuse()
509 rtw8852c_efuse_parsing_tssi(rtwdev, map); in rtw8852c_read_efuse()
510 rtw8852c_efuse_parsing_gain_offset(rtwdev, map); in rtw8852c_read_efuse()
512 switch (rtwdev->hci.type) { in rtw8852c_read_efuse()
514 rtw8852c_e_efuse_parsing(efuse, map); in rtw8852c_read_efuse()
517 return -ENOTSUPP; in rtw8852c_read_efuse()
520 rtw89_info(rtwdev, "chip rfe_type is %d\n", efuse->rfe_type); in rtw8852c_read_efuse()
527 struct rtw89_tssi_info *tssi = &rtwdev->tssi; in rtw8852c_phycap_parsing_tssi()
530 u32 addr = rtwdev->chip->phycap_addr; in rtw8852c_phycap_parsing_tssi()
538 ofst = tssi_trim_addr[i] - addr - j; in rtw8852c_phycap_parsing_tssi()
539 tssi->tssi_trim[i][j] = phycap_map[ofst]; in rtw8852c_phycap_parsing_tssi()
547 ofst = tssi_trim_addr_6g[i] - addr - j; in rtw8852c_phycap_parsing_tssi()
548 tssi->tssi_trim_6g[i][j] = phycap_map[ofst]; in rtw8852c_phycap_parsing_tssi()
556 memset(tssi->tssi_trim, 0, sizeof(tssi->tssi_trim)); in rtw8852c_phycap_parsing_tssi()
557 memset(tssi->tssi_trim_6g, 0, sizeof(tssi->tssi_trim_6g)); in rtw8852c_phycap_parsing_tssi()
566 i, j, tssi->tssi_trim[i][j], in rtw8852c_phycap_parsing_tssi()
567 tssi_trim_addr[i] - j); in rtw8852c_phycap_parsing_tssi()
573 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8852c_phycap_parsing_thermal_trim()
575 u32 addr = rtwdev->chip->phycap_addr; in rtw8852c_phycap_parsing_thermal_trim()
579 info->thermal_trim[i] = phycap_map[thm_trim_addr[i] - addr]; in rtw8852c_phycap_parsing_thermal_trim()
583 i, info->thermal_trim[i]); in rtw8852c_phycap_parsing_thermal_trim()
585 if (info->thermal_trim[i] != 0xff) in rtw8852c_phycap_parsing_thermal_trim()
586 info->pg_thermal_trim = true; in rtw8852c_phycap_parsing_thermal_trim()
597 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8852c_thermal_trim()
600 if (!info->pg_thermal_trim) { in rtw8852c_thermal_trim()
608 val = __thm_setting(info->thermal_trim[i]); in rtw8852c_thermal_trim()
621 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8852c_phycap_parsing_pa_bias_trim()
623 u32 addr = rtwdev->chip->phycap_addr; in rtw8852c_phycap_parsing_pa_bias_trim()
627 info->pa_bias_trim[i] = phycap_map[pabias_trim_addr[i] - addr]; in rtw8852c_phycap_parsing_pa_bias_trim()
631 i, info->pa_bias_trim[i]); in rtw8852c_phycap_parsing_pa_bias_trim()
633 if (info->pa_bias_trim[i] != 0xff) in rtw8852c_phycap_parsing_pa_bias_trim()
634 info->pg_pa_bias_trim = true; in rtw8852c_phycap_parsing_pa_bias_trim()
640 struct rtw89_power_trim_info *info = &rtwdev->pwr_trim; in rtw8852c_pa_bias_trim()
644 if (!info->pg_pa_bias_trim) { in rtw8852c_pa_bias_trim()
652 pabias_2g = FIELD_GET(GENMASK(3, 0), info->pa_bias_trim[i]); in rtw8852c_pa_bias_trim()
653 pabias_5g = FIELD_GET(GENMASK(7, 4), info->pa_bias_trim[i]); in rtw8852c_pa_bias_trim()
664 static int rtw8852c_read_phycap(struct rtw89_dev *rtwdev, u8 *phycap_map) in rtw8852c_read_phycap()
690 switch (chan->band_width) { in rtw8852c_set_channel_mac()
707 switch (chan->band_width) { in rtw8852c_set_channel_mac()
732 switch (chan->band_type) { in rtw8852c_set_channel_mac()
741 rtw89_warn(rtwdev, "Invalid band_type:%d\n", chan->band_type); in rtw8852c_set_channel_mac()
759 static int rtw8852c_ctrl_sco_cck(struct rtw89_dev *rtwdev, u8 central_ch, in rtw8852c_ctrl_sco_cck()
765 ch_element = central_ch - 1; in rtw8852c_ctrl_sco_cck()
768 ch_element = central_ch - 1 + 2; in rtw8852c_ctrl_sco_cck()
770 ch_element = central_ch - 1 - 2; in rtw8852c_ctrl_sco_cck()
773 return -EINVAL; in rtw8852c_ctrl_sco_cck()
842 u32 mask; member
851 .mask = 0xff},
853 .mask = 0xff00},
855 .mask = 0xff0000},
857 .mask = 0xff000000},
859 .mask = 0xff},
861 .mask = 0xff00},
863 .mask = 0xff0000},
873 const struct rtw89_phy_bb_gain_info *gain = &rtwdev->bb_gain.ax; in rtw8852c_set_gain_error()
877 u32 mask; in rtw8852c_set_gain_error() local
878 int i; in rtw8852c_set_gain_error()
886 mask = bb_gain_lna[i].gain_mask; in rtw8852c_set_gain_error()
887 val = gain->lna_gain[gain_band][path][i]; in rtw8852c_set_gain_error()
888 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
892 mask = bb_gain_bypass_lna[i].gain_mask_g; in rtw8852c_set_gain_error()
895 mask = bb_gain_bypass_lna[i].gain_mask_a; in rtw8852c_set_gain_error()
898 val = gain->lna_gain_bypass[gain_band][path][i]; in rtw8852c_set_gain_error()
899 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
903 mask = bb_gain_op1db_a.reg[i].mask; in rtw8852c_set_gain_error()
904 val = gain->lna_op1db[gain_band][path][i]; in rtw8852c_set_gain_error()
905 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
908 mask = bb_gain_op1db_a.reg[i].mask; in rtw8852c_set_gain_error()
909 val = gain->tia_lna_op1db[gain_band][path][i]; in rtw8852c_set_gain_error()
910 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
916 mask = bb_gain_op1db_a.mask_tia0_lna6; in rtw8852c_set_gain_error()
917 val = gain->tia_lna_op1db[gain_band][path][7]; in rtw8852c_set_gain_error()
918 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
927 mask = bb_gain_tia[i].gain_mask; in rtw8852c_set_gain_error()
928 val = gain->tia_gain[gain_band][path][i]; in rtw8852c_set_gain_error()
929 rtw89_phy_write32_mask(rtwdev, reg, mask, val); in rtw8852c_set_gain_error()
942 struct rtw89_phy_efuse_gain *efuse_gain = &rtwdev->efuse_gain; in rtw8852c_set_gain_offset()
947 if (!efuse_gain->offset_valid) in rtw8852c_set_gain_offset()
950 if (rtwdev->dbcc_en && path == RF_PATH_B) in rtw8852c_set_gain_offset()
953 if (chan->band_type == RTW89_BAND_2G) { in rtw8852c_set_gain_offset()
954 offset_q0 = efuse_gain->offset[path][RTW89_GAIN_OFFSET_2G_CCK]; in rtw8852c_set_gain_offset()
955 offset_base_q4 = efuse_gain->offset_base[phy_idx]; in rtw8852c_set_gain_offset()
957 tmp = clamp_t(s32, (-offset_q0 << 3) + (offset_base_q4 >> 1), in rtw8852c_set_gain_offset()
962 gain_band = rtw89_subband_to_gain_offset_band_of_ofdm(chan->subband_type); in rtw8852c_set_gain_offset()
964 offset_q0 = -efuse_gain->offset[path][gain_band]; in rtw8852c_set_gain_offset()
965 offset_base_q4 = efuse_gain->offset_base[phy_idx]; in rtw8852c_set_gain_offset()
968 tmp = clamp_t(s32, -tmp, S8_MIN, S8_MAX); in rtw8852c_set_gain_offset()
981 u16 central_freq = chan->freq; in rtw8852c_ctrl_ch()
982 u8 central_ch = chan->channel; in rtw8852c_ctrl_ch()
983 u8 band = chan->band_type; in rtw8852c_ctrl_ch()
984 u8 subband = chan->subband_type; in rtw8852c_ctrl_ch()
1007 if (!rtwdev->dbcc_en) { in rtw8852c_ctrl_ch()
1095 chan_idx = rtw89_encode_chan_idx(rtwdev, chan->primary_channel, band); in rtw8852c_ctrl_ch()
1236 if (!rtwdev->dbcc_en) in rtw8852c_ctrl_bw()
1248 u8 center_chan = chan->channel; in rtw8852c_spur_freq()
1249 u8 bw = chan->band_width; in rtw8852c_spur_freq()
1251 switch (chan->band_type) { in rtw8852c_spur_freq()
1297 freq_diff = (spur_freq - chan->freq) * 1000000; in rtw8852c_set_csi_tone_idx()
1337 rtw89_phy_write32_mask(rtwdev, nbi->notch1_en.addr, nbi->notch1_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1338 rtw89_phy_write32_mask(rtwdev, nbi->notch1_en.addr, nbi->notch1_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1342 fc = chan->freq; in rtw8852c_set_nbi_tone_idx()
1343 if (chan->band_width == RTW89_CHANNEL_WIDTH_160) { in rtw8852c_set_nbi_tone_idx()
1344 fc = (spur_freq > fc) ? fc + 40 : fc - 40; in rtw8852c_set_nbi_tone_idx()
1346 chan->channel < chan->primary_channel) || in rtw8852c_set_nbi_tone_idx()
1348 chan->channel > chan->primary_channel)) in rtw8852c_set_nbi_tone_idx()
1352 freq_diff = (spur_freq - fc) * 1000000; in rtw8852c_set_nbi_tone_idx()
1355 if (chan->band_width == RTW89_CHANNEL_WIDTH_20) { in rtw8852c_set_nbi_tone_idx()
1358 u16 tone_para = (chan->band_width == RTW89_CHANNEL_WIDTH_40) ? in rtw8852c_set_nbi_tone_idx()
1365 if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && notch2_chk) { in rtw8852c_set_nbi_tone_idx()
1366 rtw89_phy_write32_mask(rtwdev, nbi->notch2_idx.addr, in rtw8852c_set_nbi_tone_idx()
1367 nbi->notch2_idx.mask, nbi_tone_idx); in rtw8852c_set_nbi_tone_idx()
1368 rtw89_phy_write32_mask(rtwdev, nbi->notch2_frac_idx.addr, in rtw8852c_set_nbi_tone_idx()
1369 nbi->notch2_frac_idx.mask, nbi_frac_tone_idx); in rtw8852c_set_nbi_tone_idx()
1370 rtw89_phy_write32_mask(rtwdev, nbi->notch2_en.addr, nbi->notch2_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1371 rtw89_phy_write32_mask(rtwdev, nbi->notch2_en.addr, nbi->notch2_en.mask, 1); in rtw8852c_set_nbi_tone_idx()
1372 rtw89_phy_write32_mask(rtwdev, nbi->notch1_en.addr, nbi->notch1_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1374 rtw89_phy_write32_mask(rtwdev, nbi->notch1_idx.addr, in rtw8852c_set_nbi_tone_idx()
1375 nbi->notch1_idx.mask, nbi_tone_idx); in rtw8852c_set_nbi_tone_idx()
1376 rtw89_phy_write32_mask(rtwdev, nbi->notch1_frac_idx.addr, in rtw8852c_set_nbi_tone_idx()
1377 nbi->notch1_frac_idx.mask, nbi_frac_tone_idx); in rtw8852c_set_nbi_tone_idx()
1378 rtw89_phy_write32_mask(rtwdev, nbi->notch1_en.addr, nbi->notch1_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1379 rtw89_phy_write32_mask(rtwdev, nbi->notch1_en.addr, nbi->notch1_en.mask, 1); in rtw8852c_set_nbi_tone_idx()
1380 rtw89_phy_write32_mask(rtwdev, nbi->notch2_en.addr, nbi->notch2_en.mask, 0); in rtw8852c_set_nbi_tone_idx()
1414 if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && in rtw8852c_spur_elimination()
1418 if (!rtwdev->dbcc_en) in rtw8852c_spur_elimination()
1420 } else if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && in rtw8852c_spur_elimination()
1424 if (!rtwdev->dbcc_en) in rtw8852c_spur_elimination()
1428 if (!rtwdev->dbcc_en) in rtw8852c_spur_elimination()
1433 if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && in rtw8852c_spur_elimination()
1437 } else if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && in rtw8852c_spur_elimination()
1456 u8 pri_ch = chan->pri_ch_idx; in rtw8852c_5m_mask()
1460 switch (chan->band_width) { in rtw8852c_5m_mask()
1596 u32 mask, mask_ofst; in rtw8852c_bb_gpio_rfm() local
1610 mask = 0xff << mask_ofst; in rtw8852c_bb_gpio_rfm()
1612 rtw89_phy_write32_mask(rtwdev, cr, mask, val); in rtw8852c_bb_gpio_rfm()
1674 struct rtw89_phy_efuse_gain *gain = &rtwdev->efuse_gain; in rtw8852c_bb_sethw()
1685 gain->offset_base[RTW89_PHY_0] = in rtw8852c_bb_sethw()
1687 gain->offset_base[RTW89_PHY_1] = in rtw8852c_bb_sethw()
1697 struct rtw89_hal *hal = &rtwdev->hal; in rtw8852c_set_channel_bb()
1698 bool cck_en = chan->band_type == RTW89_BAND_2G; in rtw8852c_set_channel_bb()
1699 u8 pri_ch_idx = chan->pri_ch_idx; in rtw8852c_set_channel_bb()
1700 u32 mask, reg; in rtw8852c_set_channel_bb() local
1703 if (chan->band_type == RTW89_BAND_2G) in rtw8852c_set_channel_bb()
1704 rtw8852c_ctrl_sco_cck(rtwdev, chan->channel, in rtw8852c_set_channel_bb()
1705 chan->primary_channel, in rtw8852c_set_channel_bb()
1706 chan->band_width); in rtw8852c_set_channel_bb()
1709 rtw8852c_ctrl_bw(rtwdev, pri_ch_idx, chan->band_width, phy_idx); in rtw8852c_set_channel_bb()
1723 rtw8852c_ctrl_btg_bt_rx(rtwdev, chan->band_type == RTW89_BAND_2G, in rtw8852c_set_channel_bb()
1727 if (chan->band_width == RTW89_CHANNEL_WIDTH_160 && in rtw8852c_set_channel_bb()
1728 rtwdev->hal.cv != CHIP_CAV) { in rtw8852c_set_channel_bb()
1732 if (chan->primary_channel > chan->channel) { in rtw8852c_set_channel_bb()
1747 if (chan->band_type == RTW89_BAND_6G && in rtw8852c_set_channel_bb()
1748 chan->band_width == RTW89_CHANNEL_WIDTH_160) in rtw8852c_set_channel_bb()
1755 if (!rtwdev->dbcc_en) { in rtw8852c_set_channel_bb()
1756 mask = B_P0_TXPW_RSTB_TSSI | B_P0_TXPW_RSTB_MANON; in rtw8852c_set_channel_bb()
1757 rtw89_phy_write32_mask(rtwdev, R_P0_TXPW_RSTB, mask, 0x1); in rtw8852c_set_channel_bb()
1758 rtw89_phy_write32_mask(rtwdev, R_P0_TXPW_RSTB, mask, 0x3); in rtw8852c_set_channel_bb()
1759 mask = B_P1_TXPW_RSTB_TSSI | B_P1_TXPW_RSTB_MANON; in rtw8852c_set_channel_bb()
1760 rtw89_phy_write32_mask(rtwdev, R_P1_TXPW_RSTB, mask, 0x1); in rtw8852c_set_channel_bb()
1761 rtw89_phy_write32_mask(rtwdev, R_P1_TXPW_RSTB, mask, 0x3); in rtw8852c_set_channel_bb()
1764 mask = B_P0_TXPW_RSTB_TSSI | B_P0_TXPW_RSTB_MANON; in rtw8852c_set_channel_bb()
1765 rtw89_phy_write32_mask(rtwdev, R_P0_TXPW_RSTB, mask, 0x1); in rtw8852c_set_channel_bb()
1766 rtw89_phy_write32_mask(rtwdev, R_P0_TXPW_RSTB, mask, 0x3); in rtw8852c_set_channel_bb()
1768 mask = B_P1_TXPW_RSTB_TSSI | B_P1_TXPW_RSTB_MANON; in rtw8852c_set_channel_bb()
1769 rtw89_phy_write32_mask(rtwdev, R_P1_TXPW_RSTB, mask, 0x1); in rtw8852c_set_channel_bb()
1770 rtw89_phy_write32_mask(rtwdev, R_P1_TXPW_RSTB, mask, 0x3); in rtw8852c_set_channel_bb()
1774 if (chan->band_type == RTW89_BAND_6G) in rtw8852c_set_channel_bb()
1779 if (hal->antenna_tx) in rtw8852c_set_channel_bb()
1780 ntx_path = hal->antenna_tx; in rtw8852c_set_channel_bb()
1782 ntx_path = chan->band_type == RTW89_BAND_6G ? RF_B : RF_AB; in rtw8852c_set_channel_bb()
1824 rtw89_chip_stop_sch_tx(rtwdev, mac_idx, &p->tx_en, in rtw8852c_set_channel_help()
1831 rtw8852c_bb_reset_en(rtwdev, chan->band_type, phy_idx, false); in rtw8852c_set_channel_help()
1837 rtw8852c_bb_reset_en(rtwdev, chan->band_type, phy_idx, true); in rtw8852c_set_channel_help()
1838 rtw89_chip_resume_sch_tx(rtwdev, mac_idx, p->tx_en); in rtw8852c_set_channel_help()
1844 struct rtw89_rfk_mcc_info *rfk_mcc = &rtwdev->rfk_mcc; in rtw8852c_rfk_init()
1846 rtwdev->is_tssi_mode[RF_PATH_A] = false; in rtw8852c_rfk_init()
1847 rtwdev->is_tssi_mode[RF_PATH_B] = false; in rtw8852c_rfk_init()
1860 enum rtw89_chanctx_idx chanctx_idx = rtwvif_link->chanctx_idx; in rtw8852c_rfk_channel()
1861 enum rtw89_phy_idx phy_idx = rtwvif_link->phy_idx; in rtw8852c_rfk_channel()
1888 rtw8852c_wifi_scan_notify(rtwdev, start, rtwvif_link->phy_idx); in rtw8852c_rfk_scan()
1910 pwr_s10_3 = (ref << 1) + (s16)(base_cw_0db << 3) - pwr_ofst_decrease; in rtw8852c_bb_cal_txpwr_ref()
1916 tssi_ofst_cw = (u32)((s16)tssi_16dbm_cw + (ref << 1) - (16 << 3)) - in rtw8852c_bb_cal_txpwr_ref()
1935 if (pw_ofst < -32 || pw_ofst > 31) { in rtw8852c_set_txpwr_ul_tb_offset()
1940 pw_ofst_2tx = max(pw_ofst - 3, -32); in rtw8852c_set_txpwr_ul_tb_offset()
1965 const u32 mask = 0x7FFFFFF; in rtw8852c_set_txpwr_ref() local
1984 rtw89_phy_write32_idx(rtwdev, addr[i] + ofst_ofdm, mask, val, phy_idx); in rtw8852c_set_txpwr_ref()
1990 rtw89_phy_write32_idx(rtwdev, addr[i] + ofst_cck, mask, val, phy_idx); in rtw8852c_set_txpwr_ref()
2025 u8 ch = chan->channel; in rtw8852c_bb_set_tx_shape_dfir()
2027 int i; in rtw8852c_bb_set_tx_shape_dfir()
2059 const struct rtw89_rfe_parms *rfe_parms = rtwdev->rfe_parms; in rtw8852c_set_tx_shape()
2060 u8 band = chan->band_type; in rtw8852c_set_tx_shape()
2062 u8 tx_shape_cck = (*rfe_parms->tx_shape.lmt)[band][RTW89_RS_CCK][regd]; in rtw8852c_set_tx_shape()
2063 u8 tx_shape_ofdm = (*rfe_parms->tx_shape.lmt)[band][RTW89_RS_OFDM][regd]; in rtw8852c_set_tx_shape()
2093 .center_freq = chan->freq, in rtw8852c_set_txpwr_sar_diff()
2144 int i; in rtw8852c_init_tssi_ctrl()
2158 static int
2161 int ret; in rtw8852c_init_txpwr_unit()
2186 u8 band = chan->band_type; in rtw8852c_bb_cfg_rx_path()
2190 if (rtwdev->dbcc_en) { in rtw8852c_bb_cfg_rx_path()
2423 struct rtw89_hal *hal = &rtwdev->hal; in rtw8852c_bb_cfg_txrx_path()
2427 if (hal->rx_nss == 1) { in rtw8852c_bb_cfg_txrx_path()
2453 const struct rtw89_btc_ver *ver = rtwdev->btc.ver; in rtw8852c_btc_set_rfe()
2454 union rtw89_btc_module_info *md = &rtwdev->btc.mdinfo; in rtw8852c_btc_set_rfe()
2456 if (ver->fcxinit == 7) { in rtw8852c_btc_set_rfe()
2457 md->md_v7.rfe_type = rtwdev->efuse.rfe_type; in rtw8852c_btc_set_rfe()
2458 md->md_v7.kt_ver = rtwdev->hal.cv; in rtw8852c_btc_set_rfe()
2459 md->md_v7.bt_solo = 0; in rtw8852c_btc_set_rfe()
2460 md->md_v7.switch_type = BTC_SWITCH_INTERNAL; in rtw8852c_btc_set_rfe()
2462 if (md->md_v7.rfe_type > 0) in rtw8852c_btc_set_rfe()
2463 md->md_v7.ant.num = (md->md_v7.rfe_type % 2 ? 2 : 3); in rtw8852c_btc_set_rfe()
2465 md->md_v7.ant.num = 2; in rtw8852c_btc_set_rfe()
2467 md->md_v7.ant.diversity = 0; in rtw8852c_btc_set_rfe()
2468 md->md_v7.ant.isolation = 10; in rtw8852c_btc_set_rfe()
2470 if (md->md_v7.ant.num == 3) { in rtw8852c_btc_set_rfe()
2471 md->md_v7.ant.type = BTC_ANT_DEDICATED; in rtw8852c_btc_set_rfe()
2472 md->md_v7.bt_pos = BTC_BT_ALONE; in rtw8852c_btc_set_rfe()
2474 md->md_v7.ant.type = BTC_ANT_SHARED; in rtw8852c_btc_set_rfe()
2475 md->md_v7.bt_pos = BTC_BT_BTG; in rtw8852c_btc_set_rfe()
2477 rtwdev->btc.btg_pos = md->md_v7.ant.btg_pos; in rtw8852c_btc_set_rfe()
2478 rtwdev->btc.ant_type = md->md_v7.ant.type; in rtw8852c_btc_set_rfe()
2480 md->md.rfe_type = rtwdev->efuse.rfe_type; in rtw8852c_btc_set_rfe()
2481 md->md.cv = rtwdev->hal.cv; in rtw8852c_btc_set_rfe()
2482 md->md.bt_solo = 0; in rtw8852c_btc_set_rfe()
2483 md->md.switch_type = BTC_SWITCH_INTERNAL; in rtw8852c_btc_set_rfe()
2485 if (md->md.rfe_type > 0) in rtw8852c_btc_set_rfe()
2486 md->md.ant.num = (md->md.rfe_type % 2 ? 2 : 3); in rtw8852c_btc_set_rfe()
2488 md->md.ant.num = 2; in rtw8852c_btc_set_rfe()
2490 md->md.ant.diversity = 0; in rtw8852c_btc_set_rfe()
2491 md->md.ant.isolation = 10; in rtw8852c_btc_set_rfe()
2493 if (md->md.ant.num == 3) { in rtw8852c_btc_set_rfe()
2494 md->md.ant.type = BTC_ANT_DEDICATED; in rtw8852c_btc_set_rfe()
2495 md->md.bt_pos = BTC_BT_ALONE; in rtw8852c_btc_set_rfe()
2497 md->md.ant.type = BTC_ANT_SHARED; in rtw8852c_btc_set_rfe()
2498 md->md.bt_pos = BTC_BT_BTG; in rtw8852c_btc_set_rfe()
2500 rtwdev->btc.btg_pos = md->md.ant.btg_pos; in rtw8852c_btc_set_rfe()
2501 rtwdev->btc.ant_type = md->md.ant.type; in rtw8852c_btc_set_rfe()
2563 struct rtw89_btc *btc = &rtwdev->btc; in rtw8852c_btc_init_cfg()
2564 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw8852c_btc_init_cfg()
2573 /* set WL Tx response = Hi-Pri */ in rtw8852c_btc_init_cfg()
2574 chip->ops->btc_set_wl_pri(rtwdev, BTC_PRI_MASK_TX_RESP, true); in rtw8852c_btc_init_cfg()
2575 chip->ops->btc_set_wl_pri(rtwdev, BTC_PRI_MASK_BEACON, true); in rtw8852c_btc_init_cfg()
2581 /* set WL Tx thru in TRX mask table if GNT_WL = 0 && BT_S1 = ss group */ in rtw8852c_btc_init_cfg()
2582 if (btc->ant_type == BTC_ANT_SHARED) { in rtw8852c_btc_init_cfg()
2587 /* set path-A(S0) Tx/Rx no-mask if GNT_WL=0 && BT_S1=tx group */ in rtw8852c_btc_init_cfg()
2590 } else { /* set WL Tx stb if GNT_WL = 0 && BT_S1 = ss group for 3-ant */ in rtw8852c_btc_init_cfg()
2604 btc->cx.wl.status.map.init_ok = true; in rtw8852c_btc_init_cfg()
2608 void rtw8852c_btc_set_wl_pri(struct rtw89_dev *rtwdev, u8 map, bool state) in rtw8852c_btc_set_wl_pri() argument
2613 switch (map) { in rtw8852c_btc_set_wl_pri()
2703 return clamp_t(s8, val + 6, -100, 0) + 100; in rtw8852c_btc_get_bt_rssi()
2707 {255, 0, 0, 7}, /* 0 -> original */
2708 {255, 2, 0, 7}, /* 1 -> for BT-connected ACI issue && BTG co-rx */
2709 {255, 0, 0, 7}, /* 2 ->reserved for shared-antenna */
2710 {255, 0, 0, 7}, /* 3- >reserved for shared-antenna */
2711 {255, 0, 0, 7}, /* 4 ->reserved for shared-antenna */
2712 {255, 1, 0, 7}, /* the below id is for non-shared-antenna free-run */
2719 {255, 0, 0, 7}, /* 0 -> original */
2720 {255, 2, 0, 7}, /* 1 -> reserved for shared-antenna */
2721 {255, 0, 0, 7}, /* 2 ->reserved for shared-antenna */
2722 {255, 0, 0, 7}, /* 3- >reserved for shared-antenna */
2723 {255, 0, 0, 7}, /* 4 ->reserved for shared-antenna */
2724 {255, 1, 0, 7}, /* the below id is for non-shared-antenna free-run */
2764 /* set WL standby = Rx for GNT_BT_Tx = 1->0 settle issue */ in rtw8852c_btc_wl_s1_standby()
2779 * To improve BT ACI in co-rx in rtw8852c_set_wl_lna2()
2812 struct rtw89_btc *btc = &rtwdev->btc; in rtw8852c_btc_set_wl_rx_gain()
2818 btc->dm.wl_lna2 = 0; in rtw8852c_btc_set_wl_rx_gain()
2820 case 1: /* for FDD free-run */ in rtw8852c_btc_set_wl_rx_gain()
2822 btc->dm.wl_lna2 = 0; in rtw8852c_btc_set_wl_rx_gain()
2824 case 2: /* for BTG Co-Rx*/ in rtw8852c_btc_set_wl_rx_gain()
2826 btc->dm.wl_lna2 = 1; in rtw8852c_btc_set_wl_rx_gain()
2830 rtw8852c_set_wl_lna2(rtwdev, btc->dm.wl_lna2); in rtw8852c_btc_set_wl_rx_gain()
2837 u8 chan_idx = phy_ppdu->chan_idx; in rtw8852c_fill_freq_with_ppdu()
2845 status->freq = ieee80211_channel_to_frequency(ch, band); in rtw8852c_fill_freq_with_ppdu()
2846 status->band = band; in rtw8852c_fill_freq_with_ppdu()
2854 u8 *rx_power = phy_ppdu->rssi; in rtw8852c_query_ppdu()
2856 if (!status->signal) in rtw8852c_query_ppdu()
2857 status->signal = RTW89_RSSI_RAW_TO_DBM(max(rx_power[RF_PATH_A], in rtw8852c_query_ppdu()
2860 for (path = 0; path < rtwdev->chip->rf_path_num; path++) { in rtw8852c_query_ppdu()
2861 status->chains |= BIT(path); in rtw8852c_query_ppdu()
2862 status->chain_signal[path] = RTW89_RSSI_RAW_TO_DBM(rx_power[path]); in rtw8852c_query_ppdu()
2864 if (phy_ppdu->valid) in rtw8852c_query_ppdu()
2868 static int rtw8852c_mac_enable_bb_rf(struct rtw89_dev *rtwdev) in rtw8852c_mac_enable_bb_rf()
2870 int ret; in rtw8852c_mac_enable_bb_rf()
2905 static int rtw8852c_mac_disable_bb_rf(struct rtw89_dev *rtwdev) in rtw8852c_mac_disable_bb_rf()