diff options
author | Vasanthakumar Thiagarajan <vasanth@atheros.com> | 2010-12-06 07:27:49 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-12-07 16:34:57 -0500 |
commit | 47e84dfb411fcaa51e12d94ab82570ec3aa86e32 (patch) | |
tree | bf9bedb61b1e71de7e4c3a437b9a3ad380a7a27d | |
parent | 9936e65fae6d95c2acc2438c60a8f4908130530e (diff) |
ath9k_hw: Read and configure antenna diversity control for AR9485
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 24 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.h | 10 |
2 files changed, 30 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c index 819b0a6cb83e..45fe5c2ec3b9 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | |||
@@ -3034,6 +3034,8 @@ static u32 ath9k_hw_ar9300_get_eeprom(struct ath_hw *ah, | |||
3034 | return !!(pBase->featureEnable & BIT(5)); | 3034 | return !!(pBase->featureEnable & BIT(5)); |
3035 | case EEP_CHAIN_MASK_REDUCE: | 3035 | case EEP_CHAIN_MASK_REDUCE: |
3036 | return (pBase->miscConfiguration >> 0x3) & 0x1; | 3036 | return (pBase->miscConfiguration >> 0x3) & 0x1; |
3037 | case EEP_ANT_DIV_CTL1: | ||
3038 | return le32_to_cpu(eep->base_ext1.ant_div_control); | ||
3037 | default: | 3039 | default: |
3038 | return 0; | 3040 | return 0; |
3039 | } | 3041 | } |
@@ -3513,11 +3515,25 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz) | |||
3513 | value = ar9003_hw_ant_ctrl_chain_get(ah, 0, is2ghz); | 3515 | value = ar9003_hw_ant_ctrl_chain_get(ah, 0, is2ghz); |
3514 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_0, AR_SWITCH_TABLE_ALL, value); | 3516 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_0, AR_SWITCH_TABLE_ALL, value); |
3515 | 3517 | ||
3516 | value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz); | 3518 | if (!AR_SREV_9485(ah)) { |
3517 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_1, AR_SWITCH_TABLE_ALL, value); | 3519 | value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz); |
3520 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_1, AR_SWITCH_TABLE_ALL, | ||
3521 | value); | ||
3518 | 3522 | ||
3519 | value = ar9003_hw_ant_ctrl_chain_get(ah, 2, is2ghz); | 3523 | value = ar9003_hw_ant_ctrl_chain_get(ah, 2, is2ghz); |
3520 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_2, AR_SWITCH_TABLE_ALL, value); | 3524 | REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_2, AR_SWITCH_TABLE_ALL, |
3525 | value); | ||
3526 | } | ||
3527 | |||
3528 | if (AR_SREV_9485(ah)) { | ||
3529 | value = ath9k_hw_ar9300_get_eeprom(ah, EEP_ANT_DIV_CTL1); | ||
3530 | REG_RMW_FIELD(ah, AR_PHY_MC_GAIN_CTRL, AR_ANT_DIV_CTRL_ALL, | ||
3531 | value); | ||
3532 | REG_RMW_FIELD(ah, AR_PHY_MC_GAIN_CTRL, AR_ANT_DIV_ENABLE, | ||
3533 | value >> 6); | ||
3534 | REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT, AR_FAST_DIV_ENABLE, | ||
3535 | value >> 7); | ||
3536 | } | ||
3521 | } | 3537 | } |
3522 | 3538 | ||
3523 | static void ar9003_hw_drive_strength_apply(struct ath_hw *ah) | 3539 | static void ar9003_hw_drive_strength_apply(struct ath_hw *ah) |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h index b7720819872b..6e0d4adc1a6b 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h | |||
@@ -260,7 +260,13 @@ | |||
260 | #define AR_PHY_CCA_0 (AR_AGC_BASE + 0x1c) | 260 | #define AR_PHY_CCA_0 (AR_AGC_BASE + 0x1c) |
261 | #define AR_PHY_EXT_CCA0 (AR_AGC_BASE + 0x20) | 261 | #define AR_PHY_EXT_CCA0 (AR_AGC_BASE + 0x20) |
262 | #define AR_PHY_RESTART (AR_AGC_BASE + 0x24) | 262 | #define AR_PHY_RESTART (AR_AGC_BASE + 0x24) |
263 | |||
263 | #define AR_PHY_MC_GAIN_CTRL (AR_AGC_BASE + 0x28) | 264 | #define AR_PHY_MC_GAIN_CTRL (AR_AGC_BASE + 0x28) |
265 | #define AR_ANT_DIV_CTRL_ALL 0x7e000000 | ||
266 | #define AR_ANT_DIV_CTRL_ALL_S 25 | ||
267 | #define AR_ANT_DIV_ENABLE 0x1000000 | ||
268 | #define AR_ANT_DIV_ENABLE_S 24 | ||
269 | |||
264 | #define AR_PHY_EXTCHN_PWRTHR1 (AR_AGC_BASE + 0x2c) | 270 | #define AR_PHY_EXTCHN_PWRTHR1 (AR_AGC_BASE + 0x2c) |
265 | #define AR_PHY_EXT_CHN_WIN (AR_AGC_BASE + 0x30) | 271 | #define AR_PHY_EXT_CHN_WIN (AR_AGC_BASE + 0x30) |
266 | #define AR_PHY_20_40_DET_THR (AR_AGC_BASE + 0x34) | 272 | #define AR_PHY_20_40_DET_THR (AR_AGC_BASE + 0x34) |
@@ -271,7 +277,11 @@ | |||
271 | #define AR_PHY_RX_GAIN_BOUNDS_2 (AR_AGC_BASE + 0x48) | 277 | #define AR_PHY_RX_GAIN_BOUNDS_2 (AR_AGC_BASE + 0x48) |
272 | #define AR_PHY_RSSI_0 (AR_AGC_BASE + 0x180) | 278 | #define AR_PHY_RSSI_0 (AR_AGC_BASE + 0x180) |
273 | #define AR_PHY_SPUR_CCK_REP0 (AR_AGC_BASE + 0x184) | 279 | #define AR_PHY_SPUR_CCK_REP0 (AR_AGC_BASE + 0x184) |
280 | |||
274 | #define AR_PHY_CCK_DETECT (AR_AGC_BASE + 0x1c0) | 281 | #define AR_PHY_CCK_DETECT (AR_AGC_BASE + 0x1c0) |
282 | #define AR_FAST_DIV_ENABLE 0x2000 | ||
283 | #define AR_FAST_DIV_ENABLE_S 13 | ||
284 | |||
275 | #define AR_PHY_DAG_CTRLCCK (AR_AGC_BASE + 0x1c4) | 285 | #define AR_PHY_DAG_CTRLCCK (AR_AGC_BASE + 0x1c4) |
276 | #define AR_PHY_IQCORR_CTRL_CCK (AR_AGC_BASE + 0x1c8) | 286 | #define AR_PHY_IQCORR_CTRL_CCK (AR_AGC_BASE + 0x1c8) |
277 | 287 | ||