aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>2011-10-20 04:59:38 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-11-02 15:23:11 -0400
commit91ae4d02913808fc4056168766185d1a3bd63f65 (patch)
treec26ef7f3b71f3f3af44bc00f8fda18988805920b /drivers
parent52d6d4ef5e6d1517688e27c11c01ab303ec681dd (diff)
ath9k_hw: Fix radio retention for AR9462
IQ calibration during fast channel change sometimes failed with RTT. And also restoring invalid radio retention readings during init cal could cause failure to set the channel properly. This patch counts the valid rtt history readings and clears rtt mask. Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_calib.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 16851cb109a6..a4cd1617092b 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -908,12 +908,15 @@ static bool ar9003_hw_rtt_restore(struct ath_hw *ah, struct ath9k_channel *chan)
908 int i; 908 int i;
909 bool restore; 909 bool restore;
910 910
911 if (!(ah->caps.hw_caps & ATH9K_HW_CAP_RTT) || !ah->caldata) 911 if (!ah->caldata)
912 return false; 912 return false;
913 913
914 hist = &ah->caldata->rtt_hist; 914 hist = &ah->caldata->rtt_hist;
915 if (!hist->num_readings)
916 return false;
917
915 ar9003_hw_rtt_enable(ah); 918 ar9003_hw_rtt_enable(ah);
916 ar9003_hw_rtt_set_mask(ah, 0x10); 919 ar9003_hw_rtt_set_mask(ah, 0x00);
917 for (i = 0; i < AR9300_MAX_CHAINS; i++) { 920 for (i = 0; i < AR9300_MAX_CHAINS; i++) {
918 if (!(ah->rxchainmask & (1 << i))) 921 if (!(ah->rxchainmask & (1 << i)))
919 continue; 922 continue;
@@ -1070,6 +1073,7 @@ skip_tx_iqcal:
1070 if (is_reusable && (hist->num_readings < RTT_HIST_MAX)) { 1073 if (is_reusable && (hist->num_readings < RTT_HIST_MAX)) {
1071 u32 *table; 1074 u32 *table;
1072 1075
1076 hist->num_readings++;
1073 for (i = 0; i < AR9300_MAX_CHAINS; i++) { 1077 for (i = 0; i < AR9300_MAX_CHAINS; i++) {
1074 if (!(ah->rxchainmask & (1 << i))) 1078 if (!(ah->rxchainmask & (1 << i)))
1075 continue; 1079 continue;