wl1271: Use NVS INI file configuration
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>
Thu, 18 Feb 2010 11:25:42 +0000 (13:25 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 19 Feb 2010 20:52:43 +0000 (15:52 -0500)
Replace the hardcoded general and radio parameter configuration in the driver
with configuration taken from the NVS file directly. Also remove the driver
dependency to the structures with the parameter data.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1271.h
drivers/net/wireless/wl12xx/wl1271_boot.c
drivers/net/wireless/wl12xx/wl1271_cmd.c
drivers/net/wireless/wl12xx/wl1271_cmd.h
drivers/net/wireless/wl12xx/wl1271_conf.h
drivers/net/wireless/wl12xx/wl1271_main.c

index d0938db043b366320bce03cd3b09d47c0ec763e8..b3a3402593dd7958e083e8c5763abd8794dcd2eb 100644 (file)
@@ -109,7 +109,33 @@ enum {
 
 #define WL1271_FW_NAME "wl1271-fw.bin"
 #define WL1271_NVS_NAME "wl1271-nvs.bin"
-#define WL1271_NVS_LEN  468
+
+/* NVS data structure */
+#define WL1271_NVS_SECTION_SIZE                  468
+
+#define WL1271_NVS_GENERAL_PARAMS_SIZE            57
+#define WL1271_NVS_GENERAL_PARAMS_SIZE_PADDED \
+       (WL1271_NVS_GENERAL_PARAMS_SIZE + 1)
+#define WL1271_NVS_STAT_RADIO_PARAMS_SIZE         17
+#define WL1271_NVS_STAT_RADIO_PARAMS_SIZE_PADDED \
+       (WL1271_NVS_STAT_RADIO_PARAMS_SIZE + 1)
+#define WL1271_NVS_DYN_RADIO_PARAMS_SIZE          65
+#define WL1271_NVS_DYN_RADIO_PARAMS_SIZE_PADDED \
+       (WL1271_NVS_DYN_RADIO_PARAMS_SIZE + 1)
+#define WL1271_NVS_FEM_COUNT                       2
+#define WL1271_NVS_INI_SPARE_SIZE                124
+
+struct wl1271_nvs_file {
+       /* NVS section */
+       u8 nvs[WL1271_NVS_SECTION_SIZE];
+
+       /* INI section */
+       u8 general_params[WL1271_NVS_GENERAL_PARAMS_SIZE_PADDED];
+       u8 stat_radio_params[WL1271_NVS_STAT_RADIO_PARAMS_SIZE_PADDED];
+       u8 dyn_radio_params[WL1271_NVS_FEM_COUNT]
+                          [WL1271_NVS_DYN_RADIO_PARAMS_SIZE_PADDED];
+       u8 ini_spare[WL1271_NVS_INI_SPARE_SIZE];
+} __attribute__ ((packed));
 
 /*
  * Enable/disable 802.11a support for WL1273
@@ -342,8 +368,7 @@ struct wl1271 {
 
        u8 *fw;
        size_t fw_len;
-       u8 *nvs;
-       size_t nvs_len;
+       struct wl1271_nvs_file *nvs;
 
        u8 bssid[ETH_ALEN];
        u8 mac_addr[ETH_ALEN];
@@ -461,6 +486,7 @@ int wl1271_plt_stop(struct wl1271 *wl);
 
 static inline bool wl1271_11a_enabled(void)
 {
+       /* FIXME: this could be determined based on the NVS-INI file */
 #ifdef WL1271_80211A_ENABLED
        return true;
 #else
index e803b876f3f03cb7efa71807024b3d2d44938f52..bc3fe0275cac321a4ba60f7942bd35dc9d803b69 100644 (file)
@@ -219,29 +219,22 @@ static int wl1271_boot_upload_nvs(struct wl1271 *wl)
        size_t nvs_len, burst_len;
        int i;
        u32 dest_addr, val;
-       u8 *nvs_ptr, *nvs, *nvs_aligned;
+       u8 *nvs_ptr, *nvs_aligned;
 
-       nvs = wl->nvs;
-       if (nvs == NULL)
+       if (wl->nvs == NULL)
                return -ENODEV;
 
-       if (wl->nvs_len < WL1271_NVS_LEN)
-               return -EINVAL;
-
-       nvs_ptr = nvs;
-
        /* only the first part of the NVS needs to be uploaded */
-       nvs_len = WL1271_NVS_LEN;
-
-       /* FIXME: read init settings from the remaining part of the NVS */
+       nvs_len = sizeof(wl->nvs->nvs);
+       nvs_ptr = (u8 *)wl->nvs->nvs;
 
        /* Update the device MAC address into the nvs */
-       nvs[11] = wl->mac_addr[0];
-       nvs[10] = wl->mac_addr[1];
-       nvs[6] = wl->mac_addr[2];
-       nvs[5] = wl->mac_addr[3];
-       nvs[4] = wl->mac_addr[4];
-       nvs[3] = wl->mac_addr[5];
+       nvs_ptr[11] = wl->mac_addr[0];
+       nvs_ptr[10] = wl->mac_addr[1];
+       nvs_ptr[6] = wl->mac_addr[2];
+       nvs_ptr[5] = wl->mac_addr[3];
+       nvs_ptr[4] = wl->mac_addr[4];
+       nvs_ptr[3] = wl->mac_addr[5];
 
        /*
         * Layout before the actual NVS tables:
@@ -283,7 +276,7 @@ static int wl1271_boot_upload_nvs(struct wl1271 *wl)
         * is 7 bytes further.
         */
        nvs_ptr += 7;
-       nvs_len -= nvs_ptr - nvs;
+       nvs_len -= nvs_ptr - (u8 *)wl->nvs->nvs;
        nvs_len = ALIGN(nvs_len, 4);
 
        /* FIXME: The driver sets the partition here, but this is not needed,
index dd2b5f0540a5ddaa712c6151c37f80391c162f64..54b5124fc0c039fa6ce7b250c77719fc4eaa47af 100644 (file)
@@ -191,43 +191,19 @@ static int wl1271_cmd_cal(struct wl1271 *wl)
 int wl1271_cmd_general_parms(struct wl1271 *wl)
 {
        struct wl1271_general_parms_cmd *gen_parms;
-       struct conf_general_parms *g = &wl->conf.init.genparam;
        int ret;
 
+       if (!wl->nvs)
+               return -ENODEV;
+
        gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
        if (!gen_parms)
                return -ENOMEM;
 
        gen_parms->test.id = TEST_CMD_INI_FILE_GENERAL_PARAM;
 
-       gen_parms->ref_clk = g->ref_clk;
-       gen_parms->settling_time = g->settling_time;
-       gen_parms->clk_valid_on_wakeup = g->clk_valid_on_wakeup;
-       gen_parms->dc2dcmode = g->dc2dcmode;
-       gen_parms->single_dual_band = g->single_dual_band;
-       gen_parms->tx_bip_fem_autodetect = g->tx_bip_fem_autodetect;
-       gen_parms->tx_bip_fem_manufacturer = g->tx_bip_fem_manufacturer;
-       gen_parms->settings = g->settings;
-
-       gen_parms->sr_state = g->sr_state;
-
-       memcpy(gen_parms->srf1,
-              g->srf1,
-              CONF_MAX_SMART_REFLEX_PARAMS);
-       memcpy(gen_parms->srf2,
-              g->srf2,
-              CONF_MAX_SMART_REFLEX_PARAMS);
-       memcpy(gen_parms->srf3,
-              g->srf3,
-              CONF_MAX_SMART_REFLEX_PARAMS);
-       memcpy(gen_parms->sr_debug_table,
-              g->sr_debug_table,
-              CONF_MAX_SMART_REFLEX_PARAMS);
-
-       gen_parms->sr_sen_n_p = g->sr_sen_n_p;
-       gen_parms->sr_sen_n_p_gain = g->sr_sen_n_p_gain;
-       gen_parms->sr_sen_nrn = g->sr_sen_nrn;
-       gen_parms->sr_sen_prn = g->sr_sen_prn;
+       memcpy(gen_parms->params, wl->nvs->general_params,
+              WL1271_NVS_GENERAL_PARAMS_SIZE);
 
        ret = wl1271_cmd_test(wl, gen_parms, sizeof(*gen_parms), 0);
        if (ret < 0)
@@ -240,8 +216,11 @@ int wl1271_cmd_general_parms(struct wl1271 *wl)
 int wl1271_cmd_radio_parms(struct wl1271 *wl)
 {
        struct wl1271_radio_parms_cmd *radio_parms;
-       struct conf_radio_parms *r = &wl->conf.init.radioparam;
-       int i, ret;
+       struct conf_radio_parms *rparam = &wl->conf.init.radioparam;
+       int ret;
+
+       if (!wl->nvs)
+               return -ENODEV;
 
        radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL);
        if (!radio_parms)
@@ -249,73 +228,13 @@ int wl1271_cmd_radio_parms(struct wl1271 *wl)
 
        radio_parms->test.id = TEST_CMD_INI_FILE_RADIO_PARAM;
 
-       /* Static radio parameters */
-       radio_parms->rx_trace_loss = r->rx_trace_loss;
-       radio_parms->tx_trace_loss = r->tx_trace_loss;
-       memcpy(radio_parms->rx_rssi_and_proc_compens,
-              r->rx_rssi_and_proc_compens,
-              CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE);
-
-       memcpy(radio_parms->rx_trace_loss_5, r->rx_trace_loss_5,
-              CONF_NUMBER_OF_SUB_BANDS_5);
-       memcpy(radio_parms->tx_trace_loss_5, r->tx_trace_loss_5,
-              CONF_NUMBER_OF_SUB_BANDS_5);
-       memcpy(radio_parms->rx_rssi_and_proc_compens_5,
-              r->rx_rssi_and_proc_compens_5,
-              CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE);
-
-       /* Dynamic radio parameters */
-       radio_parms->tx_ref_pd_voltage = cpu_to_le16(r->tx_ref_pd_voltage);
-       radio_parms->tx_ref_power = r->tx_ref_power;
-       radio_parms->tx_offset_db = r->tx_offset_db;
-
-       memcpy(radio_parms->tx_rate_limits_normal, r->tx_rate_limits_normal,
-              CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_rate_limits_degraded, r->tx_rate_limits_degraded,
-              CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_rate_limits_extreme, r->tx_rate_limits_extreme,
-              CONF_NUMBER_OF_RATE_GROUPS);
-
-       memcpy(radio_parms->tx_channel_limits_11b, r->tx_channel_limits_11b,
-              CONF_NUMBER_OF_CHANNELS_2_4);
-       memcpy(radio_parms->tx_channel_limits_ofdm, r->tx_channel_limits_ofdm,
-              CONF_NUMBER_OF_CHANNELS_2_4);
-       memcpy(radio_parms->tx_pdv_rate_offsets, r->tx_pdv_rate_offsets,
-              CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_ibias, r->tx_ibias, CONF_NUMBER_OF_RATE_GROUPS);
-
-       radio_parms->rx_fem_insertion_loss = r->rx_fem_insertion_loss;
-       radio_parms->degraded_low_to_normal_threshold =
-               r->degraded_low_to_normal_threshold;
-       radio_parms->degraded_normal_to_high_threshold =
-               r->degraded_normal_to_high_threshold;
-
-
-       for (i = 0; i < CONF_NUMBER_OF_SUB_BANDS_5; i++)
-               radio_parms->tx_ref_pd_voltage_5[i] =
-                       cpu_to_le16(r->tx_ref_pd_voltage_5[i]);
-       memcpy(radio_parms->tx_ref_power_5, r->tx_ref_power_5,
-              CONF_NUMBER_OF_SUB_BANDS_5);
-       memcpy(radio_parms->tx_offset_db_5, r->tx_offset_db_5,
-              CONF_NUMBER_OF_SUB_BANDS_5);
-       memcpy(radio_parms->tx_rate_limits_normal_5,
-              r->tx_rate_limits_normal_5, CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_rate_limits_degraded_5,
-              r->tx_rate_limits_degraded_5, CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_rate_limits_extreme_5,
-              r->tx_rate_limits_extreme_5, CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_channel_limits_ofdm_5,
-              r->tx_channel_limits_ofdm_5, CONF_NUMBER_OF_CHANNELS_5);
-       memcpy(radio_parms->tx_pdv_rate_offsets_5, r->tx_pdv_rate_offsets_5,
-              CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->tx_ibias_5, r->tx_ibias_5,
-              CONF_NUMBER_OF_RATE_GROUPS);
-       memcpy(radio_parms->rx_fem_insertion_loss_5,
-              r->rx_fem_insertion_loss_5, CONF_NUMBER_OF_SUB_BANDS_5);
-       radio_parms->degraded_low_to_normal_threshold_5 =
-               r->degraded_low_to_normal_threshold_5;
-       radio_parms->degraded_normal_to_high_threshold_5 =
-               r->degraded_normal_to_high_threshold_5;
+       memcpy(radio_parms->stat_radio_params, wl->nvs->stat_radio_params,
+              WL1271_NVS_STAT_RADIO_PARAMS_SIZE);
+       memcpy(radio_parms->dyn_radio_params,
+              wl->nvs->dyn_radio_params[rparam->fem],
+              WL1271_NVS_DYN_RADIO_PARAMS_SIZE);
+
+       /* FIXME: current NVS is missing 5GHz parameters */
 
        wl1271_dump(DEBUG_CMD, "TEST_CMD_INI_FILE_RADIO_PARAM: ",
                    radio_parms, sizeof(*radio_parms));
@@ -1022,7 +941,7 @@ int wl1271_cmd_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
        ret = wl1271_cmd_send(wl, CMD_SET_KEYS, cmd, sizeof(*cmd), 0);
        if (ret < 0) {
                wl1271_warning("could not set keys");
-               goto out;
+       goto out;
        }
 
 out:
index ba433f423c8bdc8cfdebf0d387e4cd7d29061a3b..2dc06c73532b8be497daf62fcc308b869a1ab4ba 100644 (file)
@@ -428,90 +428,24 @@ struct wl1271_general_parms_cmd {
 
        struct wl1271_cmd_test_header test;
 
-       u8 ref_clk;
-       u8 settling_time;
-       u8 clk_valid_on_wakeup;
-       u8 dc2dcmode;
-       u8 single_dual_band;
-
-       u8 tx_bip_fem_autodetect;
-       u8 tx_bip_fem_manufacturer;
-       u8 settings;
-
-       u8 sr_state;
-
-       s8 srf1[CONF_MAX_SMART_REFLEX_PARAMS];
-       s8 srf2[CONF_MAX_SMART_REFLEX_PARAMS];
-       s8 srf3[CONF_MAX_SMART_REFLEX_PARAMS];
-
-       s8 sr_debug_table[CONF_MAX_SMART_REFLEX_PARAMS];
-
-       u8 sr_sen_n_p;
-       u8 sr_sen_n_p_gain;
-       u8 sr_sen_nrn;
-       u8 sr_sen_prn;
-
-       u8 padding[3];
+       u8 params[WL1271_NVS_GENERAL_PARAMS_SIZE];
+       s8 reserved[23];
 } __attribute__ ((packed));
 
+#define WL1271_STAT_RADIO_PARAMS_5_SIZE    29
+#define WL1271_DYN_RADIO_PARAMS_5_SIZE    104
+
 struct wl1271_radio_parms_cmd {
        struct wl1271_cmd_header header;
 
        struct wl1271_cmd_test_header test;
 
-       /* Static radio parameters */
-       /* 2.4GHz */
-       u8 rx_trace_loss;
-       u8 tx_trace_loss;
-       s8 rx_rssi_and_proc_compens[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];
-
-       /* 5GHz */
-       u8 rx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       u8 tx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       s8 rx_rssi_and_proc_compens_5[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];
-
-       /* Dynamic radio parameters */
-       /* 2.4GHz */
-       __le16 tx_ref_pd_voltage;
-       u8  tx_ref_power;
-       s8  tx_offset_db;
-
-       s8  tx_rate_limits_normal[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_degraded[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_extreme[CONF_NUMBER_OF_RATE_GROUPS];
+       u8 stat_radio_params[WL1271_NVS_STAT_RADIO_PARAMS_SIZE];
+       u8 stat_radio_params_5[WL1271_STAT_RADIO_PARAMS_5_SIZE];
 
-       s8  tx_channel_limits_11b[CONF_NUMBER_OF_CHANNELS_2_4];
-       s8  tx_channel_limits_ofdm[CONF_NUMBER_OF_CHANNELS_2_4];
-       s8  tx_pdv_rate_offsets[CONF_NUMBER_OF_RATE_GROUPS];
-
-       u8  tx_ibias[CONF_NUMBER_OF_RATE_GROUPS];
-       u8  rx_fem_insertion_loss;
-
-       u8  degraded_low_to_normal_threshold;
-       u8  degraded_normal_to_high_threshold;
-
-       u8  padding1; /* our own padding, not in ref driver */
-
-       /* 5GHz */
-       __le16 tx_ref_pd_voltage_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       u8  tx_ref_power_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       s8  tx_offset_db_5[CONF_NUMBER_OF_SUB_BANDS_5];
-
-       s8  tx_rate_limits_normal_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_degraded_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_extreme_5[CONF_NUMBER_OF_RATE_GROUPS];
-
-       s8  tx_channel_limits_ofdm_5[CONF_NUMBER_OF_CHANNELS_5];
-       s8  tx_pdv_rate_offsets_5[CONF_NUMBER_OF_RATE_GROUPS];
-
-       /* FIXME: this is inconsistent with the types for 2.4GHz */
-       s8  tx_ibias_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  rx_fem_insertion_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-
-       u8  degraded_low_to_normal_threshold_5;
-       u8  degraded_normal_to_high_threshold_5;
-
-       u8 padding2[2];
+       u8 dyn_radio_params[WL1271_NVS_DYN_RADIO_PARAMS_SIZE];
+       u8 reserved;
+       u8 dyn_radio_params_5[WL1271_DYN_RADIO_PARAMS_5_SIZE];
 } __attribute__ ((packed));
 
 struct wl1271_cmd_cal_channel_tune {
index 1993d63c214ed3a0a2613c83d5f95a7ccc03fded..6f9e75cc5640b5c772d66fb47a2a2bdd21897b09 100644 (file)
@@ -735,81 +735,6 @@ enum single_dual_band_enum {
        CONF_DUAL_BAND
 };
 
-
-#define CONF_MAX_SMART_REFLEX_PARAMS 16
-
-struct conf_general_parms {
-       /*
-        * RF Reference Clock type / speed
-        *
-        * Range: CONF_REF_CLK_*
-        */
-       u8 ref_clk;
-
-       /*
-        * Settling time of the reference clock after boot.
-        *
-        * Range: u8
-        */
-       u8 settling_time;
-
-       /*
-        * Flag defining whether clock is valid on wakeup.
-        *
-        * Range: 0 - not valid on wakeup, 1 - valid on wakeup
-        */
-       u8 clk_valid_on_wakeup;
-
-       /*
-        * DC-to-DC mode.
-        *
-        * Range: Unknown
-        */
-       u8 dc2dcmode;
-
-       /*
-        * Flag defining whether used as single or dual-band.
-        *
-        * Range: CONF_SINGLE_BAND, CONF_DUAL_BAND
-        */
-       u8 single_dual_band;
-
-       /*
-        * TX bip fem autodetect flag.
-        *
-        * Range: Unknown
-        */
-       u8 tx_bip_fem_autodetect;
-
-       /*
-        * TX bip gem manufacturer.
-        *
-        * Range: Unknown
-        */
-       u8 tx_bip_fem_manufacturer;
-
-       /*
-        * Settings flags.
-        *
-        * Range: Unknown
-        */
-       u8 settings;
-
-       /* Smart reflex settings */
-       u8 sr_state;
-
-       s8 srf1[CONF_MAX_SMART_REFLEX_PARAMS];
-       s8 srf2[CONF_MAX_SMART_REFLEX_PARAMS];
-       s8 srf3[CONF_MAX_SMART_REFLEX_PARAMS];
-
-       s8 sr_debug_table[CONF_MAX_SMART_REFLEX_PARAMS];
-
-       u8 sr_sen_n_p;
-       u8 sr_sen_n_p_gain;
-       u8 sr_sen_nrn;
-       u8 sr_sen_prn;
-};
-
 #define CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE 15
 #define CONF_NUMBER_OF_SUB_BANDS_5  7
 #define CONF_NUMBER_OF_RATE_GROUPS  6
@@ -818,77 +743,14 @@ struct conf_general_parms {
 
 struct conf_radio_parms {
        /*
-        * Static radio parameters for 2.4GHz
-        *
-        * Range: unknown
-        */
-       u8 rx_trace_loss;
-       u8 tx_trace_loss;
-       s8 rx_rssi_and_proc_compens[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];
-
-       /*
-        * Static radio parameters for 5GHz
-        *
-        * Range: unknown
-        */
-       u8 rx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       u8 tx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       s8 rx_rssi_and_proc_compens_5[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];
-
-       /*
-        * Dynamic radio parameters for 2.4GHz
+        * FEM parameter set to use
         *
-        * Range: unknown
+        * Range: 0 or 1
         */
-       u16 tx_ref_pd_voltage;
-       u8  tx_ref_power;
-       s8  tx_offset_db;
-
-       s8  tx_rate_limits_normal[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_degraded[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_extreme[CONF_NUMBER_OF_RATE_GROUPS];
-
-       s8  tx_channel_limits_11b[CONF_NUMBER_OF_CHANNELS_2_4];
-       s8  tx_channel_limits_ofdm[CONF_NUMBER_OF_CHANNELS_2_4];
-       s8  tx_pdv_rate_offsets[CONF_NUMBER_OF_RATE_GROUPS];
-
-       u8  tx_ibias[CONF_NUMBER_OF_RATE_GROUPS];
-       u8  rx_fem_insertion_loss;
-
-       u8  degraded_low_to_normal_threshold;
-       u8  degraded_normal_to_high_threshold;
-
-
-       /*
-        * Dynamic radio parameters for 5GHz
-        *
-        * Range: unknown
-        */
-       u16 tx_ref_pd_voltage_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       u8  tx_ref_power_5[CONF_NUMBER_OF_SUB_BANDS_5];
-       s8  tx_offset_db_5[CONF_NUMBER_OF_SUB_BANDS_5];
-
-       s8  tx_rate_limits_normal_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_degraded_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  tx_rate_limits_extreme_5[CONF_NUMBER_OF_RATE_GROUPS];
-
-       s8  tx_channel_limits_ofdm_5[CONF_NUMBER_OF_CHANNELS_5];
-       s8  tx_pdv_rate_offsets_5[CONF_NUMBER_OF_RATE_GROUPS];
-
-       /* FIXME: this is inconsistent with the types for 2.4GHz */
-       s8  tx_ibias_5[CONF_NUMBER_OF_RATE_GROUPS];
-       s8  rx_fem_insertion_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
-
-       u8  degraded_low_to_normal_threshold_5;
-       u8  degraded_normal_to_high_threshold_5;
+       u8 fem;
 };
 
 struct conf_init_settings {
-       /*
-        * Configure general parameters.
-        */
-       struct conf_general_parms genparam;
-
        /*
         * Configure radio parameters.
         */
index 6f7a7d946359e01173c23173f023363053b32826..282c2bbfec86adbb8b7fb4e199da5c13879de095 100644 (file)
@@ -229,93 +229,8 @@ static struct conf_drv_settings default_conf = {
                .psm_entry_retries           = 3
        },
        .init = {
-               .genparam                    = {
-                       .ref_clk             = CONF_REF_CLK_38_4_E,
-                       .settling_time       = 5,
-                       .clk_valid_on_wakeup = 0,
-                       .dc2dcmode           = 0,
-                       .single_dual_band    = CONF_SINGLE_BAND,
-                       .tx_bip_fem_autodetect = 1,
-                       .tx_bip_fem_manufacturer = 1,
-                       .settings = 1,
-                       .sr_state = 1,
-                       .srf1 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
-                                 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
-                       .srf2 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
-                                 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
-                       .srf3 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
-                                 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
-                       .sr_debug_table = { 0, 0, 0, 0, 0, 0, 0, 0,
-                                           0, 0, 0, 0, 0, 0, 0, 0 },
-                       .sr_sen_n_p = 0,
-                       .sr_sen_n_p_gain = 0,
-                       .sr_sen_nrn = 0,
-                       .sr_sen_prn = 0,
-               },
                .radioparam = {
-                       .rx_trace_loss       = 0x24,
-                       .tx_trace_loss       = 0x0,
-                       .rx_rssi_and_proc_compens = {
-                               0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8,
-                               0xfc, 0x00, 0x80, 0x10, 0xf0, 0xf8,
-                               0x00, 0x0a, 0x14 },
-                       .rx_trace_loss_5     = { 0, 0, 0, 0, 0, 0, 0 },
-                       .tx_trace_loss_5     = { 0, 0, 0, 0, 0, 0, 0 },
-                       .rx_rssi_and_proc_compens_5 = {
-                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                               0x00, 0x00, 0x00 },
-                       .tx_ref_pd_voltage   = 0x1a9,
-                       .tx_ref_power        = 0x80,
-                       .tx_offset_db        = 0x0,
-                       .tx_rate_limits_normal = {
-                               0x1d, 0x1f, 0x24, 0x28, 0x28, 0x29 },
-                       .tx_rate_limits_degraded = {
-                               0x19, 0x1f, 0x22, 0x23, 0x27, 0x28 },
-                       .tx_rate_limits_extreme = {
-                               0x19, 0x1c, 0x1e, 0x20, 0x24, 0x25 },
-                       .tx_channel_limits_11b = {
-                               0x22, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50, 0x50, 0x22, 0x50,
-                               0x22, 0x50 },
-                       .tx_channel_limits_ofdm = {
-                               0x20, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50, 0x50, 0x20, 0x50,
-                               0x20, 0x50 },
-                       .tx_pdv_rate_offsets = {
-                               0x07, 0x08, 0x04, 0x02, 0x02, 0x00 },
-                       .tx_ibias            = {
-                               0x11, 0x11, 0x15, 0x11, 0x15, 0x0f },
-                       .rx_fem_insertion_loss = 0x0e,
-                       .degraded_low_to_normal_threshold = 0x1e,
-                       .degraded_normal_to_high_threshold = 0x2d,
-                       .tx_ref_pd_voltage_5 = {
-                               0x0190, 0x01a4, 0x01c3, 0x01d8,
-                               0x020a, 0x021c },
-                       .tx_ref_power_5      = {
-                               0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
-                       .tx_offset_db_5      = {
-                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-                       .tx_rate_limits_normal_5 = {
-                               0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
-                       .tx_rate_limits_degraded_5 = {
-                               0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
-                       .tx_rate_limits_extreme_5 = {
-                               0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
-                       .tx_channel_limits_ofdm_5 = {
-                               0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
-                               0x50, 0x50, 0x50 },
-                       .tx_pdv_rate_offsets_5 = {
-                               0x01, 0x02, 0x02, 0x02, 0x02, 0x00 },
-                       .tx_ibias_5          = {
-                               0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
-                       .rx_fem_insertion_loss_5 = {
-                               0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
-                       .degraded_low_to_normal_threshold_5 = 0x00,
-                       .degraded_normal_to_high_threshold_5 = 0x00
+                       .fem                 = 1,
                }
        },
        .itrim = {
@@ -345,9 +260,6 @@ static void wl1271_conf_init(struct wl1271 *wl)
 
        /* apply driver default configuration */
        memcpy(&wl->conf, &default_conf, sizeof(default_conf));
-
-       if (wl1271_11a_enabled())
-               wl->conf.init.genparam.single_dual_band = CONF_DUAL_BAND;
 }
 
 
@@ -567,15 +479,14 @@ static int wl1271_fetch_nvs(struct wl1271 *wl)
                return ret;
        }
 
-       if (fw->size % 4) {
-               wl1271_error("nvs size is not multiple of 32 bits: %zu",
-                            fw->size);
+       if (fw->size != sizeof(struct wl1271_nvs_file)) {
+               wl1271_error("nvs size is not as expected: %zu != %zu",
+                            fw->size, sizeof(struct wl1271_nvs_file));
                ret = -EILSEQ;
                goto out;
        }
 
-       wl->nvs_len = fw->size;
-       wl->nvs = kmalloc(wl->nvs_len, GFP_KERNEL);
+       wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
 
        if (!wl->nvs) {
                wl1271_error("could not allocate memory for the nvs file");
@@ -583,7 +494,7 @@ static int wl1271_fetch_nvs(struct wl1271 *wl)
                goto out;
        }
 
-       memcpy(wl->nvs, fw->data, wl->nvs_len);
+       memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
 
        ret = 0;