bcma: read out some additional sprom attributes
This code is copied from the ssb sprom read code. These attributes are partly used by b43 and brcmsmac and should also be read out on bcma based devices. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Tested-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
673335c8f0
commit
432c4d1eef
@ -181,6 +181,10 @@ static int bcma_sprom_valid(const u16 *sprom)
|
||||
#define SPEX(_field, _offset, _mask, _shift) \
|
||||
bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift))
|
||||
|
||||
#define SPEX32(_field, _offset, _mask, _shift) \
|
||||
bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \
|
||||
sprom[SPOFF(_offset)]) & (_mask)) >> (_shift))
|
||||
|
||||
static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
|
||||
{
|
||||
u16 v, o;
|
||||
@ -299,6 +303,78 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
|
||||
SSB_SROM8_FEM_TR_ISO_SHIFT);
|
||||
SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT,
|
||||
SSB_SROM8_FEM_ANTSWLUT_SHIFT);
|
||||
|
||||
SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A,
|
||||
SSB_SPROM8_ANTAVAIL_A_SHIFT);
|
||||
SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG,
|
||||
SSB_SPROM8_ANTAVAIL_BG_SHIFT);
|
||||
SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0);
|
||||
SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG,
|
||||
SSB_SPROM8_ITSSI_BG_SHIFT);
|
||||
SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0);
|
||||
SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A,
|
||||
SSB_SPROM8_ITSSI_A_SHIFT);
|
||||
SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0);
|
||||
SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK,
|
||||
SSB_SPROM8_MAXP_AL_SHIFT);
|
||||
SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0);
|
||||
SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1,
|
||||
SSB_SPROM8_GPIOA_P1_SHIFT);
|
||||
SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0);
|
||||
SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3,
|
||||
SSB_SPROM8_GPIOB_P3_SHIFT);
|
||||
SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0);
|
||||
SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G,
|
||||
SSB_SPROM8_TRI5G_SHIFT);
|
||||
SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0);
|
||||
SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH,
|
||||
SSB_SPROM8_TRI5GH_SHIFT);
|
||||
SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G,
|
||||
SSB_SPROM8_RXPO2G_SHIFT);
|
||||
SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G,
|
||||
SSB_SPROM8_RXPO5G_SHIFT);
|
||||
SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0);
|
||||
SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G,
|
||||
SSB_SPROM8_RSSISMC2G_SHIFT);
|
||||
SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G,
|
||||
SSB_SPROM8_RSSISAV2G_SHIFT);
|
||||
SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G,
|
||||
SSB_SPROM8_BXA2G_SHIFT);
|
||||
SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0);
|
||||
SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G,
|
||||
SSB_SPROM8_RSSISMC5G_SHIFT);
|
||||
SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G,
|
||||
SSB_SPROM8_RSSISAV5G_SHIFT);
|
||||
SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G,
|
||||
SSB_SPROM8_BXA5G_SHIFT);
|
||||
|
||||
SPEX(pa0b0, SSB_SPROM8_PA0B0, ~0, 0);
|
||||
SPEX(pa0b1, SSB_SPROM8_PA0B1, ~0, 0);
|
||||
SPEX(pa0b2, SSB_SPROM8_PA0B2, ~0, 0);
|
||||
SPEX(pa1b0, SSB_SPROM8_PA1B0, ~0, 0);
|
||||
SPEX(pa1b1, SSB_SPROM8_PA1B1, ~0, 0);
|
||||
SPEX(pa1b2, SSB_SPROM8_PA1B2, ~0, 0);
|
||||
SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, ~0, 0);
|
||||
SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, ~0, 0);
|
||||
SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, ~0, 0);
|
||||
SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, ~0, 0);
|
||||
SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, ~0, 0);
|
||||
SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, ~0, 0);
|
||||
SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, ~0, 0);
|
||||
SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, ~0, 0);
|
||||
SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, ~0, 0);
|
||||
SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, ~0, 0);
|
||||
SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, ~0, 0);
|
||||
|
||||
/* Extract the antenna gain values. */
|
||||
SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01,
|
||||
SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT);
|
||||
SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01,
|
||||
SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT);
|
||||
SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23,
|
||||
SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT);
|
||||
SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23,
|
||||
SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user