This patch doesn't apply to the .37 stable tree. If someone wants it applied there, please email the backport to [email protected]
thanks, greg k-h > commit: c7c1806098752c1f46943d8db2c69aff07f5d4bc > From: Rajkumar Manoharan <[email protected]> > Date: Thu, 27 Jan 2011 18:39:38 +0530 > Subject: [PATCH] ath9k: Fix power save usage count imbalance on deinit > > While unloading the driver, the ps_usecount is incremented > before configuring gpio registers in deinit_device. > But it is failed to restore the ps_usecount after that. > The problem is that the chip is forcibly moved to FULL SLEEP > by radio_disable when mac80211 is reporting as idle > though ps_usecount is not zero. > > This patch retores ps_usecount properly and ensures that > the chip is always moved to full sleep only if ps usage > count is zero which also helps in debugging deadbeef on > multivif case. And also fixes the following warning. > > ath: DMA failed to stop in 10 ms AR_CR=0xdeadbeef AR_DIAG_SW=0xdeadbeef > ath: Could not stop RX, we could be confusing the DMA engine when we > start RX up > ------------[ cut here ]------------ > WARNING: at drivers/net/wireless/ath/ath9k/recv.c:536 > ath_stoprecv+0xf4/0x100 [ath9k]() > > Cc: [email protected] > Cc: Paul Stewart <[email protected]> > Signed-off-by: Rajkumar Manoharan <[email protected]> > Signed-off-by: John W. Linville <[email protected]> > --- > drivers/net/wireless/ath/ath9k/init.c | 2 ++ > drivers/net/wireless/ath/ath9k/main.c | 2 -- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath9k/init.c > b/drivers/net/wireless/ath/ath9k/init.c > index b3254a3..087a6a9 100644 > --- a/drivers/net/wireless/ath/ath9k/init.c > +++ b/drivers/net/wireless/ath/ath9k/init.c > @@ -819,6 +819,8 @@ void ath9k_deinit_device(struct ath_softc *sc) > wiphy_rfkill_stop_polling(sc->hw->wiphy); > ath_deinit_leds(sc); > > + ath9k_ps_restore(sc); > + > for (i = 0; i < sc->num_sec_wiphy; i++) { > struct ath_wiphy *aphy = sc->sec_wiphy[i]; > if (aphy == NULL) > diff --git a/drivers/net/wireless/ath/ath9k/main.c > b/drivers/net/wireless/ath/ath9k/main.c > index ace9f06..568f7be 100644 > --- a/drivers/net/wireless/ath/ath9k/main.c > +++ b/drivers/net/wireless/ath/ath9k/main.c > @@ -953,8 +953,6 @@ void ath_radio_disable(struct ath_softc *sc, struct > ieee80211_hw *hw) > > spin_unlock_bh(&sc->sc_pcu_lock); > ath9k_ps_restore(sc); > - > - ath9k_setpower(sc, ATH9K_PM_FULL_SLEEP); > } > > int ath_reset(struct ath_softc *sc, bool retry_tx) > > _______________________________________________ > stable mailing list > [email protected] > http://linux.kernel.org/mailman/listinfo/stable _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
