Lines Matching +full:- +full:i

2  * Copyright (c) 2010-2011 Atheros Communications Inc.
23 struct ath9k_channel *chan = ah->curchan; in ar9003_paprd_enable()
24 struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; in ar9003_paprd_enable()
28 * is used for sub-band disabling of PAPRD. in ar9003_paprd_enable()
29 * 5G band is divided into 3 sub-bands -- upper, in ar9003_paprd_enable()
32 * -- disable PAPRD for upper band 5GHz in ar9003_paprd_enable()
34 * -- disable PAPRD for middle band 5GHz in ar9003_paprd_enable()
36 * -- disable PAPRD for lower band 5GHz in ar9003_paprd_enable()
40 if (chan->channel >= UPPER_5G_SUB_BAND_START) { in ar9003_paprd_enable()
41 if (le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20) in ar9003_paprd_enable()
44 } else if (chan->channel >= MID_5G_SUB_BAND_START) { in ar9003_paprd_enable()
45 if (le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20) in ar9003_paprd_enable()
49 if (le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20) in ar9003_paprd_enable()
56 ah->paprd_table_write_done = true; in ar9003_paprd_enable()
62 if (ah->caps.tx_chainmask & BIT(1)) in ar9003_paprd_enable()
65 if (ah->caps.tx_chainmask & BIT(2)) in ar9003_paprd_enable()
73 struct ath9k_channel *chan = ah->curchan; in ar9003_get_training_power_2g()
80 delta = abs((int) ah->paprd_target_power - (int) power); in ar9003_get_training_power_2g()
82 return -1; in ar9003_get_training_power_2g()
85 power -= 4 - delta; in ar9003_get_training_power_2g()
93 struct ath9k_channel *chan = ah->curchan; in ar9003_get_training_power_5g()
106 delta = abs((int) ah->paprd_target_power - (int) power); in ar9003_get_training_power_5g()
108 return -1; in ar9003_get_training_power_5g()
110 switch (get_streams(ah->txchainmask)) { in ar9003_get_training_power_5g()
122 ath_dbg(common, CALIBRATE, "Invalid tx-chainmask: %u\n", in ar9003_get_training_power_5g()
123 ah->txchainmask); in ar9003_get_training_power_5g()
144 int i, val; in ar9003_paprd_setup_single_table() local
146 if (IS_CHAN_2GHZ(ah->curchan)) in ar9003_paprd_setup_single_table()
152 training_power, ah->paprd_target_power); in ar9003_paprd_setup_single_table()
157 return -ERANGE; in ar9003_paprd_setup_single_table()
159 ah->paprd_training_power = training_power; in ar9003_paprd_setup_single_table()
162 ah->paprd_ratemask); in ar9003_paprd_setup_single_table()
164 ah->paprd_ratemask); in ar9003_paprd_setup_single_table()
166 ah->paprd_ratemask_ht40); in ar9003_paprd_setup_single_table()
168 for (i = 0; i < ah->caps.max_txchains; i++) { in ar9003_paprd_setup_single_table()
169 REG_RMW_FIELD(ah, ctrl0[i], in ar9003_paprd_setup_single_table()
171 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
173 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
175 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
177 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
179 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
181 REG_RMW_FIELD(ah, ctrl1[i], in ar9003_paprd_setup_single_table()
183 REG_RMW_FIELD(ah, ctrl0[i], in ar9003_paprd_setup_single_table()
217 -3); in ar9003_paprd_setup_single_table()
221 -6); in ar9003_paprd_setup_single_table()
222 val = AR_SREV_9462(ah) ? -10 : -15; in ar9003_paprd_setup_single_table()
256 u32 *entry = ah->paprd_gain_table_entries; in ar9003_paprd_get_gain_table()
257 u8 *index = ah->paprd_gain_table_index; in ar9003_paprd_get_gain_table()
259 int i; in ar9003_paprd_get_gain_table() local
261 memset(entry, 0, sizeof(ah->paprd_gain_table_entries)); in ar9003_paprd_get_gain_table()
262 memset(index, 0, sizeof(ah->paprd_gain_table_index)); in ar9003_paprd_get_gain_table()
264 for (i = 0; i < PAPRD_GAIN_TABLE_ENTRIES; i++) { in ar9003_paprd_get_gain_table()
265 entry[i] = REG_READ(ah, reg); in ar9003_paprd_get_gain_table()
266 index[i] = (entry[i] >> 24) & 0xff; in ar9003_paprd_get_gain_table()
324 olpc_gain_delta = olpc_gain_delta - 256; in ar9003_get_desired_gain()
326 thermal_gain_corr = (alpha_therm * (therm_value - therm_cal_value) + in ar9003_get_desired_gain()
328 voltage_gain_corr = (alpha_volt * (volt_value - volt_cal_value) + in ar9003_get_desired_gain()
330 desired_gain = target_power - olpc_gain_delta - thermal_gain_corr - in ar9003_get_desired_gain()
340 u32 *gain_table_entries = ah->paprd_gain_table_entries; in ar9003_tx_force_gain()
375 return fls(num) - 1; in find_expn()
380 return (expn > N) ? expn - 10 : 0; in find_proper_scale()
396 int G_fxp, Y_intercept, order_x_by_y, M, I, L, sum_y_sqr, sum_y_quad; in create_pa_curve() local
402 int i; in create_pa_curve() local
414 for (i = 0; i < NUM_BIN; i++) { in create_pa_curve()
418 accum_cnt = data_L[i] & 0xffff; in create_pa_curve()
424 accum_tx = ((data_L[i] >> 16) & 0xffff) | in create_pa_curve()
425 ((data_U[i] & 0x7ff) << 16); in create_pa_curve()
428 accum_rx = ((data_U[i] >> 11) & 0x1f) | in create_pa_curve()
429 ((data_L[i + 23] & 0xffff) << 5); in create_pa_curve()
432 accum_ang = ((data_L[i + 23] >> 16) & 0xffff) | in create_pa_curve()
433 ((data_U[i + 23] & 0x7ff) << 16); in create_pa_curve()
437 x_est[i + 1] = (((accum_tx + accum_cnt) / accum_cnt) + 32) >> in create_pa_curve()
440 Y[i + 1] = ((((accum_rx + accum_cnt) / accum_cnt) + 32) >> in create_pa_curve()
445 accum_ang -= 1 << 27; in create_pa_curve()
447 theta[i + 1] = ((accum_ang * (1 << scale_factor)) + accum_cnt) / in create_pa_curve()
457 for (i = 1; i < 6; i++) in create_pa_curve()
458 theta_low_bin += theta[i]; in create_pa_curve()
461 for (i = 1; i < 6; i++) in create_pa_curve()
462 theta[i] = theta_low_bin; in create_pa_curve()
466 for (i = 0; i <= max_index; i++) in create_pa_curve()
467 theta[i] -= theta_low_bin; in create_pa_curve()
478 (((Y[6] - Y[3]) * 1 << scale_factor) + in create_pa_curve()
479 (x_est[6] - x_est[3])) / (x_est[6] - x_est[3]); in create_pa_curve()
486 (G_fxp * (x_est[0] - x_est[3]) + in create_pa_curve()
489 for (i = 0; i <= max_index; i++) in create_pa_curve()
490 y_est[i] = Y[i] - Y_intercept; in create_pa_curve()
492 for (i = 0; i <= 3; i++) { in create_pa_curve()
493 y_est[i] = i * 32; in create_pa_curve()
494 x_est[i] = ((y_est[i] * 1 << scale_factor) + G_fxp) / G_fxp; in create_pa_curve()
501 x_est[max_index] - ((1 << scale_factor) * y_est[max_index] + in create_pa_curve()
514 I = (max_index > 15) ? 7 : max_index >> 1; in create_pa_curve()
515 L = max_index - I; in create_pa_curve()
521 for (i = 0; i <= L; i++) { in create_pa_curve()
527 if (y_est[i + I] == 0) in create_pa_curve()
531 x_est[i + I] - ((1 << scale_factor) * y_est[i + I] + in create_pa_curve()
534 x_tilde[i] = in create_pa_curve()
535 (x_est_fxp1_nonlin * (1 << M) + y_est[i + I]) / y_est[i + in create_pa_curve()
536 I]; in create_pa_curve()
537 x_tilde[i] = in create_pa_curve()
538 (x_tilde[i] * (1 << M) + y_est[i + I]) / y_est[i + I]; in create_pa_curve()
539 x_tilde[i] = in create_pa_curve()
540 (x_tilde[i] * (1 << M) + y_est[i + I]) / y_est[i + I]; in create_pa_curve()
542 (y_est[i + I] * y_est[i + I] + in create_pa_curve()
545 tmp_abs = abs(x_tilde[i]); in create_pa_curve()
552 B1_tmp[i] = y_sqr * (L + 1); in create_pa_curve()
553 B2_tmp[i] = y_sqr; in create_pa_curve()
558 for (i = 0; i <= L; i++) { in create_pa_curve()
561 B1_tmp[i] -= sum_y_sqr; in create_pa_curve()
562 B2_tmp[i] = sum_y_quad - sum_y_sqr * B2_tmp[i]; in create_pa_curve()
564 abs_val = abs(B1_tmp[i]); in create_pa_curve()
568 abs_val = abs(B2_tmp[i]); in create_pa_curve()
579 for (i = 0; i <= L; i++) { in create_pa_curve()
580 x_tilde[i] = x_tilde[i] / (1 << Q_x); in create_pa_curve()
581 B1_tmp[i] = B1_tmp[i] / (1 << Q_B1); in create_pa_curve()
582 B2_tmp[i] = B2_tmp[i] / (1 << Q_B2); in create_pa_curve()
583 beta_raw = beta_raw + B1_tmp[i] * x_tilde[i]; in create_pa_curve()
584 alpha_raw = alpha_raw + B2_tmp[i] * x_tilde[i]; in create_pa_curve()
588 ((sum_y_quad / scale_factor) * (L + 1) - in create_pa_curve()
601 order_1 = 3 * M - Q_x - Q_B1 - Q_beta + 10 + Q_scale_B; in create_pa_curve()
602 order_2 = 3 * M - Q_x - Q_B2 - Q_alpha + 10 + Q_scale_B; in create_pa_curve()
605 order1_5x_rem = order_1 - 5 * order1_5x; in create_pa_curve()
606 order2_3x_rem = order_2 - 3 * order2_3x; in create_pa_curve()
608 for (i = 0; i < PAPRD_TABLE_SZ; i++) { in create_pa_curve()
609 tmp = i * 32; in create_pa_curve()
620 PA_in[i] = y5 + y3 + (256 * tmp) / G_fxp; in create_pa_curve()
622 if (i >= 2) { in create_pa_curve()
623 tmp = PA_in[i] - PA_in[i - 1]; in create_pa_curve()
625 PA_in[i] = in create_pa_curve()
626 PA_in[i - 1] + (PA_in[i - 1] - in create_pa_curve()
627 PA_in[i - 2]); in create_pa_curve()
630 PA_in[i] = (PA_in[i] < 1400) ? PA_in[i] : 1400; in create_pa_curve()
636 for (i = 0; i <= L; i++) { in create_pa_curve()
638 ((theta[i + I] << M) + y_est[i + I]) / y_est[i + I]; in create_pa_curve()
640 ((theta_tilde << M) + y_est[i + I]) / y_est[i + I]; in create_pa_curve()
642 ((theta_tilde << M) + y_est[i + I]) / y_est[i + I]; in create_pa_curve()
643 beta_raw = beta_raw + B1_tmp[i] * theta_tilde; in create_pa_curve()
644 alpha_raw = alpha_raw + B2_tmp[i] * theta_tilde; in create_pa_curve()
654 order_1 = 3 * M - Q_x - Q_B1 - Q_beta + 10 + Q_scale_B + 5; in create_pa_curve()
655 order_2 = 3 * M - Q_x - Q_B2 - Q_alpha + 10 + Q_scale_B + 5; in create_pa_curve()
658 order1_5x_rem = order_1 - 5 * order1_5x; in create_pa_curve()
659 order2_3x_rem = order_2 - 3 * order2_3x; in create_pa_curve()
661 for (i = 0; i < PAPRD_TABLE_SZ; i++) { in create_pa_curve()
664 /* pa_table[4] is calculated from PA_angle for i=5 */ in create_pa_curve()
665 if (i == 4) in create_pa_curve()
668 tmp = i * 32; in create_pa_curve()
670 y5 = (((beta * tmp - 64) >> 6) - in create_pa_curve()
673 y5 = ((((beta * tmp - 64) >> 6) + in create_pa_curve()
683 y3 = (alpha * tmp - in create_pa_curve()
692 if (i < 4) { in create_pa_curve()
696 if (PA_angle < -150) in create_pa_curve()
697 PA_angle = -150; in create_pa_curve()
702 pa_table[i] = ((PA_in[i] & 0x7ff) << 11) + (PA_angle & 0x7ff); in create_pa_curve()
703 if (i == 5) { in create_pa_curve()
705 pa_table[i - 1] = ((PA_in[i - 1] & 0x7ff) << 11) + in create_pa_curve()
718 u32 *paprd_table_val = caldata->pa_table[chain]; in ar9003_paprd_populate_single_table()
719 u32 small_signal_gain = caldata->small_signal_gain[chain]; in ar9003_paprd_populate_single_table()
720 u32 training_power = ah->paprd_training_power; in ar9003_paprd_populate_single_table()
722 int i; in ar9003_paprd_populate_single_table() local
731 for (i = 0; i < PAPRD_TABLE_SZ; i++) { in ar9003_paprd_populate_single_table()
732 REG_WRITE(ah, reg, paprd_table_val[i]); in ar9003_paprd_populate_single_table()
749 if (ah->caps.tx_chainmask & BIT(1)) in ar9003_paprd_populate_single_table()
754 if (ah->caps.tx_chainmask & BIT(2)) in ar9003_paprd_populate_single_table()
764 unsigned int i, desired_gain, gain_index; in ar9003_paprd_setup_gain_table() local
765 unsigned int train_power = ah->paprd_training_power; in ar9003_paprd_setup_gain_table()
770 for (i = 0; i < PAPRD_GAIN_TABLE_ENTRIES; i++) { in ar9003_paprd_setup_gain_table()
771 if (ah->paprd_gain_table_index[i] >= desired_gain) in ar9003_paprd_setup_gain_table()
788 u16 *small_signal_gain = &caldata->small_signal_gain[chain]; in ar9003_paprd_create_curve()
789 u32 *pa_table = caldata->pa_table[chain]; in ar9003_paprd_create_curve()
791 int i, status = 0; in ar9003_paprd_create_curve() local
795 memset(caldata->pa_table[chain], 0, sizeof(caldata->pa_table[chain])); in ar9003_paprd_create_curve()
799 return -ENOMEM; in ar9003_paprd_create_curve()
808 for (i = 0; i < 48; i++) in ar9003_paprd_create_curve()
809 data_L[i] = REG_READ(ah, reg + (i << 2)); in ar9003_paprd_create_curve()
814 for (i = 0; i < 48; i++) in ar9003_paprd_create_curve()
815 data_U[i] = REG_READ(ah, reg + (i << 2)); in ar9003_paprd_create_curve()
818 status = -2; in ar9003_paprd_create_curve()