ath9k_hw: keep calibrated noise floor values per channel
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
35ecfe03d9
commit
d9891c7804
3 changed files with 22 additions and 22 deletions
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
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 {
|
||||||
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 {
|
||||||
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) || \
|
||||||
|
|
Loading…
Add table
Reference in a new issue