mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 19:41:54 +00:00
ath9k_hw: run ath9k_hw_9271_pa_cal() initial calibration
The PA calibration for ar9271 ath9k_hw_9271_pa_cal() can run during reset or initial calibration, update the PA calibration to account for that and initialize PA calibration variables for both conditions. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
b57df129aa
commit
6226811f4e
@ -813,7 +813,7 @@ static void ath9k_olc_temp_compensation(struct ath_hw *ah)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath9k_hw_9271_pa_cal(struct ath_hw *ah)
|
static void ath9k_hw_9271_pa_cal(struct ath_hw *ah, bool is_reset)
|
||||||
{
|
{
|
||||||
u32 regVal;
|
u32 regVal;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -889,10 +889,19 @@ static void ath9k_hw_9271_pa_cal(struct ath_hw *ah)
|
|||||||
REG_WRITE(ah, 0x7834, regVal);
|
REG_WRITE(ah, 0x7834, regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Empirical offset correction */
|
regVal = (regVal >>20) & 0x7f;
|
||||||
#if 0
|
|
||||||
REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0x20);
|
/* Update PA cal info */
|
||||||
#endif
|
if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
|
||||||
|
if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
|
||||||
|
ah->pacal_info.max_skipcount =
|
||||||
|
2 * ah->pacal_info.max_skipcount;
|
||||||
|
ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
|
||||||
|
} else {
|
||||||
|
ah->pacal_info.max_skipcount = 1;
|
||||||
|
ah->pacal_info.skipcount = 0;
|
||||||
|
ah->pacal_info.prev_offset = regVal;
|
||||||
|
}
|
||||||
|
|
||||||
regVal = REG_READ(ah, 0x7834);
|
regVal = REG_READ(ah, 0x7834);
|
||||||
regVal |= 0x1;
|
regVal |= 0x1;
|
||||||
@ -1043,7 +1052,7 @@ bool ath9k_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan,
|
|||||||
if (longcal) {
|
if (longcal) {
|
||||||
/* Do periodic PAOffset Cal */
|
/* Do periodic PAOffset Cal */
|
||||||
if (AR_SREV_9271(ah))
|
if (AR_SREV_9271(ah))
|
||||||
ath9k_hw_9271_pa_cal(ah);
|
ath9k_hw_9271_pa_cal(ah, false);
|
||||||
else if (AR_SREV_9285_11_OR_LATER(ah)) {
|
else if (AR_SREV_9285_11_OR_LATER(ah)) {
|
||||||
if (!ah->pacal_info.skipcount)
|
if (!ah->pacal_info.skipcount)
|
||||||
ath9k_hw_9285_pa_cal(ah, false);
|
ath9k_hw_9285_pa_cal(ah, false);
|
||||||
@ -1152,7 +1161,9 @@ bool ath9k_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Do PA Calibration */
|
/* Do PA Calibration */
|
||||||
if (AR_SREV_9285_11_OR_LATER(ah))
|
if (AR_SREV_9271(ah))
|
||||||
|
ath9k_hw_9271_pa_cal(ah, true);
|
||||||
|
else if (AR_SREV_9285_11_OR_LATER(ah))
|
||||||
ath9k_hw_9285_pa_cal(ah, true);
|
ath9k_hw_9285_pa_cal(ah, true);
|
||||||
|
|
||||||
/* Do NF Calibration after DC offset and other calibrations */
|
/* Do NF Calibration after DC offset and other calibrations */
|
||||||
|
Loading…
Reference in New Issue
Block a user