|
@@ -143,8 +143,10 @@ void ath9k_ps_restore(struct ath_softc *sc)
|
|
if (--sc->ps_usecount != 0)
|
|
if (--sc->ps_usecount != 0)
|
|
goto unlock;
|
|
goto unlock;
|
|
|
|
|
|
- if (sc->ps_enabled &&
|
|
|
|
- !(sc->ps_flags & (PS_WAIT_FOR_BEACON |
|
|
|
|
|
|
+ if (sc->ps_idle)
|
|
|
|
+ ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP);
|
|
|
|
+ else if (sc->ps_enabled &&
|
|
|
|
+ !(sc->ps_flags & (PS_WAIT_FOR_BEACON |
|
|
PS_WAIT_FOR_CAB |
|
|
PS_WAIT_FOR_CAB |
|
|
PS_WAIT_FOR_PSPOLL_DATA |
|
|
PS_WAIT_FOR_PSPOLL_DATA |
|
|
PS_WAIT_FOR_TX_ACK)))
|
|
PS_WAIT_FOR_TX_ACK)))
|
|
@@ -1528,6 +1530,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
|
|
spin_unlock_bh(&sc->wiphy_lock);
|
|
spin_unlock_bh(&sc->wiphy_lock);
|
|
|
|
|
|
if (enable_radio) {
|
|
if (enable_radio) {
|
|
|
|
+ sc->ps_idle = false;
|
|
ath_radio_enable(sc, hw);
|
|
ath_radio_enable(sc, hw);
|
|
ath_print(common, ATH_DBG_CONFIG,
|
|
ath_print(common, ATH_DBG_CONFIG,
|
|
"not-idle: enabling radio\n");
|
|
"not-idle: enabling radio\n");
|
|
@@ -1635,6 +1638,7 @@ skip_chan_change:
|
|
|
|
|
|
if (disable_radio) {
|
|
if (disable_radio) {
|
|
ath_print(common, ATH_DBG_CONFIG, "idle: disabling radio\n");
|
|
ath_print(common, ATH_DBG_CONFIG, "idle: disabling radio\n");
|
|
|
|
+ sc->ps_idle = true;
|
|
ath_radio_disable(sc, hw);
|
|
ath_radio_disable(sc, hw);
|
|
}
|
|
}
|
|
|
|
|