8e104d9fee9eccf53da370e2b98bea9c52a5092c
[openwrt-10.03/.git] / package / mac80211 / patches / 531-ath9k_cur_txpower.patch
1 --- a/drivers/net/wireless/ath/ath9k/main.c
2 +++ b/drivers/net/wireless/ath/ath9k/main.c
3 @@ -1732,6 +1732,8 @@ static int ath9k_config(struct ieee80211
4                         return -EINVAL;
5                 }
6  
7 +               conf->cur_power_level = sc->curtxpow / 2;
8 +
9                 /*
10                  * The most recent snapshot of channel->noisefloor for the old
11                  * channel is only available after the hardware reset. Copy it to
12 @@ -1749,6 +1751,7 @@ static int ath9k_config(struct ieee80211
13                 ath9k_cmn_update_txpow(ah, sc->curtxpow,
14                                        sc->config.txpowlimit, &sc->curtxpow);
15                 ath9k_ps_restore(sc);
16 +               conf->cur_power_level = sc->curtxpow / 2;
17         }
18  
19         if (disable_radio) {
20 --- a/drivers/net/wireless/ath/ath9k/common.c
21 +++ b/drivers/net/wireless/ath/ath9k/common.c
22 @@ -161,10 +161,12 @@ EXPORT_SYMBOL(ath9k_cmn_count_streams);
23  void ath9k_cmn_update_txpow(struct ath_hw *ah, u16 cur_txpow,
24                             u16 new_txpow, u16 *txpower)
25  {
26 +       struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
27 +
28         if (cur_txpow != new_txpow) {
29                 ath9k_hw_set_txpowerlimit(ah, new_txpow, false);
30                 /* read back in case value is clamped */
31 -               *txpower = ath9k_hw_regulatory(ah)->power_limit;
32 +               *txpower = min_t(u16, reg->power_limit, reg->max_power_level);
33         }
34  }
35  EXPORT_SYMBOL(ath9k_cmn_update_txpow);