diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2012-04-28 20:04:13 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-05-16 12:45:22 -0400 |
commit | e2da4bd3ec7842fbef2bc7bffde3e1ad0c15f516 (patch) | |
tree | 05eeb21b157fa2b39fc0d66fc4fd2c30a9395ce6 /drivers/bcma/sprom.c | |
parent | 432c4d1eef64fc4c57faf713f361a96e58e66c72 (diff) |
bcma/ssb: parse new attributes from sprom
These newly added attributes are used by brcmsmac. Now bcma should
parse all attributes used by brcmsmac out of the sprom.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/bcma/sprom.c')
-rw-r--r-- | drivers/bcma/sprom.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c index 22c99683a180..c7f93359acb0 100644 --- a/drivers/bcma/sprom.c +++ b/drivers/bcma/sprom.c | |||
@@ -185,6 +185,18 @@ static int bcma_sprom_valid(const u16 *sprom) | |||
185 | bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \ | 185 | bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \ |
186 | sprom[SPOFF(_offset)]) & (_mask)) >> (_shift)) | 186 | sprom[SPOFF(_offset)]) & (_mask)) >> (_shift)) |
187 | 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 | |||
188 | 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) |
189 | { | 201 | { |
190 | u16 v, o; | 202 | u16 v, o; |
@@ -375,6 +387,64 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) | |||
375 | SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); | 387 | SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); |
376 | SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, | 388 | SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, |
377 | SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT); | 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); | ||
378 | } | 448 | } |
379 | 449 | ||
380 | /* | 450 | /* |