diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/calib.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/calib.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c index 8649581fa4dd..558b228a717f 100644 --- a/drivers/net/wireless/ath/ath9k/calib.c +++ b/drivers/net/wireless/ath/ath9k/calib.c | |||
@@ -69,15 +69,21 @@ static void ath9k_hw_update_nfcal_hist_buffer(struct ath_hw *ah, | |||
69 | int16_t *nfarray) | 69 | int16_t *nfarray) |
70 | { | 70 | { |
71 | struct ath_common *common = ath9k_hw_common(ah); | 71 | struct ath_common *common = ath9k_hw_common(ah); |
72 | struct ieee80211_conf *conf = &common->hw->conf; | ||
72 | struct ath_nf_limits *limit; | 73 | struct ath_nf_limits *limit; |
73 | struct ath9k_nfcal_hist *h; | 74 | struct ath9k_nfcal_hist *h; |
74 | bool high_nf_mid = false; | 75 | bool high_nf_mid = false; |
76 | u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; | ||
75 | int i; | 77 | int i; |
76 | 78 | ||
77 | h = cal->nfCalHist; | 79 | h = cal->nfCalHist; |
78 | limit = ath9k_hw_get_nf_limits(ah, ah->curchan); | 80 | limit = ath9k_hw_get_nf_limits(ah, ah->curchan); |
79 | 81 | ||
80 | for (i = 0; i < NUM_NF_READINGS; i++) { | 82 | for (i = 0; i < NUM_NF_READINGS; i++) { |
83 | if (!(chainmask & (1 << i)) || | ||
84 | ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf))) | ||
85 | continue; | ||
86 | |||
81 | h[i].nfCalBuffer[h[i].currIndex] = nfarray[i]; | 87 | h[i].nfCalBuffer[h[i].currIndex] = nfarray[i]; |
82 | 88 | ||
83 | if (++h[i].currIndex >= ATH9K_NF_CAL_HIST_MAX) | 89 | if (++h[i].currIndex >= ATH9K_NF_CAL_HIST_MAX) |
@@ -225,6 +231,7 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan) | |||
225 | int32_t val; | 231 | int32_t val; |
226 | u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; | 232 | u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; |
227 | struct ath_common *common = ath9k_hw_common(ah); | 233 | struct ath_common *common = ath9k_hw_common(ah); |
234 | struct ieee80211_conf *conf = &common->hw->conf; | ||
228 | s16 default_nf = ath9k_hw_get_default_nf(ah, chan); | 235 | s16 default_nf = ath9k_hw_get_default_nf(ah, chan); |
229 | 236 | ||
230 | if (ah->caldata) | 237 | if (ah->caldata) |
@@ -234,6 +241,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan) | |||
234 | if (chainmask & (1 << i)) { | 241 | if (chainmask & (1 << i)) { |
235 | s16 nfval; | 242 | s16 nfval; |
236 | 243 | ||
244 | if ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf)) | ||
245 | continue; | ||
246 | |||
237 | if (h) | 247 | if (h) |
238 | nfval = h[i].privNF; | 248 | nfval = h[i].privNF; |
239 | else | 249 | else |
@@ -293,6 +303,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan) | |||
293 | ENABLE_REGWRITE_BUFFER(ah); | 303 | ENABLE_REGWRITE_BUFFER(ah); |
294 | for (i = 0; i < NUM_NF_READINGS; i++) { | 304 | for (i = 0; i < NUM_NF_READINGS; i++) { |
295 | if (chainmask & (1 << i)) { | 305 | if (chainmask & (1 << i)) { |
306 | if ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf)) | ||
307 | continue; | ||
308 | |||
296 | val = REG_READ(ah, ah->nf_regs[i]); | 309 | val = REG_READ(ah, ah->nf_regs[i]); |
297 | val &= 0xFFFFFE00; | 310 | val &= 0xFFFFFE00; |
298 | val |= (((u32) (-50) << 1) & 0x1ff); | 311 | val |= (((u32) (-50) << 1) & 0x1ff); |
@@ -396,14 +409,6 @@ void ath9k_init_nfcal_hist_buffer(struct ath_hw *ah, | |||
396 | } | 409 | } |
397 | } | 410 | } |
398 | 411 | ||
399 | s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan) | ||
400 | { | ||
401 | if (!ah->curchan || !ah->curchan->noisefloor) | ||
402 | return ath9k_hw_get_default_nf(ah, chan); | ||
403 | |||
404 | return ah->curchan->noisefloor; | ||
405 | } | ||
406 | EXPORT_SYMBOL(ath9k_hw_getchan_noise); | ||
407 | 412 | ||
408 | void ath9k_hw_bstuck_nfcal(struct ath_hw *ah) | 413 | void ath9k_hw_bstuck_nfcal(struct ath_hw *ah) |
409 | { | 414 | { |