ath9k_hw: Assign default xlna config for AR9485
PATCH 1/3 ath9k_hw: Assign default xlna config for AR9485
From: Sujith Manoharan <[email protected]>
For AR9485 boards with XLNA, the default gpio config is not set correctly, fix this.
--- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 8 ++++++-- drivers/net/wireless/ath/ath9k/ar9003_phy.h | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +6 -2
@@ -3563,14 +3563,18 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz) {struct ath9k_hw_capabilities *pCap = &ah->caps;int chain; -u32 regval; +u32 regval, value;static const u32 switch_chain_reg[AR9300_MAX_CHAINS ] = {AR_PHY_SWITCH_CHAIN_0 ,AR_PHY_SWITCH_CHAIN_1 ,AR_PHY_SWITCH_CHAIN_2 , }; -u32 value =ar9003_hw_ant_ctrl_common_get (ah, is2ghz); +if (AR_SREV_9485 (ah) && (ar9003_hw_get_rx_gain_idx (ah) ==0 )) +ath9k_hw_cfg_output (ah,AR9300_EXT_LNA_CTL_GPIO_AR9485 , +AR_GPIO_OUTPUT_MUX_AS_PCIE_ATTENTION_LED ); + + value =ar9003_hw_ant_ctrl_common_get (ah, is2ghz);if (AR_SREV_9462 (ah) ||AR_SREV_9565 (ah)) { REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
drivers/net/wireless/ath/ath9k/ar9003_phy.h +2 -0
@@ -351,6 +351,8 @@#define AR_PHY_CCA_NOM_VAL_9330_2GHZ -118 +#define AR9300_EXT_LNA_CTL_GPIO_AR9485 9 +/* * AGC Field Definitions */
Signature · 1 line
1.8.3
PATCH 2/3 ath9k: Fix noisefloor calibration
From: Sujith Manoharan <[email protected]>
The commits,
"ath9k: Fix regression in channelwidth switch at the same channel" "ath9k: Fix invalid noisefloor reading due to channel update"
attempted to fix noisefloor calibration when a channel switch happens due to HT20/HT40 bandwidth change. This is causing invalid readings resulting in messages like:
"ath: phy16: NF[0] (-45) > MAX (-95), correcting to MAX".
This results in an incorrect noise being used initially for reporting the signal level of received packets, until NF calibration is done and the history buffer is updated via the ANI timer, which happens much later.
When a bandwidth change happens, it is appropriate to reset the internal history data for the channel. Do this correctly in the reset() routine by checking the "chanmode" variable.
--- drivers/net/wireless/ath/ath9k/hw.c | 3 ++- drivers/net/wireless/ath/ath9k/main.c | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-)
drivers/net/wireless/ath/ath9k/hw.c +2 -1
@@ -1870,7 +1870,8 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, ah->caldata = caldata;if (caldata && (chan->channel != caldata->channel || - chan->channelFlags != caldata->channelFlags)) { + chan->channelFlags != caldata->channelFlags || + chan->chanmode != caldata->chanmode)) {/* Operating channel changed, reset channel calibration data */ memset (caldata,0 ,sizeof (*caldata));ath9k_init_nfcal_hist_buffer (ah, chan);
drivers/net/wireless/ath/ath9k/main.c +0 -7
@@ -1210,13 +1210,6 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)ath_update_survey_stats (sc);spin_unlock_irqrestore (&common->cc_lock, flags); -/* -* Preserve the current channel values, before updating -* the same channel -*/ -if (ah->curchan && (old_pos == pos)) -ath9k_hw_getnf (ah, ah->curchan); -ath9k_cmn_update_ichannel (&sc->sc_ah->channels[pos], curchan, channel_type);
Signature · 1 line
1.8.3
PATCH 3/3 ath9k: Do not assign noise for NULL caldata
In reply to Sujith ManoharanFrom: Sujith Manoharan <[email protected]>
ah->noise is maintained globally and not per-channel. This is updated in the reset() routine after the NF history has been filled for the *current channel*, just before switching to the new channel. There is no need to do it inside getnf(), since ah->noise must contain a value for the new channel.
--- drivers/net/wireless/ath/ath9k/calib.c | 1 - 1 file changed, 1 deletion(-)
drivers/net/wireless/ath/ath9k/calib.c +0 -1
@@ -387,7 +387,6 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan)if (!caldata) { chan->noisefloor = nf; - ah->noise =ath9k_hw_getchan_noise (ah, chan);return false; }
Signature · 1 line
1.8.3