Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: N-PHY: add tables for radio 0x2057 rev 14

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
3b7caa29 701fa113

+152 -3
+10 -2
drivers/net/wireless/b43/phy_n.c
··· 765 765 } 766 766 } 767 767 break; 768 - /* TODO */ 768 + case 14: /* 2 GHz only */ 769 + b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, 0x1b); 770 + b43_radio_write(dev, R2057_CP_KPD_IDAC, 0x3f); 771 + b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, 0x1f); 772 + b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, 0x1f); 773 + break; 769 774 } 770 775 771 776 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { ··· 783 778 txmix2g_tune_boost_pu = 0x0041; 784 779 /* TODO */ 785 780 break; 781 + case 14: 782 + txmix2g_tune_boost_pu = 0x21; 783 + pad2g_tune_pus = 0x23; 784 + break; 786 785 } 787 - /* TODO */ 788 786 } 789 787 790 788 if (txmix2g_tune_boost_pu)
+102 -1
drivers/net/wireless/b43/radio_2057.c
··· 117 117 { 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 }, 118 118 }; 119 119 120 + /* Extracted from MMIO dump of 6.30.223.248 */ 121 + static u16 r2057_rev14_init[][2] = { 122 + { 0x011, 0xfc }, { 0x030, 0x24 }, { 0x040, 0x1c }, { 0x082, 0x08 }, 123 + { 0x0b4, 0x44 }, { 0x0c8, 0x01 }, { 0x0c9, 0x01 }, { 0x107, 0x08 }, 124 + { 0x14d, 0x01 }, { 0x14e, 0x01 }, { 0x1af, 0x40 }, { 0x1b0, 0x40 }, 125 + { 0x1cc, 0x01 }, { 0x1cf, 0x10 }, { 0x1d0, 0x0f }, { 0x1d3, 0x10 }, 126 + { 0x1d4, 0x0f }, 127 + }; 128 + 120 129 #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \ 121 130 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \ 122 131 r20, r21, r22, r23, r24, r25, r26, r27) \ ··· 287 278 0x03, 0x3f), 288 279 PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424), 289 280 } 281 + }; 282 + 283 + /* Extracted from MMIO dump of 6.30.223.248 */ 284 + static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = { 285 + { 286 + .freq = 2412, 287 + RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c, 288 + 0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21, 289 + 0x53, 0xff), 290 + PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443), 291 + }, 292 + { 293 + .freq = 2417, 294 + RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71, 295 + 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21, 296 + 0x53, 0xff), 297 + PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441), 298 + }, 299 + { 300 + .freq = 2422, 301 + RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76, 302 + 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21, 303 + 0x53, 0xff), 304 + PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f), 305 + }, 306 + { 307 + .freq = 2427, 308 + RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b, 309 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21, 310 + 0x53, 0xff), 311 + PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d), 312 + }, 313 + { 314 + .freq = 2432, 315 + RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80, 316 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21, 317 + 0x53, 0xff), 318 + PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a), 319 + }, 320 + { 321 + .freq = 2437, 322 + RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85, 323 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21, 324 + 0x53, 0xff), 325 + PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438), 326 + }, 327 + { 328 + .freq = 2442, 329 + RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a, 330 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21, 331 + 0x43, 0xff), 332 + PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436), 333 + }, 334 + { 335 + .freq = 2447, 336 + RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f, 337 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21, 338 + 0x43, 0xff), 339 + PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434), 340 + }, 341 + { 342 + .freq = 2452, 343 + RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94, 344 + 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21, 345 + 0x43, 0xff), 346 + PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431), 347 + }, 348 + { 349 + .freq = 2457, 350 + RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99, 351 + 0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21, 352 + 0x43, 0xff), 353 + PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f), 354 + }, 355 + { 356 + .freq = 2462, 357 + RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e, 358 + 0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01, 359 + 0x43, 0xff), 360 + PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d), 361 + }, 290 362 }; 291 363 292 364 /* Extracted from MMIO dump of 6.30.223.141 */ ··· 566 476 size = ARRAY_SIZE(r2057_rev9_init); 567 477 } 568 478 break; 479 + case 17: 480 + if (phy->radio_rev == 14) { 481 + table = r2057_rev14_init[0]; 482 + size = ARRAY_SIZE(r2057_rev14_init); 483 + } 484 + break; 569 485 } 570 486 571 487 B43_WARN_ON(!table); ··· 594 498 *tabent_r7 = NULL; 595 499 *tabent_r7_2g = NULL; 596 500 597 - /* TODO */ 598 501 switch (phy->rev) { 599 502 case 8: 600 503 if (phy->radio_rev == 5) { ··· 605 510 if (phy->radio_rev == 9) { 606 511 e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9; 607 512 len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9); 513 + } 514 + break; 515 + case 17: 516 + if (phy->radio_rev == 14) { 517 + e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14; 518 + len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14); 608 519 } 609 520 break; 610 521 default:
+40
drivers/net/wireless/b43/tables_nphy.c
··· 2764 2764 0x600f0715, 0x600f0715, 0x600f0715, 0x600f0715, 2765 2765 }; 2766 2766 2767 + /* Extracted from MMIO dump of 6.30.223.248 */ 2768 + static const u32 b43_ntab_tx_gain_ipa_2057_rev14_2g[] = { 2769 + 0x50df002e, 0x50cf002d, 0x50bf002c, 0x50b7002b, 2770 + 0x50af002a, 0x50a70029, 0x509f0029, 0x50970028, 2771 + 0x508f0027, 0x50870027, 0x507f0027, 0x50770027, 2772 + 0x506f0027, 0x50670027, 0x505f0028, 0x50570029, 2773 + 0x504f002b, 0x5047002e, 0x5047002b, 0x50470029, 2774 + 0x503f002c, 0x503f0029, 0x5037002c, 0x5037002a, 2775 + 0x50370028, 0x502f002d, 0x502f002b, 0x502f0028, 2776 + 0x502f0026, 0x5027002d, 0x5027002a, 0x50270028, 2777 + 0x50270026, 0x50270024, 0x501f002e, 0x501f002b, 2778 + 0x501f0029, 0x501f0027, 0x501f0024, 0x501f0022, 2779 + 0x501f0020, 0x501f001f, 0x5017002c, 0x50170029, 2780 + 0x50170027, 0x50170024, 0x50170022, 0x50170021, 2781 + 0x5017001f, 0x5017001d, 0x5017001b, 0x5017001a, 2782 + 0x50170018, 0x50170017, 0x50170015, 0x500f002c, 2783 + 0x500f002a, 0x500f0027, 0x500f0025, 0x500f0023, 2784 + 0x500f0022, 0x500f001f, 0x500f001e, 0x500f001c, 2785 + 0x500f001a, 0x500f0019, 0x500f0018, 0x500f0016, 2786 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2787 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2788 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2789 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2790 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2791 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2792 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2793 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2794 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2795 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2796 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2797 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2798 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2799 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2800 + 0x500f0015, 0x500f0015, 0x500f0015, 0x500f0015, 2801 + }; 2802 + 2767 2803 /* IPA 2 5Hz */ 2768 2804 2769 2805 static const u32 b43_ntab_tx_gain_ipa_rev3_5g[] = { ··· 3619 3583 3620 3584 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { 3621 3585 switch (phy->rev) { 3586 + case 17: 3587 + if (phy->radio_rev == 14) 3588 + return b43_ntab_tx_gain_ipa_2057_rev14_2g; 3589 + break; 3622 3590 case 16: 3623 3591 if (phy->radio_rev == 9) 3624 3592 return b43_ntab_tx_gain_ipa_2057_rev9_2g;