This source file includes following definitions.
- vnt_get_frame_time
- vnt_get_phy_field
- vnt_set_antenna_mode
- vnt_vt3184_init
- vnt_set_short_slot_time
- vnt_set_vga_gain_offset
- vnt_set_deep_sleep
- vnt_exit_deep_sleep
- vnt_update_pre_ed_threshold
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include "mac.h"
26 #include "baseband.h"
27 #include "rf.h"
28 #include "usbpipe.h"
29
30 static u8 vnt_vt3184_agc[] = {
31 0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06,
32 0x08, 0x08, 0x0a, 0x0a, 0x0c, 0x0c, 0x0e, 0x0e,
33 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16,
34 0x18, 0x18, 0x1a, 0x1a, 0x1c, 0x1c, 0x1e, 0x1e,
35 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26,
36 0x28, 0x28, 0x2a, 0x2a, 0x2c, 0x2c, 0x2e, 0x2e,
37 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36,
38 0x38, 0x38, 0x3a, 0x3a, 0x3c, 0x3c, 0x3e, 0x3e
39 };
40
41 static u8 vnt_vt3184_al2230[] = {
42 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
43 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x8e, 0x0a, 0x00, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x0c,
48 0x26, 0x5b, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa,
49 0xff, 0xff, 0x79, 0x00, 0x00, 0x0b, 0x48, 0x04,
50 0x00, 0x08, 0x00, 0x08, 0x08, 0x14, 0x05, 0x09,
51 0x00, 0x00, 0x00, 0x00, 0x09, 0x73, 0x00, 0xc5,
52 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54 0xe4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x8c, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x08, 0x00, 0x1f, 0xb7, 0x88, 0x47, 0xaa, 0x00,
60 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
63 0x18, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x18,
64 0x38, 0x30, 0x00, 0x00, 0xff, 0x0f, 0xe4, 0xe2,
65 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
66 0x18, 0x20, 0x07, 0x18, 0xff, 0xff, 0x0e, 0x0a,
67 0x0e, 0x00, 0x82, 0xa7, 0x3c, 0x10, 0x30, 0x05,
68 0x40, 0x12, 0x00, 0x00, 0x10, 0x28, 0x80, 0x2a,
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0xf3, 0x00, 0x00, 0x00, 0x10, 0x00, 0x12,
71 0x00, 0xf4, 0x00, 0xff, 0x79, 0x20, 0x30, 0x05,
72 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
74 };
75
76
77 static u8 vnt_vt3184_vt3226d0[] = {
78 0x31, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
79 0x70, 0x45, 0x2a, 0x76, 0x00, 0x00, 0x80, 0x00,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x8e, 0x0a, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x0c,
84 0x26, 0x5b, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa,
85 0xff, 0xff, 0x79, 0x00, 0x00, 0x0b, 0x48, 0x04,
86 0x00, 0x08, 0x00, 0x08, 0x08, 0x14, 0x05, 0x09,
87 0x00, 0x00, 0x00, 0x00, 0x09, 0x73, 0x00, 0xc5,
88 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0xe4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0a,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00,
92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x8c, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x08, 0x00, 0x1f, 0xb7, 0x88, 0x47, 0xaa, 0x00,
96 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
99 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
100 0x38, 0x30, 0x00, 0x00, 0xff, 0x0f, 0xe4, 0xe2,
101 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
102 0x18, 0x20, 0x07, 0x18, 0xff, 0xff, 0x10, 0x0a,
103 0x0e, 0x00, 0x84, 0xa7, 0x3c, 0x10, 0x24, 0x05,
104 0x40, 0x12, 0x00, 0x00, 0x10, 0x28, 0x80, 0x2a,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0xf3, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10,
107 0x00, 0xf4, 0x00, 0xff, 0x79, 0x20, 0x30, 0x08,
108 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
110 };
111
112 static const u16 vnt_frame_time[MAX_RATE] = {
113 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
114 };
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
131 unsigned int frame_length, u16 tx_rate)
132 {
133 unsigned int frame_time;
134 unsigned int preamble;
135 unsigned int tmp;
136 unsigned int rate = 0;
137
138 if (tx_rate > RATE_54M)
139 return 0;
140
141 rate = (unsigned int)vnt_frame_time[tx_rate];
142
143 if (tx_rate <= 3) {
144 if (preamble_type == 1)
145 preamble = 96;
146 else
147 preamble = 192;
148
149 frame_time = (frame_length * 80) / rate;
150 tmp = (frame_time * rate) / 80;
151
152 if (frame_length != tmp)
153 frame_time++;
154
155 return preamble + frame_time;
156 }
157 frame_time = (frame_length * 8 + 22) / rate;
158 tmp = ((frame_time * rate) - 22) / 8;
159
160 if (frame_length != tmp)
161 frame_time++;
162
163 frame_time = frame_time * 4;
164
165 if (pkt_type != PK_TYPE_11A)
166 frame_time += 6;
167 return 20 + frame_time;
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187 void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
188 u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy)
189 {
190 u32 bit_count;
191 u32 count = 0;
192 u32 tmp;
193 int ext_bit;
194 u8 preamble_type = priv->preamble_type;
195
196 bit_count = frame_length * 8;
197 ext_bit = false;
198
199 switch (tx_rate) {
200 case RATE_1M:
201 count = bit_count;
202
203 phy->signal = 0x00;
204
205 break;
206 case RATE_2M:
207 count = bit_count / 2;
208
209 if (preamble_type == 1)
210 phy->signal = 0x09;
211 else
212 phy->signal = 0x01;
213
214 break;
215 case RATE_5M:
216 count = (bit_count * 10) / 55;
217 tmp = (count * 55) / 10;
218
219 if (tmp != bit_count)
220 count++;
221
222 if (preamble_type == 1)
223 phy->signal = 0x0a;
224 else
225 phy->signal = 0x02;
226
227 break;
228 case RATE_11M:
229 count = bit_count / 11;
230 tmp = count * 11;
231
232 if (tmp != bit_count) {
233 count++;
234
235 if ((bit_count - tmp) <= 3)
236 ext_bit = true;
237 }
238
239 if (preamble_type == 1)
240 phy->signal = 0x0b;
241 else
242 phy->signal = 0x03;
243
244 break;
245 case RATE_6M:
246 if (pkt_type == PK_TYPE_11A)
247 phy->signal = 0x9b;
248 else
249 phy->signal = 0x8b;
250
251 break;
252 case RATE_9M:
253 if (pkt_type == PK_TYPE_11A)
254 phy->signal = 0x9f;
255 else
256 phy->signal = 0x8f;
257
258 break;
259 case RATE_12M:
260 if (pkt_type == PK_TYPE_11A)
261 phy->signal = 0x9a;
262 else
263 phy->signal = 0x8a;
264
265 break;
266 case RATE_18M:
267 if (pkt_type == PK_TYPE_11A)
268 phy->signal = 0x9e;
269 else
270 phy->signal = 0x8e;
271
272 break;
273 case RATE_24M:
274 if (pkt_type == PK_TYPE_11A)
275 phy->signal = 0x99;
276 else
277 phy->signal = 0x89;
278
279 break;
280 case RATE_36M:
281 if (pkt_type == PK_TYPE_11A)
282 phy->signal = 0x9d;
283 else
284 phy->signal = 0x8d;
285
286 break;
287 case RATE_48M:
288 if (pkt_type == PK_TYPE_11A)
289 phy->signal = 0x98;
290 else
291 phy->signal = 0x88;
292
293 break;
294 case RATE_54M:
295 if (pkt_type == PK_TYPE_11A)
296 phy->signal = 0x9c;
297 else
298 phy->signal = 0x8c;
299 break;
300 default:
301 if (pkt_type == PK_TYPE_11A)
302 phy->signal = 0x9c;
303 else
304 phy->signal = 0x8c;
305 break;
306 }
307
308 if (pkt_type == PK_TYPE_11B) {
309 phy->service = 0x00;
310 if (ext_bit)
311 phy->service |= 0x80;
312 phy->len = cpu_to_le16((u16)count);
313 } else {
314 phy->service = 0x00;
315 phy->len = cpu_to_le16((u16)frame_length);
316 }
317 }
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332 int vnt_set_antenna_mode(struct vnt_private *priv, u8 antenna_mode)
333 {
334 switch (antenna_mode) {
335 case ANT_TXA:
336 case ANT_TXB:
337 break;
338 case ANT_RXA:
339 priv->bb_rx_conf &= 0xFC;
340 break;
341 case ANT_RXB:
342 priv->bb_rx_conf &= 0xFE;
343 priv->bb_rx_conf |= 0x02;
344 break;
345 }
346
347 return vnt_control_out(priv, MESSAGE_TYPE_SET_ANTMD,
348 (u16)antenna_mode, 0, 0, NULL);
349 }
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365 int vnt_vt3184_init(struct vnt_private *priv)
366 {
367 int ret = 0;
368 u16 length;
369 u8 *addr;
370 u8 *agc;
371 u16 length_agc;
372 u8 array[256];
373 u8 data;
374
375 ret = vnt_control_in(priv, MESSAGE_TYPE_READ, 0, MESSAGE_REQUEST_EEPROM,
376 EEP_MAX_CONTEXT_SIZE, priv->eeprom);
377 if (ret)
378 goto end;
379
380 priv->rf_type = priv->eeprom[EEP_OFS_RFTYPE];
381
382 dev_dbg(&priv->usb->dev, "RF Type %d\n", priv->rf_type);
383
384 if ((priv->rf_type == RF_AL2230) ||
385 (priv->rf_type == RF_AL2230S)) {
386 priv->bb_rx_conf = vnt_vt3184_al2230[10];
387 length = sizeof(vnt_vt3184_al2230);
388 addr = vnt_vt3184_al2230;
389 agc = vnt_vt3184_agc;
390 length_agc = sizeof(vnt_vt3184_agc);
391
392 priv->bb_vga[0] = 0x1C;
393 priv->bb_vga[1] = 0x10;
394 priv->bb_vga[2] = 0x0;
395 priv->bb_vga[3] = 0x0;
396
397 } else if (priv->rf_type == RF_AIROHA7230) {
398 priv->bb_rx_conf = vnt_vt3184_al2230[10];
399 length = sizeof(vnt_vt3184_al2230);
400 addr = vnt_vt3184_al2230;
401 agc = vnt_vt3184_agc;
402 length_agc = sizeof(vnt_vt3184_agc);
403
404 addr[0xd7] = 0x06;
405
406 priv->bb_vga[0] = 0x1c;
407 priv->bb_vga[1] = 0x10;
408 priv->bb_vga[2] = 0x0;
409 priv->bb_vga[3] = 0x0;
410
411 } else if ((priv->rf_type == RF_VT3226) ||
412 (priv->rf_type == RF_VT3226D0)) {
413 priv->bb_rx_conf = vnt_vt3184_vt3226d0[10];
414 length = sizeof(vnt_vt3184_vt3226d0);
415 addr = vnt_vt3184_vt3226d0;
416 agc = vnt_vt3184_agc;
417 length_agc = sizeof(vnt_vt3184_agc);
418
419 priv->bb_vga[0] = 0x20;
420 priv->bb_vga[1] = 0x10;
421 priv->bb_vga[2] = 0x0;
422 priv->bb_vga[3] = 0x0;
423
424
425 ret = vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2,
426 SOFTPWRCTL_RFLEOPT);
427 if (ret)
428 goto end;
429 } else if (priv->rf_type == RF_VT3342A0) {
430 priv->bb_rx_conf = vnt_vt3184_vt3226d0[10];
431 length = sizeof(vnt_vt3184_vt3226d0);
432 addr = vnt_vt3184_vt3226d0;
433 agc = vnt_vt3184_agc;
434 length_agc = sizeof(vnt_vt3184_agc);
435
436 priv->bb_vga[0] = 0x20;
437 priv->bb_vga[1] = 0x10;
438 priv->bb_vga[2] = 0x0;
439 priv->bb_vga[3] = 0x0;
440
441
442 ret = vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL2,
443 SOFTPWRCTL_RFLEOPT);
444 if (ret)
445 goto end;
446 } else {
447 goto end;
448 }
449
450 memcpy(array, addr, length);
451
452 ret = vnt_control_out_blocks(priv, VNT_REG_BLOCK_SIZE,
453 MESSAGE_REQUEST_BBREG, length, array);
454 if (ret)
455 goto end;
456
457 memcpy(array, agc, length_agc);
458
459 ret = vnt_control_out(priv, MESSAGE_TYPE_WRITE, 0,
460 MESSAGE_REQUEST_BBAGC, length_agc, array);
461 if (ret)
462 goto end;
463
464 if ((priv->rf_type == RF_VT3226) ||
465 (priv->rf_type == RF_VT3342A0)) {
466 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG,
467 MAC_REG_ITRTMSET, 0x23);
468 if (ret)
469 goto end;
470
471 ret = vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01);
472 if (ret)
473 goto end;
474 } else if (priv->rf_type == RF_VT3226D0) {
475 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG,
476 MAC_REG_ITRTMSET, 0x11);
477 if (ret)
478 goto end;
479
480 ret = vnt_mac_reg_bits_on(priv, MAC_REG_PAPEDELAY, 0x01);
481 if (ret)
482 goto end;
483 }
484
485 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x04, 0x7f);
486 if (ret)
487 goto end;
488
489 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0x01);
490 if (ret)
491 goto end;
492
493 ret = vnt_rf_table_download(priv);
494 if (ret)
495 goto end;
496
497
498 ret = vnt_control_in(priv, MESSAGE_TYPE_READ, USB_REG4,
499 MESSAGE_REQUEST_MEM, sizeof(data), &data);
500 if (ret)
501 goto end;
502
503 data |= 0x2;
504
505 ret = vnt_control_out(priv, MESSAGE_TYPE_WRITE, USB_REG4,
506 MESSAGE_REQUEST_MEM, sizeof(data), &data);
507
508 end:
509 return ret;
510 }
511
512
513
514
515
516
517
518
519
520
521
522
523
524 int vnt_set_short_slot_time(struct vnt_private *priv)
525 {
526 int ret = 0;
527 u8 bb_vga = 0;
528
529 if (priv->short_slot_time)
530 priv->bb_rx_conf &= 0xdf;
531 else
532 priv->bb_rx_conf |= 0x20;
533
534 ret = vnt_control_in_u8(priv, MESSAGE_REQUEST_BBREG, 0xe7, &bb_vga);
535 if (ret)
536 goto end;
537
538 if (bb_vga == priv->bb_vga[0])
539 priv->bb_rx_conf |= 0x20;
540
541 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a,
542 priv->bb_rx_conf);
543
544 end:
545 return ret;
546 }
547
548 void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data)
549 {
550 vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xE7, data);
551
552
553 if (priv->short_slot_time)
554 priv->bb_rx_conf &= 0xdf;
555 else
556 priv->bb_rx_conf |= 0x20;
557
558 vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0a, priv->bb_rx_conf);
559 }
560
561
562
563
564
565
566
567
568
569
570
571
572
573 int vnt_set_deep_sleep(struct vnt_private *priv)
574 {
575 int ret = 0;
576
577
578 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);
579 if (ret)
580 return ret;
581
582
583 return vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0xB9);
584 }
585
586 int vnt_exit_deep_sleep(struct vnt_private *priv)
587 {
588 int ret = 0;
589
590
591 ret = vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0c, 0x00);
592 if (ret)
593 return ret;
594
595
596 return vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0x0d, 0x01);
597 }
598
599 void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning)
600 {
601 u8 cr_201 = 0x0, cr_206 = 0x0;
602 u8 ed_inx = priv->bb_pre_ed_index;
603
604 switch (priv->rf_type) {
605 case RF_AL2230:
606 case RF_AL2230S:
607 case RF_AIROHA7230:
608 if (scanning) {
609 ed_inx = 0;
610 cr_206 = 0x30;
611 break;
612 }
613
614 if (priv->bb_pre_ed_rssi <= 45) {
615 ed_inx = 20;
616 cr_201 = 0xff;
617 } else if (priv->bb_pre_ed_rssi <= 46) {
618 ed_inx = 19;
619 cr_201 = 0x1a;
620 } else if (priv->bb_pre_ed_rssi <= 47) {
621 ed_inx = 18;
622 cr_201 = 0x15;
623 } else if (priv->bb_pre_ed_rssi <= 49) {
624 ed_inx = 17;
625 cr_201 = 0xe;
626 } else if (priv->bb_pre_ed_rssi <= 51) {
627 ed_inx = 16;
628 cr_201 = 0x9;
629 } else if (priv->bb_pre_ed_rssi <= 53) {
630 ed_inx = 15;
631 cr_201 = 0x6;
632 } else if (priv->bb_pre_ed_rssi <= 55) {
633 ed_inx = 14;
634 cr_201 = 0x3;
635 } else if (priv->bb_pre_ed_rssi <= 56) {
636 ed_inx = 13;
637 cr_201 = 0x2;
638 cr_206 = 0xa0;
639 } else if (priv->bb_pre_ed_rssi <= 57) {
640 ed_inx = 12;
641 cr_201 = 0x2;
642 cr_206 = 0x20;
643 } else if (priv->bb_pre_ed_rssi <= 58) {
644 ed_inx = 11;
645 cr_201 = 0x1;
646 cr_206 = 0xa0;
647 } else if (priv->bb_pre_ed_rssi <= 59) {
648 ed_inx = 10;
649 cr_201 = 0x1;
650 cr_206 = 0x54;
651 } else if (priv->bb_pre_ed_rssi <= 60) {
652 ed_inx = 9;
653 cr_201 = 0x1;
654 cr_206 = 0x18;
655 } else if (priv->bb_pre_ed_rssi <= 61) {
656 ed_inx = 8;
657 cr_206 = 0xe3;
658 } else if (priv->bb_pre_ed_rssi <= 62) {
659 ed_inx = 7;
660 cr_206 = 0xb9;
661 } else if (priv->bb_pre_ed_rssi <= 63) {
662 ed_inx = 6;
663 cr_206 = 0x93;
664 } else if (priv->bb_pre_ed_rssi <= 64) {
665 ed_inx = 5;
666 cr_206 = 0x79;
667 } else if (priv->bb_pre_ed_rssi <= 65) {
668 ed_inx = 4;
669 cr_206 = 0x62;
670 } else if (priv->bb_pre_ed_rssi <= 66) {
671 ed_inx = 3;
672 cr_206 = 0x51;
673 } else if (priv->bb_pre_ed_rssi <= 67) {
674 ed_inx = 2;
675 cr_206 = 0x43;
676 } else if (priv->bb_pre_ed_rssi <= 68) {
677 ed_inx = 1;
678 cr_206 = 0x36;
679 } else {
680 ed_inx = 0;
681 cr_206 = 0x30;
682 }
683 break;
684
685 case RF_VT3226:
686 case RF_VT3226D0:
687 if (scanning) {
688 ed_inx = 0;
689 cr_206 = 0x24;
690 break;
691 }
692
693 if (priv->bb_pre_ed_rssi <= 41) {
694 ed_inx = 22;
695 cr_201 = 0xff;
696 } else if (priv->bb_pre_ed_rssi <= 42) {
697 ed_inx = 21;
698 cr_201 = 0x36;
699 } else if (priv->bb_pre_ed_rssi <= 43) {
700 ed_inx = 20;
701 cr_201 = 0x26;
702 } else if (priv->bb_pre_ed_rssi <= 45) {
703 ed_inx = 19;
704 cr_201 = 0x18;
705 } else if (priv->bb_pre_ed_rssi <= 47) {
706 ed_inx = 18;
707 cr_201 = 0x11;
708 } else if (priv->bb_pre_ed_rssi <= 49) {
709 ed_inx = 17;
710 cr_201 = 0xa;
711 } else if (priv->bb_pre_ed_rssi <= 51) {
712 ed_inx = 16;
713 cr_201 = 0x7;
714 } else if (priv->bb_pre_ed_rssi <= 53) {
715 ed_inx = 15;
716 cr_201 = 0x4;
717 } else if (priv->bb_pre_ed_rssi <= 55) {
718 ed_inx = 14;
719 cr_201 = 0x2;
720 cr_206 = 0xc0;
721 } else if (priv->bb_pre_ed_rssi <= 56) {
722 ed_inx = 13;
723 cr_201 = 0x2;
724 cr_206 = 0x30;
725 } else if (priv->bb_pre_ed_rssi <= 57) {
726 ed_inx = 12;
727 cr_201 = 0x1;
728 cr_206 = 0xb0;
729 } else if (priv->bb_pre_ed_rssi <= 58) {
730 ed_inx = 11;
731 cr_201 = 0x1;
732 cr_206 = 0x70;
733 } else if (priv->bb_pre_ed_rssi <= 59) {
734 ed_inx = 10;
735 cr_201 = 0x1;
736 cr_206 = 0x30;
737 } else if (priv->bb_pre_ed_rssi <= 60) {
738 ed_inx = 9;
739 cr_206 = 0xea;
740 } else if (priv->bb_pre_ed_rssi <= 61) {
741 ed_inx = 8;
742 cr_206 = 0xc0;
743 } else if (priv->bb_pre_ed_rssi <= 62) {
744 ed_inx = 7;
745 cr_206 = 0x9c;
746 } else if (priv->bb_pre_ed_rssi <= 63) {
747 ed_inx = 6;
748 cr_206 = 0x80;
749 } else if (priv->bb_pre_ed_rssi <= 64) {
750 ed_inx = 5;
751 cr_206 = 0x68;
752 } else if (priv->bb_pre_ed_rssi <= 65) {
753 ed_inx = 4;
754 cr_206 = 0x52;
755 } else if (priv->bb_pre_ed_rssi <= 66) {
756 ed_inx = 3;
757 cr_206 = 0x43;
758 } else if (priv->bb_pre_ed_rssi <= 67) {
759 ed_inx = 2;
760 cr_206 = 0x36;
761 } else if (priv->bb_pre_ed_rssi <= 68) {
762 ed_inx = 1;
763 cr_206 = 0x2d;
764 } else {
765 ed_inx = 0;
766 cr_206 = 0x24;
767 }
768 break;
769
770 case RF_VT3342A0:
771 if (scanning) {
772 ed_inx = 0;
773 cr_206 = 0x38;
774 break;
775 }
776
777 if (priv->bb_pre_ed_rssi <= 41) {
778 ed_inx = 20;
779 cr_201 = 0xff;
780 } else if (priv->bb_pre_ed_rssi <= 42) {
781 ed_inx = 19;
782 cr_201 = 0x36;
783 } else if (priv->bb_pre_ed_rssi <= 43) {
784 ed_inx = 18;
785 cr_201 = 0x26;
786 } else if (priv->bb_pre_ed_rssi <= 45) {
787 ed_inx = 17;
788 cr_201 = 0x18;
789 } else if (priv->bb_pre_ed_rssi <= 47) {
790 ed_inx = 16;
791 cr_201 = 0x11;
792 } else if (priv->bb_pre_ed_rssi <= 49) {
793 ed_inx = 15;
794 cr_201 = 0xa;
795 } else if (priv->bb_pre_ed_rssi <= 51) {
796 ed_inx = 14;
797 cr_201 = 0x7;
798 } else if (priv->bb_pre_ed_rssi <= 53) {
799 ed_inx = 13;
800 cr_201 = 0x4;
801 } else if (priv->bb_pre_ed_rssi <= 55) {
802 ed_inx = 12;
803 cr_201 = 0x2;
804 cr_206 = 0xc0;
805 } else if (priv->bb_pre_ed_rssi <= 56) {
806 ed_inx = 11;
807 cr_201 = 0x2;
808 cr_206 = 0x30;
809 } else if (priv->bb_pre_ed_rssi <= 57) {
810 ed_inx = 10;
811 cr_201 = 0x1;
812 cr_206 = 0xb0;
813 } else if (priv->bb_pre_ed_rssi <= 58) {
814 ed_inx = 9;
815 cr_201 = 0x1;
816 cr_206 = 0x70;
817 } else if (priv->bb_pre_ed_rssi <= 59) {
818 ed_inx = 8;
819 cr_201 = 0x1;
820 cr_206 = 0x30;
821 } else if (priv->bb_pre_ed_rssi <= 60) {
822 ed_inx = 7;
823 cr_206 = 0xea;
824 } else if (priv->bb_pre_ed_rssi <= 61) {
825 ed_inx = 6;
826 cr_206 = 0xc0;
827 } else if (priv->bb_pre_ed_rssi <= 62) {
828 ed_inx = 5;
829 cr_206 = 0x9c;
830 } else if (priv->bb_pre_ed_rssi <= 63) {
831 ed_inx = 4;
832 cr_206 = 0x80;
833 } else if (priv->bb_pre_ed_rssi <= 64) {
834 ed_inx = 3;
835 cr_206 = 0x68;
836 } else if (priv->bb_pre_ed_rssi <= 65) {
837 ed_inx = 2;
838 cr_206 = 0x52;
839 } else if (priv->bb_pre_ed_rssi <= 66) {
840 ed_inx = 1;
841 cr_206 = 0x43;
842 } else {
843 ed_inx = 0;
844 cr_206 = 0x38;
845 }
846 break;
847 }
848
849 if (ed_inx == priv->bb_pre_ed_index && !scanning)
850 return;
851
852 priv->bb_pre_ed_index = ed_inx;
853
854 dev_dbg(&priv->usb->dev, "%s bb_pre_ed_rssi %d\n",
855 __func__, priv->bb_pre_ed_rssi);
856
857 if (!cr_201 && !cr_206)
858 return;
859
860 vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xc9, cr_201);
861 vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xce, cr_206);
862 }
863