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/phy.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/phy.c')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/phy.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c index 0f3b9beca2c1..73c4fcd142bb 100644 --- a/drivers/net/wireless/ath/ath5k/phy.c +++ b/drivers/net/wireless/ath/ath5k/phy.c | |||
@@ -1781,6 +1781,37 @@ ath5k_hw_set_fast_div(struct ath5k_hw *ah, u8 ee_mode, bool enable) | |||
1781 | } | 1781 | } |
1782 | } | 1782 | } |
1783 | 1783 | ||
1784 | void | ||
1785 | ath5k_hw_set_antenna_switch(struct ath5k_hw *ah, u8 ee_mode) | ||
1786 | { | ||
1787 | u8 ant0, ant1; | ||
1788 | |||
1789 | /* | ||
1790 | * In case a fixed antenna was set as default | ||
1791 | * use the same switch table twice. | ||
1792 | */ | ||
1793 | if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_A) | ||
1794 | ant0 = ant1 = AR5K_ANT_SWTABLE_A; | ||
1795 | else if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_B) | ||
1796 | ant0 = ant1 = AR5K_ANT_SWTABLE_B; | ||
1797 | else { | ||
1798 | ant0 = AR5K_ANT_SWTABLE_A; | ||
1799 | ant1 = AR5K_ANT_SWTABLE_B; | ||
1800 | } | ||
1801 | |||
1802 | /* Set antenna idle switch table */ | ||
1803 | AR5K_REG_WRITE_BITS(ah, AR5K_PHY_ANT_CTL, | ||
1804 | AR5K_PHY_ANT_CTL_SWTABLE_IDLE, | ||
1805 | (ah->ah_ant_ctl[ee_mode][AR5K_ANT_CTL] | | ||
1806 | AR5K_PHY_ANT_CTL_TXRX_EN)); | ||
1807 | |||
1808 | /* Set antenna switch tables */ | ||
1809 | ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant0], | ||
1810 | AR5K_PHY_ANT_SWITCH_TABLE_0); | ||
1811 | ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant1], | ||
1812 | AR5K_PHY_ANT_SWITCH_TABLE_1); | ||
1813 | } | ||
1814 | |||
1784 | /* | 1815 | /* |
1785 | * Set antenna operating mode | 1816 | * Set antenna operating mode |
1786 | */ | 1817 | */ |
@@ -1900,6 +1931,7 @@ ath5k_hw_set_antenna_mode(struct ath5k_hw *ah, u8 ant_mode) | |||
1900 | if (sta_id1) | 1931 | if (sta_id1) |
1901 | AR5K_REG_ENABLE_BITS(ah, AR5K_STA_ID1, sta_id1); | 1932 | AR5K_REG_ENABLE_BITS(ah, AR5K_STA_ID1, sta_id1); |
1902 | 1933 | ||
1934 | ath5k_hw_set_antenna_switch(ah, ee_mode); | ||
1903 | /* Note: set diversity before default antenna | 1935 | /* Note: set diversity before default antenna |
1904 | * because it won't work correctly */ | 1936 | * because it won't work correctly */ |
1905 | ath5k_hw_set_fast_div(ah, ee_mode, fast_div); | 1937 | ath5k_hw_set_fast_div(ah, ee_mode, fast_div); |