Tested-by: Sedat Dilek <sedat.di...@gmail.com>
On Fri, Dec 3, 2010 at 5:03 AM, Nick Kossifidis <mickfl...@gmail.com> wrote: > * By skipping tx power table calibration we also skip setting > tx power table on hw. Make sure we always write tx power table > on hw since it gets cleared on reset. > > Signed-off-by: Nick Kossifidis <mickfl...@gmail.com> > > --- > drivers/net/wireless/ath/ath5k/phy.c | 33 +++++++++++++++++++++------------ > 1 files changed, 21 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath5k/phy.c > b/drivers/net/wireless/ath/ath5k/phy.c > index df5cd0f..f84afb4 100644 > --- a/drivers/net/wireless/ath/ath5k/phy.c > +++ b/drivers/net/wireless/ath/ath5k/phy.c > @@ -2742,10 +2742,12 @@ ath5k_combine_pwr_to_pdadc_curves(struct ath5k_hw *ah, > > /* Write PDADC values on hw */ > static void > -ath5k_setup_pwr_to_pdadc_table(struct ath5k_hw *ah, > - u8 pdcurves, u8 *pdg_to_idx) > +ath5k_setup_pwr_to_pdadc_table(struct ath5k_hw *ah, u8 ee_mode) > { > + struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; > u8 *pdadc_out = ah->ah_txpower.txp_pd_table; > + u8 *pdg_to_idx = ee->ee_pdc_to_idx[ee_mode]; > + u8 pdcurves = ee->ee_pd_gains[ee_mode]; > u32 reg; > u8 i; > > @@ -2992,7 +2994,7 @@ ath5k_setup_channel_powertable(struct ath5k_hw *ah, > ee->ee_pd_gains[ee_mode]); > > /* Write settings on hw */ > - ath5k_setup_pwr_to_pdadc_table(ah, pdg, pdg_curve_to_idx); > + ath5k_setup_pwr_to_pdadc_table(ah, ee_mode); > > /* Set txp.offset, note that table_min > * can be negative */ > @@ -3114,12 +3116,6 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct > ieee80211_channel *channel, > return -EINVAL; > } > > - /* Reset TX power values */ > - memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower)); > - ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER; > - ah->ah_txpower.txp_min_pwr = 0; > - ah->ah_txpower.txp_max_pwr = AR5K_TUNE_MAX_TXPOWER; > - > /* Initialize TX power table */ > switch (ah->ah_radio) { > case AR5K_RF5110: > @@ -3146,11 +3142,24 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct > ieee80211_channel *channel, > * so there is no need to recalculate the powertable, we 'll > * just use the cached one */ > if (!fast) { > + /* Reset TX power values */ > + memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower)); > + ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER; > + ah->ah_txpower.txp_min_pwr = 0; > + ah->ah_txpower.txp_max_pwr = AR5K_TUNE_MAX_TXPOWER; > + > + /* Calculate the powertable */ > ret = ath5k_setup_channel_powertable(ah, channel, > ee_mode, type); > - if (ret) > - return ret; > - } > + if (ret) > + return ret; > + /* Write cached table on hw */ > + } else if (type == AR5K_PWRTABLE_PWR_TO_PDADC) > + ath5k_setup_pwr_to_pdadc_table(ah, ee_mode); > + else > + ath5k_setup_pcdac_table(ah); > + > + > > /* Limit max power if we have a CTL available */ > ath5k_get_max_ctl_power(ah, channel); > _______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel