xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/broadcom/b43/radio_2057.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun   Broadcom B43 wireless driver
5*4882a593Smuzhiyun   IEEE 802.11n 2057 radio device data tables
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun   Copyright (c) 2010 Rafał Miłecki <zajec5@gmail.com>
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "b43.h"
13*4882a593Smuzhiyun #include "radio_2057.h"
14*4882a593Smuzhiyun #include "phy_common.h"
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun static u16 r2057_rev4_init[][2] = {
17*4882a593Smuzhiyun 	{ 0x0E, 0x20 }, { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 },
18*4882a593Smuzhiyun 	{ 0x35, 0x26 }, { 0x3C, 0xff }, { 0x3D, 0xff }, { 0x3E, 0xff },
19*4882a593Smuzhiyun 	{ 0x3F, 0xff }, { 0x62, 0x33 }, { 0x8A, 0xf0 }, { 0x8B, 0x10 },
20*4882a593Smuzhiyun 	{ 0x8C, 0xf0 }, { 0x91, 0x3f }, { 0x92, 0x36 }, { 0xA4, 0x8c },
21*4882a593Smuzhiyun 	{ 0xA8, 0x55 }, { 0xAF, 0x01 }, { 0x10F, 0xf0 }, { 0x110, 0x10 },
22*4882a593Smuzhiyun 	{ 0x111, 0xf0 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x129, 0x8c },
23*4882a593Smuzhiyun 	{ 0x12D, 0x55 }, { 0x134, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
24*4882a593Smuzhiyun 	{ 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
25*4882a593Smuzhiyun 	{ 0x169, 0x02 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
26*4882a593Smuzhiyun 	{ 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
27*4882a593Smuzhiyun 	{ 0x1AB, 0x00 }, { 0x1AC, 0x00 },
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun static u16 r2057_rev5_init[][2] = {
31*4882a593Smuzhiyun 	{ 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
32*4882a593Smuzhiyun 	{ 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
33*4882a593Smuzhiyun 	{ 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
34*4882a593Smuzhiyun 	{ 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
35*4882a593Smuzhiyun 	{ 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
36*4882a593Smuzhiyun 	{ 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
37*4882a593Smuzhiyun 	{ 0x117, 0x36 }, { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
38*4882a593Smuzhiyun 	{ 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
39*4882a593Smuzhiyun 	{ 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 },
40*4882a593Smuzhiyun 	{ 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 },
41*4882a593Smuzhiyun 	{ 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 }, { 0x1C2, 0x80 },
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun static u16 r2057_rev5a_init[][2] = {
45*4882a593Smuzhiyun 	{ 0x00, 0x15 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
46*4882a593Smuzhiyun 	{ 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
47*4882a593Smuzhiyun 	{ 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
48*4882a593Smuzhiyun 	{ 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
49*4882a593Smuzhiyun 	{ 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
50*4882a593Smuzhiyun 	{ 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
51*4882a593Smuzhiyun 	{ 0x117, 0x36 }, { 0x126, 0x20 }, { 0x14E, 0x01 }, { 0x15E, 0x00 },
52*4882a593Smuzhiyun 	{ 0x15F, 0x00 }, { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 },
53*4882a593Smuzhiyun 	{ 0x163, 0x00 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
54*4882a593Smuzhiyun 	{ 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
55*4882a593Smuzhiyun 	{ 0x1AB, 0x00 }, { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 },
56*4882a593Smuzhiyun 	{ 0x1C2, 0x80 },
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun static u16 r2057_rev7_init[][2] = {
60*4882a593Smuzhiyun 	{ 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
61*4882a593Smuzhiyun 	{ 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
62*4882a593Smuzhiyun 	{ 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x13 },
63*4882a593Smuzhiyun 	{ 0x66, 0xee }, { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 },
64*4882a593Smuzhiyun 	{ 0x7C, 0x14 }, { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f },
65*4882a593Smuzhiyun 	{ 0x92, 0x36 }, { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
66*4882a593Smuzhiyun 	{ 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x13 }, { 0xEB, 0xee },
67*4882a593Smuzhiyun 	{ 0xF3, 0x58 }, { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x14 },
68*4882a593Smuzhiyun 	{ 0x102, 0xee }, { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 },
69*4882a593Smuzhiyun 	{ 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
70*4882a593Smuzhiyun 	{ 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
71*4882a593Smuzhiyun 	{ 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
72*4882a593Smuzhiyun 	{ 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
73*4882a593Smuzhiyun 	{ 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
74*4882a593Smuzhiyun };
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /* TODO: Which devices should use it?
77*4882a593Smuzhiyun static u16 r2057_rev8_init[][2] = {
78*4882a593Smuzhiyun 	{ 0x00, 0x08 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
79*4882a593Smuzhiyun 	{ 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
80*4882a593Smuzhiyun 	{ 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x0f },
81*4882a593Smuzhiyun 	{ 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 }, { 0x7C, 0x0f },
82*4882a593Smuzhiyun 	{ 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
83*4882a593Smuzhiyun 	{ 0xA1, 0x20 }, { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
84*4882a593Smuzhiyun 	{ 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0xF3, 0x58 },
85*4882a593Smuzhiyun 	{ 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x0f }, { 0x102, 0xee },
86*4882a593Smuzhiyun 	{ 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x126, 0x20 },
87*4882a593Smuzhiyun 	{ 0x14E, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
88*4882a593Smuzhiyun 	{ 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
89*4882a593Smuzhiyun 	{ 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
90*4882a593Smuzhiyun 	{ 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
91*4882a593Smuzhiyun 	{ 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun */
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun /* Extracted from MMIO dump of 6.30.223.141 */
96*4882a593Smuzhiyun static u16 r2057_rev9_init[][2] = {
97*4882a593Smuzhiyun 	{ 0x27, 0x1f }, { 0x28, 0x0a }, { 0x29, 0x2f }, { 0x42, 0x1f },
98*4882a593Smuzhiyun 	{ 0x48, 0x3f }, { 0x5c, 0x41 }, { 0x63, 0x14 }, { 0x64, 0x12 },
99*4882a593Smuzhiyun 	{ 0x66, 0xff }, { 0x74, 0xa3 }, { 0x7b, 0x14 }, { 0x7c, 0x14 },
100*4882a593Smuzhiyun 	{ 0x7d, 0xee }, { 0x86, 0xc0 }, { 0xc4, 0x10 }, { 0xc9, 0x01 },
101*4882a593Smuzhiyun 	{ 0xe1, 0x41 }, { 0xe8, 0x14 }, { 0xe9, 0x12 }, { 0xeb, 0xff },
102*4882a593Smuzhiyun 	{ 0xf5, 0x0a }, { 0xf8, 0x09 }, { 0xf9, 0xa3 }, { 0x100, 0x14 },
103*4882a593Smuzhiyun 	{ 0x101, 0x10 }, { 0x102, 0xee }, { 0x10b, 0xc0 }, { 0x149, 0x10 },
104*4882a593Smuzhiyun 	{ 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 },
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* Extracted from MMIO dump of 6.30.223.248 */
108*4882a593Smuzhiyun static u16 r2057_rev14_init[][2] = {
109*4882a593Smuzhiyun 	{ 0x011, 0xfc }, { 0x030, 0x24 }, { 0x040, 0x1c }, { 0x082, 0x08 },
110*4882a593Smuzhiyun 	{ 0x0b4, 0x44 }, { 0x0c8, 0x01 }, { 0x0c9, 0x01 }, { 0x107, 0x08 },
111*4882a593Smuzhiyun 	{ 0x14d, 0x01 }, { 0x14e, 0x01 }, { 0x1af, 0x40 }, { 0x1b0, 0x40 },
112*4882a593Smuzhiyun 	{ 0x1cc, 0x01 }, { 0x1cf, 0x10 }, { 0x1d0, 0x0f }, { 0x1d3, 0x10 },
113*4882a593Smuzhiyun 	{ 0x1d4, 0x0f },
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
117*4882a593Smuzhiyun 		   r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
118*4882a593Smuzhiyun 		   r20, r21, r22, r23, r24, r25, r26, r27) \
119*4882a593Smuzhiyun 	.radio_vcocal_countval0			= r00,	\
120*4882a593Smuzhiyun 	.radio_vcocal_countval1			= r01,	\
121*4882a593Smuzhiyun 	.radio_rfpll_refmaster_sparextalsize	= r02,	\
122*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_r1		= r03,	\
123*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_c2		= r04,	\
124*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_c1		= r05,	\
125*4882a593Smuzhiyun 	.radio_cp_kpd_idac			= r06,	\
126*4882a593Smuzhiyun 	.radio_rfpll_mmd0			= r07,	\
127*4882a593Smuzhiyun 	.radio_rfpll_mmd1			= r08,	\
128*4882a593Smuzhiyun 	.radio_vcobuf_tune			= r09,	\
129*4882a593Smuzhiyun 	.radio_logen_mx2g_tune			= r10,	\
130*4882a593Smuzhiyun 	.radio_logen_mx5g_tune			= r11,	\
131*4882a593Smuzhiyun 	.radio_logen_indbuf2g_tune		= r12,	\
132*4882a593Smuzhiyun 	.radio_logen_indbuf5g_tune		= r13,	\
133*4882a593Smuzhiyun 	.radio_txmix2g_tune_boost_pu_core0	= r14,	\
134*4882a593Smuzhiyun 	.radio_pad2g_tune_pus_core0		= r15,	\
135*4882a593Smuzhiyun 	.radio_pga_boost_tune_core0		= r16,	\
136*4882a593Smuzhiyun 	.radio_txmix5g_boost_tune_core0		= r17,	\
137*4882a593Smuzhiyun 	.radio_pad5g_tune_misc_pus_core0	= r18,	\
138*4882a593Smuzhiyun 	.radio_lna2g_tune_core0			= r19,	\
139*4882a593Smuzhiyun 	.radio_lna5g_tune_core0			= r20,	\
140*4882a593Smuzhiyun 	.radio_txmix2g_tune_boost_pu_core1	= r21,	\
141*4882a593Smuzhiyun 	.radio_pad2g_tune_pus_core1		= r22,	\
142*4882a593Smuzhiyun 	.radio_pga_boost_tune_core1		= r23,	\
143*4882a593Smuzhiyun 	.radio_txmix5g_boost_tune_core1		= r24,	\
144*4882a593Smuzhiyun 	.radio_pad5g_tune_misc_pus_core1	= r25,	\
145*4882a593Smuzhiyun 	.radio_lna2g_tune_core1			= r26,	\
146*4882a593Smuzhiyun 	.radio_lna5g_tune_core1			= r27
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
149*4882a593Smuzhiyun 		      r10, r11, r12, r13, r14, r15, r16, r17) \
150*4882a593Smuzhiyun 	.radio_vcocal_countval0			= r00,	\
151*4882a593Smuzhiyun 	.radio_vcocal_countval1			= r01,	\
152*4882a593Smuzhiyun 	.radio_rfpll_refmaster_sparextalsize	= r02,	\
153*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_r1		= r03,	\
154*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_c2		= r04,	\
155*4882a593Smuzhiyun 	.radio_rfpll_loopfilter_c1		= r05,	\
156*4882a593Smuzhiyun 	.radio_cp_kpd_idac			= r06,	\
157*4882a593Smuzhiyun 	.radio_rfpll_mmd0			= r07,	\
158*4882a593Smuzhiyun 	.radio_rfpll_mmd1			= r08,	\
159*4882a593Smuzhiyun 	.radio_vcobuf_tune			= r09,	\
160*4882a593Smuzhiyun 	.radio_logen_mx2g_tune			= r10,	\
161*4882a593Smuzhiyun 	.radio_logen_indbuf2g_tune		= r11,	\
162*4882a593Smuzhiyun 	.radio_txmix2g_tune_boost_pu_core0	= r12,	\
163*4882a593Smuzhiyun 	.radio_pad2g_tune_pus_core0		= r13,	\
164*4882a593Smuzhiyun 	.radio_lna2g_tune_core0			= r14,	\
165*4882a593Smuzhiyun 	.radio_txmix2g_tune_boost_pu_core1	= r15,	\
166*4882a593Smuzhiyun 	.radio_pad2g_tune_pus_core1		= r16,	\
167*4882a593Smuzhiyun 	.radio_lna2g_tune_core1			= r17
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun #define PHYREGS(r0, r1, r2, r3, r4, r5)	\
170*4882a593Smuzhiyun 	.phy_regs.phy_bw1a	= r0,	\
171*4882a593Smuzhiyun 	.phy_regs.phy_bw2	= r1,	\
172*4882a593Smuzhiyun 	.phy_regs.phy_bw3	= r2,	\
173*4882a593Smuzhiyun 	.phy_regs.phy_bw4	= r3,	\
174*4882a593Smuzhiyun 	.phy_regs.phy_bw5	= r4,	\
175*4882a593Smuzhiyun 	.phy_regs.phy_bw6	= r5
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun /* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
178*4882a593Smuzhiyun static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
179*4882a593Smuzhiyun 	{
180*4882a593Smuzhiyun 		.freq			= 2412,
181*4882a593Smuzhiyun 		RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
182*4882a593Smuzhiyun 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
183*4882a593Smuzhiyun 			      0x03, 0xff),
184*4882a593Smuzhiyun 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
185*4882a593Smuzhiyun 	},
186*4882a593Smuzhiyun 	{
187*4882a593Smuzhiyun 		.freq			= 2417,
188*4882a593Smuzhiyun 		RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
189*4882a593Smuzhiyun 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
190*4882a593Smuzhiyun 			      0x03, 0xff),
191*4882a593Smuzhiyun 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
192*4882a593Smuzhiyun 	},
193*4882a593Smuzhiyun 	{
194*4882a593Smuzhiyun 		.freq			= 2422,
195*4882a593Smuzhiyun 		RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
196*4882a593Smuzhiyun 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
197*4882a593Smuzhiyun 			      0x03, 0xef),
198*4882a593Smuzhiyun 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
199*4882a593Smuzhiyun 	},
200*4882a593Smuzhiyun 	{
201*4882a593Smuzhiyun 		.freq			= 2427,
202*4882a593Smuzhiyun 		RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
203*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
204*4882a593Smuzhiyun 			      0x03, 0xdf),
205*4882a593Smuzhiyun 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
206*4882a593Smuzhiyun 	},
207*4882a593Smuzhiyun 	{
208*4882a593Smuzhiyun 		.freq			= 2432,
209*4882a593Smuzhiyun 		RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
210*4882a593Smuzhiyun 			      0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
211*4882a593Smuzhiyun 			      0x03, 0xcf),
212*4882a593Smuzhiyun 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
213*4882a593Smuzhiyun 	},
214*4882a593Smuzhiyun 	{
215*4882a593Smuzhiyun 		.freq			= 2437,
216*4882a593Smuzhiyun 		RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
217*4882a593Smuzhiyun 			      0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
218*4882a593Smuzhiyun 			      0x03, 0xbf),
219*4882a593Smuzhiyun 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
220*4882a593Smuzhiyun 	},
221*4882a593Smuzhiyun 	{
222*4882a593Smuzhiyun 		.freq			= 2442,
223*4882a593Smuzhiyun 		RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
224*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
225*4882a593Smuzhiyun 			      0x03, 0xaf),
226*4882a593Smuzhiyun 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
227*4882a593Smuzhiyun 	},
228*4882a593Smuzhiyun 	{
229*4882a593Smuzhiyun 		.freq			= 2447,
230*4882a593Smuzhiyun 		RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
231*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
232*4882a593Smuzhiyun 			      0x03, 0x9f),
233*4882a593Smuzhiyun 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
234*4882a593Smuzhiyun 	},
235*4882a593Smuzhiyun 	{
236*4882a593Smuzhiyun 		.freq			= 2452,
237*4882a593Smuzhiyun 		RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
238*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
239*4882a593Smuzhiyun 			      0x03, 0x8f),
240*4882a593Smuzhiyun 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
241*4882a593Smuzhiyun 	},
242*4882a593Smuzhiyun 	{
243*4882a593Smuzhiyun 		.freq			= 2457,
244*4882a593Smuzhiyun 		RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
245*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
246*4882a593Smuzhiyun 			      0x03, 0x7f),
247*4882a593Smuzhiyun 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
248*4882a593Smuzhiyun 	},
249*4882a593Smuzhiyun 	{
250*4882a593Smuzhiyun 		.freq			= 2462,
251*4882a593Smuzhiyun 		RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
252*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
253*4882a593Smuzhiyun 			      0x03, 0x6f),
254*4882a593Smuzhiyun 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
255*4882a593Smuzhiyun 	},
256*4882a593Smuzhiyun 	{
257*4882a593Smuzhiyun 		.freq			= 2467,
258*4882a593Smuzhiyun 		RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
259*4882a593Smuzhiyun 			      0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
260*4882a593Smuzhiyun 			      0x03, 0x5f),
261*4882a593Smuzhiyun 		PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
262*4882a593Smuzhiyun 	},
263*4882a593Smuzhiyun 	{
264*4882a593Smuzhiyun 		.freq			= 2472,
265*4882a593Smuzhiyun 		RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
266*4882a593Smuzhiyun 			      0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
267*4882a593Smuzhiyun 			      0x03, 0x4f),
268*4882a593Smuzhiyun 		PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
269*4882a593Smuzhiyun 	},
270*4882a593Smuzhiyun 	{
271*4882a593Smuzhiyun 		.freq			= 2484,
272*4882a593Smuzhiyun 		RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
273*4882a593Smuzhiyun 			      0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
274*4882a593Smuzhiyun 			      0x03, 0x3f),
275*4882a593Smuzhiyun 		PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
276*4882a593Smuzhiyun 	}
277*4882a593Smuzhiyun };
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun /* Extracted from MMIO dump of 6.30.223.248 */
280*4882a593Smuzhiyun static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = {
281*4882a593Smuzhiyun 	{
282*4882a593Smuzhiyun 		.freq			= 2412,
283*4882a593Smuzhiyun 		RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c,
284*4882a593Smuzhiyun 			      0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21,
285*4882a593Smuzhiyun 			      0x53, 0xff),
286*4882a593Smuzhiyun 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
287*4882a593Smuzhiyun 	},
288*4882a593Smuzhiyun 	{
289*4882a593Smuzhiyun 		.freq			= 2417,
290*4882a593Smuzhiyun 		RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71,
291*4882a593Smuzhiyun 			      0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
292*4882a593Smuzhiyun 			      0x53, 0xff),
293*4882a593Smuzhiyun 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
294*4882a593Smuzhiyun 	},
295*4882a593Smuzhiyun 	{
296*4882a593Smuzhiyun 		.freq			= 2422,
297*4882a593Smuzhiyun 		RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76,
298*4882a593Smuzhiyun 			      0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
299*4882a593Smuzhiyun 			      0x53, 0xff),
300*4882a593Smuzhiyun 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
301*4882a593Smuzhiyun 	},
302*4882a593Smuzhiyun 	{
303*4882a593Smuzhiyun 		.freq			= 2427,
304*4882a593Smuzhiyun 		RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b,
305*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
306*4882a593Smuzhiyun 			      0x53, 0xff),
307*4882a593Smuzhiyun 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
308*4882a593Smuzhiyun 	},
309*4882a593Smuzhiyun 	{
310*4882a593Smuzhiyun 		.freq			= 2432,
311*4882a593Smuzhiyun 		RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80,
312*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
313*4882a593Smuzhiyun 			      0x53, 0xff),
314*4882a593Smuzhiyun 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
315*4882a593Smuzhiyun 	},
316*4882a593Smuzhiyun 	{
317*4882a593Smuzhiyun 		.freq			= 2437,
318*4882a593Smuzhiyun 		RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85,
319*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
320*4882a593Smuzhiyun 			      0x53, 0xff),
321*4882a593Smuzhiyun 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
322*4882a593Smuzhiyun 	},
323*4882a593Smuzhiyun 	{
324*4882a593Smuzhiyun 		.freq			= 2442,
325*4882a593Smuzhiyun 		RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a,
326*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
327*4882a593Smuzhiyun 			      0x43, 0xff),
328*4882a593Smuzhiyun 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
329*4882a593Smuzhiyun 	},
330*4882a593Smuzhiyun 	{
331*4882a593Smuzhiyun 		.freq			= 2447,
332*4882a593Smuzhiyun 		RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f,
333*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
334*4882a593Smuzhiyun 			      0x43, 0xff),
335*4882a593Smuzhiyun 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
336*4882a593Smuzhiyun 	},
337*4882a593Smuzhiyun 	{
338*4882a593Smuzhiyun 		.freq			= 2452,
339*4882a593Smuzhiyun 		RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94,
340*4882a593Smuzhiyun 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
341*4882a593Smuzhiyun 			      0x43, 0xff),
342*4882a593Smuzhiyun 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
343*4882a593Smuzhiyun 	},
344*4882a593Smuzhiyun 	{
345*4882a593Smuzhiyun 		.freq			= 2457,
346*4882a593Smuzhiyun 		RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99,
347*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21,
348*4882a593Smuzhiyun 			      0x43, 0xff),
349*4882a593Smuzhiyun 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
350*4882a593Smuzhiyun 	},
351*4882a593Smuzhiyun 	{
352*4882a593Smuzhiyun 		.freq			= 2462,
353*4882a593Smuzhiyun 		RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e,
354*4882a593Smuzhiyun 			      0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01,
355*4882a593Smuzhiyun 			      0x43, 0xff),
356*4882a593Smuzhiyun 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
357*4882a593Smuzhiyun 	},
358*4882a593Smuzhiyun };
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun /* Extracted from MMIO dump of 6.30.223.141 */
361*4882a593Smuzhiyun static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
362*4882a593Smuzhiyun 	{
363*4882a593Smuzhiyun 		.freq			= 2412,
364*4882a593Smuzhiyun 		RADIOREGS7(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
365*4882a593Smuzhiyun 			   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
366*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
367*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
368*4882a593Smuzhiyun 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
369*4882a593Smuzhiyun 	},
370*4882a593Smuzhiyun 	{
371*4882a593Smuzhiyun 		.freq			= 2417,
372*4882a593Smuzhiyun 		RADIOREGS7(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
373*4882a593Smuzhiyun 			   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
374*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
375*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
376*4882a593Smuzhiyun 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
377*4882a593Smuzhiyun 	},
378*4882a593Smuzhiyun 	{
379*4882a593Smuzhiyun 		.freq			= 2422,
380*4882a593Smuzhiyun 		RADIOREGS7(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
381*4882a593Smuzhiyun 			   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
382*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
383*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
384*4882a593Smuzhiyun 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
385*4882a593Smuzhiyun 	},
386*4882a593Smuzhiyun 	{
387*4882a593Smuzhiyun 		.freq			= 2427,
388*4882a593Smuzhiyun 		RADIOREGS7(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
389*4882a593Smuzhiyun 			   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
390*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
391*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
392*4882a593Smuzhiyun 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
393*4882a593Smuzhiyun 	},
394*4882a593Smuzhiyun 	{
395*4882a593Smuzhiyun 		.freq			= 2432,
396*4882a593Smuzhiyun 		RADIOREGS7(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
397*4882a593Smuzhiyun 			   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
398*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
399*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
400*4882a593Smuzhiyun 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
401*4882a593Smuzhiyun 	},
402*4882a593Smuzhiyun 	{
403*4882a593Smuzhiyun 		.freq			= 2437,
404*4882a593Smuzhiyun 		RADIOREGS7(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
405*4882a593Smuzhiyun 			   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
406*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
407*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
408*4882a593Smuzhiyun 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
409*4882a593Smuzhiyun 	},
410*4882a593Smuzhiyun 	{
411*4882a593Smuzhiyun 		.freq			= 2442,
412*4882a593Smuzhiyun 		RADIOREGS7(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
413*4882a593Smuzhiyun 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
414*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
415*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
416*4882a593Smuzhiyun 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
417*4882a593Smuzhiyun 	},
418*4882a593Smuzhiyun 	{
419*4882a593Smuzhiyun 		.freq			= 2447,
420*4882a593Smuzhiyun 		RADIOREGS7(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
421*4882a593Smuzhiyun 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
422*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
423*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
424*4882a593Smuzhiyun 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
425*4882a593Smuzhiyun 	},
426*4882a593Smuzhiyun 	{
427*4882a593Smuzhiyun 		.freq			= 2452,
428*4882a593Smuzhiyun 		RADIOREGS7(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
429*4882a593Smuzhiyun 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
430*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
431*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
432*4882a593Smuzhiyun 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
433*4882a593Smuzhiyun 	},
434*4882a593Smuzhiyun 	{
435*4882a593Smuzhiyun 		.freq			= 2457,
436*4882a593Smuzhiyun 		RADIOREGS7(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
437*4882a593Smuzhiyun 			   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
438*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
439*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
440*4882a593Smuzhiyun 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
441*4882a593Smuzhiyun 	},
442*4882a593Smuzhiyun 	{
443*4882a593Smuzhiyun 		.freq			= 2462,
444*4882a593Smuzhiyun 		RADIOREGS7(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
445*4882a593Smuzhiyun 			   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
446*4882a593Smuzhiyun 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
447*4882a593Smuzhiyun 			   0x00, 0x00, 0xf0, 0x00),
448*4882a593Smuzhiyun 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
449*4882a593Smuzhiyun 	},
450*4882a593Smuzhiyun 	{
451*4882a593Smuzhiyun 		.freq			= 5180,
452*4882a593Smuzhiyun 		RADIOREGS7(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
453*4882a593Smuzhiyun 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
454*4882a593Smuzhiyun 			   0x9f, 0x2f, 0xa3, 0x00, 0xfc, 0x00, 0x00, 0x4f,
455*4882a593Smuzhiyun 			   0x3a, 0x83, 0x00, 0xfc),
456*4882a593Smuzhiyun 		PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
457*4882a593Smuzhiyun 	},
458*4882a593Smuzhiyun 	{
459*4882a593Smuzhiyun 		.freq			= 5200,
460*4882a593Smuzhiyun 		RADIOREGS7(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
461*4882a593Smuzhiyun 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
462*4882a593Smuzhiyun 			   0x7f, 0x2f, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x4c,
463*4882a593Smuzhiyun 			   0x4a, 0x83, 0x00, 0xf8),
464*4882a593Smuzhiyun 		PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
465*4882a593Smuzhiyun 	},
466*4882a593Smuzhiyun 	{
467*4882a593Smuzhiyun 		.freq			= 5220,
468*4882a593Smuzhiyun 		RADIOREGS7(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
469*4882a593Smuzhiyun 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
470*4882a593Smuzhiyun 			   0x6d, 0x3d, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x2d,
471*4882a593Smuzhiyun 			   0x2a, 0x73, 0x00, 0xf8),
472*4882a593Smuzhiyun 		PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
473*4882a593Smuzhiyun 	},
474*4882a593Smuzhiyun 	{
475*4882a593Smuzhiyun 		.freq			= 5240,
476*4882a593Smuzhiyun 		RADIOREGS7(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
477*4882a593Smuzhiyun 			   0x02, 0x0d, 0x00, 0x0d, 0x00, 0x8d, 0x00, 0x00,
478*4882a593Smuzhiyun 			   0x4d, 0x1c, 0x73, 0x00, 0xf8, 0x00, 0x00, 0x4d,
479*4882a593Smuzhiyun 			   0x2b, 0x73, 0x00, 0xf8),
480*4882a593Smuzhiyun 		PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
481*4882a593Smuzhiyun 	},
482*4882a593Smuzhiyun 	{
483*4882a593Smuzhiyun 		.freq			= 5745,
484*4882a593Smuzhiyun 		RADIOREGS7(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
485*4882a593Smuzhiyun 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
486*4882a593Smuzhiyun 			   0x08, 0x03, 0x03, 0x00, 0x30, 0x00, 0x00, 0x06,
487*4882a593Smuzhiyun 			   0x02, 0x03, 0x00, 0x30),
488*4882a593Smuzhiyun 		PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
489*4882a593Smuzhiyun 	},
490*4882a593Smuzhiyun 	{
491*4882a593Smuzhiyun 		.freq			= 5765,
492*4882a593Smuzhiyun 		RADIOREGS7(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
493*4882a593Smuzhiyun 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
494*4882a593Smuzhiyun 			   0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
495*4882a593Smuzhiyun 			   0x02, 0x03, 0x00, 0x00),
496*4882a593Smuzhiyun 		PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
497*4882a593Smuzhiyun 	},
498*4882a593Smuzhiyun 	{
499*4882a593Smuzhiyun 		.freq			= 5785,
500*4882a593Smuzhiyun 		RADIOREGS7(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
501*4882a593Smuzhiyun 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
502*4882a593Smuzhiyun 			   0x08, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
503*4882a593Smuzhiyun 			   0x21, 0x03, 0x00, 0x00),
504*4882a593Smuzhiyun 		PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
505*4882a593Smuzhiyun 	},
506*4882a593Smuzhiyun 	{
507*4882a593Smuzhiyun 		.freq			= 5805,
508*4882a593Smuzhiyun 		RADIOREGS7(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
509*4882a593Smuzhiyun 			   0x04, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00,
510*4882a593Smuzhiyun 			   0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
511*4882a593Smuzhiyun 			   0x00, 0x03, 0x00, 0x00),
512*4882a593Smuzhiyun 		PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
513*4882a593Smuzhiyun 	},
514*4882a593Smuzhiyun 	{
515*4882a593Smuzhiyun 		.freq			= 5825,
516*4882a593Smuzhiyun 		RADIOREGS7(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
517*4882a593Smuzhiyun 			   0x04, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00,
518*4882a593Smuzhiyun 			   0x05, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
519*4882a593Smuzhiyun 			   0x00, 0x03, 0x00, 0x00),
520*4882a593Smuzhiyun 		PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
521*4882a593Smuzhiyun 	},
522*4882a593Smuzhiyun };
523*4882a593Smuzhiyun 
r2057_upload_inittabs(struct b43_wldev * dev)524*4882a593Smuzhiyun void r2057_upload_inittabs(struct b43_wldev *dev)
525*4882a593Smuzhiyun {
526*4882a593Smuzhiyun 	struct b43_phy *phy = &dev->phy;
527*4882a593Smuzhiyun 	u16 *table = NULL;
528*4882a593Smuzhiyun 	u16 size, i;
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun 	switch (phy->rev) {
531*4882a593Smuzhiyun 	case 7:
532*4882a593Smuzhiyun 		table = r2057_rev4_init[0];
533*4882a593Smuzhiyun 		size = ARRAY_SIZE(r2057_rev4_init);
534*4882a593Smuzhiyun 		break;
535*4882a593Smuzhiyun 	case 8:
536*4882a593Smuzhiyun 		if (phy->radio_rev == 5) {
537*4882a593Smuzhiyun 			table = r2057_rev5_init[0];
538*4882a593Smuzhiyun 			size = ARRAY_SIZE(r2057_rev5_init);
539*4882a593Smuzhiyun 		} else if (phy->radio_rev == 7) {
540*4882a593Smuzhiyun 			table = r2057_rev7_init[0];
541*4882a593Smuzhiyun 			size = ARRAY_SIZE(r2057_rev7_init);
542*4882a593Smuzhiyun 		}
543*4882a593Smuzhiyun 		break;
544*4882a593Smuzhiyun 	case 9:
545*4882a593Smuzhiyun 		if (phy->radio_rev == 5) {
546*4882a593Smuzhiyun 			table = r2057_rev5a_init[0];
547*4882a593Smuzhiyun 			size = ARRAY_SIZE(r2057_rev5a_init);
548*4882a593Smuzhiyun 		}
549*4882a593Smuzhiyun 		break;
550*4882a593Smuzhiyun 	case 16:
551*4882a593Smuzhiyun 		if (phy->radio_rev == 9) {
552*4882a593Smuzhiyun 			table = r2057_rev9_init[0];
553*4882a593Smuzhiyun 			size = ARRAY_SIZE(r2057_rev9_init);
554*4882a593Smuzhiyun 		}
555*4882a593Smuzhiyun 		break;
556*4882a593Smuzhiyun 	case 17:
557*4882a593Smuzhiyun 		if (phy->radio_rev == 14) {
558*4882a593Smuzhiyun 			table = r2057_rev14_init[0];
559*4882a593Smuzhiyun 			size = ARRAY_SIZE(r2057_rev14_init);
560*4882a593Smuzhiyun 		}
561*4882a593Smuzhiyun 		break;
562*4882a593Smuzhiyun 	}
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun 	B43_WARN_ON(!table);
565*4882a593Smuzhiyun 
566*4882a593Smuzhiyun 	if (table) {
567*4882a593Smuzhiyun 		for (i = 0; i < size; i++, table += 2)
568*4882a593Smuzhiyun 			b43_radio_write(dev, table[0], table[1]);
569*4882a593Smuzhiyun 	}
570*4882a593Smuzhiyun }
571*4882a593Smuzhiyun 
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)572*4882a593Smuzhiyun void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
573*4882a593Smuzhiyun 			       const struct b43_nphy_chantabent_rev7 **tabent_r7,
574*4882a593Smuzhiyun 			       const struct b43_nphy_chantabent_rev7_2g **tabent_r7_2g)
575*4882a593Smuzhiyun {
576*4882a593Smuzhiyun 	struct b43_phy *phy = &dev->phy;
577*4882a593Smuzhiyun 	const struct b43_nphy_chantabent_rev7 *e_r7 = NULL;
578*4882a593Smuzhiyun 	const struct b43_nphy_chantabent_rev7_2g *e_r7_2g = NULL;
579*4882a593Smuzhiyun 	unsigned int len, i;
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun 	*tabent_r7 = NULL;
582*4882a593Smuzhiyun 	*tabent_r7_2g = NULL;
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun 	switch (phy->rev) {
585*4882a593Smuzhiyun 	case 8:
586*4882a593Smuzhiyun 		if (phy->radio_rev == 5) {
587*4882a593Smuzhiyun 			e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
588*4882a593Smuzhiyun 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
589*4882a593Smuzhiyun 		}
590*4882a593Smuzhiyun 		break;
591*4882a593Smuzhiyun 	case 16:
592*4882a593Smuzhiyun 		if (phy->radio_rev == 9) {
593*4882a593Smuzhiyun 			e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;
594*4882a593Smuzhiyun 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9);
595*4882a593Smuzhiyun 		}
596*4882a593Smuzhiyun 		break;
597*4882a593Smuzhiyun 	case 17:
598*4882a593Smuzhiyun 		if (phy->radio_rev == 14) {
599*4882a593Smuzhiyun 			e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14;
600*4882a593Smuzhiyun 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14);
601*4882a593Smuzhiyun 		}
602*4882a593Smuzhiyun 		break;
603*4882a593Smuzhiyun 	default:
604*4882a593Smuzhiyun 		break;
605*4882a593Smuzhiyun 	}
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun 	if (e_r7) {
608*4882a593Smuzhiyun 		for (i = 0; i < len; i++, e_r7++) {
609*4882a593Smuzhiyun 			if (e_r7->freq == freq) {
610*4882a593Smuzhiyun 				*tabent_r7 = e_r7;
611*4882a593Smuzhiyun 				return;
612*4882a593Smuzhiyun 			}
613*4882a593Smuzhiyun 		}
614*4882a593Smuzhiyun 	} else if (e_r7_2g) {
615*4882a593Smuzhiyun 		for (i = 0; i < len; i++, e_r7_2g++) {
616*4882a593Smuzhiyun 			if (e_r7_2g->freq == freq) {
617*4882a593Smuzhiyun 				*tabent_r7_2g = e_r7_2g;
618*4882a593Smuzhiyun 				return;
619*4882a593Smuzhiyun 			}
620*4882a593Smuzhiyun 		}
621*4882a593Smuzhiyun 	} else {
622*4882a593Smuzhiyun 		B43_WARN_ON(1);
623*4882a593Smuzhiyun 	}
624*4882a593Smuzhiyun }
625