]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
iwlagn: remove calibration knowledge
authorJohannes Berg <johannes.berg@intel.com>
Fri, 25 Nov 2011 19:11:43 +0000 (11:11 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 28 Nov 2011 19:44:25 +0000 (14:44 -0500)
The init microcode knows very well which calibrations
are required and sends us results for those that are.
Consequently, we can just send all of those to the RT
uCode again.

The problem with having the driver know about this is
that it is a uCode feature, not a hardware feature so
the config is completely unsuitable.

The only thing we need to check is whether the device
needs crystal calibration or not, add a new parameter
to the configuration for that.

This makes new uCode work on 6000 series devices.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-1000.c
drivers/net/wireless/iwlwifi/iwl-2000.c
drivers/net/wireless/iwlwifi/iwl-5000.c
drivers/net/wireless/iwlwifi/iwl-6000.c
drivers/net/wireless/iwlwifi/iwl-agn-calib.c
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-shared.h

index e12b48c2cff6ab71e097d38c9632eeb11044bed0..bc9bbbb2b494d4d6f555176f8e217624189cb3b1 100644 (file)
@@ -147,16 +147,7 @@ static int iwl1000_hw_set_hw_params(struct iwl_priv *priv)
        iwl1000_set_ct_threshold(priv);
 
        /* Set initial sensitivity parameters */
-       /* Set initial calibration set */
        hw_params(priv).sens = &iwl1000_sensitivity;
-       hw_params(priv).calib_init_cfg =
-                       BIT(IWL_CALIB_XTAL)             |
-                       BIT(IWL_CALIB_LO)               |
-                       BIT(IWL_CALIB_TX_IQ)            |
-                       BIT(IWL_CALIB_TX_IQ_PERD)       |
-                       BIT(IWL_CALIB_BASE_BAND);
-       if (priv->cfg->need_dc_calib)
-               hw_params(priv).calib_init_cfg |= BIT(IWL_CALIB_DC);
 
        return 0;
 }
index b3193571ed07b3797f9e05783956a57384a63d06..0c4688d95b652be661562fb08690a661b3bbafd9 100644 (file)
@@ -143,17 +143,7 @@ static int iwl2000_hw_set_hw_params(struct iwl_priv *priv)
        iwl2000_set_ct_threshold(priv);
 
        /* Set initial sensitivity parameters */
-       /* Set initial calibration set */
        hw_params(priv).sens = &iwl2000_sensitivity;
-       hw_params(priv).calib_init_cfg =
-               BIT(IWL_CALIB_XTAL)             |
-               BIT(IWL_CALIB_LO)               |
-               BIT(IWL_CALIB_TX_IQ)            |
-               BIT(IWL_CALIB_BASE_BAND);
-       if (priv->cfg->need_dc_calib)
-               hw_params(priv).calib_rt_cfg |= IWL_CALIB_CFG_DC_IDX;
-       if (priv->cfg->need_temp_offset_calib)
-               hw_params(priv).calib_init_cfg |= BIT(IWL_CALIB_TEMP_OFFSET);
 
        return 0;
 }
