aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2013-09-02 04:29:01 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-09-26 15:13:28 -0400
commitc946868228685b66ed41a8526ba0b6c9875622c8 (patch)
tree7ba8447a8c844643700e81ab713a0c571cbdfdfc /drivers/net
parent7e12d6a496fefb202ea2bfbbcab7426b9bd77d5b (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.c17
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_phy.c17
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