diff options
| author | Rafał Miłecki <zajec5@gmail.com> | 2014-07-12 10:42:10 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2014-07-15 16:00:19 -0400 |
| commit | 6daf43216fd5171f0f44504226efeb5563538f66 (patch) | |
| tree | 78c98385aa4640e6359876c21c4a4e9576e366c3 /drivers/ssb | |
| parent | 67d392c0e900bbf885ee08b8942c3204a2cab697 (diff) | |
ssb: extract antenna gains from SPROMs revs 4+ properly
They are encoded the same way as in older SPROMs.
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/ssb')
| -rw-r--r-- | drivers/ssb/pci.c | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c index fc0bb4923ac3..6318364be590 100644 --- a/drivers/ssb/pci.c +++ b/drivers/ssb/pci.c | |||
| @@ -526,14 +526,22 @@ static void sprom_extract_r45(struct ssb_sprom *out, const u16 *in) | |||
| 526 | } | 526 | } |
| 527 | 527 | ||
| 528 | /* Extract the antenna gain values. */ | 528 | /* Extract the antenna gain values. */ |
| 529 | SPEX(antenna_gain.a0, SSB_SPROM4_AGAIN01, | 529 | out->antenna_gain.a0 = sprom_extract_antgain(out->revision, in, |
| 530 | SSB_SPROM4_AGAIN0, SSB_SPROM4_AGAIN0_SHIFT); | 530 | SSB_SPROM4_AGAIN01, |
| 531 | SPEX(antenna_gain.a1, SSB_SPROM4_AGAIN01, | 531 | SSB_SPROM4_AGAIN0, |
| 532 | SSB_SPROM4_AGAIN1, SSB_SPROM4_AGAIN1_SHIFT); | 532 | SSB_SPROM4_AGAIN0_SHIFT); |
| 533 | SPEX(antenna_gain.a2, SSB_SPROM4_AGAIN23, | 533 | out->antenna_gain.a1 = sprom_extract_antgain(out->revision, in, |
| 534 | SSB_SPROM4_AGAIN2, SSB_SPROM4_AGAIN2_SHIFT); | 534 | SSB_SPROM4_AGAIN01, |
| 535 | SPEX(antenna_gain.a3, SSB_SPROM4_AGAIN23, | 535 | SSB_SPROM4_AGAIN1, |
| 536 | SSB_SPROM4_AGAIN3, SSB_SPROM4_AGAIN3_SHIFT); | 536 | SSB_SPROM4_AGAIN1_SHIFT); |
| 537 | out->antenna_gain.a2 = sprom_extract_antgain(out->revision, in, | ||
| 538 | SSB_SPROM4_AGAIN23, | ||
| 539 | SSB_SPROM4_AGAIN2, | ||
| 540 | SSB_SPROM4_AGAIN2_SHIFT); | ||
| 541 | out->antenna_gain.a3 = sprom_extract_antgain(out->revision, in, | ||
| 542 | SSB_SPROM4_AGAIN23, | ||
| 543 | SSB_SPROM4_AGAIN3, | ||
| 544 | SSB_SPROM4_AGAIN3_SHIFT); | ||
| 537 | 545 | ||
| 538 | sprom_extract_r458(out, in); | 546 | sprom_extract_r458(out, in); |
| 539 | 547 | ||
| @@ -623,14 +631,22 @@ static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) | |||
| 623 | SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0); | 631 | SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0); |
| 624 | 632 | ||
| 625 | /* Extract the antenna gain values. */ | 633 | /* Extract the antenna gain values. */ |
| 626 | SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01, | 634 | out->antenna_gain.a0 = sprom_extract_antgain(out->revision, in, |
| 627 | SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT); | 635 | SSB_SPROM8_AGAIN01, |
| 628 | SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01, | 636 | SSB_SPROM8_AGAIN0, |
| 629 | SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT); | 637 | SSB_SPROM8_AGAIN0_SHIFT); |
| 630 | SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23, | 638 | out->antenna_gain.a1 = sprom_extract_antgain(out->revision, in, |
| 631 | SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); | 639 | SSB_SPROM8_AGAIN01, |
| 632 | SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, | 640 | SSB_SPROM8_AGAIN1, |
| 633 | SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT); | 641 | SSB_SPROM8_AGAIN1_SHIFT); |
| 642 | out->antenna_gain.a2 = sprom_extract_antgain(out->revision, in, | ||
| 643 | SSB_SPROM8_AGAIN23, | ||
| 644 | SSB_SPROM8_AGAIN2, | ||
| 645 | SSB_SPROM8_AGAIN2_SHIFT); | ||
| 646 | out->antenna_gain.a3 = sprom_extract_antgain(out->revision, in, | ||
| 647 | SSB_SPROM8_AGAIN23, | ||
| 648 | SSB_SPROM8_AGAIN3, | ||
| 649 | SSB_SPROM8_AGAIN3_SHIFT); | ||
| 634 | 650 | ||
| 635 | /* Extract cores power info info */ | 651 | /* Extract cores power info info */ |
| 636 | for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { | 652 | for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { |
