From 207338c78edbd4d52767f1b20b9a95bdb32c29dd Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 11 Jul 2016 11:38:15 +0200 Subject: ath9k: implement temperature compensation support for AR93xx and newer Signed-off-by: Felix Fietkau --- ...h9k_hw-simplify-ar9003_hw_per_calibration.patch | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 package/kernel/mac80211/patches/326-ath9k_hw-simplify-ar9003_hw_per_calibration.patch (limited to 'package/kernel/mac80211/patches/326-ath9k_hw-simplify-ar9003_hw_per_calibration.patch') diff --git a/package/kernel/mac80211/patches/326-ath9k_hw-simplify-ar9003_hw_per_calibration.patch b/package/kernel/mac80211/patches/326-ath9k_hw-simplify-ar9003_hw_per_calibration.patch new file mode 100644 index 0000000000..999d9934cd --- /dev/null +++ b/package/kernel/mac80211/patches/326-ath9k_hw-simplify-ar9003_hw_per_calibration.patch @@ -0,0 +1,88 @@ +From: Felix Fietkau +Date: Mon, 11 Jul 2016 11:34:47 +0200 +Subject: [PATCH] ath9k_hw: simplify ar9003_hw_per_calibration + +Reduce indentation, use a variable to save a few pointer dereferences + +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c +@@ -75,50 +75,49 @@ static bool ar9003_hw_per_calibration(st + struct ath9k_cal_list *currCal) + { + struct ath9k_hw_cal_data *caldata = ah->caldata; +- /* Cal is assumed not done until explicitly set below */ +- bool iscaldone = false; ++ const struct ath9k_percal_data *cur_caldata = currCal->calData; + + /* Calibration in progress. */ + if (currCal->calState == CAL_RUNNING) { + /* Check to see if it has finished. */ +- if (!(REG_READ(ah, AR_PHY_TIMING4) & AR_PHY_TIMING4_DO_CAL)) { +- /* +- * Accumulate cal measures for active chains +- */ +- currCal->calData->calCollect(ah); +- ah->cal_samples++; ++ if (REG_READ(ah, AR_PHY_TIMING4) & AR_PHY_TIMING4_DO_CAL) ++ return false; + +- if (ah->cal_samples >= +- currCal->calData->calNumSamples) { +- unsigned int i, numChains = 0; +- for (i = 0; i < AR9300_MAX_CHAINS; i++) { +- if (rxchainmask & (1 << i)) +- numChains++; +- } ++ /* ++ * Accumulate cal measures for active chains ++ */ ++ cur_caldata->calCollect(ah); ++ ah->cal_samples++; + +- /* +- * Process accumulated data +- */ +- currCal->calData->calPostProc(ah, numChains); ++ if (ah->cal_samples >= cur_caldata->calNumSamples) { ++ unsigned int i, numChains = 0; ++ for (i = 0; i < AR9300_MAX_CHAINS; i++) { ++ if (rxchainmask & (1 << i)) ++ numChains++; ++ } + +- /* Calibration has finished. */ +- caldata->CalValid |= currCal->calData->calType; +- currCal->calState = CAL_DONE; +- iscaldone = true; +- } else { ++ /* ++ * Process accumulated data ++ */ ++ cur_caldata->calPostProc(ah, numChains); ++ ++ /* Calibration has finished. */ ++ caldata->CalValid |= cur_caldata->calType; ++ currCal->calState = CAL_DONE; ++ return true; ++ } else { + /* + * Set-up collection of another sub-sample until we + * get desired number + */ + ar9003_hw_setup_calibration(ah, currCal); +- } + } +- } else if (!(caldata->CalValid & currCal->calData->calType)) { ++ } else if (!(caldata->CalValid & cur_caldata->calType)) { + /* If current cal is marked invalid in channel, kick it off */ + ath9k_hw_reset_calibration(ah, currCal); + } + +- return iscaldone; ++ return false; + } + + static int ar9003_hw_calibrate(struct ath_hw *ah, struct ath9k_channel *chan, -- cgit v1.2.3