diff options
author | Gábor Stefanik <netrolller.3d@gmail.com> | 2009-08-10 15:23:08 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-14 09:14:02 -0400 |
commit | f679056b2fdd4e9b7c8eb42ba447cd9646236305 (patch) | |
tree | d10c343cca51cbd2f720b99e78739a7719daa496 /drivers/ssb | |
parent | 18889231e4527dfe23145efe318e74744794a95d (diff) |
ssb: Implement the remaining rev.8 SPROM vars needed for LP-PHY
Also add a "SPEX32" macro for extracting 32-bit SPROM variables.
Signed-off-by: Gábor Stefanik <netrolller.3d@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/ssb')
-rw-r--r-- | drivers/ssb/pci.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c index 40ea41762247..593fc618a2ea 100644 --- a/drivers/ssb/pci.c +++ b/drivers/ssb/pci.c | |||
@@ -169,8 +169,14 @@ err_pci: | |||
169 | /* Get the word-offset for a SSB_SPROM_XXX define. */ | 169 | /* Get the word-offset for a SSB_SPROM_XXX define. */ |
170 | #define SPOFF(offset) (((offset) - SSB_SPROM_BASE) / sizeof(u16)) | 170 | #define SPOFF(offset) (((offset) - SSB_SPROM_BASE) / sizeof(u16)) |
171 | /* Helper to extract some _offset, which is one of the SSB_SPROM_XXX defines. */ | 171 | /* Helper to extract some _offset, which is one of the SSB_SPROM_XXX defines. */ |
172 | #define SPEX(_outvar, _offset, _mask, _shift) \ | 172 | #define SPEX16(_outvar, _offset, _mask, _shift) \ |
173 | out->_outvar = ((in[SPOFF(_offset)] & (_mask)) >> (_shift)) | 173 | out->_outvar = ((in[SPOFF(_offset)] & (_mask)) >> (_shift)) |
174 | #define SPEX32(_outvar, _offset, _mask, _shift) \ | ||
175 | out->_outvar = ((((u32)in[SPOFF((_offset)+2)] << 16 | \ | ||
176 | in[SPOFF(_offset)]) & (_mask)) >> (_shift)) | ||
177 | #define SPEX(_outvar, _offset, _mask, _shift) \ | ||
178 | SPEX16(_outvar, _offset, _mask, _shift) | ||
179 | |||
174 | 180 | ||
175 | static inline u8 ssb_crc8(u8 crc, u8 data) | 181 | static inline u8 ssb_crc8(u8 crc, u8 data) |
176 | { | 182 | { |
@@ -480,6 +486,8 @@ static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) | |||
480 | SPEX(country_code, SSB_SPROM8_CCODE, 0xFFFF, 0); | 486 | SPEX(country_code, SSB_SPROM8_CCODE, 0xFFFF, 0); |
481 | SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); | 487 | SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); |
482 | SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0); | 488 | SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0); |
489 | SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0); | ||
490 | SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, 0xFFFF, 0); | ||
483 | SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A, | 491 | SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A, |
484 | SSB_SPROM8_ANTAVAIL_A_SHIFT); | 492 | SSB_SPROM8_ANTAVAIL_A_SHIFT); |
485 | SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, | 493 | SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, |
@@ -490,12 +498,55 @@ static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) | |||
490 | SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); | 498 | SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); |
491 | SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, | 499 | SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, |
492 | SSB_SPROM8_ITSSI_A_SHIFT); | 500 | SSB_SPROM8_ITSSI_A_SHIFT); |
501 | SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0); | ||
502 | SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK, | ||
503 | SSB_SPROM8_MAXP_AL_SHIFT); | ||
493 | SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0); | 504 | SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0); |
494 | SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1, | 505 | SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1, |
495 | SSB_SPROM8_GPIOA_P1_SHIFT); | 506 | SSB_SPROM8_GPIOA_P1_SHIFT); |
496 | SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0); | 507 | SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0); |
497 | SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3, | 508 | SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3, |
498 | SSB_SPROM8_GPIOB_P3_SHIFT); | 509 | SSB_SPROM8_GPIOB_P3_SHIFT); |
510 | SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0); | ||
511 | SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G, | ||
512 | SSB_SPROM8_TRI5G_SHIFT); | ||
513 | SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0); | ||
514 | SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH, | ||
515 | SSB_SPROM8_TRI5GH_SHIFT); | ||
516 | SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, 0); | ||
517 | SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G, | ||
518 | SSB_SPROM8_RXPO5G_SHIFT); | ||
519 | SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0); | ||
520 | SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G, | ||
521 | SSB_SPROM8_RSSISMC2G_SHIFT); | ||
522 | SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G, | ||
523 | SSB_SPROM8_RSSISAV2G_SHIFT); | ||
524 | SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G, | ||
525 | SSB_SPROM8_BXA2G_SHIFT); | ||
526 | SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0); | ||
527 | SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G, | ||
528 | SSB_SPROM8_RSSISMC5G_SHIFT); | ||
529 | SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G, | ||
530 | SSB_SPROM8_RSSISAV5G_SHIFT); | ||
531 | SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G, | ||
532 | SSB_SPROM8_BXA5G_SHIFT); | ||
533 | SPEX(pa0b0, SSB_SPROM8_PA0B0, 0xFFFF, 0); | ||
534 | SPEX(pa0b1, SSB_SPROM8_PA0B1, 0xFFFF, 0); | ||
535 | SPEX(pa0b2, SSB_SPROM8_PA0B2, 0xFFFF, 0); | ||
536 | SPEX(pa1b0, SSB_SPROM8_PA1B0, 0xFFFF, 0); | ||
537 | SPEX(pa1b1, SSB_SPROM8_PA1B1, 0xFFFF, 0); | ||
538 | SPEX(pa1b2, SSB_SPROM8_PA1B2, 0xFFFF, 0); | ||
539 | SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, 0xFFFF, 0); | ||
540 | SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, 0xFFFF, 0); | ||
541 | SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, 0xFFFF, 0); | ||
542 | SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, 0xFFFF, 0); | ||
543 | SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, 0xFFFF, 0); | ||
544 | SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, 0xFFFF, 0); | ||
545 | SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, 0xFFFF, 0); | ||
546 | SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, 0xFFFFFFFF, 0); | ||
547 | SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, 0xFFFFFFFF, 0); | ||
548 | SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, 0xFFFFFFFF, 0); | ||
549 | SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0); | ||
499 | 550 | ||
500 | /* Extract the antenna gain values. */ | 551 | /* Extract the antenna gain values. */ |
501 | SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01, | 552 | SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01, |