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, |
