forked from Minki/linux
ath9k_hw: do not run NF and periodic calibration at the same time
It can cause inconsistent calibration results or in some cases turn the radio deaf. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7b8aaead95
commit
6339244b3b
@ -660,27 +660,26 @@ static void ar9002_hw_olc_temp_compensation(struct ath_hw *ah)
|
||||
static int ar9002_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
|
||||
u8 rxchainmask, bool longcal)
|
||||
{
|
||||
bool iscaldone = true;
|
||||
struct ath9k_cal_list *currCal = ah->cal_list_curr;
|
||||
bool nfcal, nfcal_pending = false;
|
||||
bool nfcal, nfcal_pending = false, percal_pending;
|
||||
int ret;
|
||||
|
||||
nfcal = !!(REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF);
|
||||
if (ah->caldata)
|
||||
nfcal_pending = test_bit(NFCAL_PENDING, &ah->caldata->cal_flags);
|
||||
|
||||
if (currCal && !nfcal &&
|
||||
(currCal->calState == CAL_RUNNING ||
|
||||
currCal->calState == CAL_WAITING)) {
|
||||
iscaldone = ar9002_hw_per_calibration(ah, chan,
|
||||
rxchainmask, currCal);
|
||||
if (iscaldone) {
|
||||
ah->cal_list_curr = currCal = currCal->calNext;
|
||||
percal_pending = (currCal &&
|
||||
(currCal->calState == CAL_RUNNING ||
|
||||
currCal->calState == CAL_WAITING));
|
||||
|
||||
if (currCal->calState == CAL_WAITING) {
|
||||
iscaldone = false;
|
||||
ath9k_hw_reset_calibration(ah, currCal);
|
||||
}
|
||||
if (percal_pending && !nfcal) {
|
||||
if (!ar9002_hw_per_calibration(ah, chan, rxchainmask, currCal))
|
||||
return 0;
|
||||
|
||||
ah->cal_list_curr = currCal = currCal->calNext;
|
||||
if (currCal->calState == CAL_WAITING) {
|
||||
ath9k_hw_reset_calibration(ah, currCal);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -710,7 +709,7 @@ static int ar9002_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
|
||||
}
|
||||
}
|
||||
|
||||
return iscaldone;
|
||||
return !percal_pending;
|
||||
}
|
||||
|
||||
/* Carrier leakage Calibration fix */
|
||||
|
Loading…
Reference in New Issue
Block a user