wl1271: modify wl1271_acx_ac_cfg() to use function parameters
[pandora-kernel.git] / drivers / net / wireless / wl12xx / wl1271_init.c
index 5738263..2b56a9e 100644 (file)
@@ -59,6 +59,14 @@ static int wl1271_init_templates_config(struct wl1271 *wl)
        if (ret < 0)
                return ret;
 
+       if (wl1271_11a_enabled()) {
+               ret = wl1271_cmd_template_set(wl, CMD_TEMPL_CFG_PROBE_REQ_5,
+                               NULL,
+                               sizeof(struct wl12xx_probe_req_template));
+               if (ret < 0)
+                       return ret;
+       }
+
        ret = wl1271_cmd_template_set(wl, CMD_TEMPL_NULL_DATA, NULL,
                                      sizeof(struct wl12xx_null_data_template));
        if (ret < 0)
@@ -185,125 +193,16 @@ static int wl1271_init_beacon_broadcast(struct wl1271 *wl)
        return 0;
 }
 
-static int wl1271_init_general_parms(struct wl1271 *wl)
-{
-       struct wl1271_general_parms *gen_parms;
-       int ret;
-
-       gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
-       if (!gen_parms)
-               return -ENOMEM;
-
-       gen_parms->id = TEST_CMD_INI_FILE_GENERAL_PARAM;
-
-       /*
-        * FIXME: The firmware crashes on boot with REF_CLK_38_4_E as clock.
-        *        according to TI engineers, ref clk 5 is an unofficial
-        *        38.4 XTAL clock config, which seems to boot the device.
-        *        Restore correct value once the real problem source is
-        *        identified.
-        */
-       gen_parms->ref_clk = 5; /* REF_CLK_38_4_E; */
-       /* FIXME: magic numbers */
-       gen_parms->settling_time = 5;
-       gen_parms->clk_valid_on_wakeup = 0;
-       gen_parms->dc2dcmode = 0;
-       gen_parms->single_dual_band = 0;
-       gen_parms->tx_bip_fem_autodetect = 0;
-       gen_parms->tx_bip_fem_manufacturer = 1;
-       gen_parms->settings = 1;
-
-       ret = wl1271_cmd_test(wl, gen_parms, sizeof(*gen_parms), 0);
-       if (ret < 0) {
-               wl1271_warning("CMD_INI_FILE_GENERAL_PARAM failed");
-               return ret;
-       }
-
-       kfree(gen_parms);
-       return 0;
-}
-
-static int wl1271_init_radio_parms(struct wl1271 *wl)
-{
-       /*
-        * FIXME: All these magic numbers should be moved to some place where
-        * they can be configured (separate file?)
-        */
-
-       struct wl1271_radio_parms *radio_parms;
-       int ret;
-       u8 compensation[] = { 0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8, 0xfc, 0x00,
-                             0x08, 0x10, 0xf0, 0xf8, 0x00, 0x0a, 0x14 };
-
-       u8 tx_rate_limits_normal[]   = { 0x1e, 0x1f, 0x22, 0x24, 0x28, 0x29 };
-       u8 tx_rate_limits_degraded[] = { 0x1b, 0x1c, 0x1e, 0x20, 0x24, 0x25 };
-
-       u8 tx_channel_limits_11b[] = { 0x22, 0x50, 0x50, 0x50,
-                                      0x50, 0x50, 0x50, 0x50,
-                                      0x50, 0x50, 0x22, 0x50,
-                                      0x22, 0x50 };
-
-       u8 tx_channel_limits_ofdm[] = { 0x20, 0x50, 0x50, 0x50,
-                                       0x50, 0x50, 0x50, 0x50,
-                                       0x50, 0x50, 0x20, 0x50,
-                                       0x20, 0x50 };
-
-       u8 tx_pdv_rate_offsets[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-       u8 tx_ibias[] = { 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x27 };
-
-       radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL);
-       if (!radio_parms)
-               return -ENOMEM;
-
-       radio_parms->id = TEST_CMD_INI_FILE_RADIO_PARAM;
-
-       /* Static radio parameters */
-       radio_parms->rx_trace_loss = 10;
-       radio_parms->tx_trace_loss = 10;
-       memcpy(radio_parms->rx_rssi_and_proc_compens, compensation,
-              sizeof(compensation));
-
-       /* We don't set the 5GHz -- N/A */
-
-       /* Dynamic radio parameters */
-       radio_parms->tx_ref_pd_voltage = cpu_to_le16(0x24e);
-       radio_parms->tx_ref_power = 0x78;
-       radio_parms->tx_offset_db = 0x0;
-
-       memcpy(radio_parms->tx_rate_limits_normal, tx_rate_limits_normal,
-              sizeof(tx_rate_limits_normal));
-       memcpy(radio_parms->tx_rate_limits_degraded, tx_rate_limits_degraded,
-              sizeof(tx_rate_limits_degraded));
-
-       memcpy(radio_parms->tx_channel_limits_11b, tx_channel_limits_11b,
-              sizeof(tx_channel_limits_11b));
-       memcpy(radio_parms->tx_channel_limits_ofdm, tx_channel_limits_ofdm,
-              sizeof(tx_channel_limits_ofdm));
-       memcpy(radio_parms->tx_pdv_rate_offsets, tx_pdv_rate_offsets,
-              sizeof(tx_pdv_rate_offsets));
-       memcpy(radio_parms->tx_ibias, tx_ibias,
-              sizeof(tx_ibias));
-
-       radio_parms->rx_fem_insertion_loss = 0x14;
-
-       ret = wl1271_cmd_test(wl, radio_parms, sizeof(*radio_parms), 0);
-       if (ret < 0)
-               wl1271_warning("CMD_INI_FILE_RADIO_PARAM failed");
-
-       kfree(radio_parms);
-       return ret;
-}
-
 int wl1271_hw_init(struct wl1271 *wl)
 {
-       int ret;
+       struct conf_tx_ac_category *conf_ac;
+       int ret, i;
 
-       ret = wl1271_init_general_parms(wl);
+       ret = wl1271_cmd_general_parms(wl);
        if (ret < 0)
                return ret;
 
-       ret = wl1271_init_radio_parms(wl);
+       ret = wl1271_cmd_radio_parms(wl);
        if (ret < 0)
                return ret;
 
@@ -319,8 +218,8 @@ int wl1271_hw_init(struct wl1271 *wl)
 
        /* RX config */
        ret = wl1271_init_rx_config(wl,
-                                      RX_CFG_PROMISCUOUS | RX_CFG_TSF,
-                                      RX_FILTER_OPTION_DEF);
+                                   RX_CFG_PROMISCUOUS | RX_CFG_TSF,
+                                   RX_FILTER_OPTION_DEF);
        /* RX_CONFIG_OPTION_ANY_DST_ANY_BSS,
           RX_FILTER_OPTION_FILTER_ALL); */
        if (ret < 0)
