Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c17ddc4 authored by Felix Fietkau's avatar Felix Fietkau Committed by John W. Linville
Browse files

ath5k: do not re-run AGC calibration periodically

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: default avatarFelix Fietkau <nbd@openwrt.org>
Acked-by: default avatarNick Kossifidis <mickflemm@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 62e2c102
Loading
Loading
Loading
Loading
+9 −25
Original line number Original line Diff line number Diff line
@@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
		ret = 0;
		ret = 0;
	}
	}


	/* On full calibration do an AGC calibration and
	/* On full calibration request a PAPD probe for
	 * request a PAPD probe for gainf calibration if
	 * gainf calibration if needed */
	 * needed */
	if ((ah->ah_cal_mask & AR5K_CALIBRATION_FULL) &&
	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
	    (ah->ah_radio == AR5K_RF5111 ||

	     ah->ah_radio == AR5K_RF5112) &&
		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
	    channel->hw_value != AR5K_MODE_11B)
					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);
		ath5k_hw_request_rfgain_probe(ah);
	}


	/* Update noise floor
	/* Update noise floor */
	 * XXX: Only do this after AGC calibration */
	if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
	if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
		ath5k_hw_update_noise_floor(ah);
		ath5k_hw_update_noise_floor(ah);