mirror of
https://github.com/torvalds/linux.git
synced 2024-12-07 11:31:41 +00:00
brcmsmac: add some workarounds for other chips again
This adds some workarounds for the BCM4716, BCM47162, BCM5357 to the
phy code again. This patch reverts parts of the following patch.
commit c2c724977f
Author: Arend van Spriel <arend@broadcom.com>
Date: Wed Jun 29 16:46:35 2011 -0700
staging: brcm80211: remove unsupported chipset code from brcmsmac phy
The BCM4716 is working for me with an other firmware and I am working
on adding support for the other chips.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
0d3b9dd1a3
commit
c9d6afc91d
@ -17893,6 +17893,8 @@ static u32 *wlc_phy_get_ipa_gaintbl_nphy(struct brcms_phy *pi)
|
||||
nphy_tpc_txgain_ipa_2g_2057rev7;
|
||||
} else if (NREV_IS(pi->pubpi.phy_rev, 6)) {
|
||||
tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev6;
|
||||
if (pi->sh->chip == BCMA_CHIP_ID_BCM47162)
|
||||
tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5;
|
||||
} else if (NREV_IS(pi->pubpi.phy_rev, 5)) {
|
||||
tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5;
|
||||
} else {
|
||||
@ -19254,8 +19256,14 @@ static void wlc_phy_spurwar_nphy(struct brcms_phy *pi)
|
||||
case 38:
|
||||
case 102:
|
||||
case 118:
|
||||
nphy_adj_tone_id_buf[0] = 0;
|
||||
nphy_adj_noise_var_buf[0] = 0x0;
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) &&
|
||||
(pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) {
|
||||
nphy_adj_tone_id_buf[0] = 32;
|
||||
nphy_adj_noise_var_buf[0] = 0x21f;
|
||||
} else {
|
||||
nphy_adj_tone_id_buf[0] = 0;
|
||||
nphy_adj_noise_var_buf[0] = 0x0;
|
||||
}
|
||||
break;
|
||||
case 134:
|
||||
nphy_adj_tone_id_buf[0] = 32;
|
||||
@ -19318,6 +19326,10 @@ void wlc_phy_init_nphy(struct brcms_phy *pi)
|
||||
0x40, 0x40);
|
||||
}
|
||||
|
||||
if ((!PHY_IPA(pi)) && (pi->sh->chip == BCMA_CHIP_ID_BCM5357))
|
||||
si_pmu_chipcontrol(pi->sh->sih, 1, CCTRL5357_EXTPA,
|
||||
CCTRL5357_EXTPA);
|
||||
|
||||
if ((pi->nphy_gband_spurwar2_en) && CHSPEC_IS2G(pi->radio_chanspec) &&
|
||||
CHSPEC_IS40(pi->radio_chanspec)) {
|
||||
|
||||
@ -20695,12 +20707,22 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
|
||||
write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 |
|
||||
RADIO_2056_SYN, 0x1f);
|
||||
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_LOOPFILTER4 |
|
||||
RADIO_2056_SYN, 0xb);
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_CP2 |
|
||||
RADIO_2056_SYN, 0x14);
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM47162)) {
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_LOOPFILTER4 |
|
||||
RADIO_2056_SYN, 0x14);
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_CP2 |
|
||||
RADIO_2056_SYN, 0x00);
|
||||
} else {
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_LOOPFILTER4 |
|
||||
RADIO_2056_SYN, 0xb);
|
||||
write_radio_reg(pi,
|
||||
RADIO_2056_SYN_PLL_CP2 |
|
||||
RADIO_2056_SYN, 0x14);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -20747,24 +20769,30 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
|
||||
WRITE_RADIO_REG2(pi, RADIO_2056, TX, core,
|
||||
PADG_IDAC, 0xcc);
|
||||
|
||||
bias = 0x25;
|
||||
cascbias = 0x20;
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM47162)) {
|
||||
bias = 0x40;
|
||||
cascbias = 0x45;
|
||||
pag_boost_tune = 0x5;
|
||||
pgag_boost_tune = 0x33;
|
||||
padg_boost_tune = 0x77;
|
||||
mixg_boost_tune = 0x55;
|
||||
} else {
|
||||
bias = 0x25;
|
||||
cascbias = 0x20;
|
||||
|
||||
if ((pi->sh->chip ==
|
||||
BCMA_CHIP_ID_BCM43224)
|
||||
|| (pi->sh->chip ==
|
||||
BCMA_CHIP_ID_BCM43225)) {
|
||||
if (pi->sh->chippkg ==
|
||||
BCMA_PKG_ID_BCM43224_FAB_SMIC) {
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 ||
|
||||
pi->sh->chip == BCMA_CHIP_ID_BCM43225) &&
|
||||
pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC) {
|
||||
bias = 0x2a;
|
||||
cascbias = 0x38;
|
||||
}
|
||||
}
|
||||
|
||||
pag_boost_tune = 0x4;
|
||||
pgag_boost_tune = 0x03;
|
||||
padg_boost_tune = 0x77;
|
||||
mixg_boost_tune = 0x65;
|
||||
pag_boost_tune = 0x4;
|
||||
pgag_boost_tune = 0x03;
|
||||
padg_boost_tune = 0x77;
|
||||
mixg_boost_tune = 0x65;
|
||||
}
|
||||
|
||||
WRITE_RADIO_REG2(pi, RADIO_2056, TX, core,
|
||||
INTPAG_IMAIN_STAT, bias);
|
||||
@ -20863,11 +20891,10 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
|
||||
|
||||
cascbias = 0x30;
|
||||
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM43225)) {
|
||||
if (pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC)
|
||||
cascbias = 0x35;
|
||||
}
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 ||
|
||||
pi->sh->chip == BCMA_CHIP_ID_BCM43225) &&
|
||||
pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC)
|
||||
cascbias = 0x35;
|
||||
|
||||
pabias = (pi->phy_pabias == 0) ? 0x30 : pi->phy_pabias;
|
||||
|
||||
@ -21179,19 +21206,29 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
|
||||
} else if (NREV_GE(pi->pubpi.phy_rev, 7)) {
|
||||
if (val == 54)
|
||||
spuravoid = 1;
|
||||
} else {
|
||||
if (pi->nphy_aband_spurwar_en &&
|
||||
((val == 38) || (val == 102)
|
||||
|| (val == 118)))
|
||||
} else if (pi->nphy_aband_spurwar_en &&
|
||||
((val == 38) || (val == 102) || (val == 118))) {
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716)
|
||||
&& (pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) {
|
||||
spuravoid = 0;
|
||||
} else {
|
||||
spuravoid = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pi->phy_spuravoid == SPURAVOID_FORCEON)
|
||||
spuravoid = 1;
|
||||
|
||||
wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false);
|
||||
bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc, spuravoid);
|
||||
wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true);
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM43225)) {
|
||||
bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc,
|
||||
spuravoid);
|
||||
} else {
|
||||
wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false);
|
||||
bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc,
|
||||
spuravoid);
|
||||
wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true);
|
||||
}
|
||||
|
||||
if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM43225)) {
|
||||
@ -21210,7 +21247,9 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
|
||||
}
|
||||
}
|
||||
|
||||
wlapi_bmac_core_phypll_reset(pi->sh->physhim);
|
||||
if (!((pi->sh->chip == BCMA_CHIP_ID_BCM4716) ||
|
||||
(pi->sh->chip == BCMA_CHIP_ID_BCM47162)))
|
||||
wlapi_bmac_core_phypll_reset(pi->sh->physhim);
|
||||
|
||||
mod_phy_reg(pi, 0x01, (0x1 << 15),
|
||||
((spuravoid > 0) ? (0x1 << 15) : 0));
|
||||
@ -22172,9 +22211,15 @@ s16 wlc_phy_tempsense_nphy(struct brcms_phy *pi)
|
||||
wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x03, 16,
|
||||
&auxADC_rssi_ctrlH_save);
|
||||
|
||||
radio_temp[0] = (179 * (radio_temp[1] + radio_temp2[1])
|
||||
+ 82 * (auxADC_Vl) - 28861 +
|
||||
128) / 256;
|
||||
if (pi->sh->chip == BCMA_CHIP_ID_BCM5357) {
|
||||
radio_temp[0] = (193 * (radio_temp[1] + radio_temp2[1])
|
||||
+ 88 * (auxADC_Vl) - 27111 +
|
||||
128) / 256;
|
||||
} else {
|
||||
radio_temp[0] = (179 * (radio_temp[1] + radio_temp2[1])
|
||||
+ 82 * (auxADC_Vl) - 28861 +
|
||||
128) / 256;
|
||||
}
|
||||
|
||||
offset = (s16) pi->phy_tempsense_offset;
|
||||
|
||||
@ -24924,14 +24969,16 @@ wlc_phy_a2_nphy(struct brcms_phy *pi, struct nphy_ipa_txcalgains *txgains,
|
||||
if (txgains->useindex) {
|
||||
phy_a4 = 15 - ((txgains->index) >> 3);
|
||||
if (CHSPEC_IS2G(pi->radio_chanspec)) {
|
||||
if (NREV_GE(pi->pubpi.phy_rev, 6))
|
||||
phy_a5 = 0x00f7 | (phy_a4 << 8);
|
||||
|
||||
else
|
||||
if (NREV_IS(pi->pubpi.phy_rev, 5))
|
||||
if (NREV_GE(pi->pubpi.phy_rev, 6) &&
|
||||
pi->sh->chip == BCMA_CHIP_ID_BCM47162) {
|
||||
phy_a5 = 0x10f7 | (phy_a4 << 8);
|
||||
else
|
||||
} else if (NREV_GE(pi->pubpi.phy_rev, 6)) {
|
||||
phy_a5 = 0x00f7 | (phy_a4 << 8);
|
||||
} else if (NREV_IS(pi->pubpi.phy_rev, 5)) {
|
||||
phy_a5 = 0x10f7 | (phy_a4 << 8);
|
||||
} else {
|
||||
phy_a5 = 0x50f7 | (phy_a4 << 8);
|
||||
}
|
||||
} else {
|
||||
phy_a5 = 0x70f7 | (phy_a4 << 8);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user