020-ssb_update.patch 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. --- a/drivers/ssb/pci.c
  2. +++ b/drivers/ssb/pci.c
  3. @@ -607,6 +607,29 @@ static void sprom_extract_r8(struct ssb_
  4. memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24,
  5. sizeof(out->antenna_gain.ghz5));
  6. + /* Extract FEM info */
  7. + SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G,
  8. + SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
  9. + SPEX(fem.ghz2.extpa_gain, SSB_SPROM8_FEM2G,
  10. + SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
  11. + SPEX(fem.ghz2.pdet_range, SSB_SPROM8_FEM2G,
  12. + SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
  13. + SPEX(fem.ghz2.tr_iso, SSB_SPROM8_FEM2G,
  14. + SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
  15. + SPEX(fem.ghz2.antswlut, SSB_SPROM8_FEM2G,
  16. + SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
  17. +
  18. + SPEX(fem.ghz5.tssipos, SSB_SPROM8_FEM5G,
  19. + SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
  20. + SPEX(fem.ghz5.extpa_gain, SSB_SPROM8_FEM5G,
  21. + SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
  22. + SPEX(fem.ghz5.pdet_range, SSB_SPROM8_FEM5G,
  23. + SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
  24. + SPEX(fem.ghz5.tr_iso, SSB_SPROM8_FEM5G,
  25. + SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
  26. + SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G,
  27. + SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
  28. +
  29. sprom_extract_r458(out, in);
  30. /* TODO - get remaining rev 8 stuff needed */
  31. --- a/include/linux/ssb/ssb.h
  32. +++ b/include/linux/ssb/ssb.h
  33. @@ -94,6 +94,15 @@ struct ssb_sprom {
  34. } ghz5; /* 5GHz band */
  35. } antenna_gain;
  36. + struct {
  37. + struct {
  38. + u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
  39. + } ghz2;
  40. + struct {
  41. + u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
  42. + } ghz5;
  43. + } fem;
  44. +
  45. /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */
  46. };
  47. --- a/include/linux/ssb/ssb_regs.h
  48. +++ b/include/linux/ssb/ssb_regs.h
  49. @@ -432,6 +432,23 @@
  50. #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */
  51. #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */
  52. #define SSB_SPROM8_RXPO5G_SHIFT 8
  53. +#define SSB_SPROM8_FEM2G 0x00AE
  54. +#define SSB_SPROM8_FEM5G 0x00B0
  55. +#define SSB_SROM8_FEM_TSSIPOS 0x0001
  56. +#define SSB_SROM8_FEM_TSSIPOS_SHIFT 0
  57. +#define SSB_SROM8_FEM_EXTPA_GAIN 0x0006
  58. +#define SSB_SROM8_FEM_EXTPA_GAIN_SHIFT 1
  59. +#define SSB_SROM8_FEM_PDET_RANGE 0x00F8
  60. +#define SSB_SROM8_FEM_PDET_RANGE_SHIFT 3
  61. +#define SSB_SROM8_FEM_TR_ISO 0x0700
  62. +#define SSB_SROM8_FEM_TR_ISO_SHIFT 8
  63. +#define SSB_SROM8_FEM_ANTSWLUT 0xF800
  64. +#define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11
  65. +#define SSB_SPROM8_THERMAL 0x00B2
  66. +#define SSB_SPROM8_MPWR_RAWTS 0x00B4
  67. +#define SSB_SPROM8_TS_SLP_OPT_CORRX 0x00B6
  68. +#define SSB_SPROM8_FOC_HWIQ_IQSWP 0x00B8
  69. +#define SSB_SPROM8_PHYCAL_TEMPDELTA 0x00BA
  70. #define SSB_SPROM8_MAXP_BG 0x00C0 /* Max Power 2GHz in path 1 */
  71. #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */
  72. #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
  73. @@ -464,6 +481,46 @@
  74. /* Values for boardflags_lo read from SPROM */
  75. #define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */
  76. +#define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */
  77. +#define SSB_BFL_AIRLINEMODE 0x0004 /* implements GPIO 13 radio disable indication */
  78. +#define SSB_BFL_RSSI 0x0008 /* software calculates nrssi slope. */
  79. +#define SSB_BFL_ENETSPI 0x0010 /* has ephy roboswitch spi */
  80. +#define SSB_BFL_XTAL_NOSLOW 0x0020 /* no slow clock available */
  81. +#define SSB_BFL_CCKHIPWR 0x0040 /* can do high power CCK transmission */
  82. +#define SSB_BFL_ENETADM 0x0080 /* has ADMtek switch */
  83. +#define SSB_BFL_ENETVLAN 0x0100 /* can do vlan */
  84. +#define SSB_BFL_AFTERBURNER 0x0200 /* supports Afterburner mode */
  85. +#define SSB_BFL_NOPCI 0x0400 /* board leaves PCI floating */
  86. +#define SSB_BFL_FEM 0x0800 /* supports the Front End Module */
  87. +#define SSB_BFL_EXTLNA 0x1000 /* has an external LNA */
  88. +#define SSB_BFL_HGPA 0x2000 /* had high gain PA */
  89. +#define SSB_BFL_BTCMOD 0x4000 /* BFL_BTCOEXIST is given in alternate GPIOs */
  90. +#define SSB_BFL_ALTIQ 0x8000 /* alternate I/Q settings */
  91. +
  92. +/* Values for boardflags_hi read from SPROM */
  93. +#define SSB_BFH_NOPA 0x0001 /* has no PA */
  94. +#define SSB_BFH_RSSIINV 0x0002 /* RSSI uses positive slope (not TSSI) */
  95. +#define SSB_BFH_PAREF 0x0004 /* uses the PARef LDO */
  96. +#define SSB_BFH_3TSWITCH 0x0008 /* uses a triple throw switch shared with bluetooth */
  97. +#define SSB_BFH_PHASESHIFT 0x0010 /* can support phase shifter */
  98. +#define SSB_BFH_BUCKBOOST 0x0020 /* has buck/booster */
  99. +#define SSB_BFH_FEM_BT 0x0040 /* has FEM and switch to share antenna with bluetooth */
  100. +
  101. +/* Values for boardflags2_lo read from SPROM */
  102. +#define SSB_BFL2_RXBB_INT_REG_DIS 0x0001 /* external RX BB regulator present */
  103. +#define SSB_BFL2_APLL_WAR 0x0002 /* alternative A-band PLL settings implemented */
  104. +#define SSB_BFL2_TXPWRCTRL_EN 0x0004 /* permits enabling TX Power Control */
  105. +#define SSB_BFL2_2X4_DIV 0x0008 /* 2x4 diversity switch */
  106. +#define SSB_BFL2_5G_PWRGAIN 0x0010 /* supports 5G band power gain */
  107. +#define SSB_BFL2_PCIEWAR_OVR 0x0020 /* overrides ASPM and Clkreq settings */
  108. +#define SSB_BFL2_CAESERS_BRD 0x0040 /* is Caesers board (unused) */
  109. +#define SSB_BFL2_BTC3WIRE 0x0080 /* used 3-wire bluetooth coexist */
  110. +#define SSB_BFL2_SKWRKFEM_BRD 0x0100 /* 4321mcm93 uses Skyworks FEM */
  111. +#define SSB_BFL2_SPUR_WAR 0x0200 /* has a workaround for clock-harmonic spurs */
  112. +#define SSB_BFL2_GPLL_WAR 0x0400 /* altenative G-band PLL settings implemented */
  113. +
  114. +/* Values for boardflags_lo read from SPROM */
  115. +#define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */
  116. #define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */
  117. #define SSB_BFL_AIRLINEMODE 0x0004 /* implements GPIO 13 radio disable indication */
  118. #define SSB_BFL_RSSI 0x0008 /* software calculates nrssi slope. */