Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ath9k: Mute BT properly

Set The BT/WLAN priority weights correctly and make sure
that MCI_LNA_TAKE is sent only for cards that share
PA/LNA.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

authored by

Sujith Manoharan and committed by
Kalle Valo
2f890cab ad1dc638

+15 -3
+10 -3
drivers/net/wireless/ath/ath9k/ar9003_mci.c
··· 771 771 772 772 static void ar9003_mci_mute_bt(struct ath_hw *ah) 773 773 { 774 + struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; 775 + 774 776 /* disable all MCI messages */ 775 777 REG_WRITE(ah, AR_MCI_MSG_ATTRIBUTES_TABLE, 0xffff0000); 778 + REG_WRITE(ah, AR_BTCOEX_WL_WEIGHTS0, 0xffffffff); 779 + REG_WRITE(ah, AR_BTCOEX_WL_WEIGHTS1, 0xffffffff); 780 + REG_WRITE(ah, AR_BTCOEX_WL_WEIGHTS2, 0xffffffff); 781 + REG_WRITE(ah, AR_BTCOEX_WL_WEIGHTS3, 0xffffffff); 776 782 REG_SET_BIT(ah, AR_MCI_TX_CTRL, AR_MCI_TX_CTRL_DISABLE_LNA_UPDATE); 777 783 778 784 /* wait pending HW messages to flush out */ ··· 789 783 * 1. reset not after resuming from full sleep 790 784 * 2. before reset MCI RX, to quiet BT and avoid MCI RX misalignment 791 785 */ 792 - ar9003_mci_send_lna_take(ah, true); 793 - 794 - udelay(5); 786 + if (MCI_ANT_ARCH_PA_LNA_SHARED(mci)) { 787 + ar9003_mci_send_lna_take(ah, true); 788 + udelay(5); 789 + } 795 790 796 791 ar9003_mci_send_sys_sleeping(ah, true); 797 792 }
+5
drivers/net/wireless/ath/ath9k/reg_mci.h
··· 212 212 #define AR_BTCOEX_CTRL_SPDT_POLARITY 0x80000000 213 213 #define AR_BTCOEX_CTRL_SPDT_POLARITY_S 31 214 214 215 + #define AR_BTCOEX_WL_WEIGHTS0 0x18b0 216 + #define AR_BTCOEX_WL_WEIGHTS1 0x18b4 217 + #define AR_BTCOEX_WL_WEIGHTS2 0x18b8 218 + #define AR_BTCOEX_WL_WEIGHTS3 0x18bc 219 + 215 220 #define AR_BTCOEX_MAX_TXPWR(_x) (0x18c0 + ((_x) << 2)) 216 221 #define AR_BTCOEX_WL_LNA 0x1940 217 222 #define AR_BTCOEX_RFGAIN_CTRL 0x1944