ath5k: remove stop/start calls from within suspend/resume

mac80211 now takes down interfaces automatically during suspend
so doing it in the driver is unnecessary.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Bob Copeland 2009-01-19 11:20:54 -05:00 committed by John W. Linville
parent 665af4fc89
commit bb2becac91

View file

@ -347,9 +347,9 @@ static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp)
} }
/* Interrupt handling */ /* Interrupt handling */
static int ath5k_init(struct ath5k_softc *sc, bool is_resume); static int ath5k_init(struct ath5k_softc *sc);
static int ath5k_stop_locked(struct ath5k_softc *sc); static int ath5k_stop_locked(struct ath5k_softc *sc);
static int ath5k_stop_hw(struct ath5k_softc *sc, bool is_suspend); static int ath5k_stop_hw(struct ath5k_softc *sc);
static irqreturn_t ath5k_intr(int irq, void *dev_id); static irqreturn_t ath5k_intr(int irq, void *dev_id);
static void ath5k_tasklet_reset(unsigned long data); static void ath5k_tasklet_reset(unsigned long data);
@ -653,8 +653,6 @@ ath5k_pci_suspend(struct pci_dev *pdev, pm_message_t state)
ath5k_led_off(sc); ath5k_led_off(sc);
ath5k_stop_hw(sc, true);
free_irq(pdev->irq, sc); free_irq(pdev->irq, sc);
pci_save_state(pdev); pci_save_state(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
@ -689,14 +687,9 @@ ath5k_pci_resume(struct pci_dev *pdev)
goto err_no_irq; goto err_no_irq;
} }
err = ath5k_init(sc, true);
if (err)
goto err_irq;
ath5k_led_enable(sc); ath5k_led_enable(sc);
return 0; return 0;
err_irq:
free_irq(pdev->irq, sc);
err_no_irq: err_no_irq:
pci_disable_device(pdev); pci_disable_device(pdev);
return err; return err;
@ -2226,18 +2219,13 @@ ath5k_beacon_config(struct ath5k_softc *sc)
\********************/ \********************/
static int static int
ath5k_init(struct ath5k_softc *sc, bool is_resume) ath5k_init(struct ath5k_softc *sc)
{ {
struct ath5k_hw *ah = sc->ah; struct ath5k_hw *ah = sc->ah;
int ret, i; int ret, i;
mutex_lock(&sc->lock); mutex_lock(&sc->lock);
if (is_resume && !test_bit(ATH_STAT_STARTED, sc->status))
goto out_ok;
__clear_bit(ATH_STAT_STARTED, sc->status);
ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "mode %d\n", sc->opmode); ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "mode %d\n", sc->opmode);
/* /*
@ -2269,15 +2257,12 @@ ath5k_init(struct ath5k_softc *sc, bool is_resume)
for (i = 0; i < AR5K_KEYTABLE_SIZE; i++) for (i = 0; i < AR5K_KEYTABLE_SIZE; i++)
ath5k_hw_reset_key(ah, i); ath5k_hw_reset_key(ah, i);
__set_bit(ATH_STAT_STARTED, sc->status);
/* Set ack to be sent at low bit-rates */ /* Set ack to be sent at low bit-rates */
ath5k_hw_set_ack_bitrate_high(ah, false); ath5k_hw_set_ack_bitrate_high(ah, false);
mod_timer(&sc->calib_tim, round_jiffies(jiffies + mod_timer(&sc->calib_tim, round_jiffies(jiffies +
msecs_to_jiffies(ath5k_calinterval * 1000))); msecs_to_jiffies(ath5k_calinterval * 1000)));
out_ok:
ret = 0; ret = 0;
done: done:
mmiowb(); mmiowb();
@ -2332,7 +2317,7 @@ ath5k_stop_locked(struct ath5k_softc *sc)
* stop is preempted). * stop is preempted).
*/ */
static int static int
ath5k_stop_hw(struct ath5k_softc *sc, bool is_suspend) ath5k_stop_hw(struct ath5k_softc *sc)
{ {
int ret; int ret;
@ -2363,8 +2348,6 @@ ath5k_stop_hw(struct ath5k_softc *sc, bool is_suspend)
} }
} }
ath5k_txbuf_free(sc, sc->bbuf); ath5k_txbuf_free(sc, sc->bbuf);
if (!is_suspend)
__clear_bit(ATH_STAT_STARTED, sc->status);
mmiowb(); mmiowb();
mutex_unlock(&sc->lock); mutex_unlock(&sc->lock);
@ -2771,12 +2754,12 @@ ath5k_reset_wake(struct ath5k_softc *sc)
static int ath5k_start(struct ieee80211_hw *hw) static int ath5k_start(struct ieee80211_hw *hw)
{ {
return ath5k_init(hw->priv, false); return ath5k_init(hw->priv);
} }
static void ath5k_stop(struct ieee80211_hw *hw) static void ath5k_stop(struct ieee80211_hw *hw)
{ {
ath5k_stop_hw(hw->priv, false); ath5k_stop_hw(hw->priv);
} }
static int ath5k_add_interface(struct ieee80211_hw *hw, static int ath5k_add_interface(struct ieee80211_hw *hw,