Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

ath9k_hw: keep calibrated noise floor values per channel

parent 35ecfe03
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -346,17 +346,13 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan)
	struct ieee80211_channel *c = chan->chan;
	struct ath9k_hw_cal_data *caldata = ah->caldata;

	if (!caldata)
		return false;

	chan->channelFlags &= (~CHANNEL_CW_INT);
	if (REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF) {
		ath_print(common, ATH_DBG_CALIBRATE,
			  "NF did not complete in calibration window\n");
		nf = 0;
		caldata->rawNoiseFloor = nf;
		return false;
	} else {
	}

	ath9k_hw_do_getnf(ah, nfarray);
	ath9k_hw_nf_sanitize(ah, nfarray);
	nf = nfarray[0];
@@ -368,12 +364,16 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan)
			  nf, nfThresh);
		chan->channelFlags |= CHANNEL_CW_INT;
	}

	if (!caldata) {
		chan->noisefloor = nf;
		return false;
	}

	h = caldata->nfCalHist;
	caldata->nfcal_pending = false;
	ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray);
	caldata->rawNoiseFloor = h[0].privNF;
	chan->noisefloor = h[0].privNF;
	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)
{
	if (!ah->caldata || !ah->caldata->rawNoiseFloor)
	if (!ah->curchan || !ah->curchan->noisefloor)
		return ath9k_hw_get_default_nf(ah, chan);

	return ah->caldata->rawNoiseFloor;
	return ah->curchan->noisefloor;
}
EXPORT_SYMBOL(ath9k_hw_getchan_noise);

+1 −1
Original line number Diff line number Diff line
@@ -1239,7 +1239,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
	if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
		return -EIO;

	if (curchan && !ah->chip_fullsleep && ah->caldata)
	if (curchan && !ah->chip_fullsleep)
		ath9k_hw_getnf(ah, curchan);

	ah->caldata = caldata;
+1 −1
Original line number Diff line number Diff line
@@ -342,7 +342,6 @@ struct ath9k_hw_cal_data {
	int32_t CalValid;
	int8_t iCoff;
	int8_t qCoff;
	int16_t rawNoiseFloor;
	bool paprd_done;
	bool nfcal_pending;
	bool nfcal_interference;
@@ -356,6 +355,7 @@ struct ath9k_channel {
	u16 channel;
	u32 channelFlags;
	u32 chanmode;
	s16 noisefloor;
};

#define IS_CHAN_G(_c) ((((_c)->channelFlags & (CHANNEL_G)) == CHANNEL_G) || \