diff options
author | Sujith Manoharan <c_manoha@qualcomm.com> | 2012-09-26 02:52:08 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-09-28 13:54:06 -0400 |
commit | 365d2ebcaba5f08590b8a988d137f7139a8163a5 (patch) | |
tree | 30580b799a6e2599f447b3fecc9ce87507b8a1cb /drivers/net/wireless | |
parent | 8b4509f642743e87f9a5c34bacb5d4b63ac730b4 (diff) |
ath9k: Fix chainmask selection for AR9462
Force chain 1 to be used for CCK rates since the target power
table stored in EEPROM is too high to transmit with both chains.
This is needed to avoid regulatory violation.
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')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 8e27f4fb21fe..dfe6a4707fd2 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -173,6 +173,8 @@ void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd, | |||
173 | 173 | ||
174 | #define ATH_AN_2_TID(_an, _tidno) (&(_an)->tid[(_tidno)]) | 174 | #define ATH_AN_2_TID(_an, _tidno) (&(_an)->tid[(_tidno)]) |
175 | 175 | ||
176 | #define IS_CCK_RATE(rate) ((rate >= 0x18) && (rate <= 0x1e)) | ||
177 | |||
176 | #define ATH_TX_COMPLETE_POLL_INT 1000 | 178 | #define ATH_TX_COMPLETE_POLL_INT 1000 |
177 | 179 | ||
178 | enum ATH_AGGR_STATUS { | 180 | enum ATH_AGGR_STATUS { |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index b088fa0eb022..36618e3a5e60 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1820,10 +1820,14 @@ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate) | |||
1820 | { | 1820 | { |
1821 | struct ath_hw *ah = sc->sc_ah; | 1821 | struct ath_hw *ah = sc->sc_ah; |
1822 | struct ath9k_channel *curchan = ah->curchan; | 1822 | struct ath9k_channel *curchan = ah->curchan; |
1823 | |||
1823 | if ((ah->caps.hw_caps & ATH9K_HW_CAP_APM) && | 1824 | if ((ah->caps.hw_caps & ATH9K_HW_CAP_APM) && |
1824 | (curchan->channelFlags & CHANNEL_5GHZ) && | 1825 | (curchan->channelFlags & CHANNEL_5GHZ) && |
1825 | (chainmask == 0x7) && (rate < 0x90)) | 1826 | (chainmask == 0x7) && (rate < 0x90)) |
1826 | return 0x3; | 1827 | return 0x3; |
1828 | else if (AR_SREV_9462(ah) && ath9k_hw_btcoex_is_enabled(ah) && | ||
1829 | IS_CCK_RATE(rate)) | ||
1830 | return 0x2; | ||
1827 | else | 1831 | else |
1828 | return chainmask; | 1832 | return chainmask; |
1829 | } | 1833 | } |