ath9k: Reconfigure tx power on regulatory update
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>
Thu, 8 Dec 2011 18:29:25 +0000 (23:59 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 13 Dec 2011 20:31:01 +0000 (15:31 -0500)
Whenever the regulatory got updated by country IE for the world
roaming cards, need to reconfigure the tx power immediately to
increase the power level.

Reviewed-by: Sam Leffler <sleffler@google.com>
Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/init.c

index 41b72faca77fbca3d6ccd375c3e4a0bcc7678c22..c5df98139c4df7592d00d41958825d33b64220a0 100644 (file)
@@ -297,9 +297,22 @@ static int ath9k_reg_notifier(struct wiphy *wiphy,
 {
        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
        struct ath_softc *sc = hw->priv;
-       struct ath_regulatory *reg = ath9k_hw_regulatory(sc->sc_ah);
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
+       int ret;
+
+       ret = ath_reg_notifier_apply(wiphy, request, reg);
+
+       /* Set tx power */
+       if (ah->curchan) {
+               sc->config.txpowlimit = 2 * ah->curchan->chan->max_power;
+               ath9k_ps_wakeup(sc);
+               ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false);
+               sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
+               ath9k_ps_restore(sc);
+       }
 
-       return ath_reg_notifier_apply(wiphy, request, reg);
+       return ret;
 }
 
 /*