ath9k: restore power mode on error path
authorGabor Juhos <juhosg@openwrt.org>
Mon, 15 Jun 2009 15:49:09 +0000 (17:49 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 15 Jun 2009 19:05:58 +0000 (15:05 -0400)
The ath9k_ps_{wakeup,restore} calls must be in balance.

Changes-licensed-under: ISC
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/main.c

index 91c00486b2ac1f322d192be5439b35c87fe9beae..9f49a3251d4d4055a921bb32e6bc0f522caaf939 100644 (file)
@@ -296,7 +296,7 @@ int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
                        "reset status %d\n",
                        channel->center_freq, r);
                spin_unlock_bh(&sc->sc_resetlock);
-               return r;
+               goto ps_restore;
        }
        spin_unlock_bh(&sc->sc_resetlock);
 
@@ -305,14 +305,17 @@ int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
        if (ath_startrecv(sc) != 0) {
                DPRINTF(sc, ATH_DBG_FATAL,
                        "Unable to restart recv logic\n");
-               return -EIO;
+               r = -EIO;
+               goto ps_restore;
        }
 
        ath_cache_conf_rate(sc, &hw->conf);
        ath_update_txpow(sc);
        ath9k_hw_set_interrupts(ah, sc->imask);
+
+ ps_restore:
        ath9k_ps_restore(sc);
-       return 0;
+       return r;
 }
 
 /*