// SPDX-License-Identifier: GPL-2.0-or-later
/*
Broadcom B43 wireless driver
IEEE 802.11n 2057 radio device data tables
Copyright (c) 2010 Rafał Miłecki <zajec5@gmail.com>
*/
#include "b43.h"
#include "radio_2057.h"
#include "phy_common.h"
static u16 r2057_rev4_init[][2 ] = {
{ 0 x0E, 0 x20 }, { 0 x31, 0 x00 }, { 0 x32, 0 x00 }, { 0 x33, 0 x00 },
{ 0 x35, 0 x26 }, { 0 x3C, 0 xff }, { 0 x3D, 0 xff }, { 0 x3E, 0 xff },
{ 0 x3F, 0 xff }, { 0 x62, 0 x33 }, { 0 x8A, 0 xf0 }, { 0 x8B, 0 x10 },
{ 0 x8C, 0 xf0 }, { 0 x91, 0 x3f }, { 0 x92, 0 x36 }, { 0 xA4, 0 x8c },
{ 0 xA8, 0 x55 }, { 0 xAF, 0 x01 }, { 0 x10F, 0 xf0 }, { 0 x110, 0 x10 },
{ 0 x111, 0 xf0 }, { 0 x116, 0 x3f }, { 0 x117, 0 x36 }, { 0 x129, 0 x8c },
{ 0 x12D, 0 x55 }, { 0 x134, 0 x01 }, { 0 x15E, 0 x00 }, { 0 x15F, 0 x00 },
{ 0 x160, 0 x00 }, { 0 x161, 0 x00 }, { 0 x162, 0 x00 }, { 0 x163, 0 x00 },
{ 0 x169, 0 x02 }, { 0 x16A, 0 x00 }, { 0 x16B, 0 x00 }, { 0 x16C, 0 x00 },
{ 0 x1A4, 0 x00 }, { 0 x1A5, 0 x00 }, { 0 x1A6, 0 x00 }, { 0 x1AA, 0 x00 },
{ 0 x1AB, 0 x00 }, { 0 x1AC, 0 x00 },
};
static u16 r2057_rev5_init[][2 ] = {
{ 0 x00, 0 x00 }, { 0 x01, 0 x57 }, { 0 x02, 0 x20 }, { 0 x23, 0 x6 },
{ 0 x31, 0 x00 }, { 0 x32, 0 x00 }, { 0 x33, 0 x00 }, { 0 x51, 0 x70 },
{ 0 x59, 0 x88 }, { 0 x5C, 0 x20 }, { 0 x62, 0 x33 }, { 0 x63, 0 x0f },
{ 0 x64, 0 x0f }, { 0 x81, 0 x01 }, { 0 x91, 0 x3f }, { 0 x92, 0 x36 },
{ 0 xA1, 0 x20 }, { 0 xD6, 0 x70 }, { 0 xDE, 0 x88 }, { 0 xE1, 0 x20 },
{ 0 xE8, 0 x0f }, { 0 xE9, 0 x0f }, { 0 x106, 0 x01 }, { 0 x116, 0 x3f },
{ 0 x117, 0 x36 }, { 0 x126, 0 x20 }, { 0 x15E, 0 x00 }, { 0 x15F, 0 x00 },
{ 0 x160, 0 x00 }, { 0 x161, 0 x00 }, { 0 x162, 0 x00 }, { 0 x163, 0 x00 },
{ 0 x16A, 0 x00 }, { 0 x16B, 0 x00 }, { 0 x16C, 0 x00 }, { 0 x1A4, 0 x00 },
{ 0 x1A5, 0 x00 }, { 0 x1A6, 0 x00 }, { 0 x1AA, 0 x00 }, { 0 x1AB, 0 x00 },
{ 0 x1AC, 0 x00 }, { 0 x1B7, 0 x0c }, { 0 x1C1, 0 x01 }, { 0 x1C2, 0 x80 },
};
static u16 r2057_rev5a_init[][2 ] = {
{ 0 x00, 0 x15 }, { 0 x01, 0 x57 }, { 0 x02, 0 x20 }, { 0 x23, 0 x6 },
{ 0 x31, 0 x00 }, { 0 x32, 0 x00 }, { 0 x33, 0 x00 }, { 0 x51, 0 x70 },
{ 0 x59, 0 x88 }, { 0 x5C, 0 x20 }, { 0 x62, 0 x33 }, { 0 x63, 0 x0f },
{ 0 x64, 0 x0f }, { 0 x81, 0 x01 }, { 0 x91, 0 x3f }, { 0 x92, 0 x36 },
{ 0 xC9, 0 x01 }, { 0 xD6, 0 x70 }, { 0 xDE, 0 x88 }, { 0 xE1, 0 x20 },
{ 0 xE8, 0 x0f }, { 0 xE9, 0 x0f }, { 0 x106, 0 x01 }, { 0 x116, 0 x3f },
{ 0 x117, 0 x36 }, { 0 x126, 0 x20 }, { 0 x14E, 0 x01 }, { 0 x15E, 0 x00 },
{ 0 x15F, 0 x00 }, { 0 x160, 0 x00 }, { 0 x161, 0 x00 }, { 0 x162, 0 x00 },
{ 0 x163, 0 x00 }, { 0 x16A, 0 x00 }, { 0 x16B, 0 x00 }, { 0 x16C, 0 x00 },
{ 0 x1A4, 0 x00 }, { 0 x1A5, 0 x00 }, { 0 x1A6, 0 x00 }, { 0 x1AA, 0 x00 },
{ 0 x1AB, 0 x00 }, { 0 x1AC, 0 x00 }, { 0 x1B7, 0 x0c }, { 0 x1C1, 0 x01 },
{ 0 x1C2, 0 x80 },
};
static u16 r2057_rev7_init[][2 ] = {
{ 0 x00, 0 x00 }, { 0 x01, 0 x57 }, { 0 x02, 0 x20 }, { 0 x31, 0 x00 },
{ 0 x32, 0 x00 }, { 0 x33, 0 x00 }, { 0 x51, 0 x70 }, { 0 x59, 0 x88 },
{ 0 x5C, 0 x20 }, { 0 x62, 0 x33 }, { 0 x63, 0 x0f }, { 0 x64, 0 x13 },
{ 0 x66, 0 xee }, { 0 x6E, 0 x58 }, { 0 x75, 0 x13 }, { 0 x7B, 0 x13 },
{ 0 x7C, 0 x14 }, { 0 x7D, 0 xee }, { 0 x81, 0 x01 }, { 0 x91, 0 x3f },
{ 0 x92, 0 x36 }, { 0 xA1, 0 x20 }, { 0 xD6, 0 x70 }, { 0 xDE, 0 x88 },
{ 0 xE1, 0 x20 }, { 0 xE8, 0 x0f }, { 0 xE9, 0 x13 }, { 0 xEB, 0 xee },
{ 0 xF3, 0 x58 }, { 0 xFA, 0 x13 }, { 0 x100, 0 x13 }, { 0 x101, 0 x14 },
{ 0 x102, 0 xee }, { 0 x106, 0 x01 }, { 0 x116, 0 x3f }, { 0 x117, 0 x36 },
{ 0 x126, 0 x20 }, { 0 x15E, 0 x00 }, { 0 x15F, 0 x00 }, { 0 x160, 0 x00 },
{ 0 x161, 0 x00 }, { 0 x162, 0 x00 }, { 0 x163, 0 x00 }, { 0 x16A, 0 x00 },
{ 0 x16B, 0 x00 }, { 0 x16C, 0 x00 }, { 0 x1A4, 0 x00 }, { 0 x1A5, 0 x00 },
{ 0 x1A6, 0 x00 }, { 0 x1AA, 0 x00 }, { 0 x1AB, 0 x00 }, { 0 x1AC, 0 x00 },
{ 0 x1B7, 0 x05 }, { 0 x1C2, 0 xa0 },
};
/* TODO: Which devices should use it?
static u16 r2057_rev8_init[][2] = {
{ 0x00, 0x08 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
{ 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
{ 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x0f },
{ 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 }, { 0x7C, 0x0f },
{ 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
{ 0xA1, 0x20 }, { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
{ 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0xF3, 0x58 },
{ 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x0f }, { 0x102, 0xee },
{ 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x126, 0x20 },
{ 0x14E, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
{ 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
{ 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
{ 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
{ 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
};
*/
/* Extracted from MMIO dump of 6.30.223.141 */
static u16 r2057_rev9_init[][2 ] = {
{ 0 x27, 0 x1f }, { 0 x28, 0 x0a }, { 0 x29, 0 x2f }, { 0 x42, 0 x1f },
{ 0 x48, 0 x3f }, { 0 x5c, 0 x41 }, { 0 x63, 0 x14 }, { 0 x64, 0 x12 },
{ 0 x66, 0 xff }, { 0 x74, 0 xa3 }, { 0 x7b, 0 x14 }, { 0 x7c, 0 x14 },
{ 0 x7d, 0 xee }, { 0 x86, 0 xc0 }, { 0 xc4, 0 x10 }, { 0 xc9, 0 x01 },
{ 0 xe1, 0 x41 }, { 0 xe8, 0 x14 }, { 0 xe9, 0 x12 }, { 0 xeb, 0 xff },
{ 0 xf5, 0 x0a }, { 0 xf8, 0 x09 }, { 0 xf9, 0 xa3 }, { 0 x100, 0 x14 },
{ 0 x101, 0 x10 }, { 0 x102, 0 xee }, { 0 x10b, 0 xc0 }, { 0 x149, 0 x10 },
{ 0 x14e, 0 x01 }, { 0 x1b7, 0 x05 }, { 0 x1c2, 0 xa0 },
};
/* Extracted from MMIO dump of 6.30.223.248 */
static u16 r2057_rev14_init[][2 ] = {
{ 0 x011, 0 xfc }, { 0 x030, 0 x24 }, { 0 x040, 0 x1c }, { 0 x082, 0 x08 },
{ 0 x0b4, 0 x44 }, { 0 x0c8, 0 x01 }, { 0 x0c9, 0 x01 }, { 0 x107, 0 x08 },
{ 0 x14d, 0 x01 }, { 0 x14e, 0 x01 }, { 0 x1af, 0 x40 }, { 0 x1b0, 0 x40 },
{ 0 x1cc, 0 x01 }, { 0 x1cf, 0 x10 }, { 0 x1d0, 0 x0f }, { 0 x1d3, 0 x10 },
{ 0 x1d4, 0 x0f },
};
#define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
r20, r21, r22, r23, r24, r25, r26, r27) \
.radio_vcocal_countval0 = r00, \
.radio_vcocal_countval1 = r01, \
.radio_rfpll_refmaster_sparextalsize = r02, \
.radio_rfpll_loopfilter_r1 = r03, \
.radio_rfpll_loopfilter_c2 = r04, \
.radio_rfpll_loopfilter_c1 = r05, \
.radio_cp_kpd_idac = r06, \
.radio_rfpll_mmd0 = r07, \
.radio_rfpll_mmd1 = r08, \
.radio_vcobuf_tune = r09, \
.radio_logen_mx2g_tune = r10, \
.radio_logen_mx5g_tune = r11, \
.radio_logen_indbuf2g_tune = r12, \
.radio_logen_indbuf5g_tune = r13, \
.radio_txmix2g_tune_boost_pu_core0 = r14, \
.radio_pad2g_tune_pus_core0 = r15, \
.radio_pga_boost_tune_core0 = r16, \
.radio_txmix5g_boost_tune_core0 = r17, \
.radio_pad5g_tune_misc_pus_core0 = r18, \
.radio_lna2g_tune_core0 = r19, \
.radio_lna5g_tune_core0 = r20, \
.radio_txmix2g_tune_boost_pu_core1 = r21, \
.radio_pad2g_tune_pus_core1 = r22, \
.radio_pga_boost_tune_core1 = r23, \
.radio_txmix5g_boost_tune_core1 = r24, \
.radio_pad5g_tune_misc_pus_core1 = r25, \
.radio_lna2g_tune_core1 = r26, \
.radio_lna5g_tune_core1 = r27
#define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
r10, r11, r12, r13, r14, r15, r16, r17) \
.radio_vcocal_countval0 = r00, \
.radio_vcocal_countval1 = r01, \
.radio_rfpll_refmaster_sparextalsize = r02, \
.radio_rfpll_loopfilter_r1 = r03, \
.radio_rfpll_loopfilter_c2 = r04, \
.radio_rfpll_loopfilter_c1 = r05, \
.radio_cp_kpd_idac = r06, \
.radio_rfpll_mmd0 = r07, \
.radio_rfpll_mmd1 = r08, \
.radio_vcobuf_tune = r09, \
.radio_logen_mx2g_tune = r10, \
.radio_logen_indbuf2g_tune = r11, \
.radio_txmix2g_tune_boost_pu_core0 = r12, \
.radio_pad2g_tune_pus_core0 = r13, \
.radio_lna2g_tune_core0 = r14, \
.radio_txmix2g_tune_boost_pu_core1 = r15, \
.radio_pad2g_tune_pus_core1 = r16, \
.radio_lna2g_tune_core1 = r17
#define PHYREGS(r0, r1, r2, r3, r4, r5) \
.phy_regs.phy_bw1a = r0, \
.phy_regs.phy_bw2 = r1, \
.phy_regs.phy_bw3 = r2, \
.phy_regs.phy_bw4 = r3, \
.phy_regs.phy_bw5 = r4, \
.phy_regs.phy_bw6 = r5
/* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
{
.freq = 2412 ,
RADIOREGS7_2G(0 x48, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x6c,
0 x09, 0 x0d, 0 x08, 0 x0e, 0 x61, 0 x03, 0 xff, 0 x61,
0 x03, 0 xff),
PHYREGS(0 x03c9, 0 x03c5, 0 x03c1, 0 x043a, 0 x043f, 0 x0443),
},
{
.freq = 2417 ,
RADIOREGS7_2G(0 x4b, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x71,
0 x09, 0 x0d, 0 x08, 0 x0e, 0 x61, 0 x03, 0 xff, 0 x61,
0 x03, 0 xff),
PHYREGS(0 x03cb, 0 x03c7, 0 x03c3, 0 x0438, 0 x043d, 0 x0441),
},
{
.freq = 2422 ,
RADIOREGS7_2G(0 x4e, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x76,
0 x09, 0 x0d, 0 x08, 0 x0e, 0 x61, 0 x03, 0 xef, 0 x61,
0 x03, 0 xef),
PHYREGS(0 x03cd, 0 x03c9, 0 x03c5, 0 x0436, 0 x043a, 0 x043f),
},
{
.freq = 2427 ,
RADIOREGS7_2G(0 x52, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x7b,
0 x09, 0 x0c, 0 x08, 0 x0e, 0 x61, 0 x03, 0 xdf, 0 x61,
0 x03, 0 xdf),
PHYREGS(0 x03cf, 0 x03cb, 0 x03c7, 0 x0434, 0 x0438, 0 x043d),
},
{
.freq = 2432 ,
RADIOREGS7_2G(0 x55, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x80,
0 x09, 0 x0c, 0 x07, 0 x0d, 0 x61, 0 x03, 0 xcf, 0 x61,
0 x03, 0 xcf),
PHYREGS(0 x03d1, 0 x03cd, 0 x03c9, 0 x0431, 0 x0436, 0 x043a),
},
{
.freq = 2437 ,
RADIOREGS7_2G(0 x58, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x85,
0 x09, 0 x0c, 0 x07, 0 x0d, 0 x61, 0 x03, 0 xbf, 0 x61,
0 x03, 0 xbf),
PHYREGS(0 x03d3, 0 x03cf, 0 x03cb, 0 x042f, 0 x0434, 0 x0438),
},
{
.freq = 2442 ,
RADIOREGS7_2G(0 x5c, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x8a,
0 x09, 0 x0b, 0 x07, 0 x0d, 0 x61, 0 x03, 0 xaf, 0 x61,
0 x03, 0 xaf),
PHYREGS(0 x03d5, 0 x03d1, 0 x03cd, 0 x042d, 0 x0431, 0 x0436),
},
{
.freq = 2447 ,
RADIOREGS7_2G(0 x5f, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x8f,
0 x09, 0 x0b, 0 x07, 0 x0d, 0 x61, 0 x03, 0 x9f, 0 x61,
0 x03, 0 x9f),
PHYREGS(0 x03d7, 0 x03d3, 0 x03cf, 0 x042b, 0 x042f, 0 x0434),
},
{
.freq = 2452 ,
RADIOREGS7_2G(0 x62, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x94,
0 x09, 0 x0b, 0 x07, 0 x0d, 0 x61, 0 x03, 0 x8f, 0 x61,
0 x03, 0 x8f),
PHYREGS(0 x03d9, 0 x03d5, 0 x03d1, 0 x0429, 0 x042d, 0 x0431),
},
{
.freq = 2457 ,
RADIOREGS7_2G(0 x66, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x99,
0 x09, 0 x0b, 0 x07, 0 x0c, 0 x61, 0 x03, 0 x7f, 0 x61,
0 x03, 0 x7f),
PHYREGS(0 x03db, 0 x03d7, 0 x03d3, 0 x0427, 0 x042b, 0 x042f),
},
{
.freq = 2462 ,
RADIOREGS7_2G(0 x69, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x9e,
0 x09, 0 x0b, 0 x07, 0 x0c, 0 x61, 0 x03, 0 x6f, 0 x61,
0 x03, 0 x6f),
PHYREGS(0 x03dd, 0 x03d9, 0 x03d5, 0 x0424, 0 x0429, 0 x042d),
},
{
.freq = 2467 ,
RADIOREGS7_2G(0 x6c, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 xa3,
0 x09, 0 x0b, 0 x06, 0 x0c, 0 x61, 0 x03, 0 x5f, 0 x61,
0 x03, 0 x5f),
PHYREGS(0 x03df, 0 x03db, 0 x03d7, 0 x0422, 0 x0427, 0 x042b),
},
{
.freq = 2472 ,
RADIOREGS7_2G(0 x70, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 xa8,
0 x09, 0 x0a, 0 x06, 0 x0b, 0 x61, 0 x03, 0 x4f, 0 x61,
0 x03, 0 x4f),
PHYREGS(0 x03e1, 0 x03dd, 0 x03d9, 0 x0420, 0 x0424, 0 x0429),
},
{
.freq = 2484 ,
RADIOREGS7_2G(0 x78, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 xb4,
0 x09, 0 x0a, 0 x06, 0 x0b, 0 x61, 0 x03, 0 x3f, 0 x61,
0 x03, 0 x3f),
PHYREGS(0 x03e6, 0 x03e2, 0 x03de, 0 x041b, 0 x041f, 0 x0424),
}
};
/* Extracted from MMIO dump of 6.30.223.248 */
static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = {
{
.freq = 2412 ,
RADIOREGS7_2G(0 x48, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x6c,
0 x09, 0 x0d, 0 x09, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03c9, 0 x03c5, 0 x03c1, 0 x043a, 0 x043f, 0 x0443),
},
{
.freq = 2417 ,
RADIOREGS7_2G(0 x4b, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x71,
0 x09, 0 x0d, 0 x08, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03cb, 0 x03c7, 0 x03c3, 0 x0438, 0 x043d, 0 x0441),
},
{
.freq = 2422 ,
RADIOREGS7_2G(0 x4e, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x76,
0 x09, 0 x0d, 0 x08, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03cd, 0 x03c9, 0 x03c5, 0 x0436, 0 x043a, 0 x043f),
},
{
.freq = 2427 ,
RADIOREGS7_2G(0 x52, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x7b,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03cf, 0 x03cb, 0 x03c7, 0 x0434, 0 x0438, 0 x043d),
},
{
.freq = 2432 ,
RADIOREGS7_2G(0 x55, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x80,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03d1, 0 x03cd, 0 x03c9, 0 x0431, 0 x0436, 0 x043a),
},
{
.freq = 2437 ,
RADIOREGS7_2G(0 x58, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x85,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x53, 0 xff, 0 x21,
0 x53, 0 xff),
PHYREGS(0 x03d3, 0 x03cf, 0 x03cb, 0 x042f, 0 x0434, 0 x0438),
},
{
.freq = 2442 ,
RADIOREGS7_2G(0 x5c, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x8a,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x43, 0 xff, 0 x21,
0 x43, 0 xff),
PHYREGS(0 x03d5, 0 x03d1, 0 x03cd, 0 x042d, 0 x0431, 0 x0436),
},
{
.freq = 2447 ,
RADIOREGS7_2G(0 x5f, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x8f,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x43, 0 xff, 0 x21,
0 x43, 0 xff),
PHYREGS(0 x03d7, 0 x03d3, 0 x03cf, 0 x042b, 0 x042f, 0 x0434),
},
{
.freq = 2452 ,
RADIOREGS7_2G(0 x62, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x94,
0 x09, 0 x0c, 0 x08, 0 x03, 0 x21, 0 x43, 0 xff, 0 x21,
0 x43, 0 xff),
PHYREGS(0 x03d9, 0 x03d5, 0 x03d1, 0 x0429, 0 x042d, 0 x0431),
},
{
.freq = 2457 ,
RADIOREGS7_2G(0 x66, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x99,
0 x09, 0 x0b, 0 x07, 0 x03, 0 x21, 0 x43, 0 xff, 0 x21,
0 x43, 0 xff),
PHYREGS(0 x03db, 0 x03d7, 0 x03d3, 0 x0427, 0 x042b, 0 x042f),
},
{
.freq = 2462 ,
RADIOREGS7_2G(0 x69, 0 x16, 0 x30, 0 x2b, 0 x1f, 0 x1f, 0 x30, 0 x9e,
0 x09, 0 x0b, 0 x07, 0 x03, 0 x01, 0 x43, 0 xff, 0 x01,
0 x43, 0 xff),
PHYREGS(0 x03dd, 0 x03d9, 0 x03d5, 0 x0424, 0 x0429, 0 x042d),
},
};
/* Extracted from MMIO dump of 6.30.223.141 */
static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
{
.freq = 2412 ,
RADIOREGS7(0 x48, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x6c,
0 x09, 0 x0f, 0 x0a, 0 x00, 0 x0a, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03c9, 0 x03c5, 0 x03c1, 0 x043a, 0 x043f, 0 x0443),
},
{
.freq = 2417 ,
RADIOREGS7(0 x4b, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x71,
0 x09, 0 x0f, 0 x0a, 0 x00, 0 x0a, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03cb, 0 x03c7, 0 x03c3, 0 x0438, 0 x043d, 0 x0441),
},
{
.freq = 2422 ,
RADIOREGS7(0 x4e, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x76,
0 x09, 0 x0f, 0 x09, 0 x00, 0 x09, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03cd, 0 x03c9, 0 x03c5, 0 x0436, 0 x043a, 0 x043f),
},
{
.freq = 2427 ,
RADIOREGS7(0 x52, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x7b,
0 x09, 0 x0f, 0 x09, 0 x00, 0 x09, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03cf, 0 x03cb, 0 x03c7, 0 x0434, 0 x0438, 0 x043d),
},
{
.freq = 2432 ,
RADIOREGS7(0 x55, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x80,
0 x09, 0 x0f, 0 x08, 0 x00, 0 x08, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03d1, 0 x03cd, 0 x03c9, 0 x0431, 0 x0436, 0 x043a),
},
{
.freq = 2437 ,
RADIOREGS7(0 x58, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x85,
0 x09, 0 x0f, 0 x08, 0 x00, 0 x08, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03d3, 0 x03cf, 0 x03cb, 0 x042f, 0 x0434, 0 x0438),
},
{
.freq = 2442 ,
RADIOREGS7(0 x5c, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x8a,
0 x09, 0 x0f, 0 x07, 0 x00, 0 x07, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03d5, 0 x03d1, 0 x03cd, 0 x042d, 0 x0431, 0 x0436),
},
{
.freq = 2447 ,
RADIOREGS7(0 x5f, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x8f,
0 x09, 0 x0f, 0 x07, 0 x00, 0 x07, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03d7, 0 x03d3, 0 x03cf, 0 x042b, 0 x042f, 0 x0434),
},
{
.freq = 2452 ,
RADIOREGS7(0 x62, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x94,
0 x09, 0 x0f, 0 x07, 0 x00, 0 x07, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03d9, 0 x03d5, 0 x03d1, 0 x0429, 0 x042d, 0 x0431),
},
{
.freq = 2457 ,
RADIOREGS7(0 x66, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x99,
0 x09, 0 x0f, 0 x06, 0 x00, 0 x06, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03db, 0 x03d7, 0 x03d3, 0 x0427, 0 x042b, 0 x042f),
},
{
.freq = 2462 ,
RADIOREGS7(0 x69, 0 x16, 0 x30, 0 x1b, 0 x0a, 0 x0a, 0 x30, 0 x9e,
0 x09, 0 x0f, 0 x06, 0 x00, 0 x06, 0 x00, 0 x41, 0 x63,
0 x00, 0 x00, 0 x00, 0 xf0, 0 x00, 0 x41, 0 x63, 0 x00,
0 x00, 0 x00, 0 xf0, 0 x00),
PHYREGS(0 x03dd, 0 x03d9, 0 x03d5, 0 x0424, 0 x0429, 0 x042d),
},
{
.freq = 5180 ,
RADIOREGS7(0 xbe, 0 x16, 0 x10, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x06,
0 x02, 0 x0e, 0 x00, 0 x0e, 0 x00, 0 x9e, 0 x00, 0 x00,
0 x9f, 0 x2f, 0 xa3, 0 x00, 0 xfc, 0 x00, 0 x00, 0 x4f,
0 x3a, 0 x83, 0 x00, 0 xfc),
PHYREGS(0 x081c, 0 x0818, 0 x0814, 0 x01f9, 0 x01fa, 0 x01fb),
},
{
.freq = 5200 ,
RADIOREGS7(0 xc5, 0 x16, 0 x10, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x08,
0 x02, 0 x0e, 0 x00, 0 x0e, 0 x00, 0 x9e, 0 x00, 0 x00,
0 x7f, 0 x2f, 0 x83, 0 x00, 0 xf8, 0 x00, 0 x00, 0 x4c,
0 x4a, 0 x83, 0 x00, 0 xf8),
PHYREGS(0 x0824, 0 x0820, 0 x081c, 0 x01f7, 0 x01f8, 0 x01f9),
},
{
.freq = 5220 ,
RADIOREGS7(0 xcc, 0 x16, 0 x10, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x0a,
0 x02, 0 x0e, 0 x00, 0 x0e, 0 x00, 0 x9e, 0 x00, 0 x00,
0 x6d, 0 x3d, 0 x83, 0 x00, 0 xf8, 0 x00, 0 x00, 0 x2d,
0 x2a, 0 x73, 0 x00, 0 xf8),
PHYREGS(0 x082c, 0 x0828, 0 x0824, 0 x01f5, 0 x01f6, 0 x01f7),
},
{
.freq = 5240 ,
RADIOREGS7(0 xd2, 0 x16, 0 x10, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x0c,
0 x02, 0 x0d, 0 x00, 0 x0d, 0 x00, 0 x8d, 0 x00, 0 x00,
0 x4d, 0 x1c, 0 x73, 0 x00, 0 xf8, 0 x00, 0 x00, 0 x4d,
0 x2b, 0 x73, 0 x00, 0 xf8),
PHYREGS(0 x0834, 0 x0830, 0 x082c, 0 x01f3, 0 x01f4, 0 x01f5),
},
{
.freq = 5745 ,
RADIOREGS7(0 x7b, 0 x17, 0 x20, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x7d,
0 x04, 0 x08, 0 x00, 0 x06, 0 x00, 0 x15, 0 x00, 0 x00,
0 x08, 0 x03, 0 x03, 0 x00, 0 x30, 0 x00, 0 x00, 0 x06,
0 x02, 0 x03, 0 x00, 0 x30),
PHYREGS(0 x08fe, 0 x08fa, 0 x08f6, 0 x01c8, 0 x01c8, 0 x01c9),
},
{
.freq = 5765 ,
RADIOREGS7(0 x81, 0 x17, 0 x20, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x81,
0 x04, 0 x08, 0 x00, 0 x06, 0 x00, 0 x15, 0 x00, 0 x00,
0 x06, 0 x03, 0 x03, 0 x00, 0 x00, 0 x00, 0 x00, 0 x05,
0 x02, 0 x03, 0 x00, 0 x00),
PHYREGS(0 x0906, 0 x0902, 0 x08fe, 0 x01c6, 0 x01c7, 0 x01c8),
},
{
.freq = 5785 ,
RADIOREGS7(0 x88, 0 x17, 0 x20, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x85,
0 x04, 0 x08, 0 x00, 0 x06, 0 x00, 0 x15, 0 x00, 0 x00,
0 x08, 0 x03, 0 x03, 0 x00, 0 x00, 0 x00, 0 x00, 0 x05,
0 x21, 0 x03, 0 x00, 0 x00),
PHYREGS(0 x090e, 0 x090a, 0 x0906, 0 x01c4, 0 x01c5, 0 x01c6),
},
{
.freq = 5805 ,
RADIOREGS7(0 x8f, 0 x17, 0 x20, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x89,
0 x04, 0 x07, 0 x00, 0 x06, 0 x00, 0 x04, 0 x00, 0 x00,
0 x06, 0 x03, 0 x03, 0 x00, 0 x00, 0 x00, 0 x00, 0 x03,
0 x00, 0 x03, 0 x00, 0 x00),
PHYREGS(0 x0916, 0 x0912, 0 x090e, 0 x01c3, 0 x01c4, 0 x01c4),
},
{
.freq = 5825 ,
RADIOREGS7(0 x95, 0 x17, 0 x20, 0 x1f, 0 x08, 0 x08, 0 x3f, 0 x8d,
0 x04, 0 x07, 0 x00, 0 x05, 0 x00, 0 x03, 0 x00, 0 x00,
0 x05, 0 x03, 0 x03, 0 x00, 0 x00, 0 x00, 0 x00, 0 x03,
0 x00, 0 x03, 0 x00, 0 x00),
PHYREGS(0 x091e, 0 x091a, 0 x0916, 0 x01c1, 0 x01c2, 0 x01c3),
},
};
void r2057_upload_inittabs(struct b43_wldev *dev)
{
struct b43_phy *phy = &dev->phy;
u16 *table = NULL;
u16 size, i;
switch (phy->rev) {
case 7 :
table = r2057_rev4_init[0 ];
size = ARRAY_SIZE(r2057_rev4_init);
break ;
case 8 :
if (phy->radio_rev == 5 ) {
table = r2057_rev5_init[0 ];
size = ARRAY_SIZE(r2057_rev5_init);
} else if (phy->radio_rev == 7 ) {
table = r2057_rev7_init[0 ];
size = ARRAY_SIZE(r2057_rev7_init);
}
break ;
case 9 :
if (phy->radio_rev == 5 ) {
table = r2057_rev5a_init[0 ];
size = ARRAY_SIZE(r2057_rev5a_init);
}
break ;
case 16 :
if (phy->radio_rev == 9 ) {
table = r2057_rev9_init[0 ];
size = ARRAY_SIZE(r2057_rev9_init);
}
break ;
case 17 :
if (phy->radio_rev == 14 ) {
table = r2057_rev14_init[0 ];
size = ARRAY_SIZE(r2057_rev14_init);
}
break ;
}
B43_WARN_ON(!table);
if (table) {
for (i = 0 ; i < size; i++, table += 2 )
b43_radio_write(dev, table[0 ], table[1 ]);
}
}
void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
const struct b43_nphy_chantabent_rev7 **tabent_r7,
const struct b43_nphy_chantabent_rev7_2g **tabent_r7_2g)
{
struct b43_phy *phy = &dev->phy;
const struct b43_nphy_chantabent_rev7 *e_r7 = NULL;
const struct b43_nphy_chantabent_rev7_2g *e_r7_2g = NULL;
unsigned int len, i;
*tabent_r7 = NULL;
*tabent_r7_2g = NULL;
switch (phy->rev) {
case 8 :
if (phy->radio_rev == 5 ) {
e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
}
break ;
case 16 :
if (phy->radio_rev == 9 ) {
e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;
len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9);
}
break ;
case 17 :
if (phy->radio_rev == 14 ) {
e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14;
len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14);
}
break ;
default :
break ;
}
if (e_r7) {
for (i = 0 ; i < len; i++, e_r7++) {
if (e_r7->freq == freq) {
*tabent_r7 = e_r7;
return ;
}
}
} else if (e_r7_2g) {
for (i = 0 ; i < len; i++, e_r7_2g++) {
if (e_r7_2g->freq == freq) {
*tabent_r7_2g = e_r7_2g;
return ;
}
}
} else {
B43_WARN_ON(1 );
}
}
Messung V0.5 in Prozent C=96 H=91 G=93