diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/init.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 36 | 
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index d4c909f8e47..e9711e2b48c 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c @@ -408,6 +408,7 @@ fail:  static int ath9k_init_btcoex(struct ath_softc *sc)  {  	struct ath_txq *txq; +	struct ath_hw *ah = sc->sc_ah;  	int r;  	switch (sc->sc_ah->btcoex_hw.scheme) { @@ -425,6 +426,37 @@ static int ath9k_init_btcoex(struct ath_softc *sc)  		ath9k_hw_init_btcoex_hw(sc->sc_ah, txq->axq_qnum);  		sc->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW;  		break; +	case ATH_BTCOEX_CFG_MCI: +		sc->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW; +		sc->btcoex.duty_cycle = ATH_BTCOEX_DEF_DUTY_CYCLE; +		INIT_LIST_HEAD(&sc->btcoex.mci.info); + +		r = ath_mci_setup(sc); +		if (r) +			return r; + +		if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_MCI) { +			ah->btcoex_hw.mci.ready = false; +			ah->btcoex_hw.mci.bt_state = 0; +			ah->btcoex_hw.mci.bt_ver_major = 3; +			ah->btcoex_hw.mci.bt_ver_minor = 0; +			ah->btcoex_hw.mci.bt_version_known = false; +			ah->btcoex_hw.mci.update_2g5g = true; +			ah->btcoex_hw.mci.is_2g = true; +			ah->btcoex_hw.mci.wlan_channels_update = false; +			ah->btcoex_hw.mci.wlan_channels[0] = 0x00000000; +			ah->btcoex_hw.mci.wlan_channels[1] = 0xffffffff; +			ah->btcoex_hw.mci.wlan_channels[2] = 0xffffffff; +			ah->btcoex_hw.mci.wlan_channels[3] = 0x7fffffff; +			ah->btcoex_hw.mci.query_bt = true; +			ah->btcoex_hw.mci.unhalt_bt_gpm = true; +			ah->btcoex_hw.mci.halted_bt_gpm = false; +			ah->btcoex_hw.mci.need_flush_btinfo = false; +			ah->btcoex_hw.mci.wlan_cal_seq = 0; +			ah->btcoex_hw.mci.wlan_cal_done = 0; +			ah->btcoex_hw.mci.config = 0x2201; +		} +		break;  	default:  		WARN_ON(1);  		break; @@ -695,6 +727,7 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)  		hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;  	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; +	hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;  	hw->queues = 4;  	hw->max_rates = 4; @@ -836,6 +869,9 @@ static void ath9k_deinit_softc(struct ath_softc *sc)  	    sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)  		ath_gen_timer_free(sc->sc_ah, sc->btcoex.no_stomp_timer); +	if (sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_MCI) +		ath_mci_cleanup(sc); +  	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)  		if (ATH_TXQ_SETUP(sc, i))  			ath_tx_cleanupq(sc, &sc->tx.txq[i]);  |