diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/main.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 22 | 
1 files changed, 9 insertions, 13 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index be30a9af152..dd91f8fdc01 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -182,7 +182,7 @@ static void ath_restart_work(struct ath_softc *sc)  	ath_start_ani(sc);  } -static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush) +static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx)  {  	struct ath_hw *ah = sc->sc_ah;  	bool ret = true; @@ -202,14 +202,6 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)  	if (!ath_drain_all_txq(sc, retry_tx))  		ret = false; -	if (!flush) { -		if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) -			ath_rx_tasklet(sc, 1, true); -		ath_rx_tasklet(sc, 1, false); -	} else { -		ath_flushrecv(sc); -	} -  	return ret;  } @@ -262,11 +254,11 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,  	struct ath_common *common = ath9k_hw_common(ah);  	struct ath9k_hw_cal_data *caldata = NULL;  	bool fastcc = true; -	bool flush = false;  	int r;  	__ath_cancel_work(sc); +	tasklet_disable(&sc->intr_tq);  	spin_lock_bh(&sc->sc_pcu_lock);  	if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) { @@ -276,11 +268,10 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,  	if (!hchan) {  		fastcc = false; -		flush = true;  		hchan = ah->curchan;  	} -	if (!ath_prepare_reset(sc, retry_tx, flush)) +	if (!ath_prepare_reset(sc, retry_tx))  		fastcc = false;  	ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n", @@ -302,6 +293,8 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,  out:  	spin_unlock_bh(&sc->sc_pcu_lock); +	tasklet_enable(&sc->intr_tq); +  	return r;  } @@ -804,7 +797,7 @@ static void ath9k_stop(struct ieee80211_hw *hw)  		ath9k_hw_cfg_gpio_input(ah, ah->led_pin);  	} -	ath_prepare_reset(sc, false, true); +	ath_prepare_reset(sc, false);  	if (sc->rx.frag) {  		dev_kfree_skb_any(sc->rx.frag); @@ -1833,6 +1826,9 @@ static u32 fill_chainmask(u32 cap, u32 new)  static bool validate_antenna_mask(struct ath_hw *ah, u32 val)  { +	if (AR_SREV_9300_20_OR_LATER(ah)) +		return true; +  	switch (val & 0x7) {  	case 0x1:  	case 0x3:  |