aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBruno Randolf <br1@einfach.org>2010-12-21 03:30:32 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-22 15:43:28 -0500
commit51f00622e5664ae77fd6c8670ddd402d9b77ccc8 (patch)
tree0bb0a32d948306e3b4f7b219ed270e05bf974b34 /drivers
parent56bd29d361a53f3bf6b815b5bf570a23bdc55b35 (diff)
ath5k: Track current TX power separately from max TX power
Add a new variable to keep track of the currently configured tx power. Before max_pwr was re-used for keeping the maximum allowed power as well as the current configuration. Doing a min() on it allows you to lower the txpower, but how would you be able to make it higher again? This patch fixes that by adding a new variable ah_cur_pwr which is used instead of txp_max_pwr to keep the current configuration. txp_max_pwr is used to check if we are within the limits. Another problem fixed by this patch is that it avoids setting a zero txpower when things are initialized first and the current power is not yet set. Signed-off-by: Bruno Randolf <br1@einfach.org> Acked-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath5k/ath5k.h1
-rw-r--r--drivers/net/wireless/ath/ath5k/phy.c7
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
index e6491bf359c0..342da280c987 100644
--- a/drivers/net/wireless/ath/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath/ath5k/ath5k.h
@@ -1107,6 +1107,7 @@ struct ath5k_hw {
1107 /* Values in 0.25dB units */ 1107 /* Values in 0.25dB units */
1108 s16 txp_min_pwr; 1108 s16 txp_min_pwr;
1109 s16 txp_max_pwr; 1109 s16 txp_max_pwr;
1110 s16 txp_cur_pwr;
1110 /* Values in 0.5dB units */ 1111 /* Values in 0.5dB units */
1111 s16 txp_offset; 1112 s16 txp_offset;
1112 s16 txp_ofdm; 1113 s16 txp_ofdm;
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
index 6f0cf3a09b2c..18c58cdfde46 100644
--- a/drivers/net/wireless/ath/ath5k/phy.c
+++ b/drivers/net/wireless/ath/ath5k/phy.c
@@ -3096,7 +3096,7 @@ ath5k_setup_rate_powertable(struct ath5k_hw *ah, u16 max_pwr,
3096 3096
3097 /* Min/max in 0.25dB units */ 3097 /* Min/max in 0.25dB units */
3098 ah->ah_txpower.txp_min_pwr = 2 * rates[7]; 3098 ah->ah_txpower.txp_min_pwr = 2 * rates[7];
3099 ah->ah_txpower.txp_max_pwr = 2 * rates[0]; 3099 ah->ah_txpower.txp_cur_pwr = 2 * rates[0];
3100 ah->ah_txpower.txp_ofdm = rates[7]; 3100 ah->ah_txpower.txp_ofdm = rates[7];
3101} 3101}
3102 3102
@@ -3150,8 +3150,6 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
3150 /* Reset TX power values */ 3150 /* Reset TX power values */
3151 memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower)); 3151 memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower));
3152 ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER; 3152 ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER;
3153 ah->ah_txpower.txp_min_pwr = 0;
3154 ah->ah_txpower.txp_max_pwr = AR5K_TUNE_MAX_TXPOWER;
3155 3153
3156 /* Calculate the powertable */ 3154 /* Calculate the powertable */
3157 ret = ath5k_setup_channel_powertable(ah, channel, 3155 ret = ath5k_setup_channel_powertable(ah, channel,
@@ -3290,7 +3288,8 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
3290 * properly set curve indices. 3288 * properly set curve indices.
3291 */ 3289 */
3292 ret = ath5k_hw_txpower(ah, channel, ee_mode, 3290 ret = ath5k_hw_txpower(ah, channel, ee_mode,
3293 ah->ah_txpower.txp_max_pwr / 2); 3291 ah->ah_txpower.txp_cur_pwr ?
3292 ah->ah_txpower.txp_cur_pwr / 2 : AR5K_TUNE_MAX_TXPOWER);
3294 if (ret) 3293 if (ret)
3295 return ret; 3294 return ret;
3296 3295