1 --- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
2 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
4 #define MIMO_PS_CFG_RX_STBY_POL FIELD32(0x00000010)
5 #define MIMO_PS_CFG_RX_RX_STBY0 FIELD32(0x00000020)
7 +#define BB_PA_MODE_CFG0 0x1214
8 +#define BB_PA_MODE_CFG1 0x1218
9 +#define RF_PA_MODE_CFG0 0x121C
10 +#define RF_PA_MODE_CFG1 0x1220
15 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
16 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
17 @@ -3836,14 +3836,16 @@ static void rt2800_config_channel_rf7620
18 rt2x00_set_field8(&rfcsr, RFCSR19_K, rf->rf4);
19 rt2800_rfcsr_write(rt2x00dev, 19, rfcsr);
21 - /* Default: XO=20MHz , SDM mode */
22 - rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
23 - rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
24 - rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
26 - rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
27 - rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
28 - rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
29 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
30 + /* Default: XO=20MHz , SDM mode */
31 + rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
32 + rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
33 + rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
35 + rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
36 + rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
37 + rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
40 rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
41 rt2x00_set_field8(&rfcsr, RFCSR1_TX2_EN_MT7620,
42 @@ -3877,18 +3879,23 @@ static void rt2800_config_channel_rf7620
43 rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x20);
46 - if (conf_is_ht40(conf)) {
47 - rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x08);
48 - rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x08);
50 - rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x28);
51 - rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x28);
52 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
53 + if (conf_is_ht40(conf)) {
54 + rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x08);
55 + rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x08);
57 + rt2800_rfcsr_write_dccal(rt2x00dev, 58, 0x28);
58 + rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x28);
62 - rfcsr = rt2800_rfcsr_read(rt2x00dev, 28);
63 - rt2x00_set_field8(&rfcsr, RFCSR28_CH11_HT40,
64 - conf_is_ht40(conf) && (rf->channel == 11));
65 - rt2800_rfcsr_write(rt2x00dev, 28, rfcsr);
66 + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
67 + rt2800_hw_get_chipeco(rt2x00dev) == 2) {
68 + rfcsr = rt2800_rfcsr_read(rt2x00dev, 28);
69 + rt2x00_set_field8(&rfcsr, RFCSR28_CH11_HT40,
70 + conf_is_ht40(conf) && (rf->channel == 11));
71 + rt2800_rfcsr_write(rt2x00dev, 28, rfcsr);
74 if (!test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags)) {
75 if (conf_is_ht40(conf)) {
76 @@ -4002,25 +4009,29 @@ static void rt2800_config_alc_rt6352(str
77 if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev, MAC_STATUS_CFG_BBP_RF_BUSY)))
78 rt2x00_warn(rt2x00dev, "RF busy while configuring ALC\n");
80 - if (chan->center_freq > 2457) {
81 - bbp = rt2800_bbp_read(rt2x00dev, 30);
83 - rt2800_bbp_write(rt2x00dev, 30, bbp);
84 - rt2800_rfcsr_write(rt2x00dev, 39, 0);
85 - if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
86 - rt2800_rfcsr_write(rt2x00dev, 42, 0xfb);
88 - rt2800_rfcsr_write(rt2x00dev, 42, 0x7b);
90 - bbp = rt2800_bbp_read(rt2x00dev, 30);
92 - rt2800_bbp_write(rt2x00dev, 30, bbp);
93 - rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
94 - if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
95 - rt2800_rfcsr_write(rt2x00dev, 42, 0xdb);
97 - rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
98 + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
99 + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
100 + if (chan->center_freq > 2457) {
101 + bbp = rt2800_bbp_read(rt2x00dev, 30);
103 + rt2800_bbp_write(rt2x00dev, 30, bbp);
104 + rt2800_rfcsr_write(rt2x00dev, 39, 0);
105 + if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
106 + rt2800_rfcsr_write(rt2x00dev, 42, 0xfb);
108 + rt2800_rfcsr_write(rt2x00dev, 42, 0x7b);
110 + bbp = rt2800_bbp_read(rt2x00dev, 30);
112 + rt2800_bbp_write(rt2x00dev, 30, bbp);
113 + rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
114 + if (rt2x00_has_cap_external_lna_bg(rt2x00dev))
115 + rt2800_rfcsr_write(rt2x00dev, 42, 0xdb);
117 + rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
121 rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
123 rt2800_vco_calibration(rt2x00dev);
124 @@ -4513,7 +4524,8 @@ static void rt2800_config_channel(struct
125 if (rt2x00_rt(rt2x00dev, RT6352)) {
126 /* BBP for GLRT BW */
127 bbp = conf_is_ht40(conf) ?
128 - 0x10 : rt2x00_has_cap_external_lna_bg(rt2x00dev) ?
129 + 0x10 : !rt2x00_has_cap_external_lna_bg(rt2x00dev) ?
130 + 0x1a : rt2800_hw_get_chippkg(rt2x00dev) == 1 ?
132 rt2800_bbp_glrt_write(rt2x00dev, 141, bbp);
134 @@ -6017,18 +6029,33 @@ static int rt2800_init_registers(struct
135 } else if (rt2x00_rt(rt2x00dev, RT5350)) {
136 rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
137 } else if (rt2x00_rt(rt2x00dev, RT6352)) {
138 - rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000401);
139 - rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x000C0001);
140 - rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
141 - rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
142 - rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
143 - rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
144 - rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN, 0x6C6C666C);
145 - rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN, 0x6C6C666C);
146 - rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
148 - rt2800_register_write(rt2x00dev, TX1_RF_GAIN_CORRECT,
150 + if (rt2800_hw_get_chipver(rt2x00dev) <= 1) {
151 + rt2800_register_write(rt2x00dev, TX_ALC_VGA3,
153 + rt2800_register_write(rt2x00dev, BB_PA_MODE_CFG0,
155 + rt2800_register_write(rt2x00dev, BB_PA_MODE_CFG1,
157 + rt2800_register_write(rt2x00dev, RF_PA_MODE_CFG0,
159 + rt2800_register_write(rt2x00dev, RF_PA_MODE_CFG1,
162 + rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000401);
163 + rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x000C0001);
164 + rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
165 + rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
166 + rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
167 + rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
168 + rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN,
170 + rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN,
172 + rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
174 + rt2800_register_write(rt2x00dev, TX1_RF_GAIN_CORRECT,
177 reg = rt2800_register_read(rt2x00dev, TX_ALC_CFG_1);
178 rt2x00_set_field32(®, TX_ALC_CFG_1_ROS_BUSY_EN, 0);
179 rt2800_register_write(rt2x00dev, TX_ALC_CFG_1, reg);
180 @@ -7141,14 +7168,16 @@ static void rt2800_init_bbp_6352(struct
181 rt2800_bbp_write(rt2x00dev, 188, 0x00);
182 rt2800_bbp_write(rt2x00dev, 189, 0x00);
184 - rt2800_bbp_write(rt2x00dev, 91, 0x06);
185 - rt2800_bbp_write(rt2x00dev, 92, 0x04);
186 - rt2800_bbp_write(rt2x00dev, 93, 0x54);
187 - rt2800_bbp_write(rt2x00dev, 99, 0x50);
188 - rt2800_bbp_write(rt2x00dev, 148, 0x84);
189 - rt2800_bbp_write(rt2x00dev, 167, 0x80);
190 - rt2800_bbp_write(rt2x00dev, 178, 0xFF);
191 - rt2800_bbp_write(rt2x00dev, 106, 0x13);
192 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
193 + rt2800_bbp_write(rt2x00dev, 91, 0x06);
194 + rt2800_bbp_write(rt2x00dev, 92, 0x04);
195 + rt2800_bbp_write(rt2x00dev, 93, 0x54);
196 + rt2800_bbp_write(rt2x00dev, 99, 0x50);
197 + rt2800_bbp_write(rt2x00dev, 148, 0x84);
198 + rt2800_bbp_write(rt2x00dev, 167, 0x80);
199 + rt2800_bbp_write(rt2x00dev, 178, 0xFF);
200 + rt2800_bbp_write(rt2x00dev, 106, 0x13);
203 /* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
204 rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
205 @@ -10381,6 +10410,9 @@ static void rt2800_restore_rf_bbp_rt6352
206 rt2800_register_write(rt2x00dev, RF_BYPASS3, 0x0);
209 + if (rt2800_hw_get_chippkg(rt2x00dev) != 1)
212 if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
213 rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
214 rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
215 @@ -10458,6 +10490,9 @@ static void rt2800_calibration_rt6352(st
216 rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
219 + if (rt2800_hw_get_chippkg(rt2x00dev) != 1)
222 if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
223 rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
224 rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
225 @@ -10548,31 +10583,36 @@ static void rt2800_init_rfcsr_6352(struc
226 rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
227 rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
229 - rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
230 - if (rt2800_clk_is_20mhz(rt2x00dev))
231 - rt2800_rfcsr_write(rt2x00dev, 13, 0x03);
233 - rt2800_rfcsr_write(rt2x00dev, 13, 0x00);
234 - rt2800_rfcsr_write(rt2x00dev, 14, 0x7C);
235 - rt2800_rfcsr_write(rt2x00dev, 16, 0x80);
236 - rt2800_rfcsr_write(rt2x00dev, 17, 0x99);
237 - rt2800_rfcsr_write(rt2x00dev, 18, 0x99);
238 - rt2800_rfcsr_write(rt2x00dev, 19, 0x09);
239 - rt2800_rfcsr_write(rt2x00dev, 20, 0x50);
240 - rt2800_rfcsr_write(rt2x00dev, 21, 0xB0);
241 - rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
242 - rt2800_rfcsr_write(rt2x00dev, 23, 0x06);
243 - rt2800_rfcsr_write(rt2x00dev, 24, 0x00);
244 - rt2800_rfcsr_write(rt2x00dev, 25, 0x00);
245 - rt2800_rfcsr_write(rt2x00dev, 26, 0x5D);
246 - rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
247 - rt2800_rfcsr_write(rt2x00dev, 28, 0x61);
248 - rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
249 - rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
251 - rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
252 - rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
253 - rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
254 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
255 + rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
256 + if (rt2800_clk_is_20mhz(rt2x00dev))
257 + rt2800_rfcsr_write(rt2x00dev, 13, 0x03);
259 + rt2800_rfcsr_write(rt2x00dev, 13, 0x00);
260 + rt2800_rfcsr_write(rt2x00dev, 14, 0x7C);
261 + rt2800_rfcsr_write(rt2x00dev, 16, 0x80);
262 + rt2800_rfcsr_write(rt2x00dev, 17, 0x99);
263 + rt2800_rfcsr_write(rt2x00dev, 18, 0x99);
264 + rt2800_rfcsr_write(rt2x00dev, 19, 0x09);
265 + rt2800_rfcsr_write(rt2x00dev, 20, 0x50);
266 + rt2800_rfcsr_write(rt2x00dev, 21, 0xB0);
267 + rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
268 + rt2800_rfcsr_write(rt2x00dev, 23, 0x06);
269 + rt2800_rfcsr_write(rt2x00dev, 24, 0x00);
270 + rt2800_rfcsr_write(rt2x00dev, 25, 0x00);
271 + rt2800_rfcsr_write(rt2x00dev, 26, 0x5D);
272 + rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
273 + rt2800_rfcsr_write(rt2x00dev, 28, 0x61);
274 + rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
275 + rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
278 + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
279 + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
280 + rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
281 + rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
282 + rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
285 /* Initialize RF channel register to default value */
286 rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
287 @@ -10638,63 +10678,71 @@ static void rt2800_init_rfcsr_6352(struc
289 rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
291 - rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47);
292 - rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71);
293 - rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x33);
294 - rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x0E);
295 - rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
296 - rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA4);
297 - rt2800_rfcsr_write_chanreg(rt2x00dev, 20, 0x02);
298 - rt2800_rfcsr_write_chanreg(rt2x00dev, 21, 0x12);
299 - rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x1C);
300 - rt2800_rfcsr_write_chanreg(rt2x00dev, 29, 0xEB);
301 - rt2800_rfcsr_write_chanreg(rt2x00dev, 32, 0x7D);
302 - rt2800_rfcsr_write_chanreg(rt2x00dev, 34, 0xD6);
303 - rt2800_rfcsr_write_chanreg(rt2x00dev, 36, 0x08);
304 - rt2800_rfcsr_write_chanreg(rt2x00dev, 38, 0xB4);
305 - rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
306 - rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
307 - rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
308 - rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
309 - rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
310 - rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
311 - rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
312 - rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
313 - rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
314 - rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
315 - rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
316 - rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
317 - rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x20);
318 - rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
319 - rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
320 - rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
321 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
322 + rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47);
323 + rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71);
324 + rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x33);
325 + rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x0E);
326 + rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
327 + rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA4);
328 + rt2800_rfcsr_write_chanreg(rt2x00dev, 20, 0x02);
329 + rt2800_rfcsr_write_chanreg(rt2x00dev, 21, 0x12);
330 + rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x1C);
331 + rt2800_rfcsr_write_chanreg(rt2x00dev, 29, 0xEB);
332 + rt2800_rfcsr_write_chanreg(rt2x00dev, 32, 0x7D);
333 + rt2800_rfcsr_write_chanreg(rt2x00dev, 34, 0xD6);
334 + rt2800_rfcsr_write_chanreg(rt2x00dev, 36, 0x08);
335 + rt2800_rfcsr_write_chanreg(rt2x00dev, 38, 0xB4);
336 + rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
337 + rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
338 + rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
339 + rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
340 + rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
341 + rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
342 + rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
343 + rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
344 + rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
345 + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
346 + rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
347 + rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
348 + rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x20);
349 + rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
350 + rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
351 + rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
354 - rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
355 - rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
356 - rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
357 - rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
358 - rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
359 - rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
360 - rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
361 - rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
362 - rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
363 + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
364 + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
365 + rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
366 + rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
367 + rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
368 + rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
369 + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
370 + rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
371 + rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
372 + rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
373 + rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
375 + rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
376 + rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
377 + rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
378 + rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
379 + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
380 + rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
383 - rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
384 - rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
385 - rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
386 - rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
387 - rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
388 - rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
390 - /* Initialize RF channel register for DRQFN */
391 - rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
392 - rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
393 - rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
394 - rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
395 - rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
396 - rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
397 - rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
398 - rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
399 + if (rt2800_hw_get_chippkg(rt2x00dev) == 0 &&
400 + rt2800_hw_get_chipver(rt2x00dev) == 1) {
401 + /* Initialize RF channel register for DRQFN */
402 + rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
403 + rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
404 + rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
405 + rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
406 + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
407 + rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
408 + rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
409 + rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
412 /* Initialize RF DC calibration register to default value */
413 rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
414 @@ -10757,12 +10805,17 @@ static void rt2800_init_rfcsr_6352(struc
415 rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
416 rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
418 - rt2800_rfcsr_write_dccal(rt2x00dev, 3, 0x08);
419 - rt2800_rfcsr_write_dccal(rt2x00dev, 4, 0x04);
420 - rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x20);
421 + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
422 + rt2800_rfcsr_write_dccal(rt2x00dev, 3, 0x08);
423 + rt2800_rfcsr_write_dccal(rt2x00dev, 4, 0x04);
424 + rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x20);
427 - rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
428 - rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
429 + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
430 + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
431 + rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
432 + rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
435 /* Do calibration and init PA/LNA */
436 rt2800_calibration_rt6352(rt2x00dev);