Commit d9891c78 authored by Felix Fietkau's avatar Felix Fietkau Committed by John W. Linville

ath9k_hw: keep calibrated noise floor values per channel

Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 35ecfe03
...@@ -346,34 +346,34 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan) ...@@ -346,34 +346,34 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan)
struct ieee80211_channel *c = chan->chan; struct ieee80211_channel *c = chan->chan;
struct ath9k_hw_cal_data *caldata = ah->caldata; struct ath9k_hw_cal_data *caldata = ah->caldata;
if (!caldata)
return false;
chan->channelFlags &= (~CHANNEL_CW_INT); chan->channelFlags &= (~CHANNEL_CW_INT);
if (REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF) { if (REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF) {
ath_print(common, ATH_DBG_CALIBRATE, ath_print(common, ATH_DBG_CALIBRATE,
"NF did not complete in calibration window\n"); "NF did not complete in calibration window\n");
nf = 0;
caldata->rawNoiseFloor = nf;
return false; return false;
} else { }
ath9k_hw_do_getnf(ah, nfarray);
ath9k_hw_nf_sanitize(ah, nfarray); ath9k_hw_do_getnf(ah, nfarray);
nf = nfarray[0]; ath9k_hw_nf_sanitize(ah, nfarray);
if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh) nf = nfarray[0];
&& nf > nfThresh) { if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh)
ath_print(common, ATH_DBG_CALIBRATE, && nf > nfThresh) {
"noise floor failed detected; " ath_print(common, ATH_DBG_CALIBRATE,
"detected %d, threshold %d\n", "noise floor failed detected; "
nf, nfThresh); "detected %d, threshold %d\n",
chan->channelFlags |= CHANNEL_CW_INT; nf, nfThresh);
} chan->channelFlags |= CHANNEL_CW_INT;
}
if (!caldata) {
chan->noisefloor = nf;
return false;
} }
h = caldata->nfCalHist; h = caldata->nfCalHist;
caldata->nfcal_pending = false; caldata->nfcal_pending = false;
ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray); ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray);
caldata->rawNoiseFloor = h[0].privNF; chan->noisefloor = h[0].privNF;
return true; return true;
} }
...@@ -401,10 +401,10 @@ void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah, ...@@ -401,10 +401,10 @@ void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah,
s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan) s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
{ {
if (!ah->caldata || !ah->caldata->rawNoiseFloor) if (!ah->curchan || !ah->curchan->noisefloor)
return ath9k_hw_get_default_nf(ah, chan); return ath9k_hw_get_default_nf(ah, chan);
return ah->caldata->rawNoiseFloor; return ah->curchan->noisefloor;
} }
EXPORT_SYMBOL(ath9k_hw_getchan_noise); EXPORT_SYMBOL(ath9k_hw_getchan_noise);
......
...@@ -1239,7 +1239,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, ...@@ -1239,7 +1239,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
return -EIO; return -EIO;
if (curchan && !ah->chip_fullsleep && ah->caldata) if (curchan && !ah->chip_fullsleep)
ath9k_hw_getnf(ah, curchan); ath9k_hw_getnf(ah, curchan);
ah->caldata = caldata; ah->caldata = caldata;
......
...@@ -342,7 +342,6 @@ struct ath9k_hw_cal_data { ...@@ -342,7 +342,6 @@ struct ath9k_hw_cal_data {
int32_t CalValid; int32_t CalValid;
int8_t iCoff; int8_t iCoff;
int8_t qCoff; int8_t qCoff;
int16_t rawNoiseFloor;
bool paprd_done; bool paprd_done;
bool nfcal_pending; bool nfcal_pending;
bool nfcal_interference; bool nfcal_interference;
...@@ -356,6 +355,7 @@ struct ath9k_channel { ...@@ -356,6 +355,7 @@ struct ath9k_channel {
u16 channel; u16 channel;
u32 channelFlags; u32 channelFlags;
u32 chanmode; u32 chanmode;
s16 noisefloor;
}; };
#define IS_CHAN_G(_c) ((((_c)->channelFlags & (CHANNEL_G)) == CHANNEL_G) || \ #define IS_CHAN_G(_c) ((((_c)->channelFlags & (CHANNEL_G)) == CHANNEL_G) || \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment