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>
This commit is contained in:
committed by
John W. Linville
parent
39d5b2c83c
commit
0ca74027ac
@ -1781,6 +1781,37 @@ ath5k_hw_set_fast_div(struct ath5k_hw *ah, u8 ee_mode, bool enable)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ath5k_hw_set_antenna_switch(struct ath5k_hw *ah, u8 ee_mode)
|
||||
{
|
||||
u8 ant0, ant1;
|
||||
|
||||
/*
|
||||
* In case a fixed antenna was set as default
|
||||
* use the same switch table twice.
|
||||
*/
|
||||
if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_A)
|
||||
ant0 = ant1 = AR5K_ANT_SWTABLE_A;
|
||||
else if (ah->ah_ant_mode == AR5K_ANTMODE_FIXED_B)
|
||||
ant0 = ant1 = AR5K_ANT_SWTABLE_B;
|
||||
else {
|
||||
ant0 = AR5K_ANT_SWTABLE_A;
|
||||
ant1 = AR5K_ANT_SWTABLE_B;
|
||||
}
|
||||
|
||||
/* Set antenna idle switch table */
|
||||
AR5K_REG_WRITE_BITS(ah, AR5K_PHY_ANT_CTL,
|
||||
AR5K_PHY_ANT_CTL_SWTABLE_IDLE,
|
||||
(ah->ah_ant_ctl[ee_mode][AR5K_ANT_CTL] |
|
||||
AR5K_PHY_ANT_CTL_TXRX_EN));
|
||||
|
||||
/* Set antenna switch tables */
|
||||
ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant0],
|
||||
AR5K_PHY_ANT_SWITCH_TABLE_0);
|
||||
ath5k_hw_reg_write(ah, ah->ah_ant_ctl[ee_mode][ant1],
|
||||
AR5K_PHY_ANT_SWITCH_TABLE_1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set antenna operating mode
|
||||
*/
|
||||
@ -1900,6 +1931,7 @@ ath5k_hw_set_antenna_mode(struct ath5k_hw *ah, u8 ant_mode)
|
||||
if (sta_id1)
|
||||
AR5K_REG_ENABLE_BITS(ah, AR5K_STA_ID1, sta_id1);
|
||||
|
||||
ath5k_hw_set_antenna_switch(ah, ee_mode);
|
||||
/* Note: set diversity before default antenna
|
||||
* because it won't work correctly */
|
||||
ath5k_hw_set_fast_div(ah, ee_mode, fast_div);
|
||||
|
Reference in New Issue
Block a user