x86/xen: resume timer irqs early
[linux/fpc-iii.git] / drivers / staging / vt6656 / baseband.c
blob22e117440f946594152fd301498396077e54f210
1 /*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 * File: baseband.c
22 * Purpose: Implement functions to access baseband
24 * Author: Jerry Chen
26 * Date: Jun. 5, 2002
28 * Functions:
29 * BBuGetFrameTime - Calculate data frame transmitting time
30 * BBvCalculateParameter - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31 * BBbVT3184Init - VIA VT3184 baseband chip init code
33 * Revision History:
38 #include "tmacro.h"
39 #include "tether.h"
40 #include "mac.h"
41 #include "baseband.h"
42 #include "rf.h"
43 #include "srom.h"
44 #include "control.h"
45 #include "datarate.h"
46 #include "rndis.h"
48 static int msglevel =MSG_LEVEL_INFO;
49 //static int msglevel =MSG_LEVEL_DEBUG;
51 u8 abyVT3184_AGC[] = {
52 0x00, //0
53 0x00, //1
54 0x02, //2
55 0x02, //3 //RobertYu:20060505, 0x04, //3
56 0x04, //4
57 0x04, //5 //RobertYu:20060505, 0x06, //5
58 0x06, //6
59 0x06, //7
60 0x08, //8
61 0x08, //9
62 0x0A, //A
63 0x0A, //B
64 0x0C, //C
65 0x0C, //D
66 0x0E, //E
67 0x0E, //F
68 0x10, //10
69 0x10, //11
70 0x12, //12
71 0x12, //13
72 0x14, //14
73 0x14, //15
74 0x16, //16
75 0x16, //17
76 0x18, //18
77 0x18, //19
78 0x1A, //1A
79 0x1A, //1B
80 0x1C, //1C
81 0x1C, //1D
82 0x1E, //1E
83 0x1E, //1F
84 0x20, //20
85 0x20, //21
86 0x22, //22
87 0x22, //23
88 0x24, //24
89 0x24, //25
90 0x26, //26
91 0x26, //27
92 0x28, //28
93 0x28, //29
94 0x2A, //2A
95 0x2A, //2B
96 0x2C, //2C
97 0x2C, //2D
98 0x2E, //2E
99 0x2E, //2F
100 0x30, //30
101 0x30, //31
102 0x32, //32
103 0x32, //33
104 0x34, //34
105 0x34, //35
106 0x36, //36
107 0x36, //37
108 0x38, //38
109 0x38, //39
110 0x3A, //3A
111 0x3A, //3B
112 0x3C, //3C
113 0x3C, //3D
114 0x3E, //3E
115 0x3E //3F
118 u8 abyVT3184_AL2230[] = {
119 0x31,//00
120 0x00,
121 0x00,
122 0x00,
123 0x00,
124 0x80,
125 0x00,
126 0x00,
127 0x70,
128 0x45,//tx //0x64 for FPGA
129 0x2A,
130 0x76,
131 0x00,
132 0x00,
133 0x80,
134 0x00,
135 0x00,//10
136 0x00,
137 0x00,
138 0x00,
139 0x00,
140 0x00,
141 0x00,
142 0x00,
143 0x00,
144 0x00,
145 0x00,
146 0x8e, //RobertYu:20060522, //0x8d,
147 0x0a, //RobertYu:20060515, //0x09,
148 0x00,
149 0x00,
150 0x00,
151 0x00,//20
152 0x00,
153 0x00,
154 0x00,
155 0x00,
156 0x4a,
157 0x00,
158 0x00,
159 0x00,
160 0x00,
161 0x00,
162 0x00,
163 0x00,
164 0x4a,
165 0x00,
166 0x0c, //RobertYu:20060522, //0x10,
167 0x26,//30
168 0x5b,
169 0x00,
170 0x00,
171 0x00,
172 0x00,
173 0xaa,
174 0xaa,
175 0xff,
176 0xff,
177 0x79,
178 0x00,
179 0x00,
180 0x0b,
181 0x48,
182 0x04,
183 0x00,//40
184 0x08,
185 0x00,
186 0x08,
187 0x08,
188 0x14,
189 0x05,
190 0x09,
191 0x00,
192 0x00,
193 0x00,
194 0x00,
195 0x09,
196 0x73,
197 0x00,
198 0xc5,
199 0x00,//50 //RobertYu:20060505, //0x15,//50
200 0x19,
201 0x00,
202 0x00,
203 0x00,
204 0x00,
205 0x00,
206 0x00,
207 0x00,
208 0xd0, //RobertYu:20060505, //0xb0,
209 0x00,
210 0x00,
211 0x00,
212 0x00,
213 0x00,
214 0x00,
215 0xe4,//60
216 0x80,
217 0x00,
218 0x00,
219 0x00,
220 0x00,
221 0x98,
222 0x0a,
223 0x00,
224 0x00,
225 0x00,
226 0x00,
227 0x00, //0x80 for FPGA
228 0x03,
229 0x01,
230 0x00,
231 0x00,//70
232 0x00,
233 0x00,
234 0x00,
235 0x00,
236 0x00,
237 0x00,
238 0x00,
239 0x00,
240 0x00,
241 0x00,
242 0x00,
243 0x00,
244 0x00,
245 0x00,
246 0x00,
247 0x8c,//80
248 0x01,
249 0x09,
250 0x00,
251 0x00,
252 0x00,
253 0x00,
254 0x00,
255 0x08,
256 0x00,
257 0x1f, //RobertYu:20060516, //0x0f,
258 0xb7,
259 0x88,
260 0x47,
261 0xaa,
262 0x00, //RobertYu:20060505, //0x02,
263 0x20,//90 //RobertYu:20060505, //0x22,//90
264 0x00,
265 0x00,
266 0x00,
267 0x00,
268 0x00,
269 0x00,
270 0xeb,
271 0x00,
272 0x00,
273 0x00,
274 0x00,
275 0x00,
276 0x00,
277 0x00,
278 0x01,
279 0x00,//a0
280 0x00,
281 0x00,
282 0x00,
283 0x00,
284 0x00,
285 0x10,
286 0x00,
287 0x18,
288 0x00,
289 0x00,
290 0x00,
291 0x00,
292 0x15, //RobertYu:20060516, //0x00,
293 0x00,
294 0x18,
295 0x38,//b0
296 0x30,
297 0x00,
298 0x00,
299 0xff,
300 0x0f,
301 0xe4,
302 0xe2,
303 0x00,
304 0x00,
305 0x00,
306 0x03,
307 0x01,
308 0x00,
309 0x00,
310 0x00,
311 0x18,//c0
312 0x20,
313 0x07,
314 0x18,
315 0xff,
316 0xff, //RobertYu:20060509, //0x2c,
317 0x0e, //RobertYu:20060530, //0x0c,
318 0x0a,
319 0x0e,
320 0x00, //RobertYu:20060505, //0x01,
321 0x82, //RobertYu:20060516, //0x8f,
322 0xa7,
323 0x3c,
324 0x10,
325 0x30, //RobertYu:20060627, //0x0b,
326 0x05, //RobertYu:20060516, //0x25,
327 0x40,//d0
328 0x12,
329 0x00,
330 0x00,
331 0x10,
332 0x28,
333 0x80,
334 0x2A,
335 0x00,
336 0x00,
337 0x00,
338 0x00,
339 0x00,
340 0x00,
341 0x00,
342 0x00,
343 0x00,//e0
344 0xf3, //RobertYu:20060516, //0xd3,
345 0x00,
346 0x00,
347 0x00,
348 0x10,
349 0x00,
350 0x12, //RobertYu:20060627, //0x10,
351 0x00,
352 0xf4,
353 0x00,
354 0xff,
355 0x79,
356 0x20,
357 0x30,
358 0x05, //RobertYu:20060516, //0x0c,
359 0x00,//f0
360 0x3e,
361 0x00,
362 0x00,
363 0x00,
364 0x00,
365 0x00,
366 0x00,
367 0x00,
368 0x00,
369 0x00,
370 0x00,
371 0x00,
372 0x00,
373 0x00,
374 0x00
377 //{{RobertYu:20060515, new BB setting for VT3226D0
378 u8 abyVT3184_VT3226D0[] = {
379 0x31,//00
380 0x00,
381 0x00,
382 0x00,
383 0x00,
384 0x80,
385 0x00,
386 0x00,
387 0x70,
388 0x45,//tx //0x64 for FPGA
389 0x2A,
390 0x76,
391 0x00,
392 0x00,
393 0x80,
394 0x00,
395 0x00,//10
396 0x00,
397 0x00,
398 0x00,
399 0x00,
400 0x00,
401 0x00,
402 0x00,
403 0x00,
404 0x00,
405 0x00,
406 0x8e, //RobertYu:20060525, //0x8d,
407 0x0a, //RobertYu:20060515, //0x09,
408 0x00,
409 0x00,
410 0x00,
411 0x00,//20
412 0x00,
413 0x00,
414 0x00,
415 0x00,
416 0x4a,
417 0x00,
418 0x00,
419 0x00,
420 0x00,
421 0x00,
422 0x00,
423 0x00,
424 0x4a,
425 0x00,
426 0x0c, //RobertYu:20060525, //0x10,
427 0x26,//30
428 0x5b,
429 0x00,
430 0x00,
431 0x00,
432 0x00,
433 0xaa,
434 0xaa,
435 0xff,
436 0xff,
437 0x79,
438 0x00,
439 0x00,
440 0x0b,
441 0x48,
442 0x04,
443 0x00,//40
444 0x08,
445 0x00,
446 0x08,
447 0x08,
448 0x14,
449 0x05,
450 0x09,
451 0x00,
452 0x00,
453 0x00,
454 0x00,
455 0x09,
456 0x73,
457 0x00,
458 0xc5,
459 0x00,//50 //RobertYu:20060505, //0x15,//50
460 0x19,
461 0x00,
462 0x00,
463 0x00,
464 0x00,
465 0x00,
466 0x00,
467 0x00,
468 0xd0, //RobertYu:20060505, //0xb0,
469 0x00,
470 0x00,
471 0x00,
472 0x00,
473 0x00,
474 0x00,
475 0xe4,//60
476 0x80,
477 0x00,
478 0x00,
479 0x00,
480 0x00,
481 0x98,
482 0x0a,
483 0x00,
484 0x00,
485 0x00,
486 0x00,
487 0x00, //0x80 for FPGA
488 0x03,
489 0x01,
490 0x00,
491 0x00,//70
492 0x00,
493 0x00,
494 0x00,
495 0x00,
496 0x00,
497 0x00,
498 0x00,
499 0x00,
500 0x00,
501 0x00,
502 0x00,
503 0x00,
504 0x00,
505 0x00,
506 0x00,
507 0x8c,//80
508 0x01,
509 0x09,
510 0x00,
511 0x00,
512 0x00,
513 0x00,
514 0x00,
515 0x08,
516 0x00,
517 0x1f, //RobertYu:20060515, //0x0f,
518 0xb7,
519 0x88,
520 0x47,
521 0xaa,
522 0x00, //RobertYu:20060505, //0x02,
523 0x20,//90 //RobertYu:20060505, //0x22,//90
524 0x00,
525 0x00,
526 0x00,
527 0x00,
528 0x00,
529 0x00,
530 0xeb,
531 0x00,
532 0x00,
533 0x00,
534 0x00,
535 0x00,
536 0x00,
537 0x00,
538 0x01,
539 0x00,//a0
540 0x00,
541 0x00,
542 0x00,
543 0x00,
544 0x00,
545 0x10,
546 0x00,
547 0x18,
548 0x00,
549 0x00,
550 0x00,
551 0x00,
552 0x00,
553 0x00,
554 0x18,
555 0x38,//b0
556 0x30,
557 0x00,
558 0x00,
559 0xff,
560 0x0f,
561 0xe4,
562 0xe2,
563 0x00,
564 0x00,
565 0x00,
566 0x03,
567 0x01,
568 0x00,
569 0x00,
570 0x00,
571 0x18,//c0
572 0x20,
573 0x07,
574 0x18,
575 0xff,
576 0xff, //RobertYu:20060509, //0x2c,
577 0x10, //RobertYu:20060525, //0x0c,
578 0x0a,
579 0x0e,
580 0x00, //RobertYu:20060505, //0x01,
581 0x84, //RobertYu:20060525, //0x8f,
582 0xa7,
583 0x3c,
584 0x10,
585 0x24, //RobertYu:20060627, //0x18,
586 0x05, //RobertYu:20060515, //0x25,
587 0x40,//d0
588 0x12,
589 0x00,
590 0x00,
591 0x10,
592 0x28,
593 0x80,
594 0x2A,
595 0x00,
596 0x00,
597 0x00,
598 0x00,
599 0x00,
600 0x00,
601 0x00,
602 0x00,
603 0x00,//e0
604 0xf3, //RobertYu:20060515, //0xd3,
605 0x00,
606 0x00,
607 0x00,
608 0x10,
609 0x00,
610 0x10, //RobertYu:20060627, //0x0e,
611 0x00,
612 0xf4,
613 0x00,
614 0xff,
615 0x79,
616 0x20,
617 0x30,
618 0x08, //RobertYu:20060515, //0x0c,
619 0x00,//f0
620 0x3e,
621 0x00,
622 0x00,
623 0x00,
624 0x00,
625 0x00,
626 0x00,
627 0x00,
628 0x00,
629 0x00,
630 0x00,
631 0x00,
632 0x00,
633 0x00,
634 0x00,
637 const u16 awcFrameTime[MAX_RATE] =
638 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
641 static
642 unsigned long
643 s_ulGetLowSQ3(PSDevice pDevice);
645 static
646 unsigned long
647 s_ulGetRatio(PSDevice pDevice);
649 static
650 void
651 s_vClearSQ3Value(PSDevice pDevice);
655 * Description: Calculate data frame transmitting time
657 * Parameters:
658 * In:
659 * byPreambleType - Preamble Type
660 * byPktType - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
661 * cbFrameLength - Baseband Type
662 * wRate - Tx Rate
663 * Out:
665 * Return Value: FrameTime
668 unsigned int
669 BBuGetFrameTime(
670 u8 byPreambleType,
671 u8 byPktType,
672 unsigned int cbFrameLength,
673 u16 wRate
676 unsigned int uFrameTime;
677 unsigned int uPreamble;
678 unsigned int uTmp;
679 unsigned int uRateIdx = (unsigned int)wRate;
680 unsigned int uRate = 0;
682 if (uRateIdx > RATE_54M) {
683 return 0;
686 uRate = (unsigned int)awcFrameTime[uRateIdx];
688 if (uRateIdx <= 3) { //CCK mode
690 if (byPreambleType == 1) {//Short
691 uPreamble = 96;
692 } else {
693 uPreamble = 192;
695 uFrameTime = (cbFrameLength * 80) / uRate; //?????
696 uTmp = (uFrameTime * uRate) / 80;
697 if (cbFrameLength != uTmp) {
698 uFrameTime ++;
701 return (uPreamble + uFrameTime);
703 else {
704 uFrameTime = (cbFrameLength * 8 + 22) / uRate; //????????
705 uTmp = ((uFrameTime * uRate) - 22) / 8;
706 if(cbFrameLength != uTmp) {
707 uFrameTime ++;
709 uFrameTime = uFrameTime * 4; //???????
710 if(byPktType != PK_TYPE_11A) {
711 uFrameTime += 6;
713 return (20 + uFrameTime); //??????
718 * Description: Calculate Length, Service, and Signal fields of Phy for Tx
720 * Parameters:
721 * In:
722 * pDevice - Device Structure
723 * cbFrameLength - Tx Frame Length
724 * wRate - Tx Rate
725 * Out:
726 * struct vnt_phy_field *phy
727 * - pointer to Phy Length field
728 * - pointer to Phy Service field
729 * - pointer to Phy Signal field
731 * Return Value: none
734 void BBvCalculateParameter(struct vnt_private *pDevice, u32 cbFrameLength,
735 u16 wRate, u8 byPacketType, struct vnt_phy_field *phy)
737 u32 cbBitCount;
738 u32 cbUsCount = 0;
739 u32 cbTmp;
740 int bExtBit;
741 u8 byPreambleType = pDevice->byPreambleType;
742 int bCCK = pDevice->bCCK;
744 cbBitCount = cbFrameLength * 8;
745 bExtBit = false;
747 switch (wRate) {
748 case RATE_1M :
749 cbUsCount = cbBitCount;
750 phy->signal = 0x00;
751 break;
753 case RATE_2M :
754 cbUsCount = cbBitCount / 2;
755 if (byPreambleType == 1)
756 phy->signal = 0x09;
757 else // long preamble
758 phy->signal = 0x01;
759 break;
761 case RATE_5M :
762 if (bCCK == false)
763 cbBitCount ++;
764 cbUsCount = (cbBitCount * 10) / 55;
765 cbTmp = (cbUsCount * 55) / 10;
766 if (cbTmp != cbBitCount)
767 cbUsCount ++;
768 if (byPreambleType == 1)
769 phy->signal = 0x0a;
770 else // long preamble
771 phy->signal = 0x02;
772 break;
774 case RATE_11M :
776 if (bCCK == false)
777 cbBitCount ++;
778 cbUsCount = cbBitCount / 11;
779 cbTmp = cbUsCount * 11;
780 if (cbTmp != cbBitCount) {
781 cbUsCount ++;
782 if ((cbBitCount - cbTmp) <= 3)
783 bExtBit = true;
785 if (byPreambleType == 1)
786 phy->signal = 0x0b;
787 else // long preamble
788 phy->signal = 0x03;
789 break;
791 case RATE_6M :
792 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
793 phy->signal = 0x9b;
795 else {//11g, 2.4GHZ
796 phy->signal = 0x8b;
798 break;
800 case RATE_9M :
801 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
802 phy->signal = 0x9f;
804 else {//11g, 2.4GHZ
805 phy->signal = 0x8f;
807 break;
809 case RATE_12M :
810 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
811 phy->signal = 0x9a;
813 else {//11g, 2.4GHZ
814 phy->signal = 0x8a;
816 break;
818 case RATE_18M :
819 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
820 phy->signal = 0x9e;
822 else {//11g, 2.4GHZ
823 phy->signal = 0x8e;
825 break;
827 case RATE_24M :
828 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
829 phy->signal = 0x99;
831 else {//11g, 2.4GHZ
832 phy->signal = 0x89;
834 break;
836 case RATE_36M :
837 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
838 phy->signal = 0x9d;
840 else {//11g, 2.4GHZ
841 phy->signal = 0x8d;
843 break;
845 case RATE_48M :
846 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
847 phy->signal = 0x98;
849 else {//11g, 2.4GHZ
850 phy->signal = 0x88;
852 break;
854 case RATE_54M :
855 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
856 phy->signal = 0x9c;
858 else {//11g, 2.4GHZ
859 phy->signal = 0x8c;
861 break;
863 default :
864 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
865 phy->signal = 0x9c;
867 else {//11g, 2.4GHZ
868 phy->signal = 0x8c;
870 break;
873 if (byPacketType == PK_TYPE_11B) {
874 phy->service = 0x00;
875 if (bExtBit)
876 phy->service |= 0x80;
877 phy->len = cpu_to_le16((u16)cbUsCount);
878 } else {
879 phy->service = 0x00;
880 phy->len = cpu_to_le16((u16)cbFrameLength);
885 * Description: Set Antenna mode
887 * Parameters:
888 * In:
889 * pDevice - Device Structure
890 * byAntennaMode - Antenna Mode
891 * Out:
892 * none
894 * Return Value: none
897 void BBvSetAntennaMode(struct vnt_private *pDevice, u8 byAntennaMode)
899 switch (byAntennaMode) {
900 case ANT_TXA:
901 case ANT_TXB:
902 break;
903 case ANT_RXA:
904 pDevice->byBBRxConf &= 0xFC;
905 break;
906 case ANT_RXB:
907 pDevice->byBBRxConf &= 0xFE;
908 pDevice->byBBRxConf |= 0x02;
909 break;
912 CONTROLnsRequestOut(pDevice,
913 MESSAGE_TYPE_SET_ANTMD,
914 (u16) byAntennaMode,
917 NULL);
921 * Description: Set Antenna mode
923 * Parameters:
924 * In:
925 * pDevice - Device Structure
926 * byAntennaMode - Antenna Mode
927 * Out:
928 * none
930 * Return Value: none
934 int BBbVT3184Init(struct vnt_private *pDevice)
936 int ntStatus;
937 u16 wLength;
938 u8 * pbyAddr;
939 u8 * pbyAgc;
940 u16 wLengthAgc;
941 u8 abyArray[256];
942 u8 data;
944 ntStatus = CONTROLnsRequestIn(pDevice,
945 MESSAGE_TYPE_READ,
947 MESSAGE_REQUEST_EEPROM,
948 EEP_MAX_CONTEXT_SIZE,
949 pDevice->abyEEPROM);
950 if (ntStatus != STATUS_SUCCESS) {
951 return false;
954 // if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
955 // return false;
957 //zonetype initial
958 pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
959 if(pDevice->config_file.ZoneType >= 0) { //read zonetype file ok!
960 if ((pDevice->config_file.ZoneType == 0)&&
961 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){ //for USA
962 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
963 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
964 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
966 else if((pDevice->config_file.ZoneType == 1)&&
967 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){ //for Japan
968 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
969 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
970 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
972 else if((pDevice->config_file.ZoneType == 2)&&
973 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){ //for Europe
974 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
975 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
976 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
978 else {
979 if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
980 printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
981 else
982 printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
986 if ( !pDevice->bZoneRegExist ) {
987 pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
989 pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
991 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
992 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
994 if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
995 pDevice->byBBRxConf = abyVT3184_AL2230[10];
996 wLength = sizeof(abyVT3184_AL2230);
997 pbyAddr = abyVT3184_AL2230;
998 pbyAgc = abyVT3184_AGC;
999 wLengthAgc = sizeof(abyVT3184_AGC);
1001 pDevice->abyBBVGA[0] = 0x1C;
1002 pDevice->abyBBVGA[1] = 0x10;
1003 pDevice->abyBBVGA[2] = 0x0;
1004 pDevice->abyBBVGA[3] = 0x0;
1005 pDevice->ldBmThreshold[0] = -70;
1006 pDevice->ldBmThreshold[1] = -48;
1007 pDevice->ldBmThreshold[2] = 0;
1008 pDevice->ldBmThreshold[3] = 0;
1010 else if (pDevice->byRFType == RF_AIROHA7230) {
1011 pDevice->byBBRxConf = abyVT3184_AL2230[10];
1012 wLength = sizeof(abyVT3184_AL2230);
1013 pbyAddr = abyVT3184_AL2230;
1014 pbyAgc = abyVT3184_AGC;
1015 wLengthAgc = sizeof(abyVT3184_AGC);
1017 // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1018 //pbyAddr[0x09] = 0x41;
1019 // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1020 //pbyAddr[0x0a] = 0x28;
1021 // Select VC1/VC2, CR215 = 0x02->0x06
1022 pbyAddr[0xd7] = 0x06;
1024 pDevice->abyBBVGA[0] = 0x1C;
1025 pDevice->abyBBVGA[1] = 0x10;
1026 pDevice->abyBBVGA[2] = 0x0;
1027 pDevice->abyBBVGA[3] = 0x0;
1028 pDevice->ldBmThreshold[0] = -70;
1029 pDevice->ldBmThreshold[1] = -48;
1030 pDevice->ldBmThreshold[2] = 0;
1031 pDevice->ldBmThreshold[3] = 0;
1033 else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1034 pDevice->byBBRxConf = abyVT3184_VT3226D0[10]; //RobertYu:20060515
1035 wLength = sizeof(abyVT3184_VT3226D0); //RobertYu:20060515
1036 pbyAddr = abyVT3184_VT3226D0; //RobertYu:20060515
1037 pbyAgc = abyVT3184_AGC;
1038 wLengthAgc = sizeof(abyVT3184_AGC);
1040 pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1041 pDevice->abyBBVGA[1] = 0x10;
1042 pDevice->abyBBVGA[2] = 0x0;
1043 pDevice->abyBBVGA[3] = 0x0;
1044 pDevice->ldBmThreshold[0] = -70;
1045 pDevice->ldBmThreshold[1] = -48;
1046 pDevice->ldBmThreshold[2] = 0;
1047 pDevice->ldBmThreshold[3] = 0;
1048 // Fix VT3226 DFC system timing issue
1049 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1050 //}}
1051 //{{RobertYu:20060609
1052 } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1053 pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1054 wLength = sizeof(abyVT3184_VT3226D0);
1055 pbyAddr = abyVT3184_VT3226D0;
1056 pbyAgc = abyVT3184_AGC;
1057 wLengthAgc = sizeof(abyVT3184_AGC);
1059 pDevice->abyBBVGA[0] = 0x20;
1060 pDevice->abyBBVGA[1] = 0x10;
1061 pDevice->abyBBVGA[2] = 0x0;
1062 pDevice->abyBBVGA[3] = 0x0;
1063 pDevice->ldBmThreshold[0] = -70;
1064 pDevice->ldBmThreshold[1] = -48;
1065 pDevice->ldBmThreshold[2] = 0;
1066 pDevice->ldBmThreshold[3] = 0;
1067 // Fix VT3226 DFC system timing issue
1068 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1069 //}}
1070 } else {
1071 return true;
1074 memcpy(abyArray, pbyAddr, wLength);
1075 CONTROLnsRequestOut(pDevice,
1076 MESSAGE_TYPE_WRITE,
1078 MESSAGE_REQUEST_BBREG,
1079 wLength,
1080 abyArray
1083 memcpy(abyArray, pbyAgc, wLengthAgc);
1084 CONTROLnsRequestOut(pDevice,
1085 MESSAGE_TYPE_WRITE,
1087 MESSAGE_REQUEST_BBAGC,
1088 wLengthAgc,
1089 abyArray
1092 if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1093 (pDevice->byRFType == RF_VT3342A0) //RobertYu:20060609
1095 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1096 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1098 else if (pDevice->byRFType == RF_VT3226D0)
1100 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1101 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1104 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1105 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1107 RFbRFTableDownload(pDevice);
1109 /* Fix for TX USB resets from vendors driver */
1110 CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
1111 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1113 data |= 0x2;
1115 CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
1116 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1118 return true;//ntStatus;
1122 * Description: Set ShortSlotTime mode
1124 * Parameters:
1125 * In:
1126 * pDevice - Device Structure
1127 * Out:
1128 * none
1130 * Return Value: none
1133 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1135 u8 byBBVGA=0;
1137 if (pDevice->bShortSlotTime)
1138 pDevice->byBBRxConf &= 0xDF;//1101 1111
1139 else
1140 pDevice->byBBRxConf |= 0x20;//0010 0000
1142 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1143 if (byBBVGA == pDevice->abyBBVGA[0])
1144 pDevice->byBBRxConf |= 0x20;//0010 0000
1146 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1149 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1152 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1154 // patch for 3253B0 Baseband with Cardbus module
1155 if (pDevice->bShortSlotTime)
1156 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1157 else
1158 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1160 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1164 * Description: BBvSetDeepSleep
1166 * Parameters:
1167 * In:
1168 * pDevice - Device Structure
1169 * Out:
1170 * none
1172 * Return Value: none
1175 void BBvSetDeepSleep(struct vnt_private *pDevice)
1177 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1178 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1181 void BBvExitDeepSleep(struct vnt_private *pDevice)
1183 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1184 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1187 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1189 int ii;
1190 unsigned long ulSQ3 = 0;
1191 unsigned long ulMaxPacket;
1193 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1194 if (pDevice->aulPktNum[RATE_54M] != 0)
1195 ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1197 for (ii = RATE_48M; ii >= RATE_6M; ii--)
1198 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1199 ulMaxPacket = pDevice->aulPktNum[ii];
1200 ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1203 return ulSQ3;
1206 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1208 int ii, jj;
1209 unsigned long ulRatio = 0;
1210 unsigned long ulMaxPacket;
1211 unsigned long ulPacketNum;
1213 //This is a thousand-ratio
1214 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1215 if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1216 ulPacketNum = pDevice->aulPktNum[RATE_54M];
1217 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1218 ulRatio += TOP_RATE_54M;
1220 for (ii = RATE_48M; ii >= RATE_1M; ii--)
1221 if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1222 ulPacketNum = 0;
1223 for ( jj=RATE_54M;jj>=ii;jj--)
1224 ulPacketNum += pDevice->aulPktNum[jj];
1225 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1226 ulRatio += TOP_RATE_48M;
1227 ulMaxPacket = pDevice->aulPktNum[ii];
1230 return ulRatio;
1233 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1235 int ii;
1236 pDevice->uDiversityCnt = 0;
1238 for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1239 pDevice->aulPktNum[ii] = 0;
1240 pDevice->aulSQ3Val[ii] = 0;
1245 * Description: Antenna Diversity
1247 * Parameters:
1248 * In:
1249 * pDevice - Device Structure
1250 * byRSR - RSR from received packet
1251 * bySQ3 - SQ3 value from received packet
1252 * Out:
1253 * none
1255 * Return Value: none
1259 void BBvAntennaDiversity(struct vnt_private *pDevice,
1260 u8 byRxRate, u8 bySQ3)
1263 pDevice->uDiversityCnt++;
1264 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1266 if (byRxRate == 2) {
1267 pDevice->aulPktNum[RATE_1M]++;
1269 else if (byRxRate==4) {
1270 pDevice->aulPktNum[RATE_2M]++;
1272 else if (byRxRate==11) {
1273 pDevice->aulPktNum[RATE_5M]++;
1275 else if (byRxRate==22) {
1276 pDevice->aulPktNum[RATE_11M]++;
1278 else if(byRxRate==12){
1279 pDevice->aulPktNum[RATE_6M]++;
1280 pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1282 else if(byRxRate==18){
1283 pDevice->aulPktNum[RATE_9M]++;
1284 pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1286 else if(byRxRate==24){
1287 pDevice->aulPktNum[RATE_12M]++;
1288 pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1290 else if(byRxRate==36){
1291 pDevice->aulPktNum[RATE_18M]++;
1292 pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1294 else if(byRxRate==48){
1295 pDevice->aulPktNum[RATE_24M]++;
1296 pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1298 else if(byRxRate==72){
1299 pDevice->aulPktNum[RATE_36M]++;
1300 pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1302 else if(byRxRate==96){
1303 pDevice->aulPktNum[RATE_48M]++;
1304 pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1306 else if(byRxRate==108){
1307 pDevice->aulPktNum[RATE_54M]++;
1308 pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1311 if (pDevice->byAntennaState == 0) {
1313 if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1314 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1316 pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1317 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1318 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1320 if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1321 (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1322 (pDevice->ulSQ3_State0 == 0 ) ) {
1324 if ( pDevice->byTMax == 0 )
1325 return;
1327 bScheduleCommand((void *) pDevice,
1328 WLAN_CMD_CHANGE_ANTENNA,
1329 NULL);
1331 pDevice->byAntennaState = 1;
1333 del_timer(&pDevice->TimerSQ3Tmax3);
1334 del_timer(&pDevice->TimerSQ3Tmax2);
1335 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1336 add_timer(&pDevice->TimerSQ3Tmax1);
1338 } else {
1339 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1340 add_timer(&pDevice->TimerSQ3Tmax3);
1342 s_vClearSQ3Value(pDevice);
1345 } else { //byAntennaState == 1
1347 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1349 del_timer(&pDevice->TimerSQ3Tmax1);
1350 pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1351 pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1352 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1354 if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1355 ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1356 ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1359 bScheduleCommand((void *) pDevice,
1360 WLAN_CMD_CHANGE_ANTENNA,
1361 NULL);
1363 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1364 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1365 add_timer(&pDevice->TimerSQ3Tmax3);
1366 add_timer(&pDevice->TimerSQ3Tmax2);
1369 pDevice->byAntennaState = 0;
1370 s_vClearSQ3Value(pDevice);
1372 } //byAntennaState
1377 * Description:
1378 * Timer for SQ3 antenna diversity
1380 * Parameters:
1381 * In:
1382 * pvSysSpec1
1383 * hDeviceContext - Pointer to the adapter
1384 * pvSysSpec2
1385 * pvSysSpec3
1386 * Out:
1387 * none
1389 * Return Value: none
1393 void TimerSQ3CallBack(struct vnt_private *pDevice)
1396 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1397 spin_lock_irq(&pDevice->lock);
1399 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1400 pDevice->byAntennaState = 0;
1401 s_vClearSQ3Value(pDevice);
1402 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1403 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1404 add_timer(&pDevice->TimerSQ3Tmax3);
1405 add_timer(&pDevice->TimerSQ3Tmax2);
1407 spin_unlock_irq(&pDevice->lock);
1412 * Description:
1413 * Timer for SQ3 antenna diversity
1415 * Parameters:
1416 * In:
1417 * pvSysSpec1
1418 * hDeviceContext - Pointer to the adapter
1419 * pvSysSpec2
1420 * pvSysSpec3
1421 * Out:
1422 * none
1424 * Return Value: none
1428 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1431 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1432 spin_lock_irq(&pDevice->lock);
1434 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1435 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1437 s_vClearSQ3Value(pDevice);
1438 if ( pDevice->byTMax == 0 ) {
1439 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1440 add_timer(&pDevice->TimerSQ3Tmax3);
1441 spin_unlock_irq(&pDevice->lock);
1442 return;
1445 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1446 pDevice->byAntennaState = 1;
1447 del_timer(&pDevice->TimerSQ3Tmax3);
1448 del_timer(&pDevice->TimerSQ3Tmax2);
1449 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1450 add_timer(&pDevice->TimerSQ3Tmax1);
1452 spin_unlock_irq(&pDevice->lock);
1455 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1458 switch(pDevice->byRFType)
1460 case RF_AL2230:
1461 case RF_AL2230S:
1462 case RF_AIROHA7230:
1463 //RobertYu:20060627, update new table
1465 if( bScanning )
1466 { // need Max sensitivity //RSSI -69, -70,....
1467 pDevice->byBBPreEDIndex = 0;
1468 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1469 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1470 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1471 break;
1474 if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1475 if(pDevice->byBBPreEDIndex == 20) break;
1476 pDevice->byBBPreEDIndex = 20;
1477 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1478 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1479 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1480 } else if(pDevice->byBBPreEDRSSI <= 46) { //RSSI -46
1481 if(pDevice->byBBPreEDIndex == 19) break;
1482 pDevice->byBBPreEDIndex = 19;
1483 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1484 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1485 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46\n");
1486 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -47
1487 if(pDevice->byBBPreEDIndex == 18) break;
1488 pDevice->byBBPreEDIndex = 18;
1489 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1490 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1491 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -47\n");
1492 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1493 if(pDevice->byBBPreEDIndex == 17) break;
1494 pDevice->byBBPreEDIndex = 17;
1495 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1496 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1497 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1498 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1499 if(pDevice->byBBPreEDIndex == 16) break;
1500 pDevice->byBBPreEDIndex = 16;
1501 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1502 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1503 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1504 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1505 if(pDevice->byBBPreEDIndex == 15) break;
1506 pDevice->byBBPreEDIndex = 15;
1507 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1508 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1509 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1510 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1511 if(pDevice->byBBPreEDIndex == 14) break;
1512 pDevice->byBBPreEDIndex = 14;
1513 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1514 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1515 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1516 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1517 if(pDevice->byBBPreEDIndex == 13) break;
1518 pDevice->byBBPreEDIndex = 13;
1519 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1520 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1521 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1522 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1523 if(pDevice->byBBPreEDIndex == 12) break;
1524 pDevice->byBBPreEDIndex = 12;
1525 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1526 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1527 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1528 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1529 if(pDevice->byBBPreEDIndex == 11) break;
1530 pDevice->byBBPreEDIndex = 11;
1531 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1532 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1533 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1534 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1535 if(pDevice->byBBPreEDIndex == 10) break;
1536 pDevice->byBBPreEDIndex = 10;
1537 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1538 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1539 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1540 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1541 if(pDevice->byBBPreEDIndex == 9) break;
1542 pDevice->byBBPreEDIndex = 9;
1543 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1544 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1545 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1546 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1547 if(pDevice->byBBPreEDIndex == 8) break;
1548 pDevice->byBBPreEDIndex = 8;
1549 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1550 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1551 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1552 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1553 if(pDevice->byBBPreEDIndex == 7) break;
1554 pDevice->byBBPreEDIndex = 7;
1555 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1556 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1557 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1558 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1559 if(pDevice->byBBPreEDIndex == 6) break;
1560 pDevice->byBBPreEDIndex = 6;
1561 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1562 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1563 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1564 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1565 if(pDevice->byBBPreEDIndex == 5) break;
1566 pDevice->byBBPreEDIndex = 5;
1567 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1568 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1569 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1570 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1571 if(pDevice->byBBPreEDIndex == 4) break;
1572 pDevice->byBBPreEDIndex = 4;
1573 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1574 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1575 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1576 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1577 if(pDevice->byBBPreEDIndex == 3) break;
1578 pDevice->byBBPreEDIndex = 3;
1579 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1580 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1581 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1582 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1583 if(pDevice->byBBPreEDIndex == 2) break;
1584 pDevice->byBBPreEDIndex = 2;
1585 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1586 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1587 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1588 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1589 if(pDevice->byBBPreEDIndex == 1) break;
1590 pDevice->byBBPreEDIndex = 1;
1591 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1592 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1593 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1594 } else { //RSSI -69, -70,....
1595 if(pDevice->byBBPreEDIndex == 0) break;
1596 pDevice->byBBPreEDIndex = 0;
1597 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1598 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1599 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,...\n");
1601 break;
1603 case RF_VT3226:
1604 case RF_VT3226D0:
1605 //RobertYu:20060627, update new table
1607 if( bScanning )
1608 { // need Max sensitivity //RSSI -69, -70, ...
1609 pDevice->byBBPreEDIndex = 0;
1610 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1611 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1612 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1613 break;
1616 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1617 if(pDevice->byBBPreEDIndex == 22) break;
1618 pDevice->byBBPreEDIndex = 22;
1619 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1620 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1621 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1622 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1623 if(pDevice->byBBPreEDIndex == 21) break;
1624 pDevice->byBBPreEDIndex = 21;
1625 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1626 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1627 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1628 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1629 if(pDevice->byBBPreEDIndex == 20) break;
1630 pDevice->byBBPreEDIndex = 20;
1631 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1632 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1633 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1634 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1635 if(pDevice->byBBPreEDIndex == 19) break;
1636 pDevice->byBBPreEDIndex = 19;
1637 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1638 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1639 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1640 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1641 if(pDevice->byBBPreEDIndex == 18) break;
1642 pDevice->byBBPreEDIndex = 18;
1643 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1644 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1645 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1646 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1647 if(pDevice->byBBPreEDIndex == 17) break;
1648 pDevice->byBBPreEDIndex = 17;
1649 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1650 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1651 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1652 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1653 if(pDevice->byBBPreEDIndex == 16) break;
1654 pDevice->byBBPreEDIndex = 16;
1655 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1656 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1657 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1658 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1659 if(pDevice->byBBPreEDIndex == 15) break;
1660 pDevice->byBBPreEDIndex = 15;
1661 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1662 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1663 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1664 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1665 if(pDevice->byBBPreEDIndex == 14) break;
1666 pDevice->byBBPreEDIndex = 14;
1667 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1668 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1669 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1670 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1671 if(pDevice->byBBPreEDIndex == 13) break;
1672 pDevice->byBBPreEDIndex = 13;
1673 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1674 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1675 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1676 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1677 if(pDevice->byBBPreEDIndex == 12) break;
1678 pDevice->byBBPreEDIndex = 12;
1679 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1680 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1681 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1682 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1683 if(pDevice->byBBPreEDIndex == 11) break;
1684 pDevice->byBBPreEDIndex = 11;
1685 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1686 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1687 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1688 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1689 if(pDevice->byBBPreEDIndex == 10) break;
1690 pDevice->byBBPreEDIndex = 10;
1691 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1692 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1693 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1694 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1695 if(pDevice->byBBPreEDIndex == 9) break;
1696 pDevice->byBBPreEDIndex = 9;
1697 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1698 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1699 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1700 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1701 if(pDevice->byBBPreEDIndex == 8) break;
1702 pDevice->byBBPreEDIndex = 8;
1703 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1704 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1705 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1706 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1707 if(pDevice->byBBPreEDIndex == 7) break;
1708 pDevice->byBBPreEDIndex = 7;
1709 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1710 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1711 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1712 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1713 if(pDevice->byBBPreEDIndex == 6) break;
1714 pDevice->byBBPreEDIndex = 6;
1715 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1716 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1717 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1718 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1719 if(pDevice->byBBPreEDIndex == 5) break;
1720 pDevice->byBBPreEDIndex = 5;
1721 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1722 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1723 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1724 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1725 if(pDevice->byBBPreEDIndex == 4) break;
1726 pDevice->byBBPreEDIndex = 4;
1727 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1728 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1729 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1730 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1731 if(pDevice->byBBPreEDIndex == 3) break;
1732 pDevice->byBBPreEDIndex = 3;
1733 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1734 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1735 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1736 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1737 if(pDevice->byBBPreEDIndex == 2) break;
1738 pDevice->byBBPreEDIndex = 2;
1739 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1740 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1741 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1742 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1743 if(pDevice->byBBPreEDIndex == 1) break;
1744 pDevice->byBBPreEDIndex = 1;
1745 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1746 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1747 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1748 } else { //RSSI -69, -70, ...
1749 if(pDevice->byBBPreEDIndex == 0) break;
1750 pDevice->byBBPreEDIndex = 0;
1751 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1752 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1753 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1755 break;
1757 case RF_VT3342A0: //RobertYu:20060627, testing table
1758 if( bScanning )
1759 { // need Max sensitivity //RSSI -67, -68, ...
1760 pDevice->byBBPreEDIndex = 0;
1761 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1762 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1763 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1764 break;
1767 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1768 if(pDevice->byBBPreEDIndex == 20) break;
1769 pDevice->byBBPreEDIndex = 20;
1770 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1771 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1772 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1773 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1774 if(pDevice->byBBPreEDIndex == 19) break;
1775 pDevice->byBBPreEDIndex = 19;
1776 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1777 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1778 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1779 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1780 if(pDevice->byBBPreEDIndex == 18) break;
1781 pDevice->byBBPreEDIndex = 18;
1782 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1783 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1784 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1785 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1786 if(pDevice->byBBPreEDIndex == 17) break;
1787 pDevice->byBBPreEDIndex = 17;
1788 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1789 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1790 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1791 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1792 if(pDevice->byBBPreEDIndex == 16) break;
1793 pDevice->byBBPreEDIndex = 16;
1794 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1795 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1796 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1797 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1798 if(pDevice->byBBPreEDIndex == 15) break;
1799 pDevice->byBBPreEDIndex = 15;
1800 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1801 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1802 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1803 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1804 if(pDevice->byBBPreEDIndex == 14) break;
1805 pDevice->byBBPreEDIndex = 14;
1806 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1807 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1808 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1809 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1810 if(pDevice->byBBPreEDIndex == 13) break;
1811 pDevice->byBBPreEDIndex = 13;
1812 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1813 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1814 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1815 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1816 if(pDevice->byBBPreEDIndex == 12) break;
1817 pDevice->byBBPreEDIndex = 12;
1818 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1819 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1820 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1821 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1822 if(pDevice->byBBPreEDIndex == 11) break;
1823 pDevice->byBBPreEDIndex = 11;
1824 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1825 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1826 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1827 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1828 if(pDevice->byBBPreEDIndex == 10) break;
1829 pDevice->byBBPreEDIndex = 10;
1830 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1831 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1832 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1833 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1834 if(pDevice->byBBPreEDIndex == 9) break;
1835 pDevice->byBBPreEDIndex = 9;
1836 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1837 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1838 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1839 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1840 if(pDevice->byBBPreEDIndex == 8) break;
1841 pDevice->byBBPreEDIndex = 8;
1842 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1843 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1844 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1845 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1846 if(pDevice->byBBPreEDIndex == 7) break;
1847 pDevice->byBBPreEDIndex = 7;
1848 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1849 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1850 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1851 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1852 if(pDevice->byBBPreEDIndex == 6) break;
1853 pDevice->byBBPreEDIndex = 6;
1854 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1855 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1856 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1857 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1858 if(pDevice->byBBPreEDIndex == 5) break;
1859 pDevice->byBBPreEDIndex = 5;
1860 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1861 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1862 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1863 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1864 if(pDevice->byBBPreEDIndex == 4) break;
1865 pDevice->byBBPreEDIndex = 4;
1866 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1867 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1868 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1869 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1870 if(pDevice->byBBPreEDIndex == 3) break;
1871 pDevice->byBBPreEDIndex = 3;
1872 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1873 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1874 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1875 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1876 if(pDevice->byBBPreEDIndex == 2) break;
1877 pDevice->byBBPreEDIndex = 2;
1878 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1879 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1880 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1881 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1882 if(pDevice->byBBPreEDIndex == 1) break;
1883 pDevice->byBBPreEDIndex = 1;
1884 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1885 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1886 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1887 } else { //RSSI -67, -68, ...
1888 if(pDevice->byBBPreEDIndex == 0) break;
1889 pDevice->byBBPreEDIndex = 0;
1890 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1891 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1892 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1894 break;