ath5k: do not re-run AGC calibration periodically
authorFelix Fietkau <nbd@openwrt.org>
Tue, 6 Mar 2012 10:06:38 +0000 (11:06 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 6 Mar 2012 20:16:18 +0000 (15:16 -0500)
All other Atheros drivers run the AGC gain calibration and DC offset
calibration only after reset. Running them periodically has caused stability
issues on some (primarily AR2315/2413/5413/5414 based) devices, leading to
messages such as:

ath5k phy0: gain calibration timeout (2462MHz)
ath5k phy0: calibration of channel 11 failed

Related bug reports:
https://dev.openwrt.org/ticket/10574
https://bugzilla.redhat.com/show_bug.cgi?id=795141

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Acked-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath5k/phy.c

index e1f8613..3a28454 100644 (file)
@@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
                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) {
-
-               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 */
+       /* 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);
+
+       /* Update noise floor */
        if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
                ath5k_hw_update_noise_floor(ah);