diff options
author | Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com> | 2011-06-23 10:33:38 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-06-27 15:09:40 -0400 |
commit | f68e20f0f8bc57dc91d132eaa66956e9ba5aafcf (patch) | |
tree | e704a8ece6d6abc36329af4a45669d87dda1434b /drivers/net/wireless/ath/ath9k/ar9003_paprd.c | |
parent | dcfcbd590d91e8385eb554aaed419bdebaf4c72a (diff) |
ath9k_hw: Add carrier leak correction in desired gain calculation
Cc: muddin@qca.qualcomm.com
Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_paprd.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_paprd.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c index 8f6d11dfa37..6e9e892e528 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c | |||
@@ -246,13 +246,13 @@ static void ar9003_paprd_get_gain_table(struct ath_hw *ah) | |||
246 | static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain, | 246 | static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain, |
247 | int target_power) | 247 | int target_power) |
248 | { | 248 | { |
249 | int olpc_gain_delta = 0; | 249 | int olpc_gain_delta = 0, cl_gain_mod; |
250 | int alpha_therm, alpha_volt; | 250 | int alpha_therm, alpha_volt; |
251 | int therm_cal_value, volt_cal_value; | 251 | int therm_cal_value, volt_cal_value; |
252 | int therm_value, volt_value; | 252 | int therm_value, volt_value; |
253 | int thermal_gain_corr, voltage_gain_corr; | 253 | int thermal_gain_corr, voltage_gain_corr; |
254 | int desired_scale, desired_gain = 0; | 254 | int desired_scale, desired_gain = 0; |
255 | u32 reg; | 255 | u32 reg_olpc = 0, reg_cl_gain = 0; |
256 | 256 | ||
257 | REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1, | 257 | REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1, |
258 | AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE); | 258 | AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE); |
@@ -271,15 +271,29 @@ static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain, | |||
271 | volt_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4, | 271 | volt_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4, |
272 | AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE); | 272 | AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE); |
273 | 273 | ||
274 | if (chain == 0) | 274 | switch (chain) { |
275 | reg = AR_PHY_TPC_11_B0; | 275 | case 0: |
276 | else if (chain == 1) | 276 | reg_olpc = AR_PHY_TPC_11_B0; |
277 | reg = AR_PHY_TPC_11_B1; | 277 | reg_cl_gain = AR_PHY_CL_TAB_0; |
278 | else | 278 | break; |
279 | reg = AR_PHY_TPC_11_B2; | 279 | case 1: |
280 | reg_olpc = AR_PHY_TPC_11_B1; | ||
281 | reg_cl_gain = AR_PHY_CL_TAB_1; | ||
282 | break; | ||
283 | case 2: | ||
284 | reg_olpc = AR_PHY_TPC_11_B2; | ||
285 | reg_cl_gain = AR_PHY_CL_TAB_2; | ||
286 | break; | ||
287 | default: | ||
288 | ath_dbg(ath9k_hw_common(ah), ATH_DBG_CALIBRATE, | ||
289 | "Invalid chainmask: %d\n", chain); | ||
290 | break; | ||
291 | } | ||
280 | 292 | ||
281 | olpc_gain_delta = REG_READ_FIELD(ah, reg, | 293 | olpc_gain_delta = REG_READ_FIELD(ah, reg_olpc, |
282 | AR_PHY_TPC_11_OLPC_GAIN_DELTA); | 294 | AR_PHY_TPC_11_OLPC_GAIN_DELTA); |
295 | cl_gain_mod = REG_READ_FIELD(ah, reg_cl_gain, | ||
296 | AR_PHY_CL_TAB_CL_GAIN_MOD); | ||
283 | 297 | ||
284 | if (olpc_gain_delta >= 128) | 298 | if (olpc_gain_delta >= 128) |
285 | olpc_gain_delta = olpc_gain_delta - 256; | 299 | olpc_gain_delta = olpc_gain_delta - 256; |
@@ -289,7 +303,7 @@ static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain, | |||
289 | voltage_gain_corr = (alpha_volt * (volt_value - volt_cal_value) + | 303 | voltage_gain_corr = (alpha_volt * (volt_value - volt_cal_value) + |
290 | (128 / 2)) / 128; | 304 | (128 / 2)) / 128; |
291 | desired_gain = target_power - olpc_gain_delta - thermal_gain_corr - | 305 | desired_gain = target_power - olpc_gain_delta - thermal_gain_corr - |
292 | voltage_gain_corr + desired_scale; | 306 | voltage_gain_corr + desired_scale + cl_gain_mod; |
293 | 307 | ||
294 | return desired_gain; | 308 | return desired_gain; |
295 | } | 309 | } |