aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2014-07-08 09:11:09 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-07-15 15:51:40 -0400
commit785e7dbb75d2b3109daad37a261b9b66ece393c0 (patch)
treee764012b0a144921f40a21fa20b2c99baeb560c8 /drivers/net/wireless/b43
parent162bee1a3e5714abd9a429d85c64830bacaca682 (diff)
b43: N-PHY: implement channel switching of radio 0x2057 rev 5
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43')
-rw-r--r--drivers/net/wireless/b43/radio_2057.c129
1 files changed, 129 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/radio_2057.c b/drivers/net/wireless/b43/radio_2057.c
index 941cf3db5a64..ca22faa41d28 100644
--- a/drivers/net/wireless/b43/radio_2057.c
+++ b/drivers/net/wireless/b43/radio_2057.c
@@ -149,6 +149,27 @@ static u16 r2057_rev9_init[][2] = {
149 .radio_lna2g_tune_core1 = r26, \ 149 .radio_lna2g_tune_core1 = r26, \
150 .radio_lna5g_tune_core1 = r27 150 .radio_lna5g_tune_core1 = r27
151 151
152#define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
153 r10, r11, r12, r13, r14, r15, r16, r17) \
154 .radio_vcocal_countval0 = r00, \
155 .radio_vcocal_countval1 = r01, \
156 .radio_rfpll_refmaster_sparextalsize = r02, \
157 .radio_rfpll_loopfilter_r1 = r03, \
158 .radio_rfpll_loopfilter_c2 = r04, \
159 .radio_rfpll_loopfilter_c1 = r05, \
160 .radio_cp_kpd_idac = r06, \
161 .radio_rfpll_mmd0 = r07, \
162 .radio_rfpll_mmd1 = r08, \
163 .radio_vcobuf_tune = r09, \
164 .radio_logen_mx2g_tune = r10, \
165 .radio_logen_indbuf2g_tune = r11, \
166 .radio_lna2g_tune_core0 = r12, \
167 .radio_txmix2g_tune_boost_pu_core0 = r13, \
168 .radio_pad2g_tune_pus_core0 = r14, \
169 .radio_lna2g_tune_core1 = r15, \
170 .radio_txmix2g_tune_boost_pu_core1 = r16, \
171 .radio_pad2g_tune_pus_core1 = r17
172
152#define PHYREGS(r0, r1, r2, r3, r4, r5) \ 173#define PHYREGS(r0, r1, r2, r3, r4, r5) \
153 .phy_regs.phy_bw1a = r0, \ 174 .phy_regs.phy_bw1a = r0, \
154 .phy_regs.phy_bw2 = r1, \ 175 .phy_regs.phy_bw2 = r1, \
@@ -157,6 +178,108 @@ static u16 r2057_rev9_init[][2] = {
157 .phy_regs.phy_bw5 = r4, \ 178 .phy_regs.phy_bw5 = r4, \
158 .phy_regs.phy_bw6 = r5 179 .phy_regs.phy_bw6 = r5
159 180
181/* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
182static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
183 {
184 .freq = 2412,
185 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
186 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
187 0x03, 0xff),
188 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
189 },
190 {
191 .freq = 2417,
192 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
193 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
194 0x03, 0xff),
195 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
196 },
197 {
198 .freq = 2422,
199 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
200 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
201 0x03, 0xef),
202 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
203 },
204 {
205 .freq = 2427,
206 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
207 0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
208 0x03, 0xdf),
209 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
210 },
211 {
212 .freq = 2432,
213 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
214 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
215 0x03, 0xcf),
216 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
217 },
218 {
219 .freq = 2437,
220 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
221 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
222 0x03, 0xbf),
223 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
224 },
225 {
226 .freq = 2442,
227 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
228 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
229 0x03, 0xaf),
230 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
231 },
232 {
233 .freq = 2447,
234 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
235 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
236 0x03, 0x9f),
237 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
238 },
239 {
240 .freq = 2452,
241 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
242 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
243 0x03, 0x8f),
244 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
245 },
246 {
247 .freq = 2457,
248 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
249 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
250 0x03, 0x7f),
251 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
252 },
253 {
254 .freq = 2462,
255 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
256 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
257 0x03, 0x6f),
258 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
259 },
260 {
261 .freq = 2467,
262 RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
263 0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
264 0x03, 0x5f),
265 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
266 },
267 {
268 .freq = 2472,
269 RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
270 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
271 0x03, 0x4f),
272 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
273 },
274 {
275 .freq = 2484,
276 RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
277 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
278 0x03, 0x3f),
279 PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
280 }
281};
282
160/* Extracted from MMIO dump of 6.30.223.141 */ 283/* Extracted from MMIO dump of 6.30.223.141 */
161static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = { 284static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
162 { 285 {
@@ -377,6 +500,12 @@ void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
377 500
378 /* TODO */ 501 /* TODO */
379 switch (phy->rev) { 502 switch (phy->rev) {
503 case 8:
504 if (phy->radio_rev == 5) {
505 e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
506 len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
507 }
508 break;
380 case 16: 509 case 16:
381 if (phy->radio_rev == 9) { 510 if (phy->radio_rev == 9) {
382 e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9; 511 e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;