@@ -258,7 +248,6 @@ static struct iwl_bt_params iwl2030_bt_params = {
        .eeprom_calib_ver = EEPROM_2000_TX_POWER_VERSION,       \
        .lib = &iwl2000_lib,                                    \
        .base_params = &iwl2000_base_params,                    \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .temp_offset_v2 = true,                                 \
        .led_mode = IWL_LED_RF_STATE,                           \
@@ -286,7 +275,6 @@ struct iwl_cfg iwl2000_2bgn_d_cfg = {
        .lib = &iwl2030_lib,                                    \
        .base_params = &iwl2030_base_params,                    \
        .bt_params = &iwl2030_bt_params,                        \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .temp_offset_v2 = true,                                 \
        .led_mode = IWL_LED_RF_STATE,                           \
@@ -308,7 +296,6 @@ struct iwl_cfg iwl2030_2bgn_cfg = {
        .eeprom_calib_ver = EEPROM_2000_TX_POWER_VERSION,       \
        .lib = &iwl2000_lib,                                    \
        .base_params = &iwl2000_base_params,                    \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .temp_offset_v2 = true,                                 \
        .led_mode = IWL_LED_RF_STATE,                           \
@@ -338,7 +325,6 @@ struct iwl_cfg iwl105_bgn_d_cfg = {
        .lib = &iwl2030_lib,                                    \
        .base_params = &iwl2030_base_params,                    \
        .bt_params = &iwl2030_bt_params,                        \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .temp_offset_v2 = true,                                 \
        .led_mode = IWL_LED_RF_STATE,                           \
index c511c98a89a81284e03f621705cbd09736616297..3a3f83032382141c5bde2a7599949cb83213390c 100644 (file)
@@ -186,14 +186,7 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv)
        iwl5000_set_ct_threshold(priv);
 
        /* Set initial sensitivity parameters */
-       /* Set initial calibration set */
        hw_params(priv).sens = &iwl5000_sensitivity;
-       hw_params(priv).calib_init_cfg =
-               BIT(IWL_CALIB_XTAL)             |
-               BIT(IWL_CALIB_LO)               |
-               BIT(IWL_CALIB_TX_IQ)            |
-               BIT(IWL_CALIB_TX_IQ_PERD)       |
-               BIT(IWL_CALIB_BASE_BAND);
 
        return 0;
 }
@@ -222,14 +215,7 @@ static int iwl5150_hw_set_hw_params(struct iwl_priv *priv)
        iwl5150_set_ct_threshold(priv);
 
        /* Set initial sensitivity parameters */
-       /* Set initial calibration set */
        hw_params(priv).sens = &iwl5150_sensitivity;
-       hw_params(priv).calib_init_cfg =
-               BIT(IWL_CALIB_LO)               |
-               BIT(IWL_CALIB_TX_IQ)            |
-               BIT(IWL_CALIB_BASE_BAND);
-       if (priv->cfg->need_dc_calib)
-               hw_params(priv).calib_init_cfg |= BIT(IWL_CALIB_DC);
 
        return 0;
 }
@@ -433,7 +419,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
        .eeprom_calib_ver = EEPROM_5050_TX_POWER_VERSION,       \
        .lib = &iwl5150_lib,                                    \
        .base_params = &iwl5000_base_params,                    \
-       .need_dc_calib = true,                                  \
+       .no_xtal_calib = true,                                  \
        .led_mode = IWL_LED_BLINK,                              \
        .internal_wimax_coex = true
 
index ee3363fdf309d8881d47849154a2a567720ec271..09f037824f8167afff883eed90bd6e5250e15e07 100644 (file)
@@ -164,17 +164,7 @@ static int iwl6000_hw_set_hw_params(struct iwl_priv *priv)
        iwl6000_set_ct_threshold(priv);
 
        /* Set initial sensitivity parameters */
-       /* Set initial calibration set */
        hw_params(priv).sens = &iwl6000_sensitivity;
-       hw_params(priv).calib_init_cfg =
-               BIT(IWL_CALIB_XTAL)             |
-               BIT(IWL_CALIB_LO)               |
-               BIT(IWL_CALIB_TX_IQ)            |
-               BIT(IWL_CALIB_BASE_BAND);
-       if (priv->cfg->need_dc_calib)
-               hw_params(priv).calib_rt_cfg |= IWL_CALIB_CFG_DC_IDX;
-       if (priv->cfg->need_temp_offset_calib)
-               hw_params(priv).calib_init_cfg |= BIT(IWL_CALIB_TEMP_OFFSET);
 
        return 0;
 }
