Commit 987af54f authored by Nick Kossifidis's avatar Nick Kossifidis Committed by John W. Linville

ath5k: Put power_level where it belongs and rename it

Put power_level to ah_txpower struct with the rest tx power infos and
also rename it to txp_requested to make more sense.

v2 make sure we don't memset it to zero on reset
Signed-off-by: default avatarNick Kossifidis <mickflemm@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 493ca5ef
...@@ -1331,7 +1331,6 @@ struct ath5k_hw { ...@@ -1331,7 +1331,6 @@ struct ath5k_hw {
unsigned int nexttbtt; /* next beacon time in TU */ unsigned int nexttbtt; /* next beacon time in TU */
struct ath5k_txq *cabq; /* content after beacon */ struct ath5k_txq *cabq; /* content after beacon */
int power_level; /* Requested tx power in dBm */
bool assoc; /* associate state */ bool assoc; /* associate state */
bool enable_beacon; /* true if beacons are on */ bool enable_beacon; /* true if beacons are on */
...@@ -1425,6 +1424,7 @@ struct ath5k_hw { ...@@ -1425,6 +1424,7 @@ struct ath5k_hw {
/* Value in dB units */ /* Value in dB units */
s16 txp_cck_ofdm_pwr_delta; s16 txp_cck_ofdm_pwr_delta;
bool txp_setup; bool txp_setup;
int txp_requested; /* Requested tx power in dBm */
} ah_txpower; } ah_txpower;
struct ath5k_nfcal_hist ah_nfcal_hist; struct ath5k_nfcal_hist ah_nfcal_hist;
......
...@@ -723,7 +723,7 @@ ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf, ...@@ -723,7 +723,7 @@ ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf,
ret = ah->ah_setup_tx_desc(ah, ds, pktlen, ret = ah->ah_setup_tx_desc(ah, ds, pktlen,
ieee80211_get_hdrlen_from_skb(skb), padsize, ieee80211_get_hdrlen_from_skb(skb), padsize,
get_hw_packet_type(skb), get_hw_packet_type(skb),
(ah->power_level * 2), (ah->ah_txpower.txp_requested * 2),
hw_rate, hw_rate,
info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags, info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,
cts_rate, duration); cts_rate, duration);
...@@ -1778,7 +1778,8 @@ ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf) ...@@ -1778,7 +1778,8 @@ ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf)
ds->ds_data = bf->skbaddr; ds->ds_data = bf->skbaddr;
ret = ah->ah_setup_tx_desc(ah, ds, skb->len, ret = ah->ah_setup_tx_desc(ah, ds, skb->len,
ieee80211_get_hdrlen_from_skb(skb), padsize, ieee80211_get_hdrlen_from_skb(skb), padsize,
AR5K_PKT_TYPE_BEACON, (ah->power_level * 2), AR5K_PKT_TYPE_BEACON,
(ah->ah_txpower.txp_requested * 2),
ieee80211_get_tx_rate(ah->hw, info)->hw_value, ieee80211_get_tx_rate(ah->hw, info)->hw_value,
1, AR5K_TXKEYIX_INVALID, 1, AR5K_TXKEYIX_INVALID,
antenna, flags, 0, 0); antenna, flags, 0, 0);
......
...@@ -207,8 +207,8 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed) ...@@ -207,8 +207,8 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
} }
if ((changed & IEEE80211_CONF_CHANGE_POWER) && if ((changed & IEEE80211_CONF_CHANGE_POWER) &&
(ah->power_level != conf->power_level)) { (ah->ah_txpower.txp_requested != conf->power_level)) {
ah->power_level = conf->power_level; ah->ah_txpower.txp_requested = conf->power_level;
/* Half dB steps */ /* Half dB steps */
ath5k_hw_set_txpower_limit(ah, (conf->power_level * 2)); ath5k_hw_set_txpower_limit(ah, (conf->power_level * 2));
......
...@@ -3652,10 +3652,17 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel, ...@@ -3652,10 +3652,17 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
if (!ah->ah_txpower.txp_setup || if (!ah->ah_txpower.txp_setup ||
(channel->hw_value != curr_channel->hw_value) || (channel->hw_value != curr_channel->hw_value) ||
(channel->center_freq != curr_channel->center_freq)) { (channel->center_freq != curr_channel->center_freq)) {
/* Reset TX power values */ /* Reset TX power values but preserve requested
* tx power from above */
int requested_txpower = ah->ah_txpower.txp_requested;
memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower)); memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower));
/* Restore TPC setting and requested tx power */
ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER; ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER;
ah->ah_txpower.txp_requested = requested_txpower;
/* Calculate the powertable */ /* Calculate the powertable */
ret = ath5k_setup_channel_powertable(ah, channel, ret = ath5k_setup_channel_powertable(ah, channel,
ee_mode, type); ee_mode, type);
...@@ -3802,8 +3809,9 @@ ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel, ...@@ -3802,8 +3809,9 @@ ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
* RF buffer settings on 5211/5212+ so that we * RF buffer settings on 5211/5212+ so that we
* properly set curve indices. * properly set curve indices.
*/ */
ret = ath5k_hw_txpower(ah, channel, ah->power_level ? ret = ath5k_hw_txpower(ah, channel, ah->ah_txpower.txp_requested ?
ah->power_level * 2 : AR5K_TUNE_MAX_TXPOWER); ah->ah_txpower.txp_requested * 2 :
AR5K_TUNE_MAX_TXPOWER);
if (ret) if (ret)
return ret; return ret;
......
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