3 Broadcom B43 wireless driver
4 IEEE 802.11n 2057 radio device data tables
6 Copyright (c) 2010 Rafał Miłecki <zajec5@gmail.com>
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
21 Boston, MA 02110-1301, USA.
26 #include "radio_2057.h"
27 #include "phy_common.h"
29 static u16 r2057_rev4_init
[][2] = {
30 { 0x0E, 0x20 }, { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 },
31 { 0x35, 0x26 }, { 0x3C, 0xff }, { 0x3D, 0xff }, { 0x3E, 0xff },
32 { 0x3F, 0xff }, { 0x62, 0x33 }, { 0x8A, 0xf0 }, { 0x8B, 0x10 },
33 { 0x8C, 0xf0 }, { 0x91, 0x3f }, { 0x92, 0x36 }, { 0xA4, 0x8c },
34 { 0xA8, 0x55 }, { 0xAF, 0x01 }, { 0x10F, 0xf0 }, { 0x110, 0x10 },
35 { 0x111, 0xf0 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x129, 0x8c },
36 { 0x12D, 0x55 }, { 0x134, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
37 { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
38 { 0x169, 0x02 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
39 { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
40 { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
43 static u16 r2057_rev5_init
[][2] = {
44 { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
45 { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
46 { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
47 { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
48 { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
49 { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
50 { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
51 { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
52 { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 },
53 { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 },
54 { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 }, { 0x1C2, 0x80 },
57 static u16 r2057_rev5a_init
[][2] = {
58 { 0x00, 0x15 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
59 { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
60 { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
61 { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
62 { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
63 { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
64 { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x14E, 0x01 }, { 0x15E, 0x00 },
65 { 0x15F, 0x00 }, { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 },
66 { 0x163, 0x00 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
67 { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
68 { 0x1AB, 0x00 }, { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 },
72 static u16 r2057_rev7_init
[][2] = {
73 { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
74 { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
75 { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x13 },
76 { 0x66, 0xee }, { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 },
77 { 0x7C, 0x14 }, { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f },
78 { 0x92, 0x36 }, { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
79 { 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x13 }, { 0xEB, 0xee },
80 { 0xF3, 0x58 }, { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x14 },
81 { 0x102, 0xee }, { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 },
82 { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
83 { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
84 { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
85 { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
86 { 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
89 /* TODO: Which devices should use it?
90 static u16 r2057_rev8_init[][2] = {
91 { 0x00, 0x08 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
92 { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
93 { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x0f },
94 { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 }, { 0x7C, 0x0f },
95 { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
96 { 0xA1, 0x20 }, { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
97 { 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0xF3, 0x58 },
98 { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x0f }, { 0x102, 0xee },
99 { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x126, 0x20 },
100 { 0x14E, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
101 { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
102 { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
103 { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
104 { 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
108 /* Extracted from MMIO dump of 6.30.223.141 */
109 static u16 r2057_rev9_init
[][2] = {
110 { 0x27, 0x1f }, { 0x28, 0x0a }, { 0x29, 0x2f }, { 0x42, 0x1f },
111 { 0x48, 0x3f }, { 0x5c, 0x41 }, { 0x63, 0x14 }, { 0x64, 0x12 },
112 { 0x66, 0xff }, { 0x74, 0xa3 }, { 0x7b, 0x14 }, { 0x7c, 0x14 },
113 { 0x7d, 0xee }, { 0x86, 0xc0 }, { 0xc4, 0x10 }, { 0xc9, 0x01 },
114 { 0xe1, 0x41 }, { 0xe8, 0x14 }, { 0xe9, 0x12 }, { 0xeb, 0xff },
115 { 0xf5, 0x0a }, { 0xf8, 0x09 }, { 0xf9, 0xa3 }, { 0x100, 0x14 },
116 { 0x101, 0x10 }, { 0x102, 0xee }, { 0x10b, 0xc0 }, { 0x149, 0x10 },
117 { 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 },
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 },
129 #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
130 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
131 r20, r21, r22, r23, r24, r25, r26, r27) \
132 .radio_vcocal_countval0 = r00, \
133 .radio_vcocal_countval1 = r01, \
134 .radio_rfpll_refmaster_sparextalsize = r02, \
135 .radio_rfpll_loopfilter_r1 = r03, \
136 .radio_rfpll_loopfilter_c2 = r04, \
137 .radio_rfpll_loopfilter_c1 = r05, \
138 .radio_cp_kpd_idac = r06, \
139 .radio_rfpll_mmd0 = r07, \
140 .radio_rfpll_mmd1 = r08, \
141 .radio_vcobuf_tune = r09, \
142 .radio_logen_mx2g_tune = r10, \
143 .radio_logen_mx5g_tune = r11, \
144 .radio_logen_indbuf2g_tune = r12, \
145 .radio_logen_indbuf5g_tune = r13, \
146 .radio_txmix2g_tune_boost_pu_core0 = r14, \
147 .radio_pad2g_tune_pus_core0 = r15, \
148 .radio_pga_boost_tune_core0 = r16, \
149 .radio_txmix5g_boost_tune_core0 = r17, \
150 .radio_pad5g_tune_misc_pus_core0 = r18, \
151 .radio_lna2g_tune_core0 = r19, \
152 .radio_lna5g_tune_core0 = r20, \
153 .radio_txmix2g_tune_boost_pu_core1 = r21, \
154 .radio_pad2g_tune_pus_core1 = r22, \
155 .radio_pga_boost_tune_core1 = r23, \
156 .radio_txmix5g_boost_tune_core1 = r24, \
157 .radio_pad5g_tune_misc_pus_core1 = r25, \
158 .radio_lna2g_tune_core1 = r26, \
159 .radio_lna5g_tune_core1 = r27
161 #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
162 r10, r11, r12, r13, r14, r15, r16, r17) \
163 .radio_vcocal_countval0 = r00, \
164 .radio_vcocal_countval1 = r01, \
165 .radio_rfpll_refmaster_sparextalsize = r02, \
166 .radio_rfpll_loopfilter_r1 = r03, \
167 .radio_rfpll_loopfilter_c2 = r04, \
168 .radio_rfpll_loopfilter_c1 = r05, \
169 .radio_cp_kpd_idac = r06, \
170 .radio_rfpll_mmd0 = r07, \
171 .radio_rfpll_mmd1 = r08, \
172 .radio_vcobuf_tune = r09, \
173 .radio_logen_mx2g_tune = r10, \
174 .radio_logen_indbuf2g_tune = r11, \
175 .radio_txmix2g_tune_boost_pu_core0 = r12, \
176 .radio_pad2g_tune_pus_core0 = r13, \
177 .radio_lna2g_tune_core0 = r14, \
178 .radio_txmix2g_tune_boost_pu_core1 = r15, \
179 .radio_pad2g_tune_pus_core1 = r16, \
180 .radio_lna2g_tune_core1 = r17
182 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
183 .phy_regs.phy_bw1a = r0, \
184 .phy_regs.phy_bw2 = r1, \
185 .phy_regs.phy_bw3 = r2, \
186 .phy_regs.phy_bw4 = r3, \
187 .phy_regs.phy_bw5 = r4, \
188 .phy_regs.phy_bw6 = r5
190 /* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
191 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5
[] = {
194 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
195 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
197 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
201 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
202 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
204 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
208 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
209 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
211 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
215 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
216 0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
218 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
222 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
223 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
225 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
229 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
230 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
232 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
236 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
237 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
239 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
243 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
244 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
246 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
250 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
251 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
253 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
257 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
258 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
260 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
264 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
265 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
267 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
271 RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
272 0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
274 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
278 RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
279 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
281 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
285 RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
286 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
288 PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
292 /* Extracted from MMIO dump of 6.30.223.248 */
293 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14
[] = {
296 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c,
297 0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21,
299 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
303 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71,
304 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
306 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
310 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76,
311 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
313 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
317 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b,
318 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
320 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
324 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80,
325 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
327 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
331 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85,
332 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
334 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
338 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a,
339 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
341 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
345 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f,
346 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
348 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
352 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94,
353 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
355 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
359 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99,
360 0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21,
362 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
366 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e,
367 0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01,
369 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
373 /* Extracted from MMIO dump of 6.30.223.141 */
374 static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9
[] = {
377 RADIOREGS7(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
378 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
379 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
380 0x00, 0x00, 0xf0, 0x00),
381 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
385 RADIOREGS7(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
386 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
387 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
388 0x00, 0x00, 0xf0, 0x00),
389 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
393 RADIOREGS7(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
394 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
395 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
396 0x00, 0x00, 0xf0, 0x00),
397 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
401 RADIOREGS7(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
402 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
403 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
404 0x00, 0x00, 0xf0, 0x00),
405 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
409 RADIOREGS7(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
410 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
411 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
412 0x00, 0x00, 0xf0, 0x00),
413 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
417 RADIOREGS7(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
418 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
419 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
420 0x00, 0x00, 0xf0, 0x00),
421 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
425 RADIOREGS7(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
426 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
427 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
428 0x00, 0x00, 0xf0, 0x00),
429 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
433 RADIOREGS7(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
434 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
435 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
436 0x00, 0x00, 0xf0, 0x00),
437 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
441 RADIOREGS7(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
442 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
443 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
444 0x00, 0x00, 0xf0, 0x00),
445 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
449 RADIOREGS7(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
450 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
451 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
452 0x00, 0x00, 0xf0, 0x00),
453 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
457 RADIOREGS7(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
458 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
459 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
460 0x00, 0x00, 0xf0, 0x00),
461 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
465 RADIOREGS7(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
466 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
467 0x9f, 0x2f, 0xa3, 0x00, 0xfc, 0x00, 0x00, 0x4f,
468 0x3a, 0x83, 0x00, 0xfc),
469 PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
473 RADIOREGS7(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
474 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
475 0x7f, 0x2f, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x4c,
476 0x4a, 0x83, 0x00, 0xf8),
477 PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
481 RADIOREGS7(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
482 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
483 0x6d, 0x3d, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x2d,
484 0x2a, 0x73, 0x00, 0xf8),
485 PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
489 RADIOREGS7(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
490 0x02, 0x0d, 0x00, 0x0d, 0x00, 0x8d, 0x00, 0x00,
491 0x4d, 0x1c, 0x73, 0x00, 0xf8, 0x00, 0x00, 0x4d,
492 0x2b, 0x73, 0x00, 0xf8),
493 PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
497 RADIOREGS7(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
498 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
499 0x08, 0x03, 0x03, 0x00, 0x30, 0x00, 0x00, 0x06,
500 0x02, 0x03, 0x00, 0x30),
501 PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
505 RADIOREGS7(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
506 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
507 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
508 0x02, 0x03, 0x00, 0x00),
509 PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
513 RADIOREGS7(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
514 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
515 0x08, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
516 0x21, 0x03, 0x00, 0x00),
517 PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
521 RADIOREGS7(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
522 0x04, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00,
523 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
524 0x00, 0x03, 0x00, 0x00),
525 PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
529 RADIOREGS7(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
530 0x04, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00,
531 0x05, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
532 0x00, 0x03, 0x00, 0x00),
533 PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
537 void r2057_upload_inittabs(struct b43_wldev
*dev
)
539 struct b43_phy
*phy
= &dev
->phy
;
545 table
= r2057_rev4_init
[0];
546 size
= ARRAY_SIZE(r2057_rev4_init
);
549 if (phy
->radio_rev
== 5) {
550 table
= r2057_rev5_init
[0];
551 size
= ARRAY_SIZE(r2057_rev5_init
);
552 } else if (phy
->radio_rev
== 7) {
553 table
= r2057_rev7_init
[0];
554 size
= ARRAY_SIZE(r2057_rev7_init
);
558 if (phy
->radio_rev
== 5) {
559 table
= r2057_rev5a_init
[0];
560 size
= ARRAY_SIZE(r2057_rev5a_init
);
564 if (phy
->radio_rev
== 9) {
565 table
= r2057_rev9_init
[0];
566 size
= ARRAY_SIZE(r2057_rev9_init
);
570 if (phy
->radio_rev
== 14) {
571 table
= r2057_rev14_init
[0];
572 size
= ARRAY_SIZE(r2057_rev14_init
);
580 for (i
= 0; i
< size
; i
++, table
+= 2)
581 b43_radio_write(dev
, table
[0], table
[1]);
585 void r2057_get_chantabent_rev7(struct b43_wldev
*dev
, u16 freq
,
586 const struct b43_nphy_chantabent_rev7
**tabent_r7
,
587 const struct b43_nphy_chantabent_rev7_2g
**tabent_r7_2g
)
589 struct b43_phy
*phy
= &dev
->phy
;
590 const struct b43_nphy_chantabent_rev7
*e_r7
= NULL
;
591 const struct b43_nphy_chantabent_rev7_2g
*e_r7_2g
= NULL
;
595 *tabent_r7_2g
= NULL
;
599 if (phy
->radio_rev
== 5) {
600 e_r7_2g
= b43_nphy_chantab_phy_rev8_radio_rev5
;
601 len
= ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5
);
605 if (phy
->radio_rev
== 9) {
606 e_r7
= b43_nphy_chantab_phy_rev16_radio_rev9
;
607 len
= ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9
);
611 if (phy
->radio_rev
== 14) {
612 e_r7_2g
= b43_nphy_chantab_phy_rev17_radio_rev14
;
613 len
= ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14
);
621 for (i
= 0; i
< len
; i
++, e_r7
++) {
622 if (e_r7
->freq
== freq
) {
627 } else if (e_r7_2g
) {
628 for (i
= 0; i
< len
; i
++, e_r7_2g
++) {
629 if (e_r7_2g
->freq
== freq
) {
630 *tabent_r7_2g
= e_r7_2g
;