@@ -364,7 +354,6 @@ static struct iwl_bt_params iwl6000_bt_params = {
        .eeprom_calib_ver = EEPROM_6005_TX_POWER_VERSION,       \
        .lib = &iwl6000_lib,                                    \
        .base_params = &iwl6000_g2_base_params,                 \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .led_mode = IWL_LED_RF_STATE
 
@@ -406,7 +395,6 @@ struct iwl_cfg iwl6005_2agn_d_cfg = {
        .lib = &iwl6030_lib,                                    \
        .base_params = &iwl6000_g2_base_params,                 \
        .bt_params = &iwl6000_bt_params,                        \
-       .need_dc_calib = true,                                  \
        .need_temp_offset_calib = true,                         \
        .led_mode = IWL_LED_RF_STATE,                           \
        .adv_pm = true                                          \
@@ -506,7 +494,6 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
        .eeprom_ver = EEPROM_6050_EEPROM_VERSION,               \
        .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,       \
        .base_params = &iwl6050_base_params,                    \
-       .need_dc_calib = true,                                  \
        .led_mode = IWL_LED_BLINK,                              \
        .internal_wimax_coex = true
 
@@ -530,7 +517,6 @@ struct iwl_cfg iwl6050_2abg_cfg = {
        .eeprom_ver = EEPROM_6150_EEPROM_VERSION,               \
        .eeprom_calib_ver = EEPROM_6150_TX_POWER_VERSION,       \
        .base_params = &iwl6050_base_params,                    \
-       .need_dc_calib = true,                                  \
        .led_mode = IWL_LED_BLINK,                              \
        .internal_wimax_coex = true
 
@@ -555,7 +541,6 @@ struct iwl_cfg iwl6000_3agn_cfg = {
        .lib = &iwl6000_lib,
        .base_params = &iwl6000_base_params,
        .ht_params = &iwl6000_ht_params,
-       .need_dc_calib = true,
        .led_mode = IWL_LED_BLINK,
 };
 
index 03bac48558b25be81e810963f6c82f32dc9b89d7..c7bcafabb3b3424ae5a0de0ed51c7c3ede5b8bb5 100644 (file)
@@ -84,30 +84,28 @@ struct statistics_general_data {
 
 int iwl_send_calib_results(struct iwl_priv *priv)
 {
-       int ret = 0;
-       int i = 0;
-
        struct iwl_host_cmd hcmd = {
                .id = REPLY_PHY_CALIBRATION_CMD,
                .flags = CMD_SYNC,
        };
+       int i = 0;
 
        for (i = 0; i < IWL_CALIB_MAX; i++) {
-               if ((BIT(i) & hw_params(priv).calib_init_cfg) &&
-                   priv->calib_results[i].buf) {
-                       hcmd.len[0] = priv->calib_results[i].buf_len;
-                       hcmd.data[0] = priv->calib_results[i].buf;
-                       hcmd.dataflags[0] = IWL_HCMD_DFL_NOCOPY;
-                       ret = iwl_trans_send_cmd(trans(priv), &hcmd);
-                       if (ret) {
-                               IWL_ERR(priv, "Error %d iteration %d\n",
-                                       ret, i);
-                               break;
-                       }
+               int ret;
+
+               if (!priv->calib_results[i].buf)
+                       continue;
+               hcmd.len[0] = priv->calib_results[i].buf_len;
+               hcmd.data[0] = priv->calib_results[i].buf;
+               hcmd.dataflags[0] = IWL_HCMD_DFL_NOCOPY;
+               ret = iwl_trans_send_cmd(trans(priv), &hcmd);
+               if (ret) {
+                       IWL_ERR(priv, "Error %d iteration %d\n", ret, i);
+                       return ret;
                }
        }
 
-       return ret;
+       return 0;
 }
 
 int iwl_calib_set(struct iwl_calib_result *res, const u8 *buf, int len)
index 9ec315b31d453cb0b9d71531ba060b9a23ff27d8..7043fdb13986d7635262dc2d88a9dc6ae7400ffb 100644 (file)
@@ -477,9 +477,11 @@ static int iwlagn_alive_notify(struct iwl_priv *priv)
        if (ret)
                return ret;
 
-       ret = iwlagn_set_Xtal_calib(priv);
-       if (ret)
-               return ret;
+       if (!priv->cfg->no_xtal_calib) {
+               ret = iwlagn_set_Xtal_calib(priv);
+               if (ret)
+                       return ret;
+       }
 
        return iwl_send_calib_results(priv);
 }
index fa47f75185dfe57745f5f3b38f3174a76e431155..f1d9d0c13e4c0ced4542b5ff2aa293ebb37e6def 100644 (file)
@@ -184,8 +184,9 @@ struct iwl_ht_params {
  * @ht_params: point to ht patameters
  * @bt_params: pointer to bt parameters
  * @pa_type: used by 6000 series only to identify the type of Power Amplifier
- * @need_dc_calib: need to perform init dc calibration
  * @need_temp_offset_calib: need to perform temperature offset calibration
+ * @no_xtal_calib: some devices do not need crystal calibration data,
+ *     don't send it to those
  * @scan_antennas: available antenna for scan operation
  * @led_mode: 0=blinking, 1=On(RF On)/Off(RF Off)
  * @adv_pm: advance power management
@@ -222,8 +223,8 @@ struct iwl_cfg {
        struct iwl_ht_params *ht_params;
        struct iwl_bt_params *bt_params;
        enum iwl_pa_type pa_type;         /* if used set to IWL_PA_SYSTEM */
-       const bool need_dc_calib;         /* if used set to true */
        const bool need_temp_offset_calib; /* if used set to true */
+       const bool no_xtal_calib;
        u8 scan_rx_antennas[IEEE80211_NUM_BANDS];
        enum iwl_led_mode led_mode;
        const bool adv_pm;
index 1f7a93c67c45ed67998389ac406917875e826125..47be77a8a0a78a8a325dc567cfd9eab532906831 100644 (file)
@@ -174,7 +174,6 @@ struct iwl_mod_params {
  * @ct_kill_exit_threshold: when to reeable the device - in hw dependent unit
  *     relevant for 1000, 6000 and up
  * @wd_timeout: TX queues watchdog timeout
- * @calib_init_cfg: setup initial calibrations for the hw
  * @calib_rt_cfg: setup runtime calibrations for the hw
  * @struct iwl_sensitivity_ranges: range of sensitivity values
  */
@@ -195,7 +194,6 @@ struct iwl_hw_params {
        u32 ct_kill_exit_threshold;
        unsigned int wd_timeout;
 
-       u32 calib_init_cfg;
        u32 calib_rt_cfg;
        const struct iwl_sensitivity_ranges *sens;
 };