diff options
author | Bruno Randolf <br1@einfach.org> | 2010-06-07 00:11:30 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-08 09:31:20 -0400 |
commit | 0ca74027ac709f99aae1805e593c95843dd18234 (patch) | |
tree | 282f5e8e943632a202e64bc3a60351a45f2679a4 /drivers/net/wireless/ath/ath5k/reset.c | |
parent | 39d5b2c83ca8904b6826a0713263a4e5a9c0730a (diff) |
ath5k: new function for setting the antenna switch table
Collect all pieces concering the antenna switch table into one function.
Previously it was split up between ath5k_hw_reset() and
ath5k_hw_commit_eeprom_settings().
Also we need to set the antenna switch table when ath5k_hw_set_antenna_mode()
is called manually (by "iw phy0 antenna set", for example).
I'm not sure if we need to set the switchtable at the same place in
ath5k_hw_reset() as it was before - it is set later thru
ath5k_hw_set_antenna_mode() anyways - but i leave it there to avoid
problems(?).
Plus print switchtable registers in the debugfs file.
Signed-off-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath5k/reset.c')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/reset.c | 33 |
1 files changed, 6 insertions, 27 deletions
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c index c17c84e93561..d561f7cb56cb 100644 --- a/drivers/net/wireless/ath/ath5k/reset.c +++ b/drivers/net/wireless/ath/ath5k/reset.c | |||
@@ -729,7 +729,7 @@ static void ath5k_hw_tweak_initval_settings(struct ath5k_hw *ah, | |||
729 | } | 729 | } |
730 | 730 | ||
731 | static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah, | 731 | static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah, |
732 | struct ieee80211_channel *channel, u8 *ant, u8 ee_mode) | 732 | struct ieee80211_channel *channel, u8 ee_mode) |
733 | { | 733 | { |
734 | struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; | 734 | struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; |
735 | s16 cck_ofdm_pwr_delta; | 735 | s16 cck_ofdm_pwr_delta; |
@@ -763,17 +763,9 @@ static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah, | |||
763 | ee->ee_cck_ofdm_gain_delta; | 763 | ee->ee_cck_ofdm_gain_delta; |
764 | } | 764 | } |
765 | 765 | ||
766 | /* Set antenna idle switch table */ | 766 | /* XXX: necessary here? is called from ath5k_hw_set_antenna_mode() |
767 | AR5K_REG_WRITE_BITS(ah, AR5K_PHY_ANT_CTL, | 767 | * too */ |
768 | AR5K_PHY_ANT_CTL_SWTABLE_IDLE, | 768 | ath5k_hw_set_antenna_switch(ah, ee_mode); |
769 | (ah->ah_ant_ctl[ee_mode][0] | | ||
770 | AR5K_PHY_ANT_CTL_TXRX_EN)); | ||
771 | |||
772 | /* Set antenna switch tables */ | ||
773 | ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant[0]], | ||
774 | AR5K_PHY_ANT_SWITCH_TABLE_0); | ||
775 | ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant[1]], | ||
776 | AR5K_PHY_ANT_SWITCH_TABLE_1); | ||
777 | 769 | ||
778 | /* Noise floor threshold */ | 770 | /* Noise floor threshold */ |
779 | ath5k_hw_reg_write(ah, | 771 | ath5k_hw_reg_write(ah, |
@@ -887,7 +879,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode, | |||
887 | struct ath_common *common = ath5k_hw_common(ah); | 879 | struct ath_common *common = ath5k_hw_common(ah); |
888 | u32 s_seq[10], s_ant, s_led[3], staid1_flags, tsf_up, tsf_lo; | 880 | u32 s_seq[10], s_ant, s_led[3], staid1_flags, tsf_up, tsf_lo; |
889 | u32 phy_tst1; | 881 | u32 phy_tst1; |
890 | u8 mode, freq, ee_mode, ant[2]; | 882 | u8 mode, freq, ee_mode; |
891 | int i, ret; | 883 | int i, ret; |
892 | 884 | ||
893 | s_ant = 0; | 885 | s_ant = 0; |
@@ -1110,21 +1102,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode, | |||
1110 | AR5K_TXCFG_B_MODE); | 1102 | AR5K_TXCFG_B_MODE); |
1111 | } | 1103 | } |
1112 | 1104 | ||
1113 | /* | ||
1114 | * In case a fixed antenna was set as default | ||
1115 | * use the same switch table twice. | ||
1116 | */ | ||
1117 | if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_A) | ||
1118 | ant[0] = ant[1] = AR5K_ANT_SWTABLE_A; | ||
1119 | else if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_B) | ||
1120 | ant[0] = ant[1] = AR5K_ANT_SWTABLE_B; | ||
1121 | else { | ||
1122 | ant[0] = AR5K_ANT_SWTABLE_A; | ||
1123 | ant[1] = AR5K_ANT_SWTABLE_B; | ||
1124 | } | ||
1125 | |||
1126 | /* Commit values from EEPROM */ | 1105 | /* Commit values from EEPROM */ |
1127 | ath5k_hw_commit_eeprom_settings(ah, channel, ant, ee_mode); | 1106 | ath5k_hw_commit_eeprom_settings(ah, channel, ee_mode); |
1128 | 1107 | ||
1129 | } else { | 1108 | } else { |
1130 | /* | 1109 | /* |