Commit bf7d420b4a3ea06d9638ec7f1b9d7971fa7f4f66

Authored by Hauke Mehrtens
Committed by John W. Linville
1 parent a255955622

ssb/bcma: fill attribute alpha2 from sprom

The attribute country_code and alpha2 are two different attributes in
the sprom. country_code contains some code in an 8 bit coding and
alpha2 contains two chars with the country code. The attributes where
read out wrongly in the past and country_code is only available on
sprom version 1.

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>

Showing 3 changed files with 14 additions and 6 deletions Side-by-side Diff

drivers/bcma/sprom.c
... ... @@ -243,7 +243,8 @@
243 243 SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, ~0, 0);
244 244 SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, ~0, 0);
245 245  
246   - SPEX(country_code, SSB_SPROM8_CCODE, ~0, 0);
  246 + SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8);
  247 + SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0);
247 248  
248 249 /* Extract cores power info info */
249 250 for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) {
... ... @@ -360,8 +360,9 @@
360 360 SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
361 361 SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
362 362 SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
363   - SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
364   - SSB_SPROM1_BINF_CCODE_SHIFT);
  363 + if (out->revision == 1)
  364 + SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
  365 + SSB_SPROM1_BINF_CCODE_SHIFT);
365 366 SPEX(ant_available_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
366 367 SSB_SPROM1_BINF_ANTA_SHIFT);
367 368 SPEX(ant_available_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
... ... @@ -387,6 +388,8 @@
387 388 SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0);
388 389 if (out->revision >= 2)
389 390 SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0);
  391 + SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8);
  392 + SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0);
390 393  
391 394 /* Extract the antenna gain values. */
392 395 out->antenna_gain.a0 = r123_extract_antgain(out->revision, in,
393 396  
... ... @@ -456,13 +459,15 @@
456 459 SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A,
457 460 SSB_SPROM4_ETHPHY_ET1A_SHIFT);
458 461 if (out->revision == 4) {
459   - SPEX(country_code, SSB_SPROM4_CCODE, 0xFFFF, 0);
  462 + SPEX(alpha2[0], SSB_SPROM4_CCODE, 0xff00, 8);
  463 + SPEX(alpha2[1], SSB_SPROM4_CCODE, 0x00ff, 0);
460 464 SPEX(boardflags_lo, SSB_SPROM4_BFLLO, 0xFFFF, 0);
461 465 SPEX(boardflags_hi, SSB_SPROM4_BFLHI, 0xFFFF, 0);
462 466 SPEX(boardflags2_lo, SSB_SPROM4_BFL2LO, 0xFFFF, 0);
463 467 SPEX(boardflags2_hi, SSB_SPROM4_BFL2HI, 0xFFFF, 0);
464 468 } else {
465   - SPEX(country_code, SSB_SPROM5_CCODE, 0xFFFF, 0);
  469 + SPEX(alpha2[0], SSB_SPROM5_CCODE, 0xff00, 8);
  470 + SPEX(alpha2[1], SSB_SPROM5_CCODE, 0x00ff, 0);
466 471 SPEX(boardflags_lo, SSB_SPROM5_BFLLO, 0xFFFF, 0);
467 472 SPEX(boardflags_hi, SSB_SPROM5_BFLHI, 0xFFFF, 0);
468 473 SPEX(boardflags2_lo, SSB_SPROM5_BFL2LO, 0xFFFF, 0);
... ... @@ -525,7 +530,8 @@
525 530 v = in[SPOFF(SSB_SPROM8_IL0MAC) + i];
526 531 *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
527 532 }
528   - SPEX(country_code, SSB_SPROM8_CCODE, 0xFFFF, 0);
  533 + SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8);
  534 + SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0);
529 535 SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0);
530 536 SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0);
531 537 SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0);
include/linux/ssb/ssb_regs.h
... ... @@ -228,6 +228,7 @@
228 228 #define SSB_SPROM1_AGAIN_BG_SHIFT 0
229 229 #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */
230 230 #define SSB_SPROM1_AGAIN_A_SHIFT 8
  231 +#define SSB_SPROM1_CCODE 0x0076
231 232  
232 233 /* SPROM Revision 2 (inherits from rev 1) */
233 234 #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */