diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/mci.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/mci.c | 19 | 
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/mci.c b/drivers/net/wireless/ath/ath9k/mci.c index 9ee1f89f400..8f0e8d9c205 100644 --- a/drivers/net/wireless/ath/ath9k/mci.c +++ b/drivers/net/wireless/ath/ath9k/mci.c @@ -191,6 +191,23 @@ skip_tuning:  	ath9k_btcoex_timer_resume(sc);  } +static void ath_mci_wait_btcal_done(struct ath_softc *sc) +{ +	struct ath_hw *ah = sc->sc_ah; + +	/* Stop tx & rx */ +	ieee80211_stop_queues(sc->hw); +	ath_stoprecv(sc); +	ath_drain_all_txq(sc, false); + +	/* Wait for cal done */ +	ar9003_mci_start_reset(ah, ah->curchan); + +	/* Resume tx & rx */ +	ath_startrecv(sc); +	ieee80211_wake_queues(sc->hw); +} +  static void ath_mci_cal_msg(struct ath_softc *sc, u8 opcode, u8 *rx_payload)  {  	struct ath_hw *ah = sc->sc_ah; @@ -202,7 +219,7 @@ static void ath_mci_cal_msg(struct ath_softc *sc, u8 opcode, u8 *rx_payload)  	case MCI_GPM_BT_CAL_REQ:  		if (mci_hw->bt_state == MCI_BT_AWAKE) {  			mci_hw->bt_state = MCI_BT_CAL_START; -			ath9k_queue_reset(sc, RESET_TYPE_MCI); +			ath_mci_wait_btcal_done(sc);  		}  		ath_dbg(common, MCI, "MCI State : %d\n", mci_hw->bt_state);  		break;  |