diff options
Diffstat (limited to 'drivers/ssb/pci.c')
-rw-r--r-- | drivers/ssb/pci.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c index 973223f5de8e..befa89eac6f3 100644 --- a/drivers/ssb/pci.c +++ b/drivers/ssb/pci.c | |||
@@ -523,7 +523,13 @@ static void sprom_extract_r45(struct ssb_sprom *out, const u16 *in) | |||
523 | static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) | 523 | static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) |
524 | { | 524 | { |
525 | int i; | 525 | int i; |
526 | u16 v; | 526 | u16 v, o; |
527 | u16 pwr_info_offset[] = { | ||
528 | SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, | ||
529 | SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 | ||
530 | }; | ||
531 | BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != | ||
532 | ARRAY_SIZE(out->core_pwr_info)); | ||
527 | 533 | ||
528 | /* extract the MAC address */ | 534 | /* extract the MAC address */ |
529 | for (i = 0; i < 3; i++) { | 535 | for (i = 0; i < 3; i++) { |
@@ -607,6 +613,38 @@ static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) | |||
607 | memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, | 613 | memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, |
608 | sizeof(out->antenna_gain.ghz5)); | 614 | sizeof(out->antenna_gain.ghz5)); |
609 | 615 | ||
616 | /* Extract cores power info info */ | ||
617 | for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { | ||
618 | o = pwr_info_offset[i]; | ||
619 | SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, | ||
620 | SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); | ||
621 | SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, | ||
622 | SSB_SPROM8_2G_MAXP, 0); | ||
623 | |||
624 | SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); | ||
625 | SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); | ||
626 | SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); | ||
627 | |||
628 | SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, | ||
629 | SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); | ||
630 | SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, | ||
631 | SSB_SPROM8_5G_MAXP, 0); | ||
632 | SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, | ||
633 | SSB_SPROM8_5GH_MAXP, 0); | ||
634 | SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, | ||
635 | SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); | ||
636 | |||
637 | SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); | ||
638 | SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); | ||
639 | SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); | ||
640 | SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); | ||
641 | SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); | ||
642 | SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); | ||
643 | SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); | ||
644 | SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); | ||
645 | SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); | ||
646 | } | ||
647 | |||
610 | /* Extract FEM info */ | 648 | /* Extract FEM info */ |
611 | SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, | 649 | SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, |
612 | SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT); | 650 | SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT); |