Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / drivers / net / wireless / ath / ath5k / phy.c
index 5544191..dd2b417 100644 (file)
@@ -105,6 +105,7 @@ bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah,
 
        if ((ah->ah_radio == AR5K_RF5112) ||
        (ah->ah_radio == AR5K_RF5413) ||
+       (ah->ah_radio == AR5K_RF2413) ||
        (ah->ah_mac_version == (AR5K_SREV_AR2417 >> 4)))
                refclk_freq = 40;
        else
@@ -173,7 +174,7 @@ static unsigned int ath5k_hw_rfb_op(struct ath5k_hw *ah,
                data = ath5k_hw_bitswap(val, num_bits);
 
        for (bits_shifted = 0, bits_left = num_bits; bits_left > 0;
-       position = 0, entry++) {
+            position = 0, entry++) {
 
                last_bit = (position + bits_left > 8) ? 8 :
                                        position + bits_left;
@@ -363,7 +364,7 @@ int ath5k_hw_rfgain_opt_init(struct ath5k_hw *ah)
        return 0;
 }
 
-/* Schedule a gain probe check on the next transmited packet.
+/* Schedule a gain probe check on the next transmitted packet.
  * That means our next packet is going to be sent with lower
  * tx power and a Peak to Average Power Detector (PAPD) will try
  * to measure the gain.
@@ -472,7 +473,7 @@ static bool ath5k_hw_rf_check_gainf_readback(struct ath5k_hw *ah)
                level[0] = 0;
                level[1] = (step == 63) ? 50 : step + 4;
                level[2] = (step != 63) ? 64 : level[0];
-               level[3] = level[2] + 50 ;
+               level[3] = level[2] + 50;
 
                ah->ah_gain.g_high = level[3] -
                        (step == 63 ? AR5K_GAIN_DYN_ADJUST_HI_MARGIN : -5);
@@ -549,7 +550,7 @@ static s8 ath5k_hw_rf_gainf_adjust(struct ath5k_hw *ah)
 
                for (ah->ah_gain.g_target = ah->ah_gain.g_current;
                                ah->ah_gain.g_target <= ah->ah_gain.g_low &&
-                               ah->ah_gain.g_step_idx < go->go_steps_count-1;
+                               ah->ah_gain.g_step_idx < go->go_steps_count - 1;
                                g_step = &go->go_step[ah->ah_gain.g_step_idx])
                        ah->ah_gain.g_target -= 2 *
                            (go->go_step[++ah->ah_gain.g_step_idx].gos_gain -
@@ -614,13 +615,13 @@ enum ath5k_rfgain ath5k_hw_gainf_calibrate(struct ath5k_hw *ah)
                        ath5k_hw_rf_gainf_corr(ah);
                        ah->ah_gain.g_current =
                                ah->ah_gain.g_current >= ah->ah_gain.g_f_corr ?
-                               (ah->ah_gain.g_current-ah->ah_gain.g_f_corr) :
+                               (ah->ah_gain.g_current - ah->ah_gain.g_f_corr) :
                                0;
                }
 
                /* Check if measurement is ok and if we need
                 * to adjust gain, schedule a gain adjustment,
-                * else switch back to the acive state */
+                * else switch back to the active state */
                if (ath5k_hw_rf_check_gainf_readback(ah) &&
                AR5K_GAIN_CHECK_ADJUST(&ah->ah_gain) &&
                ath5k_hw_rf_gainf_adjust(ah)) {
@@ -807,7 +808,7 @@ static int ath5k_hw_rfregs_init(struct ath5k_hw *ah,
                 * use b_OB and b_DB parameters stored
                 * in eeprom on ee->ee_ob[ee_mode][0]
                 *
-                * For all other chips we use OB/DB for 2Ghz
+                * For all other chips we use OB/DB for 2GHz
                 * stored in the b/g modal section just like
                 * 802.11a on ee->ee_ob[ee_mode][1] */
                if ((ah->ah_radio == AR5K_RF5111) ||
@@ -970,17 +971,20 @@ static int ath5k_hw_rfregs_init(struct ath5k_hw *ah,
                        }
 
                        /* Lower synth voltage on Rev 2 */
-                       ath5k_hw_rfb_op(ah, rf_regs, 2,
-                                       AR5K_RF_HIGH_VC_CP, true);
+                       if (ah->ah_radio == AR5K_RF5112 &&
+                           (ah->ah_radio_5ghz_revision & AR5K_SREV_REV) > 0) {
+                               ath5k_hw_rfb_op(ah, rf_regs, 2,
+                                               AR5K_RF_HIGH_VC_CP, true);
 
-                       ath5k_hw_rfb_op(ah, rf_regs, 2,
-                                       AR5K_RF_MID_VC_CP, true);
+                               ath5k_hw_rfb_op(ah, rf_regs, 2,
+                                               AR5K_RF_MID_VC_CP, true);
 
-                       ath5k_hw_rfb_op(ah, rf_regs, 2,
-                                       AR5K_RF_LOW_VC_CP, true);
+                               ath5k_hw_rfb_op(ah, rf_regs, 2,
+                                               AR5K_RF_LOW_VC_CP, true);
 
-                       ath5k_hw_rfb_op(ah, rf_regs, 2,
-                                       AR5K_RF_PUSH_UP, true);
+                               ath5k_hw_rfb_op(ah, rf_regs, 2,
+                                               AR5K_RF_PUSH_UP, true);
+                       }
 
                        /* Decrease power consumption on 5213+ BaseBand */
                        if (ah->ah_phy_revision >= AR5K_SREV_PHY_5212A) {
@@ -1259,7 +1263,7 @@ static int ath5k_hw_channel(struct ath5k_hw *ah,
 {
        int ret;
        /*
-        * Check bounds supported by the PHY (we don't care about regultory
+        * Check bounds supported by the PHY (we don't care about regulatory
         * restrictions at this point). Note: hw_value already has the band
         * (CHANNEL_2GHZ, or CHANNEL_5GHZ) so we inform ath5k_channel_ok()
         * of the band by that */
@@ -1331,7 +1335,7 @@ void ath5k_hw_init_nfcal_hist(struct ath5k_hw *ah)
 static void ath5k_hw_update_nfcal_hist(struct ath5k_hw *ah, s16 noise_floor)
 {
        struct ath5k_nfcal_hist *hist = &ah->ah_nfcal_hist;
-       hist->index = (hist->index + 1) & (ATH5K_NF_CAL_HIST_MAX-1);
+       hist->index = (hist->index + 1) & (ATH5K_NF_CAL_HIST_MAX - 1);
        hist->nfval[hist->index] = noise_floor;
 }
 
@@ -1344,10 +1348,10 @@ static s16 ath5k_hw_get_median_noise_floor(struct ath5k_hw *ah)
        memcpy(sort, ah->ah_nfcal_hist.nfval, sizeof(sort));
        for (i = 0; i < ATH5K_NF_CAL_HIST_MAX - 1; i++) {
                for (j = 1; j < ATH5K_NF_CAL_HIST_MAX - i; j++) {
-                       if (sort[j] > sort[j-1]) {
+                       if (sort[j] > sort[j - 1]) {
                                tmp = sort[j];
-                               sort[j] = sort[j-1];
-                               sort[j-1] = tmp;
+                               sort[j] = sort[j - 1];
+                               sort[j - 1] = tmp;
                        }
                }
        }
@@ -1355,7 +1359,7 @@ static s16 ath5k_hw_get_median_noise_floor(struct ath5k_hw *ah)
                ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_CALIBRATE,
                        "cal %d:%d\n", i, sort[i]);
        }
-       return sort[(ATH5K_NF_CAL_HIST_MAX-1) / 2];
+       return sort[(ATH5K_NF_CAL_HIST_MAX - 1) / 2];
 }
 
 /*
@@ -1604,11 +1608,13 @@ int ath5k_hw_phy_calibrate(struct ath5k_hw *ah,
        int ret;
 
        if (ah->ah_radio == AR5K_RF5110)
-               ret = ath5k_hw_rf5110_calibrate(ah, channel);
-       else {
-               ret = ath5k_hw_rf511x_iq_calibrate(ah);
+               return ath5k_hw_rf5110_calibrate(ah, channel);
+
+       ret = ath5k_hw_rf511x_iq_calibrate(ah);
+
+       if ((ah->ah_radio == AR5K_RF5111 || ah->ah_radio == AR5K_RF5112) &&
+           (channel->hw_value & CHANNEL_OFDM))
                ath5k_hw_request_rfgain_probe(ah);
-       }
 
        return ret;
 }
@@ -1815,7 +1821,7 @@ ath5k_hw_set_spur_mitigation_filter(struct ath5k_hw *ah,
 
        } else if (ath5k_hw_reg_read(ah, AR5K_PHY_IQ) &
        AR5K_PHY_IQ_SPUR_FILT_EN) {
-               /* Clean up spur mitigation settings and disable fliter */
+               /* Clean up spur mitigation settings and disable filter */
                AR5K_REG_WRITE_BITS(ah, AR5K_PHY_BIN_MASK_CTL,
                                        AR5K_PHY_BIN_MASK_CTL_RATE, 0);
                AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_IQ,
@@ -2080,7 +2086,7 @@ ath5k_get_interpolated_value(s16 target, s16 x_left, s16 x_right,
         * always 1 instead of 1.25, 1.75 etc). We scale up by 100
         * to have some accuracy both for 0.5 and 0.25 steps.
         */
-       ratio = ((100 * y_right - 100 * y_left)/(x_right - x_left));
+       ratio = ((100 * y_right - 100 * y_left) / (x_right - x_left));
 
        /* Now scale down to be in range */
        result = y_left + (ratio * (target - x_left) / 100);
@@ -2159,7 +2165,7 @@ ath5k_create_power_curve(s16 pmin, s16 pmax,
                        u8 *vpd_table, u8 type)
 {
        u8 idx[2] = { 0, 1 };
-       s16 pwr_i = 2*pmin;
+       s16 pwr_i = 2 * pmin;
        int i;
 
        if (num_points < 2)
@@ -2437,7 +2443,7 @@ ath5k_get_max_ctl_power(struct ath5k_hw *ah,
        }
 
        if (edge_pwr)
-               ah->ah_txpower.txp_max_pwr = 4*min(edge_pwr, max_chan_pwr);
+               ah->ah_txpower.txp_max_pwr = 4 * min(edge_pwr, max_chan_pwr);
 }
 
 
@@ -2456,7 +2462,7 @@ static void
 ath5k_fill_pwr_to_pcdac_table(struct ath5k_hw *ah, s16* table_min,
                                                        s16 *table_max)
 {
-       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
+       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
        u8      *pcdac_tmp = ah->ah_txpower.tmpL[0];
        u8      pcdac_0, pcdac_n, pcdac_i, pwr_idx, i;
        s16     min_pwr, max_pwr;
@@ -2475,8 +2481,8 @@ ath5k_fill_pwr_to_pcdac_table(struct ath5k_hw *ah, s16* table_min,
 
        /* Copy values from pcdac_tmp */
        pwr_idx = min_pwr;
-       for (i = 0 ; pwr_idx <= max_pwr &&
-       pcdac_i < AR5K_EEPROM_POWER_TABLE_SIZE; i++) {
+       for (i = 0; pwr_idx <= max_pwr &&
+                   pcdac_i < AR5K_EEPROM_POWER_TABLE_SIZE; i++) {
                pcdac_out[pcdac_i++] = pcdac_tmp[i];
                pwr_idx++;
        }
@@ -2502,7 +2508,7 @@ static void
 ath5k_combine_linear_pcdac_curves(struct ath5k_hw *ah, s16* table_min,
                                                s16 *table_max, u8 pdcurves)
 {
-       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
+       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
        u8      *pcdac_low_pwr;
        u8      *pcdac_high_pwr;
        u8      *pcdac_tmp;
@@ -2510,8 +2516,8 @@ ath5k_combine_linear_pcdac_curves(struct ath5k_hw *ah, s16* table_min,
        s16     max_pwr_idx;
        s16     min_pwr_idx;
        s16     mid_pwr_idx = 0;
-       /* Edge flag turs on the 7nth bit on the PCDAC
-        * to delcare the higher power curve (force values
+       /* Edge flag turns on the 7nth bit on the PCDAC
+        * to declare the higher power curve (force values
         * to be greater than 64). If we only have one curve
         * we don't need to set this, if we have 2 curves and
         * fill the table backwards this can also be used to
@@ -2552,7 +2558,7 @@ ath5k_combine_linear_pcdac_curves(struct ath5k_hw *ah, s16* table_min,
        }
 
        /* This is used when setting tx power*/
-       ah->ah_txpower.txp_min_idx = min_pwr_idx/2;
+       ah->ah_txpower.txp_min_idx = min_pwr_idx / 2;
 
        /* Fill Power to PCDAC table backwards */
        pwr = max_pwr_idx;
@@ -2561,14 +2567,14 @@ ath5k_combine_linear_pcdac_curves(struct ath5k_hw *ah, s16* table_min,
                 * edge flag and set pcdac_tmp to lower
                 * power curve.*/
                if (edge_flag == 0x40 &&
-               (2*pwr <= (table_max[1] - table_min[0]) || pwr == 0)) {
+               (2 * pwr <= (table_max[1] - table_min[0]) || pwr == 0)) {
                        edge_flag = 0x00;
                        pcdac_tmp = pcdac_low_pwr;
-                       pwr = mid_pwr_idx/2;
+                       pwr = mid_pwr_idx / 2;
                }
 
                /* Don't go below 1, extrapolate below if we have
-                * already swithced to the lower power curve -or
+                * already switched to the lower power curve -or
                 * we only have one curve and edge_flag is zero
                 * anyway */
                if (pcdac_tmp[pwr] < 1 && (edge_flag == 0x00)) {
@@ -2596,7 +2602,7 @@ ath5k_combine_linear_pcdac_curves(struct ath5k_hw *ah, s16* table_min,
 static void
 ath5k_write_pcdac_table(struct ath5k_hw *ah)
 {
-       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
+       u8      *pcdac_out = ah->ah_txpower.txp_pd_table;
        int     i;
 
        /*
@@ -2604,8 +2610,8 @@ ath5k_write_pcdac_table(struct ath5k_hw *ah)
         */
        for (i = 0; i < (AR5K_EEPROM_POWER_TABLE_SIZE / 2); i++) {
                ath5k_hw_reg_write(ah,
-                       (((pcdac_out[2*i + 0] << 8 | 0xff) & 0xffff) << 0) |
-                       (((pcdac_out[2*i + 1] << 8 | 0xff) & 0xffff) << 16),
+                       (((pcdac_out[2 * i + 0] << 8 | 0xff) & 0xffff) << 0) |
+                       (((pcdac_out[2 * i + 1] << 8 | 0xff) & 0xffff) << 16),
                        AR5K_PHY_PCDAC_TXPOWER(i));
        }
 }
@@ -2789,10 +2795,10 @@ ath5k_write_pwr_to_pdadc_table(struct ath5k_hw *ah, u8 ee_mode)
         */
        for (i = 0; i < (AR5K_EEPROM_POWER_TABLE_SIZE / 2); i++) {
                ath5k_hw_reg_write(ah,
-                       ((pdadc_out[4*i + 0] & 0xff) << 0) |
-                       ((pdadc_out[4*i + 1] & 0xff) << 8) |
-                       ((pdadc_out[4*i + 2] & 0xff) << 16) |
-                       ((pdadc_out[4*i + 3] & 0xff) << 24),
+                       ((pdadc_out[4 * i + 0] & 0xff) << 0) |
+                       ((pdadc_out[4 * i + 1] & 0xff) << 8) |
+                       ((pdadc_out[4 * i + 2] & 0xff) << 16) |
+                       ((pdadc_out[4 * i + 3] & 0xff) << 24),
                        AR5K_PHY_PDADC_TXPOWER(i));
        }
 }
@@ -2805,7 +2811,7 @@ ath5k_write_pwr_to_pdadc_table(struct ath5k_hw *ah, u8 ee_mode)
 /*
  * This is the main function that uses all of the above
  * to set PCDAC/PDADC table on hw for the current channel.
- * This table is used for tx power calibration on the basband,
+ * This table is used for tx power calibration on the baseband,
  * without it we get weird tx power levels and in some cases
  * distorted spectral mask
  */