aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2015-04-02 06:30:24 -0400
committerRalf Baechle <ralf@linux-mips.org>2015-04-02 08:00:13 -0400
commite754dfcfe37f49c9249152e2e98e58887a4d87c8 (patch)
treefad5a6f55e02cffcade467ffc3a8d323afa7ec83
parentd55a52ccf8f80cdf51af2c5c6e56c825f98c4f85 (diff)
MIPS: BCM47xx: Move filling most of SPROM to the generic function
This simplifies code a lot by dropping many per-revision-group functions. There are still some paths left that use uncommon NVRAM read helpers or fill arrays. They will need to be handled in separated patch. I've tested this (by printing SPROM content) for regressions on: 1) BCM4704 (SPROM revision 2) 2) BCM4706 (SPROM revision 8 plus 11 & 9 on extra WiFi cards) The only difference is not reading board_type from SPROM rev 11 which is unsupported and treated as rev 1. This change for rev 1 is expected. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Cc: linux-mips@linux-mips.org Cc: Hauke Mehrtens <hauke@hauke-m.de> Cc: Jonas Gorski <jonas.gorski@gmail.com> Patchwork: https://patchwork.linux-mips.org/patch/9660/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r--arch/mips/bcm47xx/sprom.c605
1 files changed, 204 insertions, 401 deletions
diff --git a/arch/mips/bcm47xx/sprom.c b/arch/mips/bcm47xx/sprom.c
index 77790c924ff2..68ebf2322f8b 100644
--- a/arch/mips/bcm47xx/sprom.c
+++ b/arch/mips/bcm47xx/sprom.c
@@ -201,9 +201,211 @@ static void bcm47xx_sprom_fill_auto(struct ssb_sprom *sprom,
201 bool fb = fallback; 201 bool fb = fallback;
202 202
203 ENTRY(0xfffffffe, u16, pre, "boardrev", board_rev, 0, true); 203 ENTRY(0xfffffffe, u16, pre, "boardrev", board_rev, 0, true);
204 ENTRY(0x00000002, u16, pre, "boardflags", boardflags_lo, 0, fb);
205 ENTRY(0xfffffffc, u16, pre, "boardtype", board_type, 0, true);
204 ENTRY(0xfffffffe, u16, pre, "boardnum", board_num, 0, fb); 206 ENTRY(0xfffffffe, u16, pre, "boardnum", board_num, 0, fb);
205 207 ENTRY(0x00000002, u8, pre, "cc", country_code, 0, fb);
206 /* TODO: Move more mappings here */ 208 ENTRY(0xfffffff8, u8, pre, "regrev", regrev, 0, fb);
209
210 ENTRY(0xfffffffe, u8, pre, "ledbh0", gpio0, 0xff, fb);
211 ENTRY(0xfffffffe, u8, pre, "ledbh1", gpio1, 0xff, fb);
212 ENTRY(0xfffffffe, u8, pre, "ledbh2", gpio2, 0xff, fb);
213 ENTRY(0xfffffffe, u8, pre, "ledbh3", gpio3, 0xff, fb);
214
215 ENTRY(0x0000070e, u16, pre, "pa0b0", pa0b0, 0, fb);
216 ENTRY(0x0000070e, u16, pre, "pa0b1", pa0b1, 0, fb);
217 ENTRY(0x0000070e, u16, pre, "pa0b2", pa0b2, 0, fb);
218 ENTRY(0x0000070e, u8, pre, "pa0itssit", itssi_bg, 0, fb);
219 ENTRY(0x0000070e, u8, pre, "pa0maxpwr", maxpwr_bg, 0, fb);
220
221 ENTRY(0x0000070c, u8, pre, "opo", opo, 0, fb);
222 ENTRY(0xfffffffe, u8, pre, "aa2g", ant_available_bg, 0, fb);
223 ENTRY(0xfffffffe, u8, pre, "aa5g", ant_available_a, 0, fb);
224 ENTRY(0x000007fe, s8, pre, "ag0", antenna_gain.a0, 0, fb);
225 ENTRY(0x000007fe, s8, pre, "ag1", antenna_gain.a1, 0, fb);
226 ENTRY(0x000007f0, s8, pre, "ag2", antenna_gain.a2, 0, fb);
227 ENTRY(0x000007f0, s8, pre, "ag3", antenna_gain.a3, 0, fb);
228
229 ENTRY(0x0000070e, u16, pre, "pa1b0", pa1b0, 0, fb);
230 ENTRY(0x0000070e, u16, pre, "pa1b1", pa1b1, 0, fb);
231 ENTRY(0x0000070e, u16, pre, "pa1b2", pa1b2, 0, fb);
232 ENTRY(0x0000070c, u16, pre, "pa1lob0", pa1lob0, 0, fb);
233 ENTRY(0x0000070c, u16, pre, "pa1lob1", pa1lob1, 0, fb);
234 ENTRY(0x0000070c, u16, pre, "pa1lob2", pa1lob2, 0, fb);
235 ENTRY(0x0000070c, u16, pre, "pa1hib0", pa1hib0, 0, fb);
236 ENTRY(0x0000070c, u16, pre, "pa1hib1", pa1hib1, 0, fb);
237 ENTRY(0x0000070c, u16, pre, "pa1hib2", pa1hib2, 0, fb);
238 ENTRY(0x0000070e, u8, pre, "pa1itssit", itssi_a, 0, fb);
239 ENTRY(0x0000070e, u8, pre, "pa1maxpwr", maxpwr_a, 0, fb);
240 ENTRY(0x0000070c, u8, pre, "pa1lomaxpwr", maxpwr_al, 0, fb);
241 ENTRY(0x0000070c, u8, pre, "pa1himaxpwr", maxpwr_ah, 0, fb);
242
243 ENTRY(0x00000708, u8, pre, "bxa2g", bxa2g, 0, fb);
244 ENTRY(0x00000708, u8, pre, "rssisav2g", rssisav2g, 0, fb);
245 ENTRY(0x00000708, u8, pre, "rssismc2g", rssismc2g, 0, fb);
246 ENTRY(0x00000708, u8, pre, "rssismf2g", rssismf2g, 0, fb);
247 ENTRY(0x00000708, u8, pre, "bxa5g", bxa5g, 0, fb);
248 ENTRY(0x00000708, u8, pre, "rssisav5g", rssisav5g, 0, fb);
249 ENTRY(0x00000708, u8, pre, "rssismc5g", rssismc5g, 0, fb);
250 ENTRY(0x00000708, u8, pre, "rssismf5g", rssismf5g, 0, fb);
251 ENTRY(0x00000708, u8, pre, "tri2g", tri2g, 0, fb);
252 ENTRY(0x00000708, u8, pre, "tri5g", tri5g, 0, fb);
253 ENTRY(0x00000708, u8, pre, "tri5gl", tri5gl, 0, fb);
254 ENTRY(0x00000708, u8, pre, "tri5gh", tri5gh, 0, fb);
255 ENTRY(0x00000708, s8, pre, "rxpo2g", rxpo2g, 0, fb);
256 ENTRY(0x00000708, s8, pre, "rxpo5g", rxpo5g, 0, fb);
257 ENTRY(0xfffffff0, u8, pre, "txchain", txchain, 0xf, fb);
258 ENTRY(0xfffffff0, u8, pre, "rxchain", rxchain, 0xf, fb);
259 ENTRY(0xfffffff0, u8, pre, "antswitch", antswitch, 0xff, fb);
260 ENTRY(0x00000700, u8, pre, "tssipos2g", fem.ghz2.tssipos, 0, fb);
261 ENTRY(0x00000700, u8, pre, "extpagain2g", fem.ghz2.extpa_gain, 0, fb);
262 ENTRY(0x00000700, u8, pre, "pdetrange2g", fem.ghz2.pdet_range, 0, fb);
263 ENTRY(0x00000700, u8, pre, "triso2g", fem.ghz2.tr_iso, 0, fb);
264 ENTRY(0x00000700, u8, pre, "antswctl2g", fem.ghz2.antswlut, 0, fb);
265 ENTRY(0x00000700, u8, pre, "tssipos5g", fem.ghz5.tssipos, 0, fb);
266 ENTRY(0x00000700, u8, pre, "extpagain5g", fem.ghz5.extpa_gain, 0, fb);
267 ENTRY(0x00000700, u8, pre, "pdetrange5g", fem.ghz5.pdet_range, 0, fb);
268 ENTRY(0x00000700, u8, pre, "triso5g", fem.ghz5.tr_iso, 0, fb);
269 ENTRY(0x00000700, u8, pre, "antswctl5g", fem.ghz5.antswlut, 0, fb);
270 ENTRY(0x000000f0, u8, pre, "txpid2ga0", txpid2g[0], 0, fb);
271 ENTRY(0x000000f0, u8, pre, "txpid2ga1", txpid2g[1], 0, fb);
272 ENTRY(0x000000f0, u8, pre, "txpid2ga2", txpid2g[2], 0, fb);
273 ENTRY(0x000000f0, u8, pre, "txpid2ga3", txpid2g[3], 0, fb);
274 ENTRY(0x000000f0, u8, pre, "txpid5ga0", txpid5g[0], 0, fb);
275 ENTRY(0x000000f0, u8, pre, "txpid5ga1", txpid5g[1], 0, fb);
276 ENTRY(0x000000f0, u8, pre, "txpid5ga2", txpid5g[2], 0, fb);
277 ENTRY(0x000000f0, u8, pre, "txpid5ga3", txpid5g[3], 0, fb);
278 ENTRY(0x000000f0, u8, pre, "txpid5gla0", txpid5gl[0], 0, fb);
279 ENTRY(0x000000f0, u8, pre, "txpid5gla1", txpid5gl[1], 0, fb);
280 ENTRY(0x000000f0, u8, pre, "txpid5gla2", txpid5gl[2], 0, fb);
281 ENTRY(0x000000f0, u8, pre, "txpid5gla3", txpid5gl[3], 0, fb);
282 ENTRY(0x000000f0, u8, pre, "txpid5gha0", txpid5gh[0], 0, fb);
283 ENTRY(0x000000f0, u8, pre, "txpid5gha1", txpid5gh[1], 0, fb);
284 ENTRY(0x000000f0, u8, pre, "txpid5gha2", txpid5gh[2], 0, fb);
285 ENTRY(0x000000f0, u8, pre, "txpid5gha3", txpid5gh[3], 0, fb);
286
287 ENTRY(0xffffff00, u8, pre, "tempthresh", tempthresh, 0, fb);
288 ENTRY(0xffffff00, u8, pre, "tempoffset", tempoffset, 0, fb);
289 ENTRY(0xffffff00, u16, pre, "rawtempsense", rawtempsense, 0, fb);
290 ENTRY(0xffffff00, u8, pre, "measpower", measpower, 0, fb);
291 ENTRY(0xffffff00, u8, pre, "tempsense_slope", tempsense_slope, 0, fb);
292 ENTRY(0xffffff00, u8, pre, "tempcorrx", tempcorrx, 0, fb);
293 ENTRY(0xffffff00, u8, pre, "tempsense_option", tempsense_option, 0, fb);
294 ENTRY(0x00000700, u8, pre, "freqoffset_corr", freqoffset_corr, 0, fb);
295 ENTRY(0x00000700, u8, pre, "iqcal_swp_dis", iqcal_swp_dis, 0, fb);
296 ENTRY(0x00000700, u8, pre, "hw_iqcal_en", hw_iqcal_en, 0, fb);
297 ENTRY(0x00000700, u8, pre, "elna2g", elna2g, 0, fb);
298 ENTRY(0x00000700, u8, pre, "elna5g", elna5g, 0, fb);
299 ENTRY(0xffffff00, u8, pre, "phycal_tempdelta", phycal_tempdelta, 0, fb);
300 ENTRY(0xffffff00, u8, pre, "temps_period", temps_period, 0, fb);
301 ENTRY(0xffffff00, u8, pre, "temps_hysteresis", temps_hysteresis, 0, fb);
302 ENTRY(0xffffff00, u8, pre, "measpower1", measpower1, 0, fb);
303 ENTRY(0xffffff00, u8, pre, "measpower2", measpower2, 0, fb);
304
305 ENTRY(0x000001f0, u16, pre, "cck2gpo", cck2gpo, 0, fb);
306 ENTRY(0x000001f0, u32, pre, "ofdm2gpo", ofdm2gpo, 0, fb);
307 ENTRY(0x000001f0, u32, pre, "ofdm5gpo", ofdm5gpo, 0, fb);
308 ENTRY(0x000001f0, u32, pre, "ofdm5glpo", ofdm5glpo, 0, fb);
309 ENTRY(0x000001f0, u32, pre, "ofdm5ghpo", ofdm5ghpo, 0, fb);
310 ENTRY(0x000001f0, u16, pre, "mcs2gpo0", mcs2gpo[0], 0, fb);
311 ENTRY(0x000001f0, u16, pre, "mcs2gpo1", mcs2gpo[1], 0, fb);
312 ENTRY(0x000001f0, u16, pre, "mcs2gpo2", mcs2gpo[2], 0, fb);
313 ENTRY(0x000001f0, u16, pre, "mcs2gpo3", mcs2gpo[3], 0, fb);
314 ENTRY(0x000001f0, u16, pre, "mcs2gpo4", mcs2gpo[4], 0, fb);
315 ENTRY(0x000001f0, u16, pre, "mcs2gpo5", mcs2gpo[5], 0, fb);
316 ENTRY(0x000001f0, u16, pre, "mcs2gpo6", mcs2gpo[6], 0, fb);
317 ENTRY(0x000001f0, u16, pre, "mcs2gpo7", mcs2gpo[7], 0, fb);
318 ENTRY(0x000001f0, u16, pre, "mcs5gpo0", mcs5gpo[0], 0, fb);
319 ENTRY(0x000001f0, u16, pre, "mcs5gpo1", mcs5gpo[1], 0, fb);
320 ENTRY(0x000001f0, u16, pre, "mcs5gpo2", mcs5gpo[2], 0, fb);
321 ENTRY(0x000001f0, u16, pre, "mcs5gpo3", mcs5gpo[3], 0, fb);
322 ENTRY(0x000001f0, u16, pre, "mcs5gpo4", mcs5gpo[4], 0, fb);
323 ENTRY(0x000001f0, u16, pre, "mcs5gpo5", mcs5gpo[5], 0, fb);
324 ENTRY(0x000001f0, u16, pre, "mcs5gpo6", mcs5gpo[6], 0, fb);
325 ENTRY(0x000001f0, u16, pre, "mcs5gpo7", mcs5gpo[7], 0, fb);
326 ENTRY(0x000001f0, u16, pre, "mcs5glpo0", mcs5glpo[0], 0, fb);
327 ENTRY(0x000001f0, u16, pre, "mcs5glpo1", mcs5glpo[1], 0, fb);
328 ENTRY(0x000001f0, u16, pre, "mcs5glpo2", mcs5glpo[2], 0, fb);
329 ENTRY(0x000001f0, u16, pre, "mcs5glpo3", mcs5glpo[3], 0, fb);
330 ENTRY(0x000001f0, u16, pre, "mcs5glpo4", mcs5glpo[4], 0, fb);
331 ENTRY(0x000001f0, u16, pre, "mcs5glpo5", mcs5glpo[5], 0, fb);
332 ENTRY(0x000001f0, u16, pre, "mcs5glpo6", mcs5glpo[6], 0, fb);
333 ENTRY(0x000001f0, u16, pre, "mcs5glpo7", mcs5glpo[7], 0, fb);
334 ENTRY(0x000001f0, u16, pre, "mcs5ghpo0", mcs5ghpo[0], 0, fb);
335 ENTRY(0x000001f0, u16, pre, "mcs5ghpo1", mcs5ghpo[1], 0, fb);
336 ENTRY(0x000001f0, u16, pre, "mcs5ghpo2", mcs5ghpo[2], 0, fb);
337 ENTRY(0x000001f0, u16, pre, "mcs5ghpo3", mcs5ghpo[3], 0, fb);
338 ENTRY(0x000001f0, u16, pre, "mcs5ghpo4", mcs5ghpo[4], 0, fb);
339 ENTRY(0x000001f0, u16, pre, "mcs5ghpo5", mcs5ghpo[5], 0, fb);
340 ENTRY(0x000001f0, u16, pre, "mcs5ghpo6", mcs5ghpo[6], 0, fb);
341 ENTRY(0x000001f0, u16, pre, "mcs5ghpo7", mcs5ghpo[7], 0, fb);
342 ENTRY(0x000001f0, u16, pre, "cddpo", cddpo, 0, fb);
343 ENTRY(0x000001f0, u16, pre, "stbcpo", stbcpo, 0, fb);
344 ENTRY(0x000001f0, u16, pre, "bw40po", bw40po, 0, fb);
345 ENTRY(0x000001f0, u16, pre, "bwduppo", bwduppo, 0, fb);
346
347 ENTRY(0xfffffe00, u16, pre, "cckbw202gpo", cckbw202gpo, 0, fb);
348 ENTRY(0xfffffe00, u16, pre, "cckbw20ul2gpo", cckbw20ul2gpo, 0, fb);
349 ENTRY(0x00000600, u32, pre, "legofdmbw202gpo", legofdmbw202gpo, 0, fb);
350 ENTRY(0x00000600, u32, pre, "legofdmbw20ul2gpo", legofdmbw20ul2gpo, 0, fb);
351 ENTRY(0x00000600, u32, pre, "legofdmbw205glpo", legofdmbw205glpo, 0, fb);
352 ENTRY(0x00000600, u32, pre, "legofdmbw20ul5glpo", legofdmbw20ul5glpo, 0, fb);
353 ENTRY(0x00000600, u32, pre, "legofdmbw205gmpo", legofdmbw205gmpo, 0, fb);
354 ENTRY(0x00000600, u32, pre, "legofdmbw20ul5gmpo", legofdmbw20ul5gmpo, 0, fb);
355 ENTRY(0x00000600, u32, pre, "legofdmbw205ghpo", legofdmbw205ghpo, 0, fb);
356 ENTRY(0x00000600, u32, pre, "legofdmbw20ul5ghpo", legofdmbw20ul5ghpo, 0, fb);
357 ENTRY(0xfffffe00, u32, pre, "mcsbw202gpo", mcsbw202gpo, 0, fb);
358 ENTRY(0x00000600, u32, pre, "mcsbw20ul2gpo", mcsbw20ul2gpo, 0, fb);
359 ENTRY(0xfffffe00, u32, pre, "mcsbw402gpo", mcsbw402gpo, 0, fb);
360 ENTRY(0xfffffe00, u32, pre, "mcsbw205glpo", mcsbw205glpo, 0, fb);
361 ENTRY(0x00000600, u32, pre, "mcsbw20ul5glpo", mcsbw20ul5glpo, 0, fb);
362 ENTRY(0xfffffe00, u32, pre, "mcsbw405glpo", mcsbw405glpo, 0, fb);
363 ENTRY(0xfffffe00, u32, pre, "mcsbw205gmpo", mcsbw205gmpo, 0, fb);
364 ENTRY(0x00000600, u32, pre, "mcsbw20ul5gmpo", mcsbw20ul5gmpo, 0, fb);
365 ENTRY(0xfffffe00, u32, pre, "mcsbw405gmpo", mcsbw405gmpo, 0, fb);
366 ENTRY(0xfffffe00, u32, pre, "mcsbw205ghpo", mcsbw205ghpo, 0, fb);
367 ENTRY(0x00000600, u32, pre, "mcsbw20ul5ghpo", mcsbw20ul5ghpo, 0, fb);
368 ENTRY(0xfffffe00, u32, pre, "mcsbw405ghpo", mcsbw405ghpo, 0, fb);
369 ENTRY(0x00000600, u16, pre, "mcs32po", mcs32po, 0, fb);
370 ENTRY(0x00000600, u16, pre, "legofdm40duppo", legofdm40duppo, 0, fb);
371 ENTRY(0x00000700, u8, pre, "pcieingress_war", pcieingress_war, 0, fb);
372
373 /* TODO: rev 11 support */
374 ENTRY(0x00000700, u8, pre, "rxgainerr2ga0", rxgainerr2ga[0], 0, fb);
375 ENTRY(0x00000700, u8, pre, "rxgainerr2ga1", rxgainerr2ga[1], 0, fb);
376 ENTRY(0x00000700, u8, pre, "rxgainerr2ga2", rxgainerr2ga[2], 0, fb);
377 ENTRY(0x00000700, u8, pre, "rxgainerr5gla0", rxgainerr5gla[0], 0, fb);
378 ENTRY(0x00000700, u8, pre, "rxgainerr5gla1", rxgainerr5gla[1], 0, fb);
379 ENTRY(0x00000700, u8, pre, "rxgainerr5gla2", rxgainerr5gla[2], 0, fb);
380 ENTRY(0x00000700, u8, pre, "rxgainerr5gma0", rxgainerr5gma[0], 0, fb);
381 ENTRY(0x00000700, u8, pre, "rxgainerr5gma1", rxgainerr5gma[1], 0, fb);
382 ENTRY(0x00000700, u8, pre, "rxgainerr5gma2", rxgainerr5gma[2], 0, fb);
383 ENTRY(0x00000700, u8, pre, "rxgainerr5gha0", rxgainerr5gha[0], 0, fb);
384 ENTRY(0x00000700, u8, pre, "rxgainerr5gha1", rxgainerr5gha[1], 0, fb);
385 ENTRY(0x00000700, u8, pre, "rxgainerr5gha2", rxgainerr5gha[2], 0, fb);
386 ENTRY(0x00000700, u8, pre, "rxgainerr5gua0", rxgainerr5gua[0], 0, fb);
387 ENTRY(0x00000700, u8, pre, "rxgainerr5gua1", rxgainerr5gua[1], 0, fb);
388 ENTRY(0x00000700, u8, pre, "rxgainerr5gua2", rxgainerr5gua[2], 0, fb);
389
390 ENTRY(0xfffffe00, u8, pre, "sar2g", sar2g, 0, fb);
391 ENTRY(0xfffffe00, u8, pre, "sar5g", sar5g, 0, fb);
392
393 /* TODO: rev 11 support */
394 ENTRY(0x00000700, u8, pre, "noiselvl2ga0", noiselvl2ga[0], 0, fb);
395 ENTRY(0x00000700, u8, pre, "noiselvl2ga1", noiselvl2ga[1], 0, fb);
396 ENTRY(0x00000700, u8, pre, "noiselvl2ga2", noiselvl2ga[2], 0, fb);
397 ENTRY(0x00000700, u8, pre, "noiselvl5gla0", noiselvl5gla[0], 0, fb);
398 ENTRY(0x00000700, u8, pre, "noiselvl5gla1", noiselvl5gla[1], 0, fb);
399 ENTRY(0x00000700, u8, pre, "noiselvl5gla2", noiselvl5gla[2], 0, fb);
400 ENTRY(0x00000700, u8, pre, "noiselvl5gma0", noiselvl5gma[0], 0, fb);
401 ENTRY(0x00000700, u8, pre, "noiselvl5gma1", noiselvl5gma[1], 0, fb);
402 ENTRY(0x00000700, u8, pre, "noiselvl5gma2", noiselvl5gma[2], 0, fb);
403 ENTRY(0x00000700, u8, pre, "noiselvl5gha0", noiselvl5gha[0], 0, fb);
404 ENTRY(0x00000700, u8, pre, "noiselvl5gha1", noiselvl5gha[1], 0, fb);
405 ENTRY(0x00000700, u8, pre, "noiselvl5gha2", noiselvl5gha[2], 0, fb);
406 ENTRY(0x00000700, u8, pre, "noiselvl5gua0", noiselvl5gua[0], 0, fb);
407 ENTRY(0x00000700, u8, pre, "noiselvl5gua1", noiselvl5gua[1], 0, fb);
408 ENTRY(0x00000700, u8, pre, "noiselvl5gua2", noiselvl5gua[2], 0, fb);
207} 409}
208#undef ENTRY /* It's specififc, uses local variable, don't use it (again). */ 410#undef ENTRY /* It's specififc, uses local variable, don't use it (again). */
209 411
@@ -211,90 +413,12 @@ static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
211 const char *prefix, bool fallback) 413 const char *prefix, bool fallback)
212{ 414{
213 nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); 415 nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback);
214 nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback);
215 nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback);
216 nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback);
217 nvram_read_u8(prefix, NULL, "ledbh3", &sprom->gpio3, 0xff, fallback);
218 nvram_read_u8(prefix, NULL, "aa2g", &sprom->ant_available_bg, 0,
219 fallback);
220 nvram_read_u8(prefix, NULL, "aa5g", &sprom->ant_available_a, 0,
221 fallback);
222 nvram_read_s8(prefix, NULL, "ag0", &sprom->antenna_gain.a0, 0,
223 fallback);
224 nvram_read_s8(prefix, NULL, "ag1", &sprom->antenna_gain.a1, 0,
225 fallback);
226 nvram_read_alpha2(prefix, "ccode", sprom->alpha2, fallback); 416 nvram_read_alpha2(prefix, "ccode", sprom->alpha2, fallback);
227} 417}
228 418
229static void bcm47xx_fill_sprom_r12389(struct ssb_sprom *sprom,
230 const char *prefix, bool fallback)
231{
232 nvram_read_u16(prefix, NULL, "pa0b0", &sprom->pa0b0, 0, fallback);
233 nvram_read_u16(prefix, NULL, "pa0b1", &sprom->pa0b1, 0, fallback);
234 nvram_read_u16(prefix, NULL, "pa0b2", &sprom->pa0b2, 0, fallback);
235 nvram_read_u8(prefix, NULL, "pa0itssit", &sprom->itssi_bg, 0, fallback);
236 nvram_read_u8(prefix, NULL, "pa0maxpwr", &sprom->maxpwr_bg, 0,
237 fallback);
238 nvram_read_u16(prefix, NULL, "pa1b0", &sprom->pa1b0, 0, fallback);
239 nvram_read_u16(prefix, NULL, "pa1b1", &sprom->pa1b1, 0, fallback);
240 nvram_read_u16(prefix, NULL, "pa1b2", &sprom->pa1b2, 0, fallback);
241 nvram_read_u8(prefix, NULL, "pa1itssit", &sprom->itssi_a, 0, fallback);
242 nvram_read_u8(prefix, NULL, "pa1maxpwr", &sprom->maxpwr_a, 0, fallback);
243}
244
245static void bcm47xx_fill_sprom_r1(struct ssb_sprom *sprom, const char *prefix,
246 bool fallback)
247{
248 nvram_read_u16(prefix, NULL, "boardflags", &sprom->boardflags_lo, 0,
249 fallback);
250 nvram_read_u8(prefix, NULL, "cc", &sprom->country_code, 0, fallback);
251}
252
253static void bcm47xx_fill_sprom_r2389(struct ssb_sprom *sprom,
254 const char *prefix, bool fallback)
255{
256 nvram_read_u8(prefix, NULL, "opo", &sprom->opo, 0, fallback);
257 nvram_read_u16(prefix, NULL, "pa1lob0", &sprom->pa1lob0, 0, fallback);
258 nvram_read_u16(prefix, NULL, "pa1lob1", &sprom->pa1lob1, 0, fallback);
259 nvram_read_u16(prefix, NULL, "pa1lob2", &sprom->pa1lob2, 0, fallback);
260 nvram_read_u16(prefix, NULL, "pa1hib0", &sprom->pa1hib0, 0, fallback);
261 nvram_read_u16(prefix, NULL, "pa1hib1", &sprom->pa1hib1, 0, fallback);
262 nvram_read_u16(prefix, NULL, "pa1hib2", &sprom->pa1hib2, 0, fallback);
263 nvram_read_u8(prefix, NULL, "pa1lomaxpwr", &sprom->maxpwr_al, 0,
264 fallback);
265 nvram_read_u8(prefix, NULL, "pa1himaxpwr", &sprom->maxpwr_ah, 0,
266 fallback);
267}
268
269static void bcm47xx_fill_sprom_r389(struct ssb_sprom *sprom, const char *prefix,
270 bool fallback)
271{
272 nvram_read_u8(prefix, NULL, "bxa2g", &sprom->bxa2g, 0, fallback);
273 nvram_read_u8(prefix, NULL, "rssisav2g", &sprom->rssisav2g, 0,
274 fallback);
275 nvram_read_u8(prefix, NULL, "rssismc2g", &sprom->rssismc2g, 0,
276 fallback);
277 nvram_read_u8(prefix, NULL, "rssismf2g", &sprom->rssismf2g, 0,
278 fallback);
279 nvram_read_u8(prefix, NULL, "bxa5g", &sprom->bxa5g, 0, fallback);
280 nvram_read_u8(prefix, NULL, "rssisav5g", &sprom->rssisav5g, 0,
281 fallback);
282 nvram_read_u8(prefix, NULL, "rssismc5g", &sprom->rssismc5g, 0,
283 fallback);
284 nvram_read_u8(prefix, NULL, "rssismf5g", &sprom->rssismf5g, 0,
285 fallback);
286 nvram_read_u8(prefix, NULL, "tri2g", &sprom->tri2g, 0, fallback);
287 nvram_read_u8(prefix, NULL, "tri5g", &sprom->tri5g, 0, fallback);
288 nvram_read_u8(prefix, NULL, "tri5gl", &sprom->tri5gl, 0, fallback);
289 nvram_read_u8(prefix, NULL, "tri5gh", &sprom->tri5gh, 0, fallback);
290 nvram_read_s8(prefix, NULL, "rxpo2g", &sprom->rxpo2g, 0, fallback);
291 nvram_read_s8(prefix, NULL, "rxpo5g", &sprom->rxpo5g, 0, fallback);
292}
293
294static void bcm47xx_fill_sprom_r3(struct ssb_sprom *sprom, const char *prefix, 419static void bcm47xx_fill_sprom_r3(struct ssb_sprom *sprom, const char *prefix,
295 bool fallback) 420 bool fallback)
296{ 421{
297 nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0, fallback);
298 nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time, 422 nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time,
299 &sprom->leddc_off_time, fallback); 423 &sprom->leddc_off_time, fallback);
300} 424}
@@ -302,309 +426,10 @@ static void bcm47xx_fill_sprom_r3(struct ssb_sprom *sprom, const char *prefix,
302static void bcm47xx_fill_sprom_r4589(struct ssb_sprom *sprom, 426static void bcm47xx_fill_sprom_r4589(struct ssb_sprom *sprom,
303 const char *prefix, bool fallback) 427 const char *prefix, bool fallback)
304{ 428{
305 nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0, fallback);
306 nvram_read_s8(prefix, NULL, "ag2", &sprom->antenna_gain.a2, 0,
307 fallback);
308 nvram_read_s8(prefix, NULL, "ag3", &sprom->antenna_gain.a3, 0,
309 fallback);
310 nvram_read_u8(prefix, NULL, "txchain", &sprom->txchain, 0xf, fallback);
311 nvram_read_u8(prefix, NULL, "rxchain", &sprom->rxchain, 0xf, fallback);
312 nvram_read_u8(prefix, NULL, "antswitch", &sprom->antswitch, 0xff,
313 fallback);
314 nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time, 429 nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time,
315 &sprom->leddc_off_time, fallback); 430 &sprom->leddc_off_time, fallback);
316} 431}
317 432
318static void bcm47xx_fill_sprom_r458(struct ssb_sprom *sprom, const char *prefix,
319 bool fallback)
320{
321 nvram_read_u16(prefix, NULL, "cck2gpo", &sprom->cck2gpo, 0, fallback);
322 nvram_read_u32(prefix, NULL, "ofdm2gpo", &sprom->ofdm2gpo, 0, fallback);
323 nvram_read_u32(prefix, NULL, "ofdm5gpo", &sprom->ofdm5gpo, 0, fallback);
324 nvram_read_u32(prefix, NULL, "ofdm5glpo", &sprom->ofdm5glpo, 0,
325 fallback);
326 nvram_read_u32(prefix, NULL, "ofdm5ghpo", &sprom->ofdm5ghpo, 0,
327 fallback);
328 nvram_read_u16(prefix, NULL, "cddpo", &sprom->cddpo, 0, fallback);
329 nvram_read_u16(prefix, NULL, "stbcpo", &sprom->stbcpo, 0, fallback);
330 nvram_read_u16(prefix, NULL, "bw40po", &sprom->bw40po, 0, fallback);
331 nvram_read_u16(prefix, NULL, "bwduppo", &sprom->bwduppo, 0, fallback);
332 nvram_read_u16(prefix, NULL, "mcs2gpo0", &sprom->mcs2gpo[0], 0,
333 fallback);
334 nvram_read_u16(prefix, NULL, "mcs2gpo1", &sprom->mcs2gpo[1], 0,
335 fallback);
336 nvram_read_u16(prefix, NULL, "mcs2gpo2", &sprom->mcs2gpo[2], 0,
337 fallback);
338 nvram_read_u16(prefix, NULL, "mcs2gpo3", &sprom->mcs2gpo[3], 0,
339 fallback);
340 nvram_read_u16(prefix, NULL, "mcs2gpo4", &sprom->mcs2gpo[4], 0,
341 fallback);
342 nvram_read_u16(prefix, NULL, "mcs2gpo5", &sprom->mcs2gpo[5], 0,
343 fallback);
344 nvram_read_u16(prefix, NULL, "mcs2gpo6", &sprom->mcs2gpo[6], 0,
345 fallback);
346 nvram_read_u16(prefix, NULL, "mcs2gpo7", &sprom->mcs2gpo[7], 0,
347 fallback);
348 nvram_read_u16(prefix, NULL, "mcs5gpo0", &sprom->mcs5gpo[0], 0,
349 fallback);
350 nvram_read_u16(prefix, NULL, "mcs5gpo1", &sprom->mcs5gpo[1], 0,
351 fallback);
352 nvram_read_u16(prefix, NULL, "mcs5gpo2", &sprom->mcs5gpo[2], 0,
353 fallback);
354 nvram_read_u16(prefix, NULL, "mcs5gpo3", &sprom->mcs5gpo[3], 0,
355 fallback);
356 nvram_read_u16(prefix, NULL, "mcs5gpo4", &sprom->mcs5gpo[4], 0,
357 fallback);
358 nvram_read_u16(prefix, NULL, "mcs5gpo5", &sprom->mcs5gpo[5], 0,
359 fallback);
360 nvram_read_u16(prefix, NULL, "mcs5gpo6", &sprom->mcs5gpo[6], 0,
361 fallback);
362 nvram_read_u16(prefix, NULL, "mcs5gpo7", &sprom->mcs5gpo[7], 0,
363 fallback);
364 nvram_read_u16(prefix, NULL, "mcs5glpo0", &sprom->mcs5glpo[0], 0,
365 fallback);
366 nvram_read_u16(prefix, NULL, "mcs5glpo1", &sprom->mcs5glpo[1], 0,
367 fallback);
368 nvram_read_u16(prefix, NULL, "mcs5glpo2", &sprom->mcs5glpo[2], 0,
369 fallback);
370 nvram_read_u16(prefix, NULL, "mcs5glpo3", &sprom->mcs5glpo[3], 0,
371 fallback);
372 nvram_read_u16(prefix, NULL, "mcs5glpo4", &sprom->mcs5glpo[4], 0,
373 fallback);
374 nvram_read_u16(prefix, NULL, "mcs5glpo5", &sprom->mcs5glpo[5], 0,
375 fallback);
376 nvram_read_u16(prefix, NULL, "mcs5glpo6", &sprom->mcs5glpo[6], 0,
377 fallback);
378 nvram_read_u16(prefix, NULL, "mcs5glpo7", &sprom->mcs5glpo[7], 0,
379 fallback);
380 nvram_read_u16(prefix, NULL, "mcs5ghpo0", &sprom->mcs5ghpo[0], 0,
381 fallback);
382 nvram_read_u16(prefix, NULL, "mcs5ghpo1", &sprom->mcs5ghpo[1], 0,
383 fallback);
384 nvram_read_u16(prefix, NULL, "mcs5ghpo2", &sprom->mcs5ghpo[2], 0,
385 fallback);
386 nvram_read_u16(prefix, NULL, "mcs5ghpo3", &sprom->mcs5ghpo[3], 0,
387 fallback);
388 nvram_read_u16(prefix, NULL, "mcs5ghpo4", &sprom->mcs5ghpo[4], 0,
389 fallback);
390 nvram_read_u16(prefix, NULL, "mcs5ghpo5", &sprom->mcs5ghpo[5], 0,
391 fallback);
392 nvram_read_u16(prefix, NULL, "mcs5ghpo6", &sprom->mcs5ghpo[6], 0,
393 fallback);
394 nvram_read_u16(prefix, NULL, "mcs5ghpo7", &sprom->mcs5ghpo[7], 0,
395 fallback);
396}
397
398static void bcm47xx_fill_sprom_r45(struct ssb_sprom *sprom, const char *prefix,
399 bool fallback)
400{
401 nvram_read_u8(prefix, NULL, "txpid2ga0", &sprom->txpid2g[0], 0,
402 fallback);
403 nvram_read_u8(prefix, NULL, "txpid2ga1", &sprom->txpid2g[1], 0,
404 fallback);
405 nvram_read_u8(prefix, NULL, "txpid2ga2", &sprom->txpid2g[2], 0,
406 fallback);
407 nvram_read_u8(prefix, NULL, "txpid2ga3", &sprom->txpid2g[3], 0,
408 fallback);
409 nvram_read_u8(prefix, NULL, "txpid5ga0", &sprom->txpid5g[0], 0,
410 fallback);
411 nvram_read_u8(prefix, NULL, "txpid5ga1", &sprom->txpid5g[1], 0,
412 fallback);
413 nvram_read_u8(prefix, NULL, "txpid5ga2", &sprom->txpid5g[2], 0,
414 fallback);
415 nvram_read_u8(prefix, NULL, "txpid5ga3", &sprom->txpid5g[3], 0,
416 fallback);
417 nvram_read_u8(prefix, NULL, "txpid5gla0", &sprom->txpid5gl[0], 0,
418 fallback);
419 nvram_read_u8(prefix, NULL, "txpid5gla1", &sprom->txpid5gl[1], 0,
420 fallback);
421 nvram_read_u8(prefix, NULL, "txpid5gla2", &sprom->txpid5gl[2], 0,
422 fallback);
423 nvram_read_u8(prefix, NULL, "txpid5gla3", &sprom->txpid5gl[3], 0,
424 fallback);
425 nvram_read_u8(prefix, NULL, "txpid5gha0", &sprom->txpid5gh[0], 0,
426 fallback);
427 nvram_read_u8(prefix, NULL, "txpid5gha1", &sprom->txpid5gh[1], 0,
428 fallback);
429 nvram_read_u8(prefix, NULL, "txpid5gha2", &sprom->txpid5gh[2], 0,
430 fallback);
431 nvram_read_u8(prefix, NULL, "txpid5gha3", &sprom->txpid5gh[3], 0,
432 fallback);
433}
434
435static void bcm47xx_fill_sprom_r89(struct ssb_sprom *sprom, const char *prefix,
436 bool fallback)
437{
438 nvram_read_u8(prefix, NULL, "tssipos2g", &sprom->fem.ghz2.tssipos, 0,
439 fallback);
440 nvram_read_u8(prefix, NULL, "extpagain2g",
441 &sprom->fem.ghz2.extpa_gain, 0, fallback);
442 nvram_read_u8(prefix, NULL, "pdetrange2g",
443 &sprom->fem.ghz2.pdet_range, 0, fallback);
444 nvram_read_u8(prefix, NULL, "triso2g", &sprom->fem.ghz2.tr_iso, 0,
445 fallback);
446 nvram_read_u8(prefix, NULL, "antswctl2g", &sprom->fem.ghz2.antswlut, 0,
447 fallback);
448 nvram_read_u8(prefix, NULL, "tssipos5g", &sprom->fem.ghz5.tssipos, 0,
449 fallback);
450 nvram_read_u8(prefix, NULL, "extpagain5g",
451 &sprom->fem.ghz5.extpa_gain, 0, fallback);
452 nvram_read_u8(prefix, NULL, "pdetrange5g",
453 &sprom->fem.ghz5.pdet_range, 0, fallback);
454 nvram_read_u8(prefix, NULL, "triso5g", &sprom->fem.ghz5.tr_iso, 0,
455 fallback);
456 nvram_read_u8(prefix, NULL, "antswctl5g", &sprom->fem.ghz5.antswlut, 0,
457 fallback);
458 nvram_read_u8(prefix, NULL, "tempthresh", &sprom->tempthresh, 0,
459 fallback);
460 nvram_read_u8(prefix, NULL, "tempoffset", &sprom->tempoffset, 0,
461 fallback);
462 nvram_read_u16(prefix, NULL, "rawtempsense", &sprom->rawtempsense, 0,
463 fallback);
464 nvram_read_u8(prefix, NULL, "measpower", &sprom->measpower, 0,
465 fallback);
466 nvram_read_u8(prefix, NULL, "tempsense_slope",
467 &sprom->tempsense_slope, 0, fallback);
468 nvram_read_u8(prefix, NULL, "tempcorrx", &sprom->tempcorrx, 0,
469 fallback);
470 nvram_read_u8(prefix, NULL, "tempsense_option",
471 &sprom->tempsense_option, 0, fallback);
472 nvram_read_u8(prefix, NULL, "freqoffset_corr",
473 &sprom->freqoffset_corr, 0, fallback);
474 nvram_read_u8(prefix, NULL, "iqcal_swp_dis", &sprom->iqcal_swp_dis, 0,
475 fallback);
476 nvram_read_u8(prefix, NULL, "hw_iqcal_en", &sprom->hw_iqcal_en, 0,
477 fallback);
478 nvram_read_u8(prefix, NULL, "elna2g", &sprom->elna2g, 0, fallback);
479 nvram_read_u8(prefix, NULL, "elna5g", &sprom->elna5g, 0, fallback);
480 nvram_read_u8(prefix, NULL, "phycal_tempdelta",
481 &sprom->phycal_tempdelta, 0, fallback);
482 nvram_read_u8(prefix, NULL, "temps_period", &sprom->temps_period, 0,
483 fallback);
484 nvram_read_u8(prefix, NULL, "temps_hysteresis",
485 &sprom->temps_hysteresis, 0, fallback);
486 nvram_read_u8(prefix, NULL, "measpower1", &sprom->measpower1, 0,
487 fallback);
488 nvram_read_u8(prefix, NULL, "measpower2", &sprom->measpower2, 0,
489 fallback);
490 nvram_read_u8(prefix, NULL, "rxgainerr2ga0",
491 &sprom->rxgainerr2ga[0], 0, fallback);
492 nvram_read_u8(prefix, NULL, "rxgainerr2ga1",
493 &sprom->rxgainerr2ga[1], 0, fallback);
494 nvram_read_u8(prefix, NULL, "rxgainerr2ga2",
495 &sprom->rxgainerr2ga[2], 0, fallback);
496 nvram_read_u8(prefix, NULL, "rxgainerr5gla0",
497 &sprom->rxgainerr5gla[0], 0, fallback);
498 nvram_read_u8(prefix, NULL, "rxgainerr5gla1",
499 &sprom->rxgainerr5gla[1], 0, fallback);
500 nvram_read_u8(prefix, NULL, "rxgainerr5gla2",
501 &sprom->rxgainerr5gla[2], 0, fallback);
502 nvram_read_u8(prefix, NULL, "rxgainerr5gma0",
503 &sprom->rxgainerr5gma[0], 0, fallback);
504 nvram_read_u8(prefix, NULL, "rxgainerr5gma1",
505 &sprom->rxgainerr5gma[1], 0, fallback);
506 nvram_read_u8(prefix, NULL, "rxgainerr5gma2",
507 &sprom->rxgainerr5gma[2], 0, fallback);
508 nvram_read_u8(prefix, NULL, "rxgainerr5gha0",
509 &sprom->rxgainerr5gha[0], 0, fallback);
510 nvram_read_u8(prefix, NULL, "rxgainerr5gha1",
511 &sprom->rxgainerr5gha[1], 0, fallback);
512 nvram_read_u8(prefix, NULL, "rxgainerr5gha2",
513 &sprom->rxgainerr5gha[2], 0, fallback);
514 nvram_read_u8(prefix, NULL, "rxgainerr5gua0",
515 &sprom->rxgainerr5gua[0], 0, fallback);
516 nvram_read_u8(prefix, NULL, "rxgainerr5gua1",
517 &sprom->rxgainerr5gua[1], 0, fallback);
518 nvram_read_u8(prefix, NULL, "rxgainerr5gua2",
519 &sprom->rxgainerr5gua[2], 0, fallback);
520 nvram_read_u8(prefix, NULL, "noiselvl2ga0", &sprom->noiselvl2ga[0], 0,
521 fallback);
522 nvram_read_u8(prefix, NULL, "noiselvl2ga1", &sprom->noiselvl2ga[1], 0,
523 fallback);
524 nvram_read_u8(prefix, NULL, "noiselvl2ga2", &sprom->noiselvl2ga[2], 0,
525 fallback);
526 nvram_read_u8(prefix, NULL, "noiselvl5gla0",
527 &sprom->noiselvl5gla[0], 0, fallback);
528 nvram_read_u8(prefix, NULL, "noiselvl5gla1",
529 &sprom->noiselvl5gla[1], 0, fallback);
530 nvram_read_u8(prefix, NULL, "noiselvl5gla2",
531 &sprom->noiselvl5gla[2], 0, fallback);
532 nvram_read_u8(prefix, NULL, "noiselvl5gma0",
533 &sprom->noiselvl5gma[0], 0, fallback);
534 nvram_read_u8(prefix, NULL, "noiselvl5gma1",
535 &sprom->noiselvl5gma[1], 0, fallback);
536 nvram_read_u8(prefix, NULL, "noiselvl5gma2",
537 &sprom->noiselvl5gma[2], 0, fallback);
538 nvram_read_u8(prefix, NULL, "noiselvl5gha0",
539 &sprom->noiselvl5gha[0], 0, fallback);
540 nvram_read_u8(prefix, NULL, "noiselvl5gha1",
541 &sprom->noiselvl5gha[1], 0, fallback);
542 nvram_read_u8(prefix, NULL, "noiselvl5gha2",
543 &sprom->noiselvl5gha[2], 0, fallback);
544 nvram_read_u8(prefix, NULL, "noiselvl5gua0",
545 &sprom->noiselvl5gua[0], 0, fallback);
546 nvram_read_u8(prefix, NULL, "noiselvl5gua1",
547 &sprom->noiselvl5gua[1], 0, fallback);
548 nvram_read_u8(prefix, NULL, "noiselvl5gua2",
549 &sprom->noiselvl5gua[2], 0, fallback);
550 nvram_read_u8(prefix, NULL, "pcieingress_war",
551 &sprom->pcieingress_war, 0, fallback);
552}
553
554static void bcm47xx_fill_sprom_r9(struct ssb_sprom *sprom, const char *prefix,
555 bool fallback)
556{
557 nvram_read_u16(prefix, NULL, "cckbw202gpo", &sprom->cckbw202gpo, 0,
558 fallback);
559 nvram_read_u16(prefix, NULL, "cckbw20ul2gpo", &sprom->cckbw20ul2gpo, 0,
560 fallback);
561 nvram_read_u32(prefix, NULL, "legofdmbw202gpo",
562 &sprom->legofdmbw202gpo, 0, fallback);
563 nvram_read_u32(prefix, NULL, "legofdmbw20ul2gpo",
564 &sprom->legofdmbw20ul2gpo, 0, fallback);
565 nvram_read_u32(prefix, NULL, "legofdmbw205glpo",
566 &sprom->legofdmbw205glpo, 0, fallback);
567 nvram_read_u32(prefix, NULL, "legofdmbw20ul5glpo",
568 &sprom->legofdmbw20ul5glpo, 0, fallback);
569 nvram_read_u32(prefix, NULL, "legofdmbw205gmpo",
570 &sprom->legofdmbw205gmpo, 0, fallback);
571 nvram_read_u32(prefix, NULL, "legofdmbw20ul5gmpo",
572 &sprom->legofdmbw20ul5gmpo, 0, fallback);
573 nvram_read_u32(prefix, NULL, "legofdmbw205ghpo",
574 &sprom->legofdmbw205ghpo, 0, fallback);
575 nvram_read_u32(prefix, NULL, "legofdmbw20ul5ghpo",
576 &sprom->legofdmbw20ul5ghpo, 0, fallback);
577 nvram_read_u32(prefix, NULL, "mcsbw202gpo", &sprom->mcsbw202gpo, 0,
578 fallback);
579 nvram_read_u32(prefix, NULL, "mcsbw20ul2gpo", &sprom->mcsbw20ul2gpo, 0,
580 fallback);
581 nvram_read_u32(prefix, NULL, "mcsbw402gpo", &sprom->mcsbw402gpo, 0,
582 fallback);
583 nvram_read_u32(prefix, NULL, "mcsbw205glpo", &sprom->mcsbw205glpo, 0,
584 fallback);
585 nvram_read_u32(prefix, NULL, "mcsbw20ul5glpo",
586 &sprom->mcsbw20ul5glpo, 0, fallback);
587 nvram_read_u32(prefix, NULL, "mcsbw405glpo", &sprom->mcsbw405glpo, 0,
588 fallback);
589 nvram_read_u32(prefix, NULL, "mcsbw205gmpo", &sprom->mcsbw205gmpo, 0,
590 fallback);
591 nvram_read_u32(prefix, NULL, "mcsbw20ul5gmpo",
592 &sprom->mcsbw20ul5gmpo, 0, fallback);
593 nvram_read_u32(prefix, NULL, "mcsbw405gmpo", &sprom->mcsbw405gmpo, 0,
594 fallback);
595 nvram_read_u32(prefix, NULL, "mcsbw205ghpo", &sprom->mcsbw205ghpo, 0,
596 fallback);
597 nvram_read_u32(prefix, NULL, "mcsbw20ul5ghpo",
598 &sprom->mcsbw20ul5ghpo, 0, fallback);
599 nvram_read_u32(prefix, NULL, "mcsbw405ghpo", &sprom->mcsbw405ghpo, 0,
600 fallback);
601 nvram_read_u16(prefix, NULL, "mcs32po", &sprom->mcs32po, 0, fallback);
602 nvram_read_u16(prefix, NULL, "legofdm40duppo",
603 &sprom->legofdm40duppo, 0, fallback);
604 nvram_read_u8(prefix, NULL, "sar2g", &sprom->sar2g, 0, fallback);
605 nvram_read_u8(prefix, NULL, "sar5g", &sprom->sar5g, 0, fallback);
606}
607
608static void bcm47xx_fill_sprom_path_r4589(struct ssb_sprom *sprom, 433static void bcm47xx_fill_sprom_path_r4589(struct ssb_sprom *sprom,
609 const char *prefix, bool fallback) 434 const char *prefix, bool fallback)
610{ 435{
@@ -741,7 +566,6 @@ static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom,
741static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix, 566static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix,
742 bool fallback) 567 bool fallback)
743{ 568{
744 nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0, true);
745 nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo, 569 nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
746 &sprom->boardflags_hi, fallback); 570 &sprom->boardflags_hi, fallback);
747 nvram_read_u32_2(prefix, "boardflags2", &sprom->boardflags2_lo, 571 nvram_read_u32_2(prefix, "boardflags2", &sprom->boardflags2_lo,
@@ -759,48 +583,29 @@ void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix,
759 switch (sprom->revision) { 583 switch (sprom->revision) {
760 case 1: 584 case 1:
761 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 585 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
762 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
763 bcm47xx_fill_sprom_r1(sprom, prefix, fallback);
764 break; 586 break;
765 case 2: 587 case 2:
766 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 588 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
767 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
768 bcm47xx_fill_sprom_r2389(sprom, prefix, fallback);
769 break; 589 break;
770 case 3: 590 case 3:
771 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 591 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
772 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
773 bcm47xx_fill_sprom_r2389(sprom, prefix, fallback);
774 bcm47xx_fill_sprom_r389(sprom, prefix, fallback);
775 bcm47xx_fill_sprom_r3(sprom, prefix, fallback); 592 bcm47xx_fill_sprom_r3(sprom, prefix, fallback);
776 break; 593 break;
777 case 4: 594 case 4:
778 case 5: 595 case 5:
779 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 596 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
780 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback); 597 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback);
781 bcm47xx_fill_sprom_r458(sprom, prefix, fallback);
782 bcm47xx_fill_sprom_r45(sprom, prefix, fallback);
783 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback); 598 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback);
784 bcm47xx_fill_sprom_path_r45(sprom, prefix, fallback); 599 bcm47xx_fill_sprom_path_r45(sprom, prefix, fallback);
785 break; 600 break;
786 case 8: 601 case 8:
787 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 602 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
788 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
789 bcm47xx_fill_sprom_r2389(sprom, prefix, fallback);
790 bcm47xx_fill_sprom_r389(sprom, prefix, fallback);
791 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback); 603 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback);
792 bcm47xx_fill_sprom_r458(sprom, prefix, fallback);
793 bcm47xx_fill_sprom_r89(sprom, prefix, fallback);
794 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback); 604 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback);
795 break; 605 break;
796 case 9: 606 case 9:
797 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 607 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
798 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
799 bcm47xx_fill_sprom_r2389(sprom, prefix, fallback);
800 bcm47xx_fill_sprom_r389(sprom, prefix, fallback);
801 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback); 608 bcm47xx_fill_sprom_r4589(sprom, prefix, fallback);
802 bcm47xx_fill_sprom_r89(sprom, prefix, fallback);
803 bcm47xx_fill_sprom_r9(sprom, prefix, fallback);
804 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback); 609 bcm47xx_fill_sprom_path_r4589(sprom, prefix, fallback);
805 break; 610 break;
806 default: 611 default:
@@ -808,8 +613,6 @@ void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix,
808 sprom->revision); 613 sprom->revision);
809 sprom->revision = 1; 614 sprom->revision = 1;
810 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback); 615 bcm47xx_fill_sprom_r1234589(sprom, prefix, fallback);
811 bcm47xx_fill_sprom_r12389(sprom, prefix, fallback);
812 bcm47xx_fill_sprom_r1(sprom, prefix, fallback);
813 } 616 }
814 617
815 bcm47xx_sprom_fill_auto(sprom, prefix, fallback); 618 bcm47xx_sprom_fill_auto(sprom, prefix, fallback);