diff options
Diffstat (limited to 'drivers/bcma/sprom.c')
-rw-r--r-- | drivers/bcma/sprom.c | 149 |
1 files changed, 148 insertions, 1 deletions
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c index 3e2a6002aae6..c7f93359acb0 100644 --- a/drivers/bcma/sprom.c +++ b/drivers/bcma/sprom.c | |||
@@ -181,6 +181,22 @@ static int bcma_sprom_valid(const u16 *sprom) | |||
181 | #define SPEX(_field, _offset, _mask, _shift) \ | 181 | #define SPEX(_field, _offset, _mask, _shift) \ |
182 | bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift)) | 182 | bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift)) |
183 | 183 | ||
184 | #define SPEX32(_field, _offset, _mask, _shift) \ | ||
185 | bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \ | ||
186 | sprom[SPOFF(_offset)]) & (_mask)) >> (_shift)) | ||
187 | |||
188 | #define SPEX_ARRAY8(_field, _offset, _mask, _shift) \ | ||
189 | do { \ | ||
190 | SPEX(_field[0], _offset + 0, _mask, _shift); \ | ||
191 | SPEX(_field[1], _offset + 2, _mask, _shift); \ | ||
192 | SPEX(_field[2], _offset + 4, _mask, _shift); \ | ||
193 | SPEX(_field[3], _offset + 6, _mask, _shift); \ | ||
194 | SPEX(_field[4], _offset + 8, _mask, _shift); \ | ||
195 | SPEX(_field[5], _offset + 10, _mask, _shift); \ | ||
196 | SPEX(_field[6], _offset + 12, _mask, _shift); \ | ||
197 | SPEX(_field[7], _offset + 14, _mask, _shift); \ | ||
198 | } while (0) | ||
199 | |||
184 | static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) | 200 | static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) |
185 | { | 201 | { |
186 | u16 v, o; | 202 | u16 v, o; |
@@ -243,7 +259,8 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) | |||
243 | SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, ~0, 0); | 259 | SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, ~0, 0); |
244 | SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, ~0, 0); | 260 | SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, ~0, 0); |
245 | 261 | ||
246 | SPEX(country_code, SSB_SPROM8_CCODE, ~0, 0); | 262 | SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); |
263 | SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); | ||
247 | 264 | ||
248 | /* Extract cores power info info */ | 265 | /* Extract cores power info info */ |
249 | for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { | 266 | for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { |
@@ -298,6 +315,136 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) | |||
298 | SSB_SROM8_FEM_TR_ISO_SHIFT); | 315 | SSB_SROM8_FEM_TR_ISO_SHIFT); |
299 | SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT, | 316 | SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT, |
300 | SSB_SROM8_FEM_ANTSWLUT_SHIFT); | 317 | SSB_SROM8_FEM_ANTSWLUT_SHIFT); |
318 | |||
319 | SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A, | ||
320 | SSB_SPROM8_ANTAVAIL_A_SHIFT); | ||
321 | SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, | ||
322 | SSB_SPROM8_ANTAVAIL_BG_SHIFT); | ||
323 | SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0); | ||
324 | SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG, | ||
325 | SSB_SPROM8_ITSSI_BG_SHIFT); | ||
326 | SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); | ||
327 | SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, | ||
328 | SSB_SPROM8_ITSSI_A_SHIFT); | ||
329 | SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0); | ||
330 | SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK, | ||
331 | SSB_SPROM8_MAXP_AL_SHIFT); | ||
332 | SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0); | ||
333 | SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1, | ||
334 | SSB_SPROM8_GPIOA_P1_SHIFT); | ||
335 | SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0); | ||
336 | SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3, | ||
337 | SSB_SPROM8_GPIOB_P3_SHIFT); | ||
338 | SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0); | ||
339 | SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G, | ||
340 | SSB_SPROM8_TRI5G_SHIFT); | ||
341 | SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0); | ||
342 | SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH, | ||
343 | SSB_SPROM8_TRI5GH_SHIFT); | ||
344 | SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, | ||
345 | SSB_SPROM8_RXPO2G_SHIFT); | ||
346 | SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G, | ||
347 | SSB_SPROM8_RXPO5G_SHIFT); | ||
348 | SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0); | ||
349 | SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G, | ||
350 | SSB_SPROM8_RSSISMC2G_SHIFT); | ||
351 | SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G, | ||
352 | SSB_SPROM8_RSSISAV2G_SHIFT); | ||
353 | SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G, | ||
354 | SSB_SPROM8_BXA2G_SHIFT); | ||
355 | SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0); | ||
356 | SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G, | ||
357 | SSB_SPROM8_RSSISMC5G_SHIFT); | ||
358 | SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G, | ||
359 | SSB_SPROM8_RSSISAV5G_SHIFT); | ||
360 | SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G, | ||
361 | SSB_SPROM8_BXA5G_SHIFT); | ||
362 | |||
363 | SPEX(pa0b0, SSB_SPROM8_PA0B0, ~0, 0); | ||
364 | SPEX(pa0b1, SSB_SPROM8_PA0B1, ~0, 0); | ||
365 | SPEX(pa0b2, SSB_SPROM8_PA0B2, ~0, 0); | ||
366 | SPEX(pa1b0, SSB_SPROM8_PA1B0, ~0, 0); | ||
367 | SPEX(pa1b1, SSB_SPROM8_PA1B1, ~0, 0); | ||
368 | SPEX(pa1b2, SSB_SPROM8_PA1B2, ~0, 0); | ||
369 | SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, ~0, 0); | ||
370 | SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, ~0, 0); | ||
371 | SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, ~0, 0); | ||
372 | SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, ~0, 0); | ||
373 | SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, ~0, 0); | ||
374 | SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, ~0, 0); | ||
375 | SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, ~0, 0); | ||
376 | SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, ~0, 0); | ||
377 | SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, ~0, 0); | ||
378 | SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, ~0, 0); | ||
379 | SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, ~0, 0); | ||
380 | |||
381 | /* Extract the antenna gain values. */ | ||
382 | SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01, | ||
383 | SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT); | ||
384 | SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01, | ||
385 | SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT); | ||
386 | SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23, | ||
387 | SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); | ||
388 | SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, | ||
389 | SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT); | ||
390 | |||
391 | SPEX(leddc_on_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_ON, | ||
392 | SSB_SPROM8_LEDDC_ON_SHIFT); | ||
393 | SPEX(leddc_off_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_OFF, | ||
394 | SSB_SPROM8_LEDDC_OFF_SHIFT); | ||
395 | |||
396 | SPEX(txchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_TXCHAIN, | ||
397 | SSB_SPROM8_TXRXC_TXCHAIN_SHIFT); | ||
398 | SPEX(rxchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_RXCHAIN, | ||
399 | SSB_SPROM8_TXRXC_RXCHAIN_SHIFT); | ||
400 | SPEX(antswitch, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_SWITCH, | ||
401 | SSB_SPROM8_TXRXC_SWITCH_SHIFT); | ||
402 | |||
403 | SPEX(opo, SSB_SPROM8_OFDM2GPO, 0x00ff, 0); | ||
404 | |||
405 | SPEX_ARRAY8(mcs2gpo, SSB_SPROM8_2G_MCSPO, ~0, 0); | ||
406 | SPEX_ARRAY8(mcs5gpo, SSB_SPROM8_5G_MCSPO, ~0, 0); | ||
407 | SPEX_ARRAY8(mcs5glpo, SSB_SPROM8_5GL_MCSPO, ~0, 0); | ||
408 | SPEX_ARRAY8(mcs5ghpo, SSB_SPROM8_5GH_MCSPO, ~0, 0); | ||
409 | |||
410 | SPEX(rawtempsense, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_RAWTEMP, | ||
411 | SSB_SPROM8_RAWTS_RAWTEMP_SHIFT); | ||
412 | SPEX(measpower, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_MEASPOWER, | ||
413 | SSB_SPROM8_RAWTS_MEASPOWER_SHIFT); | ||
414 | SPEX(tempsense_slope, SSB_SPROM8_OPT_CORRX, | ||
415 | SSB_SPROM8_OPT_CORRX_TEMP_SLOPE, | ||
416 | SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT); | ||
417 | SPEX(tempcorrx, SSB_SPROM8_OPT_CORRX, SSB_SPROM8_OPT_CORRX_TEMPCORRX, | ||
418 | SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT); | ||
419 | SPEX(tempsense_option, SSB_SPROM8_OPT_CORRX, | ||
420 | SSB_SPROM8_OPT_CORRX_TEMP_OPTION, | ||
421 | SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT); | ||
422 | SPEX(freqoffset_corr, SSB_SPROM8_HWIQ_IQSWP, | ||
423 | SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR, | ||
424 | SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT); | ||
425 | SPEX(iqcal_swp_dis, SSB_SPROM8_HWIQ_IQSWP, | ||
426 | SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP, | ||
427 | SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT); | ||
428 | SPEX(hw_iqcal_en, SSB_SPROM8_HWIQ_IQSWP, SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL, | ||
429 | SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT); | ||
430 | |||
431 | SPEX(bw40po, SSB_SPROM8_BW40PO, ~0, 0); | ||
432 | SPEX(cddpo, SSB_SPROM8_CDDPO, ~0, 0); | ||
433 | SPEX(stbcpo, SSB_SPROM8_STBCPO, ~0, 0); | ||
434 | SPEX(bwduppo, SSB_SPROM8_BWDUPPO, ~0, 0); | ||
435 | |||
436 | SPEX(tempthresh, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_TRESH, | ||
437 | SSB_SPROM8_THERMAL_TRESH_SHIFT); | ||
438 | SPEX(tempoffset, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_OFFSET, | ||
439 | SSB_SPROM8_THERMAL_OFFSET_SHIFT); | ||
440 | SPEX(phycal_tempdelta, SSB_SPROM8_TEMPDELTA, | ||
441 | SSB_SPROM8_TEMPDELTA_PHYCAL, | ||
442 | SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT); | ||
443 | SPEX(temps_period, SSB_SPROM8_TEMPDELTA, SSB_SPROM8_TEMPDELTA_PERIOD, | ||
444 | SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT); | ||
445 | SPEX(temps_hysteresis, SSB_SPROM8_TEMPDELTA, | ||
446 | SSB_SPROM8_TEMPDELTA_HYSTERESIS, | ||
447 | SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT); | ||
301 | } | 448 | } |
302 | 449 | ||
303 | /* | 450 | /* |