b43: N-PHY: implement restoring general configuration
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>a Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
0914640072
commit
2f258b74d1
|
@ -995,6 +995,96 @@ static void b43_nphy_restore_rssi_cal(struct b43_wldev *dev)
|
|||
b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Y, rssical_phy_regs[11]);
|
||||
}
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/GetIpaGainTbl */
|
||||
static const u32 *b43_nphy_get_ipa_gain_table(struct b43_wldev *dev)
|
||||
{
|
||||
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
|
||||
if (dev->phy.rev >= 6) {
|
||||
/* TODO If the chip is 47162
|
||||
return txpwrctrl_tx_gain_ipa_rev5 */
|
||||
return txpwrctrl_tx_gain_ipa_rev6;
|
||||
} else if (dev->phy.rev >= 5) {
|
||||
return txpwrctrl_tx_gain_ipa_rev5;
|
||||
} else {
|
||||
return txpwrctrl_tx_gain_ipa;
|
||||
}
|
||||
} else {
|
||||
return txpwrctrl_tx_gain_ipa_5g;
|
||||
}
|
||||
}
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RestoreCal */
|
||||
static void b43_nphy_restore_cal(struct b43_wldev *dev)
|
||||
{
|
||||
struct b43_phy_n *nphy = dev->phy.n;
|
||||
|
||||
u16 coef[4];
|
||||
u16 *loft = NULL;
|
||||
u16 *table = NULL;
|
||||
|
||||
int i;
|
||||
u16 *txcal_radio_regs = NULL;
|
||||
struct b43_phy_n_iq_comp *rxcal_coeffs = NULL;
|
||||
|
||||
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
|
||||
if (nphy->iqcal_chanspec_2G == 0)
|
||||
return;
|
||||
table = nphy->cal_cache.txcal_coeffs_2G;
|
||||
loft = &nphy->cal_cache.txcal_coeffs_2G[5];
|
||||
} else {
|
||||
if (nphy->iqcal_chanspec_5G == 0)
|
||||
return;
|
||||
table = nphy->cal_cache.txcal_coeffs_5G;
|
||||
loft = &nphy->cal_cache.txcal_coeffs_5G[5];
|
||||
}
|
||||
|
||||
/* TODO: Write an N PHY table with ID 15, length 4, offset 80,
|
||||
width 16, and data from table */
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (dev->phy.rev >= 3)
|
||||
table[i] = coef[i];
|
||||
else
|
||||
coef[i] = 0;
|
||||
}
|
||||
|
||||
/* TODO: Write an N PHY table with ID 15, length 4, offset 88,
|
||||
width 16, and data from coef */
|
||||
/* TODO: Write an N PHY table with ID 15, length 2, offset 85,
|
||||
width 16 and data from loft */
|
||||
/* TODO: Write an N PHY table with ID 15, length 2, offset 93,
|
||||
width 16 and data from loft */
|
||||
|
||||
if (dev->phy.rev < 2)
|
||||
b43_nphy_tx_iq_workaround(dev);
|
||||
|
||||
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
|
||||
txcal_radio_regs = nphy->cal_cache.txcal_radio_regs_2G;
|
||||
rxcal_coeffs = &nphy->cal_cache.rxcal_coeffs_2G;
|
||||
} else {
|
||||
txcal_radio_regs = nphy->cal_cache.txcal_radio_regs_5G;
|
||||
rxcal_coeffs = &nphy->cal_cache.rxcal_coeffs_5G;
|
||||
}
|
||||
|
||||
/* TODO use some definitions */
|
||||
if (dev->phy.rev >= 3) {
|
||||
b43_radio_write(dev, 0x2021, txcal_radio_regs[0]);
|
||||
b43_radio_write(dev, 0x2022, txcal_radio_regs[1]);
|
||||
b43_radio_write(dev, 0x3021, txcal_radio_regs[2]);
|
||||
b43_radio_write(dev, 0x3022, txcal_radio_regs[3]);
|
||||
b43_radio_write(dev, 0x2023, txcal_radio_regs[4]);
|
||||
b43_radio_write(dev, 0x2024, txcal_radio_regs[5]);
|
||||
b43_radio_write(dev, 0x3023, txcal_radio_regs[6]);
|
||||
b43_radio_write(dev, 0x3024, txcal_radio_regs[7]);
|
||||
} else {
|
||||
b43_radio_write(dev, 0x8B, txcal_radio_regs[0]);
|
||||
b43_radio_write(dev, 0xBA, txcal_radio_regs[1]);
|
||||
b43_radio_write(dev, 0x8D, txcal_radio_regs[2]);
|
||||
b43_radio_write(dev, 0xBC, txcal_radio_regs[3]);
|
||||
}
|
||||
b43_nphy_rx_iq_coeffs(dev, true, rxcal_coeffs);
|
||||
}
|
||||
|
||||
/*
|
||||
* Init N-PHY
|
||||
* http://bcm-v4.sipsolutions.net/802.11/PHY/Init/N
|
||||
|
|
Loading…
Reference in New Issue