@@ -331,6 +230,10 @@ int wl1271_hw_init(struct wl1271 *wl)
        if (ret < 0)
                goto out_free_memmap;
 
+       ret = wl1271_acx_dco_itrim_params(wl);
+       if (ret < 0)
+               goto out_free_memmap;
+
        /* Initialize connection monitoring thresholds */
        ret = wl1271_acx_conn_monit_params(wl);
        if (ret < 0)
@@ -377,17 +280,22 @@ int wl1271_hw_init(struct wl1271 *wl)
                goto out_free_memmap;
 
        /* Default AC configuration */
-       ret = wl1271_acx_ac_cfg(wl);
-       if (ret < 0)
-               goto out_free_memmap;
+       for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
+               conf_ac = &wl->conf.tx.ac_conf[i];
+               ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
+                                       conf_ac->cw_max, conf_ac->aifsn,
+                                       conf_ac->tx_op_limit);
+               if (ret < 0)
+                       goto out_free_memmap;
+       }
 
        /* Configure TX rate classes */
-       ret = wl1271_acx_rate_policies(wl, ACX_RATE_MASK_ALL);
+       ret = wl1271_acx_rate_policies(wl);
        if (ret < 0)
                goto out_free_memmap;
 
        /* Enable data path */
-       ret = wl1271_cmd_data_path(wl, wl->channel, 1);
+       ret = wl1271_cmd_data_path(wl, 1);
        if (ret < 0)
                goto out_free_memmap;
 
@@ -401,8 +309,8 @@ int wl1271_hw_init(struct wl1271 *wl)
        if (ret < 0)
                goto out_free_memmap;
 
-       /* Configure smart reflex */
-       ret = wl1271_acx_smart_reflex(wl);
+       /* configure PM */
+       ret = wl1271_acx_pm_config(wl);
        if (ret < 0)
                goto out_free_memmap;