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 | |
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')
-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++) { |