Lines Matching full:pi

25 #define READ_RADIO_REG2(pi, radio_type, jspace, core, reg_name)	\  argument
26 read_radio_reg(pi, radio_type##_##jspace##_##reg_name | \
31 #define WRITE_RADIO_REG2(pi, radio_type, jspace, core, reg_name, value) \ argument
32 write_radio_reg(pi, radio_type##_##jspace##_##reg_name | \
37 #define WRITE_RADIO_SYN(pi, radio_type, reg_name, value) \ argument
38 write_radio_reg(pi, radio_type##_##SYN##_##reg_name, value)
40 #define READ_RADIO_REG3(pi, radio_type, jspace, core, reg_name) \ argument
41 read_radio_reg(pi, ((core == PHY_CORE_0) ? \
45 #define WRITE_RADIO_REG3(pi, radio_type, jspace, core, reg_name, value) \ argument
46 write_radio_reg(pi, ((core == PHY_CORE_0) ? \
51 #define READ_RADIO_REG4(pi, radio_type, jspace, core, reg_name) \ argument
52 read_radio_reg(pi, ((core == PHY_CORE_0) ? \
56 #define WRITE_RADIO_REG4(pi, radio_type, jspace, core, reg_name, value) \ argument
57 write_radio_reg(pi, ((core == PHY_CORE_0) ? \
97 #define NPHY_IS_SROM_REINTERPRET NREV_GE(pi->pubpi.phy_rev, 5)
256 #define wlc_phy_get_papd_nphy(pi) \ argument
257 (read_phy_reg((pi), 0x1e7) & \
14113 struct brcms_phy *pi = container_of(pih, struct brcms_phy, pubpi_ro); in wlc_phy_bist_check_phy() local
14116 if (NREV_GE(pi->pubpi.phy_rev, 16)) in wlc_phy_bist_check_phy()
14119 phybist0 = read_phy_reg(pi, 0x0e); in wlc_phy_bist_check_phy()
14120 phybist1 = read_phy_reg(pi, 0x0f); in wlc_phy_bist_check_phy()
14121 phybist2 = read_phy_reg(pi, 0xea); in wlc_phy_bist_check_phy()
14122 phybist3 = read_phy_reg(pi, 0xeb); in wlc_phy_bist_check_phy()
14123 phybist4 = read_phy_reg(pi, 0x156); in wlc_phy_bist_check_phy()
14132 static void wlc_phy_bphy_init_nphy(struct brcms_phy *pi) in wlc_phy_bphy_init_nphy() argument
14139 write_phy_reg(pi, addr, val); in wlc_phy_bphy_init_nphy()
14146 write_phy_reg(pi, NPHY_TO_BPHY_OFF + BPHY_STEP, 0x668); in wlc_phy_bphy_init_nphy()
14150 wlc_phy_table_write_nphy(struct brcms_phy *pi, u32 id, u32 len, u32 offset, in wlc_phy_table_write_nphy() argument
14160 wlc_phy_write_table_nphy(pi, &tbl); in wlc_phy_table_write_nphy()
14164 wlc_phy_table_read_nphy(struct brcms_phy *pi, u32 id, u32 len, u32 offset, in wlc_phy_table_read_nphy() argument
14174 wlc_phy_read_table_nphy(pi, &tbl); in wlc_phy_table_read_nphy()
14178 wlc_phy_static_table_download_nphy(struct brcms_phy *pi) in wlc_phy_static_table_download_nphy() argument
14182 if (NREV_GE(pi->pubpi.phy_rev, 16)) { in wlc_phy_static_table_download_nphy()
14184 wlc_phy_write_table_nphy(pi, in wlc_phy_static_table_download_nphy()
14186 } else if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_static_table_download_nphy()
14188 wlc_phy_write_table_nphy(pi, in wlc_phy_static_table_download_nphy()
14190 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_static_table_download_nphy()
14192 wlc_phy_write_table_nphy(pi, in wlc_phy_static_table_download_nphy()
14196 wlc_phy_write_table_nphy(pi, in wlc_phy_static_table_download_nphy()
14201 static void wlc_phy_tbl_init_nphy(struct brcms_phy *pi) in wlc_phy_tbl_init_nphy() argument
14206 if (pi->phy_init_por) in wlc_phy_tbl_init_nphy()
14207 wlc_phy_static_table_download_nphy(pi); in wlc_phy_tbl_init_nphy()
14209 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_tbl_init_nphy()
14211 antswctrllut = CHSPEC_IS2G(pi->radio_chanspec) ? in wlc_phy_tbl_init_nphy()
14212 pi->srom_fem2g.antswctrllut : pi->srom_fem5g. in wlc_phy_tbl_init_nphy()
14222 if (pi->aa2g == 7) in wlc_phy_tbl_init_nphy()
14224 pi, in wlc_phy_tbl_init_nphy()
14230 pi, in wlc_phy_tbl_init_nphy()
14236 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14239 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14247 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14251 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14255 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14260 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14264 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14268 pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_tbl_init_nphy()
14277 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_tbl_init_nphy()
14282 CHSPEC_IS2G(pi->radio_chanspec) ? in wlc_phy_tbl_init_nphy()
14283 pi->srom_fem2g.antswctrllut : in wlc_phy_tbl_init_nphy()
14284 pi->srom_fem5g.antswctrllut; in wlc_phy_tbl_init_nphy()
14288 pi, in wlc_phy_tbl_init_nphy()
14294 pi, in wlc_phy_tbl_init_nphy()
14300 pi, in wlc_phy_tbl_init_nphy()
14306 pi, in wlc_phy_tbl_init_nphy()
14315 pi, in wlc_phy_tbl_init_nphy()
14321 wlc_phy_write_table_nphy(pi, in wlc_phy_tbl_init_nphy()
14328 wlc_phy_write_txmacreg_nphy(struct brcms_phy *pi, u16 holdoff, u16 delay) in wlc_phy_write_txmacreg_nphy() argument
14330 write_phy_reg(pi, 0x77, holdoff); in wlc_phy_write_txmacreg_nphy()
14331 write_phy_reg(pi, 0xb4, delay); in wlc_phy_write_txmacreg_nphy()
14334 void wlc_phy_nphy_tkip_rifs_war(struct brcms_phy *pi, u8 rifs) in wlc_phy_nphy_tkip_rifs_war() argument
14348 wlc_phy_write_txmacreg_nphy(pi, holdoff, delay); in wlc_phy_nphy_tkip_rifs_war()
14350 if (pi->sh && (pi->sh->_rifs_phy != rifs)) in wlc_phy_nphy_tkip_rifs_war()
14351 pi->sh->_rifs_phy = rifs; in wlc_phy_nphy_tkip_rifs_war()
14354 static void wlc_phy_txpwrctrl_config_nphy(struct brcms_phy *pi) in wlc_phy_txpwrctrl_config_nphy() argument
14357 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_config_nphy()
14358 pi->nphy_txpwrctrl = PHY_TPC_HW_ON; in wlc_phy_txpwrctrl_config_nphy()
14359 pi->phy_5g_pwrgain = true; in wlc_phy_txpwrctrl_config_nphy()
14363 pi->nphy_txpwrctrl = PHY_TPC_HW_OFF; in wlc_phy_txpwrctrl_config_nphy()
14364 pi->phy_5g_pwrgain = false; in wlc_phy_txpwrctrl_config_nphy()
14366 if ((pi->sh->boardflags2 & BFL2_TXPWRCTRL_EN) && in wlc_phy_txpwrctrl_config_nphy()
14367 NREV_GE(pi->pubpi.phy_rev, 2) && (pi->sh->sromrev >= 4)) in wlc_phy_txpwrctrl_config_nphy()
14368 pi->nphy_txpwrctrl = PHY_TPC_HW_ON; in wlc_phy_txpwrctrl_config_nphy()
14369 else if ((pi->sh->sromrev >= 4) in wlc_phy_txpwrctrl_config_nphy()
14370 && (pi->sh->boardflags2 & BFL2_5G_PWRGAIN)) in wlc_phy_txpwrctrl_config_nphy()
14371 pi->phy_5g_pwrgain = true; in wlc_phy_txpwrctrl_config_nphy()
14374 static void wlc_phy_txpwr_srom_read_ppr_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_srom_read_ppr_nphy() argument
14378 struct ssb_sprom *sprom = &pi->d11core->bus->sprom; in wlc_phy_txpwr_srom_read_ppr_nphy()
14380 if (pi->sh->sromrev >= 9) in wlc_phy_txpwr_srom_read_ppr_nphy()
14384 pi->bw402gpo = bw40po & 0xf; in wlc_phy_txpwr_srom_read_ppr_nphy()
14385 pi->bw405gpo = (bw40po & 0xf0) >> 4; in wlc_phy_txpwr_srom_read_ppr_nphy()
14386 pi->bw405glpo = (bw40po & 0xf00) >> 8; in wlc_phy_txpwr_srom_read_ppr_nphy()
14387 pi->bw405ghpo = (bw40po & 0xf000) >> 12; in wlc_phy_txpwr_srom_read_ppr_nphy()
14390 pi->cdd2gpo = cddpo & 0xf; in wlc_phy_txpwr_srom_read_ppr_nphy()
14391 pi->cdd5gpo = (cddpo & 0xf0) >> 4; in wlc_phy_txpwr_srom_read_ppr_nphy()
14392 pi->cdd5glpo = (cddpo & 0xf00) >> 8; in wlc_phy_txpwr_srom_read_ppr_nphy()
14393 pi->cdd5ghpo = (cddpo & 0xf000) >> 12; in wlc_phy_txpwr_srom_read_ppr_nphy()
14396 pi->stbc2gpo = stbcpo & 0xf; in wlc_phy_txpwr_srom_read_ppr_nphy()
14397 pi->stbc5gpo = (stbcpo & 0xf0) >> 4; in wlc_phy_txpwr_srom_read_ppr_nphy()
14398 pi->stbc5glpo = (stbcpo & 0xf00) >> 8; in wlc_phy_txpwr_srom_read_ppr_nphy()
14399 pi->stbc5ghpo = (stbcpo & 0xf000) >> 12; in wlc_phy_txpwr_srom_read_ppr_nphy()
14402 pi->bwdup2gpo = bwduppo & 0xf; in wlc_phy_txpwr_srom_read_ppr_nphy()
14403 pi->bwdup5gpo = (bwduppo & 0xf0) >> 4; in wlc_phy_txpwr_srom_read_ppr_nphy()
14404 pi->bwdup5glpo = (bwduppo & 0xf00) >> 8; in wlc_phy_txpwr_srom_read_ppr_nphy()
14405 pi->bwdup5ghpo = (bwduppo & 0xf000) >> 12; in wlc_phy_txpwr_srom_read_ppr_nphy()
14411 pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_2g = in wlc_phy_txpwr_srom_read_ppr_nphy()
14413 pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_2g = in wlc_phy_txpwr_srom_read_ppr_nphy()
14415 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14417 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14419 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14421 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14423 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_2g_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14425 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_2g_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14427 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_2g = in wlc_phy_txpwr_srom_read_ppr_nphy()
14429 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_2g = in wlc_phy_txpwr_srom_read_ppr_nphy()
14432 pi->cck2gpo = sprom->cck2gpo; in wlc_phy_txpwr_srom_read_ppr_nphy()
14434 pi->ofdm2gpo = sprom->ofdm2gpo; in wlc_phy_txpwr_srom_read_ppr_nphy()
14436 pi->mcs2gpo[0] = sprom->mcs2gpo[0]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14437 pi->mcs2gpo[1] = sprom->mcs2gpo[1]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14438 pi->mcs2gpo[2] = sprom->mcs2gpo[2]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14439 pi->mcs2gpo[3] = sprom->mcs2gpo[3]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14440 pi->mcs2gpo[4] = sprom->mcs2gpo[4]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14441 pi->mcs2gpo[5] = sprom->mcs2gpo[5]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14442 pi->mcs2gpo[6] = sprom->mcs2gpo[6]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14443 pi->mcs2gpo[7] = sprom->mcs2gpo[7]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14447 pi->nphy_pwrctrl_info[PHY_CORE_0].max_pwr_5gm = in wlc_phy_txpwr_srom_read_ppr_nphy()
14449 pi->nphy_pwrctrl_info[PHY_CORE_1].max_pwr_5gm = in wlc_phy_txpwr_srom_read_ppr_nphy()
14451 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14453 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14455 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14457 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14459 pi->nphy_pwrctrl_info[PHY_CORE_0].pwrdet_5gm_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14461 pi->nphy_pwrctrl_info[PHY_CORE_1].pwrdet_5gm_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14463 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_targ_5gm = in wlc_phy_txpwr_srom_read_ppr_nphy()
14465 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_targ_5gm = in wlc_phy_txpwr_srom_read_ppr_nphy()
14468 pi->ofdm5gpo = sprom->ofdm5gpo; in wlc_phy_txpwr_srom_read_ppr_nphy()
14470 pi->mcs5gpo[0] = sprom->mcs5gpo[0]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14471 pi->mcs5gpo[1] = sprom->mcs5gpo[1]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14472 pi->mcs5gpo[2] = sprom->mcs5gpo[2]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14473 pi->mcs5gpo[3] = sprom->mcs5gpo[3]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14474 pi->mcs5gpo[4] = sprom->mcs5gpo[4]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14475 pi->mcs5gpo[5] = sprom->mcs5gpo[5]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14476 pi->mcs5gpo[6] = sprom->mcs5gpo[6]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14477 pi->mcs5gpo[7] = sprom->mcs5gpo[7]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14481 pi->nphy_pwrctrl_info[0].max_pwr_5gl = in wlc_phy_txpwr_srom_read_ppr_nphy()
14483 pi->nphy_pwrctrl_info[1].max_pwr_5gl = in wlc_phy_txpwr_srom_read_ppr_nphy()
14485 pi->nphy_pwrctrl_info[0].pwrdet_5gl_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14487 pi->nphy_pwrctrl_info[1].pwrdet_5gl_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14489 pi->nphy_pwrctrl_info[0].pwrdet_5gl_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14491 pi->nphy_pwrctrl_info[1].pwrdet_5gl_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14493 pi->nphy_pwrctrl_info[0].pwrdet_5gl_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14495 pi->nphy_pwrctrl_info[1].pwrdet_5gl_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14497 pi->nphy_pwrctrl_info[0].idle_targ_5gl = 0; in wlc_phy_txpwr_srom_read_ppr_nphy()
14498 pi->nphy_pwrctrl_info[1].idle_targ_5gl = 0; in wlc_phy_txpwr_srom_read_ppr_nphy()
14500 pi->ofdm5glpo = sprom->ofdm5glpo; in wlc_phy_txpwr_srom_read_ppr_nphy()
14502 pi->mcs5glpo[0] = sprom->mcs5glpo[0]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14503 pi->mcs5glpo[1] = sprom->mcs5glpo[1]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14504 pi->mcs5glpo[2] = sprom->mcs5glpo[2]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14505 pi->mcs5glpo[3] = sprom->mcs5glpo[3]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14506 pi->mcs5glpo[4] = sprom->mcs5glpo[4]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14507 pi->mcs5glpo[5] = sprom->mcs5glpo[5]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14508 pi->mcs5glpo[6] = sprom->mcs5glpo[6]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14509 pi->mcs5glpo[7] = sprom->mcs5glpo[7]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14513 pi->nphy_pwrctrl_info[0].max_pwr_5gh = in wlc_phy_txpwr_srom_read_ppr_nphy()
14515 pi->nphy_pwrctrl_info[1].max_pwr_5gh = in wlc_phy_txpwr_srom_read_ppr_nphy()
14517 pi->nphy_pwrctrl_info[0].pwrdet_5gh_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14519 pi->nphy_pwrctrl_info[1].pwrdet_5gh_a1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14521 pi->nphy_pwrctrl_info[0].pwrdet_5gh_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14523 pi->nphy_pwrctrl_info[1].pwrdet_5gh_b0 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14525 pi->nphy_pwrctrl_info[0].pwrdet_5gh_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14527 pi->nphy_pwrctrl_info[1].pwrdet_5gh_b1 = in wlc_phy_txpwr_srom_read_ppr_nphy()
14529 pi->nphy_pwrctrl_info[0].idle_targ_5gh = 0; in wlc_phy_txpwr_srom_read_ppr_nphy()
14530 pi->nphy_pwrctrl_info[1].idle_targ_5gh = 0; in wlc_phy_txpwr_srom_read_ppr_nphy()
14532 pi->ofdm5ghpo = sprom->ofdm5ghpo; in wlc_phy_txpwr_srom_read_ppr_nphy()
14534 pi->mcs5ghpo[0] = sprom->mcs5ghpo[0]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14535 pi->mcs5ghpo[1] = sprom->mcs5ghpo[1]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14536 pi->mcs5ghpo[2] = sprom->mcs5ghpo[2]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14537 pi->mcs5ghpo[3] = sprom->mcs5ghpo[3]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14538 pi->mcs5ghpo[4] = sprom->mcs5ghpo[4]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14539 pi->mcs5ghpo[5] = sprom->mcs5ghpo[5]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14540 pi->mcs5ghpo[6] = sprom->mcs5ghpo[6]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14541 pi->mcs5ghpo[7] = sprom->mcs5ghpo[7]; in wlc_phy_txpwr_srom_read_ppr_nphy()
14546 wlc_phy_txpwr_apply_nphy(pi); in wlc_phy_txpwr_srom_read_ppr_nphy()
14549 static void wlc_phy_txpwr_srom_read_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_srom_read_nphy() argument
14551 struct ssb_sprom *sprom = &pi->d11core->bus->sprom; in wlc_phy_txpwr_srom_read_nphy()
14553 pi->antswitch = sprom->antswitch; in wlc_phy_txpwr_srom_read_nphy()
14554 pi->aa2g = sprom->ant_available_bg; in wlc_phy_txpwr_srom_read_nphy()
14555 pi->aa5g = sprom->ant_available_a; in wlc_phy_txpwr_srom_read_nphy()
14557 pi->srom_fem2g.tssipos = sprom->fem.ghz2.tssipos; in wlc_phy_txpwr_srom_read_nphy()
14558 pi->srom_fem2g.extpagain = sprom->fem.ghz2.extpa_gain; in wlc_phy_txpwr_srom_read_nphy()
14559 pi->srom_fem2g.pdetrange = sprom->fem.ghz2.pdet_range; in wlc_phy_txpwr_srom_read_nphy()
14560 pi->srom_fem2g.triso = sprom->fem.ghz2.tr_iso; in wlc_phy_txpwr_srom_read_nphy()
14561 pi->srom_fem2g.antswctrllut = sprom->fem.ghz2.antswlut; in wlc_phy_txpwr_srom_read_nphy()
14563 pi->srom_fem5g.tssipos = sprom->fem.ghz5.tssipos; in wlc_phy_txpwr_srom_read_nphy()
14564 pi->srom_fem5g.extpagain = sprom->fem.ghz5.extpa_gain; in wlc_phy_txpwr_srom_read_nphy()
14565 pi->srom_fem5g.pdetrange = sprom->fem.ghz5.pdet_range; in wlc_phy_txpwr_srom_read_nphy()
14566 pi->srom_fem5g.triso = sprom->fem.ghz5.tr_iso; in wlc_phy_txpwr_srom_read_nphy()
14568 pi->srom_fem5g.antswctrllut = sprom->fem.ghz5.antswlut; in wlc_phy_txpwr_srom_read_nphy()
14570 pi->srom_fem5g.antswctrllut = sprom->fem.ghz2.antswlut; in wlc_phy_txpwr_srom_read_nphy()
14572 wlc_phy_txpower_ipa_upd(pi); in wlc_phy_txpwr_srom_read_nphy()
14574 pi->phy_txcore_disable_temp = sprom->tempthresh; in wlc_phy_txpwr_srom_read_nphy()
14575 if (pi->phy_txcore_disable_temp == 0) in wlc_phy_txpwr_srom_read_nphy()
14576 pi->phy_txcore_disable_temp = PHY_CHAIN_TX_DISABLE_TEMP; in wlc_phy_txpwr_srom_read_nphy()
14578 pi->phy_tempsense_offset = sprom->tempoffset; in wlc_phy_txpwr_srom_read_nphy()
14579 if (pi->phy_tempsense_offset != 0) { in wlc_phy_txpwr_srom_read_nphy()
14580 if (pi->phy_tempsense_offset > in wlc_phy_txpwr_srom_read_nphy()
14582 pi->phy_tempsense_offset = NPHY_SROM_MAXTEMPOFFSET; in wlc_phy_txpwr_srom_read_nphy()
14583 else if (pi->phy_tempsense_offset < (NPHY_SROM_TEMPSHIFT + in wlc_phy_txpwr_srom_read_nphy()
14585 pi->phy_tempsense_offset = NPHY_SROM_MINTEMPOFFSET; in wlc_phy_txpwr_srom_read_nphy()
14587 pi->phy_tempsense_offset -= NPHY_SROM_TEMPSHIFT; in wlc_phy_txpwr_srom_read_nphy()
14590 pi->phy_txcore_enable_temp = in wlc_phy_txpwr_srom_read_nphy()
14591 pi->phy_txcore_disable_temp - PHY_HYSTERESIS_DELTATEMP; in wlc_phy_txpwr_srom_read_nphy()
14593 pi->phycal_tempdelta = sprom->phycal_tempdelta; in wlc_phy_txpwr_srom_read_nphy()
14594 if (pi->phycal_tempdelta > NPHY_CAL_MAXTEMPDELTA) in wlc_phy_txpwr_srom_read_nphy()
14595 pi->phycal_tempdelta = 0; in wlc_phy_txpwr_srom_read_nphy()
14597 wlc_phy_txpwr_srom_read_ppr_nphy(pi); in wlc_phy_txpwr_srom_read_nphy()
14600 void wlc_phy_attach_nphy(struct brcms_phy *pi) in wlc_phy_attach_nphy() argument
14604 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LT(pi->pubpi.phy_rev, 6)) in wlc_phy_attach_nphy()
14605 pi->phyhang_avoid = true; in wlc_phy_attach_nphy()
14607 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_attach_nphy()
14608 pi->nphy_gband_spurwar_en = true; in wlc_phy_attach_nphy()
14609 if (pi->sh->boardflags2 & BFL2_SPUR_WAR) in wlc_phy_attach_nphy()
14610 pi->nphy_aband_spurwar_en = true; in wlc_phy_attach_nphy()
14612 if (NREV_GE(pi->pubpi.phy_rev, 6) && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_attach_nphy()
14613 if (pi->sh->boardflags2 & BFL2_2G_SPUR_WAR) in wlc_phy_attach_nphy()
14614 pi->nphy_gband_spurwar2_en = true; in wlc_phy_attach_nphy()
14617 pi->n_preamble_override = AUTO; in wlc_phy_attach_nphy()
14618 if (NREV_IS(pi->pubpi.phy_rev, 3) || NREV_IS(pi->pubpi.phy_rev, 4)) in wlc_phy_attach_nphy()
14619 pi->n_preamble_override = BRCMS_N_PREAMBLE_MIXEDMODE; in wlc_phy_attach_nphy()
14621 pi->nphy_txrx_chain = AUTO; in wlc_phy_attach_nphy()
14622 pi->phy_scraminit = AUTO; in wlc_phy_attach_nphy()
14624 pi->nphy_rxcalparams = 0x010100B5; in wlc_phy_attach_nphy()
14626 pi->nphy_perical = PHY_PERICAL_MPHASE; in wlc_phy_attach_nphy()
14627 pi->mphase_cal_phase_id = MPHASE_CAL_STATE_IDLE; in wlc_phy_attach_nphy()
14628 pi->mphase_txcal_numcmds = MPHASE_TXCAL_NUMCMDS; in wlc_phy_attach_nphy()
14630 pi->nphy_gain_boost = true; in wlc_phy_attach_nphy()
14631 pi->nphy_elna_gain_config = false; in wlc_phy_attach_nphy()
14632 pi->radio_is_on = false; in wlc_phy_attach_nphy()
14634 for (i = 0; i < pi->pubpi.phy_corenum; i++) in wlc_phy_attach_nphy()
14635 pi->nphy_txpwrindex[i].index = AUTO; in wlc_phy_attach_nphy()
14637 wlc_phy_txpwrctrl_config_nphy(pi); in wlc_phy_attach_nphy()
14638 if (pi->nphy_txpwrctrl == PHY_TPC_HW_ON) in wlc_phy_attach_nphy()
14639 pi->hwpwrctrl_capable = true; in wlc_phy_attach_nphy()
14641 pi->pi_fptr.init = wlc_phy_init_nphy; in wlc_phy_attach_nphy()
14642 pi->pi_fptr.calinit = wlc_phy_cal_init_nphy; in wlc_phy_attach_nphy()
14643 pi->pi_fptr.chanset = wlc_phy_chanspec_set_nphy; in wlc_phy_attach_nphy()
14644 pi->pi_fptr.txpwrrecalc = wlc_phy_txpower_recalc_target_nphy; in wlc_phy_attach_nphy()
14646 wlc_phy_txpwr_srom_read_nphy(pi); in wlc_phy_attach_nphy()
14649 static s32 get_rf_pwr_offset(struct brcms_phy *pi, s16 pga_gn, s16 pad_gn) in get_rf_pwr_offset() argument
14653 if (CHSPEC_IS2G(pi->radio_chanspec)) { in get_rf_pwr_offset()
14654 if ((pi->pubpi.radiorev == 3) || in get_rf_pwr_offset()
14655 (pi->pubpi.radiorev == 4) || in get_rf_pwr_offset()
14656 (pi->pubpi.radiorev == 6)) in get_rf_pwr_offset()
14660 else if (pi->pubpi.radiorev == 5) in get_rf_pwr_offset()
14664 else if ((pi->pubpi.radiorev == 7) in get_rf_pwr_offset()
14665 || (pi->pubpi.radiorev == in get_rf_pwr_offset()
14671 if ((pi->pubpi.radiorev == 3) || in get_rf_pwr_offset()
14672 (pi->pubpi.radiorev == 4) || in get_rf_pwr_offset()
14673 (pi->pubpi.radiorev == 6)) in get_rf_pwr_offset()
14677 else if ((pi->pubpi.radiorev == 7) in get_rf_pwr_offset()
14678 || (pi->pubpi.radiorev == in get_rf_pwr_offset()
14687 static void wlc_phy_update_mimoconfig_nphy(struct brcms_phy *pi, s32 preamble) in wlc_phy_update_mimoconfig_nphy() argument
14695 val = read_phy_reg(pi, 0xed); in wlc_phy_update_mimoconfig_nphy()
14702 write_phy_reg(pi, 0xed, val); in wlc_phy_update_mimoconfig_nphy()
14705 static void wlc_phy_ipa_set_tx_digi_filts_nphy(struct brcms_phy *pi) in wlc_phy_ipa_set_tx_digi_filts_nphy() argument
14712 write_phy_reg(pi, addr_offset[type] + j, in wlc_phy_ipa_set_tx_digi_filts_nphy()
14716 if (pi->bw == WL_CHANSPEC_BW_40) { in wlc_phy_ipa_set_tx_digi_filts_nphy()
14718 write_phy_reg(pi, 0x186 + j, in wlc_phy_ipa_set_tx_digi_filts_nphy()
14721 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_ipa_set_tx_digi_filts_nphy()
14723 write_phy_reg(pi, 0x186 + j, in wlc_phy_ipa_set_tx_digi_filts_nphy()
14727 if (CHSPEC_CHANNEL(pi->radio_chanspec) == 14) { in wlc_phy_ipa_set_tx_digi_filts_nphy()
14729 write_phy_reg(pi, 0x2c5 + j, in wlc_phy_ipa_set_tx_digi_filts_nphy()
14735 static void wlc_phy_ipa_restore_tx_digi_filts_nphy(struct brcms_phy *pi) in wlc_phy_ipa_restore_tx_digi_filts_nphy() argument
14739 if (pi->bw == WL_CHANSPEC_BW_40) { in wlc_phy_ipa_restore_tx_digi_filts_nphy()
14741 write_phy_reg(pi, 0x195 + j, in wlc_phy_ipa_restore_tx_digi_filts_nphy()
14745 write_phy_reg(pi, 0x186 + j, in wlc_phy_ipa_restore_tx_digi_filts_nphy()
14751 wlc_phy_set_rfseq_nphy(struct brcms_phy *pi, u8 cmd, const u8 *events, in wlc_phy_set_rfseq_nphy() argument
14757 NREV_GE(pi->pubpi.phy_rev, in wlc_phy_set_rfseq_nphy()
14761 if (pi->phyhang_avoid) in wlc_phy_set_rfseq_nphy()
14762 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_set_rfseq_nphy()
14765 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, len, t1_offset, 8, in wlc_phy_set_rfseq_nphy()
14768 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, len, t2_offset, 8, in wlc_phy_set_rfseq_nphy()
14772 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_set_rfseq_nphy()
14774 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_set_rfseq_nphy()
14778 if (pi->phyhang_avoid) in wlc_phy_set_rfseq_nphy()
14779 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_set_rfseq_nphy()
14782 static u16 wlc_phy_read_lpf_bw_ctl_nphy(struct brcms_phy *pi, u16 offset) in wlc_phy_read_lpf_bw_ctl_nphy() argument
14788 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_read_lpf_bw_ctl_nphy()
14795 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_read_lpf_bw_ctl_nphy()
14805 wlc_phy_rfctrl_override_nphy_rev7(struct brcms_phy *pi, u16 field, u16 value, in wlc_phy_rfctrl_override_nphy_rev7() argument
14812 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrl_override_nphy_rev7()
15056 and_phy_reg(pi, en_addr, ~en_mask); in wlc_phy_rfctrl_override_nphy_rev7()
15057 and_phy_reg(pi, val_addr, ~val_mask); in wlc_phy_rfctrl_override_nphy_rev7()
15062 or_phy_reg(pi, en_addr, en_mask); in wlc_phy_rfctrl_override_nphy_rev7()
15065 mod_phy_reg(pi, val_addr, in wlc_phy_rfctrl_override_nphy_rev7()
15075 static void wlc_phy_adjust_lnagaintbl_nphy(struct brcms_phy *pi) in wlc_phy_adjust_lnagaintbl_nphy() argument
15084 if (pi->phyhang_avoid) in wlc_phy_adjust_lnagaintbl_nphy()
15085 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_adjust_lnagaintbl_nphy()
15087 if (pi->nphy_gain_boost) { in wlc_phy_adjust_lnagaintbl_nphy()
15088 if ((CHSPEC_IS2G(pi->radio_chanspec))) { in wlc_phy_adjust_lnagaintbl_nphy()
15094 curr_channel = CHSPEC_CHANNEL(pi->radio_chanspec); in wlc_phy_adjust_lnagaintbl_nphy()
15112 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_adjust_lnagaintbl_nphy()
15113 if (pi->nphy_elna_gain_config) { in wlc_phy_adjust_lnagaintbl_nphy()
15125 wlc_phy_table_write_nphy(pi, core, 4, 8, 16, regval); in wlc_phy_adjust_lnagaintbl_nphy()
15131 mod_phy_reg(pi, 0x1e, (0xff << 0), (minmax_gain[0] << 0)); in wlc_phy_adjust_lnagaintbl_nphy()
15132 mod_phy_reg(pi, 0x34, (0xff << 0), (minmax_gain[1] << 0)); in wlc_phy_adjust_lnagaintbl_nphy()
15134 if (pi->phyhang_avoid) in wlc_phy_adjust_lnagaintbl_nphy()
15135 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_adjust_lnagaintbl_nphy()
15139 wlc_phy_war_force_trsw_to_R_cliplo_nphy(struct brcms_phy *pi, u8 core) in wlc_phy_war_force_trsw_to_R_cliplo_nphy() argument
15142 write_phy_reg(pi, 0x38, 0x4); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15143 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15144 write_phy_reg(pi, 0x37, 0x0060); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15146 write_phy_reg(pi, 0x37, 0x1080); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15148 write_phy_reg(pi, 0x2ae, 0x4); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15149 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15150 write_phy_reg(pi, 0x2ad, 0x0060); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15152 write_phy_reg(pi, 0x2ad, 0x1080); in wlc_phy_war_force_trsw_to_R_cliplo_nphy()
15156 static void wlc_phy_war_txchain_upd_nphy(struct brcms_phy *pi, u8 txchain) in wlc_phy_war_txchain_upd_nphy() argument
15163 wlc_phy_war_force_trsw_to_R_cliplo_nphy(pi, PHY_CORE_0); in wlc_phy_war_txchain_upd_nphy()
15166 wlc_phy_war_force_trsw_to_R_cliplo_nphy(pi, PHY_CORE_1); in wlc_phy_war_txchain_upd_nphy()
15169 static void wlc_phy_workarounds_nphy_gainctrl_2057_rev5(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_gainctrl_2057_rev5() argument
15177 mod_phy_reg(pi, 0x1c, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15178 mod_phy_reg(pi, 0x32, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15180 mod_phy_reg(pi, 0x289, (0xff << 0), (0x46 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15182 mod_phy_reg(pi, 0x283, (0xff << 0), (0x3c << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15183 mod_phy_reg(pi, 0x280, (0xff << 0), (0x3c << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15185 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 0x8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15187 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 0x8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15190 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 0x10, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15192 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 0x10, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15195 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15197 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15200 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS1, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15202 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS2, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15205 write_phy_reg(pi, 0x37, 0x74); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15206 write_phy_reg(pi, 0x2ad, 0x74); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15207 write_phy_reg(pi, 0x38, 0x18); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15208 write_phy_reg(pi, 0x2ae, 0x18); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15210 write_phy_reg(pi, 0x2b, 0xe8); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15211 write_phy_reg(pi, 0x41, 0xe8); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15213 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15215 mod_phy_reg(pi, 0x300, (0x3f << 0), (0x12 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15216 mod_phy_reg(pi, 0x301, (0x3f << 0), (0x12 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15219 mod_phy_reg(pi, 0x300, (0x3f << 0), (0x10 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15220 mod_phy_reg(pi, 0x301, (0x3f << 0), (0x10 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev5()
15224 static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_gainctrl_2057_rev6() argument
15251 mod_phy_reg(pi, 0x1c, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15252 mod_phy_reg(pi, 0x32, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15254 currband = read_phy_reg(pi, 0x09) & NPHY_BandControl_currentBand; in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15259 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15261 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15264 mod_phy_reg(pi, 0x283, (0xff << 0), (0x40 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15266 if (CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15267 mod_phy_reg(pi, 0x280, (0xff << 0), (0x3e << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15268 mod_phy_reg(pi, 0x283, (0xff << 0), (0x3e << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15271 mod_phy_reg(pi, 0x289, (0xff << 0), (0x46 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15273 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15274 mod_phy_reg(pi, 0x300, (0x3f << 0), (13 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15275 mod_phy_reg(pi, 0x301, (0x3f << 0), (13 << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15289 freq = CHAN5G_FREQ(CHSPEC_CHANNEL(pi->radio_chanspec)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15290 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15361 write_phy_reg(pi, 0x20, init_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15362 write_phy_reg(pi, 0x2a7, init_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15364 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15365 pi->pubpi.phy_corenum, 0x106, 16, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15368 write_phy_reg(pi, 0x22, clip1hi_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15369 write_phy_reg(pi, 0x2a9, clip1hi_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15371 write_phy_reg(pi, 0x36, clip1md_gaincode_B); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15372 write_phy_reg(pi, 0x2ac, clip1md_gaincode_B); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15374 write_phy_reg(pi, 0x37, clip1lo_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15375 write_phy_reg(pi, 0x2ad, clip1lo_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15376 write_phy_reg(pi, 0x38, clip1lo_gaincode_B); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15377 write_phy_reg(pi, 0x2ae, clip1lo_gaincode_B); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15379 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15381 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15384 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS1, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15386 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS2, 10, 0x20, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15389 mod_phy_reg(pi, 0x283, (0xff << 0), (crsminu_th << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15392 write_phy_reg(pi, 0x2b, nbclip_th); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15393 write_phy_reg(pi, 0x41, nbclip_th); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15396 mod_phy_reg(pi, 0x300, (0x3f << 0), (w1clip_th << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15397 mod_phy_reg(pi, 0x301, (0x3f << 0), (w1clip_th << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15399 mod_phy_reg(pi, 0x2e4, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15402 mod_phy_reg(pi, 0x2e4, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15405 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15407 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15409 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 8, 8, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15412 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 0x10, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15414 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 0x10, in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15417 write_phy_reg(pi, 0x24, clip1md_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15418 write_phy_reg(pi, 0x2ab, clip1md_gaincode); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15420 mod_phy_reg(pi, 0x280, (0xff << 0), (crsminl_th << 0)); in wlc_phy_workarounds_nphy_gainctrl_2057_rev6()
15425 static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_gainctrl() argument
15580 triso = (CHSPEC_IS5G(pi->radio_chanspec)) ? pi->srom_fem5g.triso : in wlc_phy_workarounds_nphy_gainctrl()
15581 pi->srom_fem2g.triso; in wlc_phy_workarounds_nphy_gainctrl()
15583 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_workarounds_nphy_gainctrl()
15584 if (pi->pubpi.radiorev == 5) { in wlc_phy_workarounds_nphy_gainctrl()
15585 wlc_phy_workarounds_nphy_gainctrl_2057_rev5(pi); in wlc_phy_workarounds_nphy_gainctrl()
15586 } else if (pi->pubpi.radiorev == 7) { in wlc_phy_workarounds_nphy_gainctrl()
15587 wlc_phy_workarounds_nphy_gainctrl_2057_rev6(pi); in wlc_phy_workarounds_nphy_gainctrl()
15589 mod_phy_reg(pi, 0x283, (0xff << 0), (0x44 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15590 mod_phy_reg(pi, 0x280, (0xff << 0), (0x44 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15592 } else if ((pi->pubpi.radiorev == 3) in wlc_phy_workarounds_nphy_gainctrl()
15593 || (pi->pubpi.radiorev == 8)) { in wlc_phy_workarounds_nphy_gainctrl()
15594 wlc_phy_workarounds_nphy_gainctrl_2057_rev6(pi); in wlc_phy_workarounds_nphy_gainctrl()
15596 if (pi->pubpi.radiorev == 8) { in wlc_phy_workarounds_nphy_gainctrl()
15597 mod_phy_reg(pi, 0x283, in wlc_phy_workarounds_nphy_gainctrl()
15599 mod_phy_reg(pi, 0x280, in wlc_phy_workarounds_nphy_gainctrl()
15603 wlc_phy_workarounds_nphy_gainctrl_2057_rev6(pi); in wlc_phy_workarounds_nphy_gainctrl()
15605 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_workarounds_nphy_gainctrl()
15607 mod_phy_reg(pi, 0xa0, (0x1 << 6), (1 << 6)); in wlc_phy_workarounds_nphy_gainctrl()
15609 mod_phy_reg(pi, 0x1c, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl()
15610 mod_phy_reg(pi, 0x32, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl()
15613 read_phy_reg(pi, 0x09) & NPHY_BandControl_currentBand; in wlc_phy_workarounds_nphy_gainctrl()
15615 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_workarounds_nphy_gainctrl()
15616 if (pi->pubpi.radiorev == 11) { in wlc_phy_workarounds_nphy_gainctrl()
15636 if (pi->sh->boardflags & BFL_EXTLNA) { in wlc_phy_workarounds_nphy_gainctrl()
15701 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_workarounds_nphy_gainctrl()
15704 if (pi->sh->boardflags & BFL_EXTLNA) { in wlc_phy_workarounds_nphy_gainctrl()
15760 } else if (NREV_IS(pi->pubpi.phy_rev, 4)) { in wlc_phy_workarounds_nphy_gainctrl()
15791 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_workarounds_nphy_gainctrl()
15803 if ((pi->pubpi.radiorev == 11) && in wlc_phy_workarounds_nphy_gainctrl()
15804 (CHSPEC_IS40(pi->radio_chanspec) == 0)) in wlc_phy_workarounds_nphy_gainctrl()
15811 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_workarounds_nphy_gainctrl()
15826 } else if (NREV_IS(pi->pubpi.phy_rev, 4)) { in wlc_phy_workarounds_nphy_gainctrl()
15831 if (pi->sh->boardflags & BFL_EXTLNA_5GHz) { in wlc_phy_workarounds_nphy_gainctrl()
15868 write_radio_reg(pi, in wlc_phy_workarounds_nphy_gainctrl()
15871 write_radio_reg(pi, in wlc_phy_workarounds_nphy_gainctrl()
15875 write_radio_reg(pi, (RADIO_2056_RX_LNAG2_IDAC | RADIO_2056_RX0), in wlc_phy_workarounds_nphy_gainctrl()
15877 write_radio_reg(pi, (RADIO_2056_RX_LNAG2_IDAC | RADIO_2056_RX1), in wlc_phy_workarounds_nphy_gainctrl()
15880 write_radio_reg(pi, (RADIO_2056_RX_RSSI_POLE | RADIO_2056_RX0), in wlc_phy_workarounds_nphy_gainctrl()
15882 write_radio_reg(pi, (RADIO_2056_RX_RSSI_POLE | RADIO_2056_RX1), in wlc_phy_workarounds_nphy_gainctrl()
15885 write_radio_reg(pi, (RADIO_2056_RX_RSSI_GAIN | RADIO_2056_RX0), in wlc_phy_workarounds_nphy_gainctrl()
15887 write_radio_reg(pi, (RADIO_2056_RX_RSSI_GAIN | RADIO_2056_RX1), in wlc_phy_workarounds_nphy_gainctrl()
15890 write_radio_reg(pi, in wlc_phy_workarounds_nphy_gainctrl()
15893 write_radio_reg(pi, in wlc_phy_workarounds_nphy_gainctrl()
15897 write_radio_reg(pi, (RADIO_2056_RX_LNAA2_IDAC | RADIO_2056_RX0), in wlc_phy_workarounds_nphy_gainctrl()
15899 write_radio_reg(pi, (RADIO_2056_RX_LNAA2_IDAC | RADIO_2056_RX1), in wlc_phy_workarounds_nphy_gainctrl()
15902 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 8, in wlc_phy_workarounds_nphy_gainctrl()
15904 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 8, in wlc_phy_workarounds_nphy_gainctrl()
15907 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 4, 0x10, in wlc_phy_workarounds_nphy_gainctrl()
15909 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 4, 0x10, in wlc_phy_workarounds_nphy_gainctrl()
15912 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 10, 0x20, in wlc_phy_workarounds_nphy_gainctrl()
15914 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 10, 0x20, in wlc_phy_workarounds_nphy_gainctrl()
15917 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS1, 10, 0x20, in wlc_phy_workarounds_nphy_gainctrl()
15919 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS2, 10, 0x20, in wlc_phy_workarounds_nphy_gainctrl()
15922 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN1, 6, 0x40, in wlc_phy_workarounds_nphy_gainctrl()
15924 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAIN2, 6, 0x40, in wlc_phy_workarounds_nphy_gainctrl()
15926 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS1, 6, 0x40, in wlc_phy_workarounds_nphy_gainctrl()
15928 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_GAINBITS2, 6, 0x40, in wlc_phy_workarounds_nphy_gainctrl()
15931 write_phy_reg(pi, 0x20, init_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15932 write_phy_reg(pi, 0x2a7, init_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15934 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_workarounds_nphy_gainctrl()
15935 pi->pubpi.phy_corenum, 0x106, 16, in wlc_phy_workarounds_nphy_gainctrl()
15938 write_phy_reg(pi, 0x22, clip1hi_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15939 write_phy_reg(pi, 0x2a9, clip1hi_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15941 write_phy_reg(pi, 0x24, clip1md_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15942 write_phy_reg(pi, 0x2ab, clip1md_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15944 write_phy_reg(pi, 0x37, clip1lo_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15945 write_phy_reg(pi, 0x2ad, clip1lo_gaincode); in wlc_phy_workarounds_nphy_gainctrl()
15947 mod_phy_reg(pi, 0x27d, (0xff << 0), (crsmin_th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15948 mod_phy_reg(pi, 0x280, (0xff << 0), (crsminl_th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15949 mod_phy_reg(pi, 0x283, (0xff << 0), (crsminu_th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15951 write_phy_reg(pi, 0x2b, nbclip_th); in wlc_phy_workarounds_nphy_gainctrl()
15952 write_phy_reg(pi, 0x41, nbclip_th); in wlc_phy_workarounds_nphy_gainctrl()
15954 mod_phy_reg(pi, 0x27, (0x3f << 0), (w1clip_th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15955 mod_phy_reg(pi, 0x3d, (0x3f << 0), (w1clip_th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15957 write_phy_reg(pi, 0x150, 0x809c); in wlc_phy_workarounds_nphy_gainctrl()
15961 mod_phy_reg(pi, 0x1c, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl()
15962 mod_phy_reg(pi, 0x32, (0x1 << 13), (1 << 13)); in wlc_phy_workarounds_nphy_gainctrl()
15964 write_phy_reg(pi, 0x2b, 0x84); in wlc_phy_workarounds_nphy_gainctrl()
15965 write_phy_reg(pi, 0x41, 0x84); in wlc_phy_workarounds_nphy_gainctrl()
15967 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl()
15968 write_phy_reg(pi, 0x6b, 0x2b); in wlc_phy_workarounds_nphy_gainctrl()
15969 write_phy_reg(pi, 0x6c, 0x2b); in wlc_phy_workarounds_nphy_gainctrl()
15970 write_phy_reg(pi, 0x6d, 0x9); in wlc_phy_workarounds_nphy_gainctrl()
15971 write_phy_reg(pi, 0x6e, 0x9); in wlc_phy_workarounds_nphy_gainctrl()
15975 mod_phy_reg(pi, 0x27, (0x3f << 0), (w1th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15976 mod_phy_reg(pi, 0x3d, (0x3f << 0), (w1th << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15978 if (CHSPEC_IS20(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_gainctrl()
15979 mod_phy_reg(pi, 0x1c, (0x1f << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15980 mod_phy_reg(pi, 0x32, (0x1f << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15982 mod_phy_reg(pi, 0x1d, (0x1f << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15983 mod_phy_reg(pi, 0x33, (0x1f << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_gainctrl()
15986 write_phy_reg(pi, 0x150, 0x809c); in wlc_phy_workarounds_nphy_gainctrl()
15988 if (pi->nphy_gain_boost) in wlc_phy_workarounds_nphy_gainctrl()
15989 if ((CHSPEC_IS2G(pi->radio_chanspec)) && in wlc_phy_workarounds_nphy_gainctrl()
15990 (CHSPEC_IS40(pi->radio_chanspec))) in wlc_phy_workarounds_nphy_gainctrl()
15994 else if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_workarounds_nphy_gainctrl()
15999 mod_phy_reg(pi, 0x20, (0x1f << 7), (hpf_code << 7)); in wlc_phy_workarounds_nphy_gainctrl()
16000 mod_phy_reg(pi, 0x36, (0x1f << 7), (hpf_code << 7)); in wlc_phy_workarounds_nphy_gainctrl()
16004 wlc_phy_table_write_nphy(pi, 7, 4, 0x106, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16006 wlc_phy_adjust_lnagaintbl_nphy(pi); in wlc_phy_workarounds_nphy_gainctrl()
16008 if (pi->nphy_elna_gain_config) { in wlc_phy_workarounds_nphy_gainctrl()
16013 wlc_phy_table_write_nphy(pi, 2, 4, 8, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16014 wlc_phy_table_write_nphy(pi, 3, 4, 8, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16018 wlc_phy_table_write_nphy(pi, 7, 4, 0x106, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16021 if (NREV_IS(pi->pubpi.phy_rev, 2)) { in wlc_phy_workarounds_nphy_gainctrl()
16024 wlc_phy_table_write_nphy(pi, 0, 21, 32, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16025 wlc_phy_table_write_nphy(pi, 1, 21, 32, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16029 wlc_phy_table_write_nphy(pi, 2, 21, 32, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16030 wlc_phy_table_write_nphy(pi, 3, 21, 32, 16, regval); in wlc_phy_workarounds_nphy_gainctrl()
16033 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_UPDATEGAINU, in wlc_phy_workarounds_nphy_gainctrl()
16038 mod_phy_reg(pi, 0x153, (0xff << 8), (90 << 8)); in wlc_phy_workarounds_nphy_gainctrl()
16040 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_workarounds_nphy_gainctrl()
16041 mod_phy_reg(pi, in wlc_phy_workarounds_nphy_gainctrl()
16047 static void wlc_phy_workarounds_nphy_rev7(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_rev7() argument
16101 if (NREV_IS(pi->pubpi.phy_rev, 7)) { in wlc_phy_workarounds_nphy_rev7()
16102 mod_phy_reg(pi, 0x221, (0x1 << 4), (1 << 4)); in wlc_phy_workarounds_nphy_rev7()
16104 mod_phy_reg(pi, 0x160, (0x7f << 0), (32 << 0)); in wlc_phy_workarounds_nphy_rev7()
16105 mod_phy_reg(pi, 0x160, (0x7f << 8), (39 << 8)); in wlc_phy_workarounds_nphy_rev7()
16106 mod_phy_reg(pi, 0x161, (0x7f << 0), (46 << 0)); in wlc_phy_workarounds_nphy_rev7()
16107 mod_phy_reg(pi, 0x161, (0x7f << 8), (51 << 8)); in wlc_phy_workarounds_nphy_rev7()
16108 mod_phy_reg(pi, 0x162, (0x7f << 0), (55 << 0)); in wlc_phy_workarounds_nphy_rev7()
16109 mod_phy_reg(pi, 0x162, (0x7f << 8), (58 << 8)); in wlc_phy_workarounds_nphy_rev7()
16110 mod_phy_reg(pi, 0x163, (0x7f << 0), (60 << 0)); in wlc_phy_workarounds_nphy_rev7()
16111 mod_phy_reg(pi, 0x163, (0x7f << 8), (62 << 8)); in wlc_phy_workarounds_nphy_rev7()
16112 mod_phy_reg(pi, 0x164, (0x7f << 0), (62 << 0)); in wlc_phy_workarounds_nphy_rev7()
16113 mod_phy_reg(pi, 0x164, (0x7f << 8), (63 << 8)); in wlc_phy_workarounds_nphy_rev7()
16114 mod_phy_reg(pi, 0x165, (0x7f << 0), (63 << 0)); in wlc_phy_workarounds_nphy_rev7()
16115 mod_phy_reg(pi, 0x165, (0x7f << 8), (64 << 8)); in wlc_phy_workarounds_nphy_rev7()
16116 mod_phy_reg(pi, 0x166, (0x7f << 0), (64 << 0)); in wlc_phy_workarounds_nphy_rev7()
16117 mod_phy_reg(pi, 0x166, (0x7f << 8), (64 << 8)); in wlc_phy_workarounds_nphy_rev7()
16118 mod_phy_reg(pi, 0x167, (0x7f << 0), (64 << 0)); in wlc_phy_workarounds_nphy_rev7()
16119 mod_phy_reg(pi, 0x167, (0x7f << 8), (64 << 8)); in wlc_phy_workarounds_nphy_rev7()
16122 if (NREV_LE(pi->pubpi.phy_rev, 8)) { in wlc_phy_workarounds_nphy_rev7()
16123 write_phy_reg(pi, 0x23f, 0x1b0); in wlc_phy_workarounds_nphy_rev7()
16124 write_phy_reg(pi, 0x240, 0x1b0); in wlc_phy_workarounds_nphy_rev7()
16127 if (NREV_GE(pi->pubpi.phy_rev, 8)) in wlc_phy_workarounds_nphy_rev7()
16128 mod_phy_reg(pi, 0xbd, (0xff << 0), (114 << 0)); in wlc_phy_workarounds_nphy_rev7()
16130 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x00, 16, in wlc_phy_workarounds_nphy_rev7()
16132 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x10, 16, in wlc_phy_workarounds_nphy_rev7()
16135 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev7()
16138 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev7()
16141 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_workarounds_nphy_rev7()
16143 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x16e, 16, in wlc_phy_workarounds_nphy_rev7()
16146 if (PHY_IPA(pi)) in wlc_phy_workarounds_nphy_rev7()
16147 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX, in wlc_phy_workarounds_nphy_rev7()
16153 mod_phy_reg(pi, 0x299, (0x3 << 14), (0x1 << 14)); in wlc_phy_workarounds_nphy_rev7()
16154 mod_phy_reg(pi, 0x29d, (0x3 << 14), (0x1 << 14)); in wlc_phy_workarounds_nphy_rev7()
16156 tx_lpf_bw_ofdm_20mhz = wlc_phy_read_lpf_bw_ctl_nphy(pi, 0x154); in wlc_phy_workarounds_nphy_rev7()
16157 tx_lpf_bw_ofdm_40mhz = wlc_phy_read_lpf_bw_ctl_nphy(pi, 0x159); in wlc_phy_workarounds_nphy_rev7()
16158 tx_lpf_bw_11b = wlc_phy_read_lpf_bw_ctl_nphy(pi, 0x152); in wlc_phy_workarounds_nphy_rev7()
16160 if (PHY_IPA(pi)) { in wlc_phy_workarounds_nphy_rev7()
16162 if (((pi->pubpi.radiorev == 5) in wlc_phy_workarounds_nphy_rev7()
16163 && (CHSPEC_IS40(pi->radio_chanspec) == 1)) in wlc_phy_workarounds_nphy_rev7()
16164 || (pi->pubpi.radiorev == 7) in wlc_phy_workarounds_nphy_rev7()
16165 || (pi->pubpi.radiorev == 8)) { in wlc_phy_workarounds_nphy_rev7()
16168 read_radio_reg(pi, RADIO_2057_RCCAL_BCAP_VAL); in wlc_phy_workarounds_nphy_rev7()
16170 read_radio_reg(pi, RADIO_2057_RCCAL_SCAP_VAL); in wlc_phy_workarounds_nphy_rev7()
16175 if ((pi->pubpi.radiorev == 5) && in wlc_phy_workarounds_nphy_rev7()
16176 (CHSPEC_IS40(pi->radio_chanspec) == 1)) { in wlc_phy_workarounds_nphy_rev7()
16185 } else if ((pi->pubpi.radiorev == 7) in wlc_phy_workarounds_nphy_rev7()
16186 || (pi->pubpi.radiorev == 8)) { in wlc_phy_workarounds_nphy_rev7()
16191 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_rev7()
16209 if (pi->pubpi.radiorev == 5) { in wlc_phy_workarounds_nphy_rev7()
16215 read_radio_reg(pi, RADIO_2057_RCCAL_BCAP_VAL); in wlc_phy_workarounds_nphy_rev7()
16217 read_radio_reg(pi, RADIO_2057_RCCAL_SCAP_VAL); in wlc_phy_workarounds_nphy_rev7()
16244 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16247 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16250 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16253 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16256 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16259 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16262 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16265 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, in wlc_phy_workarounds_nphy_rev7()
16270 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 4), 1, 0x3, 0, in wlc_phy_workarounds_nphy_rev7()
16274 write_phy_reg(pi, 0x32f, 0x3); in wlc_phy_workarounds_nphy_rev7()
16276 if ((pi->pubpi.radiorev == 4) || (pi->pubpi.radiorev == 6)) in wlc_phy_workarounds_nphy_rev7()
16277 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 2), 1, 0x3, 0, in wlc_phy_workarounds_nphy_rev7()
16280 if ((pi->pubpi.radiorev == 3) || (pi->pubpi.radiorev == 4) || in wlc_phy_workarounds_nphy_rev7()
16281 (pi->pubpi.radiorev == 6)) { in wlc_phy_workarounds_nphy_rev7()
16282 if ((pi->sh->sromrev >= 8) in wlc_phy_workarounds_nphy_rev7()
16283 && (pi->sh->boardflags2 & BFL2_IPALVLSHIFT_3P3)) in wlc_phy_workarounds_nphy_rev7()
16287 write_radio_reg(pi, RADIO_2057_GPAIO_CONFIG, 0x5); in wlc_phy_workarounds_nphy_rev7()
16288 write_radio_reg(pi, RADIO_2057_GPAIO_SEL1, 0x30); in wlc_phy_workarounds_nphy_rev7()
16289 write_radio_reg(pi, RADIO_2057_GPAIO_SEL0, 0x0); in wlc_phy_workarounds_nphy_rev7()
16290 or_radio_reg(pi, RADIO_2057_RXTXBIAS_CONFIG_CORE0, 0x1); in wlc_phy_workarounds_nphy_rev7()
16291 or_radio_reg(pi, RADIO_2057_RXTXBIAS_CONFIG_CORE1, 0x1); in wlc_phy_workarounds_nphy_rev7()
16307 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_rev7()
16309 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16312 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16315 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16323 if (PHY_IPA(pi)) { in wlc_phy_workarounds_nphy_rev7()
16324 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_rev7()
16325 if ((pi->pubpi.radiorev == 3) in wlc_phy_workarounds_nphy_rev7()
16326 || (pi->pubpi.radiorev == 4) in wlc_phy_workarounds_nphy_rev7()
16327 || (pi->pubpi.radiorev == 6)) in wlc_phy_workarounds_nphy_rev7()
16332 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16338 if (pi->pubpi.radiorev == 5) { in wlc_phy_workarounds_nphy_rev7()
16340 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16344 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16348 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16352 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16356 WRITE_RADIO_REG4(pi, RADIO_2057, in wlc_phy_workarounds_nphy_rev7()
16361 } else if ((pi->pubpi.radiorev == 7) || in wlc_phy_workarounds_nphy_rev7()
16362 (pi->pubpi.radiorev == 8)) { in wlc_phy_workarounds_nphy_rev7()
16364 if (CHSPEC_IS40(pi->radio_chanspec) == 0) { in wlc_phy_workarounds_nphy_rev7()
16365 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16367 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16370 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16372 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16380 (pi->radio_chanspec)); in wlc_phy_workarounds_nphy_rev7()
16383 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16385 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, in wlc_phy_workarounds_nphy_rev7()
16391 if (pi->pubpi.radiorev != 5) { in wlc_phy_workarounds_nphy_rev7()
16393 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_workarounds_nphy_rev7()
16395 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_workarounds_nphy_rev7()
16401 if (pi->pubpi.radiorev == 4) { in wlc_phy_workarounds_nphy_rev7()
16402 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x05, 16, in wlc_phy_workarounds_nphy_rev7()
16404 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x15, 16, in wlc_phy_workarounds_nphy_rev7()
16408 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_workarounds_nphy_rev7()
16410 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_workarounds_nphy_rev7()
16412 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_workarounds_nphy_rev7()
16416 mod_phy_reg(pi, 0xa6, (0x1 << 2), (0x1 << 2)); in wlc_phy_workarounds_nphy_rev7()
16417 mod_phy_reg(pi, 0x8f, (0x1 << 2), (0x1 << 2)); in wlc_phy_workarounds_nphy_rev7()
16418 mod_phy_reg(pi, 0xa7, (0x1 << 2), (0x1 << 2)); in wlc_phy_workarounds_nphy_rev7()
16419 mod_phy_reg(pi, 0xa5, (0x1 << 2), (0x1 << 2)); in wlc_phy_workarounds_nphy_rev7()
16421 mod_phy_reg(pi, 0xa6, (0x1 << 0), 0); in wlc_phy_workarounds_nphy_rev7()
16422 mod_phy_reg(pi, 0x8f, (0x1 << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_rev7()
16423 mod_phy_reg(pi, 0xa7, (0x1 << 0), 0); in wlc_phy_workarounds_nphy_rev7()
16424 mod_phy_reg(pi, 0xa5, (0x1 << 0), (0x1 << 0)); in wlc_phy_workarounds_nphy_rev7()
16426 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x05, 16, in wlc_phy_workarounds_nphy_rev7()
16428 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x15, 16, in wlc_phy_workarounds_nphy_rev7()
16431 mod_phy_reg(pi, 0xa6, (0x1 << 2), 0); in wlc_phy_workarounds_nphy_rev7()
16432 mod_phy_reg(pi, 0x8f, (0x1 << 2), 0); in wlc_phy_workarounds_nphy_rev7()
16433 mod_phy_reg(pi, 0xa7, (0x1 << 2), 0); in wlc_phy_workarounds_nphy_rev7()
16434 mod_phy_reg(pi, 0xa5, (0x1 << 2), 0); in wlc_phy_workarounds_nphy_rev7()
16437 write_phy_reg(pi, 0x6a, 0x2); in wlc_phy_workarounds_nphy_rev7()
16439 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, 256, 32, in wlc_phy_workarounds_nphy_rev7()
16442 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x138, 16, in wlc_phy_workarounds_nphy_rev7()
16445 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, 0x141, 16, in wlc_phy_workarounds_nphy_rev7()
16448 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 3, 0x133, 16, in wlc_phy_workarounds_nphy_rev7()
16451 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x146, 16, in wlc_phy_workarounds_nphy_rev7()
16454 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, 0x123, 16, in wlc_phy_workarounds_nphy_rev7()
16457 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 1, 0x12A, 16, in wlc_phy_workarounds_nphy_rev7()
16460 if (CHSPEC_IS40(pi->radio_chanspec) == 0) { in wlc_phy_workarounds_nphy_rev7()
16461 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, 3, in wlc_phy_workarounds_nphy_rev7()
16463 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_workarounds_nphy_rev7()
16467 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, 3, in wlc_phy_workarounds_nphy_rev7()
16471 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_workarounds_nphy_rev7()
16475 wlc_phy_workarounds_nphy_gainctrl(pi); in wlc_phy_workarounds_nphy_rev7()
16477 pdetrange = (CHSPEC_IS5G(pi->radio_chanspec)) ? in wlc_phy_workarounds_nphy_rev7()
16478 pi->srom_fem5g.pdetrange : pi->srom_fem2g.pdetrange; in wlc_phy_workarounds_nphy_rev7()
16481 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_workarounds_nphy_rev7()
16502 if (pi->pubpi.radioid == BCM2057_ID) { in wlc_phy_workarounds_nphy_rev7()
16503 if ((pi->pubpi.radiorev == 5) in wlc_phy_workarounds_nphy_rev7()
16504 || (pi->pubpi.radiorev == 7) in wlc_phy_workarounds_nphy_rev7()
16505 || (pi->pubpi.radiorev == 8)) { in wlc_phy_workarounds_nphy_rev7()
16539 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x08, 16, in wlc_phy_workarounds_nphy_rev7()
16541 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x18, 16, in wlc_phy_workarounds_nphy_rev7()
16543 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x0c, 16, in wlc_phy_workarounds_nphy_rev7()
16545 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, 0x1c, 16, in wlc_phy_workarounds_nphy_rev7()
16549 static void wlc_phy_workarounds_nphy_rev3(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_rev3() argument
16605 write_phy_reg(pi, 0x23f, 0x1f8); in wlc_phy_workarounds_nphy_rev3()
16606 write_phy_reg(pi, 0x240, 0x1f8); in wlc_phy_workarounds_nphy_rev3()
16608 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev3()
16611 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev3()
16620 write_phy_reg(pi, 0x145, alpha0); in wlc_phy_workarounds_nphy_rev3()
16621 write_phy_reg(pi, 0x146, alpha1); in wlc_phy_workarounds_nphy_rev3()
16622 write_phy_reg(pi, 0x147, alpha2); in wlc_phy_workarounds_nphy_rev3()
16623 write_phy_reg(pi, 0x148, beta0); in wlc_phy_workarounds_nphy_rev3()
16624 write_phy_reg(pi, 0x149, beta1); in wlc_phy_workarounds_nphy_rev3()
16625 write_phy_reg(pi, 0x14a, beta2); in wlc_phy_workarounds_nphy_rev3()
16627 write_phy_reg(pi, 0x38, 0xC); in wlc_phy_workarounds_nphy_rev3()
16628 write_phy_reg(pi, 0x2ae, 0xC); in wlc_phy_workarounds_nphy_rev3()
16630 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_TX2RX, in wlc_phy_workarounds_nphy_rev3()
16635 if (PHY_IPA(pi)) in wlc_phy_workarounds_nphy_rev3()
16636 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX, in wlc_phy_workarounds_nphy_rev3()
16641 if ((pi->sh->hw_phyrxchain != 0x3) && in wlc_phy_workarounds_nphy_rev3()
16642 (pi->sh->hw_phyrxchain != pi->sh->hw_phytxchain)) { in wlc_phy_workarounds_nphy_rev3()
16644 if (PHY_IPA(pi)) { in wlc_phy_workarounds_nphy_rev3()
16650 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX, in wlc_phy_workarounds_nphy_rev3()
16656 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_workarounds_nphy_rev3()
16657 write_phy_reg(pi, 0x6a, 0x2); in wlc_phy_workarounds_nphy_rev3()
16659 write_phy_reg(pi, 0x6a, 0x9c40); in wlc_phy_workarounds_nphy_rev3()
16661 mod_phy_reg(pi, 0x294, (0xf << 8), (7 << 8)); in wlc_phy_workarounds_nphy_rev3()
16663 if (CHSPEC_IS40(pi->radio_chanspec) == 0) { in wlc_phy_workarounds_nphy_rev3()
16664 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, 3, in wlc_phy_workarounds_nphy_rev3()
16666 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_workarounds_nphy_rev3()
16670 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, 3, in wlc_phy_workarounds_nphy_rev3()
16674 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_workarounds_nphy_rev3()
16678 wlc_phy_workarounds_nphy_gainctrl(pi); in wlc_phy_workarounds_nphy_rev3()
16680 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x00, 16, in wlc_phy_workarounds_nphy_rev3()
16682 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x10, 16, in wlc_phy_workarounds_nphy_rev3()
16685 pdetrange = (CHSPEC_IS5G(pi->radio_chanspec)) ? in wlc_phy_workarounds_nphy_rev3()
16686 pi->srom_fem5g.pdetrange : pi->srom_fem2g.pdetrange; in wlc_phy_workarounds_nphy_rev3()
16689 if (NREV_GE(pi->pubpi.phy_rev, 4)) { in wlc_phy_workarounds_nphy_rev3()
16696 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_workarounds_nphy_rev3()
16715 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16717 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16719 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16721 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16724 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16726 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16728 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16730 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16737 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_workarounds_nphy_rev3()
16739 wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_workarounds_nphy_rev3()
16747 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_workarounds_nphy_rev3()
16752 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16754 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16756 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16758 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16761 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_workarounds_nphy_rev3()
16762 if ((NREV_GE(pi->pubpi.phy_rev, 4)) && in wlc_phy_workarounds_nphy_rev3()
16767 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16769 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16771 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16773 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16781 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_workarounds_nphy_rev3()
16796 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16798 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16803 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16805 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 4, in wlc_phy_workarounds_nphy_rev3()
16809 write_radio_reg(pi, (RADIO_2056_RX_MIXA_MAST_BIAS | RADIO_2056_RX0), 0x0); in wlc_phy_workarounds_nphy_rev3()
16810 write_radio_reg(pi, (RADIO_2056_RX_MIXA_MAST_BIAS | RADIO_2056_RX1), 0x0); in wlc_phy_workarounds_nphy_rev3()
16812 write_radio_reg(pi, (RADIO_2056_RX_MIXA_BIAS_MAIN | RADIO_2056_RX0), 0x6); in wlc_phy_workarounds_nphy_rev3()
16813 write_radio_reg(pi, (RADIO_2056_RX_MIXA_BIAS_MAIN | RADIO_2056_RX1), 0x6); in wlc_phy_workarounds_nphy_rev3()
16815 write_radio_reg(pi, (RADIO_2056_RX_MIXA_BIAS_AUX | RADIO_2056_RX0), 0x7); in wlc_phy_workarounds_nphy_rev3()
16816 write_radio_reg(pi, (RADIO_2056_RX_MIXA_BIAS_AUX | RADIO_2056_RX1), 0x7); in wlc_phy_workarounds_nphy_rev3()
16818 write_radio_reg(pi, (RADIO_2056_RX_MIXA_LOB_BIAS | RADIO_2056_RX0), 0x88); in wlc_phy_workarounds_nphy_rev3()
16819 write_radio_reg(pi, (RADIO_2056_RX_MIXA_LOB_BIAS | RADIO_2056_RX1), 0x88); in wlc_phy_workarounds_nphy_rev3()
16821 write_radio_reg(pi, (RADIO_2056_RX_MIXA_CMFB_IDAC | RADIO_2056_RX0), 0x0); in wlc_phy_workarounds_nphy_rev3()
16822 write_radio_reg(pi, (RADIO_2056_RX_MIXA_CMFB_IDAC | RADIO_2056_RX1), 0x0); in wlc_phy_workarounds_nphy_rev3()
16824 write_radio_reg(pi, (RADIO_2056_RX_MIXG_CMFB_IDAC | RADIO_2056_RX0), 0x0); in wlc_phy_workarounds_nphy_rev3()
16825 write_radio_reg(pi, (RADIO_2056_RX_MIXG_CMFB_IDAC | RADIO_2056_RX1), 0x0); in wlc_phy_workarounds_nphy_rev3()
16827 triso = (CHSPEC_IS5G(pi->radio_chanspec)) ? in wlc_phy_workarounds_nphy_rev3()
16828 pi->srom_fem5g.triso : pi->srom_fem2g.triso; in wlc_phy_workarounds_nphy_rev3()
16830 wlc_phy_war_force_trsw_to_R_cliplo_nphy(pi, PHY_CORE_0); in wlc_phy_workarounds_nphy_rev3()
16831 wlc_phy_war_force_trsw_to_R_cliplo_nphy(pi, PHY_CORE_1); in wlc_phy_workarounds_nphy_rev3()
16834 wlc_phy_war_txchain_upd_nphy(pi, pi->sh->hw_phytxchain); in wlc_phy_workarounds_nphy_rev3()
16836 if (((pi->sh->boardflags2 & BFL2_APLL_WAR) && in wlc_phy_workarounds_nphy_rev3()
16837 (CHSPEC_IS5G(pi->radio_chanspec))) || in wlc_phy_workarounds_nphy_rev3()
16838 (((pi->sh->boardflags2 & BFL2_GPLL_WAR) || in wlc_phy_workarounds_nphy_rev3()
16839 (pi->sh->boardflags2 & BFL2_GPLL_WAR2)) && in wlc_phy_workarounds_nphy_rev3()
16840 (CHSPEC_IS2G(pi->radio_chanspec)))) { in wlc_phy_workarounds_nphy_rev3()
16849 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev3()
16851 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev3()
16853 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CMPMETRICDATAWEIGHTTBL, in wlc_phy_workarounds_nphy_rev3()
16856 if (NREV_IS(pi->pubpi.phy_rev, 4)) { in wlc_phy_workarounds_nphy_rev3()
16857 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_workarounds_nphy_rev3()
16858 write_radio_reg(pi, in wlc_phy_workarounds_nphy_rev3()
16861 write_radio_reg(pi, in wlc_phy_workarounds_nphy_rev3()
16867 if (!pi->edcrs_threshold_lock) { in wlc_phy_workarounds_nphy_rev3()
16868 write_phy_reg(pi, 0x224, 0x3eb); in wlc_phy_workarounds_nphy_rev3()
16869 write_phy_reg(pi, 0x225, 0x3eb); in wlc_phy_workarounds_nphy_rev3()
16870 write_phy_reg(pi, 0x226, 0x341); in wlc_phy_workarounds_nphy_rev3()
16871 write_phy_reg(pi, 0x227, 0x341); in wlc_phy_workarounds_nphy_rev3()
16872 write_phy_reg(pi, 0x228, 0x42b); in wlc_phy_workarounds_nphy_rev3()
16873 write_phy_reg(pi, 0x229, 0x42b); in wlc_phy_workarounds_nphy_rev3()
16874 write_phy_reg(pi, 0x22a, 0x381); in wlc_phy_workarounds_nphy_rev3()
16875 write_phy_reg(pi, 0x22b, 0x381); in wlc_phy_workarounds_nphy_rev3()
16876 write_phy_reg(pi, 0x22c, 0x42b); in wlc_phy_workarounds_nphy_rev3()
16877 write_phy_reg(pi, 0x22d, 0x42b); in wlc_phy_workarounds_nphy_rev3()
16878 write_phy_reg(pi, 0x22e, 0x381); in wlc_phy_workarounds_nphy_rev3()
16879 write_phy_reg(pi, 0x22f, 0x381); in wlc_phy_workarounds_nphy_rev3()
16882 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_workarounds_nphy_rev3()
16884 if (pi->sh->boardflags2 & BFL2_SINGLEANT_CCK) in wlc_phy_workarounds_nphy_rev3()
16885 wlapi_bmac_mhf(pi->sh->physhim, MHF4, in wlc_phy_workarounds_nphy_rev3()
16891 static void wlc_phy_workarounds_nphy_rev1(struct brcms_phy *pi) in wlc_phy_workarounds_nphy_rev1() argument
16917 if (pi->sh->boardflags2 & BFL2_SKWRKFEM_BRD || in wlc_phy_workarounds_nphy_rev1()
16918 (pi->sh->boardtype == 0x8b)) { in wlc_phy_workarounds_nphy_rev1()
16925 if (CHSPEC_IS5G(pi->radio_chanspec) && pi->phy_5g_pwrgain) { in wlc_phy_workarounds_nphy_rev1()
16926 and_radio_reg(pi, RADIO_2055_CORE1_TX_RF_SPARE, 0xf7); in wlc_phy_workarounds_nphy_rev1()
16927 and_radio_reg(pi, RADIO_2055_CORE2_TX_RF_SPARE, 0xf7); in wlc_phy_workarounds_nphy_rev1()
16929 or_radio_reg(pi, RADIO_2055_CORE1_TX_RF_SPARE, 0x8); in wlc_phy_workarounds_nphy_rev1()
16930 or_radio_reg(pi, RADIO_2055_CORE2_TX_RF_SPARE, 0x8); in wlc_phy_workarounds_nphy_rev1()
16934 wlc_phy_table_write_nphy(pi, 8, 1, 0, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16935 wlc_phy_table_write_nphy(pi, 8, 1, 0x10, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16937 if (NREV_LT(pi->pubpi.phy_rev, 3)) { in wlc_phy_workarounds_nphy_rev1()
16939 wlc_phy_table_write_nphy(pi, 8, 1, 0x02, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16940 wlc_phy_table_write_nphy(pi, 8, 1, 0x12, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16943 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_workarounds_nphy_rev1()
16945 wlc_phy_table_write_nphy(pi, 8, 1, 0x08, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16946 wlc_phy_table_write_nphy(pi, 8, 1, 0x18, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16949 wlc_phy_table_write_nphy(pi, 8, 1, 0x07, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16950 wlc_phy_table_write_nphy(pi, 8, 1, 0x17, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16953 wlc_phy_table_write_nphy(pi, 8, 1, 0x06, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16954 wlc_phy_table_write_nphy(pi, 8, 1, 0x16, 16, &regval); in wlc_phy_workarounds_nphy_rev1()
16957 write_phy_reg(pi, 0xf8, 0x02d8); in wlc_phy_workarounds_nphy_rev1()
16958 write_phy_reg(pi, 0xf9, 0x0301); in wlc_phy_workarounds_nphy_rev1()
16959 write_phy_reg(pi, 0xfa, 0x02d8); in wlc_phy_workarounds_nphy_rev1()
16960 write_phy_reg(pi, 0xfb, 0x0301); in wlc_phy_workarounds_nphy_rev1()
16962 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX, rfseq_rx2tx_events, in wlc_phy_workarounds_nphy_rev1()
16966 wlc_phy_set_rfseq_nphy(pi, NPHY_RFSEQ_TX2RX, rfseq_tx2rx_events, in wlc_phy_workarounds_nphy_rev1()
16970 wlc_phy_workarounds_nphy_gainctrl(pi); in wlc_phy_workarounds_nphy_rev1()
16972 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_workarounds_nphy_rev1()
16974 if (read_phy_reg(pi, 0xa0) & NPHY_MLenable) in wlc_phy_workarounds_nphy_rev1()
16975 wlapi_bmac_mhf(pi->sh->physhim, MHF3, in wlc_phy_workarounds_nphy_rev1()
16979 } else if (NREV_IS(pi->pubpi.phy_rev, 2)) { in wlc_phy_workarounds_nphy_rev1()
16980 write_phy_reg(pi, 0x1e3, 0x0); in wlc_phy_workarounds_nphy_rev1()
16981 write_phy_reg(pi, 0x1e4, 0x0); in wlc_phy_workarounds_nphy_rev1()
16984 if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_workarounds_nphy_rev1()
16985 mod_phy_reg(pi, 0x90, (0x1 << 7), 0); in wlc_phy_workarounds_nphy_rev1()
16993 write_phy_reg(pi, 0x145, alpha0); in wlc_phy_workarounds_nphy_rev1()
16994 write_phy_reg(pi, 0x146, alpha1); in wlc_phy_workarounds_nphy_rev1()
16995 write_phy_reg(pi, 0x147, alpha2); in wlc_phy_workarounds_nphy_rev1()
16996 write_phy_reg(pi, 0x148, beta0); in wlc_phy_workarounds_nphy_rev1()
16997 write_phy_reg(pi, 0x149, beta1); in wlc_phy_workarounds_nphy_rev1()
16998 write_phy_reg(pi, 0x14a, beta2); in wlc_phy_workarounds_nphy_rev1()
17000 if (NREV_LT(pi->pubpi.phy_rev, 3)) { in wlc_phy_workarounds_nphy_rev1()
17001 mod_phy_reg(pi, 0x142, (0xf << 12), 0); in wlc_phy_workarounds_nphy_rev1()
17003 write_phy_reg(pi, 0x192, 0xb5); in wlc_phy_workarounds_nphy_rev1()
17004 write_phy_reg(pi, 0x193, 0xa4); in wlc_phy_workarounds_nphy_rev1()
17005 write_phy_reg(pi, 0x194, 0x0); in wlc_phy_workarounds_nphy_rev1()
17008 if (NREV_IS(pi->pubpi.phy_rev, 2)) in wlc_phy_workarounds_nphy_rev1()
17009 mod_phy_reg(pi, 0x221, in wlc_phy_workarounds_nphy_rev1()
17014 static void wlc_phy_workarounds_nphy(struct brcms_phy *pi) in wlc_phy_workarounds_nphy() argument
17016 if (CHSPEC_IS5G(pi->radio_chanspec)) in wlc_phy_workarounds_nphy()
17017 wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 0); in wlc_phy_workarounds_nphy()
17019 wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_cck_en, 1); in wlc_phy_workarounds_nphy()
17021 if (pi->phyhang_avoid) in wlc_phy_workarounds_nphy()
17022 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_workarounds_nphy()
17024 or_phy_reg(pi, 0xb1, NPHY_IQFlip_ADC1 | NPHY_IQFlip_ADC2); in wlc_phy_workarounds_nphy()
17026 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_workarounds_nphy()
17027 wlc_phy_workarounds_nphy_rev7(pi); in wlc_phy_workarounds_nphy()
17028 else if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_workarounds_nphy()
17029 wlc_phy_workarounds_nphy_rev3(pi); in wlc_phy_workarounds_nphy()
17031 wlc_phy_workarounds_nphy_rev1(pi); in wlc_phy_workarounds_nphy()
17033 if (pi->phyhang_avoid) in wlc_phy_workarounds_nphy()
17034 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_workarounds_nphy()
17037 static void wlc_phy_extpa_set_tx_digi_filts_nphy(struct brcms_phy *pi) in wlc_phy_extpa_set_tx_digi_filts_nphy() argument
17043 write_phy_reg(pi, addr_offset + j, in wlc_phy_extpa_set_tx_digi_filts_nphy()
17047 static void wlc_phy_clip_det_nphy(struct brcms_phy *pi, u8 write, u16 *vals) in wlc_phy_clip_det_nphy() argument
17051 vals[0] = read_phy_reg(pi, 0x2c); in wlc_phy_clip_det_nphy()
17052 vals[1] = read_phy_reg(pi, 0x42); in wlc_phy_clip_det_nphy()
17054 write_phy_reg(pi, 0x2c, vals[0]); in wlc_phy_clip_det_nphy()
17055 write_phy_reg(pi, 0x42, vals[1]); in wlc_phy_clip_det_nphy()
17059 static void wlc_phy_ipa_internal_tssi_setup_nphy(struct brcms_phy *pi) in wlc_phy_ipa_internal_tssi_setup_nphy() argument
17063 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17064 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17065 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17066 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17068 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17071 if (pi->pubpi.radiorev != 5) in wlc_phy_ipa_internal_tssi_setup_nphy()
17072 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17075 if (!NREV_IS(pi->pubpi.phy_rev, 7)) in wlc_phy_ipa_internal_tssi_setup_nphy()
17076 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17079 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17082 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17084 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17086 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17089 if (pi->pubpi.radiorev != 5) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17090 if (!NREV_IS(pi->pubpi.phy_rev, 7)) in wlc_phy_ipa_internal_tssi_setup_nphy()
17091 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_ipa_internal_tssi_setup_nphy()
17095 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_ipa_internal_tssi_setup_nphy()
17100 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, IQCAL_VCM_HG, in wlc_phy_ipa_internal_tssi_setup_nphy()
17102 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, IQCAL_IDAC, in wlc_phy_ipa_internal_tssi_setup_nphy()
17104 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TSSI_VCM, in wlc_phy_ipa_internal_tssi_setup_nphy()
17106 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TSSI_MISC1, in wlc_phy_ipa_internal_tssi_setup_nphy()
17110 WRITE_RADIO_SYN(pi, RADIO_2056, RESERVED_ADDR31, in wlc_phy_ipa_internal_tssi_setup_nphy()
17111 (CHSPEC_IS2G(pi->radio_chanspec)) ? 0x128 : in wlc_phy_ipa_internal_tssi_setup_nphy()
17113 WRITE_RADIO_SYN(pi, RADIO_2056, RESERVED_ADDR30, 0x0); in wlc_phy_ipa_internal_tssi_setup_nphy()
17114 WRITE_RADIO_SYN(pi, RADIO_2056, GPIO_MASTER1, 0x29); in wlc_phy_ipa_internal_tssi_setup_nphy()
17116 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17117 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, IQCAL_VCM_HG, in wlc_phy_ipa_internal_tssi_setup_nphy()
17119 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, IQCAL_IDAC, in wlc_phy_ipa_internal_tssi_setup_nphy()
17121 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, TSSI_VCM, in wlc_phy_ipa_internal_tssi_setup_nphy()
17123 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, TX_AMP_DET, in wlc_phy_ipa_internal_tssi_setup_nphy()
17125 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, TSSI_MISC1, in wlc_phy_ipa_internal_tssi_setup_nphy()
17127 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, TSSI_MISC2, in wlc_phy_ipa_internal_tssi_setup_nphy()
17129 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, TSSI_MISC3, in wlc_phy_ipa_internal_tssi_setup_nphy()
17132 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_ipa_internal_tssi_setup_nphy()
17133 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17136 if (pi->pubpi.radiorev != 5) in wlc_phy_ipa_internal_tssi_setup_nphy()
17137 WRITE_RADIO_REG2(pi, RADIO_2056, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17139 if (NREV_GE(pi->pubpi.phy_rev, 5)) in wlc_phy_ipa_internal_tssi_setup_nphy()
17140 WRITE_RADIO_REG2(pi, RADIO_2056, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17143 WRITE_RADIO_REG2(pi, RADIO_2056, TX, in wlc_phy_ipa_internal_tssi_setup_nphy()
17145 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17148 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17150 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17152 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17154 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_ipa_internal_tssi_setup_nphy()
17162 wlc_phy_rfctrl_override_nphy(struct brcms_phy *pi, u16 field, u16 value, in wlc_phy_rfctrl_override_nphy() argument
17170 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrl_override_nphy()
17275 and_phy_reg(pi, en_addr, ~en_mask); in wlc_phy_rfctrl_override_nphy()
17276 and_phy_reg(pi, val_addr, ~val_mask); in wlc_phy_rfctrl_override_nphy()
17281 or_phy_reg(pi, en_addr, en_mask); in wlc_phy_rfctrl_override_nphy()
17284 mod_phy_reg(pi, val_addr, in wlc_phy_rfctrl_override_nphy()
17294 and_phy_reg(pi, 0xec, ~field); in wlc_phy_rfctrl_override_nphy()
17297 or_phy_reg(pi, 0xec, field); in wlc_phy_rfctrl_override_nphy()
17395 mod_phy_reg(pi, addr, mask, (value << shift)); in wlc_phy_rfctrl_override_nphy()
17398 or_phy_reg(pi, 0xec, (0x1 << 0)); in wlc_phy_rfctrl_override_nphy()
17399 or_phy_reg(pi, 0x78, (0x1 << 0)); in wlc_phy_rfctrl_override_nphy()
17401 and_phy_reg(pi, 0xec, ~(0x1 << 0)); in wlc_phy_rfctrl_override_nphy()
17405 static void wlc_phy_txpwrctrl_idle_tssi_nphy(struct brcms_phy *pi) in wlc_phy_txpwrctrl_idle_tssi_nphy() argument
17410 if (SCAN_RM_IN_PROGRESS(pi) || PLT_INPROG_PHY(pi) || PHY_MUTED(pi)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17414 if (PHY_IPA(pi)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17415 wlc_phy_ipa_internal_tssi_setup_nphy(pi); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17417 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17418 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 12), in wlc_phy_txpwrctrl_idle_tssi_nphy()
17421 else if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17422 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 13), 0, 3, 0); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17424 wlc_phy_stopplayback_nphy(pi); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17426 wlc_phy_tx_tone_nphy(pi, 4000, 0, 0, 0, false); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17430 wlc_phy_poll_rssi_nphy(pi, (u8) NPHY_RSSI_SEL_TSSI_2G, rssi_buf, in wlc_phy_txpwrctrl_idle_tssi_nphy()
17432 wlc_phy_stopplayback_nphy(pi); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17433 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_OFF, 0); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17435 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17436 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 12), in wlc_phy_txpwrctrl_idle_tssi_nphy()
17439 else if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwrctrl_idle_tssi_nphy()
17440 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 13), 0, 3, 1); in wlc_phy_txpwrctrl_idle_tssi_nphy()
17442 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_idle_tssi_nphy()
17444 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_tssi_2g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17446 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_tssi_5g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17449 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_tssi_2g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17451 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_tssi_5g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17454 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_tssi_2g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17457 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_tssi_2g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17460 pi->nphy_pwrctrl_info[PHY_CORE_0].idle_tssi_5g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17462 pi->nphy_pwrctrl_info[PHY_CORE_1].idle_tssi_5g = in wlc_phy_txpwrctrl_idle_tssi_nphy()
17468 static void wlc_phy_txpwr_limit_to_tbl_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_limit_to_tbl_nphy() argument
17473 pi->adj_pwr_tbl_nphy[idx] = pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17483 if (CHSPEC_IS40(pi->radio_chanspec) in wlc_phy_txpwr_limit_to_tbl_nphy()
17487 idx = (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_txpwr_limit_to_tbl_nphy()
17495 idx = (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_txpwr_limit_to_tbl_nphy()
17501 idx = (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_txpwr_limit_to_tbl_nphy()
17507 idx = (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_txpwr_limit_to_tbl_nphy()
17512 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17513 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17515 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17516 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17517 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17518 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17519 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17520 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17522 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17523 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17524 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17525 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17526 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17527 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17528 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17529 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17531 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17532 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17533 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17534 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17535 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17536 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17537 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17538 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17540 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17541 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17542 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17543 pi->tx_power_offset[idx++]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17544 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17545 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17547 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17548 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17550 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17551 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17552 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17553 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17554 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17555 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17556 pi->adj_pwr_tbl_nphy[4 + 4 * (idx2++) + i] = in wlc_phy_txpwr_limit_to_tbl_nphy()
17557 pi->tx_power_offset[idx]; in wlc_phy_txpwr_limit_to_tbl_nphy()
17561 static void wlc_phy_txpwrctrl_pwr_setup_nphy(struct brcms_phy *pi) in wlc_phy_txpwrctrl_pwr_setup_nphy() argument
17573 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17574 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, MCTL_PHYLOCK); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17575 (void)bcma_read32(pi->d11core, D11REGOFFS(maccontrol)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17579 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17580 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17582 or_phy_reg(pi, 0x122, (0x1 << 0)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17584 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17585 and_phy_reg(pi, 0x1e7, 0x7fff); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17587 or_phy_reg(pi, 0x1e7, (0x1 << 15)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17589 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17590 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, 0); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17592 if (pi->sh->sromrev < 4) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17593 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17594 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17603 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17606 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17607 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17608 a1[0] = pi->nphy_pwrctrl_info[0].pwrdet_2g_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17609 a1[1] = pi->nphy_pwrctrl_info[1].pwrdet_2g_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17610 b0[0] = pi->nphy_pwrctrl_info[0].pwrdet_2g_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17611 b0[1] = pi->nphy_pwrctrl_info[1].pwrdet_2g_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17612 b1[0] = pi->nphy_pwrctrl_info[0].pwrdet_2g_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17613 b1[1] = pi->nphy_pwrctrl_info[1].pwrdet_2g_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17616 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17617 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17618 a1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gl_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17619 a1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gl_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17620 b0[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gl_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17621 b0[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gl_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17622 b1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gl_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17623 b1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gl_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17626 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17627 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17628 a1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gm_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17629 a1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gm_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17630 b0[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gm_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17631 b0[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gm_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17632 b1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gm_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17633 b1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gm_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17636 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17637 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_5g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17638 a1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gh_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17639 a1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gh_a1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17640 b0[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gh_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17641 b0[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gh_b0; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17642 b1[0] = pi->nphy_pwrctrl_info[0].pwrdet_5gh_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17643 b1[1] = pi->nphy_pwrctrl_info[1].pwrdet_5gh_b1; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17646 idle_tssi[0] = pi->nphy_pwrctrl_info[0].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17647 idle_tssi[1] = pi->nphy_pwrctrl_info[1].idle_tssi_2g; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17659 target_pwr_qtrdbm[0] = (s8) pi->tx_power_max; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17660 target_pwr_qtrdbm[1] = (s8) pi->tx_power_max; in wlc_phy_txpwrctrl_pwr_setup_nphy()
17662 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17663 if (pi->srom_fem2g.tssipos) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17664 or_phy_reg(pi, 0x1e9, (0x1 << 14)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17666 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17668 if (PHY_IPA(pi)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17669 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17670 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17675 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17682 if (PHY_IPA(pi)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17684 write_radio_reg(pi, RADIO_2056_TX_TX_SSI_MUX | in wlc_phy_txpwrctrl_pwr_setup_nphy()
17687 (pi->radio_chanspec)) ? in wlc_phy_txpwrctrl_pwr_setup_nphy()
17689 write_radio_reg(pi, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17693 (pi->radio_chanspec)) ? in wlc_phy_txpwrctrl_pwr_setup_nphy()
17697 write_radio_reg(pi, RADIO_2056_TX_TX_SSI_MUX | in wlc_phy_txpwrctrl_pwr_setup_nphy()
17699 write_radio_reg(pi, RADIO_2056_TX_TX_SSI_MUX | in wlc_phy_txpwrctrl_pwr_setup_nphy()
17705 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17706 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, MCTL_PHYLOCK); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17707 (void)bcma_read32(pi->d11core, D11REGOFFS(maccontrol)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17711 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17712 mod_phy_reg(pi, 0x1e7, (0x7f << 0), in wlc_phy_txpwrctrl_pwr_setup_nphy()
17715 mod_phy_reg(pi, 0x1e7, (0x7f << 0), in wlc_phy_txpwrctrl_pwr_setup_nphy()
17718 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17719 mod_phy_reg(pi, 0x222, (0xff << 0), in wlc_phy_txpwrctrl_pwr_setup_nphy()
17721 else if (NREV_GT(pi->pubpi.phy_rev, 1)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17722 mod_phy_reg(pi, 0x222, (0xff << 0), in wlc_phy_txpwrctrl_pwr_setup_nphy()
17725 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17726 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, 0); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17728 write_phy_reg(pi, 0x1e8, (0x3 << 8) | (240 << 0)); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17730 write_phy_reg(pi, 0x1e9, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17733 write_phy_reg(pi, 0x1ea, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17747 if (NREV_LT(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_pwr_setup_nphy()
17757 wlc_phy_table_write_nphy(pi, tbl_id, tbl_len, tbl_offset, 32, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17761 wlc_phy_txpwr_limit_to_tbl_nphy(pi); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17762 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE1TXPWRCTL, 84, 64, 8, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17763 pi->adj_pwr_tbl_nphy); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17764 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE2TXPWRCTL, 84, 64, 8, in wlc_phy_txpwrctrl_pwr_setup_nphy()
17765 pi->adj_pwr_tbl_nphy); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17767 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_pwr_setup_nphy()
17768 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_txpwrctrl_pwr_setup_nphy()
17771 static u32 *wlc_phy_get_ipa_gaintbl_nphy(struct brcms_phy *pi) in wlc_phy_get_ipa_gaintbl_nphy() argument
17775 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_get_ipa_gaintbl_nphy()
17776 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_get_ipa_gaintbl_nphy()
17777 if ((pi->pubpi.radiorev == 4) in wlc_phy_get_ipa_gaintbl_nphy()
17778 || (pi->pubpi.radiorev == 6)) in wlc_phy_get_ipa_gaintbl_nphy()
17781 else if (pi->pubpi.radiorev == 3) in wlc_phy_get_ipa_gaintbl_nphy()
17784 else if (pi->pubpi.radiorev == 5) in wlc_phy_get_ipa_gaintbl_nphy()
17787 else if ((pi->pubpi.radiorev == 7) in wlc_phy_get_ipa_gaintbl_nphy()
17788 || (pi->pubpi.radiorev == 8)) in wlc_phy_get_ipa_gaintbl_nphy()
17791 } else if (NREV_IS(pi->pubpi.phy_rev, 6)) { in wlc_phy_get_ipa_gaintbl_nphy()
17793 if (pi->sh->chip == BCMA_CHIP_ID_BCM47162) in wlc_phy_get_ipa_gaintbl_nphy()
17795 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_get_ipa_gaintbl_nphy()
17802 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_get_ipa_gaintbl_nphy()
17803 if ((pi->pubpi.radiorev == 3) || in wlc_phy_get_ipa_gaintbl_nphy()
17804 (pi->pubpi.radiorev == 4) || in wlc_phy_get_ipa_gaintbl_nphy()
17805 (pi->pubpi.radiorev == 6)) in wlc_phy_get_ipa_gaintbl_nphy()
17807 else if ((pi->pubpi.radiorev == 7) in wlc_phy_get_ipa_gaintbl_nphy()
17808 || (pi->pubpi.radiorev == 8)) in wlc_phy_get_ipa_gaintbl_nphy()
17819 static void wlc_phy_restore_rssical_nphy(struct brcms_phy *pi) in wlc_phy_restore_rssical_nphy() argument
17821 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_restore_rssical_nphy()
17822 if (pi->nphy_rssical_chanspec_2G == 0) in wlc_phy_restore_rssical_nphy()
17825 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_restore_rssical_nphy()
17826 mod_radio_reg(pi, RADIO_2057_NB_MASTER_CORE0, in wlc_phy_restore_rssical_nphy()
17828 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17830 mod_radio_reg(pi, RADIO_2057_NB_MASTER_CORE1, in wlc_phy_restore_rssical_nphy()
17832 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17835 mod_radio_reg(pi, in wlc_phy_restore_rssical_nphy()
17838 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17840 mod_radio_reg(pi, in wlc_phy_restore_rssical_nphy()
17843 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17847 write_phy_reg(pi, 0x1a6, in wlc_phy_restore_rssical_nphy()
17848 pi->rssical_cache.rssical_phyregs_2G[0]); in wlc_phy_restore_rssical_nphy()
17849 write_phy_reg(pi, 0x1ac, in wlc_phy_restore_rssical_nphy()
17850 pi->rssical_cache.rssical_phyregs_2G[1]); in wlc_phy_restore_rssical_nphy()
17851 write_phy_reg(pi, 0x1b2, in wlc_phy_restore_rssical_nphy()
17852 pi->rssical_cache.rssical_phyregs_2G[2]); in wlc_phy_restore_rssical_nphy()
17853 write_phy_reg(pi, 0x1b8, in wlc_phy_restore_rssical_nphy()
17854 pi->rssical_cache.rssical_phyregs_2G[3]); in wlc_phy_restore_rssical_nphy()
17855 write_phy_reg(pi, 0x1a4, in wlc_phy_restore_rssical_nphy()
17856 pi->rssical_cache.rssical_phyregs_2G[4]); in wlc_phy_restore_rssical_nphy()
17857 write_phy_reg(pi, 0x1aa, in wlc_phy_restore_rssical_nphy()
17858 pi->rssical_cache.rssical_phyregs_2G[5]); in wlc_phy_restore_rssical_nphy()
17859 write_phy_reg(pi, 0x1b0, in wlc_phy_restore_rssical_nphy()
17860 pi->rssical_cache.rssical_phyregs_2G[6]); in wlc_phy_restore_rssical_nphy()
17861 write_phy_reg(pi, 0x1b6, in wlc_phy_restore_rssical_nphy()
17862 pi->rssical_cache.rssical_phyregs_2G[7]); in wlc_phy_restore_rssical_nphy()
17863 write_phy_reg(pi, 0x1a5, in wlc_phy_restore_rssical_nphy()
17864 pi->rssical_cache.rssical_phyregs_2G[8]); in wlc_phy_restore_rssical_nphy()
17865 write_phy_reg(pi, 0x1ab, in wlc_phy_restore_rssical_nphy()
17866 pi->rssical_cache.rssical_phyregs_2G[9]); in wlc_phy_restore_rssical_nphy()
17867 write_phy_reg(pi, 0x1b1, in wlc_phy_restore_rssical_nphy()
17868 pi->rssical_cache.rssical_phyregs_2G[10]); in wlc_phy_restore_rssical_nphy()
17869 write_phy_reg(pi, 0x1b7, in wlc_phy_restore_rssical_nphy()
17870 pi->rssical_cache.rssical_phyregs_2G[11]); in wlc_phy_restore_rssical_nphy()
17873 if (pi->nphy_rssical_chanspec_5G == 0) in wlc_phy_restore_rssical_nphy()
17876 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_restore_rssical_nphy()
17877 mod_radio_reg(pi, RADIO_2057_NB_MASTER_CORE0, in wlc_phy_restore_rssical_nphy()
17879 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17881 mod_radio_reg(pi, RADIO_2057_NB_MASTER_CORE1, in wlc_phy_restore_rssical_nphy()
17883 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17886 mod_radio_reg(pi, in wlc_phy_restore_rssical_nphy()
17889 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17891 mod_radio_reg(pi, in wlc_phy_restore_rssical_nphy()
17894 pi->rssical_cache. in wlc_phy_restore_rssical_nphy()
17898 write_phy_reg(pi, 0x1a6, in wlc_phy_restore_rssical_nphy()
17899 pi->rssical_cache.rssical_phyregs_5G[0]); in wlc_phy_restore_rssical_nphy()
17900 write_phy_reg(pi, 0x1ac, in wlc_phy_restore_rssical_nphy()
17901 pi->rssical_cache.rssical_phyregs_5G[1]); in wlc_phy_restore_rssical_nphy()
17902 write_phy_reg(pi, 0x1b2, in wlc_phy_restore_rssical_nphy()
17903 pi->rssical_cache.rssical_phyregs_5G[2]); in wlc_phy_restore_rssical_nphy()
17904 write_phy_reg(pi, 0x1b8, in wlc_phy_restore_rssical_nphy()
17905 pi->rssical_cache.rssical_phyregs_5G[3]); in wlc_phy_restore_rssical_nphy()
17906 write_phy_reg(pi, 0x1a4, in wlc_phy_restore_rssical_nphy()
17907 pi->rssical_cache.rssical_phyregs_5G[4]); in wlc_phy_restore_rssical_nphy()
17908 write_phy_reg(pi, 0x1aa, in wlc_phy_restore_rssical_nphy()
17909 pi->rssical_cache.rssical_phyregs_5G[5]); in wlc_phy_restore_rssical_nphy()
17910 write_phy_reg(pi, 0x1b0, in wlc_phy_restore_rssical_nphy()
17911 pi->rssical_cache.rssical_phyregs_5G[6]); in wlc_phy_restore_rssical_nphy()
17912 write_phy_reg(pi, 0x1b6, in wlc_phy_restore_rssical_nphy()
17913 pi->rssical_cache.rssical_phyregs_5G[7]); in wlc_phy_restore_rssical_nphy()
17914 write_phy_reg(pi, 0x1a5, in wlc_phy_restore_rssical_nphy()
17915 pi->rssical_cache.rssical_phyregs_5G[8]); in wlc_phy_restore_rssical_nphy()
17916 write_phy_reg(pi, 0x1ab, in wlc_phy_restore_rssical_nphy()
17917 pi->rssical_cache.rssical_phyregs_5G[9]); in wlc_phy_restore_rssical_nphy()
17918 write_phy_reg(pi, 0x1b1, in wlc_phy_restore_rssical_nphy()
17919 pi->rssical_cache.rssical_phyregs_5G[10]); in wlc_phy_restore_rssical_nphy()
17920 write_phy_reg(pi, 0x1b7, in wlc_phy_restore_rssical_nphy()
17921 pi->rssical_cache.rssical_phyregs_5G[11]); in wlc_phy_restore_rssical_nphy()
17925 static void wlc_phy_internal_cal_txgain_nphy(struct brcms_phy *pi) in wlc_phy_internal_cal_txgain_nphy() argument
17929 pi->nphy_txcal_pwr_idx[0] = pi->nphy_cal_orig_pwr_idx[0]; in wlc_phy_internal_cal_txgain_nphy()
17930 pi->nphy_txcal_pwr_idx[1] = pi->nphy_cal_orig_pwr_idx[0]; in wlc_phy_internal_cal_txgain_nphy()
17931 wlc_phy_txpwr_index_nphy(pi, 1, pi->nphy_cal_orig_pwr_idx[0], true); in wlc_phy_internal_cal_txgain_nphy()
17932 wlc_phy_txpwr_index_nphy(pi, 2, pi->nphy_cal_orig_pwr_idx[1], true); in wlc_phy_internal_cal_txgain_nphy()
17934 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_internal_cal_txgain_nphy()
17937 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_internal_cal_txgain_nphy()
17945 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_internal_cal_txgain_nphy()
17949 static void wlc_phy_precal_txgain_nphy(struct brcms_phy *pi) in wlc_phy_precal_txgain_nphy() argument
17955 if (pi->use_int_tx_iqlo_cal_nphy) { in wlc_phy_precal_txgain_nphy()
17956 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_precal_txgain_nphy()
17957 if ((pi->pubpi.radiorev == 3) || in wlc_phy_precal_txgain_nphy()
17958 (pi->pubpi.radiorev == 4) || in wlc_phy_precal_txgain_nphy()
17959 (pi->pubpi.radiorev == 6)) { in wlc_phy_precal_txgain_nphy()
17961 pi->nphy_txcal_pwr_idx[0] = in wlc_phy_precal_txgain_nphy()
17963 pi->nphy_txcal_pwr_idx[1] = in wlc_phy_precal_txgain_nphy()
17966 pi, 3, in wlc_phy_precal_txgain_nphy()
17971 pi->nphy_txcal_pwr_idx[0] = in wlc_phy_precal_txgain_nphy()
17973 pi->nphy_txcal_pwr_idx[1] = in wlc_phy_precal_txgain_nphy()
17976 pi, 3, in wlc_phy_precal_txgain_nphy()
17982 } else if (NREV_LT(pi->pubpi.phy_rev, 5)) { in wlc_phy_precal_txgain_nphy()
17983 wlc_phy_cal_txgainctrl_nphy(pi, 11, false); in wlc_phy_precal_txgain_nphy()
17984 if (pi->sh->hw_phytxchain != 3) { in wlc_phy_precal_txgain_nphy()
17985 pi->nphy_txcal_pwr_idx[1] = in wlc_phy_precal_txgain_nphy()
17986 pi->nphy_txcal_pwr_idx[0]; in wlc_phy_precal_txgain_nphy()
17987 wlc_phy_txpwr_index_nphy(pi, 3, in wlc_phy_precal_txgain_nphy()
17988 pi-> in wlc_phy_precal_txgain_nphy()
17994 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_precal_txgain_nphy()
17995 if (PHY_IPA(pi)) { in wlc_phy_precal_txgain_nphy()
17996 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_precal_txgain_nphy()
17997 wlc_phy_cal_txgainctrl_nphy(pi, 12, in wlc_phy_precal_txgain_nphy()
18000 pi->nphy_txcal_pwr_idx[0] = 80; in wlc_phy_precal_txgain_nphy()
18001 pi->nphy_txcal_pwr_idx[1] = 80; in wlc_phy_precal_txgain_nphy()
18002 wlc_phy_txpwr_index_nphy(pi, 3, 80, in wlc_phy_precal_txgain_nphy()
18007 wlc_phy_internal_cal_txgain_nphy(pi); in wlc_phy_precal_txgain_nphy()
18011 } else if (NREV_IS(pi->pubpi.phy_rev, 6)) { in wlc_phy_precal_txgain_nphy()
18012 if (PHY_IPA(pi)) { in wlc_phy_precal_txgain_nphy()
18013 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_precal_txgain_nphy()
18014 wlc_phy_cal_txgainctrl_nphy(pi, 12, in wlc_phy_precal_txgain_nphy()
18017 wlc_phy_cal_txgainctrl_nphy(pi, 14, in wlc_phy_precal_txgain_nphy()
18020 wlc_phy_internal_cal_txgain_nphy(pi); in wlc_phy_precal_txgain_nphy()
18026 wlc_phy_cal_txgainctrl_nphy(pi, 10, false); in wlc_phy_precal_txgain_nphy()
18030 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, in wlc_phy_precal_txgain_nphy()
18031 &pi->nphy_txcal_bbmult); in wlc_phy_precal_txgain_nphy()
18035 wlc_phy_rfctrlintc_override_nphy(struct brcms_phy *pi, u8 field, u16 value, in wlc_phy_rfctrlintc_override_nphy() argument
18042 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_rfctrlintc_override_nphy()
18043 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_rfctrlintc_override_nphy()
18051 if (NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrlintc_override_nphy()
18055 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x91 : in wlc_phy_rfctrlintc_override_nphy()
18061 write_phy_reg(pi, (core == PHY_CORE_0) ? 0x91 : in wlc_phy_rfctrlintc_override_nphy()
18064 wlc_phy_force_rfseq_nphy(pi, in wlc_phy_rfctrlintc_override_nphy()
18068 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrlintc_override_nphy()
18073 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18078 or_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18083 and_phy_reg(pi, 0x2ff, (u16) in wlc_phy_rfctrlintc_override_nphy()
18085 or_phy_reg(pi, 0x2ff, (0x1 << 13)); in wlc_phy_rfctrlintc_override_nphy()
18086 or_phy_reg(pi, 0x2ff, (0x1 << 0)); in wlc_phy_rfctrlintc_override_nphy()
18093 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18100 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18109 mod_phy_reg(pi, 0x78, mask, val); in wlc_phy_rfctrlintc_override_nphy()
18111 SPINWAIT(((read_phy_reg(pi, 0x78) & val) in wlc_phy_rfctrlintc_override_nphy()
18113 if (WARN(read_phy_reg(pi, 0x78) & val, in wlc_phy_rfctrlintc_override_nphy()
18119 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18125 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrlintc_override_nphy()
18129 if (CHSPEC_IS5G(pi->radio_chanspec)) in wlc_phy_rfctrlintc_override_nphy()
18134 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18139 or_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18145 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rfctrlintc_override_nphy()
18152 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18159 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrlintc_override_nphy()
18160 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rfctrlintc_override_nphy()
18164 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18170 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18178 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18184 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18192 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18198 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rfctrlintc_override_nphy()
18205 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18212 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrlintc_override_nphy()
18213 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rfctrlintc_override_nphy()
18217 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18223 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18231 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18237 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18245 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18251 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rfctrlintc_override_nphy()
18258 mod_phy_reg(pi, in wlc_phy_rfctrlintc_override_nphy()
18269 wlc_phy_cal_txgainctrl_nphy(struct brcms_phy *pi, s32 dBm_targetpower, in wlc_phy_cal_txgainctrl_nphy() argument
18285 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_cal_txgainctrl_nphy()
18290 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_cal_txgainctrl_nphy()
18295 wlc_phy_txpwr_index_nphy(pi, 1, pi->nphy_cal_orig_pwr_idx[0], true); in wlc_phy_cal_txgainctrl_nphy()
18296 wlc_phy_txpwr_index_nphy(pi, 2, pi->nphy_cal_orig_pwr_idx[1], true); in wlc_phy_cal_txgainctrl_nphy()
18298 if (pi->phyhang_avoid) in wlc_phy_cal_txgainctrl_nphy()
18299 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_cal_txgainctrl_nphy()
18301 phyhang_avoid_state = pi->phyhang_avoid; in wlc_phy_cal_txgainctrl_nphy()
18302 pi->phyhang_avoid = false; in wlc_phy_cal_txgainctrl_nphy()
18304 phy_saveregs[0] = read_phy_reg(pi, 0x91); in wlc_phy_cal_txgainctrl_nphy()
18305 phy_saveregs[1] = read_phy_reg(pi, 0x92); in wlc_phy_cal_txgainctrl_nphy()
18306 phy_saveregs[2] = read_phy_reg(pi, 0xe7); in wlc_phy_cal_txgainctrl_nphy()
18307 phy_saveregs[3] = read_phy_reg(pi, 0xec); in wlc_phy_cal_txgainctrl_nphy()
18308 wlc_phy_rfctrlintc_override_nphy(pi, NPHY_RfctrlIntc_override_PA, 1, in wlc_phy_cal_txgainctrl_nphy()
18313 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_cal_txgainctrl_nphy()
18316 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_cal_txgainctrl_nphy()
18320 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_cal_txgainctrl_nphy()
18323 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_cal_txgainctrl_nphy()
18328 orig_BBConfig = read_phy_reg(pi, 0x01); in wlc_phy_cal_txgainctrl_nphy()
18329 mod_phy_reg(pi, 0x01, (0x1 << 15), 0); in wlc_phy_cal_txgainctrl_nphy()
18331 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &m0m1); in wlc_phy_cal_txgainctrl_nphy()
18333 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_cal_txgainctrl_nphy()
18334 txpwrindex = (s32) pi->nphy_cal_orig_pwr_idx[core]; in wlc_phy_cal_txgainctrl_nphy()
18338 wlc_phy_tx_tone_nphy(pi, freq_test, ampl_test, 0, 0, in wlc_phy_cal_txgainctrl_nphy()
18346 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &curr_m0m1); in wlc_phy_cal_txgainctrl_nphy()
18347 wlc_phy_table_write_nphy(pi, 15, 1, 95, 16, &curr_m0m1); in wlc_phy_cal_txgainctrl_nphy()
18351 wlc_phy_est_tonepwr_nphy(pi, qdBm_power, in wlc_phy_cal_txgainctrl_nphy()
18354 pi->nphy_bb_mult_save = 0; in wlc_phy_cal_txgainctrl_nphy()
18355 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_txgainctrl_nphy()
18365 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_cal_txgainctrl_nphy()
18366 if (NREV_IS(pi->pubpi.phy_rev, 4) && in wlc_phy_cal_txgainctrl_nphy()
18367 (pi->srom_fem5g.extpagain == 3)) { in wlc_phy_cal_txgainctrl_nphy()
18372 if (NREV_GE(pi->pubpi.phy_rev, 5) && in wlc_phy_cal_txgainctrl_nphy()
18373 (pi->srom_fem2g.extpagain == 3)) { in wlc_phy_cal_txgainctrl_nphy()
18379 wlc_phy_txpwr_index_nphy(pi, (1 << core), in wlc_phy_cal_txgainctrl_nphy()
18383 pi->nphy_txcal_pwr_idx[core] = (u8) txpwrindex; in wlc_phy_cal_txgainctrl_nphy()
18389 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &dbg_m0m1); in wlc_phy_cal_txgainctrl_nphy()
18391 wlc_phy_tx_tone_nphy(pi, freq_test, ampl_test, 0, 0, in wlc_phy_cal_txgainctrl_nphy()
18394 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &dbg_m0m1); in wlc_phy_cal_txgainctrl_nphy()
18395 wlc_phy_table_write_nphy(pi, 15, 1, 95, 16, &dbg_m0m1); in wlc_phy_cal_txgainctrl_nphy()
18399 wlc_phy_est_tonepwr_nphy(pi, qdBm_power, in wlc_phy_cal_txgainctrl_nphy()
18402 wlc_phy_table_read_nphy(pi, 7, 1, (0x110 + core), 16, in wlc_phy_cal_txgainctrl_nphy()
18406 pi->nphy_bb_mult_save = 0; in wlc_phy_cal_txgainctrl_nphy()
18407 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_txgainctrl_nphy()
18411 wlc_phy_txpwr_index_nphy(pi, 1, pi->nphy_txcal_pwr_idx[0], true); in wlc_phy_cal_txgainctrl_nphy()
18412 wlc_phy_txpwr_index_nphy(pi, 2, pi->nphy_txcal_pwr_idx[1], true); in wlc_phy_cal_txgainctrl_nphy()
18414 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &pi->nphy_txcal_bbmult); in wlc_phy_cal_txgainctrl_nphy()
18416 write_phy_reg(pi, 0x01, orig_BBConfig); in wlc_phy_cal_txgainctrl_nphy()
18418 write_phy_reg(pi, 0x91, phy_saveregs[0]); in wlc_phy_cal_txgainctrl_nphy()
18419 write_phy_reg(pi, 0x92, phy_saveregs[1]); in wlc_phy_cal_txgainctrl_nphy()
18420 write_phy_reg(pi, 0xe7, phy_saveregs[2]); in wlc_phy_cal_txgainctrl_nphy()
18421 write_phy_reg(pi, 0xec, phy_saveregs[3]); in wlc_phy_cal_txgainctrl_nphy()
18423 pi->phyhang_avoid = phyhang_avoid_state; in wlc_phy_cal_txgainctrl_nphy()
18425 if (pi->phyhang_avoid) in wlc_phy_cal_txgainctrl_nphy()
18426 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_cal_txgainctrl_nphy()
18429 static void wlc_phy_savecal_nphy(struct brcms_phy *pi) in wlc_phy_savecal_nphy() argument
18435 if (pi->phyhang_avoid) in wlc_phy_savecal_nphy()
18436 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_savecal_nphy()
18438 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_savecal_nphy()
18440 wlc_phy_rx_iq_coeffs_nphy(pi, 0, in wlc_phy_savecal_nphy()
18441 &pi->calibration_cache. in wlc_phy_savecal_nphy()
18444 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_savecal_nphy()
18446 pi->calibration_cache.txcal_radio_regs_2G; in wlc_phy_savecal_nphy()
18447 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_savecal_nphy()
18449 pi->calibration_cache.txcal_radio_regs_2G[0] = in wlc_phy_savecal_nphy()
18450 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18453 pi->calibration_cache.txcal_radio_regs_2G[1] = in wlc_phy_savecal_nphy()
18454 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18457 pi->calibration_cache.txcal_radio_regs_2G[2] = in wlc_phy_savecal_nphy()
18458 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18461 pi->calibration_cache.txcal_radio_regs_2G[3] = in wlc_phy_savecal_nphy()
18462 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18466 pi->calibration_cache.txcal_radio_regs_2G[4] = in wlc_phy_savecal_nphy()
18467 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18470 pi->calibration_cache.txcal_radio_regs_2G[5] = in wlc_phy_savecal_nphy()
18471 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18474 pi->calibration_cache.txcal_radio_regs_2G[6] = in wlc_phy_savecal_nphy()
18475 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18478 pi->calibration_cache.txcal_radio_regs_2G[7] = in wlc_phy_savecal_nphy()
18479 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18483 pi->calibration_cache.txcal_radio_regs_2G[0] = in wlc_phy_savecal_nphy()
18484 read_radio_reg(pi, RADIO_2055_CORE1_TX_VOS_CNCL); in wlc_phy_savecal_nphy()
18485 pi->calibration_cache.txcal_radio_regs_2G[1] = in wlc_phy_savecal_nphy()
18486 read_radio_reg(pi, RADIO_2055_CORE2_TX_VOS_CNCL); in wlc_phy_savecal_nphy()
18487 pi->calibration_cache.txcal_radio_regs_2G[2] = in wlc_phy_savecal_nphy()
18488 read_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM); in wlc_phy_savecal_nphy()
18489 pi->calibration_cache.txcal_radio_regs_2G[3] = in wlc_phy_savecal_nphy()
18490 read_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM); in wlc_phy_savecal_nphy()
18493 pi->nphy_iqcal_chanspec_2G = pi->radio_chanspec; in wlc_phy_savecal_nphy()
18494 tbl_ptr = pi->calibration_cache.txcal_coeffs_2G; in wlc_phy_savecal_nphy()
18497 wlc_phy_rx_iq_coeffs_nphy(pi, 0, in wlc_phy_savecal_nphy()
18498 &pi->calibration_cache. in wlc_phy_savecal_nphy()
18501 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_savecal_nphy()
18503 pi->calibration_cache.txcal_radio_regs_5G; in wlc_phy_savecal_nphy()
18504 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_savecal_nphy()
18506 pi->calibration_cache.txcal_radio_regs_5G[0] = in wlc_phy_savecal_nphy()
18507 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18510 pi->calibration_cache.txcal_radio_regs_5G[1] = in wlc_phy_savecal_nphy()
18511 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18514 pi->calibration_cache.txcal_radio_regs_5G[2] = in wlc_phy_savecal_nphy()
18515 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18518 pi->calibration_cache.txcal_radio_regs_5G[3] = in wlc_phy_savecal_nphy()
18519 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18523 pi->calibration_cache.txcal_radio_regs_5G[4] = in wlc_phy_savecal_nphy()
18524 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18527 pi->calibration_cache.txcal_radio_regs_5G[5] = in wlc_phy_savecal_nphy()
18528 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18531 pi->calibration_cache.txcal_radio_regs_5G[6] = in wlc_phy_savecal_nphy()
18532 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18535 pi->calibration_cache.txcal_radio_regs_5G[7] = in wlc_phy_savecal_nphy()
18536 read_radio_reg(pi, in wlc_phy_savecal_nphy()
18540 pi->calibration_cache.txcal_radio_regs_5G[0] = in wlc_phy_savecal_nphy()
18541 read_radio_reg(pi, RADIO_2055_CORE1_TX_VOS_CNCL); in wlc_phy_savecal_nphy()
18542 pi->calibration_cache.txcal_radio_regs_5G[1] = in wlc_phy_savecal_nphy()
18543 read_radio_reg(pi, RADIO_2055_CORE2_TX_VOS_CNCL); in wlc_phy_savecal_nphy()
18544 pi->calibration_cache.txcal_radio_regs_5G[2] = in wlc_phy_savecal_nphy()
18545 read_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM); in wlc_phy_savecal_nphy()
18546 pi->calibration_cache.txcal_radio_regs_5G[3] = in wlc_phy_savecal_nphy()
18547 read_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM); in wlc_phy_savecal_nphy()
18550 pi->nphy_iqcal_chanspec_5G = pi->radio_chanspec; in wlc_phy_savecal_nphy()
18551 tbl_ptr = pi->calibration_cache.txcal_coeffs_5G; in wlc_phy_savecal_nphy()
18553 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_savecal_nphy()
18557 READ_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_savecal_nphy()
18560 READ_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_savecal_nphy()
18564 READ_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_savecal_nphy()
18567 READ_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_savecal_nphy()
18572 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, 8, 80, 16, tbl_ptr); in wlc_phy_savecal_nphy()
18574 if (pi->phyhang_avoid) in wlc_phy_savecal_nphy()
18575 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_savecal_nphy()
18578 static void wlc_phy_tx_iq_war_nphy(struct brcms_phy *pi) in wlc_phy_tx_iq_war_nphy() argument
18582 wlc_phy_table_read_nphy(pi, 15, 4, 0x50, 16, &tx_comp); in wlc_phy_tx_iq_war_nphy()
18584 wlapi_bmac_write_shm(pi->sh->physhim, M_20IN40_IQ, tx_comp.a0); in wlc_phy_tx_iq_war_nphy()
18585 wlapi_bmac_write_shm(pi->sh->physhim, M_20IN40_IQ + 2, tx_comp.b0); in wlc_phy_tx_iq_war_nphy()
18586 wlapi_bmac_write_shm(pi->sh->physhim, M_20IN40_IQ + 4, tx_comp.a1); in wlc_phy_tx_iq_war_nphy()
18587 wlapi_bmac_write_shm(pi->sh->physhim, M_20IN40_IQ + 6, tx_comp.b1); in wlc_phy_tx_iq_war_nphy()
18590 static void wlc_phy_restorecal_nphy(struct brcms_phy *pi) in wlc_phy_restorecal_nphy() argument
18598 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_restorecal_nphy()
18599 if (pi->nphy_iqcal_chanspec_2G == 0) in wlc_phy_restorecal_nphy()
18602 tbl_ptr = pi->calibration_cache.txcal_coeffs_2G; in wlc_phy_restorecal_nphy()
18603 loft_comp = &pi->calibration_cache.txcal_coeffs_2G[5]; in wlc_phy_restorecal_nphy()
18605 if (pi->nphy_iqcal_chanspec_5G == 0) in wlc_phy_restorecal_nphy()
18608 tbl_ptr = pi->calibration_cache.txcal_coeffs_5G; in wlc_phy_restorecal_nphy()
18609 loft_comp = &pi->calibration_cache.txcal_coeffs_5G[5]; in wlc_phy_restorecal_nphy()
18612 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 80, 16, tbl_ptr); in wlc_phy_restorecal_nphy()
18614 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_restorecal_nphy()
18626 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 88, 16, in wlc_phy_restorecal_nphy()
18629 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 85, 16, loft_comp); in wlc_phy_restorecal_nphy()
18631 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 93, 16, loft_comp); in wlc_phy_restorecal_nphy()
18633 if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_restorecal_nphy()
18634 wlc_phy_tx_iq_war_nphy(pi); in wlc_phy_restorecal_nphy()
18636 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_restorecal_nphy()
18637 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_restorecal_nphy()
18639 pi->calibration_cache.txcal_radio_regs_2G; in wlc_phy_restorecal_nphy()
18640 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_restorecal_nphy()
18642 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18645 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18647 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18650 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18652 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18655 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18657 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18660 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18663 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18666 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18668 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18671 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18673 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18676 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18678 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18681 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18684 write_radio_reg(pi, RADIO_2055_CORE1_TX_VOS_CNCL, in wlc_phy_restorecal_nphy()
18685 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18687 write_radio_reg(pi, RADIO_2055_CORE2_TX_VOS_CNCL, in wlc_phy_restorecal_nphy()
18688 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18690 write_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM, in wlc_phy_restorecal_nphy()
18691 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18693 write_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM, in wlc_phy_restorecal_nphy()
18694 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18698 wlc_phy_rx_iq_coeffs_nphy(pi, 1, in wlc_phy_restorecal_nphy()
18699 &pi->calibration_cache. in wlc_phy_restorecal_nphy()
18702 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_restorecal_nphy()
18704 pi->calibration_cache.txcal_radio_regs_5G; in wlc_phy_restorecal_nphy()
18705 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_restorecal_nphy()
18707 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18710 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18712 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18715 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18717 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18720 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18722 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18725 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18728 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18731 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18733 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18736 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18738 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18741 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18743 write_radio_reg(pi, in wlc_phy_restorecal_nphy()
18746 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18749 write_radio_reg(pi, RADIO_2055_CORE1_TX_VOS_CNCL, in wlc_phy_restorecal_nphy()
18750 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18752 write_radio_reg(pi, RADIO_2055_CORE2_TX_VOS_CNCL, in wlc_phy_restorecal_nphy()
18753 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18755 write_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM, in wlc_phy_restorecal_nphy()
18756 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18758 write_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM, in wlc_phy_restorecal_nphy()
18759 pi->calibration_cache. in wlc_phy_restorecal_nphy()
18763 wlc_phy_rx_iq_coeffs_nphy(pi, 1, in wlc_phy_restorecal_nphy()
18764 &pi->calibration_cache. in wlc_phy_restorecal_nphy()
18768 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_restorecal_nphy()
18771 WRITE_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_restorecal_nphy()
18774 WRITE_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_restorecal_nphy()
18778 WRITE_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_restorecal_nphy()
18781 WRITE_RADIO_REG3(pi, RADIO_2057, TX, coreNum, in wlc_phy_restorecal_nphy()
18788 static void wlc_phy_txpwrctrl_coeff_setup_nphy(struct brcms_phy *pi) in wlc_phy_txpwrctrl_coeff_setup_nphy() argument
18798 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_coeff_setup_nphy()
18799 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_txpwrctrl_coeff_setup_nphy()
18801 wlc_phy_table_read_nphy(pi, 15, 7, 80, 16, iqloCalbuf); in wlc_phy_txpwrctrl_coeff_setup_nphy()
18816 wlc_phy_table_write_nphy(pi, tbl_id, tbl_len, tbl_offset, 32, in wlc_phy_txpwrctrl_coeff_setup_nphy()
18829 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_coeff_setup_nphy()
18845 wlc_phy_table_write_nphy(pi, tbl_id, tbl_len, tbl_offset, 32, in wlc_phy_txpwrctrl_coeff_setup_nphy()
18849 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_txpwrctrl_coeff_setup_nphy()
18851 wlapi_bmac_write_shm(pi->sh->physhim, M_CURR_IDX1, 0xFFFF); in wlc_phy_txpwrctrl_coeff_setup_nphy()
18852 wlapi_bmac_write_shm(pi->sh->physhim, M_CURR_IDX2, 0xFFFF); in wlc_phy_txpwrctrl_coeff_setup_nphy()
18855 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_coeff_setup_nphy()
18856 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_txpwrctrl_coeff_setup_nphy()
18859 static void wlc_phy_txlpfbw_nphy(struct brcms_phy *pi) in wlc_phy_txlpfbw_nphy() argument
18863 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_txlpfbw_nphy()
18864 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_txlpfbw_nphy()
18869 if (PHY_IPA(pi)) { in wlc_phy_txlpfbw_nphy()
18870 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_txlpfbw_nphy()
18876 write_phy_reg(pi, 0xe8, in wlc_phy_txlpfbw_nphy()
18881 if (PHY_IPA(pi)) { in wlc_phy_txlpfbw_nphy()
18883 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_txlpfbw_nphy()
18888 write_phy_reg(pi, 0xe9, in wlc_phy_txlpfbw_nphy()
18897 wlc_phy_adjust_rx_analpfbw_nphy(struct brcms_phy *pi, u16 reduction_factr) in wlc_phy_adjust_rx_analpfbw_nphy() argument
18899 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_adjust_rx_analpfbw_nphy()
18900 if ((CHSPEC_CHANNEL(pi->radio_chanspec) == 11) && in wlc_phy_adjust_rx_analpfbw_nphy()
18901 CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_adjust_rx_analpfbw_nphy()
18902 if (!pi->nphy_anarxlpf_adjusted) { in wlc_phy_adjust_rx_analpfbw_nphy()
18903 write_radio_reg(pi, in wlc_phy_adjust_rx_analpfbw_nphy()
18906 ((pi->nphy_rccal_value + in wlc_phy_adjust_rx_analpfbw_nphy()
18909 pi->nphy_anarxlpf_adjusted = true; in wlc_phy_adjust_rx_analpfbw_nphy()
18912 if (pi->nphy_anarxlpf_adjusted) { in wlc_phy_adjust_rx_analpfbw_nphy()
18913 write_radio_reg(pi, in wlc_phy_adjust_rx_analpfbw_nphy()
18916 (pi->nphy_rccal_value | 0x80)); in wlc_phy_adjust_rx_analpfbw_nphy()
18918 pi->nphy_anarxlpf_adjusted = false; in wlc_phy_adjust_rx_analpfbw_nphy()
18925 wlc_phy_adjust_min_noisevar_nphy(struct brcms_phy *pi, int ntones, in wlc_phy_adjust_min_noisevar_nphy() argument
18932 CHSPEC_IS40(pi->radio_chanspec) ? in wlc_phy_adjust_min_noisevar_nphy()
18935 if (pi->nphy_noisevars_adjusted) { in wlc_phy_adjust_min_noisevar_nphy()
18936 for (i = 0; i < pi->nphy_saved_noisevars.bufcount; i++) { in wlc_phy_adjust_min_noisevar_nphy()
18937 tone_id = pi->nphy_saved_noisevars.tone_id[i]; in wlc_phy_adjust_min_noisevar_nphy()
18942 pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_adjust_min_noisevar_nphy()
18944 &pi->nphy_saved_noisevars.min_noise_vars[i]); in wlc_phy_adjust_min_noisevar_nphy()
18947 pi->nphy_saved_noisevars.bufcount = 0; in wlc_phy_adjust_min_noisevar_nphy()
18948 pi->nphy_noisevars_adjusted = false; in wlc_phy_adjust_min_noisevar_nphy()
18952 pi->nphy_saved_noisevars.bufcount = 0; in wlc_phy_adjust_min_noisevar_nphy()
18959 pi->nphy_saved_noisevars.tone_id[i] = tone_id; in wlc_phy_adjust_min_noisevar_nphy()
18960 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_adjust_min_noisevar_nphy()
18962 &pi->nphy_saved_noisevars. in wlc_phy_adjust_min_noisevar_nphy()
18964 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_NOISEVAR, 1, in wlc_phy_adjust_min_noisevar_nphy()
18966 pi->nphy_saved_noisevars.bufcount++; in wlc_phy_adjust_min_noisevar_nphy()
18969 pi->nphy_noisevars_adjusted = true; in wlc_phy_adjust_min_noisevar_nphy()
18973 static void wlc_phy_adjust_crsminpwr_nphy(struct brcms_phy *pi, u8 minpwr) in wlc_phy_adjust_crsminpwr_nphy() argument
18977 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_adjust_crsminpwr_nphy()
18978 if ((CHSPEC_CHANNEL(pi->radio_chanspec) == 11) && in wlc_phy_adjust_crsminpwr_nphy()
18979 CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_adjust_crsminpwr_nphy()
18980 if (!pi->nphy_crsminpwr_adjusted) { in wlc_phy_adjust_crsminpwr_nphy()
18981 regval = read_phy_reg(pi, 0x27d); in wlc_phy_adjust_crsminpwr_nphy()
18982 pi->nphy_crsminpwr[0] = regval & 0xff; in wlc_phy_adjust_crsminpwr_nphy()
18985 write_phy_reg(pi, 0x27d, regval); in wlc_phy_adjust_crsminpwr_nphy()
18987 regval = read_phy_reg(pi, 0x280); in wlc_phy_adjust_crsminpwr_nphy()
18988 pi->nphy_crsminpwr[1] = regval & 0xff; in wlc_phy_adjust_crsminpwr_nphy()
18991 write_phy_reg(pi, 0x280, regval); in wlc_phy_adjust_crsminpwr_nphy()
18993 regval = read_phy_reg(pi, 0x283); in wlc_phy_adjust_crsminpwr_nphy()
18994 pi->nphy_crsminpwr[2] = regval & 0xff; in wlc_phy_adjust_crsminpwr_nphy()
18997 write_phy_reg(pi, 0x283, regval); in wlc_phy_adjust_crsminpwr_nphy()
18999 pi->nphy_crsminpwr_adjusted = true; in wlc_phy_adjust_crsminpwr_nphy()
19002 if (pi->nphy_crsminpwr_adjusted) { in wlc_phy_adjust_crsminpwr_nphy()
19003 regval = read_phy_reg(pi, 0x27d); in wlc_phy_adjust_crsminpwr_nphy()
19005 regval |= pi->nphy_crsminpwr[0]; in wlc_phy_adjust_crsminpwr_nphy()
19006 write_phy_reg(pi, 0x27d, regval); in wlc_phy_adjust_crsminpwr_nphy()
19008 regval = read_phy_reg(pi, 0x280); in wlc_phy_adjust_crsminpwr_nphy()
19010 regval |= pi->nphy_crsminpwr[1]; in wlc_phy_adjust_crsminpwr_nphy()
19011 write_phy_reg(pi, 0x280, regval); in wlc_phy_adjust_crsminpwr_nphy()
19013 regval = read_phy_reg(pi, 0x283); in wlc_phy_adjust_crsminpwr_nphy()
19015 regval |= pi->nphy_crsminpwr[2]; in wlc_phy_adjust_crsminpwr_nphy()
19016 write_phy_reg(pi, 0x283, regval); in wlc_phy_adjust_crsminpwr_nphy()
19018 pi->nphy_crsminpwr_adjusted = false; in wlc_phy_adjust_crsminpwr_nphy()
19024 static void wlc_phy_spurwar_nphy(struct brcms_phy *pi) in wlc_phy_spurwar_nphy() argument
19032 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_spurwar_nphy()
19033 if (pi->phyhang_avoid) in wlc_phy_spurwar_nphy()
19034 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_spurwar_nphy()
19036 cur_channel = CHSPEC_CHANNEL(pi->radio_chanspec); in wlc_phy_spurwar_nphy()
19038 if (pi->nphy_gband_spurwar_en) { in wlc_phy_spurwar_nphy()
19041 pi, in wlc_phy_spurwar_nphy()
19044 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_spurwar_nphy()
19046 && CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_spurwar_nphy()
19048 pi, 2, in wlc_phy_spurwar_nphy()
19052 wlc_phy_adjust_min_noisevar_nphy(pi, 0, in wlc_phy_spurwar_nphy()
19057 wlc_phy_adjust_crsminpwr_nphy(pi, in wlc_phy_spurwar_nphy()
19061 if ((pi->nphy_gband_spurwar2_en) in wlc_phy_spurwar_nphy()
19062 && CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_spurwar_nphy()
19064 if (CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_spurwar_nphy()
19132 pi, in wlc_phy_spurwar_nphy()
19137 wlc_phy_adjust_min_noisevar_nphy(pi, 0, NULL, in wlc_phy_spurwar_nphy()
19142 if ((pi->nphy_aband_spurwar_en) && in wlc_phy_spurwar_nphy()
19143 (CHSPEC_IS5G(pi->radio_chanspec))) { in wlc_phy_spurwar_nphy()
19152 if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) && in wlc_phy_spurwar_nphy()
19153 (pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) { in wlc_phy_spurwar_nphy()
19183 pi, 1, in wlc_phy_spurwar_nphy()
19187 wlc_phy_adjust_min_noisevar_nphy(pi, 0, NULL, in wlc_phy_spurwar_nphy()
19191 if (pi->phyhang_avoid) in wlc_phy_spurwar_nphy()
19192 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_spurwar_nphy()
19196 void wlc_phy_init_nphy(struct brcms_phy *pi) in wlc_phy_init_nphy() argument
19209 if (!(pi->measure_hold & PHY_HOLD_FOR_SCAN)) in wlc_phy_init_nphy()
19210 pi->measure_hold |= PHY_HOLD_FOR_NOT_ASSOC; in wlc_phy_init_nphy()
19212 if ((ISNPHY(pi)) && (NREV_GE(pi->pubpi.phy_rev, 5)) && in wlc_phy_init_nphy()
19213 ((pi->sh->chippkg == BCMA_PKG_ID_BCM4717) || in wlc_phy_init_nphy()
19214 (pi->sh->chippkg == BCMA_PKG_ID_BCM4718))) { in wlc_phy_init_nphy()
19215 if ((pi->sh->boardflags & BFL_EXTLNA) && in wlc_phy_init_nphy()
19216 (CHSPEC_IS2G(pi->radio_chanspec))) in wlc_phy_init_nphy()
19217 bcma_cc_set32(&pi->d11core->bus->drv_cc, in wlc_phy_init_nphy()
19221 if ((!PHY_IPA(pi)) && (pi->sh->chip == BCMA_CHIP_ID_BCM5357)) in wlc_phy_init_nphy()
19222 bcma_chipco_chipctl_maskset(&pi->d11core->bus->drv_cc, 1, in wlc_phy_init_nphy()
19225 if ((pi->nphy_gband_spurwar2_en) && CHSPEC_IS2G(pi->radio_chanspec) && in wlc_phy_init_nphy()
19226 CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_init_nphy()
19228 d11_clk_ctl_st = bcma_read32(pi->d11core, in wlc_phy_init_nphy()
19230 bcma_mask32(pi->d11core, D11REGOFFS(clk_ctl_st), in wlc_phy_init_nphy()
19233 bcma_write32(pi->d11core, D11REGOFFS(clk_ctl_st), in wlc_phy_init_nphy()
19237 pi->use_int_tx_iqlo_cal_nphy = in wlc_phy_init_nphy()
19238 (PHY_IPA(pi) || in wlc_phy_init_nphy()
19239 (NREV_GE(pi->pubpi.phy_rev, 7) || in wlc_phy_init_nphy()
19240 (NREV_GE(pi->pubpi.phy_rev, 5) in wlc_phy_init_nphy()
19241 && pi->sh->boardflags2 & BFL2_INTERNDET_TXIQCAL))); in wlc_phy_init_nphy()
19243 pi->internal_tx_iqlo_cal_tapoff_intpa_nphy = false; in wlc_phy_init_nphy()
19245 pi->nphy_deaf_count = 0; in wlc_phy_init_nphy()
19247 wlc_phy_tbl_init_nphy(pi); in wlc_phy_init_nphy()
19249 pi->nphy_crsminpwr_adjusted = false; in wlc_phy_init_nphy()
19250 pi->nphy_noisevars_adjusted = false; in wlc_phy_init_nphy()
19252 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_init_nphy()
19253 write_phy_reg(pi, 0xe7, 0); in wlc_phy_init_nphy()
19254 write_phy_reg(pi, 0xec, 0); in wlc_phy_init_nphy()
19255 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_init_nphy()
19256 write_phy_reg(pi, 0x342, 0); in wlc_phy_init_nphy()
19257 write_phy_reg(pi, 0x343, 0); in wlc_phy_init_nphy()
19258 write_phy_reg(pi, 0x346, 0); in wlc_phy_init_nphy()
19259 write_phy_reg(pi, 0x347, 0); in wlc_phy_init_nphy()
19261 write_phy_reg(pi, 0xe5, 0); in wlc_phy_init_nphy()
19262 write_phy_reg(pi, 0xe6, 0); in wlc_phy_init_nphy()
19264 write_phy_reg(pi, 0xec, 0); in wlc_phy_init_nphy()
19267 write_phy_reg(pi, 0x91, 0); in wlc_phy_init_nphy()
19268 write_phy_reg(pi, 0x92, 0); in wlc_phy_init_nphy()
19269 if (NREV_LT(pi->pubpi.phy_rev, 6)) { in wlc_phy_init_nphy()
19270 write_phy_reg(pi, 0x93, 0); in wlc_phy_init_nphy()
19271 write_phy_reg(pi, 0x94, 0); in wlc_phy_init_nphy()
19274 and_phy_reg(pi, 0xa1, ~3); in wlc_phy_init_nphy()
19276 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_init_nphy()
19277 write_phy_reg(pi, 0x8f, 0); in wlc_phy_init_nphy()
19278 write_phy_reg(pi, 0xa5, 0); in wlc_phy_init_nphy()
19280 write_phy_reg(pi, 0xa5, 0); in wlc_phy_init_nphy()
19283 if (NREV_IS(pi->pubpi.phy_rev, 2)) in wlc_phy_init_nphy()
19284 mod_phy_reg(pi, 0xdc, 0x00ff, 0x3b); in wlc_phy_init_nphy()
19285 else if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_init_nphy()
19286 mod_phy_reg(pi, 0xdc, 0x00ff, 0x40); in wlc_phy_init_nphy()
19288 write_phy_reg(pi, 0x203, 32); in wlc_phy_init_nphy()
19289 write_phy_reg(pi, 0x201, 32); in wlc_phy_init_nphy()
19291 if (pi->sh->boardflags2 & BFL2_SKWRKFEM_BRD) in wlc_phy_init_nphy()
19292 write_phy_reg(pi, 0x20d, 160); in wlc_phy_init_nphy()
19294 write_phy_reg(pi, 0x20d, 184); in wlc_phy_init_nphy()
19296 write_phy_reg(pi, 0x13a, 200); in wlc_phy_init_nphy()
19298 write_phy_reg(pi, 0x70, 80); in wlc_phy_init_nphy()
19300 write_phy_reg(pi, 0x1ff, 48); in wlc_phy_init_nphy()
19302 if (NREV_LT(pi->pubpi.phy_rev, 8)) in wlc_phy_init_nphy()
19303 wlc_phy_update_mimoconfig_nphy(pi, pi->n_preamble_override); in wlc_phy_init_nphy()
19305 wlc_phy_stf_chain_upd_nphy(pi); in wlc_phy_init_nphy()
19307 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_init_nphy()
19308 write_phy_reg(pi, 0x180, 0xaa8); in wlc_phy_init_nphy()
19309 write_phy_reg(pi, 0x181, 0x9a4); in wlc_phy_init_nphy()
19312 if (PHY_IPA(pi)) { in wlc_phy_init_nphy()
19313 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_init_nphy()
19315 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_init_nphy()
19318 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x298 : in wlc_phy_init_nphy()
19320 (pi->nphy_papd_epsilon_offset[core]) << 7); in wlc_phy_init_nphy()
19324 wlc_phy_ipa_set_tx_digi_filts_nphy(pi); in wlc_phy_init_nphy()
19325 } else if (NREV_GE(pi->pubpi.phy_rev, 5)) { in wlc_phy_init_nphy()
19326 wlc_phy_extpa_set_tx_digi_filts_nphy(pi); in wlc_phy_init_nphy()
19329 wlc_phy_workarounds_nphy(pi); in wlc_phy_init_nphy()
19331 wlapi_bmac_phyclk_fgc(pi->sh->physhim, ON); in wlc_phy_init_nphy()
19333 val = read_phy_reg(pi, 0x01); in wlc_phy_init_nphy()
19334 write_phy_reg(pi, 0x01, val | BBCFG_RESETCCA); in wlc_phy_init_nphy()
19335 write_phy_reg(pi, 0x01, val & (~BBCFG_RESETCCA)); in wlc_phy_init_nphy()
19336 wlapi_bmac_phyclk_fgc(pi->sh->physhim, OFF); in wlc_phy_init_nphy()
19338 wlapi_bmac_macphyclk_set(pi->sh->physhim, ON); in wlc_phy_init_nphy()
19340 wlc_phy_pa_override_nphy(pi, OFF); in wlc_phy_init_nphy()
19341 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX); in wlc_phy_init_nphy()
19342 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_init_nphy()
19343 wlc_phy_pa_override_nphy(pi, ON); in wlc_phy_init_nphy()
19345 wlc_phy_classifier_nphy(pi, 0, 0); in wlc_phy_init_nphy()
19346 wlc_phy_clip_det_nphy(pi, 0, clip1_ths); in wlc_phy_init_nphy()
19348 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_init_nphy()
19349 wlc_phy_bphy_init_nphy(pi); in wlc_phy_init_nphy()
19351 tx_pwr_ctrl_state = pi->nphy_txpwrctrl; in wlc_phy_init_nphy()
19352 wlc_phy_txpwrctrl_enable_nphy(pi, PHY_TPC_HW_OFF); in wlc_phy_init_nphy()
19354 wlc_phy_txpwr_fixpower_nphy(pi); in wlc_phy_init_nphy()
19356 wlc_phy_txpwrctrl_idle_tssi_nphy(pi); in wlc_phy_init_nphy()
19358 wlc_phy_txpwrctrl_pwr_setup_nphy(pi); in wlc_phy_init_nphy()
19360 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_init_nphy()
19367 if (PHY_IPA(pi)) { in wlc_phy_init_nphy()
19368 tx_pwrctrl_tbl = wlc_phy_get_ipa_gaintbl_nphy(pi); in wlc_phy_init_nphy()
19370 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_init_nphy()
19371 if (NREV_IS(pi->pubpi.phy_rev, 3)) in wlc_phy_init_nphy()
19374 else if (NREV_IS(pi->pubpi.phy_rev, 4)) in wlc_phy_init_nphy()
19376 (pi->srom_fem5g.extpagain == in wlc_phy_init_nphy()
19384 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_init_nphy()
19385 if (pi->pubpi.radiorev == 5) in wlc_phy_init_nphy()
19388 else if (pi->pubpi.radiorev == 3) in wlc_phy_init_nphy()
19392 if (NREV_GE(pi->pubpi.phy_rev, 5) && in wlc_phy_init_nphy()
19393 (pi->srom_fem2g.extpagain == 3)) in wlc_phy_init_nphy()
19403 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE1TXPWRCTL, 128, in wlc_phy_init_nphy()
19405 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE2TXPWRCTL, 128, in wlc_phy_init_nphy()
19408 pi->nphy_gmval = (u16) ((*tx_pwrctrl_tbl >> 16) & 0x7000); in wlc_phy_init_nphy()
19410 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_init_nphy()
19415 rfpwr_offset = get_rf_pwr_offset(pi, pga_gn, in wlc_phy_init_nphy()
19418 pi, in wlc_phy_init_nphy()
19423 pi, in wlc_phy_init_nphy()
19432 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_init_nphy()
19442 pi, in wlc_phy_init_nphy()
19447 pi, in wlc_phy_init_nphy()
19456 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE1TXPWRCTL, 128, in wlc_phy_init_nphy()
19458 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE2TXPWRCTL, 128, in wlc_phy_init_nphy()
19462 if (pi->sh->phyrxchain != 0x3) in wlc_phy_init_nphy()
19463 wlc_phy_rxcore_setstate_nphy((struct brcms_phy_pub *) pi, in wlc_phy_init_nphy()
19464 pi->sh->phyrxchain); in wlc_phy_init_nphy()
19466 if (PHY_PERICAL_MPHASE_PENDING(pi)) in wlc_phy_init_nphy()
19467 wlc_phy_cal_perical_mphase_restart(pi); in wlc_phy_init_nphy()
19469 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_init_nphy()
19470 do_rssi_cal = (CHSPEC_IS2G(pi->radio_chanspec)) ? in wlc_phy_init_nphy()
19471 (pi->nphy_rssical_chanspec_2G == 0) : in wlc_phy_init_nphy()
19472 (pi->nphy_rssical_chanspec_5G == 0); in wlc_phy_init_nphy()
19475 wlc_phy_rssi_cal_nphy(pi); in wlc_phy_init_nphy()
19477 wlc_phy_restore_rssical_nphy(pi); in wlc_phy_init_nphy()
19479 wlc_phy_rssi_cal_nphy(pi); in wlc_phy_init_nphy()
19482 if (!SCAN_RM_IN_PROGRESS(pi)) in wlc_phy_init_nphy()
19483 do_nphy_cal = (CHSPEC_IS2G(pi->radio_chanspec)) ? in wlc_phy_init_nphy()
19484 (pi->nphy_iqcal_chanspec_2G == 0) : in wlc_phy_init_nphy()
19485 (pi->nphy_iqcal_chanspec_5G == 0); in wlc_phy_init_nphy()
19487 if (!pi->do_initcal) in wlc_phy_init_nphy()
19492 target_gain = wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_init_nphy()
19494 if (pi->antsel_type == ANTSEL_2x3) in wlc_phy_init_nphy()
19495 wlc_phy_antsel_init((struct brcms_phy_pub *) pi, in wlc_phy_init_nphy()
19498 if (pi->nphy_perical != PHY_PERICAL_MPHASE) { in wlc_phy_init_nphy()
19499 wlc_phy_rssi_cal_nphy(pi); in wlc_phy_init_nphy()
19501 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_init_nphy()
19502 pi->nphy_cal_orig_pwr_idx[0] = in wlc_phy_init_nphy()
19503 pi->nphy_txpwrindex[PHY_CORE_0] in wlc_phy_init_nphy()
19506 pi->nphy_cal_orig_pwr_idx[1] = in wlc_phy_init_nphy()
19507 pi->nphy_txpwrindex[PHY_CORE_1] in wlc_phy_init_nphy()
19511 wlc_phy_precal_txgain_nphy(pi); in wlc_phy_init_nphy()
19513 wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_init_nphy()
19517 (pi, target_gain, true, in wlc_phy_init_nphy()
19520 (pi, target_gain, 2, in wlc_phy_init_nphy()
19522 wlc_phy_savecal_nphy(pi); in wlc_phy_init_nphy()
19525 } else if (pi->mphase_cal_phase_id == in wlc_phy_init_nphy()
19527 wlc_phy_cal_perical((struct brcms_phy_pub *) pi, in wlc_phy_init_nphy()
19531 wlc_phy_restorecal_nphy(pi); in wlc_phy_init_nphy()
19534 wlc_phy_txpwrctrl_coeff_setup_nphy(pi); in wlc_phy_init_nphy()
19536 wlc_phy_txpwrctrl_enable_nphy(pi, tx_pwr_ctrl_state); in wlc_phy_init_nphy()
19538 wlc_phy_nphy_tkip_rifs_war(pi, pi->sh->_rifs_phy); in wlc_phy_init_nphy()
19540 if (NREV_GE(pi->pubpi.phy_rev, 3) && NREV_LE(pi->pubpi.phy_rev, 6)) in wlc_phy_init_nphy()
19542 write_phy_reg(pi, 0x70, 50); in wlc_phy_init_nphy()
19544 wlc_phy_txlpfbw_nphy(pi); in wlc_phy_init_nphy()
19546 wlc_phy_spurwar_nphy(pi); in wlc_phy_init_nphy()
19550 static void wlc_phy_resetcca_nphy(struct brcms_phy *pi) in wlc_phy_resetcca_nphy() argument
19554 wlapi_bmac_phyclk_fgc(pi->sh->physhim, ON); in wlc_phy_resetcca_nphy()
19556 val = read_phy_reg(pi, 0x01); in wlc_phy_resetcca_nphy()
19557 write_phy_reg(pi, 0x01, val | BBCFG_RESETCCA); in wlc_phy_resetcca_nphy()
19559 write_phy_reg(pi, 0x01, val & (~BBCFG_RESETCCA)); in wlc_phy_resetcca_nphy()
19561 wlapi_bmac_phyclk_fgc(pi->sh->physhim, OFF); in wlc_phy_resetcca_nphy()
19563 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_resetcca_nphy()
19566 void wlc_phy_pa_override_nphy(struct brcms_phy *pi, bool en) in wlc_phy_pa_override_nphy() argument
19572 pi->rfctrlIntc1_save = read_phy_reg(pi, 0x91); in wlc_phy_pa_override_nphy()
19573 pi->rfctrlIntc2_save = read_phy_reg(pi, 0x92); in wlc_phy_pa_override_nphy()
19575 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_pa_override_nphy()
19577 else if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_pa_override_nphy()
19579 CHSPEC_IS5G(pi->radio_chanspec) ? 0x600 : 0x480; in wlc_phy_pa_override_nphy()
19582 CHSPEC_IS5G(pi->radio_chanspec) ? 0x180 : 0x120; in wlc_phy_pa_override_nphy()
19584 write_phy_reg(pi, 0x91, rfctrlintc_override_val); in wlc_phy_pa_override_nphy()
19585 write_phy_reg(pi, 0x92, rfctrlintc_override_val); in wlc_phy_pa_override_nphy()
19587 write_phy_reg(pi, 0x91, pi->rfctrlIntc1_save); in wlc_phy_pa_override_nphy()
19588 write_phy_reg(pi, 0x92, pi->rfctrlIntc2_save); in wlc_phy_pa_override_nphy()
19593 void wlc_phy_stf_chain_upd_nphy(struct brcms_phy *pi) in wlc_phy_stf_chain_upd_nphy() argument
19600 if (pi->nphy_txrx_chain == BRCMS_N_TXRX_CHAIN0) { in wlc_phy_stf_chain_upd_nphy()
19604 if (NREV_LE(pi->pubpi.phy_rev, 2)) in wlc_phy_stf_chain_upd_nphy()
19605 and_phy_reg(pi, 0xa0, ~0x20); in wlc_phy_stf_chain_upd_nphy()
19606 } else if (pi->nphy_txrx_chain == BRCMS_N_TXRX_CHAIN1) { in wlc_phy_stf_chain_upd_nphy()
19610 if (NREV_LE(pi->pubpi.phy_rev, 2)) in wlc_phy_stf_chain_upd_nphy()
19611 or_phy_reg(pi, 0xa0, 0x20); in wlc_phy_stf_chain_upd_nphy()
19614 mod_phy_reg(pi, 0xa2, ((0xf << 0) | (0xf << 4)), txrx_chain); in wlc_phy_stf_chain_upd_nphy()
19617 pi->nphy_perical = PHY_PERICAL_DISABLE; in wlc_phy_stf_chain_upd_nphy()
19618 or_phy_reg(pi, 0xa1, NPHY_RfseqMode_CoreActv_override); in wlc_phy_stf_chain_upd_nphy()
19620 pi->nphy_perical = PHY_PERICAL_MPHASE; in wlc_phy_stf_chain_upd_nphy()
19621 and_phy_reg(pi, 0xa1, ~NPHY_RfseqMode_CoreActv_override); in wlc_phy_stf_chain_upd_nphy()
19630 struct brcms_phy *pi = container_of(pih, struct brcms_phy, pubpi_ro); in wlc_phy_rxcore_setstate_nphy() local
19634 pi->sh->phyrxchain = rxcore_bitmask; in wlc_phy_rxcore_setstate_nphy()
19636 if (!pi->sh->clk) in wlc_phy_rxcore_setstate_nphy()
19639 suspend = (0 == (bcma_read32(pi->d11core, D11REGOFFS(maccontrol)) & in wlc_phy_rxcore_setstate_nphy()
19642 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_phy_rxcore_setstate_nphy()
19644 if (pi->phyhang_avoid) in wlc_phy_rxcore_setstate_nphy()
19645 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_rxcore_setstate_nphy()
19647 regval = read_phy_reg(pi, 0xa2); in wlc_phy_rxcore_setstate_nphy()
19650 write_phy_reg(pi, 0xa2, regval); in wlc_phy_rxcore_setstate_nphy()
19654 write_phy_reg(pi, 0x20e, 1); in wlc_phy_rxcore_setstate_nphy()
19656 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_rxcore_setstate_nphy()
19657 if (pi->rx2tx_biasentry == -1) { in wlc_phy_rxcore_setstate_nphy()
19658 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_rxcore_setstate_nphy()
19665 pi->rx2tx_biasentry = (u8) i; in wlc_phy_rxcore_setstate_nphy()
19669 pi, in wlc_phy_rxcore_setstate_nphy()
19683 write_phy_reg(pi, 0x20e, 30); in wlc_phy_rxcore_setstate_nphy()
19685 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_rxcore_setstate_nphy()
19686 if (pi->rx2tx_biasentry != -1) { in wlc_phy_rxcore_setstate_nphy()
19688 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_rxcore_setstate_nphy()
19689 1, pi->rx2tx_biasentry, in wlc_phy_rxcore_setstate_nphy()
19691 pi->rx2tx_biasentry = -1; in wlc_phy_rxcore_setstate_nphy()
19696 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_rxcore_setstate_nphy()
19698 if (pi->phyhang_avoid) in wlc_phy_rxcore_setstate_nphy()
19699 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_rxcore_setstate_nphy()
19702 wlapi_enable_mac(pi->sh->physhim); in wlc_phy_rxcore_setstate_nphy()
19708 struct brcms_phy *pi = container_of(pih, struct brcms_phy, pubpi_ro); in wlc_phy_rxcore_getstate_nphy() local
19710 regval = read_phy_reg(pi, 0xa2); in wlc_phy_rxcore_getstate_nphy()
19716 bool wlc_phy_n_txpower_ipa_ison(struct brcms_phy *pi) in wlc_phy_n_txpower_ipa_ison() argument
19718 return PHY_IPA(pi); in wlc_phy_n_txpower_ipa_ison()
19721 void wlc_phy_cal_init_nphy(struct brcms_phy *pi) in wlc_phy_cal_init_nphy() argument
19725 static void wlc_phy_radio_preinit_205x(struct brcms_phy *pi) in wlc_phy_radio_preinit_205x() argument
19728 and_phy_reg(pi, 0x78, ~RFCC_CHIP0_PU); in wlc_phy_radio_preinit_205x()
19729 and_phy_reg(pi, 0x78, RFCC_OE_POR_FORCE); in wlc_phy_radio_preinit_205x()
19731 or_phy_reg(pi, 0x78, ~RFCC_OE_POR_FORCE); in wlc_phy_radio_preinit_205x()
19732 or_phy_reg(pi, 0x78, RFCC_CHIP0_PU); in wlc_phy_radio_preinit_205x()
19736 static void wlc_phy_radio_init_2057(struct brcms_phy *pi) in wlc_phy_radio_init_2057() argument
19740 if (NREV_IS(pi->pubpi.phy_rev, 7)) { in wlc_phy_radio_init_2057()
19742 } else if (NREV_IS(pi->pubpi.phy_rev, 8) in wlc_phy_radio_init_2057()
19743 || NREV_IS(pi->pubpi.phy_rev, 9)) { in wlc_phy_radio_init_2057()
19744 switch (pi->pubpi.radiorev) { in wlc_phy_radio_init_2057()
19747 if (NREV_IS(pi->pubpi.phy_rev, 8)) in wlc_phy_radio_init_2057()
19749 else if (NREV_IS(pi->pubpi.phy_rev, 9)) in wlc_phy_radio_init_2057()
19768 wlc_phy_init_radio_regs_allbands(pi, regs_2057_ptr); in wlc_phy_radio_init_2057()
19771 static u16 wlc_phy_radio205x_rcal(struct brcms_phy *pi) in wlc_phy_radio205x_rcal() argument
19776 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_radio205x_rcal()
19778 if (pi->pubpi.radiorev == 5) { in wlc_phy_radio205x_rcal()
19780 and_phy_reg(pi, 0x342, ~(0x1 << 1)); in wlc_phy_radio205x_rcal()
19784 mod_radio_reg(pi, RADIO_2057_IQTEST_SEL_PU, 0x1, 0x1); in wlc_phy_radio205x_rcal()
19785 mod_radio_reg(pi, RADIO_2057v7_IQTEST_SEL_PU2, 0x2, in wlc_phy_radio205x_rcal()
19788 mod_radio_reg(pi, RADIO_2057_RCAL_CONFIG, 0x1, 0x1); in wlc_phy_radio205x_rcal()
19792 mod_radio_reg(pi, RADIO_2057_RCAL_CONFIG, 0x3, 0x3); in wlc_phy_radio205x_rcal()
19795 rcal_reg = read_radio_reg(pi, RADIO_2057_RCAL_STATUS); in wlc_phy_radio205x_rcal()
19806 mod_radio_reg(pi, RADIO_2057_RCAL_CONFIG, 0x2, 0x0); in wlc_phy_radio205x_rcal()
19808 rcal_reg = read_radio_reg(pi, RADIO_2057_RCAL_STATUS) & 0x3e; in wlc_phy_radio205x_rcal()
19810 mod_radio_reg(pi, RADIO_2057_RCAL_CONFIG, 0x1, 0x0); in wlc_phy_radio205x_rcal()
19811 if (pi->pubpi.radiorev == 5) { in wlc_phy_radio205x_rcal()
19813 mod_radio_reg(pi, RADIO_2057_IQTEST_SEL_PU, 0x1, 0x0); in wlc_phy_radio205x_rcal()
19814 mod_radio_reg(pi, RADIO_2057v7_IQTEST_SEL_PU2, 0x2, in wlc_phy_radio205x_rcal()
19818 if ((pi->pubpi.radiorev <= 4) || (pi->pubpi.radiorev == 6)) { in wlc_phy_radio205x_rcal()
19820 mod_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, 0x3c, in wlc_phy_radio205x_rcal()
19822 mod_radio_reg(pi, RADIO_2057_BANDGAP_RCAL_TRIM, 0xf0, in wlc_phy_radio205x_rcal()
19826 } else if (NREV_IS(pi->pubpi.phy_rev, 3)) { in wlc_phy_radio205x_rcal()
19831 pi, in wlc_phy_radio205x_rcal()
19834 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST2 | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19838 write_radio_reg(pi, RADIO_2056_SYN_RCAL_MASTER | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19842 write_radio_reg(pi, RADIO_2056_SYN_RCAL_MASTER | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19847 pi, in wlc_phy_radio205x_rcal()
19860 write_radio_reg(pi, RADIO_2056_SYN_RCAL_MASTER | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19864 read_radio_reg(pi, in wlc_phy_radio205x_rcal()
19868 write_radio_reg(pi, RADIO_2056_SYN_RCAL_MASTER | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19871 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST2 | RADIO_2056_SYN, in wlc_phy_radio205x_rcal()
19879 static u16 wlc_phy_radio2057_rccal(struct brcms_phy *pi) in wlc_phy_radio2057_rccal() argument
19885 chip43226_6362A0 = ((pi->pubpi.radiorev == 3) in wlc_phy_radio2057_rccal()
19886 || (pi->pubpi.radiorev == 4) in wlc_phy_radio2057_rccal()
19887 || (pi->pubpi.radiorev == 6)); in wlc_phy_radio2057_rccal()
19891 write_radio_reg(pi, RADIO_2057_RCCAL_MASTER, 0x61); in wlc_phy_radio2057_rccal()
19892 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0xc0); in wlc_phy_radio2057_rccal()
19894 write_radio_reg(pi, RADIO_2057v7_RCCAL_MASTER, 0x61); in wlc_phy_radio2057_rccal()
19896 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0xe9); in wlc_phy_radio2057_rccal()
19898 write_radio_reg(pi, RADIO_2057_RCCAL_X1, 0x6e); in wlc_phy_radio2057_rccal()
19899 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x55); in wlc_phy_radio2057_rccal()
19902 rccal_valid = read_radio_reg(pi, RADIO_2057_RCCAL_DONE_OSCCAP); in wlc_phy_radio2057_rccal()
19909 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x15); in wlc_phy_radio2057_rccal()
19913 write_radio_reg(pi, RADIO_2057_RCCAL_MASTER, 0x69); in wlc_phy_radio2057_rccal()
19914 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0xb0); in wlc_phy_radio2057_rccal()
19916 write_radio_reg(pi, RADIO_2057v7_RCCAL_MASTER, 0x69); in wlc_phy_radio2057_rccal()
19918 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0xd5); in wlc_phy_radio2057_rccal()
19920 write_radio_reg(pi, RADIO_2057_RCCAL_X1, 0x6e); in wlc_phy_radio2057_rccal()
19921 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x55); in wlc_phy_radio2057_rccal()
19924 rccal_valid = read_radio_reg(pi, RADIO_2057_RCCAL_DONE_OSCCAP); in wlc_phy_radio2057_rccal()
19931 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x15); in wlc_phy_radio2057_rccal()
19935 write_radio_reg(pi, RADIO_2057_RCCAL_MASTER, 0x73); in wlc_phy_radio2057_rccal()
19937 write_radio_reg(pi, RADIO_2057_RCCAL_X1, 0x28); in wlc_phy_radio2057_rccal()
19938 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0xb0); in wlc_phy_radio2057_rccal()
19940 write_radio_reg(pi, RADIO_2057v7_RCCAL_MASTER, 0x73); in wlc_phy_radio2057_rccal()
19941 write_radio_reg(pi, RADIO_2057_RCCAL_X1, 0x6e); in wlc_phy_radio2057_rccal()
19942 write_radio_reg(pi, RADIO_2057_RCCAL_TRC0, 0x99); in wlc_phy_radio2057_rccal()
19944 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x55); in wlc_phy_radio2057_rccal()
19947 rccal_valid = read_radio_reg(pi, RADIO_2057_RCCAL_DONE_OSCCAP); in wlc_phy_radio2057_rccal()
19957 write_radio_reg(pi, RADIO_2057_RCCAL_START_R1_Q1_P1, 0x15); in wlc_phy_radio2057_rccal()
19962 static void wlc_phy_radio_postinit_2057(struct brcms_phy *pi) in wlc_phy_radio_postinit_2057() argument
19965 mod_radio_reg(pi, RADIO_2057_XTALPUOVR_PINCTRL, 0x1, 0x1); in wlc_phy_radio_postinit_2057()
19967 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_CAL_RESETN, 0x78, 0x78); in wlc_phy_radio_postinit_2057()
19968 mod_radio_reg(pi, RADIO_2057_XTAL_CONFIG2, 0x80, 0x80); in wlc_phy_radio_postinit_2057()
19970 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_CAL_RESETN, 0x78, 0x0); in wlc_phy_radio_postinit_2057()
19971 mod_radio_reg(pi, RADIO_2057_XTAL_CONFIG2, 0x80, 0x0); in wlc_phy_radio_postinit_2057()
19973 if (pi->phy_init_por) { in wlc_phy_radio_postinit_2057()
19974 wlc_phy_radio205x_rcal(pi); in wlc_phy_radio_postinit_2057()
19975 wlc_phy_radio2057_rccal(pi); in wlc_phy_radio_postinit_2057()
19978 mod_radio_reg(pi, RADIO_2057_RFPLL_MASTER, 0x8, 0x0); in wlc_phy_radio_postinit_2057()
19981 static void wlc_phy_radio_init_2056(struct brcms_phy *pi) in wlc_phy_radio_init_2056() argument
19987 if (NREV_IS(pi->pubpi.phy_rev, 3)) { in wlc_phy_radio_init_2056()
19991 } else if (NREV_IS(pi->pubpi.phy_rev, 4)) { in wlc_phy_radio_init_2056()
19996 switch (pi->pubpi.radiorev) { in wlc_phy_radio_init_2056()
20033 wlc_phy_init_radio_regs(pi, regs_SYN_2056_ptr, (u16) RADIO_2056_SYN); in wlc_phy_radio_init_2056()
20035 wlc_phy_init_radio_regs(pi, regs_TX_2056_ptr, (u16) RADIO_2056_TX0); in wlc_phy_radio_init_2056()
20037 wlc_phy_init_radio_regs(pi, regs_TX_2056_ptr, (u16) RADIO_2056_TX1); in wlc_phy_radio_init_2056()
20039 wlc_phy_init_radio_regs(pi, regs_RX_2056_ptr, (u16) RADIO_2056_RX0); in wlc_phy_radio_init_2056()
20041 wlc_phy_init_radio_regs(pi, regs_RX_2056_ptr, (u16) RADIO_2056_RX1); in wlc_phy_radio_init_2056()
20044 static void wlc_phy_radio_postinit_2056(struct brcms_phy *pi) in wlc_phy_radio_postinit_2056() argument
20046 mod_radio_reg(pi, RADIO_2056_SYN_COM_CTRL, 0xb, 0xb); in wlc_phy_radio_postinit_2056()
20048 mod_radio_reg(pi, RADIO_2056_SYN_COM_PU, 0x2, 0x2); in wlc_phy_radio_postinit_2056()
20049 mod_radio_reg(pi, RADIO_2056_SYN_COM_RESET, 0x2, 0x2); in wlc_phy_radio_postinit_2056()
20051 mod_radio_reg(pi, RADIO_2056_SYN_COM_RESET, 0x2, 0x0); in wlc_phy_radio_postinit_2056()
20053 if ((pi->sh->boardflags2 & BFL2_LEGACY) in wlc_phy_radio_postinit_2056()
20054 || (pi->sh->boardflags2 & BFL2_XTALBUFOUTEN)) in wlc_phy_radio_postinit_2056()
20055 mod_radio_reg(pi, RADIO_2056_SYN_PLL_MAST2, 0xf4, 0x0); in wlc_phy_radio_postinit_2056()
20057 mod_radio_reg(pi, RADIO_2056_SYN_PLL_MAST2, 0xfc, 0x0); in wlc_phy_radio_postinit_2056()
20059 mod_radio_reg(pi, RADIO_2056_SYN_RCCAL_CTRL0, 0x1, 0x0); in wlc_phy_radio_postinit_2056()
20061 if (pi->phy_init_por) in wlc_phy_radio_postinit_2056()
20062 wlc_phy_radio205x_rcal(pi); in wlc_phy_radio_postinit_2056()
20065 static void wlc_phy_radio_preinit_2055(struct brcms_phy *pi) in wlc_phy_radio_preinit_2055() argument
20068 and_phy_reg(pi, 0x78, ~RFCC_POR_FORCE); in wlc_phy_radio_preinit_2055()
20069 or_phy_reg(pi, 0x78, RFCC_CHIP0_PU | RFCC_OE_POR_FORCE); in wlc_phy_radio_preinit_2055()
20071 or_phy_reg(pi, 0x78, RFCC_POR_FORCE); in wlc_phy_radio_preinit_2055()
20074 static void wlc_phy_radio_init_2055(struct brcms_phy *pi) in wlc_phy_radio_init_2055() argument
20076 wlc_phy_init_radio_regs(pi, regs_2055, RADIO_DEFAULT_CORE); in wlc_phy_radio_init_2055()
20079 static void wlc_phy_radio_postinit_2055(struct brcms_phy *pi) in wlc_phy_radio_postinit_2055() argument
20082 and_radio_reg(pi, RADIO_2055_MASTER_CNTRL1, in wlc_phy_radio_postinit_2055()
20085 if (((pi->sh->sromrev >= 4) in wlc_phy_radio_postinit_2055()
20086 && !(pi->sh->boardflags2 & BFL2_RXBB_INT_REG_DIS)) in wlc_phy_radio_postinit_2055()
20087 || ((pi->sh->sromrev < 4))) { in wlc_phy_radio_postinit_2055()
20088 and_radio_reg(pi, RADIO_2055_CORE1_RXBB_REGULATOR, 0x7F); in wlc_phy_radio_postinit_2055()
20089 and_radio_reg(pi, RADIO_2055_CORE2_RXBB_REGULATOR, 0x7F); in wlc_phy_radio_postinit_2055()
20092 mod_radio_reg(pi, RADIO_2055_RRCCAL_N_OPT_SEL, 0x3F, 0x2C); in wlc_phy_radio_postinit_2055()
20093 write_radio_reg(pi, RADIO_2055_CAL_MISC, 0x3C); in wlc_phy_radio_postinit_2055()
20095 and_radio_reg(pi, RADIO_2055_CAL_MISC, in wlc_phy_radio_postinit_2055()
20098 or_radio_reg(pi, RADIO_2055_CAL_LPO_CNTRL, RADIO_2055_CAL_LPO_ENABLE); in wlc_phy_radio_postinit_2055()
20100 or_radio_reg(pi, RADIO_2055_CAL_MISC, RADIO_2055_RRCAL_RST_N); in wlc_phy_radio_postinit_2055()
20104 or_radio_reg(pi, RADIO_2055_CAL_MISC, RADIO_2055_RRCAL_START); in wlc_phy_radio_postinit_2055()
20106 SPINWAIT(((read_radio_reg(pi, RADIO_2055_CAL_COUNTER_OUT2) & in wlc_phy_radio_postinit_2055()
20109 if (WARN((read_radio_reg(pi, RADIO_2055_CAL_COUNTER_OUT2) & in wlc_phy_radio_postinit_2055()
20114 and_radio_reg(pi, RADIO_2055_CAL_LPO_CNTRL, in wlc_phy_radio_postinit_2055()
20117 wlc_phy_chanspec_set((struct brcms_phy_pub *) pi, pi->radio_chanspec); in wlc_phy_radio_postinit_2055()
20119 write_radio_reg(pi, RADIO_2055_CORE1_RXBB_LPF, 9); in wlc_phy_radio_postinit_2055()
20120 write_radio_reg(pi, RADIO_2055_CORE2_RXBB_LPF, 9); in wlc_phy_radio_postinit_2055()
20122 write_radio_reg(pi, RADIO_2055_CORE1_RXBB_MIDAC_HIPAS, 0x83); in wlc_phy_radio_postinit_2055()
20123 write_radio_reg(pi, RADIO_2055_CORE2_RXBB_MIDAC_HIPAS, 0x83); in wlc_phy_radio_postinit_2055()
20125 mod_radio_reg(pi, RADIO_2055_CORE1_LNA_GAINBST, in wlc_phy_radio_postinit_2055()
20127 mod_radio_reg(pi, RADIO_2055_CORE2_LNA_GAINBST, in wlc_phy_radio_postinit_2055()
20129 if (pi->nphy_gain_boost) { in wlc_phy_radio_postinit_2055()
20130 and_radio_reg(pi, RADIO_2055_CORE1_RXRF_SPC1, in wlc_phy_radio_postinit_2055()
20132 and_radio_reg(pi, RADIO_2055_CORE2_RXRF_SPC1, in wlc_phy_radio_postinit_2055()
20135 or_radio_reg(pi, RADIO_2055_CORE1_RXRF_SPC1, in wlc_phy_radio_postinit_2055()
20137 or_radio_reg(pi, RADIO_2055_CORE2_RXRF_SPC1, in wlc_phy_radio_postinit_2055()
20144 void wlc_phy_switch_radio_nphy(struct brcms_phy *pi, bool on) in wlc_phy_switch_radio_nphy() argument
20147 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_switch_radio_nphy()
20148 if (!pi->radio_is_on) { in wlc_phy_switch_radio_nphy()
20149 wlc_phy_radio_preinit_205x(pi); in wlc_phy_switch_radio_nphy()
20150 wlc_phy_radio_init_2057(pi); in wlc_phy_switch_radio_nphy()
20151 wlc_phy_radio_postinit_2057(pi); in wlc_phy_switch_radio_nphy()
20154 wlc_phy_chanspec_set((struct brcms_phy_pub *) pi, in wlc_phy_switch_radio_nphy()
20155 pi->radio_chanspec); in wlc_phy_switch_radio_nphy()
20156 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_switch_radio_nphy()
20157 wlc_phy_radio_preinit_205x(pi); in wlc_phy_switch_radio_nphy()
20158 wlc_phy_radio_init_2056(pi); in wlc_phy_switch_radio_nphy()
20159 wlc_phy_radio_postinit_2056(pi); in wlc_phy_switch_radio_nphy()
20161 wlc_phy_chanspec_set((struct brcms_phy_pub *) pi, in wlc_phy_switch_radio_nphy()
20162 pi->radio_chanspec); in wlc_phy_switch_radio_nphy()
20164 wlc_phy_radio_preinit_2055(pi); in wlc_phy_switch_radio_nphy()
20165 wlc_phy_radio_init_2055(pi); in wlc_phy_switch_radio_nphy()
20166 wlc_phy_radio_postinit_2055(pi); in wlc_phy_switch_radio_nphy()
20169 pi->radio_is_on = true; in wlc_phy_switch_radio_nphy()
20173 if (NREV_GE(pi->pubpi.phy_rev, 3) in wlc_phy_switch_radio_nphy()
20174 && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_switch_radio_nphy()
20175 and_phy_reg(pi, 0x78, ~RFCC_CHIP0_PU); in wlc_phy_switch_radio_nphy()
20176 mod_radio_reg(pi, RADIO_2056_SYN_COM_PU, 0x2, 0x0); in wlc_phy_switch_radio_nphy()
20178 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20181 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20184 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20187 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20190 mod_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20193 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20197 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20200 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20203 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20206 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20209 mod_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20212 write_radio_reg(pi, in wlc_phy_switch_radio_nphy()
20216 pi->radio_is_on = false; in wlc_phy_switch_radio_nphy()
20219 if (NREV_GE(pi->pubpi.phy_rev, 8)) { in wlc_phy_switch_radio_nphy()
20220 and_phy_reg(pi, 0x78, ~RFCC_CHIP0_PU); in wlc_phy_switch_radio_nphy()
20221 pi->radio_is_on = false; in wlc_phy_switch_radio_nphy()
20228 wlc_phy_chan2freq_nphy(struct brcms_phy *pi, uint channel, int *f, in wlc_phy_chan2freq_nphy() argument
20242 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_chan2freq_nphy()
20244 if (NREV_IS(pi->pubpi.phy_rev, 7)) { in wlc_phy_chan2freq_nphy()
20249 } else if (NREV_IS(pi->pubpi.phy_rev, 8) in wlc_phy_chan2freq_nphy()
20250 || NREV_IS(pi->pubpi.phy_rev, 9)) { in wlc_phy_chan2freq_nphy()
20251 switch (pi->pubpi.radiorev) { in wlc_phy_chan2freq_nphy()
20255 if (pi->pubpi.radiover == 0x0) { in wlc_phy_chan2freq_nphy()
20262 } else if (pi->pubpi.radiover == 0x1) { in wlc_phy_chan2freq_nphy()
20289 } else if (NREV_IS(pi->pubpi.phy_rev, 16)) { in wlc_phy_chan2freq_nphy()
20298 if (pi->pubpi.radiorev == 5) { in wlc_phy_chan2freq_nphy()
20312 if (pi->pubpi.radiorev == 5) { in wlc_phy_chan2freq_nphy()
20320 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_chan2freq_nphy()
20321 if (NREV_IS(pi->pubpi.phy_rev, 3)) { in wlc_phy_chan2freq_nphy()
20324 } else if (NREV_IS(pi->pubpi.phy_rev, 4)) { in wlc_phy_chan2freq_nphy()
20327 } else if (NREV_IS(pi->pubpi.phy_rev, 5) in wlc_phy_chan2freq_nphy()
20328 || NREV_IS(pi->pubpi.phy_rev, 6)) { in wlc_phy_chan2freq_nphy()
20329 switch (pi->pubpi.radiorev) { in wlc_phy_chan2freq_nphy()
20389 u8 wlc_phy_get_chan_freq_range_nphy(struct brcms_phy *pi, uint channel) in wlc_phy_get_chan_freq_range_nphy() argument
20398 channel = CHSPEC_CHANNEL(pi->radio_chanspec); in wlc_phy_get_chan_freq_range_nphy()
20400 wlc_phy_chan2freq_nphy(pi, channel, &freq, &t0, &t1, &t2, &t3); in wlc_phy_get_chan_freq_range_nphy()
20402 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_get_chan_freq_range_nphy()
20414 wlc_phy_chanspec_radio2055_setup(struct brcms_phy *pi, in wlc_phy_chanspec_radio2055_setup() argument
20418 write_radio_reg(pi, RADIO_2055_PLL_REF, ci->RF_pll_ref); in wlc_phy_chanspec_radio2055_setup()
20419 write_radio_reg(pi, RADIO_2055_RF_PLL_MOD0, ci->RF_rf_pll_mod0); in wlc_phy_chanspec_radio2055_setup()
20420 write_radio_reg(pi, RADIO_2055_RF_PLL_MOD1, ci->RF_rf_pll_mod1); in wlc_phy_chanspec_radio2055_setup()
20421 write_radio_reg(pi, RADIO_2055_VCO_CAP_TAIL, ci->RF_vco_cap_tail); in wlc_phy_chanspec_radio2055_setup()
20423 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20425 write_radio_reg(pi, RADIO_2055_VCO_CAL1, ci->RF_vco_cal1); in wlc_phy_chanspec_radio2055_setup()
20426 write_radio_reg(pi, RADIO_2055_VCO_CAL2, ci->RF_vco_cal2); in wlc_phy_chanspec_radio2055_setup()
20427 write_radio_reg(pi, RADIO_2055_PLL_LF_C1, ci->RF_pll_lf_c1); in wlc_phy_chanspec_radio2055_setup()
20428 write_radio_reg(pi, RADIO_2055_PLL_LF_R1, ci->RF_pll_lf_r1); in wlc_phy_chanspec_radio2055_setup()
20430 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20432 write_radio_reg(pi, RADIO_2055_PLL_LF_C2, ci->RF_pll_lf_c2); in wlc_phy_chanspec_radio2055_setup()
20433 write_radio_reg(pi, RADIO_2055_LGBUF_CEN_BUF, ci->RF_lgbuf_cen_buf); in wlc_phy_chanspec_radio2055_setup()
20434 write_radio_reg(pi, RADIO_2055_LGEN_TUNE1, ci->RF_lgen_tune1); in wlc_phy_chanspec_radio2055_setup()
20435 write_radio_reg(pi, RADIO_2055_LGEN_TUNE2, ci->RF_lgen_tune2); in wlc_phy_chanspec_radio2055_setup()
20437 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20439 write_radio_reg(pi, RADIO_2055_CORE1_LGBUF_A_TUNE, in wlc_phy_chanspec_radio2055_setup()
20441 write_radio_reg(pi, RADIO_2055_CORE1_LGBUF_G_TUNE, in wlc_phy_chanspec_radio2055_setup()
20443 write_radio_reg(pi, RADIO_2055_CORE1_RXRF_REG1, ci->RF_core1_rxrf_reg1); in wlc_phy_chanspec_radio2055_setup()
20444 write_radio_reg(pi, RADIO_2055_CORE1_TX_PGA_PAD_TN, in wlc_phy_chanspec_radio2055_setup()
20447 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20449 write_radio_reg(pi, RADIO_2055_CORE1_TX_MX_BGTRIM, in wlc_phy_chanspec_radio2055_setup()
20451 write_radio_reg(pi, RADIO_2055_CORE2_LGBUF_A_TUNE, in wlc_phy_chanspec_radio2055_setup()
20453 write_radio_reg(pi, RADIO_2055_CORE2_LGBUF_G_TUNE, in wlc_phy_chanspec_radio2055_setup()
20455 write_radio_reg(pi, RADIO_2055_CORE2_RXRF_REG1, ci->RF_core2_rxrf_reg1); in wlc_phy_chanspec_radio2055_setup()
20457 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20459 write_radio_reg(pi, RADIO_2055_CORE2_TX_PGA_PAD_TN, in wlc_phy_chanspec_radio2055_setup()
20461 write_radio_reg(pi, RADIO_2055_CORE2_TX_MX_BGTRIM, in wlc_phy_chanspec_radio2055_setup()
20466 write_radio_reg(pi, RADIO_2055_VCO_CAL10, 0x05); in wlc_phy_chanspec_radio2055_setup()
20467 write_radio_reg(pi, RADIO_2055_VCO_CAL10, 0x45); in wlc_phy_chanspec_radio2055_setup()
20469 BRCMS_PHY_WAR_PR51571(pi); in wlc_phy_chanspec_radio2055_setup()
20471 write_radio_reg(pi, RADIO_2055_VCO_CAL10, 0x65); in wlc_phy_chanspec_radio2055_setup()
20477 wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi, in wlc_phy_chanspec_radio2056_setup() argument
20482 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20485 write_radio_reg(pi, RADIO_2056_SYN_PLL_VCOCAL2 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20487 write_radio_reg(pi, RADIO_2056_SYN_PLL_REFDIV | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20489 write_radio_reg(pi, RADIO_2056_SYN_PLL_MMD2 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20491 write_radio_reg(pi, RADIO_2056_SYN_PLL_MMD1 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20493 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER1 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20495 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20497 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER3 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20499 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER4 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20501 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER5 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20503 write_radio_reg(pi, RADIO_2056_SYN_RESERVED_ADDR27 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20505 write_radio_reg(pi, RADIO_2056_SYN_RESERVED_ADDR28 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20507 write_radio_reg(pi, RADIO_2056_SYN_RESERVED_ADDR29 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20509 write_radio_reg(pi, RADIO_2056_SYN_LOGEN_VCOBUF1 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20511 write_radio_reg(pi, RADIO_2056_SYN_LOGEN_MIXER2 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20513 write_radio_reg(pi, RADIO_2056_SYN_LOGEN_BUF3 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20515 write_radio_reg(pi, RADIO_2056_SYN_LOGEN_BUF4 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20518 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20521 write_radio_reg(pi, RADIO_2056_RX_LNAG_TUNE | RADIO_2056_RX0, in wlc_phy_chanspec_radio2056_setup()
20523 write_radio_reg(pi, RADIO_2056_TX_INTPAA_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20525 write_radio_reg(pi, RADIO_2056_TX_INTPAG_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20527 write_radio_reg(pi, RADIO_2056_TX_PADA_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20529 write_radio_reg(pi, RADIO_2056_TX_PADG_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20531 write_radio_reg(pi, RADIO_2056_TX_PGAA_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20533 write_radio_reg(pi, RADIO_2056_TX_PGAG_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20535 write_radio_reg(pi, RADIO_2056_TX_MIXA_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20537 write_radio_reg(pi, RADIO_2056_TX_MIXG_BOOST_TUNE | RADIO_2056_TX0, in wlc_phy_chanspec_radio2056_setup()
20540 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20543 write_radio_reg(pi, RADIO_2056_RX_LNAG_TUNE | RADIO_2056_RX1, in wlc_phy_chanspec_radio2056_setup()
20545 write_radio_reg(pi, RADIO_2056_TX_INTPAA_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20547 write_radio_reg(pi, RADIO_2056_TX_INTPAG_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20549 write_radio_reg(pi, RADIO_2056_TX_PADA_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20551 write_radio_reg(pi, RADIO_2056_TX_PADG_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20553 write_radio_reg(pi, RADIO_2056_TX_PGAA_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20555 write_radio_reg(pi, RADIO_2056_TX_PGAG_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20557 write_radio_reg(pi, RADIO_2056_TX_MIXA_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20559 write_radio_reg(pi, RADIO_2056_TX_MIXG_BOOST_TUNE | RADIO_2056_TX1, in wlc_phy_chanspec_radio2056_setup()
20562 if (NREV_IS(pi->pubpi.phy_rev, 3)) in wlc_phy_chanspec_radio2056_setup()
20564 else if (NREV_IS(pi->pubpi.phy_rev, 4)) in wlc_phy_chanspec_radio2056_setup()
20567 switch (pi->pubpi.radiorev) { in wlc_phy_chanspec_radio2056_setup()
20586 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_chanspec_radio2056_setup()
20587 write_radio_reg(pi, RADIO_2056_SYN_PLL_CP2 | in wlc_phy_chanspec_radio2056_setup()
20591 write_radio_reg(pi, RADIO_2056_SYN_PLL_CP2 | in wlc_phy_chanspec_radio2056_setup()
20595 if (pi->sh->boardflags2 & BFL2_GPLL_WAR) { in wlc_phy_chanspec_radio2056_setup()
20596 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2056_setup()
20597 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER1 | in wlc_phy_chanspec_radio2056_setup()
20599 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 | in wlc_phy_chanspec_radio2056_setup()
20602 if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || in wlc_phy_chanspec_radio2056_setup()
20603 (pi->sh->chip == BCMA_CHIP_ID_BCM47162)) { in wlc_phy_chanspec_radio2056_setup()
20604 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20607 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20611 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20614 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20621 if ((pi->sh->boardflags2 & BFL2_GPLL_WAR2) && in wlc_phy_chanspec_radio2056_setup()
20622 (CHSPEC_IS2G(pi->radio_chanspec))) { in wlc_phy_chanspec_radio2056_setup()
20623 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20626 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20629 write_radio_reg(pi, in wlc_phy_chanspec_radio2056_setup()
20632 write_radio_reg(pi, RADIO_2056_SYN_PLL_CP2 | RADIO_2056_SYN, in wlc_phy_chanspec_radio2056_setup()
20636 if (pi->sh->boardflags2 & BFL2_APLL_WAR) { in wlc_phy_chanspec_radio2056_setup()
20637 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2056_setup()
20638 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER1 | in wlc_phy_chanspec_radio2056_setup()
20640 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 | in wlc_phy_chanspec_radio2056_setup()
20642 write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER4 | in wlc_phy_chanspec_radio2056_setup()
20644 write_radio_reg(pi, RADIO_2056_SYN_PLL_CP2 | in wlc_phy_chanspec_radio2056_setup()
20649 if (PHY_IPA(pi) && CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2056_setup()
20657 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_chanspec_radio2056_setup()
20659 if (NREV_GE(pi->pubpi.phy_rev, 5)) { in wlc_phy_chanspec_radio2056_setup()
20661 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20664 if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || in wlc_phy_chanspec_radio2056_setup()
20665 (pi->sh->chip == BCMA_CHIP_ID_BCM47162)) { in wlc_phy_chanspec_radio2056_setup()
20676 if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 || in wlc_phy_chanspec_radio2056_setup()
20677 pi->sh->chip == BCMA_CHIP_ID_BCM43225) && in wlc_phy_chanspec_radio2056_setup()
20678 pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC) { in wlc_phy_chanspec_radio2056_setup()
20689 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20691 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20693 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20696 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20699 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20702 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20705 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20710 bias = (pi->bw == WL_CHANSPEC_BW_40) ? in wlc_phy_chanspec_radio2056_setup()
20713 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20715 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20717 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20720 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, PA_SPARE1, in wlc_phy_chanspec_radio2056_setup()
20725 if (PHY_IPA(pi) && NREV_IS(pi->pubpi.phy_rev, 6) in wlc_phy_chanspec_radio2056_setup()
20726 && CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2056_setup()
20734 freq = CHAN5G_FREQ(CHSPEC_CHANNEL(pi->radio_chanspec)); in wlc_phy_chanspec_radio2056_setup()
20766 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_chanspec_radio2056_setup()
20767 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20769 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20771 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20773 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20776 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20778 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20781 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20786 if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 || in wlc_phy_chanspec_radio2056_setup()
20787 pi->sh->chip == BCMA_CHIP_ID_BCM43225) && in wlc_phy_chanspec_radio2056_setup()
20788 pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC) in wlc_phy_chanspec_radio2056_setup()
20791 pabias = (pi->phy_pabias == 0) ? 0x30 : pi->phy_pabias; in wlc_phy_chanspec_radio2056_setup()
20793 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20795 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20797 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_chanspec_radio2056_setup()
20804 wlc_phy_radio205x_vcocal_nphy(pi); in wlc_phy_chanspec_radio2056_setup()
20807 void wlc_phy_radio205x_vcocal_nphy(struct brcms_phy *pi) in wlc_phy_radio205x_vcocal_nphy() argument
20809 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_radio205x_vcocal_nphy()
20810 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_EN, 0x01, 0x0); in wlc_phy_radio205x_vcocal_nphy()
20811 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_CAL_RESETN, 0x04, 0x0); in wlc_phy_radio205x_vcocal_nphy()
20812 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_CAL_RESETN, 0x04, in wlc_phy_radio205x_vcocal_nphy()
20814 mod_radio_reg(pi, RADIO_2057_RFPLL_MISC_EN, 0x01, 0x01); in wlc_phy_radio205x_vcocal_nphy()
20815 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_radio205x_vcocal_nphy()
20816 write_radio_reg(pi, RADIO_2056_SYN_PLL_VCOCAL12, 0x0); in wlc_phy_radio205x_vcocal_nphy()
20817 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST3, 0x38); in wlc_phy_radio205x_vcocal_nphy()
20818 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST3, 0x18); in wlc_phy_radio205x_vcocal_nphy()
20819 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST3, 0x38); in wlc_phy_radio205x_vcocal_nphy()
20820 write_radio_reg(pi, RADIO_2056_SYN_PLL_MAST3, 0x39); in wlc_phy_radio205x_vcocal_nphy()
20828 struct brcms_phy *pi, in wlc_phy_chanspec_radio2057_setup() argument
20837 if (pi->pubpi.radiorev == 5) { in wlc_phy_chanspec_radio2057_setup()
20839 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20842 write_radio_reg(pi, RADIO_2057_VCOCAL_COUNTVAL1, in wlc_phy_chanspec_radio2057_setup()
20844 write_radio_reg(pi, RADIO_2057_RFPLL_REFMASTER_SPAREXTALSIZE, in wlc_phy_chanspec_radio2057_setup()
20846 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20848 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20850 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20852 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, in wlc_phy_chanspec_radio2057_setup()
20854 write_radio_reg(pi, RADIO_2057_RFPLL_MMD0, ci2->RF_rfpll_mmd0); in wlc_phy_chanspec_radio2057_setup()
20855 write_radio_reg(pi, RADIO_2057_RFPLL_MMD1, ci2->RF_rfpll_mmd1); in wlc_phy_chanspec_radio2057_setup()
20856 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20858 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20861 write_radio_reg(pi, RADIO_2057_LOGEN_INDBUF2G_TUNE, in wlc_phy_chanspec_radio2057_setup()
20864 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20867 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20870 write_radio_reg(pi, RADIO_2057_LNA2G_TUNE_CORE0, in wlc_phy_chanspec_radio2057_setup()
20873 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20876 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20879 write_radio_reg(pi, RADIO_2057_LNA2G_TUNE_CORE1, in wlc_phy_chanspec_radio2057_setup()
20884 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20887 write_radio_reg(pi, RADIO_2057_VCOCAL_COUNTVAL1, in wlc_phy_chanspec_radio2057_setup()
20889 write_radio_reg(pi, RADIO_2057_RFPLL_REFMASTER_SPAREXTALSIZE, in wlc_phy_chanspec_radio2057_setup()
20891 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20893 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20895 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20897 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, ci->RF_cp_kpd_idac); in wlc_phy_chanspec_radio2057_setup()
20898 write_radio_reg(pi, RADIO_2057_RFPLL_MMD0, ci->RF_rfpll_mmd0); in wlc_phy_chanspec_radio2057_setup()
20899 write_radio_reg(pi, RADIO_2057_RFPLL_MMD1, ci->RF_rfpll_mmd1); in wlc_phy_chanspec_radio2057_setup()
20900 write_radio_reg(pi, RADIO_2057_VCOBUF_TUNE, ci->RF_vcobuf_tune); in wlc_phy_chanspec_radio2057_setup()
20901 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20904 write_radio_reg(pi, RADIO_2057_LOGEN_MX5G_TUNE, in wlc_phy_chanspec_radio2057_setup()
20906 write_radio_reg(pi, RADIO_2057_LOGEN_INDBUF2G_TUNE, in wlc_phy_chanspec_radio2057_setup()
20908 write_radio_reg(pi, RADIO_2057_LOGEN_INDBUF5G_TUNE, in wlc_phy_chanspec_radio2057_setup()
20911 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20914 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20917 write_radio_reg(pi, RADIO_2057_PGA_BOOST_TUNE_CORE0, in wlc_phy_chanspec_radio2057_setup()
20919 write_radio_reg(pi, RADIO_2057_TXMIX5G_BOOST_TUNE_CORE0, in wlc_phy_chanspec_radio2057_setup()
20921 write_radio_reg(pi, RADIO_2057_PAD5G_TUNE_MISC_PUS_CORE0, in wlc_phy_chanspec_radio2057_setup()
20923 write_radio_reg(pi, RADIO_2057_LNA2G_TUNE_CORE0, in wlc_phy_chanspec_radio2057_setup()
20925 write_radio_reg(pi, RADIO_2057_LNA5G_TUNE_CORE0, in wlc_phy_chanspec_radio2057_setup()
20928 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20931 write_radio_reg(pi, in wlc_phy_chanspec_radio2057_setup()
20934 write_radio_reg(pi, RADIO_2057_PGA_BOOST_TUNE_CORE1, in wlc_phy_chanspec_radio2057_setup()
20936 write_radio_reg(pi, RADIO_2057_TXMIX5G_BOOST_TUNE_CORE1, in wlc_phy_chanspec_radio2057_setup()
20938 write_radio_reg(pi, RADIO_2057_PAD5G_TUNE_MISC_PUS_CORE1, in wlc_phy_chanspec_radio2057_setup()
20940 write_radio_reg(pi, RADIO_2057_LNA2G_TUNE_CORE1, in wlc_phy_chanspec_radio2057_setup()
20942 write_radio_reg(pi, RADIO_2057_LNA5G_TUNE_CORE1, in wlc_phy_chanspec_radio2057_setup()
20946 if ((pi->pubpi.radiorev <= 4) || (pi->pubpi.radiorev == 6)) { in wlc_phy_chanspec_radio2057_setup()
20948 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2057_setup()
20949 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20951 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, 0x3f); in wlc_phy_chanspec_radio2057_setup()
20952 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20954 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20957 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20959 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, 0x3f); in wlc_phy_chanspec_radio2057_setup()
20960 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20962 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20965 } else if ((pi->pubpi.radiorev == 5) || (pi->pubpi.radiorev == 7) || in wlc_phy_chanspec_radio2057_setup()
20966 (pi->pubpi.radiorev == 8)) { in wlc_phy_chanspec_radio2057_setup()
20968 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2057_setup()
20969 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20971 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, 0x30); in wlc_phy_chanspec_radio2057_setup()
20972 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20974 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20977 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_R1, in wlc_phy_chanspec_radio2057_setup()
20979 write_radio_reg(pi, RADIO_2057_CP_KPD_IDAC, 0x3f); in wlc_phy_chanspec_radio2057_setup()
20980 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C1, in wlc_phy_chanspec_radio2057_setup()
20982 write_radio_reg(pi, RADIO_2057_RFPLL_LOOPFILTER_C2, in wlc_phy_chanspec_radio2057_setup()
20988 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_chanspec_radio2057_setup()
20989 if (PHY_IPA(pi)) { in wlc_phy_chanspec_radio2057_setup()
20990 if (pi->pubpi.radiorev == 3) in wlc_phy_chanspec_radio2057_setup()
20993 if (pi->pubpi.radiorev == 5) in wlc_phy_chanspec_radio2057_setup()
20997 if (pi->pubpi.radiorev != 5) { in wlc_phy_chanspec_radio2057_setup()
21007 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_chanspec_radio2057_setup()
21012 WRITE_RADIO_REG4(pi, RADIO_2057, CORE, coreNum, in wlc_phy_chanspec_radio2057_setup()
21020 wlc_phy_radio205x_vcocal_nphy(pi); in wlc_phy_chanspec_radio2057_setup()
21024 wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec, in wlc_phy_chanspec_nphy_setup() argument
21029 val = read_phy_reg(pi, 0x09) & NPHY_BandControl_currentBand; in wlc_phy_chanspec_nphy_setup()
21032 val = bcma_read16(pi->d11core, D11REGOFFS(psm_phy_hdr_param)); in wlc_phy_chanspec_nphy_setup()
21033 bcma_write16(pi->d11core, D11REGOFFS(psm_phy_hdr_param), in wlc_phy_chanspec_nphy_setup()
21036 or_phy_reg(pi, (NPHY_TO_BPHY_OFF + BPHY_BB_CONFIG), in wlc_phy_chanspec_nphy_setup()
21039 bcma_write16(pi->d11core, D11REGOFFS(psm_phy_hdr_param), val); in wlc_phy_chanspec_nphy_setup()
21041 or_phy_reg(pi, 0x09, NPHY_BandControl_currentBand); in wlc_phy_chanspec_nphy_setup()
21044 and_phy_reg(pi, 0x09, ~NPHY_BandControl_currentBand); in wlc_phy_chanspec_nphy_setup()
21046 val = bcma_read16(pi->d11core, D11REGOFFS(psm_phy_hdr_param)); in wlc_phy_chanspec_nphy_setup()
21047 bcma_write16(pi->d11core, D11REGOFFS(psm_phy_hdr_param), in wlc_phy_chanspec_nphy_setup()
21050 and_phy_reg(pi, (NPHY_TO_BPHY_OFF + BPHY_BB_CONFIG), in wlc_phy_chanspec_nphy_setup()
21053 bcma_write16(pi->d11core, D11REGOFFS(psm_phy_hdr_param), val); in wlc_phy_chanspec_nphy_setup()
21056 write_phy_reg(pi, 0x1ce, ci->PHY_BW1a); in wlc_phy_chanspec_nphy_setup()
21057 write_phy_reg(pi, 0x1cf, ci->PHY_BW2); in wlc_phy_chanspec_nphy_setup()
21058 write_phy_reg(pi, 0x1d0, ci->PHY_BW3); in wlc_phy_chanspec_nphy_setup()
21060 write_phy_reg(pi, 0x1d1, ci->PHY_BW4); in wlc_phy_chanspec_nphy_setup()
21061 write_phy_reg(pi, 0x1d2, ci->PHY_BW5); in wlc_phy_chanspec_nphy_setup()
21062 write_phy_reg(pi, 0x1d3, ci->PHY_BW6); in wlc_phy_chanspec_nphy_setup()
21064 if (CHSPEC_CHANNEL(pi->radio_chanspec) == 14) { in wlc_phy_chanspec_nphy_setup()
21065 wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_ofdm_en, 0); in wlc_phy_chanspec_nphy_setup()
21067 or_phy_reg(pi, NPHY_TO_BPHY_OFF + BPHY_TEST, 0x800); in wlc_phy_chanspec_nphy_setup()
21069 wlc_phy_classifier_nphy(pi, NPHY_ClassifierCtrl_ofdm_en, in wlc_phy_chanspec_nphy_setup()
21073 and_phy_reg(pi, NPHY_TO_BPHY_OFF + BPHY_TEST, ~0x840); in wlc_phy_chanspec_nphy_setup()
21076 if (pi->nphy_txpwrctrl == PHY_TPC_HW_OFF) in wlc_phy_chanspec_nphy_setup()
21077 wlc_phy_txpwr_fixpower_nphy(pi); in wlc_phy_chanspec_nphy_setup()
21079 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_chanspec_nphy_setup()
21080 wlc_phy_adjust_lnagaintbl_nphy(pi); in wlc_phy_chanspec_nphy_setup()
21082 wlc_phy_txlpfbw_nphy(pi); in wlc_phy_chanspec_nphy_setup()
21084 if (NREV_GE(pi->pubpi.phy_rev, 3) in wlc_phy_chanspec_nphy_setup()
21085 && (pi->phy_spuravoid != SPURAVOID_DISABLE)) { in wlc_phy_chanspec_nphy_setup()
21089 if (!CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_chanspec_nphy_setup()
21090 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_chanspec_nphy_setup()
21097 } else if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_chanspec_nphy_setup()
21100 } else if (pi->nphy_aband_spurwar_en && in wlc_phy_chanspec_nphy_setup()
21102 if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) in wlc_phy_chanspec_nphy_setup()
21103 && (pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) { in wlc_phy_chanspec_nphy_setup()
21110 if (pi->phy_spuravoid == SPURAVOID_FORCEON) in wlc_phy_chanspec_nphy_setup()
21113 if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || in wlc_phy_chanspec_nphy_setup()
21114 (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) { in wlc_phy_chanspec_nphy_setup()
21115 bcma_pmu_spuravoid_pllupdate(&pi->d11core->bus->drv_cc, in wlc_phy_chanspec_nphy_setup()
21118 wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false); in wlc_phy_chanspec_nphy_setup()
21119 bcma_pmu_spuravoid_pllupdate(&pi->d11core->bus->drv_cc, in wlc_phy_chanspec_nphy_setup()
21121 wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true); in wlc_phy_chanspec_nphy_setup()
21124 if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) || in wlc_phy_chanspec_nphy_setup()
21125 (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) { in wlc_phy_chanspec_nphy_setup()
21127 bcma_write16(pi->d11core, in wlc_phy_chanspec_nphy_setup()
21130 bcma_write16(pi->d11core, in wlc_phy_chanspec_nphy_setup()
21133 bcma_write16(pi->d11core, in wlc_phy_chanspec_nphy_setup()
21136 bcma_write16(pi->d11core, in wlc_phy_chanspec_nphy_setup()
21141 if (!((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || in wlc_phy_chanspec_nphy_setup()
21142 (pi->sh->chip == BCMA_CHIP_ID_BCM47162))) in wlc_phy_chanspec_nphy_setup()
21143 wlapi_bmac_core_phypll_reset(pi->sh->physhim); in wlc_phy_chanspec_nphy_setup()
21145 mod_phy_reg(pi, 0x01, (0x1 << 15), in wlc_phy_chanspec_nphy_setup()
21148 wlc_phy_resetcca_nphy(pi); in wlc_phy_chanspec_nphy_setup()
21150 pi->phy_isspuravoid = (spuravoid > 0); in wlc_phy_chanspec_nphy_setup()
21153 if (NREV_LT(pi->pubpi.phy_rev, 7)) in wlc_phy_chanspec_nphy_setup()
21154 write_phy_reg(pi, 0x17e, 0x3830); in wlc_phy_chanspec_nphy_setup()
21156 wlc_phy_spurwar_nphy(pi); in wlc_phy_chanspec_nphy_setup()
21159 void wlc_phy_chanspec_set_nphy(struct brcms_phy *pi, u16 chanspec) in wlc_phy_chanspec_set_nphy() argument
21168 (pi, CHSPEC_CHANNEL(chanspec), &freq, &t0, &t1, &t2, &t3)) in wlc_phy_chanspec_set_nphy()
21171 wlc_phy_chanspec_radio_set((struct brcms_phy_pub *) pi, chanspec); in wlc_phy_chanspec_set_nphy()
21173 if (CHSPEC_BW(chanspec) != pi->bw) in wlc_phy_chanspec_set_nphy()
21174 wlapi_bmac_bw_set(pi->sh->physhim, CHSPEC_BW(chanspec)); in wlc_phy_chanspec_set_nphy()
21178 or_phy_reg(pi, 0xa0, BPHY_BAND_SEL_UP20); in wlc_phy_chanspec_set_nphy()
21179 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_chanspec_set_nphy()
21180 or_phy_reg(pi, 0x310, PRIM_SEL_UP20); in wlc_phy_chanspec_set_nphy()
21182 and_phy_reg(pi, 0xa0, ~BPHY_BAND_SEL_UP20); in wlc_phy_chanspec_set_nphy()
21183 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_chanspec_set_nphy()
21184 and_phy_reg(pi, 0x310, in wlc_phy_chanspec_set_nphy()
21189 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_chanspec_set_nphy()
21190 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_chanspec_set_nphy()
21192 if ((pi->pubpi.radiorev <= 4) in wlc_phy_chanspec_set_nphy()
21193 || (pi->pubpi.radiorev == 6)) { in wlc_phy_chanspec_set_nphy()
21194 mod_radio_reg(pi, RADIO_2057_TIA_CONFIG_CORE0, in wlc_phy_chanspec_set_nphy()
21198 mod_radio_reg(pi, RADIO_2057_TIA_CONFIG_CORE1, in wlc_phy_chanspec_set_nphy()
21204 wlc_phy_chanspec_radio2057_setup(pi, t0, t2); in wlc_phy_chanspec_set_nphy()
21205 wlc_phy_chanspec_nphy_setup(pi, chanspec, in wlc_phy_chanspec_set_nphy()
21206 (pi->pubpi.radiorev == 5) ? in wlc_phy_chanspec_set_nphy()
21212 mod_radio_reg(pi, in wlc_phy_chanspec_set_nphy()
21216 wlc_phy_chanspec_radio2056_setup(pi, t1); in wlc_phy_chanspec_set_nphy()
21218 wlc_phy_chanspec_nphy_setup(pi, chanspec, in wlc_phy_chanspec_set_nphy()
21224 mod_radio_reg(pi, RADIO_2055_MASTER_CNTRL1, 0x70, in wlc_phy_chanspec_set_nphy()
21228 wlc_phy_chanspec_radio2055_setup(pi, t3); in wlc_phy_chanspec_set_nphy()
21229 wlc_phy_chanspec_nphy_setup(pi, chanspec, in wlc_phy_chanspec_set_nphy()
21238 struct brcms_phy *pi = container_of(ppi, struct brcms_phy, pubpi_ro); in wlc_phy_antsel_init() local
21242 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_antsel_init()
21245 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_antsel_init()
21251 if (pi->srom_fem2g.antswctrllut == 0) { in wlc_phy_antsel_init()
21252 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21254 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21256 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21258 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21262 if (pi->srom_fem5g.antswctrllut == 0) { in wlc_phy_antsel_init()
21263 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21265 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21267 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21269 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_ANTSWCTRLLUT, in wlc_phy_antsel_init()
21274 write_phy_reg(pi, 0xc8, 0x0); in wlc_phy_antsel_init()
21275 write_phy_reg(pi, 0xc9, 0x0); in wlc_phy_antsel_init()
21277 bcma_chipco_gpio_control(&pi->d11core->bus->drv_cc, mask, mask); in wlc_phy_antsel_init()
21279 mc = bcma_read32(pi->d11core, D11REGOFFS(maccontrol)); in wlc_phy_antsel_init()
21281 bcma_write32(pi->d11core, D11REGOFFS(maccontrol), mc); in wlc_phy_antsel_init()
21283 bcma_set16(pi->d11core, D11REGOFFS(psm_gpio_oe), mask); in wlc_phy_antsel_init()
21285 bcma_mask16(pi->d11core, D11REGOFFS(psm_gpio_out), in wlc_phy_antsel_init()
21289 write_phy_reg(pi, 0xf8, 0x02d8); in wlc_phy_antsel_init()
21290 write_phy_reg(pi, 0xf9, 0x0301); in wlc_phy_antsel_init()
21291 write_phy_reg(pi, 0xfa, 0x02d8); in wlc_phy_antsel_init()
21292 write_phy_reg(pi, 0xfb, 0x0301); in wlc_phy_antsel_init()
21297 u16 wlc_phy_classifier_nphy(struct brcms_phy *pi, u16 mask, u16 val) in wlc_phy_classifier_nphy() argument
21302 if (D11REV_IS(pi->sh->corerev, 16)) { in wlc_phy_classifier_nphy()
21303 suspended = (bcma_read32(pi->d11core, D11REGOFFS(maccontrol)) & in wlc_phy_classifier_nphy()
21306 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_phy_classifier_nphy()
21309 curr_ctl = read_phy_reg(pi, 0xb0) & (0x7 << 0); in wlc_phy_classifier_nphy()
21313 mod_phy_reg(pi, 0xb0, (0x7 << 0), new_ctl); in wlc_phy_classifier_nphy()
21315 if (D11REV_IS(pi->sh->corerev, 16) && !suspended) in wlc_phy_classifier_nphy()
21316 wlapi_enable_mac(pi->sh->physhim); in wlc_phy_classifier_nphy()
21321 void wlc_phy_force_rfseq_nphy(struct brcms_phy *pi, u8 cmd) in wlc_phy_force_rfseq_nphy() argument
21355 orig_RfseqCoreActv = read_phy_reg(pi, 0xa1); in wlc_phy_force_rfseq_nphy()
21356 or_phy_reg(pi, 0xa1, in wlc_phy_force_rfseq_nphy()
21359 or_phy_reg(pi, 0xa3, trigger_mask); in wlc_phy_force_rfseq_nphy()
21360 SPINWAIT((read_phy_reg(pi, 0xa4) & status_mask), 200000); in wlc_phy_force_rfseq_nphy()
21361 write_phy_reg(pi, 0xa1, orig_RfseqCoreActv); in wlc_phy_force_rfseq_nphy()
21362 WARN(read_phy_reg(pi, 0xa4) & status_mask, "HW error in rf"); in wlc_phy_force_rfseq_nphy()
21366 wlc_phy_rfctrl_override_1tomany_nphy(struct brcms_phy *pi, u16 cmd, u16 value, in wlc_phy_rfctrl_override_1tomany_nphy() argument
21372 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rfctrl_override_1tomany_nphy()
21377 pi, (0x1 << 5), in wlc_phy_rfctrl_override_1tomany_nphy()
21381 pi, (0x1 << 4), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21385 pi, (0x1 << 3), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21391 pi, (0x1 << 2), in wlc_phy_rfctrl_override_1tomany_nphy()
21395 pi, (0x1 << 1), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21399 pi, (0x1 << 0), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21403 pi, (0x1 << 1), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21407 pi, (0x1 << 11), 0, in wlc_phy_rfctrl_override_1tomany_nphy()
21413 pi, (0x1 << 2), in wlc_phy_rfctrl_override_1tomany_nphy()
21417 pi, (0x1 << 1), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21421 pi, (0x1 << 0), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21425 pi, (0x1 << 2), value, in wlc_phy_rfctrl_override_1tomany_nphy()
21429 pi, (0x1 << 11), 1, in wlc_phy_rfctrl_override_1tomany_nphy()
21439 pi, (0x1 << 11), in wlc_phy_rfctrl_override_1tomany_nphy()
21444 pi, (0x3 << 13), in wlc_phy_rfctrl_override_1tomany_nphy()
21455 pi, (0x1 << 12), in wlc_phy_rfctrl_override_1tomany_nphy()
21459 pi, (0x1 << 13), in wlc_phy_rfctrl_override_1tomany_nphy()
21469 wlc_phy_scale_offset_rssi_nphy(struct brcms_phy *pi, u16 scale, s8 offset, in wlc_phy_scale_offset_rssi_nphy() argument
21484 write_phy_reg(pi, 0x1a6, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21489 write_phy_reg(pi, 0x1ac, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21494 write_phy_reg(pi, 0x1b2, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21499 write_phy_reg(pi, 0x1b8, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21504 write_phy_reg(pi, 0x1a4, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21509 write_phy_reg(pi, 0x1aa, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21514 write_phy_reg(pi, 0x1b0, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21519 write_phy_reg(pi, 0x1b6, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21524 write_phy_reg(pi, 0x1a5, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21528 write_phy_reg(pi, 0x1ab, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21533 write_phy_reg(pi, 0x1b1, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21538 write_phy_reg(pi, 0x1b7, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21543 write_phy_reg(pi, 0x1a7, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21547 write_phy_reg(pi, 0x1ad, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21551 write_phy_reg(pi, 0x1b3, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21555 write_phy_reg(pi, 0x1b9, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21560 write_phy_reg(pi, 0x1a8, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21565 write_phy_reg(pi, 0x1ae, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21570 write_phy_reg(pi, 0x1b4, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21575 write_phy_reg(pi, 0x1ba, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21580 write_phy_reg(pi, 0x1a9, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21584 write_phy_reg(pi, 0x1b5, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21589 write_phy_reg(pi, 0x1af, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21594 write_phy_reg(pi, 0x1bb, valuetostuff); in wlc_phy_scale_offset_rssi_nphy()
21597 static void brcms_phy_wr_tx_mux(struct brcms_phy *pi, u8 core) in brcms_phy_wr_tx_mux() argument
21599 if (PHY_IPA(pi)) { in brcms_phy_wr_tx_mux()
21600 if (NREV_GE(pi->pubpi.phy_rev, 7)) in brcms_phy_wr_tx_mux()
21601 write_radio_reg(pi, in brcms_phy_wr_tx_mux()
21605 (CHSPEC_IS5G(pi->radio_chanspec) ? in brcms_phy_wr_tx_mux()
21608 write_radio_reg(pi, in brcms_phy_wr_tx_mux()
21612 (CHSPEC_IS5G(pi->radio_chanspec) ? in brcms_phy_wr_tx_mux()
21615 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in brcms_phy_wr_tx_mux()
21616 write_radio_reg(pi, in brcms_phy_wr_tx_mux()
21622 if (pi->pubpi.radioid == BCM2057_ID) in brcms_phy_wr_tx_mux()
21623 write_radio_reg(pi, in brcms_phy_wr_tx_mux()
21627 write_radio_reg(pi, in brcms_phy_wr_tx_mux()
21636 void wlc_phy_rssisel_nphy(struct brcms_phy *pi, u8 core_code, u8 rssi_type) in wlc_phy_rssisel_nphy() argument
21647 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_rssisel_nphy()
21649 mod_phy_reg(pi, 0x8f, (0x1 << 9), 0); in wlc_phy_rssisel_nphy()
21650 mod_phy_reg(pi, 0xa5, (0x1 << 9), 0); in wlc_phy_rssisel_nphy()
21652 mod_phy_reg(pi, 0xa6, (0x3 << 8), 0); in wlc_phy_rssisel_nphy()
21653 mod_phy_reg(pi, 0xa7, (0x3 << 8), 0); in wlc_phy_rssisel_nphy()
21655 mod_phy_reg(pi, 0xe5, (0x1 << 5), 0); in wlc_phy_rssisel_nphy()
21656 mod_phy_reg(pi, 0xe6, (0x1 << 5), 0); in wlc_phy_rssisel_nphy()
21660 mod_phy_reg(pi, 0xf9, mask, 0); in wlc_phy_rssisel_nphy()
21661 mod_phy_reg(pi, 0xfb, mask, 0); in wlc_phy_rssisel_nphy()
21664 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_rssisel_nphy()
21672 mod_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_rssisel_nphy()
21678 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21686 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21693 pi->radio_chanspec)) { in wlc_phy_rssisel_nphy()
21708 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21715 mod_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_rssisel_nphy()
21721 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21727 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21735 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21741 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21748 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21754 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21758 brcms_phy_wr_tx_mux(pi, core); in wlc_phy_rssisel_nphy()
21760 mod_phy_reg(pi, in wlc_phy_rssisel_nphy()
21784 mod_phy_reg(pi, 0xa6, mask, val); in wlc_phy_rssisel_nphy()
21785 mod_phy_reg(pi, 0xa7, mask, val); in wlc_phy_rssisel_nphy()
21799 mod_phy_reg(pi, 0x7a, mask, val); in wlc_phy_rssisel_nphy()
21800 mod_phy_reg(pi, 0x7d, mask, val); in wlc_phy_rssisel_nphy()
21826 mod_phy_reg(pi, 0xa5, afectrlovr_rssi_mask, in wlc_phy_rssisel_nphy()
21845 mod_phy_reg(pi, 0x78, rfctrlcmd_mask, rfctrlcmd_val); in wlc_phy_rssisel_nphy()
21846 mod_phy_reg(pi, 0xec, rfctrlovr_mask, rfctrlovr_val); in wlc_phy_rssisel_nphy()
21848 mod_phy_reg(pi, 0x78, (0x1 << 0), (startseq << 0)); in wlc_phy_rssisel_nphy()
21851 mod_phy_reg(pi, 0xec, (0x1 << 0), 0); in wlc_phy_rssisel_nphy()
21857 wlc_phy_poll_rssi_nphy(struct brcms_phy *pi, u8 rssi_type, s32 *rssi_buf, in wlc_phy_poll_rssi_nphy() argument
21878 afectrlCore1_save = read_phy_reg(pi, 0xa6); in wlc_phy_poll_rssi_nphy()
21879 afectrlCore2_save = read_phy_reg(pi, 0xa7); in wlc_phy_poll_rssi_nphy()
21880 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_poll_rssi_nphy()
21881 rfctrlMiscReg1_save = read_phy_reg(pi, 0xf9); in wlc_phy_poll_rssi_nphy()
21882 rfctrlMiscReg2_save = read_phy_reg(pi, 0xfb); in wlc_phy_poll_rssi_nphy()
21883 afectrlOverride1_save = read_phy_reg(pi, 0x8f); in wlc_phy_poll_rssi_nphy()
21884 afectrlOverride2_save = read_phy_reg(pi, 0xa5); in wlc_phy_poll_rssi_nphy()
21885 rfctrlOverrideAux0_save = read_phy_reg(pi, 0xe5); in wlc_phy_poll_rssi_nphy()
21886 rfctrlOverrideAux1_save = read_phy_reg(pi, 0xe6); in wlc_phy_poll_rssi_nphy()
21888 afectrlOverride1_save = read_phy_reg(pi, 0xa5); in wlc_phy_poll_rssi_nphy()
21889 rfctrlcmd_save = read_phy_reg(pi, 0x78); in wlc_phy_poll_rssi_nphy()
21890 rfctrloverride_save = read_phy_reg(pi, 0xec); in wlc_phy_poll_rssi_nphy()
21891 rfctrlrssiothers1_save = read_phy_reg(pi, 0x7a); in wlc_phy_poll_rssi_nphy()
21892 rfctrlrssiothers2_save = read_phy_reg(pi, 0x7d); in wlc_phy_poll_rssi_nphy()
21895 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_ALLRX, rssi_type); in wlc_phy_poll_rssi_nphy()
21897 gpiosel_orig = read_phy_reg(pi, 0xca); in wlc_phy_poll_rssi_nphy()
21898 if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_poll_rssi_nphy()
21899 write_phy_reg(pi, 0xca, 5); in wlc_phy_poll_rssi_nphy()
21905 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_poll_rssi_nphy()
21906 rssi0 = read_phy_reg(pi, 0x1c9); in wlc_phy_poll_rssi_nphy()
21907 rssi1 = read_phy_reg(pi, 0x1ca); in wlc_phy_poll_rssi_nphy()
21909 rssi0 = read_phy_reg(pi, 0x219); in wlc_phy_poll_rssi_nphy()
21910 rssi1 = read_phy_reg(pi, 0x21a); in wlc_phy_poll_rssi_nphy()
21929 if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_poll_rssi_nphy()
21930 write_phy_reg(pi, 0xca, gpiosel_orig); in wlc_phy_poll_rssi_nphy()
21932 write_phy_reg(pi, 0xa6, afectrlCore1_save); in wlc_phy_poll_rssi_nphy()
21933 write_phy_reg(pi, 0xa7, afectrlCore2_save); in wlc_phy_poll_rssi_nphy()
21934 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_poll_rssi_nphy()
21935 write_phy_reg(pi, 0xf9, rfctrlMiscReg1_save); in wlc_phy_poll_rssi_nphy()
21936 write_phy_reg(pi, 0xfb, rfctrlMiscReg2_save); in wlc_phy_poll_rssi_nphy()
21937 write_phy_reg(pi, 0x8f, afectrlOverride1_save); in wlc_phy_poll_rssi_nphy()
21938 write_phy_reg(pi, 0xa5, afectrlOverride2_save); in wlc_phy_poll_rssi_nphy()
21939 write_phy_reg(pi, 0xe5, rfctrlOverrideAux0_save); in wlc_phy_poll_rssi_nphy()
21940 write_phy_reg(pi, 0xe6, rfctrlOverrideAux1_save); in wlc_phy_poll_rssi_nphy()
21942 write_phy_reg(pi, 0xa5, afectrlOverride1_save); in wlc_phy_poll_rssi_nphy()
21943 write_phy_reg(pi, 0x78, rfctrlcmd_save); in wlc_phy_poll_rssi_nphy()
21944 write_phy_reg(pi, 0xec, rfctrloverride_save); in wlc_phy_poll_rssi_nphy()
21945 write_phy_reg(pi, 0x7a, rfctrlrssiothers1_save); in wlc_phy_poll_rssi_nphy()
21946 write_phy_reg(pi, 0x7d, rfctrlrssiothers2_save); in wlc_phy_poll_rssi_nphy()
21952 s16 wlc_phy_tempsense_nphy(struct brcms_phy *pi) in wlc_phy_tempsense_nphy() argument
21969 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_tempsense_nphy()
21980 read_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG); in wlc_phy_tempsense_nphy()
21982 afectrlCore1_save = read_phy_reg(pi, 0xa6); in wlc_phy_tempsense_nphy()
21983 afectrlCore2_save = read_phy_reg(pi, 0xa7); in wlc_phy_tempsense_nphy()
21984 afectrlOverride_save = read_phy_reg(pi, 0x8f); in wlc_phy_tempsense_nphy()
21985 afectrlOverride2_save = read_phy_reg(pi, 0xa5); in wlc_phy_tempsense_nphy()
21986 RSSIMultCoef0QPowerDet_save = read_phy_reg(pi, 0x1ae); in wlc_phy_tempsense_nphy()
21987 RfctrlOverride5_save = read_phy_reg(pi, 0x346); in wlc_phy_tempsense_nphy()
21988 RfctrlOverride6_save = read_phy_reg(pi, 0x347); in wlc_phy_tempsense_nphy()
21989 RfctrlMiscReg5_save = read_phy_reg(pi, 0x344); in wlc_phy_tempsense_nphy()
21990 read_phy_reg(pi, 0x345); /* RfctrlMiscReg6_save */ in wlc_phy_tempsense_nphy()
21992 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0A, 16, in wlc_phy_tempsense_nphy()
21994 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0E, 16, in wlc_phy_tempsense_nphy()
21996 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x02, 16, in wlc_phy_tempsense_nphy()
21998 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x03, 16, in wlc_phy_tempsense_nphy()
22001 write_phy_reg(pi, 0x1ae, 0x0); in wlc_phy_tempsense_nphy()
22005 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x02, 16, in wlc_phy_tempsense_nphy()
22007 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x03, 16, in wlc_phy_tempsense_nphy()
22012 write_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, in wlc_phy_tempsense_nphy()
22015 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 1), in wlc_phy_tempsense_nphy()
22018 mod_phy_reg(pi, 0xa6, (0x1 << 7), 0); in wlc_phy_tempsense_nphy()
22019 mod_phy_reg(pi, 0xa7, (0x1 << 7), 0); in wlc_phy_tempsense_nphy()
22020 mod_phy_reg(pi, 0x8f, (0x1 << 7), (0x1 << 7)); in wlc_phy_tempsense_nphy()
22021 mod_phy_reg(pi, 0xa5, (0x1 << 7), (0x1 << 7)); in wlc_phy_tempsense_nphy()
22023 mod_phy_reg(pi, 0xa6, (0x1 << 2), (0x1 << 2)); in wlc_phy_tempsense_nphy()
22024 mod_phy_reg(pi, 0xa7, (0x1 << 2), (0x1 << 2)); in wlc_phy_tempsense_nphy()
22025 mod_phy_reg(pi, 0x8f, (0x1 << 2), (0x1 << 2)); in wlc_phy_tempsense_nphy()
22026 mod_phy_reg(pi, 0xa5, (0x1 << 2), (0x1 << 2)); in wlc_phy_tempsense_nphy()
22028 mod_phy_reg(pi, 0xa6, (0x1 << 2), 0); in wlc_phy_tempsense_nphy()
22029 mod_phy_reg(pi, 0xa7, (0x1 << 2), 0); in wlc_phy_tempsense_nphy()
22030 mod_phy_reg(pi, 0xa6, (0x1 << 3), 0); in wlc_phy_tempsense_nphy()
22031 mod_phy_reg(pi, 0xa7, (0x1 << 3), 0); in wlc_phy_tempsense_nphy()
22032 mod_phy_reg(pi, 0x8f, (0x1 << 3), (0x1 << 3)); in wlc_phy_tempsense_nphy()
22033 mod_phy_reg(pi, 0xa5, (0x1 << 3), (0x1 << 3)); in wlc_phy_tempsense_nphy()
22034 mod_phy_reg(pi, 0xa6, (0x1 << 6), 0); in wlc_phy_tempsense_nphy()
22035 mod_phy_reg(pi, 0xa7, (0x1 << 6), 0); in wlc_phy_tempsense_nphy()
22036 mod_phy_reg(pi, 0x8f, (0x1 << 6), (0x1 << 6)); in wlc_phy_tempsense_nphy()
22037 mod_phy_reg(pi, 0xa5, (0x1 << 6), (0x1 << 6)); in wlc_phy_tempsense_nphy()
22041 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0A, 16, in wlc_phy_tempsense_nphy()
22043 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0E, 16, in wlc_phy_tempsense_nphy()
22048 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp, 1); in wlc_phy_tempsense_nphy()
22049 write_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, in wlc_phy_tempsense_nphy()
22053 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp2, 1); in wlc_phy_tempsense_nphy()
22070 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0A, 16, in wlc_phy_tempsense_nphy()
22072 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0E, 16, in wlc_phy_tempsense_nphy()
22077 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp2, 1); in wlc_phy_tempsense_nphy()
22078 write_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, in wlc_phy_tempsense_nphy()
22082 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp, 1); in wlc_phy_tempsense_nphy()
22084 write_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, in wlc_phy_tempsense_nphy()
22087 write_phy_reg(pi, 0xa6, afectrlCore1_save); in wlc_phy_tempsense_nphy()
22088 write_phy_reg(pi, 0xa7, afectrlCore2_save); in wlc_phy_tempsense_nphy()
22089 write_phy_reg(pi, 0x8f, afectrlOverride_save); in wlc_phy_tempsense_nphy()
22090 write_phy_reg(pi, 0xa5, afectrlOverride2_save); in wlc_phy_tempsense_nphy()
22091 write_phy_reg(pi, 0x1ae, RSSIMultCoef0QPowerDet_save); in wlc_phy_tempsense_nphy()
22092 write_phy_reg(pi, 0x346, RfctrlOverride5_save); in wlc_phy_tempsense_nphy()
22093 write_phy_reg(pi, 0x347, RfctrlOverride6_save); in wlc_phy_tempsense_nphy()
22094 write_phy_reg(pi, 0x344, RfctrlMiscReg5_save); in wlc_phy_tempsense_nphy()
22095 write_phy_reg(pi, 0x345, RfctrlMiscReg5_save); in wlc_phy_tempsense_nphy()
22097 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0A, 16, in wlc_phy_tempsense_nphy()
22099 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x0E, 16, in wlc_phy_tempsense_nphy()
22101 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x02, 16, in wlc_phy_tempsense_nphy()
22103 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x03, 16, in wlc_phy_tempsense_nphy()
22106 if (pi->sh->chip == BCMA_CHIP_ID_BCM5357) { in wlc_phy_tempsense_nphy()
22116 offset = (s16) pi->phy_tempsense_offset; in wlc_phy_tempsense_nphy()
22118 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_tempsense_nphy()
22120 read_radio_reg(pi, RADIO_2056_SYN_TEMPPROCSENSE); in wlc_phy_tempsense_nphy()
22122 afectrlCore1_save = read_phy_reg(pi, 0xa6); in wlc_phy_tempsense_nphy()
22123 afectrlCore2_save = read_phy_reg(pi, 0xa7); in wlc_phy_tempsense_nphy()
22124 afectrlOverride_save = read_phy_reg(pi, 0x8f); in wlc_phy_tempsense_nphy()
22125 afectrlOverride2_save = read_phy_reg(pi, 0xa5); in wlc_phy_tempsense_nphy()
22126 gpioSel_save = read_phy_reg(pi, 0xca); in wlc_phy_tempsense_nphy()
22128 write_radio_reg(pi, RADIO_2056_SYN_TEMPPROCSENSE, 0x01); in wlc_phy_tempsense_nphy()
22130 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp, 1); in wlc_phy_tempsense_nphy()
22131 if (NREV_LT(pi->pubpi.phy_rev, 7)) in wlc_phy_tempsense_nphy()
22132 write_radio_reg(pi, RADIO_2056_SYN_TEMPPROCSENSE, 0x05); in wlc_phy_tempsense_nphy()
22134 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp2, 1); in wlc_phy_tempsense_nphy()
22135 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_tempsense_nphy()
22136 write_radio_reg(pi, RADIO_2057_TEMPSENSE_CONFIG, 0x01); in wlc_phy_tempsense_nphy()
22138 write_radio_reg(pi, RADIO_2056_SYN_TEMPPROCSENSE, 0x01); in wlc_phy_tempsense_nphy()
22143 write_radio_reg(pi, RADIO_2056_SYN_TEMPPROCSENSE, in wlc_phy_tempsense_nphy()
22146 write_phy_reg(pi, 0xca, gpioSel_save); in wlc_phy_tempsense_nphy()
22147 write_phy_reg(pi, 0xa6, afectrlCore1_save); in wlc_phy_tempsense_nphy()
22148 write_phy_reg(pi, 0xa7, afectrlCore2_save); in wlc_phy_tempsense_nphy()
22149 write_phy_reg(pi, 0x8f, afectrlOverride_save); in wlc_phy_tempsense_nphy()
22150 write_phy_reg(pi, 0xa5, afectrlOverride2_save); in wlc_phy_tempsense_nphy()
22152 offset = (s16) pi->phy_tempsense_offset; in wlc_phy_tempsense_nphy()
22156 read_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1); in wlc_phy_tempsense_nphy()
22158 read_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2); in wlc_phy_tempsense_nphy()
22160 read_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1); in wlc_phy_tempsense_nphy()
22162 read_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2); in wlc_phy_tempsense_nphy()
22164 read_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1); in wlc_phy_tempsense_nphy()
22166 read_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2); in wlc_phy_tempsense_nphy()
22167 pd_pll_ts_save = read_radio_reg(pi, RADIO_2055_PD_PLL_TS); in wlc_phy_tempsense_nphy()
22169 afectrlCore1_save = read_phy_reg(pi, 0xa6); in wlc_phy_tempsense_nphy()
22170 afectrlCore2_save = read_phy_reg(pi, 0xa7); in wlc_phy_tempsense_nphy()
22171 afectrlOverride_save = read_phy_reg(pi, 0xa5); in wlc_phy_tempsense_nphy()
22172 gpioSel_save = read_phy_reg(pi, 0xca); in wlc_phy_tempsense_nphy()
22174 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1, 0x01); in wlc_phy_tempsense_nphy()
22175 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1, 0x01); in wlc_phy_tempsense_nphy()
22176 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2, 0x08); in wlc_phy_tempsense_nphy()
22177 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2, 0x08); in wlc_phy_tempsense_nphy()
22178 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1, 0x04); in wlc_phy_tempsense_nphy()
22179 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2, 0x04); in wlc_phy_tempsense_nphy()
22180 write_radio_reg(pi, RADIO_2055_PD_PLL_TS, 0x00); in wlc_phy_tempsense_nphy()
22182 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp, 1); in wlc_phy_tempsense_nphy()
22183 xor_radio_reg(pi, RADIO_2055_CAL_TS, 0x80); in wlc_phy_tempsense_nphy()
22185 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp, 1); in wlc_phy_tempsense_nphy()
22186 xor_radio_reg(pi, RADIO_2055_CAL_TS, 0x80); in wlc_phy_tempsense_nphy()
22188 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_IQ, radio_temp2, 1); in wlc_phy_tempsense_nphy()
22189 xor_radio_reg(pi, RADIO_2055_CAL_TS, 0x80); in wlc_phy_tempsense_nphy()
22206 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1, in wlc_phy_tempsense_nphy()
22208 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2, in wlc_phy_tempsense_nphy()
22210 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1, in wlc_phy_tempsense_nphy()
22212 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1, in wlc_phy_tempsense_nphy()
22214 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2, in wlc_phy_tempsense_nphy()
22216 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2, in wlc_phy_tempsense_nphy()
22218 write_radio_reg(pi, RADIO_2055_PD_PLL_TS, pd_pll_ts_save); in wlc_phy_tempsense_nphy()
22220 write_phy_reg(pi, 0xca, gpioSel_save); in wlc_phy_tempsense_nphy()
22221 write_phy_reg(pi, 0xa6, afectrlCore1_save); in wlc_phy_tempsense_nphy()
22222 write_phy_reg(pi, 0xa7, afectrlCore2_save); in wlc_phy_tempsense_nphy()
22223 write_phy_reg(pi, 0xa5, afectrlOverride_save); in wlc_phy_tempsense_nphy()
22230 wlc_phy_set_rssi_2055_vcm(struct brcms_phy *pi, u8 rssi_type, u8 *vcm_buf) in wlc_phy_set_rssi_2055_vcm() argument
22234 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_set_rssi_2055_vcm()
22237 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22243 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22250 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22256 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22265 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22272 mod_radio_reg(pi, in wlc_phy_set_rssi_2055_vcm()
22282 static void wlc_phy_rssi_cal_nphy_rev3(struct brcms_phy *pi) in wlc_phy_rssi_cal_nphy_rev3() argument
22333 classif_state = wlc_phy_classifier_nphy(pi, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22334 wlc_phy_classifier_nphy(pi, (0x7 << 0), 4); in wlc_phy_rssi_cal_nphy_rev3()
22335 wlc_phy_clip_det_nphy(pi, 0, clip_state); in wlc_phy_rssi_cal_nphy_rev3()
22336 wlc_phy_clip_det_nphy(pi, 1, clip_off); in wlc_phy_rssi_cal_nphy_rev3()
22338 NPHY_Rfctrlintc1_save = read_phy_reg(pi, 0x91); in wlc_phy_rssi_cal_nphy_rev3()
22339 NPHY_Rfctrlintc2_save = read_phy_reg(pi, 0x92); in wlc_phy_rssi_cal_nphy_rev3()
22340 NPHY_AfectrlOverride1_save = read_phy_reg(pi, 0x8f); in wlc_phy_rssi_cal_nphy_rev3()
22341 NPHY_AfectrlOverride2_save = read_phy_reg(pi, 0xa5); in wlc_phy_rssi_cal_nphy_rev3()
22342 NPHY_AfectrlCore1_save = read_phy_reg(pi, 0xa6); in wlc_phy_rssi_cal_nphy_rev3()
22343 NPHY_AfectrlCore2_save = read_phy_reg(pi, 0xa7); in wlc_phy_rssi_cal_nphy_rev3()
22344 NPHY_RfctrlOverride0_save = read_phy_reg(pi, 0xe7); in wlc_phy_rssi_cal_nphy_rev3()
22345 NPHY_RfctrlOverride1_save = read_phy_reg(pi, 0xec); in wlc_phy_rssi_cal_nphy_rev3()
22346 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22347 NPHY_REV7_RfctrlOverride3_save = read_phy_reg(pi, 0x342); in wlc_phy_rssi_cal_nphy_rev3()
22348 NPHY_REV7_RfctrlOverride4_save = read_phy_reg(pi, 0x343); in wlc_phy_rssi_cal_nphy_rev3()
22349 NPHY_REV7_RfctrlOverride5_save = read_phy_reg(pi, 0x346); in wlc_phy_rssi_cal_nphy_rev3()
22350 NPHY_REV7_RfctrlOverride6_save = read_phy_reg(pi, 0x347); in wlc_phy_rssi_cal_nphy_rev3()
22352 NPHY_RfctrlOverrideAux0_save = read_phy_reg(pi, 0xe5); in wlc_phy_rssi_cal_nphy_rev3()
22353 NPHY_RfctrlOverrideAux1_save = read_phy_reg(pi, 0xe6); in wlc_phy_rssi_cal_nphy_rev3()
22354 NPHY_RfctrlCmd_save = read_phy_reg(pi, 0x78); in wlc_phy_rssi_cal_nphy_rev3()
22355 NPHY_RfctrlMiscReg1_save = read_phy_reg(pi, 0xf9); in wlc_phy_rssi_cal_nphy_rev3()
22356 NPHY_RfctrlMiscReg2_save = read_phy_reg(pi, 0xfb); in wlc_phy_rssi_cal_nphy_rev3()
22357 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22358 NPHY_REV7_RfctrlMiscReg3_save = read_phy_reg(pi, 0x340); in wlc_phy_rssi_cal_nphy_rev3()
22359 NPHY_REV7_RfctrlMiscReg4_save = read_phy_reg(pi, 0x341); in wlc_phy_rssi_cal_nphy_rev3()
22360 NPHY_REV7_RfctrlMiscReg5_save = read_phy_reg(pi, 0x344); in wlc_phy_rssi_cal_nphy_rev3()
22361 NPHY_REV7_RfctrlMiscReg6_save = read_phy_reg(pi, 0x345); in wlc_phy_rssi_cal_nphy_rev3()
22363 NPHY_RfctrlRSSIOTHERS1_save = read_phy_reg(pi, 0x7a); in wlc_phy_rssi_cal_nphy_rev3()
22364 NPHY_RfctrlRSSIOTHERS2_save = read_phy_reg(pi, 0x7d); in wlc_phy_rssi_cal_nphy_rev3()
22366 wlc_phy_rfctrlintc_override_nphy(pi, NPHY_RfctrlIntc_override_OFF, 0, in wlc_phy_rssi_cal_nphy_rev3()
22368 wlc_phy_rfctrlintc_override_nphy(pi, NPHY_RfctrlIntc_override_TRSW, 1, in wlc_phy_rssi_cal_nphy_rev3()
22371 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rssi_cal_nphy_rev3()
22373 pi, in wlc_phy_rssi_cal_nphy_rev3()
22377 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 0), 0, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22379 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rssi_cal_nphy_rev3()
22381 pi, in wlc_phy_rssi_cal_nphy_rev3()
22385 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 1), 1, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22387 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22388 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 7), in wlc_phy_rssi_cal_nphy_rev3()
22391 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 6), 1, 0, 0, in wlc_phy_rssi_cal_nphy_rev3()
22394 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 7), 1, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22395 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 6), 1, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22398 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rssi_cal_nphy_rev3()
22399 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22401 pi, (0x1 << 5), in wlc_phy_rssi_cal_nphy_rev3()
22405 pi, (0x1 << 4), 1, 0, in wlc_phy_rssi_cal_nphy_rev3()
22409 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 5), 0, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22410 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 4), 1, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22414 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22416 pi, (0x1 << 4), in wlc_phy_rssi_cal_nphy_rev3()
22420 pi, (0x1 << 5), 1, 0, in wlc_phy_rssi_cal_nphy_rev3()
22424 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 4), 0, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22425 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 5), 1, 0, 0); in wlc_phy_rssi_cal_nphy_rev3()
22430 (struct brcms_phy_pub *) pi); in wlc_phy_rssi_cal_nphy_rev3()
22434 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_rssi_cal_nphy_rev3()
22439 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22445 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22453 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rssi_cal_nphy_rev3()
22454 mod_radio_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_rssi_cal_nphy_rev3()
22459 mod_radio_reg(pi, RADIO_2056_RX_RSSI_MISC | in wlc_phy_rssi_cal_nphy_rev3()
22466 wlc_phy_poll_rssi_nphy(pi, NPHY_RSSI_SEL_NB, in wlc_phy_rssi_cal_nphy_rev3()
22503 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rssi_cal_nphy_rev3()
22504 mod_radio_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_rssi_cal_nphy_rev3()
22509 mod_radio_reg(pi, RADIO_2056_RX_RSSI_MISC | in wlc_phy_rssi_cal_nphy_rev3()
22546 pi, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22561 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_rssi_cal_nphy_rev3()
22575 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22582 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22590 wlc_phy_poll_rssi_nphy(pi, rssi_type, poll_result_core, in wlc_phy_rssi_cal_nphy_rev3()
22622 pi, 0x0, in wlc_phy_rssi_cal_nphy_rev3()
22640 write_phy_reg(pi, 0x91, NPHY_Rfctrlintc1_save); in wlc_phy_rssi_cal_nphy_rev3()
22641 write_phy_reg(pi, 0x92, NPHY_Rfctrlintc2_save); in wlc_phy_rssi_cal_nphy_rev3()
22643 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_rssi_cal_nphy_rev3()
22645 mod_phy_reg(pi, 0xe7, (0x1 << 0), 1 << 0); in wlc_phy_rssi_cal_nphy_rev3()
22646 mod_phy_reg(pi, 0x78, (0x1 << 0), 1 << 0); in wlc_phy_rssi_cal_nphy_rev3()
22647 mod_phy_reg(pi, 0xe7, (0x1 << 0), 0); in wlc_phy_rssi_cal_nphy_rev3()
22649 mod_phy_reg(pi, 0xec, (0x1 << 0), 1 << 0); in wlc_phy_rssi_cal_nphy_rev3()
22650 mod_phy_reg(pi, 0x78, (0x1 << 1), 1 << 1); in wlc_phy_rssi_cal_nphy_rev3()
22651 mod_phy_reg(pi, 0xec, (0x1 << 0), 0); in wlc_phy_rssi_cal_nphy_rev3()
22653 write_phy_reg(pi, 0x8f, NPHY_AfectrlOverride1_save); in wlc_phy_rssi_cal_nphy_rev3()
22654 write_phy_reg(pi, 0xa5, NPHY_AfectrlOverride2_save); in wlc_phy_rssi_cal_nphy_rev3()
22655 write_phy_reg(pi, 0xa6, NPHY_AfectrlCore1_save); in wlc_phy_rssi_cal_nphy_rev3()
22656 write_phy_reg(pi, 0xa7, NPHY_AfectrlCore2_save); in wlc_phy_rssi_cal_nphy_rev3()
22657 write_phy_reg(pi, 0xe7, NPHY_RfctrlOverride0_save); in wlc_phy_rssi_cal_nphy_rev3()
22658 write_phy_reg(pi, 0xec, NPHY_RfctrlOverride1_save); in wlc_phy_rssi_cal_nphy_rev3()
22659 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22660 write_phy_reg(pi, 0x342, NPHY_REV7_RfctrlOverride3_save); in wlc_phy_rssi_cal_nphy_rev3()
22661 write_phy_reg(pi, 0x343, NPHY_REV7_RfctrlOverride4_save); in wlc_phy_rssi_cal_nphy_rev3()
22662 write_phy_reg(pi, 0x346, NPHY_REV7_RfctrlOverride5_save); in wlc_phy_rssi_cal_nphy_rev3()
22663 write_phy_reg(pi, 0x347, NPHY_REV7_RfctrlOverride6_save); in wlc_phy_rssi_cal_nphy_rev3()
22665 write_phy_reg(pi, 0xe5, NPHY_RfctrlOverrideAux0_save); in wlc_phy_rssi_cal_nphy_rev3()
22666 write_phy_reg(pi, 0xe6, NPHY_RfctrlOverrideAux1_save); in wlc_phy_rssi_cal_nphy_rev3()
22667 write_phy_reg(pi, 0x78, NPHY_RfctrlCmd_save); in wlc_phy_rssi_cal_nphy_rev3()
22668 write_phy_reg(pi, 0xf9, NPHY_RfctrlMiscReg1_save); in wlc_phy_rssi_cal_nphy_rev3()
22669 write_phy_reg(pi, 0xfb, NPHY_RfctrlMiscReg2_save); in wlc_phy_rssi_cal_nphy_rev3()
22670 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22671 write_phy_reg(pi, 0x340, NPHY_REV7_RfctrlMiscReg3_save); in wlc_phy_rssi_cal_nphy_rev3()
22672 write_phy_reg(pi, 0x341, NPHY_REV7_RfctrlMiscReg4_save); in wlc_phy_rssi_cal_nphy_rev3()
22673 write_phy_reg(pi, 0x344, NPHY_REV7_RfctrlMiscReg5_save); in wlc_phy_rssi_cal_nphy_rev3()
22674 write_phy_reg(pi, 0x345, NPHY_REV7_RfctrlMiscReg6_save); in wlc_phy_rssi_cal_nphy_rev3()
22676 write_phy_reg(pi, 0x7a, NPHY_RfctrlRSSIOTHERS1_save); in wlc_phy_rssi_cal_nphy_rev3()
22677 write_phy_reg(pi, 0x7d, NPHY_RfctrlRSSIOTHERS2_save); in wlc_phy_rssi_cal_nphy_rev3()
22679 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_rssi_cal_nphy_rev3()
22680 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22681 pi->rssical_cache.rssical_radio_regs_2G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22682 read_radio_reg(pi, RADIO_2057_NB_MASTER_CORE0); in wlc_phy_rssi_cal_nphy_rev3()
22683 pi->rssical_cache.rssical_radio_regs_2G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22684 read_radio_reg(pi, RADIO_2057_NB_MASTER_CORE1); in wlc_phy_rssi_cal_nphy_rev3()
22686 pi->rssical_cache.rssical_radio_regs_2G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22687 read_radio_reg(pi, in wlc_phy_rssi_cal_nphy_rev3()
22690 pi->rssical_cache.rssical_radio_regs_2G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22691 read_radio_reg(pi, in wlc_phy_rssi_cal_nphy_rev3()
22696 pi->rssical_cache.rssical_phyregs_2G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22697 read_phy_reg(pi, 0x1a6); in wlc_phy_rssi_cal_nphy_rev3()
22698 pi->rssical_cache.rssical_phyregs_2G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22699 read_phy_reg(pi, 0x1ac); in wlc_phy_rssi_cal_nphy_rev3()
22700 pi->rssical_cache.rssical_phyregs_2G[2] = in wlc_phy_rssi_cal_nphy_rev3()
22701 read_phy_reg(pi, 0x1b2); in wlc_phy_rssi_cal_nphy_rev3()
22702 pi->rssical_cache.rssical_phyregs_2G[3] = in wlc_phy_rssi_cal_nphy_rev3()
22703 read_phy_reg(pi, 0x1b8); in wlc_phy_rssi_cal_nphy_rev3()
22704 pi->rssical_cache.rssical_phyregs_2G[4] = in wlc_phy_rssi_cal_nphy_rev3()
22705 read_phy_reg(pi, 0x1a4); in wlc_phy_rssi_cal_nphy_rev3()
22706 pi->rssical_cache.rssical_phyregs_2G[5] = in wlc_phy_rssi_cal_nphy_rev3()
22707 read_phy_reg(pi, 0x1aa); in wlc_phy_rssi_cal_nphy_rev3()
22708 pi->rssical_cache.rssical_phyregs_2G[6] = in wlc_phy_rssi_cal_nphy_rev3()
22709 read_phy_reg(pi, 0x1b0); in wlc_phy_rssi_cal_nphy_rev3()
22710 pi->rssical_cache.rssical_phyregs_2G[7] = in wlc_phy_rssi_cal_nphy_rev3()
22711 read_phy_reg(pi, 0x1b6); in wlc_phy_rssi_cal_nphy_rev3()
22712 pi->rssical_cache.rssical_phyregs_2G[8] = in wlc_phy_rssi_cal_nphy_rev3()
22713 read_phy_reg(pi, 0x1a5); in wlc_phy_rssi_cal_nphy_rev3()
22714 pi->rssical_cache.rssical_phyregs_2G[9] = in wlc_phy_rssi_cal_nphy_rev3()
22715 read_phy_reg(pi, 0x1ab); in wlc_phy_rssi_cal_nphy_rev3()
22716 pi->rssical_cache.rssical_phyregs_2G[10] = in wlc_phy_rssi_cal_nphy_rev3()
22717 read_phy_reg(pi, 0x1b1); in wlc_phy_rssi_cal_nphy_rev3()
22718 pi->rssical_cache.rssical_phyregs_2G[11] = in wlc_phy_rssi_cal_nphy_rev3()
22719 read_phy_reg(pi, 0x1b7); in wlc_phy_rssi_cal_nphy_rev3()
22721 pi->nphy_rssical_chanspec_2G = pi->radio_chanspec; in wlc_phy_rssi_cal_nphy_rev3()
22723 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rssi_cal_nphy_rev3()
22724 pi->rssical_cache.rssical_radio_regs_5G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22725 read_radio_reg(pi, RADIO_2057_NB_MASTER_CORE0); in wlc_phy_rssi_cal_nphy_rev3()
22726 pi->rssical_cache.rssical_radio_regs_5G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22727 read_radio_reg(pi, RADIO_2057_NB_MASTER_CORE1); in wlc_phy_rssi_cal_nphy_rev3()
22729 pi->rssical_cache.rssical_radio_regs_5G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22730 read_radio_reg(pi, in wlc_phy_rssi_cal_nphy_rev3()
22733 pi->rssical_cache.rssical_radio_regs_5G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22734 read_radio_reg(pi, in wlc_phy_rssi_cal_nphy_rev3()
22739 pi->rssical_cache.rssical_phyregs_5G[0] = in wlc_phy_rssi_cal_nphy_rev3()
22740 read_phy_reg(pi, 0x1a6); in wlc_phy_rssi_cal_nphy_rev3()
22741 pi->rssical_cache.rssical_phyregs_5G[1] = in wlc_phy_rssi_cal_nphy_rev3()
22742 read_phy_reg(pi, 0x1ac); in wlc_phy_rssi_cal_nphy_rev3()
22743 pi->rssical_cache.rssical_phyregs_5G[2] = in wlc_phy_rssi_cal_nphy_rev3()
22744 read_phy_reg(pi, 0x1b2); in wlc_phy_rssi_cal_nphy_rev3()
22745 pi->rssical_cache.rssical_phyregs_5G[3] = in wlc_phy_rssi_cal_nphy_rev3()
22746 read_phy_reg(pi, 0x1b8); in wlc_phy_rssi_cal_nphy_rev3()
22747 pi->rssical_cache.rssical_phyregs_5G[4] = in wlc_phy_rssi_cal_nphy_rev3()
22748 read_phy_reg(pi, 0x1a4); in wlc_phy_rssi_cal_nphy_rev3()
22749 pi->rssical_cache.rssical_phyregs_5G[5] = in wlc_phy_rssi_cal_nphy_rev3()
22750 read_phy_reg(pi, 0x1aa); in wlc_phy_rssi_cal_nphy_rev3()
22751 pi->rssical_cache.rssical_phyregs_5G[6] = in wlc_phy_rssi_cal_nphy_rev3()
22752 read_phy_reg(pi, 0x1b0); in wlc_phy_rssi_cal_nphy_rev3()
22753 pi->rssical_cache.rssical_phyregs_5G[7] = in wlc_phy_rssi_cal_nphy_rev3()
22754 read_phy_reg(pi, 0x1b6); in wlc_phy_rssi_cal_nphy_rev3()
22755 pi->rssical_cache.rssical_phyregs_5G[8] = in wlc_phy_rssi_cal_nphy_rev3()
22756 read_phy_reg(pi, 0x1a5); in wlc_phy_rssi_cal_nphy_rev3()
22757 pi->rssical_cache.rssical_phyregs_5G[9] = in wlc_phy_rssi_cal_nphy_rev3()
22758 read_phy_reg(pi, 0x1ab); in wlc_phy_rssi_cal_nphy_rev3()
22759 pi->rssical_cache.rssical_phyregs_5G[10] = in wlc_phy_rssi_cal_nphy_rev3()
22760 read_phy_reg(pi, 0x1b1); in wlc_phy_rssi_cal_nphy_rev3()
22761 pi->rssical_cache.rssical_phyregs_5G[11] = in wlc_phy_rssi_cal_nphy_rev3()
22762 read_phy_reg(pi, 0x1b7); in wlc_phy_rssi_cal_nphy_rev3()
22764 pi->nphy_rssical_chanspec_5G = pi->radio_chanspec; in wlc_phy_rssi_cal_nphy_rev3()
22767 wlc_phy_classifier_nphy(pi, (0x7 << 0), classif_state); in wlc_phy_rssi_cal_nphy_rev3()
22768 wlc_phy_clip_det_nphy(pi, 1, clip_state); in wlc_phy_rssi_cal_nphy_rev3()
22771 static void wlc_phy_rssi_cal_nphy_rev2(struct brcms_phy *pi, u8 rssi_type) in wlc_phy_rssi_cal_nphy_rev2() argument
22815 classif_state = wlc_phy_classifier_nphy(pi, 0, 0); in wlc_phy_rssi_cal_nphy_rev2()
22816 wlc_phy_classifier_nphy(pi, (0x7 << 0), 4); in wlc_phy_rssi_cal_nphy_rev2()
22817 wlc_phy_clip_det_nphy(pi, 0, clip_state); in wlc_phy_rssi_cal_nphy_rev2()
22818 wlc_phy_clip_det_nphy(pi, 1, clip_off); in wlc_phy_rssi_cal_nphy_rev2()
22822 CHSPEC_IS5G(pi->radio_chanspec) ? 0x140 : 0x110; in wlc_phy_rssi_cal_nphy_rev2()
22824 rfctrlintc_state[0] = read_phy_reg(pi, 0x91); in wlc_phy_rssi_cal_nphy_rev2()
22825 rfpdcorerxtx_state[0] = read_radio_reg(pi, RADIO_2055_PD_CORE1_RXTX); in wlc_phy_rssi_cal_nphy_rev2()
22826 write_phy_reg(pi, 0x91, rfctrlintc_override_val); in wlc_phy_rssi_cal_nphy_rev2()
22827 write_radio_reg(pi, RADIO_2055_PD_CORE1_RXTX, rf_pd_val); in wlc_phy_rssi_cal_nphy_rev2()
22829 rfctrlintc_state[1] = read_phy_reg(pi, 0x92); in wlc_phy_rssi_cal_nphy_rev2()
22830 rfpdcorerxtx_state[1] = read_radio_reg(pi, RADIO_2055_PD_CORE2_RXTX); in wlc_phy_rssi_cal_nphy_rev2()
22831 write_phy_reg(pi, 0x92, rfctrlintc_override_val); in wlc_phy_rssi_cal_nphy_rev2()
22832 write_radio_reg(pi, RADIO_2055_PD_CORE2_RXTX, rf_pd_val); in wlc_phy_rssi_cal_nphy_rev2()
22837 read_radio_reg(pi, RADIO_2055_PD_CORE1_RSSI_MISC) & pd_mask; in wlc_phy_rssi_cal_nphy_rev2()
22839 read_radio_reg(pi, RADIO_2055_PD_CORE2_RSSI_MISC) & pd_mask; in wlc_phy_rssi_cal_nphy_rev2()
22840 mod_radio_reg(pi, RADIO_2055_PD_CORE1_RSSI_MISC, pd_mask, 0); in wlc_phy_rssi_cal_nphy_rev2()
22841 mod_radio_reg(pi, RADIO_2055_PD_CORE2_RSSI_MISC, pd_mask, 0); in wlc_phy_rssi_cal_nphy_rev2()
22845 read_radio_reg(pi, RADIO_2055_SP_RSSI_CORE1) & rssi_ctrl_mask; in wlc_phy_rssi_cal_nphy_rev2()
22847 read_radio_reg(pi, RADIO_2055_SP_RSSI_CORE2) & rssi_ctrl_mask; in wlc_phy_rssi_cal_nphy_rev2()
22848 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_ALLRX, rssi_type); in wlc_phy_rssi_cal_nphy_rev2()
22850 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, RADIO_MIMO_CORESEL_ALLRX, in wlc_phy_rssi_cal_nphy_rev2()
22852 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, 0x0, RADIO_MIMO_CORESEL_ALLRX, in wlc_phy_rssi_cal_nphy_rev2()
22859 wlc_phy_set_rssi_2055_vcm(pi, rssi_type, vcm_tmp); in wlc_phy_rssi_cal_nphy_rev2()
22861 wlc_phy_poll_rssi_nphy(pi, rssi_type, &poll_results[vcm][0], in wlc_phy_rssi_cal_nphy_rev2()
22894 wlc_phy_set_rssi_2055_vcm(pi, rssi_type, vcm_final); in wlc_phy_rssi_cal_nphy_rev2()
22919 wlc_phy_scale_offset_rssi_nphy(pi, 0x0, in wlc_phy_rssi_cal_nphy_rev2()
22930 mod_radio_reg(pi, RADIO_2055_PD_CORE1_RSSI_MISC, pd_mask, pd_state[0]); in wlc_phy_rssi_cal_nphy_rev2()
22931 mod_radio_reg(pi, RADIO_2055_PD_CORE2_RSSI_MISC, pd_mask, pd_state[1]); in wlc_phy_rssi_cal_nphy_rev2()
22933 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE1, in wlc_phy_rssi_cal_nphy_rev2()
22936 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE1, in wlc_phy_rssi_cal_nphy_rev2()
22939 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE1, in wlc_phy_rssi_cal_nphy_rev2()
22942 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE2, in wlc_phy_rssi_cal_nphy_rev2()
22945 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE2, in wlc_phy_rssi_cal_nphy_rev2()
22948 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_CORE2, in wlc_phy_rssi_cal_nphy_rev2()
22950 wlc_phy_rssisel_nphy(pi, RADIO_MIMO_CORESEL_OFF, rssi_type); in wlc_phy_rssi_cal_nphy_rev2()
22952 write_phy_reg(pi, 0x91, rfctrlintc_state[0]); in wlc_phy_rssi_cal_nphy_rev2()
22953 write_radio_reg(pi, RADIO_2055_PD_CORE1_RXTX, rfpdcorerxtx_state[0]); in wlc_phy_rssi_cal_nphy_rev2()
22954 write_phy_reg(pi, 0x92, rfctrlintc_state[1]); in wlc_phy_rssi_cal_nphy_rev2()
22955 write_radio_reg(pi, RADIO_2055_PD_CORE2_RXTX, rfpdcorerxtx_state[1]); in wlc_phy_rssi_cal_nphy_rev2()
22957 wlc_phy_classifier_nphy(pi, (0x7 << 0), classif_state); in wlc_phy_rssi_cal_nphy_rev2()
22958 wlc_phy_clip_det_nphy(pi, 1, clip_state); in wlc_phy_rssi_cal_nphy_rev2()
22960 wlc_phy_resetcca_nphy(pi); in wlc_phy_rssi_cal_nphy_rev2()
22963 void wlc_phy_rssi_cal_nphy(struct brcms_phy *pi) in wlc_phy_rssi_cal_nphy() argument
22965 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_rssi_cal_nphy()
22966 wlc_phy_rssi_cal_nphy_rev3(pi); in wlc_phy_rssi_cal_nphy()
22968 wlc_phy_rssi_cal_nphy_rev2(pi, NPHY_RSSI_SEL_NB); in wlc_phy_rssi_cal_nphy()
22969 wlc_phy_rssi_cal_nphy_rev2(pi, NPHY_RSSI_SEL_W1); in wlc_phy_rssi_cal_nphy()
22970 wlc_phy_rssi_cal_nphy_rev2(pi, NPHY_RSSI_SEL_W2); in wlc_phy_rssi_cal_nphy()
22975 wlc_phy_rssi_compute_nphy(struct brcms_phy *pi, struct d11rxhdr *rxh) in wlc_phy_rssi_compute_nphy() argument
22998 if (pi->sh->rssi_mode == RSSI_ANT_MERGE_MAX) in wlc_phy_rssi_compute_nphy()
23000 else if (pi->sh->rssi_mode == RSSI_ANT_MERGE_MIN) in wlc_phy_rssi_compute_nphy()
23002 else if (pi->sh->rssi_mode == RSSI_ANT_MERGE_AVG) in wlc_phy_rssi_compute_nphy()
23009 wlc_phy_loadsampletable_nphy(struct brcms_phy *pi, struct cordic_iq *tone_buf, in wlc_phy_loadsampletable_nphy() argument
23019 if (pi->phyhang_avoid) in wlc_phy_loadsampletable_nphy()
23020 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_loadsampletable_nphy()
23025 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_SAMPLEPLAY, num_samps, 0, 32, in wlc_phy_loadsampletable_nphy()
23030 if (pi->phyhang_avoid) in wlc_phy_loadsampletable_nphy()
23031 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_loadsampletable_nphy()
23035 wlc_phy_gen_load_samples_nphy(struct brcms_phy *pi, u32 f_kHz, u16 max_val, in wlc_phy_gen_load_samples_nphy() argument
23044 is_phybw40 = CHSPEC_IS40(pi->radio_chanspec); in wlc_phy_gen_load_samples_nphy()
23049 spur = read_phy_reg(pi, 0x01); in wlc_phy_gen_load_samples_nphy()
23076 wlc_phy_loadsampletable_nphy(pi, tone_buf, num_samps); in wlc_phy_gen_load_samples_nphy()
23084 wlc_phy_runsamples_nphy(struct brcms_phy *pi, u16 num_samps, u16 loops, in wlc_phy_runsamples_nphy() argument
23093 if (pi->phyhang_avoid) in wlc_phy_runsamples_nphy()
23094 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_runsamples_nphy()
23097 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_runsamples_nphy()
23100 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_runsamples_nphy()
23102 lpf_bw_ctl_override3 = read_phy_reg(pi, 0x342) & (0x1 << 7); in wlc_phy_runsamples_nphy()
23103 lpf_bw_ctl_override4 = read_phy_reg(pi, 0x343) & (0x1 << 7); in wlc_phy_runsamples_nphy()
23106 pi, in wlc_phy_runsamples_nphy()
23109 (pi, in wlc_phy_runsamples_nphy()
23113 pi->nphy_sample_play_lpf_bw_ctl_ovr = true; in wlc_phy_runsamples_nphy()
23115 read_phy_reg(pi, 0x340); /* lpf_bw_ctl_miscreg3 */ in wlc_phy_runsamples_nphy()
23116 read_phy_reg(pi, 0x341); /* lpf_bw_ctl_miscreg4 */ in wlc_phy_runsamples_nphy()
23119 if ((pi->nphy_bb_mult_save & BB_MULT_VALID_MASK) == 0) { in wlc_phy_runsamples_nphy()
23121 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, 1, 87, 16, in wlc_phy_runsamples_nphy()
23123 pi->nphy_bb_mult_save = in wlc_phy_runsamples_nphy()
23130 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 1, 87, 16, in wlc_phy_runsamples_nphy()
23134 if (pi->phyhang_avoid) in wlc_phy_runsamples_nphy()
23135 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_runsamples_nphy()
23137 write_phy_reg(pi, 0xc6, num_samps - 1); in wlc_phy_runsamples_nphy()
23140 write_phy_reg(pi, 0xc4, loops - 1); in wlc_phy_runsamples_nphy()
23142 write_phy_reg(pi, 0xc4, loops); in wlc_phy_runsamples_nphy()
23144 write_phy_reg(pi, 0xc5, wait); in wlc_phy_runsamples_nphy()
23146 orig_RfseqCoreActv = read_phy_reg(pi, 0xa1); in wlc_phy_runsamples_nphy()
23147 or_phy_reg(pi, 0xa1, NPHY_RfseqMode_CoreActv_override); in wlc_phy_runsamples_nphy()
23150 and_phy_reg(pi, 0xc2, 0x7FFF); in wlc_phy_runsamples_nphy()
23152 or_phy_reg(pi, 0xc2, 0x8000); in wlc_phy_runsamples_nphy()
23156 write_phy_reg(pi, 0xc3, sample_cmd); in wlc_phy_runsamples_nphy()
23159 SPINWAIT(((read_phy_reg(pi, 0xa4) & 0x1) == 1), 1000); in wlc_phy_runsamples_nphy()
23161 write_phy_reg(pi, 0xa1, orig_RfseqCoreActv); in wlc_phy_runsamples_nphy()
23165 wlc_phy_tx_tone_nphy(struct brcms_phy *pi, u32 f_kHz, u16 max_val, in wlc_phy_tx_tone_nphy() argument
23172 num_samps = wlc_phy_gen_load_samples_nphy(pi, f_kHz, max_val, in wlc_phy_tx_tone_nphy()
23177 wlc_phy_runsamples_nphy(pi, num_samps, loops, wait, iqmode, in wlc_phy_tx_tone_nphy()
23183 void wlc_phy_stopplayback_nphy(struct brcms_phy *pi) in wlc_phy_stopplayback_nphy() argument
23188 if (pi->phyhang_avoid) in wlc_phy_stopplayback_nphy()
23189 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_stopplayback_nphy()
23191 playback_status = read_phy_reg(pi, 0xc7); in wlc_phy_stopplayback_nphy()
23193 or_phy_reg(pi, 0xc3, NPHY_sampleCmd_STOP); in wlc_phy_stopplayback_nphy()
23195 and_phy_reg(pi, 0xc2, in wlc_phy_stopplayback_nphy()
23198 and_phy_reg(pi, 0xc3, (u16) ~(0x1 << 2)); in wlc_phy_stopplayback_nphy()
23200 if ((pi->nphy_bb_mult_save & BB_MULT_VALID_MASK) != 0) { in wlc_phy_stopplayback_nphy()
23202 bb_mult = pi->nphy_bb_mult_save & BB_MULT_MASK; in wlc_phy_stopplayback_nphy()
23203 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 1, 87, 16, in wlc_phy_stopplayback_nphy()
23206 pi->nphy_bb_mult_save = 0; in wlc_phy_stopplayback_nphy()
23209 if (NREV_IS(pi->pubpi.phy_rev, 7) || NREV_GE(pi->pubpi.phy_rev, 8)) { in wlc_phy_stopplayback_nphy()
23210 if (pi->nphy_sample_play_lpf_bw_ctl_ovr) { in wlc_phy_stopplayback_nphy()
23212 pi, in wlc_phy_stopplayback_nphy()
23216 pi->nphy_sample_play_lpf_bw_ctl_ovr = false; in wlc_phy_stopplayback_nphy()
23220 if (pi->phyhang_avoid) in wlc_phy_stopplayback_nphy()
23221 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_stopplayback_nphy()
23224 static u32 *brcms_phy_get_tx_pwrctrl_tbl(struct brcms_phy *pi) in brcms_phy_get_tx_pwrctrl_tbl() argument
23227 uint phyrev = pi->pubpi.phy_rev; in brcms_phy_get_tx_pwrctrl_tbl()
23229 if (PHY_IPA(pi)) { in brcms_phy_get_tx_pwrctrl_tbl()
23231 wlc_phy_get_ipa_gaintbl_nphy(pi); in brcms_phy_get_tx_pwrctrl_tbl()
23233 if (CHSPEC_IS5G(pi->radio_chanspec)) { in brcms_phy_get_tx_pwrctrl_tbl()
23238 (pi->srom_fem5g.extpagain == 3) ? in brcms_phy_get_tx_pwrctrl_tbl()
23245 if (pi->pubpi.radiorev == 3) in brcms_phy_get_tx_pwrctrl_tbl()
23248 else if (pi->pubpi.radiorev == 5) in brcms_phy_get_tx_pwrctrl_tbl()
23253 (pi->srom_fem2g.extpagain == 3)) in brcms_phy_get_tx_pwrctrl_tbl()
23265 struct nphy_txgains wlc_phy_get_tx_gain_nphy(struct brcms_phy *pi) in wlc_phy_get_tx_gain_nphy() argument
23272 if (pi->nphy_txpwrctrl == PHY_TPC_HW_OFF) { in wlc_phy_get_tx_gain_nphy()
23273 if (pi->phyhang_avoid) in wlc_phy_get_tx_gain_nphy()
23274 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_get_tx_gain_nphy()
23276 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_get_tx_gain_nphy()
23279 if (pi->phyhang_avoid) in wlc_phy_get_tx_gain_nphy()
23280 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_get_tx_gain_nphy()
23283 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_get_tx_gain_nphy()
23294 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_get_tx_gain_nphy()
23315 uint phyrev = pi->pubpi.phy_rev; in wlc_phy_get_tx_gain_nphy()
23317 base_idx[0] = (read_phy_reg(pi, 0x1ed) >> 8) & 0x7f; in wlc_phy_get_tx_gain_nphy()
23318 base_idx[1] = (read_phy_reg(pi, 0x1ee) >> 8) & 0x7f; in wlc_phy_get_tx_gain_nphy()
23322 brcms_phy_get_tx_pwrctrl_tbl(pi); in wlc_phy_get_tx_gain_nphy()
23383 wlc_phy_iqcal_gainparams_nphy(struct brcms_phy *pi, u16 core_no, in wlc_phy_iqcal_gainparams_nphy() argument
23389 u8 band_idx = (CHSPEC_IS5G(pi->radio_chanspec) ? 1 : 0); in wlc_phy_iqcal_gainparams_nphy()
23391 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_iqcal_gainparams_nphy()
23392 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_iqcal_gainparams_nphy()
23399 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_iqcal_gainparams_nphy()
23441 static void wlc_phy_txcal_radio_setup_nphy(struct brcms_phy *pi) in wlc_phy_txcal_radio_setup_nphy() argument
23445 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_txcal_radio_setup_nphy()
23449 pi->tx_rx_cal_radio_saveregs[(core * 11) + 0] = in wlc_phy_txcal_radio_setup_nphy()
23450 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23453 pi->tx_rx_cal_radio_saveregs[(core * 11) + 1] = in wlc_phy_txcal_radio_setup_nphy()
23454 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23457 pi->tx_rx_cal_radio_saveregs[(core * 11) + 2] = in wlc_phy_txcal_radio_setup_nphy()
23458 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23461 pi->tx_rx_cal_radio_saveregs[(core * 11) + 3] = in wlc_phy_txcal_radio_setup_nphy()
23462 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23465 pi->tx_rx_cal_radio_saveregs[(core * 11) + 4] = 0; in wlc_phy_txcal_radio_setup_nphy()
23467 pi->tx_rx_cal_radio_saveregs[(core * 11) + 5] = in wlc_phy_txcal_radio_setup_nphy()
23468 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23471 if (pi->pubpi.radiorev != 5) in wlc_phy_txcal_radio_setup_nphy()
23472 pi->tx_rx_cal_radio_saveregs[(core * 11) + 6] = in wlc_phy_txcal_radio_setup_nphy()
23473 READ_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_txcal_radio_setup_nphy()
23477 pi->tx_rx_cal_radio_saveregs[(core * 11) + 7] = in wlc_phy_txcal_radio_setup_nphy()
23478 READ_RADIO_REG3(pi, RADIO_2057, TX, core, TSSIG); in wlc_phy_txcal_radio_setup_nphy()
23480 pi->tx_rx_cal_radio_saveregs[(core * 11) + 8] = in wlc_phy_txcal_radio_setup_nphy()
23481 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23484 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_txcal_radio_setup_nphy()
23485 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23487 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23489 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23491 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23493 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23495 if (pi->use_int_tx_iqlo_cal_nphy) { in wlc_phy_txcal_radio_setup_nphy()
23496 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_txcal_radio_setup_nphy()
23498 if (!(pi-> in wlc_phy_txcal_radio_setup_nphy()
23500 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txcal_radio_setup_nphy()
23504 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txcal_radio_setup_nphy()
23508 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23511 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23513 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23515 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23517 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23520 if (pi->pubpi.radiorev != 5) in wlc_phy_txcal_radio_setup_nphy()
23521 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_txcal_radio_setup_nphy()
23523 if (pi->use_int_tx_iqlo_cal_nphy) { in wlc_phy_txcal_radio_setup_nphy()
23524 WRITE_RADIO_REG3(pi, RADIO_2057, TX, in wlc_phy_txcal_radio_setup_nphy()
23527 if (!(pi-> in wlc_phy_txcal_radio_setup_nphy()
23529 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txcal_radio_setup_nphy()
23533 WRITE_RADIO_REG3(pi, RADIO_2057, in wlc_phy_txcal_radio_setup_nphy()
23537 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_setup_nphy()
23541 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txcal_radio_setup_nphy()
23548 pi->tx_rx_cal_radio_saveregs[(core * 11) + 0] = in wlc_phy_txcal_radio_setup_nphy()
23549 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23553 pi->tx_rx_cal_radio_saveregs[(core * 11) + 1] = in wlc_phy_txcal_radio_setup_nphy()
23554 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23558 pi->tx_rx_cal_radio_saveregs[(core * 11) + 2] = in wlc_phy_txcal_radio_setup_nphy()
23559 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23563 pi->tx_rx_cal_radio_saveregs[(core * 11) + 3] = in wlc_phy_txcal_radio_setup_nphy()
23565 pi, in wlc_phy_txcal_radio_setup_nphy()
23569 pi->tx_rx_cal_radio_saveregs[(core * 11) + 4] = in wlc_phy_txcal_radio_setup_nphy()
23570 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23574 pi->tx_rx_cal_radio_saveregs[(core * 11) + 5] = in wlc_phy_txcal_radio_setup_nphy()
23575 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23579 pi->tx_rx_cal_radio_saveregs[(core * 11) + 6] = in wlc_phy_txcal_radio_setup_nphy()
23580 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23583 pi->tx_rx_cal_radio_saveregs[(core * 11) + 7] = in wlc_phy_txcal_radio_setup_nphy()
23584 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23587 pi->tx_rx_cal_radio_saveregs[(core * 11) + 8] = in wlc_phy_txcal_radio_setup_nphy()
23588 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23592 pi->tx_rx_cal_radio_saveregs[(core * 11) + 9] = in wlc_phy_txcal_radio_setup_nphy()
23593 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23597 pi->tx_rx_cal_radio_saveregs[(core * 11) + 10] = in wlc_phy_txcal_radio_setup_nphy()
23598 read_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23602 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_txcal_radio_setup_nphy()
23603 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23606 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23609 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23612 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23615 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23619 if (PHY_IPA(pi)) { in wlc_phy_txcal_radio_setup_nphy()
23621 pi, in wlc_phy_txcal_radio_setup_nphy()
23624 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23629 pi, in wlc_phy_txcal_radio_setup_nphy()
23632 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23636 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23639 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23643 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23646 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23650 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23653 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23656 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23659 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23662 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23665 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23669 if (PHY_IPA(pi)) { in wlc_phy_txcal_radio_setup_nphy()
23672 pi, in wlc_phy_txcal_radio_setup_nphy()
23675 if (NREV_LT(pi->pubpi.phy_rev, 5)) in wlc_phy_txcal_radio_setup_nphy()
23677 pi, in wlc_phy_txcal_radio_setup_nphy()
23683 pi, in wlc_phy_txcal_radio_setup_nphy()
23689 pi, in wlc_phy_txcal_radio_setup_nphy()
23692 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23697 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23700 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23703 write_radio_reg(pi, in wlc_phy_txcal_radio_setup_nphy()
23710 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_txcal_radio_setup_nphy()
23711 read_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1); in wlc_phy_txcal_radio_setup_nphy()
23712 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1, 0x29); in wlc_phy_txcal_radio_setup_nphy()
23713 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_txcal_radio_setup_nphy()
23714 read_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2); in wlc_phy_txcal_radio_setup_nphy()
23715 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2, 0x54); in wlc_phy_txcal_radio_setup_nphy()
23717 pi->tx_rx_cal_radio_saveregs[2] = in wlc_phy_txcal_radio_setup_nphy()
23718 read_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1); in wlc_phy_txcal_radio_setup_nphy()
23719 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1, 0x29); in wlc_phy_txcal_radio_setup_nphy()
23720 pi->tx_rx_cal_radio_saveregs[3] = in wlc_phy_txcal_radio_setup_nphy()
23721 read_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2); in wlc_phy_txcal_radio_setup_nphy()
23722 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2, 0x54); in wlc_phy_txcal_radio_setup_nphy()
23724 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_txcal_radio_setup_nphy()
23725 read_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1); in wlc_phy_txcal_radio_setup_nphy()
23726 pi->tx_rx_cal_radio_saveregs[5] = in wlc_phy_txcal_radio_setup_nphy()
23727 read_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2); in wlc_phy_txcal_radio_setup_nphy()
23729 if ((read_phy_reg(pi, 0x09) & NPHY_BandControl_currentBand) == in wlc_phy_txcal_radio_setup_nphy()
23732 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1, 0x04); in wlc_phy_txcal_radio_setup_nphy()
23733 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2, 0x04); in wlc_phy_txcal_radio_setup_nphy()
23736 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1, 0x20); in wlc_phy_txcal_radio_setup_nphy()
23737 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2, 0x20); in wlc_phy_txcal_radio_setup_nphy()
23740 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_txcal_radio_setup_nphy()
23742 or_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM, 0x20); in wlc_phy_txcal_radio_setup_nphy()
23743 or_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM, 0x20); in wlc_phy_txcal_radio_setup_nphy()
23746 and_radio_reg(pi, RADIO_2055_CORE1_TX_BB_MXGM, 0xdf); in wlc_phy_txcal_radio_setup_nphy()
23747 and_radio_reg(pi, RADIO_2055_CORE2_TX_BB_MXGM, 0xdf); in wlc_phy_txcal_radio_setup_nphy()
23752 static void wlc_phy_txcal_radio_cleanup_nphy(struct brcms_phy *pi) in wlc_phy_txcal_radio_cleanup_nphy() argument
23756 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_txcal_radio_cleanup_nphy()
23759 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_cleanup_nphy()
23761 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23765 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, IQCAL_VCM_HG, in wlc_phy_txcal_radio_cleanup_nphy()
23766 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23770 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, IQCAL_IDAC, in wlc_phy_txcal_radio_cleanup_nphy()
23771 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23775 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TSSI_VCM, in wlc_phy_txcal_radio_cleanup_nphy()
23776 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23780 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TX_SSI_MUX, in wlc_phy_txcal_radio_cleanup_nphy()
23781 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23785 if (pi->pubpi.radiorev != 5) in wlc_phy_txcal_radio_cleanup_nphy()
23786 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_txcal_radio_cleanup_nphy()
23788 pi->tx_rx_cal_radio_saveregs in wlc_phy_txcal_radio_cleanup_nphy()
23791 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TSSIG, in wlc_phy_txcal_radio_cleanup_nphy()
23792 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23796 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, TSSI_MISC1, in wlc_phy_txcal_radio_cleanup_nphy()
23797 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23801 } else if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txcal_radio_cleanup_nphy()
23806 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23808 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23812 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23814 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23818 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23820 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23824 write_radio_reg(pi, RADIO_2056_TX_TSSI_VCM | jtag_core, in wlc_phy_txcal_radio_cleanup_nphy()
23825 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23829 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23831 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23835 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23837 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23841 write_radio_reg(pi, RADIO_2056_TX_TSSIA | jtag_core, in wlc_phy_txcal_radio_cleanup_nphy()
23842 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23846 write_radio_reg(pi, RADIO_2056_TX_TSSIG | jtag_core, in wlc_phy_txcal_radio_cleanup_nphy()
23847 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23851 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23853 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23857 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23859 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23863 write_radio_reg(pi, in wlc_phy_txcal_radio_cleanup_nphy()
23865 pi-> in wlc_phy_txcal_radio_cleanup_nphy()
23871 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL1, in wlc_phy_txcal_radio_cleanup_nphy()
23872 pi->tx_rx_cal_radio_saveregs[0]); in wlc_phy_txcal_radio_cleanup_nphy()
23873 write_radio_reg(pi, RADIO_2055_CORE1_TXRF_IQCAL2, in wlc_phy_txcal_radio_cleanup_nphy()
23874 pi->tx_rx_cal_radio_saveregs[1]); in wlc_phy_txcal_radio_cleanup_nphy()
23875 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL1, in wlc_phy_txcal_radio_cleanup_nphy()
23876 pi->tx_rx_cal_radio_saveregs[2]); in wlc_phy_txcal_radio_cleanup_nphy()
23877 write_radio_reg(pi, RADIO_2055_CORE2_TXRF_IQCAL2, in wlc_phy_txcal_radio_cleanup_nphy()
23878 pi->tx_rx_cal_radio_saveregs[3]); in wlc_phy_txcal_radio_cleanup_nphy()
23879 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE1, in wlc_phy_txcal_radio_cleanup_nphy()
23880 pi->tx_rx_cal_radio_saveregs[4]); in wlc_phy_txcal_radio_cleanup_nphy()
23881 write_radio_reg(pi, RADIO_2055_PWRDET_RXTX_CORE2, in wlc_phy_txcal_radio_cleanup_nphy()
23882 pi->tx_rx_cal_radio_saveregs[5]); in wlc_phy_txcal_radio_cleanup_nphy()
23886 static void wlc_phy_txcal_physetup_nphy(struct brcms_phy *pi) in wlc_phy_txcal_physetup_nphy() argument
23890 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txcal_physetup_nphy()
23891 pi->tx_rx_cal_phy_saveregs[0] = read_phy_reg(pi, 0xa6); in wlc_phy_txcal_physetup_nphy()
23892 pi->tx_rx_cal_phy_saveregs[1] = read_phy_reg(pi, 0xa7); in wlc_phy_txcal_physetup_nphy()
23897 mod_phy_reg(pi, 0xa6, mask, val); in wlc_phy_txcal_physetup_nphy()
23898 mod_phy_reg(pi, 0xa7, mask, val); in wlc_phy_txcal_physetup_nphy()
23900 val = read_phy_reg(pi, 0x8f); in wlc_phy_txcal_physetup_nphy()
23901 pi->tx_rx_cal_phy_saveregs[2] = val; in wlc_phy_txcal_physetup_nphy()
23903 write_phy_reg(pi, 0x8f, val); in wlc_phy_txcal_physetup_nphy()
23905 val = read_phy_reg(pi, 0xa5); in wlc_phy_txcal_physetup_nphy()
23906 pi->tx_rx_cal_phy_saveregs[3] = val; in wlc_phy_txcal_physetup_nphy()
23908 write_phy_reg(pi, 0xa5, val); in wlc_phy_txcal_physetup_nphy()
23910 pi->tx_rx_cal_phy_saveregs[4] = read_phy_reg(pi, 0x01); in wlc_phy_txcal_physetup_nphy()
23911 mod_phy_reg(pi, 0x01, (0x1 << 15), 0); in wlc_phy_txcal_physetup_nphy()
23913 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 3, 16, in wlc_phy_txcal_physetup_nphy()
23915 pi->tx_rx_cal_phy_saveregs[5] = val; in wlc_phy_txcal_physetup_nphy()
23917 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 3, 16, in wlc_phy_txcal_physetup_nphy()
23920 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 19, 16, in wlc_phy_txcal_physetup_nphy()
23922 pi->tx_rx_cal_phy_saveregs[6] = val; in wlc_phy_txcal_physetup_nphy()
23924 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 19, 16, in wlc_phy_txcal_physetup_nphy()
23927 pi->tx_rx_cal_phy_saveregs[7] = read_phy_reg(pi, 0x91); in wlc_phy_txcal_physetup_nphy()
23928 pi->tx_rx_cal_phy_saveregs[8] = read_phy_reg(pi, 0x92); in wlc_phy_txcal_physetup_nphy()
23930 if (!(pi->use_int_tx_iqlo_cal_nphy)) in wlc_phy_txcal_physetup_nphy()
23932 pi, in wlc_phy_txcal_physetup_nphy()
23940 pi, in wlc_phy_txcal_physetup_nphy()
23947 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_txcal_physetup_nphy()
23950 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_txcal_physetup_nphy()
23954 pi->tx_rx_cal_phy_saveregs[9] = read_phy_reg(pi, 0x297); in wlc_phy_txcal_physetup_nphy()
23955 pi->tx_rx_cal_phy_saveregs[10] = read_phy_reg(pi, 0x29b); in wlc_phy_txcal_physetup_nphy()
23956 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x297 : in wlc_phy_txcal_physetup_nphy()
23959 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x297 : in wlc_phy_txcal_physetup_nphy()
23962 if (NREV_IS(pi->pubpi.phy_rev, 7) in wlc_phy_txcal_physetup_nphy()
23963 || NREV_GE(pi->pubpi.phy_rev, 8)) in wlc_phy_txcal_physetup_nphy()
23965 pi, (0x1 << 7), in wlc_phy_txcal_physetup_nphy()
23967 (pi, in wlc_phy_txcal_physetup_nphy()
23971 if (pi->use_int_tx_iqlo_cal_nphy in wlc_phy_txcal_physetup_nphy()
23972 && !(pi->internal_tx_iqlo_cal_tapoff_intpa_nphy)) { in wlc_phy_txcal_physetup_nphy()
23974 if (NREV_IS(pi->pubpi.phy_rev, 7)) { in wlc_phy_txcal_physetup_nphy()
23976 mod_radio_reg(pi, RADIO_2057_OVR_REG0, 1 << 4, in wlc_phy_txcal_physetup_nphy()
23979 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_txcal_physetup_nphy()
23981 pi, in wlc_phy_txcal_physetup_nphy()
23985 pi, in wlc_phy_txcal_physetup_nphy()
23990 pi, in wlc_phy_txcal_physetup_nphy()
23994 pi, in wlc_phy_txcal_physetup_nphy()
23998 } else if (NREV_GE(pi->pubpi.phy_rev, 8)) { in wlc_phy_txcal_physetup_nphy()
24000 pi, in wlc_phy_txcal_physetup_nphy()
24007 pi->tx_rx_cal_phy_saveregs[0] = read_phy_reg(pi, 0xa6); in wlc_phy_txcal_physetup_nphy()
24008 pi->tx_rx_cal_phy_saveregs[1] = read_phy_reg(pi, 0xa7); in wlc_phy_txcal_physetup_nphy()
24013 mod_phy_reg(pi, 0xa6, mask, val); in wlc_phy_txcal_physetup_nphy()
24014 mod_phy_reg(pi, 0xa7, mask, val); in wlc_phy_txcal_physetup_nphy()
24016 val = read_phy_reg(pi, 0xa5); in wlc_phy_txcal_physetup_nphy()
24017 pi->tx_rx_cal_phy_saveregs[2] = val; in wlc_phy_txcal_physetup_nphy()
24019 write_phy_reg(pi, 0xa5, val); in wlc_phy_txcal_physetup_nphy()
24021 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 2, 16, in wlc_phy_txcal_physetup_nphy()
24023 pi->tx_rx_cal_phy_saveregs[3] = val; in wlc_phy_txcal_physetup_nphy()
24025 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 2, 16, in wlc_phy_txcal_physetup_nphy()
24028 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 18, 16, in wlc_phy_txcal_physetup_nphy()
24030 pi->tx_rx_cal_phy_saveregs[4] = val; in wlc_phy_txcal_physetup_nphy()
24032 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 18, 16, in wlc_phy_txcal_physetup_nphy()
24035 pi->tx_rx_cal_phy_saveregs[5] = read_phy_reg(pi, 0x91); in wlc_phy_txcal_physetup_nphy()
24036 pi->tx_rx_cal_phy_saveregs[6] = read_phy_reg(pi, 0x92); in wlc_phy_txcal_physetup_nphy()
24037 val = CHSPEC_IS5G(pi->radio_chanspec) ? 0x180 : 0x120; in wlc_phy_txcal_physetup_nphy()
24038 write_phy_reg(pi, 0x91, val); in wlc_phy_txcal_physetup_nphy()
24039 write_phy_reg(pi, 0x92, val); in wlc_phy_txcal_physetup_nphy()
24043 static void wlc_phy_txcal_phycleanup_nphy(struct brcms_phy *pi) in wlc_phy_txcal_phycleanup_nphy() argument
24047 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txcal_phycleanup_nphy()
24048 write_phy_reg(pi, 0xa6, pi->tx_rx_cal_phy_saveregs[0]); in wlc_phy_txcal_phycleanup_nphy()
24049 write_phy_reg(pi, 0xa7, pi->tx_rx_cal_phy_saveregs[1]); in wlc_phy_txcal_phycleanup_nphy()
24050 write_phy_reg(pi, 0x8f, pi->tx_rx_cal_phy_saveregs[2]); in wlc_phy_txcal_phycleanup_nphy()
24051 write_phy_reg(pi, 0xa5, pi->tx_rx_cal_phy_saveregs[3]); in wlc_phy_txcal_phycleanup_nphy()
24052 write_phy_reg(pi, 0x01, pi->tx_rx_cal_phy_saveregs[4]); in wlc_phy_txcal_phycleanup_nphy()
24054 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 3, 16, in wlc_phy_txcal_phycleanup_nphy()
24055 &pi->tx_rx_cal_phy_saveregs[5]); in wlc_phy_txcal_phycleanup_nphy()
24056 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 19, 16, in wlc_phy_txcal_phycleanup_nphy()
24057 &pi->tx_rx_cal_phy_saveregs[6]); in wlc_phy_txcal_phycleanup_nphy()
24059 write_phy_reg(pi, 0x91, pi->tx_rx_cal_phy_saveregs[7]); in wlc_phy_txcal_phycleanup_nphy()
24060 write_phy_reg(pi, 0x92, pi->tx_rx_cal_phy_saveregs[8]); in wlc_phy_txcal_phycleanup_nphy()
24062 write_phy_reg(pi, 0x297, pi->tx_rx_cal_phy_saveregs[9]); in wlc_phy_txcal_phycleanup_nphy()
24063 write_phy_reg(pi, 0x29b, pi->tx_rx_cal_phy_saveregs[10]); in wlc_phy_txcal_phycleanup_nphy()
24065 if (NREV_IS(pi->pubpi.phy_rev, 7) in wlc_phy_txcal_phycleanup_nphy()
24066 || NREV_GE(pi->pubpi.phy_rev, 8)) in wlc_phy_txcal_phycleanup_nphy()
24068 pi, (0x1 << 7), 0, 0, in wlc_phy_txcal_phycleanup_nphy()
24072 wlc_phy_resetcca_nphy(pi); in wlc_phy_txcal_phycleanup_nphy()
24074 if (pi->use_int_tx_iqlo_cal_nphy in wlc_phy_txcal_phycleanup_nphy()
24075 && !(pi->internal_tx_iqlo_cal_tapoff_intpa_nphy)) { in wlc_phy_txcal_phycleanup_nphy()
24077 if (NREV_IS(pi->pubpi.phy_rev, 7)) { in wlc_phy_txcal_phycleanup_nphy()
24078 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_txcal_phycleanup_nphy()
24080 pi, in wlc_phy_txcal_phycleanup_nphy()
24084 pi, in wlc_phy_txcal_phycleanup_nphy()
24089 pi, in wlc_phy_txcal_phycleanup_nphy()
24093 pi, in wlc_phy_txcal_phycleanup_nphy()
24098 mod_radio_reg(pi, RADIO_2057_OVR_REG0, 1 << 4, in wlc_phy_txcal_phycleanup_nphy()
24100 } else if (NREV_GE(pi->pubpi.phy_rev, 8)) { in wlc_phy_txcal_phycleanup_nphy()
24102 pi, in wlc_phy_txcal_phycleanup_nphy()
24110 mod_phy_reg(pi, 0xa6, mask, pi->tx_rx_cal_phy_saveregs[0]); in wlc_phy_txcal_phycleanup_nphy()
24111 mod_phy_reg(pi, 0xa7, mask, pi->tx_rx_cal_phy_saveregs[1]); in wlc_phy_txcal_phycleanup_nphy()
24112 write_phy_reg(pi, 0xa5, pi->tx_rx_cal_phy_saveregs[2]); in wlc_phy_txcal_phycleanup_nphy()
24114 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 2, 16, in wlc_phy_txcal_phycleanup_nphy()
24115 &pi->tx_rx_cal_phy_saveregs[3]); in wlc_phy_txcal_phycleanup_nphy()
24117 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 18, 16, in wlc_phy_txcal_phycleanup_nphy()
24118 &pi->tx_rx_cal_phy_saveregs[4]); in wlc_phy_txcal_phycleanup_nphy()
24120 write_phy_reg(pi, 0x91, pi->tx_rx_cal_phy_saveregs[5]); in wlc_phy_txcal_phycleanup_nphy()
24121 write_phy_reg(pi, 0x92, pi->tx_rx_cal_phy_saveregs[6]); in wlc_phy_txcal_phycleanup_nphy()
24126 wlc_phy_est_tonepwr_nphy(struct brcms_phy *pi, s32 *qdBm_pwrbuf, u8 num_samps) in wlc_phy_est_tonepwr_nphy() argument
24135 tssi_reg = read_phy_reg(pi, 0x1e9); in wlc_phy_est_tonepwr_nphy()
24144 CHSPEC_IS5G(pi->radio_chanspec) ? in wlc_phy_est_tonepwr_nphy()
24147 wlc_phy_poll_rssi_nphy(pi, tssi_type, rssi_buf, num_samps); in wlc_phy_est_tonepwr_nphy()
24165 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_CORE1TXPWRCTL, 1, in wlc_phy_est_tonepwr_nphy()
24167 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_CORE2TXPWRCTL, 1, in wlc_phy_est_tonepwr_nphy()
24171 static void wlc_phy_update_txcal_ladder_nphy(struct brcms_phy *pi, u16 core) in wlc_phy_update_txcal_ladder_nphy() argument
24191 ((pi->nphy_txcal_bbmult >> 8) & 0xff) : in wlc_phy_update_txcal_ladder_nphy()
24192 (pi->nphy_txcal_bbmult & 0xff); in wlc_phy_update_txcal_ladder_nphy()
24200 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 1, index, 16, in wlc_phy_update_txcal_ladder_nphy()
24208 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 1, index + 32, in wlc_phy_update_txcal_ladder_nphy()
24213 static u8 wlc_phy_txpwr_idx_cur_get_nphy(struct brcms_phy *pi, u8 core) in wlc_phy_txpwr_idx_cur_get_nphy() argument
24216 tmp = read_phy_reg(pi, ((core == PHY_CORE_0) ? 0x1ed : 0x1ee)); in wlc_phy_txpwr_idx_cur_get_nphy()
24223 wlc_phy_txpwr_idx_cur_set_nphy(struct brcms_phy *pi, u8 idx0, u8 idx1) in wlc_phy_txpwr_idx_cur_set_nphy() argument
24225 mod_phy_reg(pi, 0x1e7, (0x7f << 0), idx0); in wlc_phy_txpwr_idx_cur_set_nphy()
24227 if (NREV_GT(pi->pubpi.phy_rev, 1)) in wlc_phy_txpwr_idx_cur_set_nphy()
24228 mod_phy_reg(pi, 0x222, (0xff << 0), idx1); in wlc_phy_txpwr_idx_cur_set_nphy()
24231 static u16 wlc_phy_ipa_get_bbmult_nphy(struct brcms_phy *pi) in wlc_phy_ipa_get_bbmult_nphy() argument
24235 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &m0m1); in wlc_phy_ipa_get_bbmult_nphy()
24240 static void wlc_phy_ipa_set_bbmult_nphy(struct brcms_phy *pi, u8 m0, u8 m1) in wlc_phy_ipa_set_bbmult_nphy() argument
24244 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &m0m1); in wlc_phy_ipa_set_bbmult_nphy()
24245 wlc_phy_table_write_nphy(pi, 15, 1, 95, 16, &m0m1); in wlc_phy_ipa_set_bbmult_nphy()
24249 wlc_phy_papd_cal_setup_nphy(struct brcms_phy *pi, in wlc_phy_papd_cal_setup_nphy() argument
24257 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_papd_cal_setup_nphy()
24259 if (NREV_IS(pi->pubpi.phy_rev, 7) in wlc_phy_papd_cal_setup_nphy()
24260 || NREV_GE(pi->pubpi.phy_rev, 8)) in wlc_phy_papd_cal_setup_nphy()
24262 pi, (0x1 << 7), in wlc_phy_papd_cal_setup_nphy()
24264 (pi, in wlc_phy_papd_cal_setup_nphy()
24268 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_papd_cal_setup_nphy()
24269 if (pi->pubpi.radiorev == 5) in wlc_phy_papd_cal_setup_nphy()
24271 else if ((pi->pubpi.radiorev == 7) in wlc_phy_papd_cal_setup_nphy()
24272 || (pi->pubpi.radiorev == 8)) in wlc_phy_papd_cal_setup_nphy()
24274 else if ((pi->pubpi.radiorev <= 4) in wlc_phy_papd_cal_setup_nphy()
24275 || (pi->pubpi.radiorev == 6)) in wlc_phy_papd_cal_setup_nphy()
24278 if ((pi->pubpi.radiorev == 4) || in wlc_phy_papd_cal_setup_nphy()
24279 (pi->pubpi.radiorev == 6)) in wlc_phy_papd_cal_setup_nphy()
24281 else if ((pi->pubpi.radiorev == 3) in wlc_phy_papd_cal_setup_nphy()
24282 || (pi->pubpi.radiorev == 7) in wlc_phy_papd_cal_setup_nphy()
24283 || (pi->pubpi.radiorev == 8)) in wlc_phy_papd_cal_setup_nphy()
24287 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 11), in wlc_phy_papd_cal_setup_nphy()
24292 pi, in wlc_phy_papd_cal_setup_nphy()
24296 pi, in wlc_phy_papd_cal_setup_nphy()
24300 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), in wlc_phy_papd_cal_setup_nphy()
24303 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 2), 1, in wlc_phy_papd_cal_setup_nphy()
24306 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 0), 0, in wlc_phy_papd_cal_setup_nphy()
24309 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 1), 1, in wlc_phy_papd_cal_setup_nphy()
24312 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 8), 0, in wlc_phy_papd_cal_setup_nphy()
24315 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 9), 1, in wlc_phy_papd_cal_setup_nphy()
24318 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 10), 0, in wlc_phy_papd_cal_setup_nphy()
24321 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), 1, in wlc_phy_papd_cal_setup_nphy()
24325 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 5), in wlc_phy_papd_cal_setup_nphy()
24328 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 4), 0, in wlc_phy_papd_cal_setup_nphy()
24332 state->afectrl[core] = read_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_papd_cal_setup_nphy()
24335 read_phy_reg(pi, (core == PHY_CORE_0) ? 0x8f : 0xa5); in wlc_phy_papd_cal_setup_nphy()
24337 read_phy_reg(pi, (core == PHY_CORE_0) ? 0xa7 : 0xa6); in wlc_phy_papd_cal_setup_nphy()
24339 read_phy_reg(pi, (core == PHY_CORE_0) ? 0xa5 : 0x8f); in wlc_phy_papd_cal_setup_nphy()
24341 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0xa6 : 0xa7), in wlc_phy_papd_cal_setup_nphy()
24343 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0x8f : in wlc_phy_papd_cal_setup_nphy()
24346 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0xa7 : 0xa6), in wlc_phy_papd_cal_setup_nphy()
24348 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0xa5 : in wlc_phy_papd_cal_setup_nphy()
24351 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_papd_cal_setup_nphy()
24353 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24356 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24359 READ_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24362 READ_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24365 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24368 if ((pi->pubpi.radiorev == 3) || in wlc_phy_papd_cal_setup_nphy()
24369 (pi->pubpi.radiorev == 4) || in wlc_phy_papd_cal_setup_nphy()
24370 (pi->pubpi.radiorev == 6)) in wlc_phy_papd_cal_setup_nphy()
24371 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24373 else if (pi->pubpi.radiorev == 5) in wlc_phy_papd_cal_setup_nphy()
24374 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24377 else if ((pi->pubpi.radiorev == 7) in wlc_phy_papd_cal_setup_nphy()
24378 || (pi->pubpi.radiorev == 8)) in wlc_phy_papd_cal_setup_nphy()
24379 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24382 WRITE_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24384 WRITE_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24388 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24391 READ_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24394 READ_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24397 READ_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24400 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24403 if ((pi->pubpi.radiorev == 7) in wlc_phy_papd_cal_setup_nphy()
24404 || (pi->pubpi.radiorev == 8)) in wlc_phy_papd_cal_setup_nphy()
24405 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24409 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_setup_nphy()
24412 WRITE_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24414 WRITE_RADIO_REG3(pi, RADIO_2057, TX, off_core, in wlc_phy_papd_cal_setup_nphy()
24420 wlc_phy_tx_tone_nphy(pi, tone_freq, 181, 0, 0, false); in wlc_phy_papd_cal_setup_nphy()
24422 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_papd_cal_setup_nphy()
24425 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_papd_cal_setup_nphy()
24428 mod_phy_reg(pi, (off_core == PHY_CORE_0) ? 0x297 : in wlc_phy_papd_cal_setup_nphy()
24431 mod_phy_reg(pi, (off_core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_papd_cal_setup_nphy()
24436 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 12), 0, 0x3, 0); in wlc_phy_papd_cal_setup_nphy()
24438 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 1, 0, 0); in wlc_phy_papd_cal_setup_nphy()
24440 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 0), 0, 0x3, 0); in wlc_phy_papd_cal_setup_nphy()
24442 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 2), 1, 0x3, 0); in wlc_phy_papd_cal_setup_nphy()
24443 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 1), 1, 0x3, 0); in wlc_phy_papd_cal_setup_nphy()
24445 state->afectrl[core] = read_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_papd_cal_setup_nphy()
24448 read_phy_reg(pi, (core == PHY_CORE_0) ? 0x8f : 0xa5); in wlc_phy_papd_cal_setup_nphy()
24450 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0xa6 : 0xa7), in wlc_phy_papd_cal_setup_nphy()
24452 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0x8f : in wlc_phy_papd_cal_setup_nphy()
24459 READ_RADIO_REG2(pi, RADIO_2056, RX, core, VGA_MASTER); in wlc_phy_papd_cal_setup_nphy()
24460 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, VGA_MASTER, 0x2b); in wlc_phy_papd_cal_setup_nphy()
24461 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_papd_cal_setup_nphy()
24463 READ_RADIO_REG2(pi, RADIO_2056, RX, core, in wlc_phy_papd_cal_setup_nphy()
24466 READ_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_setup_nphy()
24469 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, TXFBMIX_G, in wlc_phy_papd_cal_setup_nphy()
24471 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_setup_nphy()
24475 READ_RADIO_REG2(pi, RADIO_2056, RX, core, in wlc_phy_papd_cal_setup_nphy()
24478 READ_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_setup_nphy()
24481 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, TXFBMIX_A, in wlc_phy_papd_cal_setup_nphy()
24483 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_setup_nphy()
24490 wlc_phy_tx_tone_nphy(pi, tone_freq, 181, 0, 0, false); in wlc_phy_papd_cal_setup_nphy()
24492 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_papd_cal_setup_nphy()
24495 mod_phy_reg(pi, (off_core == PHY_CORE_0) ? 0x297 : in wlc_phy_papd_cal_setup_nphy()
24498 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 0, 0x3, 0); in wlc_phy_papd_cal_setup_nphy()
24503 wlc_phy_papd_cal_cleanup_nphy(struct brcms_phy *pi, in wlc_phy_papd_cal_cleanup_nphy() argument
24508 wlc_phy_stopplayback_nphy(pi); in wlc_phy_papd_cal_cleanup_nphy()
24510 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_papd_cal_cleanup_nphy()
24512 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_papd_cal_cleanup_nphy()
24514 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_papd_cal_cleanup_nphy()
24515 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24517 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24521 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24523 WRITE_RADIO_REG3(pi, RADIO_2057, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24529 if ((pi->pubpi.radiorev == 4) || (pi->pubpi.radiorev == 6)) in wlc_phy_papd_cal_cleanup_nphy()
24531 pi, (0x1 << 2), in wlc_phy_papd_cal_cleanup_nphy()
24536 pi, (0x1 << 2), in wlc_phy_papd_cal_cleanup_nphy()
24540 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 1), in wlc_phy_papd_cal_cleanup_nphy()
24543 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 0), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24545 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 2), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24547 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 11), 1, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24549 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24551 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 11), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24553 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 12), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24555 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 2), 1, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24557 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 0), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24559 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 1), 1, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24561 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 8), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24563 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 9), 1, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24565 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 10), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24567 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), 1, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24569 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 5), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24571 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 4), 0, 0x3, 1, in wlc_phy_papd_cal_cleanup_nphy()
24574 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_papd_cal_cleanup_nphy()
24576 write_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_papd_cal_cleanup_nphy()
24578 write_phy_reg(pi, (core == PHY_CORE_0) ? 0x8f : in wlc_phy_papd_cal_cleanup_nphy()
24582 wlc_phy_ipa_set_bbmult_nphy(pi, (state->mm >> 8) & 0xff, in wlc_phy_papd_cal_cleanup_nphy()
24585 if (NREV_IS(pi->pubpi.phy_rev, 7) in wlc_phy_papd_cal_cleanup_nphy()
24586 || NREV_GE(pi->pubpi.phy_rev, 8)) in wlc_phy_papd_cal_cleanup_nphy()
24588 pi, (0x1 << 7), 0, 0, in wlc_phy_papd_cal_cleanup_nphy()
24592 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 12), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24593 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 13), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24594 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 0), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24596 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 2), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24597 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 1), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24599 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_papd_cal_cleanup_nphy()
24601 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, VGA_MASTER, in wlc_phy_papd_cal_cleanup_nphy()
24603 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_papd_cal_cleanup_nphy()
24604 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, in wlc_phy_papd_cal_cleanup_nphy()
24606 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24610 WRITE_RADIO_REG2(pi, RADIO_2056, RX, core, in wlc_phy_papd_cal_cleanup_nphy()
24612 WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, in wlc_phy_papd_cal_cleanup_nphy()
24617 write_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_papd_cal_cleanup_nphy()
24619 write_phy_reg(pi, (core == PHY_CORE_0) ? 0x8f : in wlc_phy_papd_cal_cleanup_nphy()
24623 wlc_phy_ipa_set_bbmult_nphy(pi, (state->mm >> 8) & 0xff, in wlc_phy_papd_cal_cleanup_nphy()
24626 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 0, 0x3, 1); in wlc_phy_papd_cal_cleanup_nphy()
24631 wlc_phy_a1_nphy(struct brcms_phy *pi, u8 core, u32 winsz, u32 start, in wlc_phy_a1_nphy() argument
24645 wlc_phy_table_read_nphy(pi, in wlc_phy_a1_nphy()
24674 wlc_phy_table_write_nphy(pi, in wlc_phy_a1_nphy()
24683 wlc_phy_a2_nphy(struct brcms_phy *pi, struct nphy_ipa_txcalgains *txgains, in wlc_phy_a2_nphy() argument
24692 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_a2_nphy()
24697 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_a2_nphy()
24699 phy_a9 = wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_a2_nphy()
24701 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_a2_nphy()
24714 pi, in wlc_phy_a2_nphy()
24718 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a2_nphy()
24719 if ((pi->pubpi.radiorev <= 4) in wlc_phy_a2_nphy()
24720 || (pi->pubpi.radiorev == 6)) in wlc_phy_a2_nphy()
24721 m[core] = (pi->bw == WL_CHANSPEC_BW_40) ? in wlc_phy_a2_nphy()
24724 m[core] = (pi->bw == WL_CHANSPEC_BW_40) ? in wlc_phy_a2_nphy()
24727 m[core] = (pi->bw == WL_CHANSPEC_BW_40) ? 75 : 107; in wlc_phy_a2_nphy()
24731 wlc_phy_ipa_set_bbmult_nphy(pi, m[0], m[1]); in wlc_phy_a2_nphy()
24735 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a2_nphy()
24736 if ((pi->pubpi.radiorev == 4) in wlc_phy_a2_nphy()
24737 || (pi->pubpi.radiorev == 6)) { in wlc_phy_a2_nphy()
24745 if ((pi->pubpi.radiorev == 5) in wlc_phy_a2_nphy()
24746 || (pi->pubpi.radiorev == 7) in wlc_phy_a2_nphy()
24747 || (pi->pubpi.radiorev == 8)) { in wlc_phy_a2_nphy()
24757 if ((pi->pubpi.radiorev == 5) in wlc_phy_a2_nphy()
24758 && (CHSPEC_IS2G(pi->radio_chanspec))) in wlc_phy_a2_nphy()
24760 else if (((pi->pubpi.radiorev == 7) && in wlc_phy_a2_nphy()
24761 (CHSPEC_IS2G(pi->radio_chanspec))) || in wlc_phy_a2_nphy()
24762 ((pi->pubpi.radiorev == 8) && in wlc_phy_a2_nphy()
24763 (CHSPEC_IS2G(pi->radio_chanspec)))) in wlc_phy_a2_nphy()
24774 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_a2_nphy()
24777 mod_phy_reg(pi, (phy_a7 == PHY_CORE_0) ? 0x297 : in wlc_phy_a2_nphy()
24780 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24783 mod_phy_reg(pi, (phy_a7 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24786 write_phy_reg(pi, 0x2a1, 0x80); in wlc_phy_a2_nphy()
24787 write_phy_reg(pi, 0x2a2, 0x100); in wlc_phy_a2_nphy()
24789 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24792 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24795 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24798 write_phy_reg(pi, 0x2e5, 0x20); in wlc_phy_a2_nphy()
24800 mod_phy_reg(pi, 0x2a0, (0x3f << 0), (phy_a3) << 0); in wlc_phy_a2_nphy()
24802 mod_phy_reg(pi, 0x29f, (0x3f << 0), (phy_a1) << 0); in wlc_phy_a2_nphy()
24804 mod_phy_reg(pi, 0x29f, (0x3f << 8), (phy_a2) << 8); in wlc_phy_a2_nphy()
24806 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), in wlc_phy_a2_nphy()
24809 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), in wlc_phy_a2_nphy()
24813 write_phy_reg(pi, 0x2be, 1); in wlc_phy_a2_nphy()
24814 SPINWAIT(read_phy_reg(pi, 0x2be), 10 * 1000 * 1000); in wlc_phy_a2_nphy()
24816 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), in wlc_phy_a2_nphy()
24820 wlc_phy_table_write_nphy(pi, in wlc_phy_a2_nphy()
24827 if (CHSPEC_IS5G(pi->radio_chanspec)) in wlc_phy_a2_nphy()
24828 wlc_phy_a1_nphy(pi, core, 5, 0, 35); in wlc_phy_a2_nphy()
24832 pi, in wlc_phy_a2_nphy()
24841 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a2_nphy()
24842 if (NREV_GE(pi->pubpi.phy_rev, 6) && in wlc_phy_a2_nphy()
24843 pi->sh->chip == BCMA_CHIP_ID_BCM47162) { in wlc_phy_a2_nphy()
24845 } else if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_a2_nphy()
24847 } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { in wlc_phy_a2_nphy()
24855 wlc_phy_rfctrl_override_nphy(pi, in wlc_phy_a2_nphy()
24860 wlc_phy_rfctrl_override_nphy(pi, in wlc_phy_a2_nphy()
24867 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_a2_nphy()
24868 m[core] = (pi->bw == WL_CHANSPEC_BW_40) ? 45 : 64; in wlc_phy_a2_nphy()
24870 m[core] = (pi->bw == WL_CHANSPEC_BW_40) ? 75 : 107; in wlc_phy_a2_nphy()
24873 wlc_phy_ipa_set_bbmult_nphy(pi, m[0], m[1]); in wlc_phy_a2_nphy()
24892 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_a2_nphy()
24895 mod_phy_reg(pi, (phy_a7 == PHY_CORE_0) ? 0x297 : in wlc_phy_a2_nphy()
24898 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_a2_nphy()
24899 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24902 mod_phy_reg(pi, (phy_a7 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24905 write_phy_reg(pi, 0x2a1, 0x20); in wlc_phy_a2_nphy()
24906 write_phy_reg(pi, 0x2a2, 0x60); in wlc_phy_a2_nphy()
24908 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24911 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24914 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24917 write_phy_reg(pi, 0x2e5, 0x20); in wlc_phy_a2_nphy()
24919 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24922 mod_phy_reg(pi, (phy_a7 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24925 write_phy_reg(pi, 0x2a1, 0x80); in wlc_phy_a2_nphy()
24926 write_phy_reg(pi, 0x2a2, 0x600); in wlc_phy_a2_nphy()
24928 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24931 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24934 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a2_nphy()
24937 mod_phy_reg(pi, 0x2a0, (0x3f << 8), (0x20) << 8); in wlc_phy_a2_nphy()
24941 mod_phy_reg(pi, 0x2a0, (0x3f << 0), (phy_a3) << 0); in wlc_phy_a2_nphy()
24943 mod_phy_reg(pi, 0x29f, (0x3f << 0), (phy_a1) << 0); in wlc_phy_a2_nphy()
24945 mod_phy_reg(pi, 0x29f, (0x3f << 8), (phy_a2) << 8); in wlc_phy_a2_nphy()
24947 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 1, 0x3, 0); in wlc_phy_a2_nphy()
24949 write_phy_reg(pi, 0x2be, 1); in wlc_phy_a2_nphy()
24950 SPINWAIT(read_phy_reg(pi, 0x2be), 10 * 1000 * 1000); in wlc_phy_a2_nphy()
24952 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 0, 0x3, 0); in wlc_phy_a2_nphy()
24954 wlc_phy_table_write_nphy(pi, in wlc_phy_a2_nphy()
24961 wlc_phy_a1_nphy(pi, core, 5, 0, 40); in wlc_phy_a2_nphy()
24965 static u8 wlc_phy_a3_nphy(struct brcms_phy *pi, u8 start_gain, u8 core) in wlc_phy_a3_nphy() argument
24984 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_a3_nphy()
24989 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a3_nphy()
24990 if (pi->pubpi.radiorev == 5) { in wlc_phy_a3_nphy()
24996 } else if ((pi->pubpi.radiorev == 7) in wlc_phy_a3_nphy()
24997 || (pi->pubpi.radiorev == 8)) { in wlc_phy_a3_nphy()
25019 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_a3_nphy()
25026 wlc_phy_a2_nphy(pi, &phy_a4, CAL_GCTRL, core); in wlc_phy_a3_nphy()
25028 wlc_phy_table_read_nphy(pi, in wlc_phy_a3_nphy()
25068 wlc_phy_a2_nphy(pi, &phy_a4, CAL_GCTRL, core); in wlc_phy_a3_nphy()
25070 wlc_phy_table_read_nphy(pi, in wlc_phy_a3_nphy()
25107 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_a3_nphy()
25114 static void wlc_phy_a4(struct brcms_phy *pi, bool full_cal) in wlc_phy_a4() argument
25131 if (pi->nphy_papd_skip == 1) in wlc_phy_a4()
25134 phy_b3 = (0 == (bcma_read32(pi->d11core, D11REGOFFS(maccontrol)) & in wlc_phy_a4()
25137 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_phy_a4()
25139 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_a4()
25141 pi->nphy_force_papd_cal = false; in wlc_phy_a4()
25143 for (phy_b5 = 0; phy_b5 < pi->pubpi.phy_corenum; phy_b5++) in wlc_phy_a4()
25144 pi->nphy_papd_tx_gain_at_last_cal[phy_b5] = in wlc_phy_a4()
25145 wlc_phy_txpwr_idx_cur_get_nphy(pi, phy_b5); in wlc_phy_a4()
25147 pi->nphy_papd_last_cal = pi->sh->now; in wlc_phy_a4()
25148 pi->nphy_papd_recal_counter++; in wlc_phy_a4()
25150 phy_b4 = pi->nphy_txpwrctrl; in wlc_phy_a4()
25151 wlc_phy_txpwrctrl_enable_nphy(pi, PHY_TPC_HW_OFF); in wlc_phy_a4()
25153 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_SCALARTBL0, 64, 0, 32, in wlc_phy_a4()
25155 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_SCALARTBL1, 64, 0, 32, in wlc_phy_a4()
25158 phy_b9 = read_phy_reg(pi, 0x01); in wlc_phy_a4()
25159 mod_phy_reg(pi, 0x01, (0x1 << 15), 0); in wlc_phy_a4()
25161 for (phy_b5 = 0; phy_b5 < pi->pubpi.phy_corenum; phy_b5++) { in wlc_phy_a4()
25164 wlc_phy_table_write_nphy(pi, in wlc_phy_a4()
25172 wlc_phy_ipa_restore_tx_digi_filts_nphy(pi); in wlc_phy_a4()
25174 phy_b2.mm = wlc_phy_ipa_get_bbmult_nphy(pi); in wlc_phy_a4()
25175 for (phy_b5 = 0; phy_b5 < pi->pubpi.phy_corenum; phy_b5++) { in wlc_phy_a4()
25176 wlc_phy_papd_cal_setup_nphy(pi, &phy_b2, phy_b5); in wlc_phy_a4()
25178 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_a4()
25179 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a4()
25180 if ((pi->pubpi.radiorev == 3) in wlc_phy_a4()
25181 || (pi->pubpi.radiorev == 4) in wlc_phy_a4()
25182 || (pi->pubpi.radiorev == 6)) { in wlc_phy_a4()
25183 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25185 } else if (pi->pubpi.radiorev == 5) { in wlc_phy_a4()
25186 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25188 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25190 pi, in wlc_phy_a4()
25191 pi-> in wlc_phy_a4()
25196 } else if ((pi->pubpi.radiorev == 7) in wlc_phy_a4()
25197 || (pi->pubpi.radiorev == 8)) { in wlc_phy_a4()
25199 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25201 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25203 pi, in wlc_phy_a4()
25204 pi-> in wlc_phy_a4()
25212 pi->nphy_papd_cal_gain_index[phy_b5]; in wlc_phy_a4()
25215 pi->nphy_papd_cal_gain_index[phy_b5] = 0; in wlc_phy_a4()
25216 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25218 pi, in wlc_phy_a4()
25219 pi-> in wlc_phy_a4()
25223 pi->nphy_papd_cal_gain_index[phy_b5]; in wlc_phy_a4()
25229 wlc_phy_a3_nphy(pi, phy_b1[phy_b5].index, in wlc_phy_a4()
25232 pi->nphy_papd_cal_gain_index[phy_b5] = in wlc_phy_a4()
25236 switch (pi->nphy_papd_cal_type) { in wlc_phy_a4()
25238 wlc_phy_a2_nphy(pi, &phy_b1[phy_b5], CAL_FULL, phy_b5); in wlc_phy_a4()
25241 wlc_phy_a2_nphy(pi, &phy_b1[phy_b5], CAL_SOFT, phy_b5); in wlc_phy_a4()
25245 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_a4()
25246 wlc_phy_papd_cal_cleanup_nphy(pi, &phy_b2); in wlc_phy_a4()
25249 if (NREV_LT(pi->pubpi.phy_rev, 7)) in wlc_phy_a4()
25250 wlc_phy_papd_cal_cleanup_nphy(pi, &phy_b2); in wlc_phy_a4()
25252 for (phy_b5 = 0; phy_b5 < pi->pubpi.phy_corenum; phy_b5++) { in wlc_phy_a4()
25255 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_a4()
25256 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a4()
25257 if (pi->pubpi.radiorev == 3) in wlc_phy_a4()
25259 else if (pi->pubpi.radiorev == 5) in wlc_phy_a4()
25267 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a4()
25270 if ((pi->pubpi.radiorev == 3) || in wlc_phy_a4()
25271 (pi->pubpi.radiorev == 4) || in wlc_phy_a4()
25272 (pi->pubpi.radiorev == 6)) { in wlc_phy_a4()
25277 } else if (pi->pubpi.radiorev == 5) { in wlc_phy_a4()
25281 } else if ((pi->pubpi.radiorev == 7) || in wlc_phy_a4()
25282 (pi->pubpi.radiorev == 8)) { in wlc_phy_a4()
25289 if ((pi->pubpi.radiorev == 3) || in wlc_phy_a4()
25290 (pi->pubpi.radiorev == 4) || in wlc_phy_a4()
25291 (pi->pubpi.radiorev == 6)) in wlc_phy_a4()
25296 else if ((pi->pubpi.radiorev == 7) in wlc_phy_a4()
25297 || (pi->pubpi.radiorev == 8)) in wlc_phy_a4()
25305 if (CHSPEC_IS2G(pi->radio_chanspec)) in wlc_phy_a4()
25314 mod_phy_reg(pi, (phy_b5 == PHY_CORE_0) ? 0x298 : in wlc_phy_a4()
25317 pi->nphy_papd_epsilon_offset[phy_b5] = phy_b6; in wlc_phy_a4()
25319 if (NREV_LT(pi->pubpi.phy_rev, 5)) in wlc_phy_a4()
25326 if (CHSPEC_IS2G(pi->radio_chanspec)) { in wlc_phy_a4()
25342 mod_phy_reg(pi, (phy_b5 == PHY_CORE_0) ? 0x298 : in wlc_phy_a4()
25345 pi->nphy_papd_epsilon_offset[phy_b5] = phy_b6; in wlc_phy_a4()
25349 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x297 : in wlc_phy_a4()
25352 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x297 : in wlc_phy_a4()
25355 if (NREV_GE(pi->pubpi.phy_rev, 6)) { in wlc_phy_a4()
25356 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a4()
25359 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a4()
25363 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a4()
25366 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x2a3 : in wlc_phy_a4()
25370 pi->nphy_papdcomp = NPHY_PAPD_COMP_ON; in wlc_phy_a4()
25372 write_phy_reg(pi, 0x01, phy_b9); in wlc_phy_a4()
25374 wlc_phy_ipa_set_tx_digi_filts_nphy(pi); in wlc_phy_a4()
25376 wlc_phy_txpwrctrl_enable_nphy(pi, phy_b4); in wlc_phy_a4()
25378 wlc_phy_txpwr_index_nphy(pi, (1 << 0), in wlc_phy_a4()
25379 (s8) (pi->nphy_txpwrindex[0]. in wlc_phy_a4()
25381 wlc_phy_txpwr_index_nphy(pi, (1 << 1), in wlc_phy_a4()
25382 (s8) (pi->nphy_txpwrindex[1]. in wlc_phy_a4()
25386 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_a4()
25389 wlapi_enable_mac(pi->sh->physhim); in wlc_phy_a4()
25392 void wlc_phy_cal_perical_nphy_run(struct brcms_phy *pi, u8 caltype) in wlc_phy_cal_perical_nphy_run() argument
25400 if (PHY_MUTED(pi)) in wlc_phy_cal_perical_nphy_run()
25404 fullcal = (pi->radio_chanspec != pi->nphy_txiqlocal_chanspec); in wlc_phy_cal_perical_nphy_run()
25408 if (pi->cal_type_override != PHY_PERICAL_AUTO) in wlc_phy_cal_perical_nphy_run()
25410 (pi->cal_type_override == in wlc_phy_cal_perical_nphy_run()
25413 if (pi->mphase_cal_phase_id > MPHASE_CAL_STATE_INIT) { in wlc_phy_cal_perical_nphy_run()
25414 if (pi->nphy_txiqlocal_chanspec != pi->radio_chanspec) in wlc_phy_cal_perical_nphy_run()
25415 wlc_phy_cal_perical_mphase_restart(pi); in wlc_phy_cal_perical_nphy_run()
25418 if (pi->mphase_cal_phase_id == MPHASE_CAL_STATE_RXCAL) in wlc_phy_cal_perical_nphy_run()
25419 wlapi_bmac_write_shm(pi->sh->physhim, M_CTS_DURATION, 10000); in wlc_phy_cal_perical_nphy_run()
25421 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_phy_cal_perical_nphy_run()
25423 wlc_phyreg_enter((struct brcms_phy_pub *) pi); in wlc_phy_cal_perical_nphy_run()
25425 if ((pi->mphase_cal_phase_id == MPHASE_CAL_STATE_IDLE) || in wlc_phy_cal_perical_nphy_run()
25426 (pi->mphase_cal_phase_id == MPHASE_CAL_STATE_INIT)) { in wlc_phy_cal_perical_nphy_run()
25427 pi->nphy_cal_orig_pwr_idx[0] = in wlc_phy_cal_perical_nphy_run()
25428 (u8) ((read_phy_reg(pi, 0x1ed) >> 8) & 0x7f); in wlc_phy_cal_perical_nphy_run()
25429 pi->nphy_cal_orig_pwr_idx[1] = in wlc_phy_cal_perical_nphy_run()
25430 (u8) ((read_phy_reg(pi, 0x1ee) >> 8) & 0x7f); in wlc_phy_cal_perical_nphy_run()
25432 if (pi->nphy_txpwrctrl != PHY_TPC_HW_OFF) { in wlc_phy_cal_perical_nphy_run()
25433 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, in wlc_phy_cal_perical_nphy_run()
25435 pi->nphy_cal_orig_tx_gain); in wlc_phy_cal_perical_nphy_run()
25437 pi->nphy_cal_orig_tx_gain[0] = 0; in wlc_phy_cal_perical_nphy_run()
25438 pi->nphy_cal_orig_tx_gain[1] = 0; in wlc_phy_cal_perical_nphy_run()
25441 target_gain = wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25442 tx_pwr_ctrl_state = pi->nphy_txpwrctrl; in wlc_phy_cal_perical_nphy_run()
25443 wlc_phy_txpwrctrl_enable_nphy(pi, PHY_TPC_HW_OFF); in wlc_phy_cal_perical_nphy_run()
25445 if (pi->antsel_type == ANTSEL_2x3) in wlc_phy_cal_perical_nphy_run()
25446 wlc_phy_antsel_init((struct brcms_phy_pub *) pi, true); in wlc_phy_cal_perical_nphy_run()
25448 mphase = (pi->mphase_cal_phase_id != MPHASE_CAL_STATE_IDLE); in wlc_phy_cal_perical_nphy_run()
25451 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_cal_perical_nphy_run()
25452 wlc_phy_precal_txgain_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25453 pi->nphy_cal_target_gain = wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25456 target_gain = pi->nphy_cal_target_gain; in wlc_phy_cal_perical_nphy_run()
25459 wlc_phy_cal_txiqlo_nphy(pi, target_gain, fullcal, in wlc_phy_cal_perical_nphy_run()
25461 if (PHY_IPA(pi)) in wlc_phy_cal_perical_nphy_run()
25462 wlc_phy_a4(pi, true); in wlc_phy_cal_perical_nphy_run()
25464 wlc_phyreg_exit((struct brcms_phy_pub *) pi); in wlc_phy_cal_perical_nphy_run()
25465 wlapi_enable_mac(pi->sh->physhim); in wlc_phy_cal_perical_nphy_run()
25466 wlapi_bmac_write_shm(pi->sh->physhim, M_CTS_DURATION, in wlc_phy_cal_perical_nphy_run()
25468 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_phy_cal_perical_nphy_run()
25469 wlc_phyreg_enter((struct brcms_phy_pub *) pi); in wlc_phy_cal_perical_nphy_run()
25471 if (0 == wlc_phy_cal_rxiq_nphy(pi, target_gain, in wlc_phy_cal_perical_nphy_run()
25472 (pi->first_cal_after_assoc || in wlc_phy_cal_perical_nphy_run()
25473 (pi->cal_type_override == in wlc_phy_cal_perical_nphy_run()
25475 wlc_phy_savecal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25477 wlc_phy_txpwrctrl_coeff_setup_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25479 pi->nphy_perical_last = pi->sh->now; in wlc_phy_cal_perical_nphy_run()
25483 wlc_phy_rssi_cal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25485 if (pi->first_cal_after_assoc in wlc_phy_cal_perical_nphy_run()
25486 || (pi->cal_type_override == PHY_PERICAL_FULL)) { in wlc_phy_cal_perical_nphy_run()
25487 pi->first_cal_after_assoc = false; in wlc_phy_cal_perical_nphy_run()
25488 wlc_phy_txpwrctrl_idle_tssi_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25489 wlc_phy_txpwrctrl_pwr_setup_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25492 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_perical_nphy_run()
25493 wlc_phy_radio205x_vcocal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25495 switch (pi->mphase_cal_phase_id) { in wlc_phy_cal_perical_nphy_run()
25497 pi->nphy_perical_last = pi->sh->now; in wlc_phy_cal_perical_nphy_run()
25498 pi->nphy_txiqlocal_chanspec = pi->radio_chanspec; in wlc_phy_cal_perical_nphy_run()
25500 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_perical_nphy_run()
25501 wlc_phy_precal_txgain_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25503 pi->nphy_cal_target_gain = wlc_phy_get_tx_gain_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25504 pi->mphase_cal_phase_id++; in wlc_phy_cal_perical_nphy_run()
25513 if ((pi->radar_percal_mask & 0x10) != 0) in wlc_phy_cal_perical_nphy_run()
25514 pi->nphy_rxcal_active = true; in wlc_phy_cal_perical_nphy_run()
25517 (pi, pi->nphy_cal_target_gain, fullcal, in wlc_phy_cal_perical_nphy_run()
25520 wlc_phy_cal_perical_mphase_reset(pi); in wlc_phy_cal_perical_nphy_run()
25524 if (NREV_LE(pi->pubpi.phy_rev, 2) && in wlc_phy_cal_perical_nphy_run()
25525 (pi->mphase_cal_phase_id == in wlc_phy_cal_perical_nphy_run()
25527 pi->mphase_cal_phase_id += 2; in wlc_phy_cal_perical_nphy_run()
25529 pi->mphase_cal_phase_id++; in wlc_phy_cal_perical_nphy_run()
25533 if ((pi->radar_percal_mask & 0x2) != 0) in wlc_phy_cal_perical_nphy_run()
25534 pi->nphy_rxcal_active = true; in wlc_phy_cal_perical_nphy_run()
25536 if (PHY_IPA(pi)) in wlc_phy_cal_perical_nphy_run()
25537 wlc_phy_a4(pi, true); in wlc_phy_cal_perical_nphy_run()
25539 pi->mphase_cal_phase_id++; in wlc_phy_cal_perical_nphy_run()
25543 if ((pi->radar_percal_mask & 0x1) != 0) in wlc_phy_cal_perical_nphy_run()
25544 pi->nphy_rxcal_active = true; in wlc_phy_cal_perical_nphy_run()
25545 if (wlc_phy_cal_rxiq_nphy(pi, target_gain, in wlc_phy_cal_perical_nphy_run()
25546 (pi->first_cal_after_assoc || in wlc_phy_cal_perical_nphy_run()
25547 (pi->cal_type_override == in wlc_phy_cal_perical_nphy_run()
25550 wlc_phy_savecal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25552 pi->mphase_cal_phase_id++; in wlc_phy_cal_perical_nphy_run()
25556 if ((pi->radar_percal_mask & 0x4) != 0) in wlc_phy_cal_perical_nphy_run()
25557 pi->nphy_rxcal_active = true; in wlc_phy_cal_perical_nphy_run()
25558 wlc_phy_txpwrctrl_coeff_setup_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25559 wlc_phy_rssi_cal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25561 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_perical_nphy_run()
25562 wlc_phy_radio205x_vcocal_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25566 if (pi->first_cal_after_assoc) in wlc_phy_cal_perical_nphy_run()
25567 pi->mphase_cal_phase_id++; in wlc_phy_cal_perical_nphy_run()
25569 wlc_phy_cal_perical_mphase_reset(pi); in wlc_phy_cal_perical_nphy_run()
25574 if ((pi->radar_percal_mask & 0x8) != 0) in wlc_phy_cal_perical_nphy_run()
25575 pi->nphy_rxcal_active = true; in wlc_phy_cal_perical_nphy_run()
25577 if (pi->first_cal_after_assoc) { in wlc_phy_cal_perical_nphy_run()
25578 pi->first_cal_after_assoc = false; in wlc_phy_cal_perical_nphy_run()
25579 wlc_phy_txpwrctrl_idle_tssi_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25580 wlc_phy_txpwrctrl_pwr_setup_nphy(pi); in wlc_phy_cal_perical_nphy_run()
25583 wlc_phy_cal_perical_mphase_reset(pi); in wlc_phy_cal_perical_nphy_run()
25587 wlc_phy_cal_perical_mphase_reset(pi); in wlc_phy_cal_perical_nphy_run()
25592 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_cal_perical_nphy_run()
25596 wlc_phy_txpwr_index_nphy(pi, 1, in wlc_phy_cal_perical_nphy_run()
25597 pi-> in wlc_phy_cal_perical_nphy_run()
25600 wlc_phy_txpwr_index_nphy(pi, 2, in wlc_phy_cal_perical_nphy_run()
25601 pi-> in wlc_phy_cal_perical_nphy_run()
25605 pi->nphy_txpwrindex[0].index = -1; in wlc_phy_cal_perical_nphy_run()
25606 pi->nphy_txpwrindex[1].index = -1; in wlc_phy_cal_perical_nphy_run()
25608 wlc_phy_txpwr_index_nphy(pi, (1 << 0), in wlc_phy_cal_perical_nphy_run()
25609 (s8) (pi-> in wlc_phy_cal_perical_nphy_run()
25614 wlc_phy_txpwr_index_nphy(pi, (1 << 1), in wlc_phy_cal_perical_nphy_run()
25615 (s8) (pi-> in wlc_phy_cal_perical_nphy_run()
25624 wlc_phy_txpwrctrl_enable_nphy(pi, tx_pwr_ctrl_state); in wlc_phy_cal_perical_nphy_run()
25625 wlc_phyreg_exit((struct brcms_phy_pub *) pi); in wlc_phy_cal_perical_nphy_run()
25626 wlapi_enable_mac(pi->sh->physhim); in wlc_phy_cal_perical_nphy_run()
25630 wlc_phy_cal_txiqlo_nphy(struct brcms_phy *pi, struct nphy_txgains target_gain, in wlc_phy_cal_txiqlo_nphy() argument
25712 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_cal_txiqlo_nphy()
25714 if (NREV_GE(pi->pubpi.phy_rev, 4)) { in wlc_phy_cal_txiqlo_nphy()
25715 phyhang_avoid_state = pi->phyhang_avoid; in wlc_phy_cal_txiqlo_nphy()
25716 pi->phyhang_avoid = false; in wlc_phy_cal_txiqlo_nphy()
25719 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_cal_txiqlo_nphy()
25724 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, gain_save); in wlc_phy_cal_txiqlo_nphy()
25727 wlc_phy_iqcal_gainparams_nphy(pi, core_no, target_gain, in wlc_phy_cal_txiqlo_nphy()
25732 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, cal_gain); in wlc_phy_cal_txiqlo_nphy()
25734 wlc_phy_txcal_radio_setup_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25736 wlc_phy_txcal_physetup_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25739 if (!(NREV_GE(pi->pubpi.phy_rev, 6) || in wlc_phy_cal_txiqlo_nphy()
25740 (NREV_IS(pi->pubpi.phy_rev, 5) && PHY_IPA(pi) in wlc_phy_cal_txiqlo_nphy()
25741 && (CHSPEC_IS2G(pi->radio_chanspec))))) { in wlc_phy_cal_txiqlo_nphy()
25750 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, tbl_len, 0, in wlc_phy_cal_txiqlo_nphy()
25760 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, tbl_len, 32, in wlc_phy_cal_txiqlo_nphy()
25764 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_cal_txiqlo_nphy()
25765 write_phy_reg(pi, 0xc2, 0x8ad9); in wlc_phy_cal_txiqlo_nphy()
25767 write_phy_reg(pi, 0xc2, 0x8aa9); in wlc_phy_cal_txiqlo_nphy()
25772 if (pi->mphase_cal_phase_id > MPHASE_CAL_STATE_TXPHASE0) { in wlc_phy_cal_txiqlo_nphy()
25773 wlc_phy_runsamples_nphy(pi, phy_bw * 8, 0xffff, 0, 1, 0, false); in wlc_phy_cal_txiqlo_nphy()
25777 wlc_phy_tx_tone_nphy(pi, tone_freq, max_val, 1, 0, in wlc_phy_cal_txiqlo_nphy()
25783 if (pi->mphase_cal_phase_id > MPHASE_CAL_STATE_TXPHASE0) { in wlc_phy_cal_txiqlo_nphy()
25784 tbl_ptr = pi->mphase_txcal_bestcoeffs; in wlc_phy_cal_txiqlo_nphy()
25785 tbl_len = ARRAY_SIZE(pi->mphase_txcal_bestcoeffs); in wlc_phy_cal_txiqlo_nphy()
25786 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_txiqlo_nphy()
25789 if ((!fullcal) && (pi->nphy_txiqlocal_coeffsvalid)) { in wlc_phy_cal_txiqlo_nphy()
25791 tbl_ptr = pi->nphy_txiqlocal_bestc; in wlc_phy_cal_txiqlo_nphy()
25792 tbl_len = ARRAY_SIZE(pi->nphy_txiqlocal_bestc); in wlc_phy_cal_txiqlo_nphy()
25793 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_txiqlo_nphy()
25799 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_cal_txiqlo_nphy()
25811 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, tbl_len, 64, in wlc_phy_cal_txiqlo_nphy()
25815 max_cal_cmds = (NREV_GE(pi->pubpi.phy_rev, 3)) ? in wlc_phy_cal_txiqlo_nphy()
25820 max_cal_cmds = (NREV_GE(pi->pubpi.phy_rev, 3)) ? in wlc_phy_cal_txiqlo_nphy()
25827 cal_cnt = pi->mphase_txcal_cmdidx; in wlc_phy_cal_txiqlo_nphy()
25828 if ((cal_cnt + pi->mphase_txcal_numcmds) < max_cal_cmds) in wlc_phy_cal_txiqlo_nphy()
25829 num_cals = cal_cnt + pi->mphase_txcal_numcmds; in wlc_phy_cal_txiqlo_nphy()
25840 cal_cmd = (NREV_GE(pi->pubpi.phy_rev, 3)) ? in wlc_phy_cal_txiqlo_nphy()
25845 cal_cmd = (NREV_GE(pi->pubpi.phy_rev, 3)) ? in wlc_phy_cal_txiqlo_nphy()
25854 if (NREV_GE(pi->pubpi.phy_rev, 6) || in wlc_phy_cal_txiqlo_nphy()
25855 (NREV_IS(pi->pubpi.phy_rev, 5) && in wlc_phy_cal_txiqlo_nphy()
25856 PHY_IPA(pi) in wlc_phy_cal_txiqlo_nphy()
25857 && (CHSPEC_IS2G(pi->radio_chanspec)))) { in wlc_phy_cal_txiqlo_nphy()
25860 pi, in wlc_phy_cal_txiqlo_nphy()
25869 write_phy_reg(pi, 0xc1, val); in wlc_phy_cal_txiqlo_nphy()
25874 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_cal_txiqlo_nphy()
25881 wlc_phy_table_write_nphy(pi, in wlc_phy_cal_txiqlo_nphy()
25887 write_phy_reg(pi, 0xc0, cal_cmd); in wlc_phy_cal_txiqlo_nphy()
25889 SPINWAIT(((read_phy_reg(pi, 0xc0) & 0xc000) != 0), in wlc_phy_cal_txiqlo_nphy()
25891 if (WARN(read_phy_reg(pi, 0xc0) & 0xc000, in wlc_phy_cal_txiqlo_nphy()
25895 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_cal_txiqlo_nphy()
25897 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_cal_txiqlo_nphy()
25910 pi->mphase_txcal_cmdidx = num_cals; in wlc_phy_cal_txiqlo_nphy()
25911 if (pi->mphase_txcal_cmdidx >= max_cal_cmds) in wlc_phy_cal_txiqlo_nphy()
25912 pi->mphase_txcal_cmdidx = 0; in wlc_phy_cal_txiqlo_nphy()
25916 (NREV_LE(pi->pubpi.phy_rev, 2)) ? in wlc_phy_cal_txiqlo_nphy()
25920 || (pi->mphase_cal_phase_id == mphase_cal_lastphase)) { in wlc_phy_cal_txiqlo_nphy()
25922 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 96, in wlc_phy_cal_txiqlo_nphy()
25924 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 80, in wlc_phy_cal_txiqlo_nphy()
25927 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_cal_txiqlo_nphy()
25935 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 88, in wlc_phy_cal_txiqlo_nphy()
25938 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 101, in wlc_phy_cal_txiqlo_nphy()
25940 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 85, in wlc_phy_cal_txiqlo_nphy()
25943 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 93, in wlc_phy_cal_txiqlo_nphy()
25946 tbl_len = ARRAY_SIZE(pi->nphy_txiqlocal_bestc); in wlc_phy_cal_txiqlo_nphy()
25947 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_txiqlo_nphy()
25950 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_cal_txiqlo_nphy()
25952 pi->nphy_txiqlocal_bestc); in wlc_phy_cal_txiqlo_nphy()
25954 pi->nphy_txiqlocal_coeffsvalid = true; in wlc_phy_cal_txiqlo_nphy()
25955 pi->nphy_txiqlocal_chanspec = pi->radio_chanspec; in wlc_phy_cal_txiqlo_nphy()
25957 tbl_len = ARRAY_SIZE(pi->mphase_txcal_bestcoeffs); in wlc_phy_cal_txiqlo_nphy()
25958 if (NREV_LT(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_txiqlo_nphy()
25961 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_cal_txiqlo_nphy()
25963 pi->mphase_txcal_bestcoeffs); in wlc_phy_cal_txiqlo_nphy()
25966 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25968 write_phy_reg(pi, 0xc2, 0x0000); in wlc_phy_cal_txiqlo_nphy()
25972 wlc_phy_txcal_phycleanup_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25974 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_cal_txiqlo_nphy()
25977 wlc_phy_txcal_radio_cleanup_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25979 if (NREV_LT(pi->pubpi.phy_rev, 2)) { in wlc_phy_cal_txiqlo_nphy()
25981 || (pi->mphase_cal_phase_id == mphase_cal_lastphase)) in wlc_phy_cal_txiqlo_nphy()
25982 wlc_phy_tx_iq_war_nphy(pi); in wlc_phy_cal_txiqlo_nphy()
25985 if (NREV_GE(pi->pubpi.phy_rev, 4)) in wlc_phy_cal_txiqlo_nphy()
25986 pi->phyhang_avoid = phyhang_avoid_state; in wlc_phy_cal_txiqlo_nphy()
25988 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_cal_txiqlo_nphy()
25993 static void wlc_phy_reapply_txcal_coeffs_nphy(struct brcms_phy *pi) in wlc_phy_reapply_txcal_coeffs_nphy() argument
25997 if ((pi->nphy_txiqlocal_chanspec == pi->radio_chanspec) && in wlc_phy_reapply_txcal_coeffs_nphy()
25998 (pi->nphy_txiqlocal_coeffsvalid)) { in wlc_phy_reapply_txcal_coeffs_nphy()
25999 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_IQLOCAL, in wlc_phy_reapply_txcal_coeffs_nphy()
26002 if ((pi->nphy_txiqlocal_bestc[0] != tbl_buf[0]) || in wlc_phy_reapply_txcal_coeffs_nphy()
26003 (pi->nphy_txiqlocal_bestc[1] != tbl_buf[1]) || in wlc_phy_reapply_txcal_coeffs_nphy()
26004 (pi->nphy_txiqlocal_bestc[2] != tbl_buf[2]) || in wlc_phy_reapply_txcal_coeffs_nphy()
26005 (pi->nphy_txiqlocal_bestc[3] != tbl_buf[3])) { in wlc_phy_reapply_txcal_coeffs_nphy()
26007 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 80, in wlc_phy_reapply_txcal_coeffs_nphy()
26008 16, pi->nphy_txiqlocal_bestc); in wlc_phy_reapply_txcal_coeffs_nphy()
26014 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 4, 88, in wlc_phy_reapply_txcal_coeffs_nphy()
26017 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 85, in wlc_phy_reapply_txcal_coeffs_nphy()
26019 &pi->nphy_txiqlocal_bestc[5]); in wlc_phy_reapply_txcal_coeffs_nphy()
26021 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_IQLOCAL, 2, 93, in wlc_phy_reapply_txcal_coeffs_nphy()
26023 &pi->nphy_txiqlocal_bestc[5]); in wlc_phy_reapply_txcal_coeffs_nphy()
26029 wlc_phy_rx_iq_coeffs_nphy(struct brcms_phy *pi, u8 write, in wlc_phy_rx_iq_coeffs_nphy() argument
26033 write_phy_reg(pi, 0x9a, pcomp->a0); in wlc_phy_rx_iq_coeffs_nphy()
26034 write_phy_reg(pi, 0x9b, pcomp->b0); in wlc_phy_rx_iq_coeffs_nphy()
26035 write_phy_reg(pi, 0x9c, pcomp->a1); in wlc_phy_rx_iq_coeffs_nphy()
26036 write_phy_reg(pi, 0x9d, pcomp->b1); in wlc_phy_rx_iq_coeffs_nphy()
26038 pcomp->a0 = read_phy_reg(pi, 0x9a); in wlc_phy_rx_iq_coeffs_nphy()
26039 pcomp->b0 = read_phy_reg(pi, 0x9b); in wlc_phy_rx_iq_coeffs_nphy()
26040 pcomp->a1 = read_phy_reg(pi, 0x9c); in wlc_phy_rx_iq_coeffs_nphy()
26041 pcomp->b1 = read_phy_reg(pi, 0x9d); in wlc_phy_rx_iq_coeffs_nphy()
26046 wlc_phy_rx_iq_est_nphy(struct brcms_phy *pi, struct phy_iq_est *est, in wlc_phy_rx_iq_est_nphy() argument
26051 write_phy_reg(pi, 0x12b, num_samps); in wlc_phy_rx_iq_est_nphy()
26052 mod_phy_reg(pi, 0x12a, (0xff << 0), (wait_time << 0)); in wlc_phy_rx_iq_est_nphy()
26053 mod_phy_reg(pi, 0x129, NPHY_IqestCmd_iqMode, in wlc_phy_rx_iq_est_nphy()
26056 mod_phy_reg(pi, 0x129, NPHY_IqestCmd_iqstart, NPHY_IqestCmd_iqstart); in wlc_phy_rx_iq_est_nphy()
26058 SPINWAIT(((read_phy_reg(pi, 0x129) & NPHY_IqestCmd_iqstart) != 0), in wlc_phy_rx_iq_est_nphy()
26060 if (WARN(read_phy_reg(pi, 0x129) & NPHY_IqestCmd_iqstart, in wlc_phy_rx_iq_est_nphy()
26064 if ((read_phy_reg(pi, 0x129) & NPHY_IqestCmd_iqstart) == 0) { in wlc_phy_rx_iq_est_nphy()
26065 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_rx_iq_est_nphy()
26067 (read_phy_reg(pi, in wlc_phy_rx_iq_est_nphy()
26069 | read_phy_reg(pi, NPHY_IqestipwrAccLo(core)); in wlc_phy_rx_iq_est_nphy()
26071 (read_phy_reg(pi, in wlc_phy_rx_iq_est_nphy()
26073 | read_phy_reg(pi, NPHY_IqestqpwrAccLo(core)); in wlc_phy_rx_iq_est_nphy()
26075 (read_phy_reg(pi, in wlc_phy_rx_iq_est_nphy()
26077 read_phy_reg(pi, NPHY_IqestIqAccLo(core)); in wlc_phy_rx_iq_est_nphy()
26083 static void wlc_phy_calc_rx_iq_comp_nphy(struct brcms_phy *pi, u8 core_mask) in wlc_phy_calc_rx_iq_comp_nphy() argument
26098 wlc_phy_rx_iq_coeffs_nphy(pi, 0, &old_comp); in wlc_phy_calc_rx_iq_comp_nphy()
26100 wlc_phy_rx_iq_coeffs_nphy(pi, 1, &new_comp); in wlc_phy_calc_rx_iq_comp_nphy()
26103 wlc_phy_rx_iq_est_nphy(pi, est, 0x4000, 32, 0); in wlc_phy_calc_rx_iq_comp_nphy()
26107 for (curr_core = 0; curr_core < pi->pubpi.phy_corenum; curr_core++) { in wlc_phy_calc_rx_iq_comp_nphy()
26170 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_calc_rx_iq_comp_nphy()
26180 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_calc_rx_iq_comp_nphy()
26202 wlc_phy_rx_iq_coeffs_nphy(pi, 1, &new_comp); in wlc_phy_calc_rx_iq_comp_nphy()
26205 static void wlc_phy_rxcal_radio_setup_nphy(struct brcms_phy *pi, u8 rx_core) in wlc_phy_rxcal_radio_setup_nphy() argument
26211 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_radio_setup_nphy()
26213 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_setup_nphy()
26214 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26215 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26217 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26218 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26221 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26224 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26229 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26230 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26232 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26233 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26237 pi, in wlc_phy_rxcal_radio_setup_nphy()
26241 pi, in wlc_phy_rxcal_radio_setup_nphy()
26247 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_setup_nphy()
26248 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26249 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26251 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26252 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26256 pi, in wlc_phy_rxcal_radio_setup_nphy()
26260 pi, in wlc_phy_rxcal_radio_setup_nphy()
26265 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26266 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26268 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26269 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26272 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26275 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26283 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26284 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26287 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26288 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26292 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26293 pi->tx_rx_cal_radio_saveregs[2] = in wlc_phy_rxcal_radio_setup_nphy()
26294 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26297 pi->tx_rx_cal_radio_saveregs[3] = in wlc_phy_rxcal_radio_setup_nphy()
26298 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26303 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_setup_nphy()
26305 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26306 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26307 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26312 pi, in wlc_phy_rxcal_radio_setup_nphy()
26316 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26320 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26324 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26325 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26330 (pi->tx_rx_cal_radio_saveregs in wlc_phy_rxcal_radio_setup_nphy()
26335 mod_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26341 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26344 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26348 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26349 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26351 pi, in wlc_phy_rxcal_radio_setup_nphy()
26356 pi, in wlc_phy_rxcal_radio_setup_nphy()
26361 pi, in wlc_phy_rxcal_radio_setup_nphy()
26367 pi, in wlc_phy_rxcal_radio_setup_nphy()
26373 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26375 pi, in wlc_phy_rxcal_radio_setup_nphy()
26380 (pi-> in wlc_phy_rxcal_radio_setup_nphy()
26386 mod_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26392 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26395 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26401 pi->tx_rx_cal_radio_saveregs[0] = in wlc_phy_rxcal_radio_setup_nphy()
26402 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26405 pi->tx_rx_cal_radio_saveregs[1] = in wlc_phy_rxcal_radio_setup_nphy()
26406 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26410 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26411 pi->tx_rx_cal_radio_saveregs[2] = in wlc_phy_rxcal_radio_setup_nphy()
26412 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26415 pi->tx_rx_cal_radio_saveregs[3] = in wlc_phy_rxcal_radio_setup_nphy()
26416 read_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26421 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_setup_nphy()
26423 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26424 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26426 pi, in wlc_phy_rxcal_radio_setup_nphy()
26431 pi, in wlc_phy_rxcal_radio_setup_nphy()
26436 pi, in wlc_phy_rxcal_radio_setup_nphy()
26442 pi, in wlc_phy_rxcal_radio_setup_nphy()
26447 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26449 pi, in wlc_phy_rxcal_radio_setup_nphy()
26454 (pi-> in wlc_phy_rxcal_radio_setup_nphy()
26460 mod_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26466 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26469 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26473 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_setup_nphy()
26474 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26476 pi, in wlc_phy_rxcal_radio_setup_nphy()
26481 pi, in wlc_phy_rxcal_radio_setup_nphy()
26486 pi, in wlc_phy_rxcal_radio_setup_nphy()
26492 pi, in wlc_phy_rxcal_radio_setup_nphy()
26497 pi->tx_rx_cal_radio_saveregs[4] = in wlc_phy_rxcal_radio_setup_nphy()
26499 pi, in wlc_phy_rxcal_radio_setup_nphy()
26504 (pi-> in wlc_phy_rxcal_radio_setup_nphy()
26510 mod_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26516 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26519 write_radio_reg(pi, in wlc_phy_rxcal_radio_setup_nphy()
26527 static void wlc_phy_rxcal_radio_cleanup_nphy(struct brcms_phy *pi, u8 rx_core) in wlc_phy_rxcal_radio_cleanup_nphy() argument
26529 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_radio_cleanup_nphy()
26531 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_cleanup_nphy()
26533 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26535 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26538 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26540 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26545 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26547 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26550 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26552 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26557 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_cleanup_nphy()
26559 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26561 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26564 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26566 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26571 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26573 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26576 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26578 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26585 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26588 pi->tx_rx_cal_radio_saveregs[0]); in wlc_phy_rxcal_radio_cleanup_nphy()
26590 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26593 pi->tx_rx_cal_radio_saveregs[1]); in wlc_phy_rxcal_radio_cleanup_nphy()
26595 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_cleanup_nphy()
26596 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26599 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26602 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26605 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26609 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_cleanup_nphy()
26610 if (pi->pubpi.radiorev >= 5) in wlc_phy_rxcal_radio_cleanup_nphy()
26612 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26615 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26620 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26623 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26627 if (pi->pubpi.radiorev >= 5) in wlc_phy_rxcal_radio_cleanup_nphy()
26629 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26632 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26637 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26640 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26646 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26649 pi->tx_rx_cal_radio_saveregs[0]); in wlc_phy_rxcal_radio_cleanup_nphy()
26651 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26654 pi->tx_rx_cal_radio_saveregs[1]); in wlc_phy_rxcal_radio_cleanup_nphy()
26656 if (pi->pubpi.radiorev >= 5) { in wlc_phy_rxcal_radio_cleanup_nphy()
26657 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26660 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26663 write_radio_reg(pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26666 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26670 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_radio_cleanup_nphy()
26671 if (pi->pubpi.radiorev >= 5) in wlc_phy_rxcal_radio_cleanup_nphy()
26673 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26676 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26681 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26684 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26688 if (pi->pubpi.radiorev >= 5) in wlc_phy_rxcal_radio_cleanup_nphy()
26690 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26693 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26698 pi, in wlc_phy_rxcal_radio_cleanup_nphy()
26701 pi-> in wlc_phy_rxcal_radio_cleanup_nphy()
26709 static void wlc_phy_rxcal_physetup_nphy(struct brcms_phy *pi, u8 rx_core) in wlc_phy_rxcal_physetup_nphy() argument
26714 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_physetup_nphy()
26719 pi->tx_rx_cal_phy_saveregs[0] = read_phy_reg(pi, 0xa2); in wlc_phy_rxcal_physetup_nphy()
26720 pi->tx_rx_cal_phy_saveregs[1] = in wlc_phy_rxcal_physetup_nphy()
26721 read_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0xa6 : 0xa7); in wlc_phy_rxcal_physetup_nphy()
26722 pi->tx_rx_cal_phy_saveregs[2] = in wlc_phy_rxcal_physetup_nphy()
26723 read_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0x8f : 0xa5); in wlc_phy_rxcal_physetup_nphy()
26724 pi->tx_rx_cal_phy_saveregs[3] = read_phy_reg(pi, 0x91); in wlc_phy_rxcal_physetup_nphy()
26725 pi->tx_rx_cal_phy_saveregs[4] = read_phy_reg(pi, 0x92); in wlc_phy_rxcal_physetup_nphy()
26726 pi->tx_rx_cal_phy_saveregs[5] = read_phy_reg(pi, 0x7a); in wlc_phy_rxcal_physetup_nphy()
26727 pi->tx_rx_cal_phy_saveregs[6] = read_phy_reg(pi, 0x7d); in wlc_phy_rxcal_physetup_nphy()
26728 pi->tx_rx_cal_phy_saveregs[7] = read_phy_reg(pi, 0xe7); in wlc_phy_rxcal_physetup_nphy()
26729 pi->tx_rx_cal_phy_saveregs[8] = read_phy_reg(pi, 0xec); in wlc_phy_rxcal_physetup_nphy()
26730 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_physetup_nphy()
26731 pi->tx_rx_cal_phy_saveregs[11] = read_phy_reg(pi, 0x342); in wlc_phy_rxcal_physetup_nphy()
26732 pi->tx_rx_cal_phy_saveregs[12] = read_phy_reg(pi, 0x343); in wlc_phy_rxcal_physetup_nphy()
26733 pi->tx_rx_cal_phy_saveregs[13] = read_phy_reg(pi, 0x346); in wlc_phy_rxcal_physetup_nphy()
26734 pi->tx_rx_cal_phy_saveregs[14] = read_phy_reg(pi, 0x347); in wlc_phy_rxcal_physetup_nphy()
26737 pi->tx_rx_cal_phy_saveregs[9] = read_phy_reg(pi, 0x297); in wlc_phy_rxcal_physetup_nphy()
26738 pi->tx_rx_cal_phy_saveregs[10] = read_phy_reg(pi, 0x29b); in wlc_phy_rxcal_physetup_nphy()
26739 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x297 : in wlc_phy_rxcal_physetup_nphy()
26742 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x297 : in wlc_phy_rxcal_physetup_nphy()
26745 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_physetup_nphy()
26747 mod_phy_reg(pi, 0xa2, (0xf << 0), (1 << tx_core) << 0); in wlc_phy_rxcal_physetup_nphy()
26749 mod_phy_reg(pi, 0xa2, (0xf << 12), (1 << (1 - rx_core)) << 12); in wlc_phy_rxcal_physetup_nphy()
26753 mod_phy_reg(pi, 0xa2, (0xf << 12), (1 << tx_core) << 12); in wlc_phy_rxcal_physetup_nphy()
26754 mod_phy_reg(pi, 0xa2, (0xf << 0), (1 << tx_core) << 0); in wlc_phy_rxcal_physetup_nphy()
26755 mod_phy_reg(pi, 0xa2, (0xf << 4), (1 << rx_core) << 4); in wlc_phy_rxcal_physetup_nphy()
26756 mod_phy_reg(pi, 0xa2, (0xf << 8), (1 << rx_core) << 8); in wlc_phy_rxcal_physetup_nphy()
26759 mod_phy_reg(pi, ((rx_core == PHY_CORE_0) ? 0xa6 : 0xa7), (0x1 << 2), 0); in wlc_phy_rxcal_physetup_nphy()
26760 mod_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0x8f : 0xa5, in wlc_phy_rxcal_physetup_nphy()
26762 if (NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_physetup_nphy()
26763 mod_phy_reg(pi, ((rx_core == PHY_CORE_0) ? 0xa6 : 0xa7), in wlc_phy_rxcal_physetup_nphy()
26765 mod_phy_reg(pi, (rx_core == PHY_CORE_0) ? in wlc_phy_rxcal_physetup_nphy()
26770 wlc_phy_rfctrlintc_override_nphy(pi, NPHY_RfctrlIntc_override_PA, 0, in wlc_phy_rxcal_physetup_nphy()
26774 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_physetup_nphy()
26775 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 3), in wlc_phy_rxcal_physetup_nphy()
26778 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 9), 0, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26780 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 10), 1, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26782 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 0), 1, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26784 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 1), 1, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26786 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 11), 0, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26788 if (CHSPEC_IS40(pi->radio_chanspec)) in wlc_phy_rxcal_physetup_nphy()
26790 pi, in wlc_phy_rxcal_physetup_nphy()
26796 pi, in wlc_phy_rxcal_physetup_nphy()
26801 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 7), in wlc_phy_rxcal_physetup_nphy()
26804 wlc_phy_rfctrl_override_nphy_rev7(pi, (0x1 << 5), 0, 0, 0, in wlc_phy_rxcal_physetup_nphy()
26807 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 3), 0, 3, 0); in wlc_phy_rxcal_physetup_nphy()
26810 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RX2TX); in wlc_phy_rxcal_physetup_nphy()
26812 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_physetup_nphy()
26814 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_rxcal_physetup_nphy()
26827 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_rxcal_physetup_nphy()
26830 wlc_phy_rfctrlintc_override_nphy(pi, in wlc_phy_rxcal_physetup_nphy()
26836 static void wlc_phy_rxcal_phycleanup_nphy(struct brcms_phy *pi, u8 rx_core) in wlc_phy_rxcal_phycleanup_nphy() argument
26839 write_phy_reg(pi, 0xa2, pi->tx_rx_cal_phy_saveregs[0]); in wlc_phy_rxcal_phycleanup_nphy()
26840 write_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0xa6 : 0xa7, in wlc_phy_rxcal_phycleanup_nphy()
26841 pi->tx_rx_cal_phy_saveregs[1]); in wlc_phy_rxcal_phycleanup_nphy()
26842 write_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0x8f : 0xa5, in wlc_phy_rxcal_phycleanup_nphy()
26843 pi->tx_rx_cal_phy_saveregs[2]); in wlc_phy_rxcal_phycleanup_nphy()
26844 write_phy_reg(pi, 0x91, pi->tx_rx_cal_phy_saveregs[3]); in wlc_phy_rxcal_phycleanup_nphy()
26845 write_phy_reg(pi, 0x92, pi->tx_rx_cal_phy_saveregs[4]); in wlc_phy_rxcal_phycleanup_nphy()
26847 write_phy_reg(pi, 0x7a, pi->tx_rx_cal_phy_saveregs[5]); in wlc_phy_rxcal_phycleanup_nphy()
26848 write_phy_reg(pi, 0x7d, pi->tx_rx_cal_phy_saveregs[6]); in wlc_phy_rxcal_phycleanup_nphy()
26849 write_phy_reg(pi, 0xe7, pi->tx_rx_cal_phy_saveregs[7]); in wlc_phy_rxcal_phycleanup_nphy()
26850 write_phy_reg(pi, 0xec, pi->tx_rx_cal_phy_saveregs[8]); in wlc_phy_rxcal_phycleanup_nphy()
26851 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_phycleanup_nphy()
26852 write_phy_reg(pi, 0x342, pi->tx_rx_cal_phy_saveregs[11]); in wlc_phy_rxcal_phycleanup_nphy()
26853 write_phy_reg(pi, 0x343, pi->tx_rx_cal_phy_saveregs[12]); in wlc_phy_rxcal_phycleanup_nphy()
26854 write_phy_reg(pi, 0x346, pi->tx_rx_cal_phy_saveregs[13]); in wlc_phy_rxcal_phycleanup_nphy()
26855 write_phy_reg(pi, 0x347, pi->tx_rx_cal_phy_saveregs[14]); in wlc_phy_rxcal_phycleanup_nphy()
26858 write_phy_reg(pi, 0x297, pi->tx_rx_cal_phy_saveregs[9]); in wlc_phy_rxcal_phycleanup_nphy()
26859 write_phy_reg(pi, 0x29b, pi->tx_rx_cal_phy_saveregs[10]); in wlc_phy_rxcal_phycleanup_nphy()
26863 wlc_phy_rxcal_gainctrl_nphy_rev5(struct brcms_phy *pi, u8 rx_core, in wlc_phy_rxcal_gainctrl_nphy_rev5() argument
26885 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26893 wlc_phy_rx_iq_coeffs_nphy(pi, 0, &save_comp); in wlc_phy_rxcal_gainctrl_nphy_rev5()
26895 wlc_phy_rx_iq_coeffs_nphy(pi, 1, &zero_comp); in wlc_phy_rxcal_gainctrl_nphy_rev5()
26897 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_rxcal_gainctrl_nphy_rev5()
26898 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26900 else if (NREV_GE(pi->pubpi.phy_rev, 4)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26904 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26909 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26917 hpvga = (NREV_GE(pi->pubpi.phy_rev, 7)) ? in wlc_phy_rxcal_gainctrl_nphy_rev5()
26925 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rxcal_gainctrl_nphy_rev5()
26927 pi, in wlc_phy_rxcal_gainctrl_nphy_rev5()
26934 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 12), in wlc_phy_rxcal_gainctrl_nphy_rev5()
26942 pi->nphy_rxcal_pwr_idx[tx_core] = txpwrindex; in wlc_phy_rxcal_gainctrl_nphy_rev5()
26945 nphy_rxcal_txgain[0] = 0x8ff0 | pi->nphy_gmval; in wlc_phy_rxcal_gainctrl_nphy_rev5()
26946 nphy_rxcal_txgain[1] = 0x8ff0 | pi->nphy_gmval; in wlc_phy_rxcal_gainctrl_nphy_rev5()
26947 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, in wlc_phy_rxcal_gainctrl_nphy_rev5()
26951 wlc_phy_txpwr_index_nphy(pi, tx_core + 1, txpwrindex, in wlc_phy_rxcal_gainctrl_nphy_rev5()
26955 wlc_phy_tx_tone_nphy(pi, (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_rxcal_gainctrl_nphy_rev5()
26960 wlc_phy_rx_iq_est_nphy(pi, est, num_samps, 32, 0); in wlc_phy_rxcal_gainctrl_nphy_rev5()
27013 wlc_phy_stopplayback_nphy(pi); in wlc_phy_rxcal_gainctrl_nphy_rev5()
27026 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_rxcal_gainctrl_nphy_rev5()
27035 pi, in wlc_phy_rxcal_gainctrl_nphy_rev5()
27044 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 12), in wlc_phy_rxcal_gainctrl_nphy_rev5()
27062 wlc_phy_rx_iq_coeffs_nphy(pi, 1, &save_comp); in wlc_phy_rxcal_gainctrl_nphy_rev5()
27066 wlc_phy_rxcal_gainctrl_nphy(struct brcms_phy *pi, u8 rx_core, u16 *rxgain, in wlc_phy_rxcal_gainctrl_nphy() argument
27069 wlc_phy_rxcal_gainctrl_nphy_rev5(pi, rx_core, rxgain, cal_type); in wlc_phy_rxcal_gainctrl_nphy()
27073 wlc_phy_rc_sweep_nphy(struct brcms_phy *pi, u8 core_idx, u8 loopback_type) in wlc_phy_rc_sweep_nphy() argument
27107 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_rc_sweep_nphy()
27112 if (CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_rc_sweep_nphy()
27135 read_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27139 read_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27143 orig_dcBypass = ((read_phy_reg(pi, 0x48) >> 8) & 1); in wlc_phy_rc_sweep_nphy()
27145 orig_RxStrnFilt40Num[0] = read_phy_reg(pi, 0x267); in wlc_phy_rc_sweep_nphy()
27146 orig_RxStrnFilt40Num[1] = read_phy_reg(pi, 0x268); in wlc_phy_rc_sweep_nphy()
27147 orig_RxStrnFilt40Num[2] = read_phy_reg(pi, 0x269); in wlc_phy_rc_sweep_nphy()
27148 orig_RxStrnFilt40Den[0] = read_phy_reg(pi, 0x26a); in wlc_phy_rc_sweep_nphy()
27149 orig_RxStrnFilt40Den[1] = read_phy_reg(pi, 0x26b); in wlc_phy_rc_sweep_nphy()
27150 orig_RxStrnFilt40Num[3] = read_phy_reg(pi, 0x26c); in wlc_phy_rc_sweep_nphy()
27151 orig_RxStrnFilt40Num[4] = read_phy_reg(pi, 0x26d); in wlc_phy_rc_sweep_nphy()
27152 orig_RxStrnFilt40Num[5] = read_phy_reg(pi, 0x26e); in wlc_phy_rc_sweep_nphy()
27153 orig_RxStrnFilt40Den[2] = read_phy_reg(pi, 0x26f); in wlc_phy_rc_sweep_nphy()
27154 orig_RxStrnFilt40Den[3] = read_phy_reg(pi, 0x270); in wlc_phy_rc_sweep_nphy()
27156 orig_rfctrloverride[0] = read_phy_reg(pi, 0xe7); in wlc_phy_rc_sweep_nphy()
27157 orig_rfctrloverride[1] = read_phy_reg(pi, 0xec); in wlc_phy_rc_sweep_nphy()
27158 orig_rfctrlauxreg[0] = read_phy_reg(pi, 0xf8); in wlc_phy_rc_sweep_nphy()
27159 orig_rfctrlauxreg[1] = read_phy_reg(pi, 0xfa); in wlc_phy_rc_sweep_nphy()
27160 orig_rfctrlrssiothers = read_phy_reg(pi, (core_idx == 0) ? 0x7a : 0x7d); in wlc_phy_rc_sweep_nphy()
27162 write_radio_reg(pi, (RADIO_2056_TX_TXLPF_RCCAL | radio_addr_offset_tx), in wlc_phy_rc_sweep_nphy()
27165 write_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27169 mod_phy_reg(pi, 0x48, (0x1 << 8), (0x1 << 8)); in wlc_phy_rc_sweep_nphy()
27171 write_phy_reg(pi, 0x267, 0x02d4); in wlc_phy_rc_sweep_nphy()
27172 write_phy_reg(pi, 0x268, 0x0000); in wlc_phy_rc_sweep_nphy()
27173 write_phy_reg(pi, 0x269, 0x0000); in wlc_phy_rc_sweep_nphy()
27174 write_phy_reg(pi, 0x26a, 0x0000); in wlc_phy_rc_sweep_nphy()
27175 write_phy_reg(pi, 0x26b, 0x0000); in wlc_phy_rc_sweep_nphy()
27176 write_phy_reg(pi, 0x26c, 0x02d4); in wlc_phy_rc_sweep_nphy()
27177 write_phy_reg(pi, 0x26d, 0x0000); in wlc_phy_rc_sweep_nphy()
27178 write_phy_reg(pi, 0x26e, 0x0000); in wlc_phy_rc_sweep_nphy()
27179 write_phy_reg(pi, 0x26f, 0x0000); in wlc_phy_rc_sweep_nphy()
27180 write_phy_reg(pi, 0x270, 0x0000); in wlc_phy_rc_sweep_nphy()
27182 or_phy_reg(pi, (core_idx == 0) ? 0xe7 : 0xec, (0x1 << 8)); in wlc_phy_rc_sweep_nphy()
27183 or_phy_reg(pi, (core_idx == 0) ? 0xec : 0xe7, (0x1 << 15)); in wlc_phy_rc_sweep_nphy()
27184 or_phy_reg(pi, (core_idx == 0) ? 0xe7 : 0xec, (0x1 << 9)); in wlc_phy_rc_sweep_nphy()
27185 or_phy_reg(pi, (core_idx == 0) ? 0xe7 : 0xec, (0x1 << 10)); in wlc_phy_rc_sweep_nphy()
27187 mod_phy_reg(pi, (core_idx == 0) ? 0xfa : 0xf8, in wlc_phy_rc_sweep_nphy()
27189 mod_phy_reg(pi, (core_idx == 0) ? 0xf8 : 0xfa, in wlc_phy_rc_sweep_nphy()
27191 mod_phy_reg(pi, (core_idx == 0) ? 0xf8 : 0xfa, in wlc_phy_rc_sweep_nphy()
27193 mod_phy_reg(pi, (core_idx == 0) ? 0x7a : 0x7d, in wlc_phy_rc_sweep_nphy()
27200 write_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27206 wlc_phy_tx_tone_nphy(pi, ref_tone, NPHY_RXCAL_TONEAMP, in wlc_phy_rc_sweep_nphy()
27210 wlc_phy_rx_iq_est_nphy(pi, est, num_samps, 32, 0); in wlc_phy_rc_sweep_nphy()
27225 wlc_phy_tx_tone_nphy(pi, target_bw, NPHY_RXCAL_TONEAMP, in wlc_phy_rc_sweep_nphy()
27230 wlc_phy_rx_iq_est_nphy(pi, est, num_samps, 32, 0); in wlc_phy_rc_sweep_nphy()
27263 if (CHSPEC_IS40(pi->radio_chanspec)) { in wlc_phy_rc_sweep_nphy()
27273 write_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27279 wlc_phy_stopplayback_nphy(pi); in wlc_phy_rc_sweep_nphy()
27281 write_radio_reg(pi, (RADIO_2056_TX_TXLPF_RCCAL | radio_addr_offset_tx), in wlc_phy_rc_sweep_nphy()
27283 write_radio_reg(pi, in wlc_phy_rc_sweep_nphy()
27287 mod_phy_reg(pi, 0x48, (0x1 << 8), (orig_dcBypass << 8)); in wlc_phy_rc_sweep_nphy()
27289 write_phy_reg(pi, 0x267, orig_RxStrnFilt40Num[0]); in wlc_phy_rc_sweep_nphy()
27290 write_phy_reg(pi, 0x268, orig_RxStrnFilt40Num[1]); in wlc_phy_rc_sweep_nphy()
27291 write_phy_reg(pi, 0x269, orig_RxStrnFilt40Num[2]); in wlc_phy_rc_sweep_nphy()
27292 write_phy_reg(pi, 0x26a, orig_RxStrnFilt40Den[0]); in wlc_phy_rc_sweep_nphy()
27293 write_phy_reg(pi, 0x26b, orig_RxStrnFilt40Den[1]); in wlc_phy_rc_sweep_nphy()
27294 write_phy_reg(pi, 0x26c, orig_RxStrnFilt40Num[3]); in wlc_phy_rc_sweep_nphy()
27295 write_phy_reg(pi, 0x26d, orig_RxStrnFilt40Num[4]); in wlc_phy_rc_sweep_nphy()
27296 write_phy_reg(pi, 0x26e, orig_RxStrnFilt40Num[5]); in wlc_phy_rc_sweep_nphy()
27297 write_phy_reg(pi, 0x26f, orig_RxStrnFilt40Den[2]); in wlc_phy_rc_sweep_nphy()
27298 write_phy_reg(pi, 0x270, orig_RxStrnFilt40Den[3]); in wlc_phy_rc_sweep_nphy()
27300 write_phy_reg(pi, 0xe7, orig_rfctrloverride[0]); in wlc_phy_rc_sweep_nphy()
27301 write_phy_reg(pi, 0xec, orig_rfctrloverride[1]); in wlc_phy_rc_sweep_nphy()
27302 write_phy_reg(pi, 0xf8, orig_rfctrlauxreg[0]); in wlc_phy_rc_sweep_nphy()
27303 write_phy_reg(pi, 0xfa, orig_rfctrlauxreg[1]); in wlc_phy_rc_sweep_nphy()
27304 write_phy_reg(pi, (core_idx == 0) ? 0x7a : 0x7d, orig_rfctrlrssiothers); in wlc_phy_rc_sweep_nphy()
27306 pi->nphy_anarxlpf_adjusted = false; in wlc_phy_rc_sweep_nphy()
27312 static int wlc_phy_cal_rxiq_nphy_rev3(struct brcms_phy *pi, in wlc_phy_cal_rxiq_nphy_rev3() argument
27328 orig_BBConfig = read_phy_reg(pi, 0x01); in wlc_phy_cal_rxiq_nphy_rev3()
27329 mod_phy_reg(pi, 0x01, (0x1 << 15), 0); in wlc_phy_cal_rxiq_nphy_rev3()
27331 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_cal_rxiq_nphy_rev3()
27333 if (NREV_GE(pi->pubpi.phy_rev, 4)) { in wlc_phy_cal_rxiq_nphy_rev3()
27334 phyhang_avoid_state = pi->phyhang_avoid; in wlc_phy_cal_rxiq_nphy_rev3()
27335 pi->phyhang_avoid = false; in wlc_phy_cal_rxiq_nphy_rev3()
27338 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, gain_save); in wlc_phy_cal_rxiq_nphy_rev3()
27341 wlc_phy_iqcal_gainparams_nphy(pi, core_no, target_gain, in wlc_phy_cal_rxiq_nphy_rev3()
27346 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, cal_gain); in wlc_phy_cal_rxiq_nphy_rev3()
27349 (struct brcms_phy_pub *) pi); in wlc_phy_cal_rxiq_nphy_rev3()
27351 for (rx_core = 0; rx_core < pi->pubpi.phy_corenum; rx_core++) { in wlc_phy_cal_rxiq_nphy_rev3()
27356 wlc_phy_rxcal_physetup_nphy(pi, rx_core); in wlc_phy_cal_rxiq_nphy_rev3()
27358 wlc_phy_rxcal_radio_setup_nphy(pi, rx_core); in wlc_phy_cal_rxiq_nphy_rev3()
27362 wlc_phy_rxcal_gainctrl_nphy(pi, rx_core, NULL, 0); in wlc_phy_cal_rxiq_nphy_rev3()
27364 wlc_phy_tx_tone_nphy(pi, in wlc_phy_cal_rxiq_nphy_rev3()
27366 pi->radio_chanspec)) ? in wlc_phy_cal_rxiq_nphy_rev3()
27375 wlc_phy_calc_rx_iq_comp_nphy(pi, rx_core + 1); in wlc_phy_cal_rxiq_nphy_rev3()
27376 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_rxiq_nphy_rev3()
27380 && NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_cal_rxiq_nphy_rev3()
27386 (struct brcms_phy_pub *) pi, 3); in wlc_phy_cal_rxiq_nphy_rev3()
27388 wlc_phy_rxcal_gainctrl_nphy(pi, rx_core, NULL, in wlc_phy_cal_rxiq_nphy_rev3()
27392 wlc_phy_rc_sweep_nphy(pi, rx_core, 1); in wlc_phy_cal_rxiq_nphy_rev3()
27393 pi->nphy_rccal_value = best_rccal[rx_core]; in wlc_phy_cal_rxiq_nphy_rev3()
27397 (struct brcms_phy_pub *) pi, in wlc_phy_cal_rxiq_nphy_rev3()
27402 wlc_phy_rxcal_radio_cleanup_nphy(pi, rx_core); in wlc_phy_cal_rxiq_nphy_rev3()
27404 wlc_phy_rxcal_phycleanup_nphy(pi, rx_core); in wlc_phy_cal_rxiq_nphy_rev3()
27405 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_cal_rxiq_nphy_rev3()
27411 write_radio_reg(pi, in wlc_phy_cal_rxiq_nphy_rev3()
27415 for (rx_core = 0; rx_core < pi->pubpi.phy_corenum; rx_core++) { in wlc_phy_cal_rxiq_nphy_rev3()
27420 if (PHY_IPA(pi)) { in wlc_phy_cal_rxiq_nphy_rev3()
27422 (pi->bw == WL_CHANSPEC_BW_40) ? 24 : 12; in wlc_phy_cal_rxiq_nphy_rev3()
27423 txlpf_idac = (pi->bw == WL_CHANSPEC_BW_40) ? in wlc_phy_cal_rxiq_nphy_rev3()
27425 WRITE_RADIO_REG2(pi, RADIO_2056, TX, rx_core, in wlc_phy_cal_rxiq_nphy_rev3()
27434 write_radio_reg(pi, (RADIO_2056_RX_RXLPF_RCCAL_HPC | in wlc_phy_cal_rxiq_nphy_rev3()
27440 write_radio_reg(pi, (RADIO_2056_TX_TXLPF_RCCAL | in wlc_phy_cal_rxiq_nphy_rev3()
27448 write_phy_reg(pi, 0x01, orig_BBConfig); in wlc_phy_cal_rxiq_nphy_rev3()
27450 wlc_phy_resetcca_nphy(pi); in wlc_phy_cal_rxiq_nphy_rev3()
27452 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_cal_rxiq_nphy_rev3()
27454 pi, in wlc_phy_cal_rxiq_nphy_rev3()
27458 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 12), 0, 0x3, 1); in wlc_phy_cal_rxiq_nphy_rev3()
27460 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_cal_rxiq_nphy_rev3()
27462 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_cal_rxiq_nphy_rev3()
27465 if (NREV_GE(pi->pubpi.phy_rev, 4)) in wlc_phy_cal_rxiq_nphy_rev3()
27466 pi->phyhang_avoid = phyhang_avoid_state; in wlc_phy_cal_rxiq_nphy_rev3()
27468 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_cal_rxiq_nphy_rev3()
27474 wlc_phy_cal_rxiq_nphy_rev2(struct brcms_phy *pi, in wlc_phy_cal_rxiq_nphy_rev2() argument
27498 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_cal_rxiq_nphy_rev2()
27500 if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_cal_rxiq_nphy_rev2()
27501 wlc_phy_reapply_txcal_coeffs_nphy(pi); in wlc_phy_cal_rxiq_nphy_rev2()
27503 wlc_phy_table_read_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, gain_save); in wlc_phy_cal_rxiq_nphy_rev2()
27506 wlc_phy_iqcal_gainparams_nphy(pi, core_no, target_gain, in wlc_phy_cal_rxiq_nphy_rev2()
27511 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, cal_gain); in wlc_phy_cal_rxiq_nphy_rev2()
27521 orig_RfseqCoreActv = read_phy_reg(pi, 0xa2); in wlc_phy_cal_rxiq_nphy_rev2()
27522 orig_AfectrlCore = read_phy_reg(pi, (rx_core == PHY_CORE_0) ? in wlc_phy_cal_rxiq_nphy_rev2()
27524 orig_AfectrlOverride = read_phy_reg(pi, 0xa5); in wlc_phy_cal_rxiq_nphy_rev2()
27525 orig_RfctrlIntcRx = read_phy_reg(pi, (rx_core == PHY_CORE_0) ? in wlc_phy_cal_rxiq_nphy_rev2()
27527 orig_RfctrlIntcTx = read_phy_reg(pi, (tx_core == PHY_CORE_0) ? in wlc_phy_cal_rxiq_nphy_rev2()
27530 mod_phy_reg(pi, 0xa2, (0xf << 12), (1 << tx_core) << 12); in wlc_phy_cal_rxiq_nphy_rev2()
27531 mod_phy_reg(pi, 0xa2, (0xf << 0), (1 << tx_core) << 0); in wlc_phy_cal_rxiq_nphy_rev2()
27533 or_phy_reg(pi, ((rx_core == PHY_CORE_0) ? 0xa6 : 0xa7), in wlc_phy_cal_rxiq_nphy_rev2()
27535 or_phy_reg(pi, 0xa5, ((0x1 << 1) | (0x1 << 2))); in wlc_phy_cal_rxiq_nphy_rev2()
27537 if (((pi->nphy_rxcalparams) & 0xff000000)) in wlc_phy_cal_rxiq_nphy_rev2()
27538 write_phy_reg(pi, in wlc_phy_cal_rxiq_nphy_rev2()
27540 (CHSPEC_IS5G(pi->radio_chanspec) ? in wlc_phy_cal_rxiq_nphy_rev2()
27543 write_phy_reg(pi, in wlc_phy_cal_rxiq_nphy_rev2()
27545 (CHSPEC_IS5G(pi->radio_chanspec) ? in wlc_phy_cal_rxiq_nphy_rev2()
27548 write_phy_reg(pi, (tx_core == PHY_CORE_0) ? 0x91 : 0x92, in wlc_phy_cal_rxiq_nphy_rev2()
27549 (CHSPEC_IS5G(pi->radio_chanspec) ? 0x148 : in wlc_phy_cal_rxiq_nphy_rev2()
27561 if ((pi->nphy_rxcalparams & 0x10000)) { in wlc_phy_cal_rxiq_nphy_rev2()
27562 mod_radio_reg(pi, RADIO_2055_CORE1_GEN_SPARE2, mask, in wlc_phy_cal_rxiq_nphy_rev2()
27564 mod_radio_reg(pi, RADIO_2055_CORE2_GEN_SPARE2, mask, in wlc_phy_cal_rxiq_nphy_rev2()
27618 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 10), in wlc_phy_cal_rxiq_nphy_rev2()
27622 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_cal_rxiq_nphy_rev2()
27624 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_rxiq_nphy_rev2()
27627 bcmerror = wlc_phy_tx_tone_nphy(pi, 4000, in wlc_phy_cal_rxiq_nphy_rev2()
27628 (u16) (pi->nphy_rxcalparams & in wlc_phy_cal_rxiq_nphy_rev2()
27632 phy_bw = (CHSPEC_IS40(pi->radio_chanspec)) ? in wlc_phy_cal_rxiq_nphy_rev2()
27634 wlc_phy_runsamples_nphy(pi, phy_bw * 8, 0xffff, in wlc_phy_cal_rxiq_nphy_rev2()
27641 wlc_phy_rx_iq_est_nphy(pi, est, in wlc_phy_cal_rxiq_nphy_rev2()
27651 wlc_phy_calc_rx_iq_comp_nphy(pi, in wlc_phy_cal_rxiq_nphy_rev2()
27656 wlc_phy_stopplayback_nphy(pi); in wlc_phy_cal_rxiq_nphy_rev2()
27663 and_radio_reg(pi, RADIO_2055_CORE1_GEN_SPARE2, ~mask); in wlc_phy_cal_rxiq_nphy_rev2()
27664 and_radio_reg(pi, RADIO_2055_CORE2_GEN_SPARE2, ~mask); in wlc_phy_cal_rxiq_nphy_rev2()
27666 write_phy_reg(pi, (tx_core == PHY_CORE_0) ? 0x91 : in wlc_phy_cal_rxiq_nphy_rev2()
27668 write_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0x91 : in wlc_phy_cal_rxiq_nphy_rev2()
27670 write_phy_reg(pi, 0xa5, orig_AfectrlOverride); in wlc_phy_cal_rxiq_nphy_rev2()
27671 write_phy_reg(pi, (rx_core == PHY_CORE_0) ? 0xa6 : in wlc_phy_cal_rxiq_nphy_rev2()
27673 write_phy_reg(pi, 0xa2, orig_RfseqCoreActv); in wlc_phy_cal_rxiq_nphy_rev2()
27679 wlc_phy_rfctrl_override_nphy(pi, (0x1 << 10), 0, 0x3, 1); in wlc_phy_cal_rxiq_nphy_rev2()
27680 wlc_phy_force_rfseq_nphy(pi, NPHY_RFSEQ_RESET2RX); in wlc_phy_cal_rxiq_nphy_rev2()
27682 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_RFSEQ, 2, 0x110, 16, in wlc_phy_cal_rxiq_nphy_rev2()
27685 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_cal_rxiq_nphy_rev2()
27691 wlc_phy_cal_rxiq_nphy(struct brcms_phy *pi, struct nphy_txgains target_gain, in wlc_phy_cal_rxiq_nphy() argument
27694 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_cal_rxiq_nphy()
27697 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_cal_rxiq_nphy()
27698 return wlc_phy_cal_rxiq_nphy_rev3(pi, target_gain, cal_type, in wlc_phy_cal_rxiq_nphy()
27701 return wlc_phy_cal_rxiq_nphy_rev2(pi, target_gain, debug); in wlc_phy_cal_rxiq_nphy()
27704 void wlc_phy_txpwr_fixpower_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_fixpower_nphy() argument
27712 if (pi->phyhang_avoid) in wlc_phy_txpwr_fixpower_nphy()
27713 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_txpwr_fixpower_nphy()
27715 if (pi->sh->sromrev < 4) { in wlc_phy_txpwr_fixpower_nphy()
27719 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, 0); in wlc_phy_txpwr_fixpower_nphy()
27734 if (NREV_GE(pi->pubpi.phy_rev, 7)) in wlc_phy_txpwr_fixpower_nphy()
27736 else if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_fixpower_nphy()
27739 if (NREV_LT(pi->pubpi.phy_rev, 7)) { in wlc_phy_txpwr_fixpower_nphy()
27746 pi->nphy_txpwrindex[PHY_CORE_0].index_internal = txpi[0]; in wlc_phy_txpwr_fixpower_nphy()
27747 pi->nphy_txpwrindex[PHY_CORE_1].index_internal = txpi[1]; in wlc_phy_txpwr_fixpower_nphy()
27748 pi->nphy_txpwrindex[PHY_CORE_0].index_internal_save = txpi[0]; in wlc_phy_txpwr_fixpower_nphy()
27749 pi->nphy_txpwrindex[PHY_CORE_1].index_internal_save = txpi[1]; in wlc_phy_txpwr_fixpower_nphy()
27751 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_txpwr_fixpower_nphy()
27752 uint phyrev = pi->pubpi.phy_rev; in wlc_phy_txpwr_fixpower_nphy()
27755 if (PHY_IPA(pi)) { in wlc_phy_txpwr_fixpower_nphy()
27757 wlc_phy_get_ipa_gaintbl_nphy(pi); in wlc_phy_txpwr_fixpower_nphy()
27760 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_txpwr_fixpower_nphy()
27767 pi->srom_fem5g.extpagain == in wlc_phy_txpwr_fixpower_nphy()
27780 (pi->srom_fem2g.extpagain == 3)) { in wlc_phy_txpwr_fixpower_nphy()
27807 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0x8f : in wlc_phy_txpwr_fixpower_nphy()
27810 mod_phy_reg(pi, 0xa5, (0x1 << 14), (0x1 << 14)); in wlc_phy_txpwr_fixpower_nphy()
27812 write_phy_reg(pi, (core == PHY_CORE_0) ? 0xaa : 0xab, dac_gain); in wlc_phy_txpwr_fixpower_nphy()
27814 wlc_phy_table_write_nphy(pi, 7, 1, (0x110 + core), 16, in wlc_phy_txpwr_fixpower_nphy()
27817 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_fixpower_nphy()
27820 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_fixpower_nphy()
27822 if (PHY_IPA(pi)) { in wlc_phy_txpwr_fixpower_nphy()
27823 wlc_phy_table_read_nphy(pi, in wlc_phy_txpwr_fixpower_nphy()
27831 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwr_fixpower_nphy()
27835 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwr_fixpower_nphy()
27841 and_phy_reg(pi, 0xbf, (u16) (~(0x1f << 0))); in wlc_phy_txpwr_fixpower_nphy()
27843 if (pi->phyhang_avoid) in wlc_phy_txpwr_fixpower_nphy()
27844 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_txpwr_fixpower_nphy()
27903 void wlc_phy_txpwr_apply_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_apply_nphy() argument
27916 tmp_max_pwr = min(pi->nphy_pwrctrl_info[0].max_pwr_2g, in wlc_phy_txpwr_apply_nphy()
27917 pi->nphy_pwrctrl_info[1].max_pwr_2g); in wlc_phy_txpwr_apply_nphy()
27919 pwr_offsets1[0] = pi->cck2gpo; in wlc_phy_txpwr_apply_nphy()
27920 wlc_phy_txpwr_nphy_srom_convert(pi->tx_srom_max_rate_2g, in wlc_phy_txpwr_apply_nphy()
27926 pwr_offsets1[0] = (u16) (pi->ofdm2gpo & 0xffff); in wlc_phy_txpwr_apply_nphy()
27928 (u16) (pi->ofdm2gpo >> 16) & 0xffff; in wlc_phy_txpwr_apply_nphy()
27930 pwr_offsets2 = pi->mcs2gpo; in wlc_phy_txpwr_apply_nphy()
27932 tmp_cddpo = pi->cdd2gpo; in wlc_phy_txpwr_apply_nphy()
27933 tmp_stbcpo = pi->stbc2gpo; in wlc_phy_txpwr_apply_nphy()
27934 tmp_bw40po = pi->bw402gpo; in wlc_phy_txpwr_apply_nphy()
27936 tx_srom_max_rate = pi->tx_srom_max_rate_2g; in wlc_phy_txpwr_apply_nphy()
27940 tmp_max_pwr = min(pi->nphy_pwrctrl_info[0].max_pwr_5gm, in wlc_phy_txpwr_apply_nphy()
27941 pi->nphy_pwrctrl_info[1].max_pwr_5gm); in wlc_phy_txpwr_apply_nphy()
27943 pwr_offsets1[0] = (u16) (pi->ofdm5gpo & 0xffff); in wlc_phy_txpwr_apply_nphy()
27945 (u16) (pi->ofdm5gpo >> 16) & 0xffff; in wlc_phy_txpwr_apply_nphy()
27947 pwr_offsets2 = pi->mcs5gpo; in wlc_phy_txpwr_apply_nphy()
27949 tmp_cddpo = pi->cdd5gpo; in wlc_phy_txpwr_apply_nphy()
27950 tmp_stbcpo = pi->stbc5gpo; in wlc_phy_txpwr_apply_nphy()
27951 tmp_bw40po = pi->bw405gpo; in wlc_phy_txpwr_apply_nphy()
27953 tx_srom_max_rate = pi->tx_srom_max_rate_5g_mid; in wlc_phy_txpwr_apply_nphy()
27957 tmp_max_pwr = min(pi->nphy_pwrctrl_info[0].max_pwr_5gl, in wlc_phy_txpwr_apply_nphy()
27958 pi->nphy_pwrctrl_info[1].max_pwr_5gl); in wlc_phy_txpwr_apply_nphy()
27960 pwr_offsets1[0] = (u16) (pi->ofdm5glpo & 0xffff); in wlc_phy_txpwr_apply_nphy()
27962 (u16) (pi->ofdm5glpo >> 16) & 0xffff; in wlc_phy_txpwr_apply_nphy()
27964 pwr_offsets2 = pi->mcs5glpo; in wlc_phy_txpwr_apply_nphy()
27966 tmp_cddpo = pi->cdd5glpo; in wlc_phy_txpwr_apply_nphy()
27967 tmp_stbcpo = pi->stbc5glpo; in wlc_phy_txpwr_apply_nphy()
27968 tmp_bw40po = pi->bw405glpo; in wlc_phy_txpwr_apply_nphy()
27970 tx_srom_max_rate = pi->tx_srom_max_rate_5g_low; in wlc_phy_txpwr_apply_nphy()
27974 tmp_max_pwr = min(pi->nphy_pwrctrl_info[0].max_pwr_5gh, in wlc_phy_txpwr_apply_nphy()
27975 pi->nphy_pwrctrl_info[1].max_pwr_5gh); in wlc_phy_txpwr_apply_nphy()
27977 pwr_offsets1[0] = (u16) (pi->ofdm5ghpo & 0xffff); in wlc_phy_txpwr_apply_nphy()
27979 (u16) (pi->ofdm5ghpo >> 16) & 0xffff; in wlc_phy_txpwr_apply_nphy()
27981 pwr_offsets2 = pi->mcs5ghpo; in wlc_phy_txpwr_apply_nphy()
27983 tmp_cddpo = pi->cdd5ghpo; in wlc_phy_txpwr_apply_nphy()
27984 tmp_stbcpo = pi->stbc5ghpo; in wlc_phy_txpwr_apply_nphy()
27985 tmp_bw40po = pi->bw405ghpo; in wlc_phy_txpwr_apply_nphy()
27987 tx_srom_max_rate = pi->tx_srom_max_rate_5g_hi; in wlc_phy_txpwr_apply_nphy()
28005 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_apply_nphy()
28020 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_apply_nphy()
28085 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_apply_nphy()
28098 void wlc_phy_txpower_recalc_target_nphy(struct brcms_phy *pi) in wlc_phy_txpower_recalc_target_nphy() argument
28101 wlc_phy_txpwr_limit_to_tbl_nphy(pi); in wlc_phy_txpower_recalc_target_nphy()
28102 wlc_phy_txpwrctrl_pwr_setup_nphy(pi); in wlc_phy_txpower_recalc_target_nphy()
28104 tx_pwr_ctrl_state = pi->nphy_txpwrctrl; in wlc_phy_txpower_recalc_target_nphy()
28106 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) { in wlc_phy_txpower_recalc_target_nphy()
28107 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, MCTL_PHYLOCK); in wlc_phy_txpower_recalc_target_nphy()
28108 (void)bcma_read32(pi->d11core, D11REGOFFS(maccontrol)); in wlc_phy_txpower_recalc_target_nphy()
28112 wlc_phy_txpwrctrl_enable_nphy(pi, tx_pwr_ctrl_state); in wlc_phy_txpower_recalc_target_nphy()
28114 if (D11REV_IS(pi->sh->corerev, 11) || D11REV_IS(pi->sh->corerev, 12)) in wlc_phy_txpower_recalc_target_nphy()
28115 wlapi_bmac_mctrl(pi->sh->physhim, MCTL_PHYLOCK, 0); in wlc_phy_txpower_recalc_target_nphy()
28118 static bool wlc_phy_txpwr_ison_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_ison_nphy() argument
28120 return read_phy_reg((pi), 0x1e7) & ((0x1 << 15) | in wlc_phy_txpwr_ison_nphy()
28124 u16 wlc_phy_txpwr_idx_get_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_idx_get_nphy() argument
28129 if (wlc_phy_txpwr_ison_nphy(pi)) { in wlc_phy_txpwr_idx_get_nphy()
28130 pwr_idx[0] = wlc_phy_txpwr_idx_cur_get_nphy(pi, PHY_CORE_0); in wlc_phy_txpwr_idx_get_nphy()
28131 pwr_idx[1] = wlc_phy_txpwr_idx_cur_get_nphy(pi, PHY_CORE_1); in wlc_phy_txpwr_idx_get_nphy()
28135 tmp = ((pi->nphy_txpwrindex[PHY_CORE_0].index_internal & 0xff) in wlc_phy_txpwr_idx_get_nphy()
28137 (pi->nphy_txpwrindex[PHY_CORE_1].index_internal & 0xff); in wlc_phy_txpwr_idx_get_nphy()
28143 void wlc_phy_txpwr_papd_cal_nphy(struct brcms_phy *pi) in wlc_phy_txpwr_papd_cal_nphy() argument
28145 if (PHY_IPA(pi) in wlc_phy_txpwr_papd_cal_nphy()
28146 && (pi->nphy_force_papd_cal in wlc_phy_txpwr_papd_cal_nphy()
28147 || (wlc_phy_txpwr_ison_nphy(pi) in wlc_phy_txpwr_papd_cal_nphy()
28150 abs(wlc_phy_txpwr_idx_cur_get_nphy(pi, 0) - in wlc_phy_txpwr_papd_cal_nphy()
28151 pi->nphy_papd_tx_gain_at_last_cal[0]) >= 4) in wlc_phy_txpwr_papd_cal_nphy()
28153 abs(wlc_phy_txpwr_idx_cur_get_nphy(pi, 1) - in wlc_phy_txpwr_papd_cal_nphy()
28154 pi->nphy_papd_tx_gain_at_last_cal[1]) >= 4))))) in wlc_phy_txpwr_papd_cal_nphy()
28155 wlc_phy_a4(pi, true); in wlc_phy_txpwr_papd_cal_nphy()
28158 void wlc_phy_txpwrctrl_enable_nphy(struct brcms_phy *pi, u8 ctrl_type) in wlc_phy_txpwrctrl_enable_nphy() argument
28167 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_enable_nphy()
28168 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_txpwrctrl_enable_nphy()
28173 pi->nphy_txpwrctrl = ctrl_type; in wlc_phy_txpwrctrl_enable_nphy()
28180 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_enable_nphy()
28182 if (wlc_phy_txpwr_ison_nphy(pi)) { in wlc_phy_txpwrctrl_enable_nphy()
28183 for (core = 0; core < pi->pubpi.phy_corenum; in wlc_phy_txpwrctrl_enable_nphy()
28185 pi->nphy_txpwr_idx[core] = in wlc_phy_txpwrctrl_enable_nphy()
28187 pi, in wlc_phy_txpwrctrl_enable_nphy()
28197 wlc_phy_table_write_nphy(pi, 26, tbl_len, tbl_offset, 16, in wlc_phy_txpwrctrl_enable_nphy()
28199 wlc_phy_table_write_nphy(pi, 27, tbl_len, tbl_offset, 16, in wlc_phy_txpwrctrl_enable_nphy()
28202 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwrctrl_enable_nphy()
28203 and_phy_reg(pi, 0x1e7, in wlc_phy_txpwrctrl_enable_nphy()
28208 and_phy_reg(pi, 0x1e7, in wlc_phy_txpwrctrl_enable_nphy()
28211 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_enable_nphy()
28212 or_phy_reg(pi, 0x8f, (0x1 << 8)); in wlc_phy_txpwrctrl_enable_nphy()
28213 or_phy_reg(pi, 0xa5, (0x1 << 8)); in wlc_phy_txpwrctrl_enable_nphy()
28215 or_phy_reg(pi, 0xa5, (0x1 << 14)); in wlc_phy_txpwrctrl_enable_nphy()
28218 if (NREV_IS(pi->pubpi.phy_rev, 2)) in wlc_phy_txpwrctrl_enable_nphy()
28219 mod_phy_reg(pi, 0xdc, 0x00ff, 0x53); in wlc_phy_txpwrctrl_enable_nphy()
28220 else if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_txpwrctrl_enable_nphy()
28221 mod_phy_reg(pi, 0xdc, 0x00ff, 0x5a); in wlc_phy_txpwrctrl_enable_nphy()
28223 if (NREV_LT(pi->pubpi.phy_rev, 2) && in wlc_phy_txpwrctrl_enable_nphy()
28224 pi->bw == WL_CHANSPEC_BW_40) in wlc_phy_txpwrctrl_enable_nphy()
28225 wlapi_bmac_mhf(pi->sh->physhim, MHF1, MHF1_IQSWAP_WAR, in wlc_phy_txpwrctrl_enable_nphy()
28230 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE1TXPWRCTL, 84, 64, in wlc_phy_txpwrctrl_enable_nphy()
28231 8, pi->adj_pwr_tbl_nphy); in wlc_phy_txpwrctrl_enable_nphy()
28232 wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_CORE2TXPWRCTL, 84, 64, in wlc_phy_txpwrctrl_enable_nphy()
28233 8, pi->adj_pwr_tbl_nphy); in wlc_phy_txpwrctrl_enable_nphy()
28239 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_enable_nphy()
28244 mod_phy_reg(pi, 0x1e7, mask, val); in wlc_phy_txpwrctrl_enable_nphy()
28246 if (CHSPEC_IS5G(pi->radio_chanspec)) { in wlc_phy_txpwrctrl_enable_nphy()
28247 if (NREV_GE(pi->pubpi.phy_rev, 7)) { in wlc_phy_txpwrctrl_enable_nphy()
28248 mod_phy_reg(pi, 0x1e7, (0x7f << 0), 0x32); in wlc_phy_txpwrctrl_enable_nphy()
28249 mod_phy_reg(pi, 0x222, (0xff << 0), 0x32); in wlc_phy_txpwrctrl_enable_nphy()
28251 mod_phy_reg(pi, 0x1e7, (0x7f << 0), 0x64); in wlc_phy_txpwrctrl_enable_nphy()
28252 if (NREV_GT(pi->pubpi.phy_rev, 1)) in wlc_phy_txpwrctrl_enable_nphy()
28253 mod_phy_reg(pi, 0x222, in wlc_phy_txpwrctrl_enable_nphy()
28258 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_enable_nphy()
28259 if ((pi->nphy_txpwr_idx[0] != 128) in wlc_phy_txpwrctrl_enable_nphy()
28260 && (pi->nphy_txpwr_idx[1] != 128)) in wlc_phy_txpwrctrl_enable_nphy()
28261 wlc_phy_txpwr_idx_cur_set_nphy(pi, in wlc_phy_txpwrctrl_enable_nphy()
28262 pi-> in wlc_phy_txpwrctrl_enable_nphy()
28265 pi-> in wlc_phy_txpwrctrl_enable_nphy()
28270 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwrctrl_enable_nphy()
28271 and_phy_reg(pi, 0x8f, ~(0x1 << 8)); in wlc_phy_txpwrctrl_enable_nphy()
28272 and_phy_reg(pi, 0xa5, ~(0x1 << 8)); in wlc_phy_txpwrctrl_enable_nphy()
28274 and_phy_reg(pi, 0xa5, ~(0x1 << 14)); in wlc_phy_txpwrctrl_enable_nphy()
28277 if (NREV_IS(pi->pubpi.phy_rev, 2)) in wlc_phy_txpwrctrl_enable_nphy()
28278 mod_phy_reg(pi, 0xdc, 0x00ff, 0x3b); in wlc_phy_txpwrctrl_enable_nphy()
28279 else if (NREV_LT(pi->pubpi.phy_rev, 2)) in wlc_phy_txpwrctrl_enable_nphy()
28280 mod_phy_reg(pi, 0xdc, 0x00ff, 0x40); in wlc_phy_txpwrctrl_enable_nphy()
28282 if (NREV_LT(pi->pubpi.phy_rev, 2) && in wlc_phy_txpwrctrl_enable_nphy()
28283 pi->bw == WL_CHANSPEC_BW_40) in wlc_phy_txpwrctrl_enable_nphy()
28284 wlapi_bmac_mhf(pi->sh->physhim, MHF1, MHF1_IQSWAP_WAR, in wlc_phy_txpwrctrl_enable_nphy()
28287 if (PHY_IPA(pi)) { in wlc_phy_txpwrctrl_enable_nphy()
28288 mod_phy_reg(pi, (0 == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwrctrl_enable_nphy()
28291 mod_phy_reg(pi, (1 == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwrctrl_enable_nphy()
28298 if (pi->phyhang_avoid) in wlc_phy_txpwrctrl_enable_nphy()
28299 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_txpwrctrl_enable_nphy()
28303 wlc_phy_txpwr_index_nphy(struct brcms_phy *pi, u8 core_mask, s8 txpwrindex, in wlc_phy_txpwr_index_nphy() argument
28320 if (pi->phyhang_avoid) in wlc_phy_txpwr_index_nphy()
28321 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_phy_txpwr_index_nphy()
28327 for (core = 0; core < pi->pubpi.phy_corenum; core++) { in wlc_phy_txpwr_index_nphy()
28335 if (pi->nphy_txpwrindex[core].index < 0) in wlc_phy_txpwr_index_nphy()
28338 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwr_index_nphy()
28339 mod_phy_reg(pi, 0x8f, in wlc_phy_txpwr_index_nphy()
28341 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28343 mod_phy_reg(pi, 0xa5, (0x1 << 8), in wlc_phy_txpwr_index_nphy()
28344 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28347 mod_phy_reg(pi, 0xa5, in wlc_phy_txpwr_index_nphy()
28349 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28353 write_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_txpwr_index_nphy()
28355 pi->nphy_txpwrindex[core].AfeCtrlDacGain); in wlc_phy_txpwr_index_nphy()
28357 wlc_phy_table_write_nphy(pi, 7, 1, (0x110 + core), 16, in wlc_phy_txpwr_index_nphy()
28358 &pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28361 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_index_nphy()
28364 (pi->nphy_txpwrindex[core].bbmult << 8) : in wlc_phy_txpwr_index_nphy()
28365 (pi->nphy_txpwrindex[core].bbmult << 0)); in wlc_phy_txpwr_index_nphy()
28366 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_index_nphy()
28370 pi, 15, 2, (80 + 2 * core), 16, in wlc_phy_txpwr_index_nphy()
28371 &pi->nphy_txpwrindex[core].iqcomp_a); in wlc_phy_txpwr_index_nphy()
28373 pi, 15, 1, (85 + core), 16, in wlc_phy_txpwr_index_nphy()
28374 &pi->nphy_txpwrindex[core].locomp); in wlc_phy_txpwr_index_nphy()
28376 pi, 15, 1, (93 + core), 16, in wlc_phy_txpwr_index_nphy()
28377 &pi->nphy_txpwrindex[core].locomp); in wlc_phy_txpwr_index_nphy()
28380 wlc_phy_txpwrctrl_enable_nphy(pi, pi->nphy_txpwrctrl); in wlc_phy_txpwr_index_nphy()
28382 pi->nphy_txpwrindex[core].index_internal = in wlc_phy_txpwr_index_nphy()
28383 pi->nphy_txpwrindex[core].index_internal_save; in wlc_phy_txpwr_index_nphy()
28386 if (pi->nphy_txpwrindex[core].index < 0) { in wlc_phy_txpwr_index_nphy()
28388 if (NREV_GE(pi->pubpi.phy_rev, 3)) { in wlc_phy_txpwr_index_nphy()
28389 mod_phy_reg(pi, 0x8f, in wlc_phy_txpwr_index_nphy()
28391 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28393 mod_phy_reg(pi, 0xa5, (0x1 << 8), in wlc_phy_txpwr_index_nphy()
28394 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28397 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28399 read_phy_reg(pi, 0xa5); in wlc_phy_txpwr_index_nphy()
28402 pi->nphy_txpwrindex[core].AfeCtrlDacGain = in wlc_phy_txpwr_index_nphy()
28403 read_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_txpwr_index_nphy()
28406 wlc_phy_table_read_nphy(pi, 7, 1, in wlc_phy_txpwr_index_nphy()
28408 &pi-> in wlc_phy_txpwr_index_nphy()
28412 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, in wlc_phy_txpwr_index_nphy()
28416 pi->nphy_txpwrindex[core].bbmult = (u8) tmpval; in wlc_phy_txpwr_index_nphy()
28418 wlc_phy_table_read_nphy(pi, 15, 2, in wlc_phy_txpwr_index_nphy()
28420 &pi-> in wlc_phy_txpwr_index_nphy()
28424 wlc_phy_table_read_nphy(pi, 15, 1, (85 + core), in wlc_phy_txpwr_index_nphy()
28426 &pi-> in wlc_phy_txpwr_index_nphy()
28430 pi->nphy_txpwrindex[core].index_internal_save = in wlc_phy_txpwr_index_nphy()
28431 pi->nphy_txpwrindex[core]. in wlc_phy_txpwr_index_nphy()
28435 tx_pwr_ctrl_state = pi->nphy_txpwrctrl; in wlc_phy_txpwr_index_nphy()
28436 wlc_phy_txpwrctrl_enable_nphy(pi, PHY_TPC_HW_OFF); in wlc_phy_txpwr_index_nphy()
28438 if (NREV_IS(pi->pubpi.phy_rev, 1)) in wlc_phy_txpwr_index_nphy()
28439 wlapi_bmac_phyclk_fgc(pi->sh->physhim, ON); in wlc_phy_txpwr_index_nphy()
28441 wlc_phy_table_read_nphy(pi, txpwrctl_tbl, 1, in wlc_phy_txpwr_index_nphy()
28445 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_index_nphy()
28455 if (NREV_GE(pi->pubpi.phy_rev, 3)) in wlc_phy_txpwr_index_nphy()
28456 mod_phy_reg(pi, ((core == PHY_CORE_0) ? 0x8f : in wlc_phy_txpwr_index_nphy()
28459 mod_phy_reg(pi, 0xa5, (0x1 << 14), (0x1 << 14)); in wlc_phy_txpwr_index_nphy()
28461 write_phy_reg(pi, (core == PHY_CORE_0) ? in wlc_phy_txpwr_index_nphy()
28464 wlc_phy_table_write_nphy(pi, 7, 1, (0x110 + core), 16, in wlc_phy_txpwr_index_nphy()
28467 wlc_phy_table_read_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_index_nphy()
28472 wlc_phy_table_write_nphy(pi, 15, 1, 87, 16, &m1m2); in wlc_phy_txpwr_index_nphy()
28474 wlc_phy_table_read_nphy(pi, txpwrctl_tbl, 1, in wlc_phy_txpwr_index_nphy()
28483 wlc_phy_table_write_nphy(pi, 15, 2, in wlc_phy_txpwr_index_nphy()
28488 wlc_phy_table_read_nphy(pi, txpwrctl_tbl, 1, in wlc_phy_txpwr_index_nphy()
28492 wlc_phy_table_write_nphy(pi, 15, 1, (85 + core), in wlc_phy_txpwr_index_nphy()
28495 if (NREV_IS(pi->pubpi.phy_rev, 1)) in wlc_phy_txpwr_index_nphy()
28496 wlapi_bmac_phyclk_fgc(pi->sh->physhim, OFF); in wlc_phy_txpwr_index_nphy()
28498 if (PHY_IPA(pi)) { in wlc_phy_txpwr_index_nphy()
28499 wlc_phy_table_read_nphy(pi, in wlc_phy_txpwr_index_nphy()
28506 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwr_index_nphy()
28510 mod_phy_reg(pi, (core == PHY_CORE_0) ? 0x297 : in wlc_phy_txpwr_index_nphy()
28515 wlc_phy_txpwrctrl_enable_nphy(pi, tx_pwr_ctrl_state); in wlc_phy_txpwr_index_nphy()
28518 pi->nphy_txpwrindex[core].index = txpwrindex; in wlc_phy_txpwr_index_nphy()
28521 if (pi->phyhang_avoid) in wlc_phy_txpwr_index_nphy()
28522 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_phy_txpwr_index_nphy()
28526 wlc_phy_txpower_sromlimit_get_nphy(struct brcms_phy *pi, uint chan, u8 *max_pwr, in wlc_phy_txpower_sromlimit_get_nphy() argument
28531 chan_freq_range = wlc_phy_get_chan_freq_range_nphy(pi, chan); in wlc_phy_txpower_sromlimit_get_nphy()
28534 *max_pwr = pi->tx_srom_max_rate_2g[txp_rate_idx]; in wlc_phy_txpower_sromlimit_get_nphy()
28537 *max_pwr = pi->tx_srom_max_rate_5g_mid[txp_rate_idx]; in wlc_phy_txpower_sromlimit_get_nphy()
28540 *max_pwr = pi->tx_srom_max_rate_5g_low[txp_rate_idx]; in wlc_phy_txpower_sromlimit_get_nphy()
28543 *max_pwr = pi->tx_srom_max_rate_5g_hi[txp_rate_idx]; in wlc_phy_txpower_sromlimit_get_nphy()
28546 *max_pwr = pi->tx_srom_max_rate_2g[txp_rate_idx]; in wlc_phy_txpower_sromlimit_get_nphy()
28553 void wlc_phy_stay_in_carriersearch_nphy(struct brcms_phy *pi, bool enable) in wlc_phy_stay_in_carriersearch_nphy() argument
28558 if (pi->nphy_deaf_count == 0) { in wlc_phy_stay_in_carriersearch_nphy()
28559 pi->classifier_state = in wlc_phy_stay_in_carriersearch_nphy()
28560 wlc_phy_classifier_nphy(pi, 0, 0); in wlc_phy_stay_in_carriersearch_nphy()
28561 wlc_phy_classifier_nphy(pi, (0x7 << 0), 4); in wlc_phy_stay_in_carriersearch_nphy()
28562 wlc_phy_clip_det_nphy(pi, 0, pi->clip_state); in wlc_phy_stay_in_carriersearch_nphy()
28563 wlc_phy_clip_det_nphy(pi, 1, clip_off); in wlc_phy_stay_in_carriersearch_nphy()
28566 pi->nphy_deaf_count++; in wlc_phy_stay_in_carriersearch_nphy()
28568 wlc_phy_resetcca_nphy(pi); in wlc_phy_stay_in_carriersearch_nphy()
28571 pi->nphy_deaf_count--; in wlc_phy_stay_in_carriersearch_nphy()
28573 if (pi->nphy_deaf_count == 0) { in wlc_phy_stay_in_carriersearch_nphy()
28574 wlc_phy_classifier_nphy(pi, (0x7 << 0), in wlc_phy_stay_in_carriersearch_nphy()
28575 pi->classifier_state); in wlc_phy_stay_in_carriersearch_nphy()
28576 wlc_phy_clip_det_nphy(pi, 1, pi->clip_state); in wlc_phy_stay_in_carriersearch_nphy()
28581 void wlc_nphy_deaf_mode(struct brcms_phy *pi, bool mode) in wlc_nphy_deaf_mode() argument
28583 wlapi_suspend_mac_and_wait(pi->sh->physhim); in wlc_nphy_deaf_mode()
28586 if (pi->nphy_deaf_count == 0) in wlc_nphy_deaf_mode()
28587 wlc_phy_stay_in_carriersearch_nphy(pi, true); in wlc_nphy_deaf_mode()
28588 } else if (pi->nphy_deaf_count > 0) { in wlc_nphy_deaf_mode()
28589 wlc_phy_stay_in_carriersearch_nphy(pi, false); in wlc_nphy_deaf_mode()
28592 wlapi_enable_mac(pi->sh->physhim); in wlc_nphy_deaf_mode()