Skip to content

Commit

Permalink
ath9k: Handle full sleep in ps_restore.
Browse files Browse the repository at this point in the history
IDLE PS (Full Sleep) doesn't work when ifconfig up
is done during Idle unassociated state.
Fix this by restoring FULL SLEEP in ps_restore if CONF_IDLE
is set.

Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Vivek Natarajan authored and John W. Linville committed Jan 29, 2010
1 parent f276586 commit 1dbfd9d
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
1 change: 1 addition & 0 deletions drivers/net/wireless/ath/ath9k/ath9k.h
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,7 @@ struct ath_softc {
u8 nbcnvifs;
u16 nvifs;
bool ps_enabled;
bool ps_idle;
unsigned long ps_usecount;
enum ath9k_int imask;

Expand Down
8 changes: 6 additions & 2 deletions drivers/net/wireless/ath/ath9k/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,10 @@ void ath9k_ps_restore(struct ath_softc *sc)
if (--sc->ps_usecount != 0)
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_PSPOLL_DATA |
PS_WAIT_FOR_TX_ACK)))
Expand Down Expand Up @@ -1528,6 +1530,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
spin_unlock_bh(&sc->wiphy_lock);

if (enable_radio) {
sc->ps_idle = false;
ath_radio_enable(sc, hw);
ath_print(common, ATH_DBG_CONFIG,
"not-idle: enabling radio\n");
Expand Down Expand Up @@ -1635,6 +1638,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)

if (disable_radio) {
ath_print(common, ATH_DBG_CONFIG, "idle: disabling radio\n");
sc->ps_idle = true;
ath_radio_disable(sc, hw);
}

Expand Down

0 comments on commit 1dbfd9d

Please sign in to comment.