ath9k: optimize ath9k_ps_restore
ath_hw_cycle_counters_update only needs to be called if the power state changes. Most of the time this does not happen, even when ps_usecount goes down to 0. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
66ac69c8c3
commit
c6c539f023
1 changed files with 11 additions and 6 deletions
|
@ -111,23 +111,28 @@ void ath9k_ps_wakeup(struct ath_softc *sc)
|
||||||
void ath9k_ps_restore(struct ath_softc *sc)
|
void ath9k_ps_restore(struct ath_softc *sc)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||||
|
enum ath9k_power_mode mode;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&sc->sc_pm_lock, flags);
|
spin_lock_irqsave(&sc->sc_pm_lock, flags);
|
||||||
if (--sc->ps_usecount != 0)
|
if (--sc->ps_usecount != 0)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
spin_lock(&common->cc_lock);
|
|
||||||
ath_hw_cycle_counters_update(common);
|
|
||||||
spin_unlock(&common->cc_lock);
|
|
||||||
|
|
||||||
if (sc->ps_idle)
|
if (sc->ps_idle)
|
||||||
ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP);
|
mode = ATH9K_PM_FULL_SLEEP;
|
||||||
else if (sc->ps_enabled &&
|
else if (sc->ps_enabled &&
|
||||||
!(sc->ps_flags & (PS_WAIT_FOR_BEACON |
|
!(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)))
|
||||||
|
mode = ATH9K_PM_NETWORK_SLEEP;
|
||||||
|
else
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
spin_lock(&common->cc_lock);
|
||||||
|
ath_hw_cycle_counters_update(common);
|
||||||
|
spin_unlock(&common->cc_lock);
|
||||||
|
|
||||||
ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_NETWORK_SLEEP);
|
ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_NETWORK_SLEEP);
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
|
|
Loading…
Add table
Reference in a new issue