diff options
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1271_init.c')
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_init.c | 128 |
1 files changed, 62 insertions, 66 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271_init.c b/drivers/net/wireless/wl12xx/wl1271_init.c index a3fc4c97c518..5c2cf1e00ac7 100644 --- a/drivers/net/wireless/wl12xx/wl1271_init.c +++ b/drivers/net/wireless/wl12xx/wl1271_init.c | |||
@@ -188,6 +188,7 @@ static int wl1271_init_beacon_broadcast(struct wl1271 *wl) | |||
188 | static int wl1271_init_general_parms(struct wl1271 *wl) | 188 | static int wl1271_init_general_parms(struct wl1271 *wl) |
189 | { | 189 | { |
190 | struct wl1271_general_parms *gen_parms; | 190 | struct wl1271_general_parms *gen_parms; |
191 | struct conf_general_parms *g = &wl->conf.init.genparam; | ||
191 | int ret; | 192 | int ret; |
192 | 193 | ||
193 | gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL); | 194 | gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL); |
@@ -196,22 +197,14 @@ static int wl1271_init_general_parms(struct wl1271 *wl) | |||
196 | 197 | ||
197 | gen_parms->id = TEST_CMD_INI_FILE_GENERAL_PARAM; | 198 | gen_parms->id = TEST_CMD_INI_FILE_GENERAL_PARAM; |
198 | 199 | ||
199 | /* | 200 | gen_parms->ref_clk = g->ref_clk; |
200 | * FIXME: The firmware crashes on boot with REF_CLK_38_4_E as clock. | 201 | gen_parms->settling_time = g->settling_time; |
201 | * according to TI engineers, ref clk 5 is an unofficial | 202 | gen_parms->clk_valid_on_wakeup = g->clk_valid_on_wakeup; |
202 | * 38.4 XTAL clock config, which seems to boot the device. | 203 | gen_parms->dc2dcmode = g->dc2dcmode; |
203 | * Restore correct value once the real problem source is | 204 | gen_parms->single_dual_band = g->single_dual_band; |
204 | * identified. | 205 | gen_parms->tx_bip_fem_autodetect = g->tx_bip_fem_autodetect; |
205 | */ | 206 | gen_parms->tx_bip_fem_manufacturer = g->tx_bip_fem_manufacturer; |
206 | gen_parms->ref_clk = 5; /* REF_CLK_38_4_E; */ | 207 | gen_parms->settings = g->settings; |
207 | /* FIXME: magic numbers */ | ||
208 | gen_parms->settling_time = 5; | ||
209 | gen_parms->clk_valid_on_wakeup = 0; | ||
210 | gen_parms->dc2dcmode = 0; | ||
211 | gen_parms->single_dual_band = 0; | ||
212 | gen_parms->tx_bip_fem_autodetect = 0; | ||
213 | gen_parms->tx_bip_fem_manufacturer = 1; | ||
214 | gen_parms->settings = 1; | ||
215 | 208 | ||
216 | ret = wl1271_cmd_test(wl, gen_parms, sizeof(*gen_parms), 0); | 209 | ret = wl1271_cmd_test(wl, gen_parms, sizeof(*gen_parms), 0); |
217 | if (ret < 0) { | 210 | if (ret < 0) { |
@@ -225,32 +218,9 @@ static int wl1271_init_general_parms(struct wl1271 *wl) | |||
225 | 218 | ||
226 | static int wl1271_init_radio_parms(struct wl1271 *wl) | 219 | static int wl1271_init_radio_parms(struct wl1271 *wl) |
227 | { | 220 | { |
228 | /* | ||
229 | * FIXME: All these magic numbers should be moved to some place where | ||
230 | * they can be configured (separate file?) | ||
231 | */ | ||
232 | |||
233 | struct wl1271_radio_parms *radio_parms; | 221 | struct wl1271_radio_parms *radio_parms; |
234 | int ret; | 222 | struct conf_radio_parms *r = &wl->conf.init.radioparam; |
235 | u8 compensation[] = { 0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8, 0xfc, 0x00, | 223 | int i, ret; |
236 | 0x08, 0x10, 0xf0, 0xf8, 0x00, 0x0a, 0x14 }; | ||
237 | |||
238 | u8 tx_rate_limits_normal[] = { 0x1e, 0x1f, 0x22, 0x24, 0x28, 0x29 }; | ||
239 | u8 tx_rate_limits_degraded[] = { 0x1b, 0x1c, 0x1e, 0x20, 0x24, 0x25 }; | ||
240 | |||
241 | u8 tx_channel_limits_11b[] = { 0x22, 0x50, 0x50, 0x50, | ||
242 | 0x50, 0x50, 0x50, 0x50, | ||
243 | 0x50, 0x50, 0x22, 0x50, | ||
244 | 0x22, 0x50 }; | ||
245 | |||
246 | u8 tx_channel_limits_ofdm[] = { 0x20, 0x50, 0x50, 0x50, | ||
247 | 0x50, 0x50, 0x50, 0x50, | ||
248 | 0x50, 0x50, 0x20, 0x50, | ||
249 | 0x20, 0x50 }; | ||
250 | |||
251 | u8 tx_pdv_rate_offsets[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; | ||
252 | |||
253 | u8 tx_ibias[] = { 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x27 }; | ||
254 | 224 | ||
255 | radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL); | 225 | radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL); |
256 | if (!radio_parms) | 226 | if (!radio_parms) |
@@ -259,33 +229,59 @@ static int wl1271_init_radio_parms(struct wl1271 *wl) | |||
259 | radio_parms->id = TEST_CMD_INI_FILE_RADIO_PARAM; | 229 | radio_parms->id = TEST_CMD_INI_FILE_RADIO_PARAM; |
260 | 230 | ||
261 | /* Static radio parameters */ | 231 | /* Static radio parameters */ |
262 | radio_parms->rx_trace_loss = 10; | 232 | radio_parms->rx_trace_loss = r->rx_trace_loss; |
263 | radio_parms->tx_trace_loss = 10; | 233 | radio_parms->tx_trace_loss = r->tx_trace_loss; |
264 | memcpy(radio_parms->rx_rssi_and_proc_compens, compensation, | 234 | memcpy(radio_parms->rx_rssi_and_proc_compens, |
265 | sizeof(compensation)); | 235 | r->rx_rssi_and_proc_compens, |
266 | 236 | CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE); | |
267 | /* We don't set the 5GHz -- N/A */ | 237 | |
238 | memcpy(radio_parms->rx_trace_loss_5, r->rx_trace_loss_5, | ||
239 | CONF_NUMBER_OF_SUB_BANDS_5); | ||
240 | memcpy(radio_parms->tx_trace_loss_5, r->tx_trace_loss_5, | ||
241 | CONF_NUMBER_OF_SUB_BANDS_5); | ||
242 | memcpy(radio_parms->rx_rssi_and_proc_compens_5, | ||
243 | r->rx_rssi_and_proc_compens_5, | ||
244 | CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE); | ||
268 | 245 | ||
269 | /* Dynamic radio parameters */ | 246 | /* Dynamic radio parameters */ |
270 | radio_parms->tx_ref_pd_voltage = cpu_to_le16(0x24e); | 247 | radio_parms->tx_ref_pd_voltage = cpu_to_le16(r->tx_ref_pd_voltage); |
271 | radio_parms->tx_ref_power = 0x78; | 248 | radio_parms->tx_ref_power = r->tx_ref_power; |
272 | radio_parms->tx_offset_db = 0x0; | 249 | radio_parms->tx_offset_db = r->tx_offset_db; |
273 | 250 | ||
274 | memcpy(radio_parms->tx_rate_limits_normal, tx_rate_limits_normal, | 251 | memcpy(radio_parms->tx_rate_limits_normal, r->tx_rate_limits_normal, |
275 | sizeof(tx_rate_limits_normal)); | 252 | CONF_NUMBER_OF_RATE_GROUPS); |
276 | memcpy(radio_parms->tx_rate_limits_degraded, tx_rate_limits_degraded, | 253 | memcpy(radio_parms->tx_rate_limits_degraded, r->tx_rate_limits_degraded, |
277 | sizeof(tx_rate_limits_degraded)); | 254 | CONF_NUMBER_OF_RATE_GROUPS); |
278 | 255 | ||
279 | memcpy(radio_parms->tx_channel_limits_11b, tx_channel_limits_11b, | 256 | memcpy(radio_parms->tx_channel_limits_11b, r->tx_channel_limits_11b, |
280 | sizeof(tx_channel_limits_11b)); | 257 | CONF_NUMBER_OF_CHANNELS_2_4); |
281 | memcpy(radio_parms->tx_channel_limits_ofdm, tx_channel_limits_ofdm, | 258 | memcpy(radio_parms->tx_channel_limits_ofdm, r->tx_channel_limits_ofdm, |
282 | sizeof(tx_channel_limits_ofdm)); | 259 | CONF_NUMBER_OF_CHANNELS_2_4); |
283 | memcpy(radio_parms->tx_pdv_rate_offsets, tx_pdv_rate_offsets, | 260 | memcpy(radio_parms->tx_pdv_rate_offsets, r->tx_pdv_rate_offsets, |
284 | sizeof(tx_pdv_rate_offsets)); | 261 | CONF_NUMBER_OF_RATE_GROUPS); |
285 | memcpy(radio_parms->tx_ibias, tx_ibias, | 262 | memcpy(radio_parms->tx_ibias, r->tx_ibias, CONF_NUMBER_OF_RATE_GROUPS); |
286 | sizeof(tx_ibias)); | 263 | |
287 | 264 | radio_parms->rx_fem_insertion_loss = r->rx_fem_insertion_loss; | |
288 | radio_parms->rx_fem_insertion_loss = 0x14; | 265 | |
266 | for (i = 0; i < CONF_NUMBER_OF_SUB_BANDS_5; i++) | ||
267 | radio_parms->tx_ref_pd_voltage_5[i] = | ||
268 | cpu_to_le16(r->tx_ref_pd_voltage_5[i]); | ||
269 | memcpy(radio_parms->tx_ref_power_5, r->tx_ref_power_5, | ||
270 | CONF_NUMBER_OF_SUB_BANDS_5); | ||
271 | memcpy(radio_parms->tx_offset_db_5, r->tx_offset_db_5, | ||
272 | CONF_NUMBER_OF_SUB_BANDS_5); | ||
273 | memcpy(radio_parms->tx_rate_limits_normal_5, | ||
274 | r->tx_rate_limits_normal_5, CONF_NUMBER_OF_RATE_GROUPS); | ||
275 | memcpy(radio_parms->tx_rate_limits_degraded_5, | ||
276 | r->tx_rate_limits_degraded_5, CONF_NUMBER_OF_RATE_GROUPS); | ||
277 | memcpy(radio_parms->tx_channel_limits_ofdm_5, | ||
278 | r->tx_channel_limits_ofdm_5, CONF_NUMBER_OF_CHANNELS_5); | ||
279 | memcpy(radio_parms->tx_pdv_rate_offsets_5, r->tx_pdv_rate_offsets_5, | ||
280 | CONF_NUMBER_OF_RATE_GROUPS); | ||
281 | memcpy(radio_parms->tx_ibias_5, r->tx_ibias_5, | ||
282 | CONF_NUMBER_OF_RATE_GROUPS); | ||
283 | memcpy(radio_parms->rx_fem_insertion_loss_5, | ||
284 | r->rx_fem_insertion_loss_5, CONF_NUMBER_OF_SUB_BANDS_5); | ||
289 | 285 | ||
290 | ret = wl1271_cmd_test(wl, radio_parms, sizeof(*radio_parms), 0); | 286 | ret = wl1271_cmd_test(wl, radio_parms, sizeof(*radio_parms), 0); |
291 | if (ret < 0) | 287 | if (ret < 0) |