--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1736,6 +1736,8 @@ static int ath9k_config(struct ieee80211
+@@ -1653,6 +1653,8 @@ int ath9k_config(struct ieee80211_hw *hw
return -EINVAL;
}
/*
* The most recent snapshot of channel->noisefloor for the old
* channel is only available after the hardware reset. Copy it to
-@@ -1753,6 +1755,7 @@ static int ath9k_config(struct ieee80211
+@@ -1667,6 +1669,7 @@ int ath9k_config(struct ieee80211_hw *hw
+ sc->config.txpowlimit = 2 * conf->power_level;
ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow);
- ath9k_ps_restore(sc);
+ conf->cur_power_level = sc->curtxpow / 2;
}
- if (disable_radio) {
---- a/drivers/net/wireless/ath/ath9k/common.c
-+++ b/drivers/net/wireless/ath/ath9k/common.c
-@@ -161,10 +161,12 @@ EXPORT_SYMBOL(ath9k_cmn_count_streams);
- void ath9k_cmn_update_txpow(struct ath_hw *ah, u16 cur_txpow,
- u16 new_txpow, u16 *txpower)
- {
-+ struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
-+
- if (cur_txpow != new_txpow) {
- ath9k_hw_set_txpowerlimit(ah, new_txpow, false);
- /* read back in case value is clamped */
-- *txpower = ath9k_hw_regulatory(ah)->power_limit;
-+ *txpower = min_t(u16, reg->power_limit, reg->max_power_level);
- }
- }
- EXPORT_SYMBOL(ath9k_cmn_update_txpow);
+ mutex_unlock(&sc->mutex);