diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2013-09-02 04:29:01 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-09-26 15:13:28 -0400 |
commit | c946868228685b66ed41a8526ba0b6c9875622c8 (patch) | |
tree | 7ba8447a8c844643700e81ab713a0c571cbdfdfc /drivers/net | |
parent | 7e12d6a496fefb202ea2bfbbcab7426b9bd77d5b (diff) |
ath9k: Fix antenna diversity init for AR9565
Program the HW registers (AR_PHY_CCK_DETECT, AR_PHY_MC_GAIN_CTRL)
with the correct values for AR9565 to allow LNA combining.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.c | 17 |
2 files changed, 28 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c index 6af2d738a39e..5982256078d8 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | |||
@@ -3659,9 +3659,23 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz) | |||
3659 | if (AR_SREV_9565(ah)) { | 3659 | if (AR_SREV_9565(ah)) { |
3660 | if (common->bt_ant_diversity) { | 3660 | if (common->bt_ant_diversity) { |
3661 | regval |= (1 << AR_PHY_ANT_SW_RX_PROT_S); | 3661 | regval |= (1 << AR_PHY_ANT_SW_RX_PROT_S); |
3662 | |||
3663 | REG_SET_BIT(ah, AR_PHY_RESTART, | ||
3664 | AR_PHY_RESTART_ENABLE_DIV_M2FLAG); | ||
3665 | |||
3666 | /* Force WLAN LNA diversity ON */ | ||
3667 | REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, | ||
3668 | AR_BTCOEX_WL_LNADIV_FORCE_ON); | ||
3662 | } else { | 3669 | } else { |
3663 | regval &= ~(1 << AR_PHY_ANT_DIV_LNADIV_S); | 3670 | regval &= ~(1 << AR_PHY_ANT_DIV_LNADIV_S); |
3664 | regval &= ~(1 << AR_PHY_ANT_SW_RX_PROT_S); | 3671 | regval &= ~(1 << AR_PHY_ANT_SW_RX_PROT_S); |
3672 | |||
3673 | REG_CLR_BIT(ah, AR_PHY_MC_GAIN_CTRL, | ||
3674 | (1 << AR_PHY_ANT_SW_RX_PROT_S)); | ||
3675 | |||
3676 | /* Force WLAN LNA diversity OFF */ | ||
3677 | REG_CLR_BIT(ah, AR_BTCOEX_WL_LNADIV, | ||
3678 | AR_BTCOEX_WL_LNADIV_FORCE_ON); | ||
3665 | } | 3679 | } |
3666 | } | 3680 | } |
3667 | 3681 | ||
@@ -3672,7 +3686,8 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz) | |||
3672 | regval &= (~AR_FAST_DIV_ENABLE); | 3686 | regval &= (~AR_FAST_DIV_ENABLE); |
3673 | regval |= ((value >> 7) & 0x1) << AR_FAST_DIV_ENABLE_S; | 3687 | regval |= ((value >> 7) & 0x1) << AR_FAST_DIV_ENABLE_S; |
3674 | 3688 | ||
3675 | if (AR_SREV_9485(ah) && common->bt_ant_diversity) | 3689 | if ((AR_SREV_9485(ah) || AR_SREV_9565(ah)) |
3690 | && common->bt_ant_diversity) | ||
3676 | regval |= AR_FAST_DIV_ENABLE; | 3691 | regval |= AR_FAST_DIV_ENABLE; |
3677 | 3692 | ||
3678 | REG_WRITE(ah, AR_PHY_CCK_DETECT, regval); | 3693 | REG_WRITE(ah, AR_PHY_CCK_DETECT, regval); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index e897648d3233..9ca9b2cd9cb6 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
@@ -1489,17 +1489,24 @@ static void ar9003_hw_set_bt_ant_diversity(struct ath_hw *ah, bool enable) | |||
1489 | } else if (AR_SREV_9565(ah)) { | 1489 | } else if (AR_SREV_9565(ah)) { |
1490 | if (enable) { | 1490 | if (enable) { |
1491 | REG_SET_BIT(ah, AR_PHY_MC_GAIN_CTRL, | 1491 | REG_SET_BIT(ah, AR_PHY_MC_GAIN_CTRL, |
1492 | AR_ANT_DIV_ENABLE); | ||
1493 | REG_SET_BIT(ah, AR_PHY_MC_GAIN_CTRL, | ||
1492 | (1 << AR_PHY_ANT_SW_RX_PROT_S)); | 1494 | (1 << AR_PHY_ANT_SW_RX_PROT_S)); |
1493 | if (ah->curchan && IS_CHAN_2GHZ(ah->curchan)) | 1495 | REG_SET_BIT(ah, AR_PHY_CCK_DETECT, |
1494 | REG_SET_BIT(ah, AR_PHY_RESTART, | 1496 | AR_FAST_DIV_ENABLE); |
1495 | AR_PHY_RESTART_ENABLE_DIV_M2FLAG); | 1497 | REG_SET_BIT(ah, AR_PHY_RESTART, |
1498 | AR_PHY_RESTART_ENABLE_DIV_M2FLAG); | ||
1496 | REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, | 1499 | REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, |
1497 | AR_BTCOEX_WL_LNADIV_FORCE_ON); | 1500 | AR_BTCOEX_WL_LNADIV_FORCE_ON); |
1498 | } else { | 1501 | } else { |
1499 | REG_CLR_BIT(ah, AR_PHY_MC_GAIN_CTRL, AR_ANT_DIV_ENABLE); | 1502 | REG_CLR_BIT(ah, AR_PHY_MC_GAIN_CTRL, |
1503 | AR_ANT_DIV_ENABLE); | ||
1500 | REG_CLR_BIT(ah, AR_PHY_MC_GAIN_CTRL, | 1504 | REG_CLR_BIT(ah, AR_PHY_MC_GAIN_CTRL, |
1501 | (1 << AR_PHY_ANT_SW_RX_PROT_S)); | 1505 | (1 << AR_PHY_ANT_SW_RX_PROT_S)); |
1502 | REG_CLR_BIT(ah, AR_PHY_CCK_DETECT, AR_FAST_DIV_ENABLE); | 1506 | REG_CLR_BIT(ah, AR_PHY_CCK_DETECT, |
1507 | AR_FAST_DIV_ENABLE); | ||
1508 | REG_CLR_BIT(ah, AR_PHY_RESTART, | ||
1509 | AR_PHY_RESTART_ENABLE_DIV_M2FLAG); | ||
1503 | REG_CLR_BIT(ah, AR_BTCOEX_WL_LNADIV, | 1510 | REG_CLR_BIT(ah, AR_BTCOEX_WL_LNADIV, |
1504 | AR_BTCOEX_WL_LNADIV_FORCE_ON); | 1511 | AR_BTCOEX_WL_LNADIV_FORCE_ON); |
1505 | 1512 | ||