Lines Matching refs:ah
21 void ar9003_paprd_enable(struct ath_hw *ah, bool val) in ar9003_paprd_enable() argument
23 struct ath9k_channel *chan = ah->curchan; in ar9003_paprd_enable()
24 struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; in ar9003_paprd_enable()
56 ah->paprd_table_write_done = true; in ar9003_paprd_enable()
57 ath9k_hw_apply_txpower(ah, chan, false); in ar9003_paprd_enable()
60 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0, in ar9003_paprd_enable()
62 if (ah->caps.tx_chainmask & BIT(1)) in ar9003_paprd_enable()
63 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B1, in ar9003_paprd_enable()
65 if (ah->caps.tx_chainmask & BIT(2)) in ar9003_paprd_enable()
66 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B2, in ar9003_paprd_enable()
71 static int ar9003_get_training_power_2g(struct ath_hw *ah) in ar9003_get_training_power_2g() argument
73 struct ath9k_channel *chan = ah->curchan; in ar9003_get_training_power_2g()
76 scale = ar9003_get_paprd_scale_factor(ah, chan); in ar9003_get_training_power_2g()
78 if (AR_SREV_9330(ah) || AR_SREV_9340(ah) || in ar9003_get_training_power_2g()
79 AR_SREV_9462(ah) || AR_SREV_9565(ah)) { in ar9003_get_training_power_2g()
80 power = ah->paprd_target_power + 2; in ar9003_get_training_power_2g()
81 } else if (AR_SREV_9485(ah)) { in ar9003_get_training_power_2g()
84 power = REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE5, in ar9003_get_training_power_2g()
87 delta = abs((int) ah->paprd_target_power - (int) power); in ar9003_get_training_power_2g()
98 static int ar9003_get_training_power_5g(struct ath_hw *ah) in ar9003_get_training_power_5g() argument
100 struct ath_common *common = ath9k_hw_common(ah); in ar9003_get_training_power_5g()
101 struct ath9k_channel *chan = ah->curchan; in ar9003_get_training_power_5g()
104 scale = ar9003_get_paprd_scale_factor(ah, chan); in ar9003_get_training_power_5g()
107 power = REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE8, in ar9003_get_training_power_5g()
110 power = REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE6, in ar9003_get_training_power_5g()
114 delta = abs((int) ah->paprd_target_power - (int) power); in ar9003_get_training_power_5g()
118 switch (get_streams(ah->txchainmask)) { in ar9003_get_training_power_5g()
131 ah->txchainmask); in ar9003_get_training_power_5g()
138 static int ar9003_paprd_setup_single_table(struct ath_hw *ah) in ar9003_paprd_setup_single_table() argument
140 struct ath_common *common = ath9k_hw_common(ah); in ar9003_paprd_setup_single_table()
153 u32 am2pm_mask = ah->paprd_ratemask; in ar9003_paprd_setup_single_table()
155 if (IS_CHAN_2GHZ(ah->curchan)) in ar9003_paprd_setup_single_table()
156 training_power = ar9003_get_training_power_2g(ah); in ar9003_paprd_setup_single_table()
158 training_power = ar9003_get_training_power_5g(ah); in ar9003_paprd_setup_single_table()
161 training_power, ah->paprd_target_power); in ar9003_paprd_setup_single_table()
168 ah->paprd_training_power = training_power; in ar9003_paprd_setup_single_table()
170 if (AR_SREV_9330(ah)) in ar9003_paprd_setup_single_table()
173 REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2AM, AR_PHY_PAPRD_AM2AM_MASK, in ar9003_paprd_setup_single_table()
174 ah->paprd_ratemask); in ar9003_paprd_setup_single_table()
175 REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2PM, AR_PHY_PAPRD_AM2PM_MASK, in ar9003_paprd_setup_single_table()
177 REG_RMW_FIELD(ah, AR_PHY_PAPRD_HT40, AR_PHY_PAPRD_HT40_MASK, in ar9003_paprd_setup_single_table()
178 ah->paprd_ratemask_ht40); in ar9003_paprd_setup_single_table()
181 ah->paprd_ratemask, ah->paprd_ratemask_ht40); in ar9003_paprd_setup_single_table()
183 for (i = 0; i < ah->caps.max_txchains; i++) { in ar9003_paprd_setup_single_table()
184 REG_RMW_FIELD(ah, ctrl0[i], in ar9003_paprd_setup_single_table()
186 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
188 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
190 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
192 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
194 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
196 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
198 REG_RMW_FIELD(ah, ctrl0[i], in ar9003_paprd_setup_single_table()
202 ar9003_paprd_enable(ah, false); in ar9003_paprd_setup_single_table()
204 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
206 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
208 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
210 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
212 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
214 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
216 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1, in ar9003_paprd_setup_single_table()
219 if (AR_SREV_9485(ah)) { in ar9003_paprd_setup_single_table()
222 if (IS_CHAN_2GHZ(ah->curchan)) { in ar9003_paprd_setup_single_table()
223 if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) in ar9003_paprd_setup_single_table()
232 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL2, in ar9003_paprd_setup_single_table()
234 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
236 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
238 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
240 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
243 if (AR_SREV_9485(ah) || in ar9003_paprd_setup_single_table()
244 AR_SREV_9462(ah) || in ar9003_paprd_setup_single_table()
245 AR_SREV_9565(ah) || in ar9003_paprd_setup_single_table()
246 AR_SREV_9550(ah) || in ar9003_paprd_setup_single_table()
247 AR_SREV_9330(ah) || in ar9003_paprd_setup_single_table()
248 AR_SREV_9340(ah)) in ar9003_paprd_setup_single_table()
249 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
252 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
257 if (IS_CHAN_2GHZ(ah->curchan) && !AR_SREV_9462(ah) && !AR_SREV_9565(ah)) in ar9003_paprd_setup_single_table()
260 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
263 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_setup_single_table()
265 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4, in ar9003_paprd_setup_single_table()
267 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4, in ar9003_paprd_setup_single_table()
269 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4, in ar9003_paprd_setup_single_table()
272 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_0_B0, in ar9003_paprd_setup_single_table()
274 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_1_B0, in ar9003_paprd_setup_single_table()
276 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_2_B0, in ar9003_paprd_setup_single_table()
278 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_3_B0, in ar9003_paprd_setup_single_table()
280 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_4_B0, in ar9003_paprd_setup_single_table()
282 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_5_B0, in ar9003_paprd_setup_single_table()
284 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_6_B0, in ar9003_paprd_setup_single_table()
286 REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_7_B0, in ar9003_paprd_setup_single_table()
291 static void ar9003_paprd_get_gain_table(struct ath_hw *ah) in ar9003_paprd_get_gain_table() argument
293 u32 *entry = ah->paprd_gain_table_entries; in ar9003_paprd_get_gain_table()
294 u8 *index = ah->paprd_gain_table_index; in ar9003_paprd_get_gain_table()
299 entry[i] = REG_READ(ah, reg); in ar9003_paprd_get_gain_table()
305 static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain, in ar9003_get_desired_gain() argument
316 REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1, in ar9003_get_desired_gain()
318 desired_scale = REG_READ_FIELD(ah, AR_PHY_TPC_12, in ar9003_get_desired_gain()
320 alpha_therm = REG_READ_FIELD(ah, AR_PHY_TPC_19, in ar9003_get_desired_gain()
322 alpha_volt = REG_READ_FIELD(ah, AR_PHY_TPC_19, in ar9003_get_desired_gain()
324 therm_cal_value = REG_READ_FIELD(ah, AR_PHY_TPC_18, in ar9003_get_desired_gain()
326 volt_cal_value = REG_READ_FIELD(ah, AR_PHY_TPC_18, in ar9003_get_desired_gain()
328 therm_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4, in ar9003_get_desired_gain()
330 volt_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4, in ar9003_get_desired_gain()
347 ath_dbg(ath9k_hw_common(ah), CALIBRATE, in ar9003_get_desired_gain()
352 olpc_gain_delta = REG_READ_FIELD(ah, reg_olpc, in ar9003_get_desired_gain()
354 cl_gain_mod = REG_READ_FIELD(ah, reg_cl_gain, in ar9003_get_desired_gain()
370 static void ar9003_tx_force_gain(struct ath_hw *ah, unsigned int gain_index) in ar9003_tx_force_gain() argument
374 u32 *gain_table_entries = ah->paprd_gain_table_entries; in ar9003_tx_force_gain()
385 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
387 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
389 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
391 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
393 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
395 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
397 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
399 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
401 REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, in ar9003_tx_force_gain()
403 REG_RMW_FIELD(ah, AR_PHY_TPC_1, AR_PHY_TPC_1_FORCED_DAC_GAIN, 0); in ar9003_tx_force_gain()
404 REG_RMW_FIELD(ah, AR_PHY_TPC_1, AR_PHY_TPC_1_FORCE_DAC_GAIN, 0); in ar9003_tx_force_gain()
751 void ar9003_paprd_populate_single_table(struct ath_hw *ah, in ar9003_paprd_populate_single_table() argument
757 u32 training_power = ah->paprd_training_power; in ar9003_paprd_populate_single_table()
769 REG_WRITE(ah, reg, paprd_table_val[i]); in ar9003_paprd_populate_single_table()
780 REG_RMW_FIELD(ah, reg, AR_PHY_PA_GAIN123_PA_GAIN1, small_signal_gain); in ar9003_paprd_populate_single_table()
782 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B0, in ar9003_paprd_populate_single_table()
786 if (ah->caps.tx_chainmask & BIT(1)) in ar9003_paprd_populate_single_table()
787 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B1, in ar9003_paprd_populate_single_table()
791 if (ah->caps.tx_chainmask & BIT(2)) in ar9003_paprd_populate_single_table()
793 REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B2, in ar9003_paprd_populate_single_table()
799 void ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain) in ar9003_paprd_setup_gain_table() argument
802 unsigned int train_power = ah->paprd_training_power; in ar9003_paprd_setup_gain_table()
804 desired_gain = ar9003_get_desired_gain(ah, chain, train_power); in ar9003_paprd_setup_gain_table()
808 if (ah->paprd_gain_table_index[i] >= desired_gain) in ar9003_paprd_setup_gain_table()
813 ar9003_tx_force_gain(ah, gain_index); in ar9003_paprd_setup_gain_table()
815 REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1, in ar9003_paprd_setup_gain_table()
820 static bool ar9003_paprd_retrain_pa_in(struct ath_hw *ah, in ar9003_paprd_retrain_pa_in() argument
830 if (!AR_SREV_9485(ah) && !AR_SREV_9330(ah)) in ar9003_paprd_retrain_pa_in()
833 capdiv2g = REG_READ_FIELD(ah, AR_PHY_65NM_CH0_TXRF3, in ar9003_paprd_retrain_pa_in()
836 quick_drop = REG_READ_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_retrain_pa_in()
847 if (AR_SREV_9485(ah)) { in ar9003_paprd_retrain_pa_in()
876 } else if (AR_SREV_9330(ah)) { in ar9003_paprd_retrain_pa_in()
907 REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_TXRF3, in ar9003_paprd_retrain_pa_in()
909 REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3, in ar9003_paprd_retrain_pa_in()
916 int ar9003_paprd_create_curve(struct ath_hw *ah, in ar9003_paprd_create_curve() argument
935 REG_CLR_BIT(ah, AR_PHY_CHAN_INFO_MEMORY, in ar9003_paprd_create_curve()
940 data_L[i] = REG_READ(ah, reg + (i << 2)); in ar9003_paprd_create_curve()
942 REG_SET_BIT(ah, AR_PHY_CHAN_INFO_MEMORY, in ar9003_paprd_create_curve()
946 data_U[i] = REG_READ(ah, reg + (i << 2)); in ar9003_paprd_create_curve()
951 if (ar9003_paprd_retrain_pa_in(ah, caldata, chain)) in ar9003_paprd_create_curve()
954 REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1, in ar9003_paprd_create_curve()
963 int ar9003_paprd_init_table(struct ath_hw *ah) in ar9003_paprd_init_table() argument
967 ret = ar9003_paprd_setup_single_table(ah); in ar9003_paprd_init_table()
971 ar9003_paprd_get_gain_table(ah); in ar9003_paprd_init_table()
976 bool ar9003_paprd_is_done(struct ath_hw *ah) in ar9003_paprd_is_done() argument
980 paprd_done = REG_READ_FIELD(ah, AR_PHY_PAPRD_TRAINER_STAT1, in ar9003_paprd_is_done()
983 if (AR_SREV_9485(ah)) in ar9003_paprd_is_done()
987 agc2_pwr = REG_READ_FIELD(ah, AR_PHY_PAPRD_TRAINER_STAT1, in ar9003_paprd_is_done()
990 ath_dbg(ath9k_hw_common(ah), CALIBRATE, in ar9003_paprd_is_done()
1006 bool ar9003_is_paprd_enabled(struct ath_hw *ah) in ar9003_is_paprd_enabled() argument
1008 if ((ah->caps.hw_caps & ATH9K_HW_CAP_PAPRD) && ah->config.enable_paprd) in ar9003_is_paprd_enabled()