| 1 | --- a/drivers/net/wireless/ath/ath9k/main.c |
| 2 | +++ b/drivers/net/wireless/ath/ath9k/main.c |
| 3 | @@ -94,11 +94,13 @@ void ath9k_ps_wakeup(struct ath_softc *s |
| 4 | { |
| 5 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
| 6 | unsigned long flags; |
| 7 | + enum ath9k_power_mode power_mode; |
| 8 | |
| 9 | spin_lock_irqsave(&sc->sc_pm_lock, flags); |
| 10 | if (++sc->ps_usecount != 1) |
| 11 | goto unlock; |
| 12 | |
| 13 | + power_mode = sc->sc_ah->power_mode; |
| 14 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); |
| 15 | |
| 16 | /* |
| 17 | @@ -106,10 +108,12 @@ void ath9k_ps_wakeup(struct ath_softc *s |
| 18 | * useful data. Better clear them now so that they don't mess up |
| 19 | * survey data results. |
| 20 | */ |
| 21 | - spin_lock(&common->cc_lock); |
| 22 | - ath_hw_cycle_counters_update(common); |
| 23 | - memset(&common->cc_survey, 0, sizeof(common->cc_survey)); |
| 24 | - spin_unlock(&common->cc_lock); |
| 25 | + if (power_mode != ATH9K_PM_AWAKE) { |
| 26 | + spin_lock(&common->cc_lock); |
| 27 | + ath_hw_cycle_counters_update(common); |
| 28 | + memset(&common->cc_survey, 0, sizeof(common->cc_survey)); |
| 29 | + spin_unlock(&common->cc_lock); |
| 30 | + } |
| 31 | |
| 32 | unlock: |
| 33 | spin_unlock_irqrestore(&sc->sc_pm_lock, flags); |
| 34 | |