diff options
| author | Sujith Manoharan <c_manoha@qti.qualcomm.com> | 2012-09-30 09:03:37 +0530 | 
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2012-10-19 15:53:01 -0400 | 
| commit | 750f32cf0a6e2a4d798e09da4079ede7d1721e54 (patch) | |
| tree | e5b65d21d6513dd798564597114ed3ccb017e646 /drivers/net/wireless/ath/ath9k/gpio.c | |
| parent | 78b1775ba03c2edcc8d765dd53a7e171b18e79ac (diff) | |
ath9k: Fix BT_OP_SCAN usage
BT_OP_SCAN is applicable only for pre-MCI WLAN/BT combo chips
and using it for MCI-based cards is incorrect. Fix this by
cleaning up its usage.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/gpio.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/gpio.c | 27 | 
1 files changed, 18 insertions, 9 deletions
| diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c index 334c98d5f047..bf4fb7db15eb 100644 --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c @@ -216,8 +216,8 @@ static void ath_btcoex_period_timer(unsigned long data)  	struct ath_softc *sc = (struct ath_softc *) data;  	struct ath_hw *ah = sc->sc_ah;  	struct ath_btcoex *btcoex = &sc->btcoex; +	enum ath_stomp_type stomp_type;  	u32 timer_period; -	bool is_btscan;  	unsigned long flags;  	spin_lock_irqsave(&sc->sc_pm_lock, flags); @@ -228,19 +228,28 @@ static void ath_btcoex_period_timer(unsigned long data)  	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);  	ath9k_ps_wakeup(sc); +  	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI))  		ath_detect_bt_priority(sc); -	is_btscan = test_bit(BT_OP_SCAN, &btcoex->op_flags);  	if (ah->caps.hw_caps & ATH9K_HW_CAP_MCI)  		ath_mci_ftp_adjust(sc);  	spin_lock_bh(&btcoex->btcoex_lock); -	ath9k_hw_btcoex_bt_stomp(ah, is_btscan ? ATH_BTCOEX_STOMP_ALL : -			      btcoex->bt_stomp_type); +	stomp_type = btcoex->bt_stomp_type; +	timer_period = btcoex->btcoex_no_stomp; + +	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI)) { +		if (test_bit(BT_OP_SCAN, &btcoex->op_flags)) { +			stomp_type = ATH_BTCOEX_STOMP_ALL; +			timer_period = btcoex->btscan_no_stomp; +		} +	} +	ath9k_hw_btcoex_bt_stomp(ah, stomp_type);  	ath9k_hw_btcoex_enable(ah); +  	spin_unlock_bh(&btcoex->btcoex_lock);  	/* @@ -252,17 +261,16 @@ static void ath_btcoex_period_timer(unsigned long data)  		if (btcoex->hw_timer_enabled)  			ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer); -		timer_period = is_btscan ? btcoex->btscan_no_stomp : -					   btcoex->btcoex_no_stomp;  		ath9k_gen_timer_start(ah, btcoex->no_stomp_timer, timer_period,  				      timer_period * 10);  		btcoex->hw_timer_enabled = true;  	}  	ath9k_ps_restore(sc); +  skip_hw_wakeup: -	timer_period = btcoex->btcoex_period; -	mod_timer(&btcoex->period_timer, jiffies + msecs_to_jiffies(timer_period)); +	mod_timer(&btcoex->period_timer, +		  jiffies + msecs_to_jiffies(btcoex->btcoex_period));  }  /* @@ -282,7 +290,8 @@ static void ath_btcoex_no_stomp_timer(void *arg)  	spin_lock_bh(&btcoex->btcoex_lock);  	if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || -	    test_bit(BT_OP_SCAN, &btcoex->op_flags)) +	    (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI) && +	     test_bit(BT_OP_SCAN, &btcoex->op_flags)))  		ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_NONE);  	 else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)  		ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_LOW); | 
