video: vt8500: fix error handling in probe()
[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
943     ntStatus = CONTROLnsRequestIn(pDevice,
944                                   MESSAGE_TYPE_READ,
945                                   0,
946                                   MESSAGE_REQUEST_EEPROM,
947                                   EEP_MAX_CONTEXT_SIZE,
948                                   pDevice->abyEEPROM);
949     if (ntStatus != STATUS_SUCCESS) {
950         return false;
951     }
952
953 //    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
954 //        return false;
955
956 //zonetype initial
957  pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
958  if(pDevice->config_file.ZoneType >= 0) {         //read zonetype file ok!
959   if ((pDevice->config_file.ZoneType == 0)&&
960         (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){          //for USA
961     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
962     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
963     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
964   }
965  else if((pDevice->config_file.ZoneType == 1)&&
966              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){   //for Japan
967     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
968     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
969     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
970   }
971  else if((pDevice->config_file.ZoneType == 2)&&
972              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){   //for Europe
973     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
974     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
975     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
976   }
977 else {
978    if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
979       printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
980    else
981       printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
982  }
983 }
984
985     if ( !pDevice->bZoneRegExist ) {
986         pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
987     }
988     pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
989
990     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
991     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
992
993     if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
994         pDevice->byBBRxConf = abyVT3184_AL2230[10];
995         wLength = sizeof(abyVT3184_AL2230);
996         pbyAddr = abyVT3184_AL2230;
997         pbyAgc = abyVT3184_AGC;
998         wLengthAgc = sizeof(abyVT3184_AGC);
999
1000         pDevice->abyBBVGA[0] = 0x1C;
1001         pDevice->abyBBVGA[1] = 0x10;
1002         pDevice->abyBBVGA[2] = 0x0;
1003         pDevice->abyBBVGA[3] = 0x0;
1004         pDevice->ldBmThreshold[0] = -70;
1005         pDevice->ldBmThreshold[1] = -48;
1006         pDevice->ldBmThreshold[2] = 0;
1007         pDevice->ldBmThreshold[3] = 0;
1008     }
1009     else if (pDevice->byRFType == RF_AIROHA7230) {
1010         pDevice->byBBRxConf = abyVT3184_AL2230[10];
1011         wLength = sizeof(abyVT3184_AL2230);
1012         pbyAddr = abyVT3184_AL2230;
1013         pbyAgc = abyVT3184_AGC;
1014         wLengthAgc = sizeof(abyVT3184_AGC);
1015
1016         // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1017         //pbyAddr[0x09] = 0x41;
1018         // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1019         //pbyAddr[0x0a] = 0x28;
1020         // Select VC1/VC2, CR215 = 0x02->0x06
1021         pbyAddr[0xd7] = 0x06;
1022
1023         pDevice->abyBBVGA[0] = 0x1C;
1024         pDevice->abyBBVGA[1] = 0x10;
1025         pDevice->abyBBVGA[2] = 0x0;
1026         pDevice->abyBBVGA[3] = 0x0;
1027         pDevice->ldBmThreshold[0] = -70;
1028         pDevice->ldBmThreshold[1] = -48;
1029         pDevice->ldBmThreshold[2] = 0;
1030         pDevice->ldBmThreshold[3] = 0;
1031     }
1032     else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1033         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];   //RobertYu:20060515
1034         wLength = sizeof(abyVT3184_VT3226D0);           //RobertYu:20060515
1035         pbyAddr = abyVT3184_VT3226D0;                   //RobertYu:20060515
1036         pbyAgc = abyVT3184_AGC;
1037         wLengthAgc = sizeof(abyVT3184_AGC);
1038
1039         pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1040         pDevice->abyBBVGA[1] = 0x10;
1041         pDevice->abyBBVGA[2] = 0x0;
1042         pDevice->abyBBVGA[3] = 0x0;
1043         pDevice->ldBmThreshold[0] = -70;
1044         pDevice->ldBmThreshold[1] = -48;
1045         pDevice->ldBmThreshold[2] = 0;
1046         pDevice->ldBmThreshold[3] = 0;
1047         // Fix VT3226 DFC system timing issue
1048         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1049     //}}
1050     //{{RobertYu:20060609
1051     } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1052         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1053         wLength = sizeof(abyVT3184_VT3226D0);
1054         pbyAddr = abyVT3184_VT3226D0;
1055         pbyAgc = abyVT3184_AGC;
1056         wLengthAgc = sizeof(abyVT3184_AGC);
1057
1058         pDevice->abyBBVGA[0] = 0x20;
1059         pDevice->abyBBVGA[1] = 0x10;
1060         pDevice->abyBBVGA[2] = 0x0;
1061         pDevice->abyBBVGA[3] = 0x0;
1062         pDevice->ldBmThreshold[0] = -70;
1063         pDevice->ldBmThreshold[1] = -48;
1064         pDevice->ldBmThreshold[2] = 0;
1065         pDevice->ldBmThreshold[3] = 0;
1066         // Fix VT3226 DFC system timing issue
1067         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1068     //}}
1069     } else {
1070         return true;
1071     }
1072
1073    memcpy(abyArray, pbyAddr, wLength);
1074    CONTROLnsRequestOut(pDevice,
1075                     MESSAGE_TYPE_WRITE,
1076                     0,
1077                     MESSAGE_REQUEST_BBREG,
1078                     wLength,
1079                     abyArray
1080                     );
1081
1082    memcpy(abyArray, pbyAgc, wLengthAgc);
1083    CONTROLnsRequestOut(pDevice,
1084                     MESSAGE_TYPE_WRITE,
1085                     0,
1086                     MESSAGE_REQUEST_BBAGC,
1087                     wLengthAgc,
1088                     abyArray
1089                     );
1090
1091     if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1092          (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609
1093          ) {
1094         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1095         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1096     }
1097     else if (pDevice->byRFType == RF_VT3226D0)
1098     {
1099         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1100         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1101     }
1102
1103     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1104     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1105
1106     RFbRFTableDownload(pDevice);
1107     return true;//ntStatus;
1108 }
1109
1110 /*
1111  * Description: Set ShortSlotTime mode
1112  *
1113  * Parameters:
1114  *  In:
1115  *      pDevice     - Device Structure
1116  *  Out:
1117  *      none
1118  *
1119  * Return Value: none
1120  *
1121  */
1122 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1123 {
1124     u8 byBBVGA=0;
1125
1126         if (pDevice->bShortSlotTime)
1127         pDevice->byBBRxConf &= 0xDF;//1101 1111
1128         else
1129         pDevice->byBBRxConf |= 0x20;//0010 0000
1130
1131     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1132         if (byBBVGA == pDevice->abyBBVGA[0])
1133         pDevice->byBBRxConf |= 0x20;//0010 0000
1134
1135     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1136 }
1137
1138 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1139 {
1140
1141     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1142
1143     // patch for 3253B0 Baseband with Cardbus module
1144         if (pDevice->bShortSlotTime)
1145                 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1146         else
1147                 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1148
1149     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1150 }
1151
1152 /*
1153  * Description: BBvSetDeepSleep
1154  *
1155  * Parameters:
1156  *  In:
1157  *      pDevice          - Device Structure
1158  *  Out:
1159  *      none
1160  *
1161  * Return Value: none
1162  *
1163  */
1164 void BBvSetDeepSleep(struct vnt_private *pDevice)
1165 {
1166     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1167     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1168 }
1169
1170 void BBvExitDeepSleep(struct vnt_private *pDevice)
1171 {
1172     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1173     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1174 }
1175
1176 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1177 {
1178         int ii;
1179         unsigned long ulSQ3 = 0;
1180         unsigned long ulMaxPacket;
1181
1182     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1183         if (pDevice->aulPktNum[RATE_54M] != 0)
1184         ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1185
1186         for (ii = RATE_48M; ii >= RATE_6M; ii--)
1187                 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1188             ulMaxPacket = pDevice->aulPktNum[ii];
1189             ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1190         }
1191
1192     return ulSQ3;
1193 }
1194
1195 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1196 {
1197         int ii, jj;
1198         unsigned long ulRatio = 0;
1199         unsigned long ulMaxPacket;
1200         unsigned long ulPacketNum;
1201
1202     //This is a thousand-ratio
1203     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1204     if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1205         ulPacketNum = pDevice->aulPktNum[RATE_54M];
1206         ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1207         ulRatio += TOP_RATE_54M;
1208     }
1209         for (ii = RATE_48M; ii >= RATE_1M; ii--)
1210         if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1211             ulPacketNum = 0;
1212             for ( jj=RATE_54M;jj>=ii;jj--)
1213                 ulPacketNum += pDevice->aulPktNum[jj];
1214             ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1215             ulRatio += TOP_RATE_48M;
1216             ulMaxPacket = pDevice->aulPktNum[ii];
1217         }
1218
1219     return ulRatio;
1220 }
1221
1222 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1223 {
1224     int ii;
1225     pDevice->uDiversityCnt = 0;
1226
1227     for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1228         pDevice->aulPktNum[ii] = 0;
1229         pDevice->aulSQ3Val[ii] = 0;
1230     }
1231 }
1232
1233 /*
1234  * Description: Antenna Diversity
1235  *
1236  * Parameters:
1237  *  In:
1238  *      pDevice          - Device Structure
1239  *      byRSR            - RSR from received packet
1240  *      bySQ3            - SQ3 value from received packet
1241  *  Out:
1242  *      none
1243  *
1244  * Return Value: none
1245  *
1246  */
1247
1248 void BBvAntennaDiversity(struct vnt_private *pDevice,
1249         u8 byRxRate, u8 bySQ3)
1250 {
1251
1252     pDevice->uDiversityCnt++;
1253     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1254
1255     if (byRxRate == 2) {
1256         pDevice->aulPktNum[RATE_1M]++;
1257     }
1258     else if (byRxRate==4) {
1259         pDevice->aulPktNum[RATE_2M]++;
1260     }
1261     else if (byRxRate==11) {
1262         pDevice->aulPktNum[RATE_5M]++;
1263     }
1264     else if (byRxRate==22) {
1265         pDevice->aulPktNum[RATE_11M]++;
1266     }
1267     else if(byRxRate==12){
1268         pDevice->aulPktNum[RATE_6M]++;
1269         pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1270     }
1271     else if(byRxRate==18){
1272         pDevice->aulPktNum[RATE_9M]++;
1273         pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1274     }
1275     else if(byRxRate==24){
1276         pDevice->aulPktNum[RATE_12M]++;
1277         pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1278     }
1279     else if(byRxRate==36){
1280         pDevice->aulPktNum[RATE_18M]++;
1281         pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1282     }
1283     else if(byRxRate==48){
1284         pDevice->aulPktNum[RATE_24M]++;
1285         pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1286     }
1287     else if(byRxRate==72){
1288         pDevice->aulPktNum[RATE_36M]++;
1289         pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1290     }
1291     else if(byRxRate==96){
1292         pDevice->aulPktNum[RATE_48M]++;
1293         pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1294     }
1295     else if(byRxRate==108){
1296         pDevice->aulPktNum[RATE_54M]++;
1297         pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1298     }
1299
1300     if (pDevice->byAntennaState == 0) {
1301
1302         if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1303             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1304
1305             pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1306             pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1307             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1308
1309             if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1310                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1311                  (pDevice->ulSQ3_State0 == 0 ) )  {
1312
1313                 if ( pDevice->byTMax == 0 )
1314                     return;
1315
1316                 bScheduleCommand((void *) pDevice,
1317                                  WLAN_CMD_CHANGE_ANTENNA,
1318                                  NULL);
1319
1320                 pDevice->byAntennaState = 1;
1321
1322                 del_timer(&pDevice->TimerSQ3Tmax3);
1323                 del_timer(&pDevice->TimerSQ3Tmax2);
1324                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1325                 add_timer(&pDevice->TimerSQ3Tmax1);
1326
1327             } else {
1328                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1329                 add_timer(&pDevice->TimerSQ3Tmax3);
1330             }
1331             s_vClearSQ3Value(pDevice);
1332
1333         }
1334     } else { //byAntennaState == 1
1335
1336         if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1337
1338             del_timer(&pDevice->TimerSQ3Tmax1);
1339             pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1340             pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1341             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1342
1343             if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1344                  ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1345                  ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1346                ) {
1347
1348                 bScheduleCommand((void *) pDevice,
1349                                  WLAN_CMD_CHANGE_ANTENNA,
1350                                  NULL);
1351
1352                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1353                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1354                 add_timer(&pDevice->TimerSQ3Tmax3);
1355                 add_timer(&pDevice->TimerSQ3Tmax2);
1356
1357             }
1358             pDevice->byAntennaState = 0;
1359             s_vClearSQ3Value(pDevice);
1360         }
1361     } //byAntennaState
1362 }
1363
1364 /*+
1365  *
1366  * Description:
1367  *  Timer for SQ3 antenna diversity
1368  *
1369  * Parameters:
1370  *  In:
1371  *      pvSysSpec1
1372  *      hDeviceContext - Pointer to the adapter
1373  *      pvSysSpec2
1374  *      pvSysSpec3
1375  *  Out:
1376  *      none
1377  *
1378  * Return Value: none
1379  *
1380 -*/
1381
1382 void TimerSQ3CallBack(struct vnt_private *pDevice)
1383 {
1384
1385     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1386     spin_lock_irq(&pDevice->lock);
1387
1388     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1389     pDevice->byAntennaState = 0;
1390     s_vClearSQ3Value(pDevice);
1391     pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1392     pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1393     add_timer(&pDevice->TimerSQ3Tmax3);
1394     add_timer(&pDevice->TimerSQ3Tmax2);
1395
1396     spin_unlock_irq(&pDevice->lock);
1397 }
1398
1399 /*+
1400  *
1401  * Description:
1402  *  Timer for SQ3 antenna diversity
1403  *
1404  * Parameters:
1405  *  In:
1406  *      pvSysSpec1
1407  *      hDeviceContext - Pointer to the adapter
1408  *      pvSysSpec2
1409  *      pvSysSpec3
1410  *  Out:
1411  *      none
1412  *
1413  * Return Value: none
1414  *
1415 -*/
1416
1417 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1418 {
1419
1420     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1421     spin_lock_irq(&pDevice->lock);
1422
1423     pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1424     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1425
1426     s_vClearSQ3Value(pDevice);
1427     if ( pDevice->byTMax == 0 ) {
1428         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1429         add_timer(&pDevice->TimerSQ3Tmax3);
1430         spin_unlock_irq(&pDevice->lock);
1431         return;
1432     }
1433
1434     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1435     pDevice->byAntennaState = 1;
1436     del_timer(&pDevice->TimerSQ3Tmax3);
1437     del_timer(&pDevice->TimerSQ3Tmax2);
1438     pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1439     add_timer(&pDevice->TimerSQ3Tmax1);
1440
1441     spin_unlock_irq(&pDevice->lock);
1442 }
1443
1444 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1445 {
1446
1447     switch(pDevice->byRFType)
1448     {
1449         case RF_AL2230:
1450         case RF_AL2230S:
1451         case RF_AIROHA7230:
1452             //RobertYu:20060627, update new table
1453
1454             if( bScanning )
1455             {   // need Max sensitivity //RSSI -69, -70,....
1456                 if(pDevice->byBBPreEDIndex == 0) break;
1457                 pDevice->byBBPreEDIndex = 0;
1458                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1459                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1460                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1461                 break;
1462             }
1463
1464             if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1465                 if(pDevice->byBBPreEDIndex == 20) break;
1466                 pDevice->byBBPreEDIndex = 20;
1467                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1468                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1469                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1470             } else if(pDevice->byBBPreEDRSSI <= 46)  { //RSSI -46
1471                 if(pDevice->byBBPreEDIndex == 19) break;
1472                 pDevice->byBBPreEDIndex = 19;
1473                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1474                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1475                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46\n");
1476             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -47
1477                 if(pDevice->byBBPreEDIndex == 18) break;
1478                 pDevice->byBBPreEDIndex = 18;
1479                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1480                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1481                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -47\n");
1482             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1483                 if(pDevice->byBBPreEDIndex == 17) break;
1484                 pDevice->byBBPreEDIndex = 17;
1485                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1486                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1487                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1488             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1489                 if(pDevice->byBBPreEDIndex == 16) break;
1490                 pDevice->byBBPreEDIndex = 16;
1491                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1492                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1493                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1494             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1495                 if(pDevice->byBBPreEDIndex == 15) break;
1496                 pDevice->byBBPreEDIndex = 15;
1497                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1498                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1499                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1500             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1501                 if(pDevice->byBBPreEDIndex == 14) break;
1502                 pDevice->byBBPreEDIndex = 14;
1503                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1504                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1505                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1506             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1507                 if(pDevice->byBBPreEDIndex == 13) break;
1508                 pDevice->byBBPreEDIndex = 13;
1509                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1510                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1511                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1512             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1513                 if(pDevice->byBBPreEDIndex == 12) break;
1514                 pDevice->byBBPreEDIndex = 12;
1515                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1516                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1517                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1518             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1519                 if(pDevice->byBBPreEDIndex == 11) break;
1520                 pDevice->byBBPreEDIndex = 11;
1521                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1522                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1523                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1524             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1525                 if(pDevice->byBBPreEDIndex == 10) break;
1526                 pDevice->byBBPreEDIndex = 10;
1527                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1528                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1529                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1530             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1531                 if(pDevice->byBBPreEDIndex == 9) break;
1532                 pDevice->byBBPreEDIndex = 9;
1533                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1534                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1535                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1536             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1537                 if(pDevice->byBBPreEDIndex == 8) break;
1538                 pDevice->byBBPreEDIndex = 8;
1539                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1540                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1541                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1542             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1543                 if(pDevice->byBBPreEDIndex == 7) break;
1544                 pDevice->byBBPreEDIndex = 7;
1545                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1546                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1547                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1548             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1549                 if(pDevice->byBBPreEDIndex == 6) break;
1550                 pDevice->byBBPreEDIndex = 6;
1551                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1552                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1553                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1554             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1555                 if(pDevice->byBBPreEDIndex == 5) break;
1556                 pDevice->byBBPreEDIndex = 5;
1557                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1558                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1559                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1560             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1561                 if(pDevice->byBBPreEDIndex == 4) break;
1562                 pDevice->byBBPreEDIndex = 4;
1563                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1564                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1565                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1566             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1567                 if(pDevice->byBBPreEDIndex == 3) break;
1568                 pDevice->byBBPreEDIndex = 3;
1569                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1570                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1571                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1572             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1573                 if(pDevice->byBBPreEDIndex == 2) break;
1574                 pDevice->byBBPreEDIndex = 2;
1575                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1576                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1577                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1578             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1579                 if(pDevice->byBBPreEDIndex == 1) break;
1580                 pDevice->byBBPreEDIndex = 1;
1581                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1582                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1583                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1584             } else { //RSSI -69, -70,....
1585                 if(pDevice->byBBPreEDIndex == 0) break;
1586                 pDevice->byBBPreEDIndex = 0;
1587                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1588                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1589                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,...\n");
1590             }
1591             break;
1592
1593         case RF_VT3226:
1594         case RF_VT3226D0:
1595             //RobertYu:20060627, update new table
1596
1597             if( bScanning )
1598             {   // need Max sensitivity  //RSSI -69, -70, ...
1599                 if(pDevice->byBBPreEDIndex == 0) break;
1600                 pDevice->byBBPreEDIndex = 0;
1601                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1602                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1603                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1604                 break;
1605             }
1606
1607             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1608                 if(pDevice->byBBPreEDIndex == 22) break;
1609                 pDevice->byBBPreEDIndex = 22;
1610                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1611                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1612                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1613             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1614                 if(pDevice->byBBPreEDIndex == 21) break;
1615                 pDevice->byBBPreEDIndex = 21;
1616                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1617                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1618                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1619             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1620                 if(pDevice->byBBPreEDIndex == 20) break;
1621                 pDevice->byBBPreEDIndex = 20;
1622                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1623                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1624                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1625             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1626                 if(pDevice->byBBPreEDIndex == 19) break;
1627                 pDevice->byBBPreEDIndex = 19;
1628                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1629                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1630                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1631             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1632                 if(pDevice->byBBPreEDIndex == 18) break;
1633                 pDevice->byBBPreEDIndex = 18;
1634                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1635                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1636                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1637             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1638                 if(pDevice->byBBPreEDIndex == 17) break;
1639                 pDevice->byBBPreEDIndex = 17;
1640                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1641                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1642                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1643             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1644                 if(pDevice->byBBPreEDIndex == 16) break;
1645                 pDevice->byBBPreEDIndex = 16;
1646                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1647                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1648                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1649             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1650                 if(pDevice->byBBPreEDIndex == 15) break;
1651                 pDevice->byBBPreEDIndex = 15;
1652                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1653                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1654                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1655             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1656                 if(pDevice->byBBPreEDIndex == 14) break;
1657                 pDevice->byBBPreEDIndex = 14;
1658                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1659                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1660                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1661             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1662                 if(pDevice->byBBPreEDIndex == 13) break;
1663                 pDevice->byBBPreEDIndex = 13;
1664                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1665                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1666                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1667             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1668                 if(pDevice->byBBPreEDIndex == 12) break;
1669                 pDevice->byBBPreEDIndex = 12;
1670                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1671                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1672                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1673             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1674                 if(pDevice->byBBPreEDIndex == 11) break;
1675                 pDevice->byBBPreEDIndex = 11;
1676                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1677                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1678                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1679             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1680                 if(pDevice->byBBPreEDIndex == 10) break;
1681                 pDevice->byBBPreEDIndex = 10;
1682                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1683                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1684                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1685             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1686                 if(pDevice->byBBPreEDIndex == 9) break;
1687                 pDevice->byBBPreEDIndex = 9;
1688                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1689                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1690                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1691             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1692                 if(pDevice->byBBPreEDIndex == 8) break;
1693                 pDevice->byBBPreEDIndex = 8;
1694                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1695                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1696                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1697             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1698                 if(pDevice->byBBPreEDIndex == 7) break;
1699                 pDevice->byBBPreEDIndex = 7;
1700                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1701                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1702                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1703             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1704                 if(pDevice->byBBPreEDIndex == 6) break;
1705                 pDevice->byBBPreEDIndex = 6;
1706                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1707                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1708                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1709             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1710                 if(pDevice->byBBPreEDIndex == 5) break;
1711                 pDevice->byBBPreEDIndex = 5;
1712                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1713                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1714                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1715             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1716                 if(pDevice->byBBPreEDIndex == 4) break;
1717                 pDevice->byBBPreEDIndex = 4;
1718                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1719                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1720                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1721             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1722                 if(pDevice->byBBPreEDIndex == 3) break;
1723                 pDevice->byBBPreEDIndex = 3;
1724                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1725                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1726                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1727             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1728                 if(pDevice->byBBPreEDIndex == 2) break;
1729                 pDevice->byBBPreEDIndex = 2;
1730                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1731                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1732                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1733             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1734                 if(pDevice->byBBPreEDIndex == 1) break;
1735                 pDevice->byBBPreEDIndex = 1;
1736                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1737                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1738                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1739             } else { //RSSI -69, -70, ...
1740                 if(pDevice->byBBPreEDIndex == 0) break;
1741                 pDevice->byBBPreEDIndex = 0;
1742                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1743                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1744                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1745             }
1746             break;
1747
1748         case RF_VT3342A0: //RobertYu:20060627, testing table
1749             if( bScanning )
1750             {   // need Max sensitivity  //RSSI -67, -68, ...
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, 0x38); //CR206(0xCE)
1755                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1756                 break;
1757             }
1758
1759             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1760                 if(pDevice->byBBPreEDIndex == 20) break;
1761                 pDevice->byBBPreEDIndex = 20;
1762                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1763                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1764                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1765             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1766                 if(pDevice->byBBPreEDIndex == 19) break;
1767                 pDevice->byBBPreEDIndex = 19;
1768                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1769                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1770                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1771             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1772                 if(pDevice->byBBPreEDIndex == 18) break;
1773                 pDevice->byBBPreEDIndex = 18;
1774                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1775                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1776                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1777             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1778                 if(pDevice->byBBPreEDIndex == 17) break;
1779                 pDevice->byBBPreEDIndex = 17;
1780                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1781                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1782                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1783             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1784                 if(pDevice->byBBPreEDIndex == 16) break;
1785                 pDevice->byBBPreEDIndex = 16;
1786                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1787                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1788                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1789             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1790                 if(pDevice->byBBPreEDIndex == 15) break;
1791                 pDevice->byBBPreEDIndex = 15;
1792                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1793                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1794                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1795             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1796                 if(pDevice->byBBPreEDIndex == 14) break;
1797                 pDevice->byBBPreEDIndex = 14;
1798                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1799                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1800                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1801             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1802                 if(pDevice->byBBPreEDIndex == 13) break;
1803                 pDevice->byBBPreEDIndex = 13;
1804                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1805                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1806                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1807             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1808                 if(pDevice->byBBPreEDIndex == 12) break;
1809                 pDevice->byBBPreEDIndex = 12;
1810                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1811                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1812                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1813             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1814                 if(pDevice->byBBPreEDIndex == 11) break;
1815                 pDevice->byBBPreEDIndex = 11;
1816                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1817                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1818                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1819             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1820                 if(pDevice->byBBPreEDIndex == 10) break;
1821                 pDevice->byBBPreEDIndex = 10;
1822                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1823                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1824                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1825             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1826                 if(pDevice->byBBPreEDIndex == 9) break;
1827                 pDevice->byBBPreEDIndex = 9;
1828                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1829                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1830                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1831             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1832                 if(pDevice->byBBPreEDIndex == 8) break;
1833                 pDevice->byBBPreEDIndex = 8;
1834                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1835                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1836                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1837             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1838                 if(pDevice->byBBPreEDIndex == 7) break;
1839                 pDevice->byBBPreEDIndex = 7;
1840                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1841                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1842                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1843             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1844                 if(pDevice->byBBPreEDIndex == 6) break;
1845                 pDevice->byBBPreEDIndex = 6;
1846                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1847                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1848                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1849             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1850                 if(pDevice->byBBPreEDIndex == 5) break;
1851                 pDevice->byBBPreEDIndex = 5;
1852                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1853                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1854                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1855             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1856                 if(pDevice->byBBPreEDIndex == 4) break;
1857                 pDevice->byBBPreEDIndex = 4;
1858                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1859                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1860                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1861             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1862                 if(pDevice->byBBPreEDIndex == 3) break;
1863                 pDevice->byBBPreEDIndex = 3;
1864                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1865                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1866                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1867             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1868                 if(pDevice->byBBPreEDIndex == 2) break;
1869                 pDevice->byBBPreEDIndex = 2;
1870                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1871                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1872                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1873             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1874                 if(pDevice->byBBPreEDIndex == 1) break;
1875                 pDevice->byBBPreEDIndex = 1;
1876                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1877                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1878                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1879             } else { //RSSI -67, -68, ...
1880                 if(pDevice->byBBPreEDIndex == 0) break;
1881                 pDevice->byBBPreEDIndex = 0;
1882                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1883                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1884                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1885             }
1886             break;
1887
1888     }
1889
1890 }
1891