Commit 898d3c3b authored by Hauke Mehrtens's avatar Hauke Mehrtens Committed by John W. Linville

brcmsmac: use sprom from bcma

bcma now provides all sprom attributes needed by brcmsmac and also
parses them from the pci sprom ant otp.
Signed-off-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
Tested-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 2b2715b8
...@@ -564,6 +564,7 @@ static struct si_info *ai_doattach(struct si_info *sii, ...@@ -564,6 +564,7 @@ static struct si_info *ai_doattach(struct si_info *sii,
u32 w, savewin; u32 w, savewin;
struct bcma_device *cc; struct bcma_device *cc;
uint socitype; uint socitype;
struct ssb_sprom *sprom = &pbus->sprom;
savewin = 0; savewin = 0;
...@@ -617,7 +618,8 @@ static struct si_info *ai_doattach(struct si_info *sii, ...@@ -617,7 +618,8 @@ static struct si_info *ai_doattach(struct si_info *sii,
} }
/* setup the GPIO based LED powersave register */ /* setup the GPIO based LED powersave register */
w = getintvar(sih, BRCMS_SROM_LEDDC); w = (sprom->leddc_on_time << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) |
(sprom->leddc_off_time << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT);
if (w == 0) if (w == 0)
w = DEFAULT_GPIOTIMERVAL; w = DEFAULT_GPIOTIMERVAL;
ai_cc_reg(sih, offsetof(struct chipcregs, gpiotimerval), ai_cc_reg(sih, offsetof(struct chipcregs, gpiotimerval),
......
...@@ -108,7 +108,7 @@ brcms_c_antsel_init_cfg(struct antsel_info *asi, struct brcms_antselcfg *antsel, ...@@ -108,7 +108,7 @@ brcms_c_antsel_init_cfg(struct antsel_info *asi, struct brcms_antselcfg *antsel,
struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc)
{ {
struct antsel_info *asi; struct antsel_info *asi;
struct si_pub *sih = wlc->hw->sih; struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom;
asi = kzalloc(sizeof(struct antsel_info), GFP_ATOMIC); asi = kzalloc(sizeof(struct antsel_info), GFP_ATOMIC);
if (!asi) if (!asi)
...@@ -118,7 +118,7 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) ...@@ -118,7 +118,7 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc)
asi->pub = wlc->pub; asi->pub = wlc->pub;
asi->antsel_type = ANTSEL_NA; asi->antsel_type = ANTSEL_NA;
asi->antsel_avail = false; asi->antsel_avail = false;
asi->antsel_antswitch = (u8) getintvar(sih, BRCMS_SROM_ANTSWITCH); asi->antsel_antswitch = sprom->antswitch;
if ((asi->pub->sromrev >= 4) && (asi->antsel_antswitch != 0)) { if ((asi->pub->sromrev >= 4) && (asi->antsel_antswitch != 0)) {
switch (asi->antsel_antswitch) { switch (asi->antsel_antswitch) {
...@@ -128,12 +128,12 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) ...@@ -128,12 +128,12 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc)
/* 4321/2 board with 2x3 switch logic */ /* 4321/2 board with 2x3 switch logic */
asi->antsel_type = ANTSEL_2x3; asi->antsel_type = ANTSEL_2x3;
/* Antenna selection availability */ /* Antenna selection availability */
if (((u16) getintvar(sih, BRCMS_SROM_AA2G) == 7) || if ((sprom->ant_available_bg == 7) ||
((u16) getintvar(sih, BRCMS_SROM_AA5G) == 7)) { (sprom->ant_available_a == 7)) {
asi->antsel_avail = true; asi->antsel_avail = true;
} else if ( } else if (
(u16) getintvar(sih, BRCMS_SROM_AA2G) == 3 || sprom->ant_available_bg == 3 ||
(u16) getintvar(sih, BRCMS_SROM_AA5G) == 3) { sprom->ant_available_a == 3) {
asi->antsel_avail = false; asi->antsel_avail = false;
} else { } else {
asi->antsel_avail = false; asi->antsel_avail = false;
...@@ -146,8 +146,8 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc) ...@@ -146,8 +146,8 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc)
break; break;
} }
} else if ((asi->pub->sromrev == 4) && } else if ((asi->pub->sromrev == 4) &&
((u16) getintvar(sih, BRCMS_SROM_AA2G) == 7) && (sprom->ant_available_bg == 7) &&
((u16) getintvar(sih, BRCMS_SROM_AA5G) == 0)) { (sprom->ant_available_a == 0)) {
/* hack to match old 4321CB2 cards with 2of3 antenna switch */ /* hack to match old 4321CB2 cards with 2of3 antenna switch */
asi->antsel_type = ANTSEL_2x3; asi->antsel_type = ANTSEL_2x3;
asi->antsel_avail = true; asi->antsel_avail = true;
......
...@@ -1110,7 +1110,7 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc) ...@@ -1110,7 +1110,7 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc)
char country_abbrev[BRCM_CNTRY_BUF_SZ]; char country_abbrev[BRCM_CNTRY_BUF_SZ];
const struct country_info *country; const struct country_info *country;
struct brcms_pub *pub = wlc->pub; struct brcms_pub *pub = wlc->pub;
char *ccode; struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom;
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit); BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
...@@ -1122,9 +1122,8 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc) ...@@ -1122,9 +1122,8 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc)
wlc->cmi = wlc_cm; wlc->cmi = wlc_cm;
/* store the country code for passing up as a regulatory hint */ /* store the country code for passing up as a regulatory hint */
ccode = getvar(wlc->hw->sih, BRCMS_SROM_CCODE); if (sprom->alpha2 && brcms_c_country_valid(sprom->alpha2))
if (ccode && brcms_c_country_valid(ccode)) strncpy(wlc->pub->srom_ccode, sprom->alpha2, sizeof(sprom->alpha2));
strncpy(wlc->pub->srom_ccode, ccode, BRCM_CNTRY_BUF_SZ - 1);
/* /*
* internal country information which must match * internal country information which must match
......
...@@ -1882,27 +1882,20 @@ static bool brcms_c_validboardtype(struct brcms_hardware *wlc_hw) ...@@ -1882,27 +1882,20 @@ static bool brcms_c_validboardtype(struct brcms_hardware *wlc_hw)
return true; return true;
} }
static char *brcms_c_get_macaddr(struct brcms_hardware *wlc_hw) static void brcms_c_get_macaddr(struct brcms_hardware *wlc_hw, u8 etheraddr[ETH_ALEN])
{ {
enum brcms_srom_id var_id = BRCMS_SROM_MACADDR; struct ssb_sprom *sprom = &wlc_hw->d11core->bus->sprom;
char *macaddr;
/* If macaddr exists, use it (Sromrev4, CIS, ...). */ /* If macaddr exists, use it (Sromrev4, CIS, ...). */
macaddr = getvar(wlc_hw->sih, var_id); if (!is_zero_ether_addr(sprom->il0mac)) {
if (macaddr != NULL) memcpy(etheraddr, sprom->il0mac, 6);
return macaddr; return;
}
if (wlc_hw->_nbands > 1) if (wlc_hw->_nbands > 1)
var_id = BRCMS_SROM_ET1MACADDR; memcpy(etheraddr, sprom->et1mac, 6);
else else
var_id = BRCMS_SROM_IL0MACADDR; memcpy(etheraddr, sprom->il0mac, 6);
macaddr = getvar(wlc_hw->sih, var_id);
if (macaddr == NULL)
wiphy_err(wlc_hw->wlc->wiphy, "wl%d: wlc_get_macaddr: macaddr "
"getvar(%d) not found\n", wlc_hw->unit, var_id);
return macaddr;
} }
/* power both the pll and external oscillator on/off */ /* power both the pll and external oscillator on/off */
...@@ -4436,13 +4429,13 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, ...@@ -4436,13 +4429,13 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
uint unit, bool piomode) uint unit, bool piomode)
{ {
struct brcms_hardware *wlc_hw; struct brcms_hardware *wlc_hw;
char *macaddr = NULL;
uint err = 0; uint err = 0;
uint j; uint j;
bool wme = false; bool wme = false;
struct shared_phy_params sha_params; struct shared_phy_params sha_params;
struct wiphy *wiphy = wlc->wiphy; struct wiphy *wiphy = wlc->wiphy;
struct pci_dev *pcidev = core->bus->host_pci; struct pci_dev *pcidev = core->bus->host_pci;
struct ssb_sprom *sprom = &core->bus->sprom;
BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit, BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit,
pcidev->vendor, pcidev->vendor,
...@@ -4512,7 +4505,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, ...@@ -4512,7 +4505,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
} }
/* get the board rev, used just below */ /* get the board rev, used just below */
j = getintvar(wlc_hw->sih, BRCMS_SROM_BOARDREV); j = sprom->board_rev;
/* promote srom boardrev of 0xFF to 1 */ /* promote srom boardrev of 0xFF to 1 */
if (j == BOARDREV_PROMOTABLE) if (j == BOARDREV_PROMOTABLE)
j = BOARDREV_PROMOTED; j = BOARDREV_PROMOTED;
...@@ -4525,11 +4518,9 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, ...@@ -4525,11 +4518,9 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
err = 15; err = 15;
goto fail; goto fail;
} }
wlc_hw->sromrev = (u8) getintvar(wlc_hw->sih, BRCMS_SROM_REV); wlc_hw->sromrev = sprom->revision;
wlc_hw->boardflags = (u32) getintvar(wlc_hw->sih, wlc_hw->boardflags = sprom->boardflags_lo + (sprom->boardflags_hi << 16);
BRCMS_SROM_BOARDFLAGS); wlc_hw->boardflags2 = sprom->boardflags2_lo + (sprom->boardflags2_hi << 16);
wlc_hw->boardflags2 = (u32) getintvar(wlc_hw->sih,
BRCMS_SROM_BOARDFLAGS2);
if (wlc_hw->boardflags & BFL_NOPLLDOWN) if (wlc_hw->boardflags & BFL_NOPLLDOWN)
brcms_b_pllreq(wlc_hw, true, BRCMS_PLLREQ_SHARED); brcms_b_pllreq(wlc_hw, true, BRCMS_PLLREQ_SHARED);
...@@ -4702,25 +4693,18 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core, ...@@ -4702,25 +4693,18 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
*/ */
/* init etheraddr state variables */ /* init etheraddr state variables */
macaddr = brcms_c_get_macaddr(wlc_hw); brcms_c_get_macaddr(wlc_hw, wlc_hw->etheraddr);
if (macaddr == NULL) {
wiphy_err(wiphy, "wl%d: brcms_b_attach: macaddr not found\n", if (is_broadcast_ether_addr(wlc_hw->etheraddr) ||
unit);
err = 21;
goto fail;
}
if (!mac_pton(macaddr, wlc_hw->etheraddr) ||
is_broadcast_ether_addr(wlc_hw->etheraddr) ||
is_zero_ether_addr(wlc_hw->etheraddr)) { is_zero_ether_addr(wlc_hw->etheraddr)) {
wiphy_err(wiphy, "wl%d: brcms_b_attach: bad macaddr %s\n", wiphy_err(wiphy, "wl%d: brcms_b_attach: bad macaddr\n",
unit, macaddr); unit);
err = 22; err = 22;
goto fail; goto fail;
} }
BCMMSG(wlc->wiphy, "deviceid 0x%x nbands %d board 0x%x macaddr: %s\n", BCMMSG(wlc->wiphy, "deviceid 0x%x nbands %d board 0x%x\n",
wlc_hw->deviceid, wlc_hw->_nbands, ai_get_boardtype(wlc_hw->sih), wlc_hw->deviceid, wlc_hw->_nbands, ai_get_boardtype(wlc_hw->sih));
macaddr);
return err; return err;
...@@ -4770,16 +4754,16 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc) ...@@ -4770,16 +4754,16 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc)
int aa; int aa;
uint unit; uint unit;
int bandtype; int bandtype;
struct si_pub *sih = wlc->hw->sih; struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom;
unit = wlc->pub->unit; unit = wlc->pub->unit;
bandtype = wlc->band->bandtype; bandtype = wlc->band->bandtype;
/* get antennas available */ /* get antennas available */
if (bandtype == BRCM_BAND_5G) if (bandtype == BRCM_BAND_5G)
aa = (s8) getintvar(sih, BRCMS_SROM_AA5G); aa = sprom->ant_available_a;
else else
aa = (s8) getintvar(sih, BRCMS_SROM_AA2G); aa = sprom->ant_available_bg;
if ((aa < 1) || (aa > 15)) { if ((aa < 1) || (aa > 15)) {
wiphy_err(wlc->wiphy, "wl%d: %s: Invalid antennas available in" wiphy_err(wlc->wiphy, "wl%d: %s: Invalid antennas available in"
...@@ -4799,9 +4783,9 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc) ...@@ -4799,9 +4783,9 @@ static bool brcms_c_attach_stf_ant_init(struct brcms_c_info *wlc)
/* Compute Antenna Gain */ /* Compute Antenna Gain */
if (bandtype == BRCM_BAND_5G) if (bandtype == BRCM_BAND_5G)
wlc->band->antgain = (s8) getintvar(sih, BRCMS_SROM_AG1); wlc->band->antgain = sprom->antenna_gain.a1;
else else
wlc->band->antgain = (s8) getintvar(sih, BRCMS_SROM_AG0); wlc->band->antgain = sprom->antenna_gain.a0;
brcms_c_attach_antgain_init(wlc); brcms_c_attach_antgain_init(wlc);
......
...@@ -714,7 +714,10 @@ static void pcie_war_pci_setup(struct pcicore_info *pi) ...@@ -714,7 +714,10 @@ static void pcie_war_pci_setup(struct pcicore_info *pi)
void pcicore_attach(struct pcicore_info *pi, int state) void pcicore_attach(struct pcicore_info *pi, int state)
{ {
struct si_pub *sih = pi->sih; struct si_pub *sih = pi->sih;
u32 bfl2 = (u32)getintvar(sih, BRCMS_SROM_BOARDFLAGS2); struct ssb_sprom *sprom = &pi->core->bus->sprom;
u32 bfl2;
bfl2 = sprom->boardflags2_lo + (sprom->boardflags2_hi << 16);
/* Determine if this board needs override */ /* Determine if this board needs override */
if (PCIE_ASPM(sih)) { if (PCIE_ASPM(sih)) {
......
...@@ -4817,28 +4817,23 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4817,28 +4817,23 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
s8 txpwr = 0; s8 txpwr = 0;
int i; int i;
struct brcms_phy_lcnphy *pi_lcn = pi->u.pi_lcnphy; struct brcms_phy_lcnphy *pi_lcn = pi->u.pi_lcnphy;
struct phy_shim_info *shim = pi->sh->physhim; struct ssb_sprom *sprom = &pi->d11core->bus->sprom;
if (CHSPEC_IS2G(pi->radio_chanspec)) { if (CHSPEC_IS2G(pi->radio_chanspec)) {
u16 cckpo = 0; u16 cckpo = 0;
u32 offset_ofdm, offset_mcs; u32 offset_ofdm, offset_mcs;
pi_lcn->lcnphy_tr_isolation_mid = pi_lcn->lcnphy_tr_isolation_mid = sprom->fem.ghz2.tr_iso;
(u8)wlapi_getintvar(shim, BRCMS_SROM_TRISO2G);
pi_lcn->lcnphy_rx_power_offset = pi_lcn->lcnphy_rx_power_offset = sprom->rxpo2g;
(u8)wlapi_getintvar(shim, BRCMS_SROM_RXPO2G);
pi->txpa_2g[0] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B0); pi->txpa_2g[0] = sprom->pa0b0;
pi->txpa_2g[1] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B1); pi->txpa_2g[1] = sprom->pa0b1;
pi->txpa_2g[2] = (s16)wlapi_getintvar(shim, BRCMS_SROM_PA0B2); pi->txpa_2g[2] = sprom->pa0b2;
pi_lcn->lcnphy_rssi_vf = pi_lcn->lcnphy_rssi_vf = sprom->rssismf2g;
(u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISMF2G); pi_lcn->lcnphy_rssi_vc = sprom->rssismc2g;
pi_lcn->lcnphy_rssi_vc = pi_lcn->lcnphy_rssi_gs = sprom->rssisav2g;
(u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISMC2G);
pi_lcn->lcnphy_rssi_gs =
(u8)wlapi_getintvar(shim, BRCMS_SROM_RSSISAV2G);
pi_lcn->lcnphy_rssi_vf_lowtemp = pi_lcn->lcnphy_rssi_vf; pi_lcn->lcnphy_rssi_vf_lowtemp = pi_lcn->lcnphy_rssi_vf;
pi_lcn->lcnphy_rssi_vc_lowtemp = pi_lcn->lcnphy_rssi_vc; pi_lcn->lcnphy_rssi_vc_lowtemp = pi_lcn->lcnphy_rssi_vc;
...@@ -4848,7 +4843,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4848,7 +4843,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
pi_lcn->lcnphy_rssi_vc_hightemp = pi_lcn->lcnphy_rssi_vc; pi_lcn->lcnphy_rssi_vc_hightemp = pi_lcn->lcnphy_rssi_vc;
pi_lcn->lcnphy_rssi_gs_hightemp = pi_lcn->lcnphy_rssi_gs; pi_lcn->lcnphy_rssi_gs_hightemp = pi_lcn->lcnphy_rssi_gs;
txpwr = (s8)wlapi_getintvar(shim, BRCMS_SROM_MAXP2GA0); txpwr = sprom->core_pwr_info[0].maxpwr_2g;
pi->tx_srom_max_2g = txpwr; pi->tx_srom_max_2g = txpwr;
for (i = 0; i < PWRTBL_NUM_COEFF; i++) { for (i = 0; i < PWRTBL_NUM_COEFF; i++) {
...@@ -4856,8 +4851,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4856,8 +4851,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
pi->txpa_2g_high_temp[i] = pi->txpa_2g[i]; pi->txpa_2g_high_temp[i] = pi->txpa_2g[i];
} }
cckpo = (u16)wlapi_getintvar(shim, BRCMS_SROM_CCK2GPO); cckpo = sprom->cck2gpo;
offset_ofdm = (u32)wlapi_getintvar(shim, BRCMS_SROM_OFDM2GPO); offset_ofdm = sprom->ofdm2gpo;
if (cckpo) { if (cckpo) {
uint max_pwr_chan = txpwr; uint max_pwr_chan = txpwr;
...@@ -4876,7 +4871,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4876,7 +4871,7 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
} else { } else {
u8 opo = 0; u8 opo = 0;
opo = (u8)wlapi_getintvar(shim, BRCMS_SROM_OPO); opo = sprom->opo;
for (i = TXP_FIRST_CCK; i <= TXP_LAST_CCK; i++) for (i = TXP_FIRST_CCK; i <= TXP_LAST_CCK; i++)
pi->tx_srom_max_rate_2g[i] = txpwr; pi->tx_srom_max_rate_2g[i] = txpwr;
...@@ -4886,12 +4881,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4886,12 +4881,8 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
((offset_ofdm & 0xf) * 2); ((offset_ofdm & 0xf) * 2);
offset_ofdm >>= 4; offset_ofdm >>= 4;
} }
offset_mcs = offset_mcs = sprom->mcs2gpo[1] << 16;
wlapi_getintvar(shim, offset_mcs |= sprom->mcs2gpo[0];
BRCMS_SROM_MCS2GPO1) << 16;
offset_mcs |=
(u16) wlapi_getintvar(shim,
BRCMS_SROM_MCS2GPO0);
pi_lcn->lcnphy_mcs20_po = offset_mcs; pi_lcn->lcnphy_mcs20_po = offset_mcs;
for (i = TXP_FIRST_SISO_MCS_20; for (i = TXP_FIRST_SISO_MCS_20;
i <= TXP_LAST_SISO_MCS_20; i++) { i <= TXP_LAST_SISO_MCS_20; i++) {
...@@ -4901,25 +4892,17 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi) ...@@ -4901,25 +4892,17 @@ static bool wlc_phy_txpwr_srom_read_lcnphy(struct brcms_phy *pi)
} }
} }
pi_lcn->lcnphy_rawtempsense = pi_lcn->lcnphy_rawtempsense = sprom->rawtempsense;
(u16)wlapi_getintvar(shim, BRCMS_SROM_RAWTEMPSENSE); pi_lcn->lcnphy_measPower = sprom->measpower;
pi_lcn->lcnphy_measPower = pi_lcn->lcnphy_tempsense_slope = sprom->tempsense_slope;
(u8)wlapi_getintvar(shim, BRCMS_SROM_MEASPOWER); pi_lcn->lcnphy_hw_iqcal_en = sprom->hw_iqcal_en;
pi_lcn->lcnphy_tempsense_slope = pi_lcn->lcnphy_iqcal_swp_dis = sprom->iqcal_swp_dis;
(u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPSENSE_SLOPE); pi_lcn->lcnphy_tempcorrx = sprom->tempcorrx;
pi_lcn->lcnphy_hw_iqcal_en = pi_lcn->lcnphy_tempsense_option = sprom->tempsense_option;
(bool)wlapi_getintvar(shim, BRCMS_SROM_HW_IQCAL_EN); pi_lcn->lcnphy_freqoffset_corr = sprom->freqoffset_corr;
pi_lcn->lcnphy_iqcal_swp_dis = if (sprom->ant_available_bg > 1)
(bool)wlapi_getintvar(shim, BRCMS_SROM_IQCAL_SWP_DIS);
pi_lcn->lcnphy_tempcorrx =
(u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPCORRX);
pi_lcn->lcnphy_tempsense_option =
(u8)wlapi_getintvar(shim, BRCMS_SROM_TEMPSENSE_OPTION);
pi_lcn->lcnphy_freqoffset_corr =
(u8)wlapi_getintvar(shim, BRCMS_SROM_FREQOFFSET_CORR);
if ((u8)wlapi_getintvar(shim, BRCMS_SROM_AA2G) > 1)
wlc_phy_ant_rxdiv_set((struct brcms_phy_pub *) pi, wlc_phy_ant_rxdiv_set((struct brcms_phy_pub *) pi,
(u8) wlapi_getintvar(shim, BRCMS_SROM_AA2G)); sprom->ant_available_bg);
} }
pi_lcn->lcnphy_cck_dig_filt_type = -1; pi_lcn->lcnphy_cck_dig_filt_type = -1;
......
...@@ -370,9 +370,11 @@ void brcms_c_stf_phy_txant_upd(struct brcms_c_info *wlc) ...@@ -370,9 +370,11 @@ void brcms_c_stf_phy_txant_upd(struct brcms_c_info *wlc)
void brcms_c_stf_phy_chain_calc(struct brcms_c_info *wlc) void brcms_c_stf_phy_chain_calc(struct brcms_c_info *wlc)
{ {
struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom;
/* get available rx/tx chains */ /* get available rx/tx chains */
wlc->stf->hw_txchain = (u8) getintvar(wlc->hw->sih, BRCMS_SROM_TXCHAIN); wlc->stf->hw_txchain = sprom->txchain;
wlc->stf->hw_rxchain = (u8) getintvar(wlc->hw->sih, BRCMS_SROM_RXCHAIN); wlc->stf->hw_rxchain = sprom->rxchain;
/* these parameter are intended to be used for all PHY types */ /* these parameter are intended to be used for all PHY types */
if (wlc->stf->hw_txchain == 0 || wlc->stf->hw_txchain == 0xf) { if (wlc->stf->hw_txchain == 0 || wlc->stf->hw_txchain == 0xf) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment