Merge remote-tracking branches 'asoc/fix/adsp', 'asoc/fix/arizona', 'asoc/fix/atmel...
[linux-drm-fsl-dcu.git] / drivers / staging / vt6656 / baseband.c
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
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.
9  *
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.
14  *
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.
18  *
19  *
20  * File: baseband.c
21  *
22  * Purpose: Implement functions to access baseband
23  *
24  * Author: Jerry Chen
25  *
26  * Date: Jun. 5, 2002
27  *
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
32  *
33  * Revision History:
34  *
35  *
36  */
37
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"
47
48 static int          msglevel                =MSG_LEVEL_INFO;
49 //static int          msglevel                =MSG_LEVEL_DEBUG;
50
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
116 };
117
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
375 };
376
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,
635 };
636
637 const u16 awcFrameTime[MAX_RATE] =
638 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
639
640 /*
641 static
642 unsigned long
643 s_ulGetLowSQ3(PSDevice pDevice);
644
645 static
646 unsigned long
647 s_ulGetRatio(PSDevice pDevice);
648
649 static
650 void
651 s_vClearSQ3Value(PSDevice pDevice);
652 */
653
654 /*
655  * Description: Calculate data frame transmitting time
656  *
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:
664  *
665  * Return Value: FrameTime
666  *
667  */
668 unsigned int
669 BBuGetFrameTime(
670      u8 byPreambleType,
671      u8 byPktType,
672      unsigned int cbFrameLength,
673      u16 wRate
674     )
675 {
676     unsigned int uFrameTime;
677     unsigned int uPreamble;
678     unsigned int uTmp;
679     unsigned int uRateIdx = (unsigned int)wRate;
680     unsigned int uRate = 0;
681
682     if (uRateIdx > RATE_54M) {
683         return 0;
684     }
685
686     uRate = (unsigned int)awcFrameTime[uRateIdx];
687
688     if (uRateIdx <= 3) {          //CCK mode
689
690         if (byPreambleType == 1) {//Short
691             uPreamble = 96;
692         } else {
693             uPreamble = 192;
694         }
695         uFrameTime = (cbFrameLength * 80) / uRate;  //?????
696         uTmp = (uFrameTime * uRate) / 80;
697         if (cbFrameLength != uTmp) {
698             uFrameTime ++;
699         }
700
701         return (uPreamble + uFrameTime);
702     }
703     else {
704         uFrameTime = (cbFrameLength * 8 + 22) / uRate;   //????????
705         uTmp = ((uFrameTime * uRate) - 22) / 8;
706         if(cbFrameLength != uTmp) {
707             uFrameTime ++;
708         }
709         uFrameTime = uFrameTime * 4;    //???????
710         if(byPktType != PK_TYPE_11A) {
711             uFrameTime += 6;
712         }
713         return (20 + uFrameTime); //??????
714     }
715 }
716
717 /*
718  * Description: Calculate Length, Service, and Signal fields of Phy for Tx
719  *
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
730  *
731  * Return Value: none
732  *
733  */
734 void BBvCalculateParameter(struct vnt_private *pDevice, u32 cbFrameLength,
735         u16 wRate, u8 byPacketType, struct vnt_phy_field *phy)
736 {
737         u32 cbBitCount;
738         u32 cbUsCount = 0;
739         u32 cbTmp;
740         int bExtBit;
741         u8 byPreambleType = pDevice->byPreambleType;
742         int bCCK = pDevice->bCCK;
743
744     cbBitCount = cbFrameLength * 8;
745     bExtBit = false;
746
747     switch (wRate) {
748     case RATE_1M :
749         cbUsCount = cbBitCount;
750         phy->signal = 0x00;
751         break;
752
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;
760
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;
773
774     case RATE_11M :
775
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;
784         }
785         if (byPreambleType == 1)
786                 phy->signal = 0x0b;
787         else // long preamble
788                 phy->signal = 0x03;
789         break;
790
791     case RATE_6M :
792         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
793                 phy->signal = 0x9b;
794         }
795         else {//11g, 2.4GHZ
796                 phy->signal = 0x8b;
797         }
798         break;
799
800     case RATE_9M :
801         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
802                 phy->signal = 0x9f;
803         }
804         else {//11g, 2.4GHZ
805                 phy->signal = 0x8f;
806         }
807         break;
808
809     case RATE_12M :
810         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
811                 phy->signal = 0x9a;
812         }
813         else {//11g, 2.4GHZ
814                 phy->signal = 0x8a;
815         }
816         break;
817
818     case RATE_18M :
819         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
820                 phy->signal = 0x9e;
821         }
822         else {//11g, 2.4GHZ
823                 phy->signal = 0x8e;
824         }
825         break;
826
827     case RATE_24M :
828         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
829                 phy->signal = 0x99;
830         }
831         else {//11g, 2.4GHZ
832                 phy->signal = 0x89;
833         }
834         break;
835
836     case RATE_36M :
837         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
838                 phy->signal = 0x9d;
839         }
840         else {//11g, 2.4GHZ
841                 phy->signal = 0x8d;
842         }
843         break;
844
845     case RATE_48M :
846         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
847                 phy->signal = 0x98;
848         }
849         else {//11g, 2.4GHZ
850                 phy->signal = 0x88;
851         }
852         break;
853
854     case RATE_54M :
855         if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
856                 phy->signal = 0x9c;
857         }
858         else {//11g, 2.4GHZ
859                 phy->signal = 0x8c;
860         }
861         break;
862
863     default :
864         if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
865                 phy->signal = 0x9c;
866         }
867         else {//11g, 2.4GHZ
868                 phy->signal = 0x8c;
869         }
870         break;
871     }
872
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);
881         }
882 }
883
884 /*
885  * Description: Set Antenna mode
886  *
887  * Parameters:
888  *  In:
889  *      pDevice          - Device Structure
890  *      byAntennaMode    - Antenna Mode
891  *  Out:
892  *      none
893  *
894  * Return Value: none
895  *
896  */
897 void BBvSetAntennaMode(struct vnt_private *pDevice, u8 byAntennaMode)
898 {
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;
910     }
911
912     CONTROLnsRequestOut(pDevice,
913                     MESSAGE_TYPE_SET_ANTMD,
914                     (u16) byAntennaMode,
915                     0,
916                     0,
917                     NULL);
918 }
919
920 /*
921  * Description: Set Antenna mode
922  *
923  * Parameters:
924  *  In:
925  *      pDevice          - Device Structure
926  *      byAntennaMode    - Antenna Mode
927  *  Out:
928  *      none
929  *
930  * Return Value: none
931  *
932  */
933
934 int BBbVT3184Init(struct vnt_private *pDevice)
935 {
936         int ntStatus;
937     u16                    wLength;
938     u8 *                   pbyAddr;
939     u8 *                   pbyAgc;
940     u16                    wLengthAgc;
941     u8                    abyArray[256];
942         u8 data;
943
944     ntStatus = CONTROLnsRequestIn(pDevice,
945                                   MESSAGE_TYPE_READ,
946                                   0,
947                                   MESSAGE_REQUEST_EEPROM,
948                                   EEP_MAX_CONTEXT_SIZE,
949                                   pDevice->abyEEPROM);
950     if (ntStatus != STATUS_SUCCESS) {
951         return false;
952     }
953
954 //    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
955 //        return false;
956
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");
965   }
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");
971   }
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");
977   }
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);
983  }
984 }
985
986     if ( !pDevice->bZoneRegExist ) {
987         pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
988     }
989     pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
990
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);
993
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);
1000
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;
1009     }
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);
1016
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;
1023
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;
1032     }
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);
1039
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);
1058
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;
1072     }
1073
1074    memcpy(abyArray, pbyAddr, wLength);
1075    CONTROLnsRequestOut(pDevice,
1076                     MESSAGE_TYPE_WRITE,
1077                     0,
1078                     MESSAGE_REQUEST_BBREG,
1079                     wLength,
1080                     abyArray
1081                     );
1082
1083    memcpy(abyArray, pbyAgc, wLengthAgc);
1084    CONTROLnsRequestOut(pDevice,
1085                     MESSAGE_TYPE_WRITE,
1086                     0,
1087                     MESSAGE_REQUEST_BBAGC,
1088                     wLengthAgc,
1089                     abyArray
1090                     );
1091
1092     if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1093          (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609
1094          ) {
1095         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1096         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1097     }
1098     else if (pDevice->byRFType == RF_VT3226D0)
1099     {
1100         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1101         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1102     }
1103
1104     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1105     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1106
1107     RFbRFTableDownload(pDevice);
1108
1109         /* Fix for TX USB resets from vendors driver */
1110         CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
1111                 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1112
1113         data |= 0x2;
1114
1115         CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
1116                 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1117
1118     return true;//ntStatus;
1119 }
1120
1121 /*
1122  * Description: Set ShortSlotTime mode
1123  *
1124  * Parameters:
1125  *  In:
1126  *      pDevice     - Device Structure
1127  *  Out:
1128  *      none
1129  *
1130  * Return Value: none
1131  *
1132  */
1133 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1134 {
1135     u8 byBBVGA=0;
1136
1137         if (pDevice->bShortSlotTime)
1138         pDevice->byBBRxConf &= 0xDF;//1101 1111
1139         else
1140         pDevice->byBBRxConf |= 0x20;//0010 0000
1141
1142     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1143         if (byBBVGA == pDevice->abyBBVGA[0])
1144         pDevice->byBBRxConf |= 0x20;//0010 0000
1145
1146     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1147 }
1148
1149 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1150 {
1151
1152     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1153
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 */
1159
1160     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1161 }
1162
1163 /*
1164  * Description: BBvSetDeepSleep
1165  *
1166  * Parameters:
1167  *  In:
1168  *      pDevice          - Device Structure
1169  *  Out:
1170  *      none
1171  *
1172  * Return Value: none
1173  *
1174  */
1175 void BBvSetDeepSleep(struct vnt_private *pDevice)
1176 {
1177     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1178     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1179 }
1180
1181 void BBvExitDeepSleep(struct vnt_private *pDevice)
1182 {
1183     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1184     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1185 }
1186
1187 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1188 {
1189         int ii;
1190         unsigned long ulSQ3 = 0;
1191         unsigned long ulMaxPacket;
1192
1193     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1194         if (pDevice->aulPktNum[RATE_54M] != 0)
1195         ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1196
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];
1201         }
1202
1203     return ulSQ3;
1204 }
1205
1206 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1207 {
1208         int ii, jj;
1209         unsigned long ulRatio = 0;
1210         unsigned long ulMaxPacket;
1211         unsigned long ulPacketNum;
1212
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;
1219     }
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];
1228         }
1229
1230     return ulRatio;
1231 }
1232
1233 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1234 {
1235     int ii;
1236     pDevice->uDiversityCnt = 0;
1237
1238     for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1239         pDevice->aulPktNum[ii] = 0;
1240         pDevice->aulSQ3Val[ii] = 0;
1241     }
1242 }
1243
1244 /*
1245  * Description: Antenna Diversity
1246  *
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
1254  *
1255  * Return Value: none
1256  *
1257  */
1258
1259 void BBvAntennaDiversity(struct vnt_private *pDevice,
1260         u8 byRxRate, u8 bySQ3)
1261 {
1262
1263     pDevice->uDiversityCnt++;
1264     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1265
1266     if (byRxRate == 2) {
1267         pDevice->aulPktNum[RATE_1M]++;
1268     }
1269     else if (byRxRate==4) {
1270         pDevice->aulPktNum[RATE_2M]++;
1271     }
1272     else if (byRxRate==11) {
1273         pDevice->aulPktNum[RATE_5M]++;
1274     }
1275     else if (byRxRate==22) {
1276         pDevice->aulPktNum[RATE_11M]++;
1277     }
1278     else if(byRxRate==12){
1279         pDevice->aulPktNum[RATE_6M]++;
1280         pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1281     }
1282     else if(byRxRate==18){
1283         pDevice->aulPktNum[RATE_9M]++;
1284         pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1285     }
1286     else if(byRxRate==24){
1287         pDevice->aulPktNum[RATE_12M]++;
1288         pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1289     }
1290     else if(byRxRate==36){
1291         pDevice->aulPktNum[RATE_18M]++;
1292         pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1293     }
1294     else if(byRxRate==48){
1295         pDevice->aulPktNum[RATE_24M]++;
1296         pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1297     }
1298     else if(byRxRate==72){
1299         pDevice->aulPktNum[RATE_36M]++;
1300         pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1301     }
1302     else if(byRxRate==96){
1303         pDevice->aulPktNum[RATE_48M]++;
1304         pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1305     }
1306     else if(byRxRate==108){
1307         pDevice->aulPktNum[RATE_54M]++;
1308         pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1309     }
1310
1311     if (pDevice->byAntennaState == 0) {
1312
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]);
1315
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);
1319
1320             if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1321                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1322                  (pDevice->ulSQ3_State0 == 0 ) )  {
1323
1324                 if ( pDevice->byTMax == 0 )
1325                     return;
1326
1327                 bScheduleCommand((void *) pDevice,
1328                                  WLAN_CMD_CHANGE_ANTENNA,
1329                                  NULL);
1330
1331                 pDevice->byAntennaState = 1;
1332
1333                 del_timer(&pDevice->TimerSQ3Tmax3);
1334                 del_timer(&pDevice->TimerSQ3Tmax2);
1335                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1336                 add_timer(&pDevice->TimerSQ3Tmax1);
1337
1338             } else {
1339                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1340                 add_timer(&pDevice->TimerSQ3Tmax3);
1341             }
1342             s_vClearSQ3Value(pDevice);
1343
1344         }
1345     } else { //byAntennaState == 1
1346
1347         if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1348
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);
1353
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))
1357                ) {
1358
1359                 bScheduleCommand((void *) pDevice,
1360                                  WLAN_CMD_CHANGE_ANTENNA,
1361                                  NULL);
1362
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);
1367
1368             }
1369             pDevice->byAntennaState = 0;
1370             s_vClearSQ3Value(pDevice);
1371         }
1372     } //byAntennaState
1373 }
1374
1375 /*+
1376  *
1377  * Description:
1378  *  Timer for SQ3 antenna diversity
1379  *
1380  * Parameters:
1381  *  In:
1382  *      pvSysSpec1
1383  *      hDeviceContext - Pointer to the adapter
1384  *      pvSysSpec2
1385  *      pvSysSpec3
1386  *  Out:
1387  *      none
1388  *
1389  * Return Value: none
1390  *
1391 -*/
1392
1393 void TimerSQ3CallBack(struct vnt_private *pDevice)
1394 {
1395
1396     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1397     spin_lock_irq(&pDevice->lock);
1398
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);
1406
1407     spin_unlock_irq(&pDevice->lock);
1408 }
1409
1410 /*+
1411  *
1412  * Description:
1413  *  Timer for SQ3 antenna diversity
1414  *
1415  * Parameters:
1416  *  In:
1417  *      pvSysSpec1
1418  *      hDeviceContext - Pointer to the adapter
1419  *      pvSysSpec2
1420  *      pvSysSpec3
1421  *  Out:
1422  *      none
1423  *
1424  * Return Value: none
1425  *
1426 -*/
1427
1428 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1429 {
1430
1431     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1432     spin_lock_irq(&pDevice->lock);
1433
1434     pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1435     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1436
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;
1443     }
1444
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);
1451
1452     spin_unlock_irq(&pDevice->lock);
1453 }
1454
1455 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1456 {
1457
1458     switch(pDevice->byRFType)
1459     {
1460         case RF_AL2230:
1461         case RF_AL2230S:
1462         case RF_AIROHA7230:
1463             //RobertYu:20060627, update new table
1464
1465             if( bScanning )
1466             {   // need Max sensitivity //RSSI -69, -70,....
1467                 if(pDevice->byBBPreEDIndex == 0) break;
1468                 pDevice->byBBPreEDIndex = 0;
1469                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1470                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1471                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1472                 break;
1473             }
1474
1475             if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1476                 if(pDevice->byBBPreEDIndex == 20) break;
1477                 pDevice->byBBPreEDIndex = 20;
1478                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1479                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1480                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1481             } else if(pDevice->byBBPreEDRSSI <= 46)  { //RSSI -46
1482                 if(pDevice->byBBPreEDIndex == 19) break;
1483                 pDevice->byBBPreEDIndex = 19;
1484                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1485                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1486                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46\n");
1487             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -47
1488                 if(pDevice->byBBPreEDIndex == 18) break;
1489                 pDevice->byBBPreEDIndex = 18;
1490                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1491                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1492                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -47\n");
1493             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1494                 if(pDevice->byBBPreEDIndex == 17) break;
1495                 pDevice->byBBPreEDIndex = 17;
1496                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1497                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1498                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1499             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1500                 if(pDevice->byBBPreEDIndex == 16) break;
1501                 pDevice->byBBPreEDIndex = 16;
1502                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1503                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1504                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1505             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1506                 if(pDevice->byBBPreEDIndex == 15) break;
1507                 pDevice->byBBPreEDIndex = 15;
1508                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1509                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1510                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1511             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1512                 if(pDevice->byBBPreEDIndex == 14) break;
1513                 pDevice->byBBPreEDIndex = 14;
1514                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1515                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1516                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1517             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1518                 if(pDevice->byBBPreEDIndex == 13) break;
1519                 pDevice->byBBPreEDIndex = 13;
1520                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1521                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1522                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1523             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1524                 if(pDevice->byBBPreEDIndex == 12) break;
1525                 pDevice->byBBPreEDIndex = 12;
1526                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1527                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1528                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1529             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1530                 if(pDevice->byBBPreEDIndex == 11) break;
1531                 pDevice->byBBPreEDIndex = 11;
1532                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1533                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1534                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1535             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1536                 if(pDevice->byBBPreEDIndex == 10) break;
1537                 pDevice->byBBPreEDIndex = 10;
1538                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1539                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1540                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1541             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1542                 if(pDevice->byBBPreEDIndex == 9) break;
1543                 pDevice->byBBPreEDIndex = 9;
1544                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1545                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1546                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1547             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1548                 if(pDevice->byBBPreEDIndex == 8) break;
1549                 pDevice->byBBPreEDIndex = 8;
1550                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1551                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1552                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1553             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1554                 if(pDevice->byBBPreEDIndex == 7) break;
1555                 pDevice->byBBPreEDIndex = 7;
1556                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1557                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1558                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1559             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1560                 if(pDevice->byBBPreEDIndex == 6) break;
1561                 pDevice->byBBPreEDIndex = 6;
1562                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1563                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1564                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1565             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1566                 if(pDevice->byBBPreEDIndex == 5) break;
1567                 pDevice->byBBPreEDIndex = 5;
1568                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1569                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1570                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1571             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1572                 if(pDevice->byBBPreEDIndex == 4) break;
1573                 pDevice->byBBPreEDIndex = 4;
1574                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1575                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1576                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1577             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1578                 if(pDevice->byBBPreEDIndex == 3) break;
1579                 pDevice->byBBPreEDIndex = 3;
1580                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1581                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1582                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1583             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1584                 if(pDevice->byBBPreEDIndex == 2) break;
1585                 pDevice->byBBPreEDIndex = 2;
1586                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1587                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1588                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1589             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1590                 if(pDevice->byBBPreEDIndex == 1) break;
1591                 pDevice->byBBPreEDIndex = 1;
1592                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1593                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1594                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1595             } else { //RSSI -69, -70,....
1596                 if(pDevice->byBBPreEDIndex == 0) break;
1597                 pDevice->byBBPreEDIndex = 0;
1598                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1599                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1600                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,...\n");
1601             }
1602             break;
1603
1604         case RF_VT3226:
1605         case RF_VT3226D0:
1606             //RobertYu:20060627, update new table
1607
1608             if( bScanning )
1609             {   // need Max sensitivity  //RSSI -69, -70, ...
1610                 if(pDevice->byBBPreEDIndex == 0) break;
1611                 pDevice->byBBPreEDIndex = 0;
1612                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1613                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1614                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1615                 break;
1616             }
1617
1618             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1619                 if(pDevice->byBBPreEDIndex == 22) break;
1620                 pDevice->byBBPreEDIndex = 22;
1621                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1622                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1623                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1624             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1625                 if(pDevice->byBBPreEDIndex == 21) break;
1626                 pDevice->byBBPreEDIndex = 21;
1627                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1628                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1629                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1630             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1631                 if(pDevice->byBBPreEDIndex == 20) break;
1632                 pDevice->byBBPreEDIndex = 20;
1633                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1634                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1635                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1636             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1637                 if(pDevice->byBBPreEDIndex == 19) break;
1638                 pDevice->byBBPreEDIndex = 19;
1639                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1640                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1641                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1642             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1643                 if(pDevice->byBBPreEDIndex == 18) break;
1644                 pDevice->byBBPreEDIndex = 18;
1645                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1646                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1647                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1648             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1649                 if(pDevice->byBBPreEDIndex == 17) break;
1650                 pDevice->byBBPreEDIndex = 17;
1651                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1652                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1653                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1654             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1655                 if(pDevice->byBBPreEDIndex == 16) break;
1656                 pDevice->byBBPreEDIndex = 16;
1657                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1658                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1659                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1660             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1661                 if(pDevice->byBBPreEDIndex == 15) break;
1662                 pDevice->byBBPreEDIndex = 15;
1663                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1664                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1665                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1666             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1667                 if(pDevice->byBBPreEDIndex == 14) break;
1668                 pDevice->byBBPreEDIndex = 14;
1669                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1670                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1671                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1672             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1673                 if(pDevice->byBBPreEDIndex == 13) break;
1674                 pDevice->byBBPreEDIndex = 13;
1675                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1676                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1677                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1678             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1679                 if(pDevice->byBBPreEDIndex == 12) break;
1680                 pDevice->byBBPreEDIndex = 12;
1681                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1682                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1683                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1684             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1685                 if(pDevice->byBBPreEDIndex == 11) break;
1686                 pDevice->byBBPreEDIndex = 11;
1687                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1688                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1689                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1690             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1691                 if(pDevice->byBBPreEDIndex == 10) break;
1692                 pDevice->byBBPreEDIndex = 10;
1693                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1694                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1695                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1696             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1697                 if(pDevice->byBBPreEDIndex == 9) break;
1698                 pDevice->byBBPreEDIndex = 9;
1699                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1700                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1701                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1702             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1703                 if(pDevice->byBBPreEDIndex == 8) break;
1704                 pDevice->byBBPreEDIndex = 8;
1705                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1706                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1707                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1708             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1709                 if(pDevice->byBBPreEDIndex == 7) break;
1710                 pDevice->byBBPreEDIndex = 7;
1711                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1712                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1713                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1714             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1715                 if(pDevice->byBBPreEDIndex == 6) break;
1716                 pDevice->byBBPreEDIndex = 6;
1717                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1718                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1719                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1720             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1721                 if(pDevice->byBBPreEDIndex == 5) break;
1722                 pDevice->byBBPreEDIndex = 5;
1723                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1724                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1725                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1726             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1727                 if(pDevice->byBBPreEDIndex == 4) break;
1728                 pDevice->byBBPreEDIndex = 4;
1729                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1730                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1731                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1732             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1733                 if(pDevice->byBBPreEDIndex == 3) break;
1734                 pDevice->byBBPreEDIndex = 3;
1735                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1736                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1737                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1738             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1739                 if(pDevice->byBBPreEDIndex == 2) break;
1740                 pDevice->byBBPreEDIndex = 2;
1741                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1742                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1743                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1744             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1745                 if(pDevice->byBBPreEDIndex == 1) break;
1746                 pDevice->byBBPreEDIndex = 1;
1747                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1748                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1749                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1750             } else { //RSSI -69, -70, ...
1751                 if(pDevice->byBBPreEDIndex == 0) break;
1752                 pDevice->byBBPreEDIndex = 0;
1753                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1754                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1755                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1756             }
1757             break;
1758
1759         case RF_VT3342A0: //RobertYu:20060627, testing table
1760             if( bScanning )
1761             {   // need Max sensitivity  //RSSI -67, -68, ...
1762                 if(pDevice->byBBPreEDIndex == 0) break;
1763                 pDevice->byBBPreEDIndex = 0;
1764                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1765                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1766                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1767                 break;
1768             }
1769
1770             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1771                 if(pDevice->byBBPreEDIndex == 20) break;
1772                 pDevice->byBBPreEDIndex = 20;
1773                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1774                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1775                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1776             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1777                 if(pDevice->byBBPreEDIndex == 19) break;
1778                 pDevice->byBBPreEDIndex = 19;
1779                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1780                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1781                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1782             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1783                 if(pDevice->byBBPreEDIndex == 18) break;
1784                 pDevice->byBBPreEDIndex = 18;
1785                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1786                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1787                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1788             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1789                 if(pDevice->byBBPreEDIndex == 17) break;
1790                 pDevice->byBBPreEDIndex = 17;
1791                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1792                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1793                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1794             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1795                 if(pDevice->byBBPreEDIndex == 16) break;
1796                 pDevice->byBBPreEDIndex = 16;
1797                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1798                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1799                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1800             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1801                 if(pDevice->byBBPreEDIndex == 15) break;
1802                 pDevice->byBBPreEDIndex = 15;
1803                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1804                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1805                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1806             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1807                 if(pDevice->byBBPreEDIndex == 14) break;
1808                 pDevice->byBBPreEDIndex = 14;
1809                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1810                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1811                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1812             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1813                 if(pDevice->byBBPreEDIndex == 13) break;
1814                 pDevice->byBBPreEDIndex = 13;
1815                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1816                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1817                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1818             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1819                 if(pDevice->byBBPreEDIndex == 12) break;
1820                 pDevice->byBBPreEDIndex = 12;
1821                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1822                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1823                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1824             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1825                 if(pDevice->byBBPreEDIndex == 11) break;
1826                 pDevice->byBBPreEDIndex = 11;
1827                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1828                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1829                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1830             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1831                 if(pDevice->byBBPreEDIndex == 10) break;
1832                 pDevice->byBBPreEDIndex = 10;
1833                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1834                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1835                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1836             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1837                 if(pDevice->byBBPreEDIndex == 9) break;
1838                 pDevice->byBBPreEDIndex = 9;
1839                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1840                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1841                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1842             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1843                 if(pDevice->byBBPreEDIndex == 8) break;
1844                 pDevice->byBBPreEDIndex = 8;
1845                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1846                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1847                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1848             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1849                 if(pDevice->byBBPreEDIndex == 7) break;
1850                 pDevice->byBBPreEDIndex = 7;
1851                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1852                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1853                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1854             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1855                 if(pDevice->byBBPreEDIndex == 6) break;
1856                 pDevice->byBBPreEDIndex = 6;
1857                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1858                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1859                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1860             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1861                 if(pDevice->byBBPreEDIndex == 5) break;
1862                 pDevice->byBBPreEDIndex = 5;
1863                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1864                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1865                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1866             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1867                 if(pDevice->byBBPreEDIndex == 4) break;
1868                 pDevice->byBBPreEDIndex = 4;
1869                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1870                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1871                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1872             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1873                 if(pDevice->byBBPreEDIndex == 3) break;
1874                 pDevice->byBBPreEDIndex = 3;
1875                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1876                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1877                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1878             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1879                 if(pDevice->byBBPreEDIndex == 2) break;
1880                 pDevice->byBBPreEDIndex = 2;
1881                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1882                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1883                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1884             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1885                 if(pDevice->byBBPreEDIndex == 1) break;
1886                 pDevice->byBBPreEDIndex = 1;
1887                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1888                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1889                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1890             } else { //RSSI -67, -68, ...
1891                 if(pDevice->byBBPreEDIndex == 0) break;
1892                 pDevice->byBBPreEDIndex = 0;
1893                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1894                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1895                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1896             }
1897             break;
1898
1899     }
1900
1901 }
1902