ath9k: add ANI fix for ar913x to improve stability

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 40573
This commit is contained in:
Felix Fietkau 2014-04-27 14:39:06 +00:00
parent b4532ad21e
commit 7e34e45dcf

View file

@ -1,3 +1,20 @@
commit 98a713933d8495f4078f561c1e651b738dd5b531
Author: Felix Fietkau <nbd@openwrt.org>
Date: Sun Apr 27 14:49:03 2014 +0200
ath9k_hw: do not lower ANI setting below default on AR913x
When the amount of noise fluctuates strongly, low immunity settings
can sometimes disrupt signal detection on AR913x chips. When that
happens, no OFDM/CCK errors are reported anymore, and ANI tunes the
radio to the lowest immunity settings.
Usually rx/tx fails as well in that case.
To fix this, keep noise immunity settings at or above ANI default level,
which will keep radio parameters at or above INI values.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
commit 7cbb4c021bfd1e656f5b9953a947ab3c64e4e3b0
Author: Felix Fietkau <nbd@openwrt.org>
Date: Thu Apr 10 10:49:01 2014 +0200
@ -98,3 +115,25 @@ Date: Sun Apr 6 23:35:28 2014 +0200
return;
drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed);
--- a/drivers/net/wireless/ath/ath9k/ani.c
+++ b/drivers/net/wireless/ath/ath9k/ani.c
@@ -155,6 +155,9 @@ static void ath9k_hw_set_ofdm_nil(struct
ATH9K_ANI_RSSI_THR_LOW,
ATH9K_ANI_RSSI_THR_HIGH);
+ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL)
+ immunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+
if (!scan)
aniState->ofdmNoiseImmunityLevel = immunityLevel;
@@ -235,6 +238,9 @@ static void ath9k_hw_set_cck_nil(struct
BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
ATH9K_ANI_RSSI_THR_HIGH);
+ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
+ immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
if (ah->opmode == NL80211_IFTYPE_STATION &&
BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)