0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "b43.h"
0013 #include "radio_2057.h"
0014 #include "phy_common.h"
0015
0016 static u16 r2057_rev4_init[][2] = {
0017 { 0x0E, 0x20 }, { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 },
0018 { 0x35, 0x26 }, { 0x3C, 0xff }, { 0x3D, 0xff }, { 0x3E, 0xff },
0019 { 0x3F, 0xff }, { 0x62, 0x33 }, { 0x8A, 0xf0 }, { 0x8B, 0x10 },
0020 { 0x8C, 0xf0 }, { 0x91, 0x3f }, { 0x92, 0x36 }, { 0xA4, 0x8c },
0021 { 0xA8, 0x55 }, { 0xAF, 0x01 }, { 0x10F, 0xf0 }, { 0x110, 0x10 },
0022 { 0x111, 0xf0 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x129, 0x8c },
0023 { 0x12D, 0x55 }, { 0x134, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
0024 { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
0025 { 0x169, 0x02 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
0026 { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
0027 { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
0028 };
0029
0030 static u16 r2057_rev5_init[][2] = {
0031 { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
0032 { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
0033 { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
0034 { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
0035 { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
0036 { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
0037 { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
0038 { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
0039 { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 },
0040 { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 },
0041 { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 }, { 0x1C2, 0x80 },
0042 };
0043
0044 static u16 r2057_rev5a_init[][2] = {
0045 { 0x00, 0x15 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
0046 { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
0047 { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
0048 { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
0049 { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
0050 { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
0051 { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x14E, 0x01 }, { 0x15E, 0x00 },
0052 { 0x15F, 0x00 }, { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 },
0053 { 0x163, 0x00 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
0054 { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
0055 { 0x1AB, 0x00 }, { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 },
0056 { 0x1C2, 0x80 },
0057 };
0058
0059 static u16 r2057_rev7_init[][2] = {
0060 { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
0061 { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
0062 { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x13 },
0063 { 0x66, 0xee }, { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 },
0064 { 0x7C, 0x14 }, { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f },
0065 { 0x92, 0x36 }, { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
0066 { 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x13 }, { 0xEB, 0xee },
0067 { 0xF3, 0x58 }, { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x14 },
0068 { 0x102, 0xee }, { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 },
0069 { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
0070 { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
0071 { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
0072 { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
0073 { 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
0074 };
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096 static u16 r2057_rev9_init[][2] = {
0097 { 0x27, 0x1f }, { 0x28, 0x0a }, { 0x29, 0x2f }, { 0x42, 0x1f },
0098 { 0x48, 0x3f }, { 0x5c, 0x41 }, { 0x63, 0x14 }, { 0x64, 0x12 },
0099 { 0x66, 0xff }, { 0x74, 0xa3 }, { 0x7b, 0x14 }, { 0x7c, 0x14 },
0100 { 0x7d, 0xee }, { 0x86, 0xc0 }, { 0xc4, 0x10 }, { 0xc9, 0x01 },
0101 { 0xe1, 0x41 }, { 0xe8, 0x14 }, { 0xe9, 0x12 }, { 0xeb, 0xff },
0102 { 0xf5, 0x0a }, { 0xf8, 0x09 }, { 0xf9, 0xa3 }, { 0x100, 0x14 },
0103 { 0x101, 0x10 }, { 0x102, 0xee }, { 0x10b, 0xc0 }, { 0x149, 0x10 },
0104 { 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 },
0105 };
0106
0107
0108 static u16 r2057_rev14_init[][2] = {
0109 { 0x011, 0xfc }, { 0x030, 0x24 }, { 0x040, 0x1c }, { 0x082, 0x08 },
0110 { 0x0b4, 0x44 }, { 0x0c8, 0x01 }, { 0x0c9, 0x01 }, { 0x107, 0x08 },
0111 { 0x14d, 0x01 }, { 0x14e, 0x01 }, { 0x1af, 0x40 }, { 0x1b0, 0x40 },
0112 { 0x1cc, 0x01 }, { 0x1cf, 0x10 }, { 0x1d0, 0x0f }, { 0x1d3, 0x10 },
0113 { 0x1d4, 0x0f },
0114 };
0115
0116 #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
0117 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
0118 r20, r21, r22, r23, r24, r25, r26, r27) \
0119 .radio_vcocal_countval0 = r00, \
0120 .radio_vcocal_countval1 = r01, \
0121 .radio_rfpll_refmaster_sparextalsize = r02, \
0122 .radio_rfpll_loopfilter_r1 = r03, \
0123 .radio_rfpll_loopfilter_c2 = r04, \
0124 .radio_rfpll_loopfilter_c1 = r05, \
0125 .radio_cp_kpd_idac = r06, \
0126 .radio_rfpll_mmd0 = r07, \
0127 .radio_rfpll_mmd1 = r08, \
0128 .radio_vcobuf_tune = r09, \
0129 .radio_logen_mx2g_tune = r10, \
0130 .radio_logen_mx5g_tune = r11, \
0131 .radio_logen_indbuf2g_tune = r12, \
0132 .radio_logen_indbuf5g_tune = r13, \
0133 .radio_txmix2g_tune_boost_pu_core0 = r14, \
0134 .radio_pad2g_tune_pus_core0 = r15, \
0135 .radio_pga_boost_tune_core0 = r16, \
0136 .radio_txmix5g_boost_tune_core0 = r17, \
0137 .radio_pad5g_tune_misc_pus_core0 = r18, \
0138 .radio_lna2g_tune_core0 = r19, \
0139 .radio_lna5g_tune_core0 = r20, \
0140 .radio_txmix2g_tune_boost_pu_core1 = r21, \
0141 .radio_pad2g_tune_pus_core1 = r22, \
0142 .radio_pga_boost_tune_core1 = r23, \
0143 .radio_txmix5g_boost_tune_core1 = r24, \
0144 .radio_pad5g_tune_misc_pus_core1 = r25, \
0145 .radio_lna2g_tune_core1 = r26, \
0146 .radio_lna5g_tune_core1 = r27
0147
0148 #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
0149 r10, r11, r12, r13, r14, r15, r16, r17) \
0150 .radio_vcocal_countval0 = r00, \
0151 .radio_vcocal_countval1 = r01, \
0152 .radio_rfpll_refmaster_sparextalsize = r02, \
0153 .radio_rfpll_loopfilter_r1 = r03, \
0154 .radio_rfpll_loopfilter_c2 = r04, \
0155 .radio_rfpll_loopfilter_c1 = r05, \
0156 .radio_cp_kpd_idac = r06, \
0157 .radio_rfpll_mmd0 = r07, \
0158 .radio_rfpll_mmd1 = r08, \
0159 .radio_vcobuf_tune = r09, \
0160 .radio_logen_mx2g_tune = r10, \
0161 .radio_logen_indbuf2g_tune = r11, \
0162 .radio_txmix2g_tune_boost_pu_core0 = r12, \
0163 .radio_pad2g_tune_pus_core0 = r13, \
0164 .radio_lna2g_tune_core0 = r14, \
0165 .radio_txmix2g_tune_boost_pu_core1 = r15, \
0166 .radio_pad2g_tune_pus_core1 = r16, \
0167 .radio_lna2g_tune_core1 = r17
0168
0169 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
0170 .phy_regs.phy_bw1a = r0, \
0171 .phy_regs.phy_bw2 = r1, \
0172 .phy_regs.phy_bw3 = r2, \
0173 .phy_regs.phy_bw4 = r3, \
0174 .phy_regs.phy_bw5 = r4, \
0175 .phy_regs.phy_bw6 = r5
0176
0177
0178 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
0179 {
0180 .freq = 2412,
0181 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
0182 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
0183 0x03, 0xff),
0184 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
0185 },
0186 {
0187 .freq = 2417,
0188 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
0189 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
0190 0x03, 0xff),
0191 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
0192 },
0193 {
0194 .freq = 2422,
0195 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
0196 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
0197 0x03, 0xef),
0198 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
0199 },
0200 {
0201 .freq = 2427,
0202 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
0203 0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
0204 0x03, 0xdf),
0205 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
0206 },
0207 {
0208 .freq = 2432,
0209 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
0210 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
0211 0x03, 0xcf),
0212 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
0213 },
0214 {
0215 .freq = 2437,
0216 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
0217 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
0218 0x03, 0xbf),
0219 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
0220 },
0221 {
0222 .freq = 2442,
0223 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
0224 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
0225 0x03, 0xaf),
0226 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
0227 },
0228 {
0229 .freq = 2447,
0230 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
0231 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
0232 0x03, 0x9f),
0233 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
0234 },
0235 {
0236 .freq = 2452,
0237 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
0238 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
0239 0x03, 0x8f),
0240 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
0241 },
0242 {
0243 .freq = 2457,
0244 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
0245 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
0246 0x03, 0x7f),
0247 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
0248 },
0249 {
0250 .freq = 2462,
0251 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
0252 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
0253 0x03, 0x6f),
0254 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
0255 },
0256 {
0257 .freq = 2467,
0258 RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
0259 0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
0260 0x03, 0x5f),
0261 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
0262 },
0263 {
0264 .freq = 2472,
0265 RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
0266 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
0267 0x03, 0x4f),
0268 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
0269 },
0270 {
0271 .freq = 2484,
0272 RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
0273 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
0274 0x03, 0x3f),
0275 PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
0276 }
0277 };
0278
0279
0280 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = {
0281 {
0282 .freq = 2412,
0283 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c,
0284 0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21,
0285 0x53, 0xff),
0286 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
0287 },
0288 {
0289 .freq = 2417,
0290 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71,
0291 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
0292 0x53, 0xff),
0293 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
0294 },
0295 {
0296 .freq = 2422,
0297 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76,
0298 0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
0299 0x53, 0xff),
0300 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
0301 },
0302 {
0303 .freq = 2427,
0304 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b,
0305 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
0306 0x53, 0xff),
0307 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
0308 },
0309 {
0310 .freq = 2432,
0311 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80,
0312 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
0313 0x53, 0xff),
0314 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
0315 },
0316 {
0317 .freq = 2437,
0318 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85,
0319 0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
0320 0x53, 0xff),
0321 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
0322 },
0323 {
0324 .freq = 2442,
0325 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a,
0326 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
0327 0x43, 0xff),
0328 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
0329 },
0330 {
0331 .freq = 2447,
0332 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f,
0333 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
0334 0x43, 0xff),
0335 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
0336 },
0337 {
0338 .freq = 2452,
0339 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94,
0340 0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
0341 0x43, 0xff),
0342 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
0343 },
0344 {
0345 .freq = 2457,
0346 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99,
0347 0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21,
0348 0x43, 0xff),
0349 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
0350 },
0351 {
0352 .freq = 2462,
0353 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e,
0354 0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01,
0355 0x43, 0xff),
0356 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
0357 },
0358 };
0359
0360
0361 static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
0362 {
0363 .freq = 2412,
0364 RADIOREGS7(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
0365 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
0366 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0367 0x00, 0x00, 0xf0, 0x00),
0368 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
0369 },
0370 {
0371 .freq = 2417,
0372 RADIOREGS7(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
0373 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
0374 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0375 0x00, 0x00, 0xf0, 0x00),
0376 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
0377 },
0378 {
0379 .freq = 2422,
0380 RADIOREGS7(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
0381 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
0382 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0383 0x00, 0x00, 0xf0, 0x00),
0384 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
0385 },
0386 {
0387 .freq = 2427,
0388 RADIOREGS7(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
0389 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
0390 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0391 0x00, 0x00, 0xf0, 0x00),
0392 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
0393 },
0394 {
0395 .freq = 2432,
0396 RADIOREGS7(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
0397 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
0398 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0399 0x00, 0x00, 0xf0, 0x00),
0400 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
0401 },
0402 {
0403 .freq = 2437,
0404 RADIOREGS7(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
0405 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
0406 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0407 0x00, 0x00, 0xf0, 0x00),
0408 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
0409 },
0410 {
0411 .freq = 2442,
0412 RADIOREGS7(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
0413 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
0414 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0415 0x00, 0x00, 0xf0, 0x00),
0416 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
0417 },
0418 {
0419 .freq = 2447,
0420 RADIOREGS7(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
0421 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
0422 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0423 0x00, 0x00, 0xf0, 0x00),
0424 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
0425 },
0426 {
0427 .freq = 2452,
0428 RADIOREGS7(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
0429 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
0430 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0431 0x00, 0x00, 0xf0, 0x00),
0432 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
0433 },
0434 {
0435 .freq = 2457,
0436 RADIOREGS7(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
0437 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
0438 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0439 0x00, 0x00, 0xf0, 0x00),
0440 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
0441 },
0442 {
0443 .freq = 2462,
0444 RADIOREGS7(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
0445 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
0446 0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
0447 0x00, 0x00, 0xf0, 0x00),
0448 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
0449 },
0450 {
0451 .freq = 5180,
0452 RADIOREGS7(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
0453 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
0454 0x9f, 0x2f, 0xa3, 0x00, 0xfc, 0x00, 0x00, 0x4f,
0455 0x3a, 0x83, 0x00, 0xfc),
0456 PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
0457 },
0458 {
0459 .freq = 5200,
0460 RADIOREGS7(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
0461 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
0462 0x7f, 0x2f, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x4c,
0463 0x4a, 0x83, 0x00, 0xf8),
0464 PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
0465 },
0466 {
0467 .freq = 5220,
0468 RADIOREGS7(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
0469 0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
0470 0x6d, 0x3d, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x2d,
0471 0x2a, 0x73, 0x00, 0xf8),
0472 PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
0473 },
0474 {
0475 .freq = 5240,
0476 RADIOREGS7(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
0477 0x02, 0x0d, 0x00, 0x0d, 0x00, 0x8d, 0x00, 0x00,
0478 0x4d, 0x1c, 0x73, 0x00, 0xf8, 0x00, 0x00, 0x4d,
0479 0x2b, 0x73, 0x00, 0xf8),
0480 PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
0481 },
0482 {
0483 .freq = 5745,
0484 RADIOREGS7(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
0485 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
0486 0x08, 0x03, 0x03, 0x00, 0x30, 0x00, 0x00, 0x06,
0487 0x02, 0x03, 0x00, 0x30),
0488 PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
0489 },
0490 {
0491 .freq = 5765,
0492 RADIOREGS7(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
0493 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
0494 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
0495 0x02, 0x03, 0x00, 0x00),
0496 PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
0497 },
0498 {
0499 .freq = 5785,
0500 RADIOREGS7(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
0501 0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
0502 0x08, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
0503 0x21, 0x03, 0x00, 0x00),
0504 PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
0505 },
0506 {
0507 .freq = 5805,
0508 RADIOREGS7(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
0509 0x04, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00,
0510 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
0511 0x00, 0x03, 0x00, 0x00),
0512 PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
0513 },
0514 {
0515 .freq = 5825,
0516 RADIOREGS7(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
0517 0x04, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00,
0518 0x05, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
0519 0x00, 0x03, 0x00, 0x00),
0520 PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
0521 },
0522 };
0523
0524 void r2057_upload_inittabs(struct b43_wldev *dev)
0525 {
0526 struct b43_phy *phy = &dev->phy;
0527 u16 *table = NULL;
0528 u16 size, i;
0529
0530 switch (phy->rev) {
0531 case 7:
0532 table = r2057_rev4_init[0];
0533 size = ARRAY_SIZE(r2057_rev4_init);
0534 break;
0535 case 8:
0536 if (phy->radio_rev == 5) {
0537 table = r2057_rev5_init[0];
0538 size = ARRAY_SIZE(r2057_rev5_init);
0539 } else if (phy->radio_rev == 7) {
0540 table = r2057_rev7_init[0];
0541 size = ARRAY_SIZE(r2057_rev7_init);
0542 }
0543 break;
0544 case 9:
0545 if (phy->radio_rev == 5) {
0546 table = r2057_rev5a_init[0];
0547 size = ARRAY_SIZE(r2057_rev5a_init);
0548 }
0549 break;
0550 case 16:
0551 if (phy->radio_rev == 9) {
0552 table = r2057_rev9_init[0];
0553 size = ARRAY_SIZE(r2057_rev9_init);
0554 }
0555 break;
0556 case 17:
0557 if (phy->radio_rev == 14) {
0558 table = r2057_rev14_init[0];
0559 size = ARRAY_SIZE(r2057_rev14_init);
0560 }
0561 break;
0562 }
0563
0564 B43_WARN_ON(!table);
0565
0566 if (table) {
0567 for (i = 0; i < size; i++, table += 2)
0568 b43_radio_write(dev, table[0], table[1]);
0569 }
0570 }
0571
0572 void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
0573 const struct b43_nphy_chantabent_rev7 **tabent_r7,
0574 const struct b43_nphy_chantabent_rev7_2g **tabent_r7_2g)
0575 {
0576 struct b43_phy *phy = &dev->phy;
0577 const struct b43_nphy_chantabent_rev7 *e_r7 = NULL;
0578 const struct b43_nphy_chantabent_rev7_2g *e_r7_2g = NULL;
0579 unsigned int len, i;
0580
0581 *tabent_r7 = NULL;
0582 *tabent_r7_2g = NULL;
0583
0584 switch (phy->rev) {
0585 case 8:
0586 if (phy->radio_rev == 5) {
0587 e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
0588 len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
0589 }
0590 break;
0591 case 16:
0592 if (phy->radio_rev == 9) {
0593 e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;
0594 len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9);
0595 }
0596 break;
0597 case 17:
0598 if (phy->radio_rev == 14) {
0599 e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14;
0600 len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14);
0601 }
0602 break;
0603 default:
0604 break;
0605 }
0606
0607 if (e_r7) {
0608 for (i = 0; i < len; i++, e_r7++) {
0609 if (e_r7->freq == freq) {
0610 *tabent_r7 = e_r7;
0611 return;
0612 }
0613 }
0614 } else if (e_r7_2g) {
0615 for (i = 0; i < len; i++, e_r7_2g++) {
0616 if (e_r7_2g->freq == freq) {
0617 *tabent_r7_2g = e_r7_2g;
0618 return;
0619 }
0620 }
0621 } else {
0622 B43_WARN_ON(1);
0623 }
0624 }