aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bcma
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bcma')
-rw-r--r--drivers/bcma/sprom.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
index 1799372131d2..22c99683a180 100644
--- a/drivers/bcma/sprom.c
+++ b/drivers/bcma/sprom.c
@@ -181,6 +181,10 @@ static int bcma_sprom_valid(const u16 *sprom)
181#define SPEX(_field, _offset, _mask, _shift) \ 181#define SPEX(_field, _offset, _mask, _shift) \
182 bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift)) 182 bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift))
183 183
184#define SPEX32(_field, _offset, _mask, _shift) \
185 bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \
186 sprom[SPOFF(_offset)]) & (_mask)) >> (_shift))
187
184static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom) 188static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
185{ 189{
186 u16 v, o; 190 u16 v, o;
@@ -299,6 +303,78 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
299 SSB_SROM8_FEM_TR_ISO_SHIFT); 303 SSB_SROM8_FEM_TR_ISO_SHIFT);
300 SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT, 304 SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT,
301 SSB_SROM8_FEM_ANTSWLUT_SHIFT); 305 SSB_SROM8_FEM_ANTSWLUT_SHIFT);
306
307 SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A,
308 SSB_SPROM8_ANTAVAIL_A_SHIFT);
309 SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG,
310 SSB_SPROM8_ANTAVAIL_BG_SHIFT);
311 SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0);
312 SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG,
313 SSB_SPROM8_ITSSI_BG_SHIFT);
314 SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0);
315 SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A,
316 SSB_SPROM8_ITSSI_A_SHIFT);
317 SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0);
318 SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK,
319 SSB_SPROM8_MAXP_AL_SHIFT);
320 SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0);
321 SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1,
322 SSB_SPROM8_GPIOA_P1_SHIFT);
323 SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0);
324 SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3,
325 SSB_SPROM8_GPIOB_P3_SHIFT);
326 SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0);
327 SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G,
328 SSB_SPROM8_TRI5G_SHIFT);
329 SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0);
330 SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH,
331 SSB_SPROM8_TRI5GH_SHIFT);
332 SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G,
333 SSB_SPROM8_RXPO2G_SHIFT);
334 SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G,
335 SSB_SPROM8_RXPO5G_SHIFT);
336 SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0);
337 SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G,
338 SSB_SPROM8_RSSISMC2G_SHIFT);
339 SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G,
340 SSB_SPROM8_RSSISAV2G_SHIFT);
341 SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G,
342 SSB_SPROM8_BXA2G_SHIFT);
343 SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0);
344 SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G,
345 SSB_SPROM8_RSSISMC5G_SHIFT);
346 SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G,
347 SSB_SPROM8_RSSISAV5G_SHIFT);
348 SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G,
349 SSB_SPROM8_BXA5G_SHIFT);
350
351 SPEX(pa0b0, SSB_SPROM8_PA0B0, ~0, 0);
352 SPEX(pa0b1, SSB_SPROM8_PA0B1, ~0, 0);
353 SPEX(pa0b2, SSB_SPROM8_PA0B2, ~0, 0);
354 SPEX(pa1b0, SSB_SPROM8_PA1B0, ~0, 0);
355 SPEX(pa1b1, SSB_SPROM8_PA1B1, ~0, 0);
356 SPEX(pa1b2, SSB_SPROM8_PA1B2, ~0, 0);
357 SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, ~0, 0);
358 SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, ~0, 0);
359 SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, ~0, 0);
360 SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, ~0, 0);
361 SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, ~0, 0);
362 SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, ~0, 0);
363 SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, ~0, 0);
364 SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, ~0, 0);
365 SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, ~0, 0);
366 SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, ~0, 0);
367 SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, ~0, 0);
368
369 /* Extract the antenna gain values. */
370 SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01,
371 SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT);
372 SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01,
373 SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT);
374 SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23,
375 SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT);
376 SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23,
377 SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT);
302} 378}
303 379
304/* 380/*