0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "b43.h"
0013 #include "radio_2059.h"
0014
0015
0016 static u16 r2059_phy_rev1_init[][2] = {
0017 { 0x051, 0x70 }, { 0x05a, 0x03 }, { 0x079, 0x01 }, { 0x082, 0x70 },
0018 { 0x083, 0x00 }, { 0x084, 0x70 }, { 0x09a, 0x7f }, { 0x0b6, 0x10 },
0019 { 0x188, 0x05 },
0020 };
0021
0022 #define RADIOREGS(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
0023 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
0024 r20) \
0025 .radio_syn16 = r00, \
0026 .radio_syn17 = r01, \
0027 .radio_syn22 = r02, \
0028 .radio_syn25 = r03, \
0029 .radio_syn27 = r04, \
0030 .radio_syn28 = r05, \
0031 .radio_syn29 = r06, \
0032 .radio_syn2c = r07, \
0033 .radio_syn2d = r08, \
0034 .radio_syn37 = r09, \
0035 .radio_syn41 = r10, \
0036 .radio_syn43 = r11, \
0037 .radio_syn47 = r12, \
0038 .radio_rxtx4a = r13, \
0039 .radio_rxtx58 = r14, \
0040 .radio_rxtx5a = r15, \
0041 .radio_rxtx6a = r16, \
0042 .radio_rxtx6d = r17, \
0043 .radio_rxtx6e = r18, \
0044 .radio_rxtx92 = r19, \
0045 .radio_rxtx98 = r20
0046
0047 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
0048 .phy_regs.bw1 = r0, \
0049 .phy_regs.bw2 = r1, \
0050 .phy_regs.bw3 = r2, \
0051 .phy_regs.bw4 = r3, \
0052 .phy_regs.bw5 = r4, \
0053 .phy_regs.bw6 = r5
0054
0055
0056
0057
0058 static const struct b43_phy_ht_channeltab_e_radio2059 b43_phy_ht_channeltab_radio2059[] = {
0059 {
0060 .freq = 2412,
0061 RADIOREGS(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
0062 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x73,
0063 0x00, 0x00, 0x00, 0xd0, 0x00),
0064 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
0065 },
0066 {
0067 .freq = 2417,
0068 RADIOREGS(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
0069 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x73,
0070 0x00, 0x00, 0x00, 0xd0, 0x00),
0071 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
0072 },
0073 {
0074 .freq = 2422,
0075 RADIOREGS(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
0076 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x73,
0077 0x00, 0x00, 0x00, 0xd0, 0x00),
0078 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
0079 },
0080 {
0081 .freq = 2427,
0082 RADIOREGS(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
0083 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x73,
0084 0x00, 0x00, 0x00, 0xa0, 0x00),
0085 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
0086 },
0087 {
0088 .freq = 2432,
0089 RADIOREGS(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
0090 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x73,
0091 0x00, 0x00, 0x00, 0xa0, 0x00),
0092 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
0093 },
0094 {
0095 .freq = 2437,
0096 RADIOREGS(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
0097 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x73,
0098 0x00, 0x00, 0x00, 0xa0, 0x00),
0099 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
0100 },
0101 {
0102 .freq = 2442,
0103 RADIOREGS(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
0104 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,
0105 0x00, 0x00, 0x00, 0x80, 0x00),
0106 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
0107 },
0108 {
0109 .freq = 2447,
0110 RADIOREGS(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
0111 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,
0112 0x00, 0x00, 0x00, 0x80, 0x00),
0113 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
0114 },
0115 {
0116 .freq = 2452,
0117 RADIOREGS(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
0118 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,
0119 0x00, 0x00, 0x00, 0x80, 0x00),
0120 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
0121 },
0122 {
0123 .freq = 2457,
0124 RADIOREGS(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
0125 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x73,
0126 0x00, 0x00, 0x00, 0x60, 0x00),
0127 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
0128 },
0129 {
0130 .freq = 2462,
0131 RADIOREGS(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
0132 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x73,
0133 0x00, 0x00, 0x00, 0x60, 0x00),
0134 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
0135 },
0136 { .freq = 2467,
0137 RADIOREGS(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
0138 0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
0139 0x00, 0x00, 0x00, 0xf0, 0x00),
0140 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
0141 },
0142 { .freq = 2472,
0143 RADIOREGS(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
0144 0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
0145 0x00, 0x00, 0x00, 0xf0, 0x00),
0146 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
0147 },
0148 {
0149 .freq = 5180,
0150 RADIOREGS(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
0151 0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,
0152 0x0f, 0x4f, 0xa3, 0x00, 0xfc),
0153 PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
0154 },
0155 {
0156 .freq = 5200,
0157 RADIOREGS(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
0158 0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,
0159 0x0f, 0x4f, 0x93, 0x00, 0xfb),
0160 PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
0161 },
0162 {
0163 .freq = 5220,
0164 RADIOREGS(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
0165 0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,
0166 0x0f, 0x4f, 0x93, 0x00, 0xea),
0167 PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
0168 },
0169 {
0170 .freq = 5240,
0171 RADIOREGS(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
0172 0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,
0173 0x0f, 0x4f, 0x93, 0x00, 0xda),
0174 PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
0175 },
0176 {
0177 .freq = 5260,
0178 RADIOREGS(0xd9, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0e,
0179 0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,
0180 0x0f, 0x4f, 0x93, 0x00, 0xca),
0181 PHYREGS(0x083c, 0x0838, 0x0834, 0x01f1, 0x01f2, 0x01f3),
0182 },
0183 {
0184 .freq = 5280,
0185 RADIOREGS(0xe0, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x10,
0186 0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,
0187 0x0f, 0x4f, 0x93, 0x00, 0xb9),
0188 PHYREGS(0x0844, 0x0840, 0x083c, 0x01f0, 0x01f0, 0x01f1),
0189 },
0190 {
0191 .freq = 5300,
0192 RADIOREGS(0xe6, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x12,
0193 0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,
0194 0x0f, 0x4c, 0x83, 0x00, 0xb8),
0195 PHYREGS(0x084c, 0x0848, 0x0844, 0x01ee, 0x01ef, 0x01f0),
0196 },
0197 {
0198 .freq = 5320,
0199 RADIOREGS(0xed, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x14,
0200 0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,
0201 0x0f, 0x4c, 0x83, 0x00, 0xa8),
0202 PHYREGS(0x0854, 0x0850, 0x084c, 0x01ec, 0x01ed, 0x01ee),
0203 },
0204 {
0205 .freq = 5500,
0206 RADIOREGS(0x29, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x26,
0207 0x02, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x00,
0208 0x0a, 0x46, 0x43, 0x00, 0x75),
0209 PHYREGS(0x089c, 0x0898, 0x0894, 0x01dc, 0x01dd, 0x01dd),
0210 },
0211 {
0212 .freq = 5520,
0213 RADIOREGS(0x30, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x28,
0214 0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
0215 0x0a, 0x46, 0x43, 0x00, 0x75),
0216 PHYREGS(0x08a4, 0x08a0, 0x089c, 0x01da, 0x01db, 0x01dc),
0217 },
0218 {
0219 .freq = 5540,
0220 RADIOREGS(0x36, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2a,
0221 0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
0222 0x0a, 0x46, 0x43, 0x00, 0x75),
0223 PHYREGS(0x08ac, 0x08a8, 0x08a4, 0x01d8, 0x01d9, 0x01da),
0224 },
0225 {
0226 .freq = 5560,
0227 RADIOREGS(0x3d, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2c,
0228 0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
0229 0x0a, 0x46, 0x43, 0x00, 0x75),
0230 PHYREGS(0x08b4, 0x08b0, 0x08ac, 0x01d7, 0x01d7, 0x01d8),
0231 },
0232 {
0233 .freq = 5580,
0234 RADIOREGS(0x44, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2e,
0235 0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
0236 0x0a, 0x46, 0x43, 0x00, 0x74),
0237 PHYREGS(0x08bc, 0x08b8, 0x08b4, 0x01d5, 0x01d6, 0x01d7),
0238 },
0239 {
0240 .freq = 5600,
0241 RADIOREGS(0x4a, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x30,
0242 0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
0243 0x09, 0x44, 0x23, 0x00, 0x54),
0244 PHYREGS(0x08c4, 0x08c0, 0x08bc, 0x01d3, 0x01d4, 0x01d5),
0245 },
0246 {
0247 .freq = 5620,
0248 RADIOREGS(0x51, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x32,
0249 0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0250 0x09, 0x44, 0x23, 0x00, 0x54),
0251 PHYREGS(0x08cc, 0x08c8, 0x08c4, 0x01d2, 0x01d2, 0x01d3),
0252 },
0253 {
0254 .freq = 5640,
0255 RADIOREGS(0x58, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x34,
0256 0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0257 0x09, 0x44, 0x23, 0x00, 0x43),
0258 PHYREGS(0x08d4, 0x08d0, 0x08cc, 0x01d0, 0x01d1, 0x01d2),
0259 },
0260 {
0261 .freq = 5660,
0262 RADIOREGS(0x5e, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x36,
0263 0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0264 0x09, 0x43, 0x23, 0x00, 0x43),
0265 PHYREGS(0x08dc, 0x08d8, 0x08d4, 0x01ce, 0x01cf, 0x01d0),
0266 },
0267 {
0268 .freq = 5680,
0269 RADIOREGS(0x65, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x38,
0270 0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0271 0x09, 0x42, 0x23, 0x00, 0x43),
0272 PHYREGS(0x08e4, 0x08e0, 0x08dc, 0x01cd, 0x01ce, 0x01ce),
0273 },
0274 {
0275 .freq = 5700,
0276 RADIOREGS(0x6c, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x3a,
0277 0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0278 0x08, 0x42, 0x13, 0x00, 0x32),
0279 PHYREGS(0x08ec, 0x08e8, 0x08e4, 0x01cb, 0x01cc, 0x01cd),
0280 },
0281 {
0282 .freq = 5745,
0283 RADIOREGS(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
0284 0x04, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,
0285 0x08, 0x42, 0x13, 0x00, 0x21),
0286 PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
0287 },
0288 {
0289 .freq = 5765,
0290 RADIOREGS(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
0291 0x04, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,
0292 0x08, 0x42, 0x13, 0x00, 0x11),
0293 PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
0294 },
0295 {
0296 .freq = 5785,
0297 RADIOREGS(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
0298 0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,
0299 0x08, 0x42, 0x13, 0x00, 0x00),
0300 PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
0301 },
0302 {
0303 .freq = 5805,
0304 RADIOREGS(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
0305 0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,
0306 0x06, 0x41, 0x03, 0x00, 0x00),
0307 PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
0308 },
0309 {
0310 .freq = 5825,
0311 RADIOREGS(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
0312 0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,
0313 0x06, 0x41, 0x03, 0x00, 0x00),
0314 PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
0315 },
0316 };
0317
0318 void r2059_upload_inittabs(struct b43_wldev *dev)
0319 {
0320 struct b43_phy *phy = &dev->phy;
0321 u16 *table = NULL;
0322 u16 size, i;
0323
0324 switch (phy->rev) {
0325 case 1:
0326 table = r2059_phy_rev1_init[0];
0327 size = ARRAY_SIZE(r2059_phy_rev1_init);
0328 break;
0329 default:
0330 B43_WARN_ON(1);
0331 return;
0332 }
0333
0334 for (i = 0; i < size; i++, table += 2)
0335 b43_radio_write(dev, R2059_ALL | table[0], table[1]);
0336 }
0337
0338 const struct b43_phy_ht_channeltab_e_radio2059
0339 *b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq)
0340 {
0341 const struct b43_phy_ht_channeltab_e_radio2059 *e;
0342 unsigned int i;
0343
0344 e = b43_phy_ht_channeltab_radio2059;
0345 for (i = 0; i < ARRAY_SIZE(b43_phy_ht_channeltab_radio2059); i++, e++) {
0346 if (e->freq == freq)
0347 return e;
0348 }
0349
0350 return NULL;
0351 }