mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 23:36:41 +07:00
ath9k_hw: set ANI firstep as absolute values instead of relative
On older chips, the INI value differ in similar ways as cycpwr_thr1, so convert it to absolute values as well. Since the ANI algorithm is different here compared to the old implementation (fewer steps, controlled at a different point in time), it makes sense to use values similar to what would be applied for newer chips, just without relying on INI defaults. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
28327fd096
commit
9301ca90b6
@ -917,7 +917,7 @@ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_channel *chan = ah->curchan;
|
||||
struct ar5416AniState *aniState = &ah->ani;
|
||||
s32 value, value2;
|
||||
s32 value;
|
||||
|
||||
switch (cmd & ah->ani_function) {
|
||||
case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
|
||||
@ -1004,42 +1004,11 @@ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
|
||||
case ATH9K_ANI_FIRSTEP_LEVEL:{
|
||||
u32 level = param;
|
||||
|
||||
if (level >= ARRAY_SIZE(firstep_table)) {
|
||||
ath_dbg(common, ANI,
|
||||
"ATH9K_ANI_FIRSTEP_LEVEL: level out of range (%u > %zu)\n",
|
||||
level, ARRAY_SIZE(firstep_table));
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* make register setting relative to default
|
||||
* from INI file & cap value
|
||||
*/
|
||||
value = firstep_table[level] -
|
||||
firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
|
||||
aniState->iniDef.firstep;
|
||||
if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
|
||||
value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
|
||||
if (value > ATH9K_SIG_FIRSTEP_SETTING_MAX)
|
||||
value = ATH9K_SIG_FIRSTEP_SETTING_MAX;
|
||||
value = level * 2;
|
||||
REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
|
||||
AR_PHY_FIND_SIG_FIRSTEP,
|
||||
value);
|
||||
/*
|
||||
* we need to set first step low register too
|
||||
* make register setting relative to default
|
||||
* from INI file & cap value
|
||||
*/
|
||||
value2 = firstep_table[level] -
|
||||
firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
|
||||
aniState->iniDef.firstepLow;
|
||||
if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
|
||||
value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
|
||||
if (value2 > ATH9K_SIG_FIRSTEP_SETTING_MAX)
|
||||
value2 = ATH9K_SIG_FIRSTEP_SETTING_MAX;
|
||||
|
||||
AR_PHY_FIND_SIG_FIRSTEP, value);
|
||||
REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
|
||||
AR_PHY_FIND_SIG_FIRSTEP_LOW, value2);
|
||||
AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
|
||||
|
||||
if (level != aniState->firstepLevel) {
|
||||
ath_dbg(common, ANI,
|
||||
@ -1056,7 +1025,7 @@ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
|
||||
aniState->firstepLevel,
|
||||
level,
|
||||
ATH9K_ANI_FIRSTEP_LVL,
|
||||
value2,
|
||||
value,
|
||||
aniState->iniDef.firstepLow);
|
||||
if (level > aniState->firstepLevel)
|
||||
ah->stats.ast_ani_stepup++;
|
||||
|
Loading…
Reference in New Issue
Block a user