summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-02-17 22:15:33 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-02-17 22:15:33 +0000
commit0a4428a71bd9e3be626acd524a51ac0b917c6755 (patch)
tree71261b947e4c28a657a5d9e698b574e2e915bd6e
parentcb64c407c7199669817a0f13b0e95e406898d598 (diff)
ath5k: do not re-run AGC calibration periodically - fixes stability issues on AR2315 (#10574)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30624 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/mac80211/patches/441-ath5k_no_agc_recalibration.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch b/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch
new file mode 100644
index 000000000..87d0743d3
--- /dev/null
+++ b/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch
@@ -0,0 +1,42 @@
+--- a/drivers/net/wireless/ath/ath5k/phy.c
++++ b/drivers/net/wireless/ath/ath5k/phy.c
+@@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw *
+ ret = 0;
+ }
+
+- /* On full calibration do an AGC calibration and
+- * request a PAPD probe for gainf calibration if
+- * needed */
+- if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
++ /* On full calibration request a PAPD probe for
++ * gainf calibration if needed */
++ if ((ah->ah_cal_mask & AR5K_CALIBRATION_FULL) &&
++ (ah->ah_radio == AR5K_RF5111 ||
++ ah->ah_radio == AR5K_RF5112) &&
++ channel->hw_value != AR5K_MODE_11B)
++ ath5k_hw_request_rfgain_probe(ah);
+
+- AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
+- AR5K_PHY_AGCCTL_CAL);
+-
+- ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
+- AR5K_PHY_AGCCTL_CAL | AR5K_PHY_AGCCTL_NF,
+- 0, false);
+- if (ret) {
+- ATH5K_ERR(ah,
+- "gain calibration timeout (%uMHz)\n",
+- channel->center_freq);
+- }
+-
+- if ((ah->ah_radio == AR5K_RF5111 ||
+- ah->ah_radio == AR5K_RF5112)
+- && (channel->hw_value != AR5K_MODE_11B))
+- ath5k_hw_request_rfgain_probe(ah);
+- }
+-
+- /* Update noise floor
+- * XXX: Only do this after AGC calibration */
++ /* Update noise floor */
+ if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
+ ath5k_hw_update_noise_floor(ah);
+