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>
This commit is contained in:
parent
78b1775ba0
commit
750f32cf0a
1 changed files with 18 additions and 9 deletions
|
@ -216,8 +216,8 @@ static void ath_btcoex_period_timer(unsigned long data)
|
||||||
struct ath_softc *sc = (struct ath_softc *) data;
|
struct ath_softc *sc = (struct ath_softc *) data;
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
struct ath_btcoex *btcoex = &sc->btcoex;
|
struct ath_btcoex *btcoex = &sc->btcoex;
|
||||||
|
enum ath_stomp_type stomp_type;
|
||||||
u32 timer_period;
|
u32 timer_period;
|
||||||
bool is_btscan;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&sc->sc_pm_lock, 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);
|
spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
|
||||||
|
|
||||||
ath9k_ps_wakeup(sc);
|
ath9k_ps_wakeup(sc);
|
||||||
|
|
||||||
if (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI))
|
if (!(ah->caps.hw_caps & ATH9K_HW_CAP_MCI))
|
||||||
ath_detect_bt_priority(sc);
|
ath_detect_bt_priority(sc);
|
||||||
is_btscan = test_bit(BT_OP_SCAN, &btcoex->op_flags);
|
|
||||||
|
|
||||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_MCI)
|
if (ah->caps.hw_caps & ATH9K_HW_CAP_MCI)
|
||||||
ath_mci_ftp_adjust(sc);
|
ath_mci_ftp_adjust(sc);
|
||||||
|
|
||||||
spin_lock_bh(&btcoex->btcoex_lock);
|
spin_lock_bh(&btcoex->btcoex_lock);
|
||||||
|
|
||||||
ath9k_hw_btcoex_bt_stomp(ah, is_btscan ? ATH_BTCOEX_STOMP_ALL :
|
stomp_type = btcoex->bt_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);
|
ath9k_hw_btcoex_enable(ah);
|
||||||
|
|
||||||
spin_unlock_bh(&btcoex->btcoex_lock);
|
spin_unlock_bh(&btcoex->btcoex_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -252,17 +261,16 @@ static void ath_btcoex_period_timer(unsigned long data)
|
||||||
if (btcoex->hw_timer_enabled)
|
if (btcoex->hw_timer_enabled)
|
||||||
ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
|
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,
|
ath9k_gen_timer_start(ah, btcoex->no_stomp_timer, timer_period,
|
||||||
timer_period * 10);
|
timer_period * 10);
|
||||||
btcoex->hw_timer_enabled = true;
|
btcoex->hw_timer_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ath9k_ps_restore(sc);
|
ath9k_ps_restore(sc);
|
||||||
|
|
||||||
skip_hw_wakeup:
|
skip_hw_wakeup:
|
||||||
timer_period = btcoex->btcoex_period;
|
mod_timer(&btcoex->period_timer,
|
||||||
mod_timer(&btcoex->period_timer, jiffies + msecs_to_jiffies(timer_period));
|
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);
|
spin_lock_bh(&btcoex->btcoex_lock);
|
||||||
|
|
||||||
if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW ||
|
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);
|
ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_NONE);
|
||||||
else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
|
else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
|
||||||
ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_LOW);
|
ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_LOW);
|
||||||
|
|
Loading…
Reference in a new issue