]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/vt6655/baseband.c
Merge remote-tracking branches 'asoc/topic/rx51', 'asoc/topic/samsung', 'asoc/topic...
[karo-tx-linux.git] / drivers / staging / vt6655 / 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: Kyle Hsu
25  *
26  * Date: Aug.22, 2002
27  *
28  * Functions:
29  *      BBuGetFrameTime        - Calculate data frame transmitting time
30  *      BBvCaculateParameter   - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31  *      BBbReadEmbedded         - Embedded read baseband register via MAC
32  *      BBbWriteEmbedded        - Embedded write baseband register via MAC
33  *      BBbVT3253Init          - VIA VT3253 baseband chip init code
34  *
35  * Revision History:
36  *      06-10-2003 Bryan YC Fan:  Re-write codes to support VT3253 spec.
37  *      08-07-2003 Bryan YC Fan:  Add MAXIM2827/2825 and RFMD2959 support.
38  *      08-26-2003 Kyle Hsu    :  Modify BBuGetFrameTime() and BBvCalculateParameter().
39  *                                cancel the setting of MAC_REG_SOFTPWRCTL on BBbVT3253Init().
40  *                                Add the comments.
41  *      09-01-2003 Bryan YC Fan:  RF & BB tables updated.
42  *                                Modified BBvLoopbackOn & BBvLoopbackOff().
43  *
44  *
45  */
46
47 #include "tmacro.h"
48 #include "mac.h"
49 #include "baseband.h"
50 #include "srom.h"
51 #include "rf.h"
52
53 /*---------------------  Static Classes  ----------------------------*/
54
55 /*---------------------  Static Variables  --------------------------*/
56
57 /*---------------------  Static Functions  --------------------------*/
58
59 /*---------------------  Export Variables  --------------------------*/
60
61 /*---------------------  Static Definitions -------------------------*/
62
63 /*---------------------  Static Classes  ----------------------------*/
64
65 /*---------------------  Static Variables  --------------------------*/
66
67 #define CB_VT3253_INIT_FOR_RFMD 446
68 static unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = {
69         {0x00, 0x30},
70         {0x01, 0x00},
71         {0x02, 0x00},
72         {0x03, 0x00},
73         {0x04, 0x00},
74         {0x05, 0x00},
75         {0x06, 0x00},
76         {0x07, 0x00},
77         {0x08, 0x70},
78         {0x09, 0x45},
79         {0x0a, 0x2a},
80         {0x0b, 0x76},
81         {0x0c, 0x00},
82         {0x0d, 0x01},
83         {0x0e, 0x80},
84         {0x0f, 0x00},
85         {0x10, 0x00},
86         {0x11, 0x00},
87         {0x12, 0x00},
88         {0x13, 0x00},
89         {0x14, 0x00},
90         {0x15, 0x00},
91         {0x16, 0x00},
92         {0x17, 0x00},
93         {0x18, 0x00},
94         {0x19, 0x00},
95         {0x1a, 0x00},
96         {0x1b, 0x9d},
97         {0x1c, 0x05},
98         {0x1d, 0x00},
99         {0x1e, 0x00},
100         {0x1f, 0x00},
101         {0x20, 0x00},
102         {0x21, 0x00},
103         {0x22, 0x00},
104         {0x23, 0x00},
105         {0x24, 0x00},
106         {0x25, 0x4a},
107         {0x26, 0x00},
108         {0x27, 0x00},
109         {0x28, 0x00},
110         {0x29, 0x00},
111         {0x2a, 0x00},
112         {0x2b, 0x00},
113         {0x2c, 0x00},
114         {0x2d, 0xa8},
115         {0x2e, 0x1a},
116         {0x2f, 0x0c},
117         {0x30, 0x26},
118         {0x31, 0x5b},
119         {0x32, 0x00},
120         {0x33, 0x00},
121         {0x34, 0x00},
122         {0x35, 0x00},
123         {0x36, 0xaa},
124         {0x37, 0xaa},
125         {0x38, 0xff},
126         {0x39, 0xff},
127         {0x3a, 0x00},
128         {0x3b, 0x00},
129         {0x3c, 0x00},
130         {0x3d, 0x0d},
131         {0x3e, 0x51},
132         {0x3f, 0x04},
133         {0x40, 0x00},
134         {0x41, 0x08},
135         {0x42, 0x00},
136         {0x43, 0x08},
137         {0x44, 0x06},
138         {0x45, 0x14},
139         {0x46, 0x05},
140         {0x47, 0x08},
141         {0x48, 0x00},
142         {0x49, 0x00},
143         {0x4a, 0x00},
144         {0x4b, 0x00},
145         {0x4c, 0x09},
146         {0x4d, 0x80},
147         {0x4e, 0x00},
148         {0x4f, 0xc5},
149         {0x50, 0x14},
150         {0x51, 0x19},
151         {0x52, 0x00},
152         {0x53, 0x00},
153         {0x54, 0x00},
154         {0x55, 0x00},
155         {0x56, 0x00},
156         {0x57, 0x00},
157         {0x58, 0x00},
158         {0x59, 0xb0},
159         {0x5a, 0x00},
160         {0x5b, 0x00},
161         {0x5c, 0x00},
162         {0x5d, 0x00},
163         {0x5e, 0x00},
164         {0x5f, 0x00},
165         {0x60, 0x44},
166         {0x61, 0x04},
167         {0x62, 0x00},
168         {0x63, 0x00},
169         {0x64, 0x00},
170         {0x65, 0x00},
171         {0x66, 0x04},
172         {0x67, 0xb7},
173         {0x68, 0x00},
174         {0x69, 0x00},
175         {0x6a, 0x00},
176         {0x6b, 0x00},
177         {0x6c, 0x00},
178         {0x6d, 0x03},
179         {0x6e, 0x01},
180         {0x6f, 0x00},
181         {0x70, 0x00},
182         {0x71, 0x00},
183         {0x72, 0x00},
184         {0x73, 0x00},
185         {0x74, 0x00},
186         {0x75, 0x00},
187         {0x76, 0x00},
188         {0x77, 0x00},
189         {0x78, 0x00},
190         {0x79, 0x00},
191         {0x7a, 0x00},
192         {0x7b, 0x00},
193         {0x7c, 0x00},
194         {0x7d, 0x00},
195         {0x7e, 0x00},
196         {0x7f, 0x00},
197         {0x80, 0x0b},
198         {0x81, 0x00},
199         {0x82, 0x3c},
200         {0x83, 0x00},
201         {0x84, 0x00},
202         {0x85, 0x00},
203         {0x86, 0x00},
204         {0x87, 0x00},
205         {0x88, 0x08},
206         {0x89, 0x00},
207         {0x8a, 0x08},
208         {0x8b, 0xa6},
209         {0x8c, 0x84},
210         {0x8d, 0x47},
211         {0x8e, 0xbb},
212         {0x8f, 0x02},
213         {0x90, 0x21},
214         {0x91, 0x0c},
215         {0x92, 0x04},
216         {0x93, 0x22},
217         {0x94, 0x00},
218         {0x95, 0x00},
219         {0x96, 0x00},
220         {0x97, 0xeb},
221         {0x98, 0x00},
222         {0x99, 0x00},
223         {0x9a, 0x00},
224         {0x9b, 0x00},
225         {0x9c, 0x00},
226         {0x9d, 0x00},
227         {0x9e, 0x00},
228         {0x9f, 0x00},
229         {0xa0, 0x00},
230         {0xa1, 0x00},
231         {0xa2, 0x00},
232         {0xa3, 0x00},
233         {0xa4, 0x00},
234         {0xa5, 0x00},
235         {0xa6, 0x10},
236         {0xa7, 0x04},
237         {0xa8, 0x10},
238         {0xa9, 0x00},
239         {0xaa, 0x8f},
240         {0xab, 0x00},
241         {0xac, 0x00},
242         {0xad, 0x00},
243         {0xae, 0x00},
244         {0xaf, 0x80},
245         {0xb0, 0x38},
246         {0xb1, 0x00},
247         {0xb2, 0x00},
248         {0xb3, 0x00},
249         {0xb4, 0xee},
250         {0xb5, 0xff},
251         {0xb6, 0x10},
252         {0xb7, 0x00},
253         {0xb8, 0x00},
254         {0xb9, 0x00},
255         {0xba, 0x00},
256         {0xbb, 0x03},
257         {0xbc, 0x00},
258         {0xbd, 0x00},
259         {0xbe, 0x00},
260         {0xbf, 0x00},
261         {0xc0, 0x10},
262         {0xc1, 0x10},
263         {0xc2, 0x18},
264         {0xc3, 0x20},
265         {0xc4, 0x10},
266         {0xc5, 0x00},
267         {0xc6, 0x22},
268         {0xc7, 0x14},
269         {0xc8, 0x0f},
270         {0xc9, 0x08},
271         {0xca, 0xa4},
272         {0xcb, 0xa7},
273         {0xcc, 0x3c},
274         {0xcd, 0x10},
275         {0xce, 0x20},
276         {0xcf, 0x00},
277         {0xd0, 0x00},
278         {0xd1, 0x10},
279         {0xd2, 0x00},
280         {0xd3, 0x00},
281         {0xd4, 0x10},
282         {0xd5, 0x33},
283         {0xd6, 0x70},
284         {0xd7, 0x01},
285         {0xd8, 0x00},
286         {0xd9, 0x00},
287         {0xda, 0x00},
288         {0xdb, 0x00},
289         {0xdc, 0x00},
290         {0xdd, 0x00},
291         {0xde, 0x00},
292         {0xdf, 0x00},
293         {0xe0, 0x00},
294         {0xe1, 0x00},
295         {0xe2, 0xcc},
296         {0xe3, 0x04},
297         {0xe4, 0x08},
298         {0xe5, 0x10},
299         {0xe6, 0x00},
300         {0xe7, 0x0e},
301         {0xe8, 0x88},
302         {0xe9, 0xd4},
303         {0xea, 0x05},
304         {0xeb, 0xf0},
305         {0xec, 0x79},
306         {0xed, 0x0f},
307         {0xee, 0x04},
308         {0xef, 0x04},
309         {0xf0, 0x00},
310         {0xf1, 0x00},
311         {0xf2, 0x00},
312         {0xf3, 0x00},
313         {0xf4, 0x00},
314         {0xf5, 0x00},
315         {0xf6, 0x00},
316         {0xf7, 0x00},
317         {0xf8, 0x00},
318         {0xf9, 0x00},
319         {0xF0, 0x00},
320         {0xF1, 0xF8},
321         {0xF0, 0x80},
322         {0xF0, 0x00},
323         {0xF1, 0xF4},
324         {0xF0, 0x81},
325         {0xF0, 0x01},
326         {0xF1, 0xF0},
327         {0xF0, 0x82},
328         {0xF0, 0x02},
329         {0xF1, 0xEC},
330         {0xF0, 0x83},
331         {0xF0, 0x03},
332         {0xF1, 0xE8},
333         {0xF0, 0x84},
334         {0xF0, 0x04},
335         {0xF1, 0xE4},
336         {0xF0, 0x85},
337         {0xF0, 0x05},
338         {0xF1, 0xE0},
339         {0xF0, 0x86},
340         {0xF0, 0x06},
341         {0xF1, 0xDC},
342         {0xF0, 0x87},
343         {0xF0, 0x07},
344         {0xF1, 0xD8},
345         {0xF0, 0x88},
346         {0xF0, 0x08},
347         {0xF1, 0xD4},
348         {0xF0, 0x89},
349         {0xF0, 0x09},
350         {0xF1, 0xD0},
351         {0xF0, 0x8A},
352         {0xF0, 0x0A},
353         {0xF1, 0xCC},
354         {0xF0, 0x8B},
355         {0xF0, 0x0B},
356         {0xF1, 0xC8},
357         {0xF0, 0x8C},
358         {0xF0, 0x0C},
359         {0xF1, 0xC4},
360         {0xF0, 0x8D},
361         {0xF0, 0x0D},
362         {0xF1, 0xC0},
363         {0xF0, 0x8E},
364         {0xF0, 0x0E},
365         {0xF1, 0xBC},
366         {0xF0, 0x8F},
367         {0xF0, 0x0F},
368         {0xF1, 0xB8},
369         {0xF0, 0x90},
370         {0xF0, 0x10},
371         {0xF1, 0xB4},
372         {0xF0, 0x91},
373         {0xF0, 0x11},
374         {0xF1, 0xB0},
375         {0xF0, 0x92},
376         {0xF0, 0x12},
377         {0xF1, 0xAC},
378         {0xF0, 0x93},
379         {0xF0, 0x13},
380         {0xF1, 0xA8},
381         {0xF0, 0x94},
382         {0xF0, 0x14},
383         {0xF1, 0xA4},
384         {0xF0, 0x95},
385         {0xF0, 0x15},
386         {0xF1, 0xA0},
387         {0xF0, 0x96},
388         {0xF0, 0x16},
389         {0xF1, 0x9C},
390         {0xF0, 0x97},
391         {0xF0, 0x17},
392         {0xF1, 0x98},
393         {0xF0, 0x98},
394         {0xF0, 0x18},
395         {0xF1, 0x94},
396         {0xF0, 0x99},
397         {0xF0, 0x19},
398         {0xF1, 0x90},
399         {0xF0, 0x9A},
400         {0xF0, 0x1A},
401         {0xF1, 0x8C},
402         {0xF0, 0x9B},
403         {0xF0, 0x1B},
404         {0xF1, 0x88},
405         {0xF0, 0x9C},
406         {0xF0, 0x1C},
407         {0xF1, 0x84},
408         {0xF0, 0x9D},
409         {0xF0, 0x1D},
410         {0xF1, 0x80},
411         {0xF0, 0x9E},
412         {0xF0, 0x1E},
413         {0xF1, 0x7C},
414         {0xF0, 0x9F},
415         {0xF0, 0x1F},
416         {0xF1, 0x78},
417         {0xF0, 0xA0},
418         {0xF0, 0x20},
419         {0xF1, 0x74},
420         {0xF0, 0xA1},
421         {0xF0, 0x21},
422         {0xF1, 0x70},
423         {0xF0, 0xA2},
424         {0xF0, 0x22},
425         {0xF1, 0x6C},
426         {0xF0, 0xA3},
427         {0xF0, 0x23},
428         {0xF1, 0x68},
429         {0xF0, 0xA4},
430         {0xF0, 0x24},
431         {0xF1, 0x64},
432         {0xF0, 0xA5},
433         {0xF0, 0x25},
434         {0xF1, 0x60},
435         {0xF0, 0xA6},
436         {0xF0, 0x26},
437         {0xF1, 0x5C},
438         {0xF0, 0xA7},
439         {0xF0, 0x27},
440         {0xF1, 0x58},
441         {0xF0, 0xA8},
442         {0xF0, 0x28},
443         {0xF1, 0x54},
444         {0xF0, 0xA9},
445         {0xF0, 0x29},
446         {0xF1, 0x50},
447         {0xF0, 0xAA},
448         {0xF0, 0x2A},
449         {0xF1, 0x4C},
450         {0xF0, 0xAB},
451         {0xF0, 0x2B},
452         {0xF1, 0x48},
453         {0xF0, 0xAC},
454         {0xF0, 0x2C},
455         {0xF1, 0x44},
456         {0xF0, 0xAD},
457         {0xF0, 0x2D},
458         {0xF1, 0x40},
459         {0xF0, 0xAE},
460         {0xF0, 0x2E},
461         {0xF1, 0x3C},
462         {0xF0, 0xAF},
463         {0xF0, 0x2F},
464         {0xF1, 0x38},
465         {0xF0, 0xB0},
466         {0xF0, 0x30},
467         {0xF1, 0x34},
468         {0xF0, 0xB1},
469         {0xF0, 0x31},
470         {0xF1, 0x30},
471         {0xF0, 0xB2},
472         {0xF0, 0x32},
473         {0xF1, 0x2C},
474         {0xF0, 0xB3},
475         {0xF0, 0x33},
476         {0xF1, 0x28},
477         {0xF0, 0xB4},
478         {0xF0, 0x34},
479         {0xF1, 0x24},
480         {0xF0, 0xB5},
481         {0xF0, 0x35},
482         {0xF1, 0x20},
483         {0xF0, 0xB6},
484         {0xF0, 0x36},
485         {0xF1, 0x1C},
486         {0xF0, 0xB7},
487         {0xF0, 0x37},
488         {0xF1, 0x18},
489         {0xF0, 0xB8},
490         {0xF0, 0x38},
491         {0xF1, 0x14},
492         {0xF0, 0xB9},
493         {0xF0, 0x39},
494         {0xF1, 0x10},
495         {0xF0, 0xBA},
496         {0xF0, 0x3A},
497         {0xF1, 0x0C},
498         {0xF0, 0xBB},
499         {0xF0, 0x3B},
500         {0xF1, 0x08},
501         {0xF0, 0x00},
502         {0xF0, 0x3C},
503         {0xF1, 0x04},
504         {0xF0, 0xBD},
505         {0xF0, 0x3D},
506         {0xF1, 0x00},
507         {0xF0, 0xBE},
508         {0xF0, 0x3E},
509         {0xF1, 0x00},
510         {0xF0, 0xBF},
511         {0xF0, 0x3F},
512         {0xF1, 0x00},
513         {0xF0, 0xC0},
514         {0xF0, 0x00},
515 };
516
517 #define CB_VT3253B0_INIT_FOR_RFMD 256
518 static unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = {
519         {0x00, 0x31},
520         {0x01, 0x00},
521         {0x02, 0x00},
522         {0x03, 0x00},
523         {0x04, 0x00},
524         {0x05, 0x81},
525         {0x06, 0x00},
526         {0x07, 0x00},
527         {0x08, 0x38},
528         {0x09, 0x45},
529         {0x0a, 0x2a},
530         {0x0b, 0x76},
531         {0x0c, 0x00},
532         {0x0d, 0x00},
533         {0x0e, 0x80},
534         {0x0f, 0x00},
535         {0x10, 0x00},
536         {0x11, 0x00},
537         {0x12, 0x00},
538         {0x13, 0x00},
539         {0x14, 0x00},
540         {0x15, 0x00},
541         {0x16, 0x00},
542         {0x17, 0x00},
543         {0x18, 0x00},
544         {0x19, 0x00},
545         {0x1a, 0x00},
546         {0x1b, 0x8e},
547         {0x1c, 0x06},
548         {0x1d, 0x00},
549         {0x1e, 0x00},
550         {0x1f, 0x00},
551         {0x20, 0x00},
552         {0x21, 0x00},
553         {0x22, 0x00},
554         {0x23, 0x00},
555         {0x24, 0x00},
556         {0x25, 0x4a},
557         {0x26, 0x00},
558         {0x27, 0x00},
559         {0x28, 0x00},
560         {0x29, 0x00},
561         {0x2a, 0x00},
562         {0x2b, 0x00},
563         {0x2c, 0x00},
564         {0x2d, 0x34},
565         {0x2e, 0x18},
566         {0x2f, 0x0c},
567         {0x30, 0x26},
568         {0x31, 0x5b},
569         {0x32, 0x00},
570         {0x33, 0x00},
571         {0x34, 0x00},
572         {0x35, 0x00},
573         {0x36, 0xaa},
574         {0x37, 0xaa},
575         {0x38, 0xff},
576         {0x39, 0xff},
577         {0x3a, 0xf8},
578         {0x3b, 0x00},
579         {0x3c, 0x00},
580         {0x3d, 0x09},
581         {0x3e, 0x0d},
582         {0x3f, 0x04},
583         {0x40, 0x00},
584         {0x41, 0x08},
585         {0x42, 0x00},
586         {0x43, 0x08},
587         {0x44, 0x08},
588         {0x45, 0x14},
589         {0x46, 0x05},
590         {0x47, 0x08},
591         {0x48, 0x00},
592         {0x49, 0x00},
593         {0x4a, 0x00},
594         {0x4b, 0x00},
595         {0x4c, 0x09},
596         {0x4d, 0x80},
597         {0x4e, 0x00},
598         {0x4f, 0xc5},
599         {0x50, 0x14},
600         {0x51, 0x19},
601         {0x52, 0x00},
602         {0x53, 0x00},
603         {0x54, 0x00},
604         {0x55, 0x00},
605         {0x56, 0x00},
606         {0x57, 0x00},
607         {0x58, 0x00},
608         {0x59, 0xb0},
609         {0x5a, 0x00},
610         {0x5b, 0x00},
611         {0x5c, 0x00},
612         {0x5d, 0x00},
613         {0x5e, 0x00},
614         {0x5f, 0x00},
615         {0x60, 0x39},
616         {0x61, 0x83},
617         {0x62, 0x00},
618         {0x63, 0x00},
619         {0x64, 0x00},
620         {0x65, 0x00},
621         {0x66, 0xc0},
622         {0x67, 0x49},
623         {0x68, 0x00},
624         {0x69, 0x00},
625         {0x6a, 0x00},
626         {0x6b, 0x00},
627         {0x6c, 0x00},
628         {0x6d, 0x03},
629         {0x6e, 0x01},
630         {0x6f, 0x00},
631         {0x70, 0x00},
632         {0x71, 0x00},
633         {0x72, 0x00},
634         {0x73, 0x00},
635         {0x74, 0x00},
636         {0x75, 0x00},
637         {0x76, 0x00},
638         {0x77, 0x00},
639         {0x78, 0x00},
640         {0x79, 0x00},
641         {0x7a, 0x00},
642         {0x7b, 0x00},
643         {0x7c, 0x00},
644         {0x7d, 0x00},
645         {0x7e, 0x00},
646         {0x7f, 0x00},
647         {0x80, 0x89},
648         {0x81, 0x00},
649         {0x82, 0x0e},
650         {0x83, 0x00},
651         {0x84, 0x00},
652         {0x85, 0x00},
653         {0x86, 0x00},
654         {0x87, 0x00},
655         {0x88, 0x08},
656         {0x89, 0x00},
657         {0x8a, 0x0e},
658         {0x8b, 0xa7},
659         {0x8c, 0x88},
660         {0x8d, 0x47},
661         {0x8e, 0xaa},
662         {0x8f, 0x02},
663         {0x90, 0x23},
664         {0x91, 0x0c},
665         {0x92, 0x06},
666         {0x93, 0x08},
667         {0x94, 0x00},
668         {0x95, 0x00},
669         {0x96, 0x00},
670         {0x97, 0xeb},
671         {0x98, 0x00},
672         {0x99, 0x00},
673         {0x9a, 0x00},
674         {0x9b, 0x00},
675         {0x9c, 0x00},
676         {0x9d, 0x00},
677         {0x9e, 0x00},
678         {0x9f, 0x00},
679         {0xa0, 0x00},
680         {0xa1, 0x00},
681         {0xa2, 0x00},
682         {0xa3, 0xcd},
683         {0xa4, 0x07},
684         {0xa5, 0x33},
685         {0xa6, 0x18},
686         {0xa7, 0x00},
687         {0xa8, 0x18},
688         {0xa9, 0x00},
689         {0xaa, 0x28},
690         {0xab, 0x00},
691         {0xac, 0x00},
692         {0xad, 0x00},
693         {0xae, 0x00},
694         {0xaf, 0x18},
695         {0xb0, 0x38},
696         {0xb1, 0x30},
697         {0xb2, 0x00},
698         {0xb3, 0x00},
699         {0xb4, 0x00},
700         {0xb5, 0x00},
701         {0xb6, 0x84},
702         {0xb7, 0xfd},
703         {0xb8, 0x00},
704         {0xb9, 0x00},
705         {0xba, 0x00},
706         {0xbb, 0x03},
707         {0xbc, 0x00},
708         {0xbd, 0x00},
709         {0xbe, 0x00},
710         {0xbf, 0x00},
711         {0xc0, 0x10},
712         {0xc1, 0x20},
713         {0xc2, 0x18},
714         {0xc3, 0x20},
715         {0xc4, 0x10},
716         {0xc5, 0x2c},
717         {0xc6, 0x1e},
718         {0xc7, 0x10},
719         {0xc8, 0x12},
720         {0xc9, 0x01},
721         {0xca, 0x6f},
722         {0xcb, 0xa7},
723         {0xcc, 0x3c},
724         {0xcd, 0x10},
725         {0xce, 0x00},
726         {0xcf, 0x22},
727         {0xd0, 0x00},
728         {0xd1, 0x10},
729         {0xd2, 0x00},
730         {0xd3, 0x00},
731         {0xd4, 0x10},
732         {0xd5, 0x33},
733         {0xd6, 0x80},
734         {0xd7, 0x21},
735         {0xd8, 0x00},
736         {0xd9, 0x00},
737         {0xda, 0x00},
738         {0xdb, 0x00},
739         {0xdc, 0x00},
740         {0xdd, 0x00},
741         {0xde, 0x00},
742         {0xdf, 0x00},
743         {0xe0, 0x00},
744         {0xe1, 0xB3},
745         {0xe2, 0x00},
746         {0xe3, 0x00},
747         {0xe4, 0x00},
748         {0xe5, 0x10},
749         {0xe6, 0x00},
750         {0xe7, 0x18},
751         {0xe8, 0x08},
752         {0xe9, 0xd4},
753         {0xea, 0x00},
754         {0xeb, 0xff},
755         {0xec, 0x79},
756         {0xed, 0x10},
757         {0xee, 0x30},
758         {0xef, 0x02},
759         {0xf0, 0x00},
760         {0xf1, 0x09},
761         {0xf2, 0x00},
762         {0xf3, 0x00},
763         {0xf4, 0x00},
764         {0xf5, 0x00},
765         {0xf6, 0x00},
766         {0xf7, 0x00},
767         {0xf8, 0x00},
768         {0xf9, 0x00},
769         {0xfa, 0x00},
770         {0xfb, 0x00},
771         {0xfc, 0x00},
772         {0xfd, 0x00},
773         {0xfe, 0x00},
774         {0xff, 0x00},
775 };
776
777 #define CB_VT3253B0_AGC_FOR_RFMD2959 195
778 /* For RFMD2959 */
779 static unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = {
780         {0xF0, 0x00},
781         {0xF1, 0x3E},
782         {0xF0, 0x80},
783         {0xF0, 0x00},
784         {0xF1, 0x3E},
785         {0xF0, 0x81},
786         {0xF0, 0x01},
787         {0xF1, 0x3E},
788         {0xF0, 0x82},
789         {0xF0, 0x02},
790         {0xF1, 0x3E},
791         {0xF0, 0x83},
792         {0xF0, 0x03},
793         {0xF1, 0x3B},
794         {0xF0, 0x84},
795         {0xF0, 0x04},
796         {0xF1, 0x39},
797         {0xF0, 0x85},
798         {0xF0, 0x05},
799         {0xF1, 0x38},
800         {0xF0, 0x86},
801         {0xF0, 0x06},
802         {0xF1, 0x37},
803         {0xF0, 0x87},
804         {0xF0, 0x07},
805         {0xF1, 0x36},
806         {0xF0, 0x88},
807         {0xF0, 0x08},
808         {0xF1, 0x35},
809         {0xF0, 0x89},
810         {0xF0, 0x09},
811         {0xF1, 0x35},
812         {0xF0, 0x8A},
813         {0xF0, 0x0A},
814         {0xF1, 0x34},
815         {0xF0, 0x8B},
816         {0xF0, 0x0B},
817         {0xF1, 0x34},
818         {0xF0, 0x8C},
819         {0xF0, 0x0C},
820         {0xF1, 0x33},
821         {0xF0, 0x8D},
822         {0xF0, 0x0D},
823         {0xF1, 0x32},
824         {0xF0, 0x8E},
825         {0xF0, 0x0E},
826         {0xF1, 0x31},
827         {0xF0, 0x8F},
828         {0xF0, 0x0F},
829         {0xF1, 0x30},
830         {0xF0, 0x90},
831         {0xF0, 0x10},
832         {0xF1, 0x2F},
833         {0xF0, 0x91},
834         {0xF0, 0x11},
835         {0xF1, 0x2F},
836         {0xF0, 0x92},
837         {0xF0, 0x12},
838         {0xF1, 0x2E},
839         {0xF0, 0x93},
840         {0xF0, 0x13},
841         {0xF1, 0x2D},
842         {0xF0, 0x94},
843         {0xF0, 0x14},
844         {0xF1, 0x2C},
845         {0xF0, 0x95},
846         {0xF0, 0x15},
847         {0xF1, 0x2B},
848         {0xF0, 0x96},
849         {0xF0, 0x16},
850         {0xF1, 0x2B},
851         {0xF0, 0x97},
852         {0xF0, 0x17},
853         {0xF1, 0x2A},
854         {0xF0, 0x98},
855         {0xF0, 0x18},
856         {0xF1, 0x29},
857         {0xF0, 0x99},
858         {0xF0, 0x19},
859         {0xF1, 0x28},
860         {0xF0, 0x9A},
861         {0xF0, 0x1A},
862         {0xF1, 0x27},
863         {0xF0, 0x9B},
864         {0xF0, 0x1B},
865         {0xF1, 0x26},
866         {0xF0, 0x9C},
867         {0xF0, 0x1C},
868         {0xF1, 0x25},
869         {0xF0, 0x9D},
870         {0xF0, 0x1D},
871         {0xF1, 0x24},
872         {0xF0, 0x9E},
873         {0xF0, 0x1E},
874         {0xF1, 0x24},
875         {0xF0, 0x9F},
876         {0xF0, 0x1F},
877         {0xF1, 0x23},
878         {0xF0, 0xA0},
879         {0xF0, 0x20},
880         {0xF1, 0x22},
881         {0xF0, 0xA1},
882         {0xF0, 0x21},
883         {0xF1, 0x21},
884         {0xF0, 0xA2},
885         {0xF0, 0x22},
886         {0xF1, 0x20},
887         {0xF0, 0xA3},
888         {0xF0, 0x23},
889         {0xF1, 0x20},
890         {0xF0, 0xA4},
891         {0xF0, 0x24},
892         {0xF1, 0x1F},
893         {0xF0, 0xA5},
894         {0xF0, 0x25},
895         {0xF1, 0x1E},
896         {0xF0, 0xA6},
897         {0xF0, 0x26},
898         {0xF1, 0x1D},
899         {0xF0, 0xA7},
900         {0xF0, 0x27},
901         {0xF1, 0x1C},
902         {0xF0, 0xA8},
903         {0xF0, 0x28},
904         {0xF1, 0x1B},
905         {0xF0, 0xA9},
906         {0xF0, 0x29},
907         {0xF1, 0x1B},
908         {0xF0, 0xAA},
909         {0xF0, 0x2A},
910         {0xF1, 0x1A},
911         {0xF0, 0xAB},
912         {0xF0, 0x2B},
913         {0xF1, 0x1A},
914         {0xF0, 0xAC},
915         {0xF0, 0x2C},
916         {0xF1, 0x19},
917         {0xF0, 0xAD},
918         {0xF0, 0x2D},
919         {0xF1, 0x18},
920         {0xF0, 0xAE},
921         {0xF0, 0x2E},
922         {0xF1, 0x17},
923         {0xF0, 0xAF},
924         {0xF0, 0x2F},
925         {0xF1, 0x16},
926         {0xF0, 0xB0},
927         {0xF0, 0x30},
928         {0xF1, 0x15},
929         {0xF0, 0xB1},
930         {0xF0, 0x31},
931         {0xF1, 0x15},
932         {0xF0, 0xB2},
933         {0xF0, 0x32},
934         {0xF1, 0x15},
935         {0xF0, 0xB3},
936         {0xF0, 0x33},
937         {0xF1, 0x14},
938         {0xF0, 0xB4},
939         {0xF0, 0x34},
940         {0xF1, 0x13},
941         {0xF0, 0xB5},
942         {0xF0, 0x35},
943         {0xF1, 0x12},
944         {0xF0, 0xB6},
945         {0xF0, 0x36},
946         {0xF1, 0x11},
947         {0xF0, 0xB7},
948         {0xF0, 0x37},
949         {0xF1, 0x10},
950         {0xF0, 0xB8},
951         {0xF0, 0x38},
952         {0xF1, 0x0F},
953         {0xF0, 0xB9},
954         {0xF0, 0x39},
955         {0xF1, 0x0E},
956         {0xF0, 0xBA},
957         {0xF0, 0x3A},
958         {0xF1, 0x0D},
959         {0xF0, 0xBB},
960         {0xF0, 0x3B},
961         {0xF1, 0x0C},
962         {0xF0, 0xBC},
963         {0xF0, 0x3C},
964         {0xF1, 0x0B},
965         {0xF0, 0xBD},
966         {0xF0, 0x3D},
967         {0xF1, 0x0B},
968         {0xF0, 0xBE},
969         {0xF0, 0x3E},
970         {0xF1, 0x0A},
971         {0xF0, 0xBF},
972         {0xF0, 0x3F},
973         {0xF1, 0x09},
974         {0xF0, 0x00},
975 };
976
977 #define CB_VT3253B0_INIT_FOR_AIROHA2230 256
978 /* For AIROHA */
979 static unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = {
980         {0x00, 0x31},
981         {0x01, 0x00},
982         {0x02, 0x00},
983         {0x03, 0x00},
984         {0x04, 0x00},
985         {0x05, 0x80},
986         {0x06, 0x00},
987         {0x07, 0x00},
988         {0x08, 0x70},
989         {0x09, 0x41},
990         {0x0a, 0x2A},
991         {0x0b, 0x76},
992         {0x0c, 0x00},
993         {0x0d, 0x00},
994         {0x0e, 0x80},
995         {0x0f, 0x00},
996         {0x10, 0x00},
997         {0x11, 0x00},
998         {0x12, 0x00},
999         {0x13, 0x00},
1000         {0x14, 0x00},
1001         {0x15, 0x00},
1002         {0x16, 0x00},
1003         {0x17, 0x00},
1004         {0x18, 0x00},
1005         {0x19, 0x00},
1006         {0x1a, 0x00},
1007         {0x1b, 0x8f},
1008         {0x1c, 0x09},
1009         {0x1d, 0x00},
1010         {0x1e, 0x00},
1011         {0x1f, 0x00},
1012         {0x20, 0x00},
1013         {0x21, 0x00},
1014         {0x22, 0x00},
1015         {0x23, 0x00},
1016         {0x24, 0x00},
1017         {0x25, 0x4a},
1018         {0x26, 0x00},
1019         {0x27, 0x00},
1020         {0x28, 0x00},
1021         {0x29, 0x00},
1022         {0x2a, 0x00},
1023         {0x2b, 0x00},
1024         {0x2c, 0x00},
1025         {0x2d, 0x4a},
1026         {0x2e, 0x00},
1027         {0x2f, 0x0a},
1028         {0x30, 0x26},
1029         {0x31, 0x5b},
1030         {0x32, 0x00},
1031         {0x33, 0x00},
1032         {0x34, 0x00},
1033         {0x35, 0x00},
1034         {0x36, 0xaa},
1035         {0x37, 0xaa},
1036         {0x38, 0xff},
1037         {0x39, 0xff},
1038         {0x3a, 0x79},
1039         {0x3b, 0x00},
1040         {0x3c, 0x00},
1041         {0x3d, 0x0b},
1042         {0x3e, 0x48},
1043         {0x3f, 0x04},
1044         {0x40, 0x00},
1045         {0x41, 0x08},
1046         {0x42, 0x00},
1047         {0x43, 0x08},
1048         {0x44, 0x08},
1049         {0x45, 0x14},
1050         {0x46, 0x05},
1051         {0x47, 0x09},
1052         {0x48, 0x00},
1053         {0x49, 0x00},
1054         {0x4a, 0x00},
1055         {0x4b, 0x00},
1056         {0x4c, 0x09},
1057         {0x4d, 0x73},
1058         {0x4e, 0x00},
1059         {0x4f, 0xc5},
1060         {0x50, 0x15},
1061         {0x51, 0x19},
1062         {0x52, 0x00},
1063         {0x53, 0x00},
1064         {0x54, 0x00},
1065         {0x55, 0x00},
1066         {0x56, 0x00},
1067         {0x57, 0x00},
1068         {0x58, 0x00},
1069         {0x59, 0xb0},
1070         {0x5a, 0x00},
1071         {0x5b, 0x00},
1072         {0x5c, 0x00},
1073         {0x5d, 0x00},
1074         {0x5e, 0x00},
1075         {0x5f, 0x00},
1076         {0x60, 0xe4},
1077         {0x61, 0x80},
1078         {0x62, 0x00},
1079         {0x63, 0x00},
1080         {0x64, 0x00},
1081         {0x65, 0x00},
1082         {0x66, 0x98},
1083         {0x67, 0x0a},
1084         {0x68, 0x00},
1085         {0x69, 0x00},
1086         {0x6a, 0x00},
1087         {0x6b, 0x00},
1088         {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
1089         {0x6d, 0x03},
1090         {0x6e, 0x01},
1091         {0x6f, 0x00},
1092         {0x70, 0x00},
1093         {0x71, 0x00},
1094         {0x72, 0x00},
1095         {0x73, 0x00},
1096         {0x74, 0x00},
1097         {0x75, 0x00},
1098         {0x76, 0x00},
1099         {0x77, 0x00},
1100         {0x78, 0x00},
1101         {0x79, 0x00},
1102         {0x7a, 0x00},
1103         {0x7b, 0x00},
1104         {0x7c, 0x00},
1105         {0x7d, 0x00},
1106         {0x7e, 0x00},
1107         {0x7f, 0x00},
1108         {0x80, 0x8c},
1109         {0x81, 0x01},
1110         {0x82, 0x09},
1111         {0x83, 0x00},
1112         {0x84, 0x00},
1113         {0x85, 0x00},
1114         {0x86, 0x00},
1115         {0x87, 0x00},
1116         {0x88, 0x08},
1117         {0x89, 0x00},
1118         {0x8a, 0x0f},
1119         {0x8b, 0xb7},
1120         {0x8c, 0x88},
1121         {0x8d, 0x47},
1122         {0x8e, 0xaa},
1123         {0x8f, 0x02},
1124         {0x90, 0x22},
1125         {0x91, 0x00},
1126         {0x92, 0x00},
1127         {0x93, 0x00},
1128         {0x94, 0x00},
1129         {0x95, 0x00},
1130         {0x96, 0x00},
1131         {0x97, 0xeb},
1132         {0x98, 0x00},
1133         {0x99, 0x00},
1134         {0x9a, 0x00},
1135         {0x9b, 0x00},
1136         {0x9c, 0x00},
1137         {0x9d, 0x00},
1138         {0x9e, 0x00},
1139         {0x9f, 0x01},
1140         {0xa0, 0x00},
1141         {0xa1, 0x00},
1142         {0xa2, 0x00},
1143         {0xa3, 0x00},
1144         {0xa4, 0x00},
1145         {0xa5, 0x00},
1146         {0xa6, 0x10},
1147         {0xa7, 0x00},
1148         {0xa8, 0x18},
1149         {0xa9, 0x00},
1150         {0xaa, 0x00},
1151         {0xab, 0x00},
1152         {0xac, 0x00},
1153         {0xad, 0x00},
1154         {0xae, 0x00},
1155         {0xaf, 0x18},
1156         {0xb0, 0x38},
1157         {0xb1, 0x30},
1158         {0xb2, 0x00},
1159         {0xb3, 0x00},
1160         {0xb4, 0xff},
1161         {0xb5, 0x0f},
1162         {0xb6, 0xe4},
1163         {0xb7, 0xe2},
1164         {0xb8, 0x00},
1165         {0xb9, 0x00},
1166         {0xba, 0x00},
1167         {0xbb, 0x03},
1168         {0xbc, 0x01},
1169         {0xbd, 0x00},
1170         {0xbe, 0x00},
1171         {0xbf, 0x00},
1172         {0xc0, 0x18},
1173         {0xc1, 0x20},
1174         {0xc2, 0x07},
1175         {0xc3, 0x18},
1176         {0xc4, 0xff},
1177         {0xc5, 0x2c},
1178         {0xc6, 0x0c},
1179         {0xc7, 0x0a},
1180         {0xc8, 0x0e},
1181         {0xc9, 0x01},
1182         {0xca, 0x68},
1183         {0xcb, 0xa7},
1184         {0xcc, 0x3c},
1185         {0xcd, 0x10},
1186         {0xce, 0x00},
1187         {0xcf, 0x25},
1188         {0xd0, 0x40},
1189         {0xd1, 0x12},
1190         {0xd2, 0x00},
1191         {0xd3, 0x00},
1192         {0xd4, 0x10},
1193         {0xd5, 0x28},
1194         {0xd6, 0x80},
1195         {0xd7, 0x2A},
1196         {0xd8, 0x00},
1197         {0xd9, 0x00},
1198         {0xda, 0x00},
1199         {0xdb, 0x00},
1200         {0xdc, 0x00},
1201         {0xdd, 0x00},
1202         {0xde, 0x00},
1203         {0xdf, 0x00},
1204         {0xe0, 0x00},
1205         {0xe1, 0xB3},
1206         {0xe2, 0x00},
1207         {0xe3, 0x00},
1208         {0xe4, 0x00},
1209         {0xe5, 0x10},
1210         {0xe6, 0x00},
1211         {0xe7, 0x1C},
1212         {0xe8, 0x00},
1213         {0xe9, 0xf4},
1214         {0xea, 0x00},
1215         {0xeb, 0xff},
1216         {0xec, 0x79},
1217         {0xed, 0x20},
1218         {0xee, 0x30},
1219         {0xef, 0x01},
1220         {0xf0, 0x00},
1221         {0xf1, 0x3e},
1222         {0xf2, 0x00},
1223         {0xf3, 0x00},
1224         {0xf4, 0x00},
1225         {0xf5, 0x00},
1226         {0xf6, 0x00},
1227         {0xf7, 0x00},
1228         {0xf8, 0x00},
1229         {0xf9, 0x00},
1230         {0xfa, 0x00},
1231         {0xfb, 0x00},
1232         {0xfc, 0x00},
1233         {0xfd, 0x00},
1234         {0xfe, 0x00},
1235         {0xff, 0x00},
1236 };
1237
1238 #define CB_VT3253B0_INIT_FOR_UW2451 256
1239 /* For UW2451 */
1240 static unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = {
1241         {0x00, 0x31},
1242         {0x01, 0x00},
1243         {0x02, 0x00},
1244         {0x03, 0x00},
1245         {0x04, 0x00},
1246         {0x05, 0x81},
1247         {0x06, 0x00},
1248         {0x07, 0x00},
1249         {0x08, 0x38},
1250         {0x09, 0x45},
1251         {0x0a, 0x28},
1252         {0x0b, 0x76},
1253         {0x0c, 0x00},
1254         {0x0d, 0x00},
1255         {0x0e, 0x80},
1256         {0x0f, 0x00},
1257         {0x10, 0x00},
1258         {0x11, 0x00},
1259         {0x12, 0x00},
1260         {0x13, 0x00},
1261         {0x14, 0x00},
1262         {0x15, 0x00},
1263         {0x16, 0x00},
1264         {0x17, 0x00},
1265         {0x18, 0x00},
1266         {0x19, 0x00},
1267         {0x1a, 0x00},
1268         {0x1b, 0x8f},
1269         {0x1c, 0x0f},
1270         {0x1d, 0x00},
1271         {0x1e, 0x00},
1272         {0x1f, 0x00},
1273         {0x20, 0x00},
1274         {0x21, 0x00},
1275         {0x22, 0x00},
1276         {0x23, 0x00},
1277         {0x24, 0x00},
1278         {0x25, 0x4a},
1279         {0x26, 0x00},
1280         {0x27, 0x00},
1281         {0x28, 0x00},
1282         {0x29, 0x00},
1283         {0x2a, 0x00},
1284         {0x2b, 0x00},
1285         {0x2c, 0x00},
1286         {0x2d, 0x18},
1287         {0x2e, 0x00},
1288         {0x2f, 0x0a},
1289         {0x30, 0x26},
1290         {0x31, 0x5b},
1291         {0x32, 0x00},
1292         {0x33, 0x00},
1293         {0x34, 0x00},
1294         {0x35, 0x00},
1295         {0x36, 0xaa},
1296         {0x37, 0xaa},
1297         {0x38, 0xff},
1298         {0x39, 0xff},
1299         {0x3a, 0x00},
1300         {0x3b, 0x00},
1301         {0x3c, 0x00},
1302         {0x3d, 0x03},
1303         {0x3e, 0x1d},
1304         {0x3f, 0x04},
1305         {0x40, 0x00},
1306         {0x41, 0x08},
1307         {0x42, 0x00},
1308         {0x43, 0x08},
1309         {0x44, 0x08},
1310         {0x45, 0x14},
1311         {0x46, 0x05},
1312         {0x47, 0x09},
1313         {0x48, 0x00},
1314         {0x49, 0x00},
1315         {0x4a, 0x00},
1316         {0x4b, 0x00},
1317         {0x4c, 0x09},
1318         {0x4d, 0x90},
1319         {0x4e, 0x00},
1320         {0x4f, 0xc5},
1321         {0x50, 0x15},
1322         {0x51, 0x19},
1323         {0x52, 0x00},
1324         {0x53, 0x00},
1325         {0x54, 0x00},
1326         {0x55, 0x00},
1327         {0x56, 0x00},
1328         {0x57, 0x00},
1329         {0x58, 0x00},
1330         {0x59, 0xb0},
1331         {0x5a, 0x00},
1332         {0x5b, 0x00},
1333         {0x5c, 0x00},
1334         {0x5d, 0x00},
1335         {0x5e, 0x00},
1336         {0x5f, 0x00},
1337         {0x60, 0xb3},
1338         {0x61, 0x81},
1339         {0x62, 0x00},
1340         {0x63, 0x00},
1341         {0x64, 0x00},
1342         {0x65, 0x00},
1343         {0x66, 0x57},
1344         {0x67, 0x6c},
1345         {0x68, 0x00},
1346         {0x69, 0x00},
1347         {0x6a, 0x00},
1348         {0x6b, 0x00},
1349         {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
1350         {0x6d, 0x03},
1351         {0x6e, 0x01},
1352         {0x6f, 0x00},
1353         {0x70, 0x00},
1354         {0x71, 0x00},
1355         {0x72, 0x00},
1356         {0x73, 0x00},
1357         {0x74, 0x00},
1358         {0x75, 0x00},
1359         {0x76, 0x00},
1360         {0x77, 0x00},
1361         {0x78, 0x00},
1362         {0x79, 0x00},
1363         {0x7a, 0x00},
1364         {0x7b, 0x00},
1365         {0x7c, 0x00},
1366         {0x7d, 0x00},
1367         {0x7e, 0x00},
1368         {0x7f, 0x00},
1369         {0x80, 0x8c},
1370         {0x81, 0x00},
1371         {0x82, 0x0e},
1372         {0x83, 0x00},
1373         {0x84, 0x00},
1374         {0x85, 0x00},
1375         {0x86, 0x00},
1376         {0x87, 0x00},
1377         {0x88, 0x08},
1378         {0x89, 0x00},
1379         {0x8a, 0x0e},
1380         {0x8b, 0xa7},
1381         {0x8c, 0x88},
1382         {0x8d, 0x47},
1383         {0x8e, 0xaa},
1384         {0x8f, 0x02},
1385         {0x90, 0x00},
1386         {0x91, 0x00},
1387         {0x92, 0x00},
1388         {0x93, 0x00},
1389         {0x94, 0x00},
1390         {0x95, 0x00},
1391         {0x96, 0x00},
1392         {0x97, 0xe3},
1393         {0x98, 0x00},
1394         {0x99, 0x00},
1395         {0x9a, 0x00},
1396         {0x9b, 0x00},
1397         {0x9c, 0x00},
1398         {0x9d, 0x00},
1399         {0x9e, 0x00},
1400         {0x9f, 0x00},
1401         {0xa0, 0x00},
1402         {0xa1, 0x00},
1403         {0xa2, 0x00},
1404         {0xa3, 0x00},
1405         {0xa4, 0x00},
1406         {0xa5, 0x00},
1407         {0xa6, 0x10},
1408         {0xa7, 0x00},
1409         {0xa8, 0x18},
1410         {0xa9, 0x00},
1411         {0xaa, 0x00},
1412         {0xab, 0x00},
1413         {0xac, 0x00},
1414         {0xad, 0x00},
1415         {0xae, 0x00},
1416         {0xaf, 0x18},
1417         {0xb0, 0x18},
1418         {0xb1, 0x30},
1419         {0xb2, 0x00},
1420         {0xb3, 0x00},
1421         {0xb4, 0x00},
1422         {0xb5, 0x00},
1423         {0xb6, 0x00},
1424         {0xb7, 0x00},
1425         {0xb8, 0x00},
1426         {0xb9, 0x00},
1427         {0xba, 0x00},
1428         {0xbb, 0x03},
1429         {0xbc, 0x01},
1430         {0xbd, 0x00},
1431         {0xbe, 0x00},
1432         {0xbf, 0x00},
1433         {0xc0, 0x10},
1434         {0xc1, 0x20},
1435         {0xc2, 0x00},
1436         {0xc3, 0x20},
1437         {0xc4, 0x00},
1438         {0xc5, 0x2c},
1439         {0xc6, 0x1c},
1440         {0xc7, 0x10},
1441         {0xc8, 0x10},
1442         {0xc9, 0x01},
1443         {0xca, 0x68},
1444         {0xcb, 0xa7},
1445         {0xcc, 0x3c},
1446         {0xcd, 0x09},
1447         {0xce, 0x00},
1448         {0xcf, 0x20},
1449         {0xd0, 0x40},
1450         {0xd1, 0x10},
1451         {0xd2, 0x00},
1452         {0xd3, 0x00},
1453         {0xd4, 0x20},
1454         {0xd5, 0x28},
1455         {0xd6, 0xa0},
1456         {0xd7, 0x2a},
1457         {0xd8, 0x00},
1458         {0xd9, 0x00},
1459         {0xda, 0x00},
1460         {0xdb, 0x00},
1461         {0xdc, 0x00},
1462         {0xdd, 0x00},
1463         {0xde, 0x00},
1464         {0xdf, 0x00},
1465         {0xe0, 0x00},
1466         {0xe1, 0xd3},
1467         {0xe2, 0xc0},
1468         {0xe3, 0x00},
1469         {0xe4, 0x00},
1470         {0xe5, 0x10},
1471         {0xe6, 0x00},
1472         {0xe7, 0x12},
1473         {0xe8, 0x12},
1474         {0xe9, 0x34},
1475         {0xea, 0x00},
1476         {0xeb, 0xff},
1477         {0xec, 0x79},
1478         {0xed, 0x20},
1479         {0xee, 0x30},
1480         {0xef, 0x01},
1481         {0xf0, 0x00},
1482         {0xf1, 0x3e},
1483         {0xf2, 0x00},
1484         {0xf3, 0x00},
1485         {0xf4, 0x00},
1486         {0xf5, 0x00},
1487         {0xf6, 0x00},
1488         {0xf7, 0x00},
1489         {0xf8, 0x00},
1490         {0xf9, 0x00},
1491         {0xfa, 0x00},
1492         {0xfb, 0x00},
1493         {0xfc, 0x00},
1494         {0xfd, 0x00},
1495         {0xfe, 0x00},
1496         {0xff, 0x00},
1497 };
1498
1499 #define CB_VT3253B0_AGC 193
1500 /* For AIROHA */
1501 static unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = {
1502         {0xF0, 0x00},
1503         {0xF1, 0x00},
1504         {0xF0, 0x80},
1505         {0xF0, 0x01},
1506         {0xF1, 0x00},
1507         {0xF0, 0x81},
1508         {0xF0, 0x02},
1509         {0xF1, 0x02},
1510         {0xF0, 0x82},
1511         {0xF0, 0x03},
1512         {0xF1, 0x04},
1513         {0xF0, 0x83},
1514         {0xF0, 0x03},
1515         {0xF1, 0x04},
1516         {0xF0, 0x84},
1517         {0xF0, 0x04},
1518         {0xF1, 0x06},
1519         {0xF0, 0x85},
1520         {0xF0, 0x05},
1521         {0xF1, 0x06},
1522         {0xF0, 0x86},
1523         {0xF0, 0x06},
1524         {0xF1, 0x06},
1525         {0xF0, 0x87},
1526         {0xF0, 0x07},
1527         {0xF1, 0x08},
1528         {0xF0, 0x88},
1529         {0xF0, 0x08},
1530         {0xF1, 0x08},
1531         {0xF0, 0x89},
1532         {0xF0, 0x09},
1533         {0xF1, 0x0A},
1534         {0xF0, 0x8A},
1535         {0xF0, 0x0A},
1536         {0xF1, 0x0A},
1537         {0xF0, 0x8B},
1538         {0xF0, 0x0B},
1539         {0xF1, 0x0C},
1540         {0xF0, 0x8C},
1541         {0xF0, 0x0C},
1542         {0xF1, 0x0C},
1543         {0xF0, 0x8D},
1544         {0xF0, 0x0D},
1545         {0xF1, 0x0E},
1546         {0xF0, 0x8E},
1547         {0xF0, 0x0E},
1548         {0xF1, 0x0E},
1549         {0xF0, 0x8F},
1550         {0xF0, 0x0F},
1551         {0xF1, 0x10},
1552         {0xF0, 0x90},
1553         {0xF0, 0x10},
1554         {0xF1, 0x10},
1555         {0xF0, 0x91},
1556         {0xF0, 0x11},
1557         {0xF1, 0x12},
1558         {0xF0, 0x92},
1559         {0xF0, 0x12},
1560         {0xF1, 0x12},
1561         {0xF0, 0x93},
1562         {0xF0, 0x13},
1563         {0xF1, 0x14},
1564         {0xF0, 0x94},
1565         {0xF0, 0x14},
1566         {0xF1, 0x14},
1567         {0xF0, 0x95},
1568         {0xF0, 0x15},
1569         {0xF1, 0x16},
1570         {0xF0, 0x96},
1571         {0xF0, 0x16},
1572         {0xF1, 0x16},
1573         {0xF0, 0x97},
1574         {0xF0, 0x17},
1575         {0xF1, 0x18},
1576         {0xF0, 0x98},
1577         {0xF0, 0x18},
1578         {0xF1, 0x18},
1579         {0xF0, 0x99},
1580         {0xF0, 0x19},
1581         {0xF1, 0x1A},
1582         {0xF0, 0x9A},
1583         {0xF0, 0x1A},
1584         {0xF1, 0x1A},
1585         {0xF0, 0x9B},
1586         {0xF0, 0x1B},
1587         {0xF1, 0x1C},
1588         {0xF0, 0x9C},
1589         {0xF0, 0x1C},
1590         {0xF1, 0x1C},
1591         {0xF0, 0x9D},
1592         {0xF0, 0x1D},
1593         {0xF1, 0x1E},
1594         {0xF0, 0x9E},
1595         {0xF0, 0x1E},
1596         {0xF1, 0x1E},
1597         {0xF0, 0x9F},
1598         {0xF0, 0x1F},
1599         {0xF1, 0x20},
1600         {0xF0, 0xA0},
1601         {0xF0, 0x20},
1602         {0xF1, 0x20},
1603         {0xF0, 0xA1},
1604         {0xF0, 0x21},
1605         {0xF1, 0x22},
1606         {0xF0, 0xA2},
1607         {0xF0, 0x22},
1608         {0xF1, 0x22},
1609         {0xF0, 0xA3},
1610         {0xF0, 0x23},
1611         {0xF1, 0x24},
1612         {0xF0, 0xA4},
1613         {0xF0, 0x24},
1614         {0xF1, 0x24},
1615         {0xF0, 0xA5},
1616         {0xF0, 0x25},
1617         {0xF1, 0x26},
1618         {0xF0, 0xA6},
1619         {0xF0, 0x26},
1620         {0xF1, 0x26},
1621         {0xF0, 0xA7},
1622         {0xF0, 0x27},
1623         {0xF1, 0x28},
1624         {0xF0, 0xA8},
1625         {0xF0, 0x28},
1626         {0xF1, 0x28},
1627         {0xF0, 0xA9},
1628         {0xF0, 0x29},
1629         {0xF1, 0x2A},
1630         {0xF0, 0xAA},
1631         {0xF0, 0x2A},
1632         {0xF1, 0x2A},
1633         {0xF0, 0xAB},
1634         {0xF0, 0x2B},
1635         {0xF1, 0x2C},
1636         {0xF0, 0xAC},
1637         {0xF0, 0x2C},
1638         {0xF1, 0x2C},
1639         {0xF0, 0xAD},
1640         {0xF0, 0x2D},
1641         {0xF1, 0x2E},
1642         {0xF0, 0xAE},
1643         {0xF0, 0x2E},
1644         {0xF1, 0x2E},
1645         {0xF0, 0xAF},
1646         {0xF0, 0x2F},
1647         {0xF1, 0x30},
1648         {0xF0, 0xB0},
1649         {0xF0, 0x30},
1650         {0xF1, 0x30},
1651         {0xF0, 0xB1},
1652         {0xF0, 0x31},
1653         {0xF1, 0x32},
1654         {0xF0, 0xB2},
1655         {0xF0, 0x32},
1656         {0xF1, 0x32},
1657         {0xF0, 0xB3},
1658         {0xF0, 0x33},
1659         {0xF1, 0x34},
1660         {0xF0, 0xB4},
1661         {0xF0, 0x34},
1662         {0xF1, 0x34},
1663         {0xF0, 0xB5},
1664         {0xF0, 0x35},
1665         {0xF1, 0x36},
1666         {0xF0, 0xB6},
1667         {0xF0, 0x36},
1668         {0xF1, 0x36},
1669         {0xF0, 0xB7},
1670         {0xF0, 0x37},
1671         {0xF1, 0x38},
1672         {0xF0, 0xB8},
1673         {0xF0, 0x38},
1674         {0xF1, 0x38},
1675         {0xF0, 0xB9},
1676         {0xF0, 0x39},
1677         {0xF1, 0x3A},
1678         {0xF0, 0xBA},
1679         {0xF0, 0x3A},
1680         {0xF1, 0x3A},
1681         {0xF0, 0xBB},
1682         {0xF0, 0x3B},
1683         {0xF1, 0x3C},
1684         {0xF0, 0xBC},
1685         {0xF0, 0x3C},
1686         {0xF1, 0x3C},
1687         {0xF0, 0xBD},
1688         {0xF0, 0x3D},
1689         {0xF1, 0x3E},
1690         {0xF0, 0xBE},
1691         {0xF0, 0x3E},
1692         {0xF1, 0x3E},
1693         {0xF0, 0xBF},
1694         {0xF0, 0x00},
1695 };
1696
1697 static const unsigned short awcFrameTime[MAX_RATE] = {
1698                 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
1699 };
1700
1701 /*---------------------  Static Functions  --------------------------*/
1702
1703 static
1704 unsigned long
1705 s_ulGetRatio(struct vnt_private *priv);
1706
1707 static
1708 void
1709 s_vChangeAntenna(
1710         struct vnt_private *priv
1711 );
1712
1713 static
1714 void
1715 s_vChangeAntenna(
1716         struct vnt_private *priv
1717 )
1718 {
1719         if (priv->dwRxAntennaSel == 0) {
1720                 priv->dwRxAntennaSel = 1;
1721                 if (priv->bTxRxAntInv == true)
1722                         BBvSetRxAntennaMode(priv, ANT_A);
1723                 else
1724                         BBvSetRxAntennaMode(priv, ANT_B);
1725         } else {
1726                 priv->dwRxAntennaSel = 0;
1727                 if (priv->bTxRxAntInv == true)
1728                         BBvSetRxAntennaMode(priv, ANT_B);
1729                 else
1730                         BBvSetRxAntennaMode(priv, ANT_A);
1731         }
1732         if (priv->dwTxAntennaSel == 0) {
1733                 priv->dwTxAntennaSel = 1;
1734                 BBvSetTxAntennaMode(priv, ANT_B);
1735         } else {
1736                 priv->dwTxAntennaSel = 0;
1737                 BBvSetTxAntennaMode(priv, ANT_A);
1738         }
1739 }
1740
1741 /*---------------------  Export Variables  --------------------------*/
1742 /*
1743  * Description: Calculate data frame transmitting time
1744  *
1745  * Parameters:
1746  *  In:
1747  *      byPreambleType  - Preamble Type
1748  *      byPktType        - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
1749  *      cbFrameLength   - Baseband Type
1750  *      wRate           - Tx Rate
1751  *  Out:
1752  *
1753  * Return Value: FrameTime
1754  *
1755  */
1756 unsigned int
1757 BBuGetFrameTime(
1758         unsigned char byPreambleType,
1759         unsigned char byPktType,
1760         unsigned int cbFrameLength,
1761         unsigned short wRate
1762 )
1763 {
1764         unsigned int uFrameTime;
1765         unsigned int uPreamble;
1766         unsigned int uTmp;
1767         unsigned int uRateIdx = (unsigned int) wRate;
1768         unsigned int uRate = 0;
1769
1770         if (uRateIdx > RATE_54M) {
1771                 ASSERT(0);
1772                 return 0;
1773         }
1774
1775         uRate = (unsigned int)awcFrameTime[uRateIdx];
1776
1777         if (uRateIdx <= 3) {          /* CCK mode */
1778                 if (byPreambleType == 1) /* Short */
1779                         uPreamble = 96;
1780                 else
1781                         uPreamble = 192;
1782
1783                 uFrameTime = (cbFrameLength * 80) / uRate;  /* ????? */
1784                 uTmp = (uFrameTime * uRate) / 80;
1785                 if (cbFrameLength != uTmp)
1786                         uFrameTime++;
1787
1788                 return uPreamble + uFrameTime;
1789         }
1790         uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */
1791         uTmp = ((uFrameTime * uRate) - 22) / 8;
1792         if (cbFrameLength != uTmp)
1793                 uFrameTime++;
1794
1795         uFrameTime = uFrameTime * 4;    /* ??????? */
1796         if (byPktType != PK_TYPE_11A)
1797                 uFrameTime += 6;     /* ?????? */
1798
1799         return 20 + uFrameTime; /* ?????? */
1800 }
1801
1802 /*
1803  * Description: Calculate Length, Service, and Signal fields of Phy for Tx
1804  *
1805  * Parameters:
1806  *  In:
1807  *      priv         - Device Structure
1808  *      frame_length   - Tx Frame Length
1809  *      tx_rate           - Tx Rate
1810  *  Out:
1811  *      struct vnt_phy_field *phy
1812  *              - pointer to Phy Length field
1813  *              - pointer to Phy Service field
1814  *              - pointer to Phy Signal field
1815  *
1816  * Return Value: none
1817  *
1818  */
1819 void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
1820                        u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy)
1821 {
1822         u32 bit_count;
1823         u32 count = 0;
1824         u32 tmp;
1825         int ext_bit;
1826         u8 preamble_type = priv->byPreambleType;
1827
1828         bit_count = frame_length * 8;
1829         ext_bit = false;
1830
1831         switch (tx_rate) {
1832         case RATE_1M:
1833                 count = bit_count;
1834
1835                 phy->signal = 0x00;
1836
1837                 break;
1838         case RATE_2M:
1839                 count = bit_count / 2;
1840
1841                 if (preamble_type == 1)
1842                         phy->signal = 0x09;
1843                 else
1844                         phy->signal = 0x01;
1845
1846                 break;
1847         case RATE_5M:
1848                 count = (bit_count * 10) / 55;
1849                 tmp = (count * 55) / 10;
1850
1851                 if (tmp != bit_count)
1852                         count++;
1853
1854                 if (preamble_type == 1)
1855                         phy->signal = 0x0a;
1856                 else
1857                         phy->signal = 0x02;
1858
1859                 break;
1860         case RATE_11M:
1861                 count = bit_count / 11;
1862                 tmp = count * 11;
1863
1864                 if (tmp != bit_count) {
1865                         count++;
1866
1867                         if ((bit_count - tmp) <= 3)
1868                                 ext_bit = true;
1869                 }
1870
1871                 if (preamble_type == 1)
1872                         phy->signal = 0x0b;
1873                 else
1874                         phy->signal = 0x03;
1875
1876                 break;
1877         case RATE_6M:
1878                 if (pkt_type == PK_TYPE_11A)
1879                         phy->signal = 0x9b;
1880                 else
1881                         phy->signal = 0x8b;
1882
1883                 break;
1884         case RATE_9M:
1885                 if (pkt_type == PK_TYPE_11A)
1886                         phy->signal = 0x9f;
1887                 else
1888                         phy->signal = 0x8f;
1889
1890                 break;
1891         case RATE_12M:
1892                 if (pkt_type == PK_TYPE_11A)
1893                         phy->signal = 0x9a;
1894                 else
1895                         phy->signal = 0x8a;
1896
1897                 break;
1898         case RATE_18M:
1899                 if (pkt_type == PK_TYPE_11A)
1900                         phy->signal = 0x9e;
1901                 else
1902                         phy->signal = 0x8e;
1903
1904                 break;
1905         case RATE_24M:
1906                 if (pkt_type == PK_TYPE_11A)
1907                         phy->signal = 0x99;
1908                 else
1909                         phy->signal = 0x89;
1910
1911                 break;
1912         case RATE_36M:
1913                 if (pkt_type == PK_TYPE_11A)
1914                         phy->signal = 0x9d;
1915                 else
1916                         phy->signal = 0x8d;
1917
1918                 break;
1919         case RATE_48M:
1920                 if (pkt_type == PK_TYPE_11A)
1921                         phy->signal = 0x98;
1922                 else
1923                         phy->signal = 0x88;
1924
1925                 break;
1926         case RATE_54M:
1927                 if (pkt_type == PK_TYPE_11A)
1928                         phy->signal = 0x9c;
1929                 else
1930                         phy->signal = 0x8c;
1931                 break;
1932         default:
1933                 if (pkt_type == PK_TYPE_11A)
1934                         phy->signal = 0x9c;
1935                 else
1936                         phy->signal = 0x8c;
1937                 break;
1938         }
1939
1940         if (pkt_type == PK_TYPE_11B) {
1941                 phy->service = 0x00;
1942                 if (ext_bit)
1943                         phy->service |= 0x80;
1944                 phy->len = cpu_to_le16((u16)count);
1945         } else {
1946                 phy->service = 0x00;
1947                 phy->len = cpu_to_le16((u16)frame_length);
1948         }
1949 }
1950
1951 /*
1952  * Description: Read a byte from BASEBAND, by embedded programming
1953  *
1954  * Parameters:
1955  *  In:
1956  *      dwIoBase    - I/O base address
1957  *      byBBAddr    - address of register in Baseband
1958  *  Out:
1959  *      pbyData     - data read
1960  *
1961  * Return Value: true if succeeded; false if failed.
1962  *
1963  */
1964 bool BBbReadEmbedded(struct vnt_private *priv,
1965                      unsigned char byBBAddr, unsigned char *pbyData)
1966 {
1967         void __iomem *dwIoBase = priv->PortOffset;
1968         unsigned short ww;
1969         unsigned char byValue;
1970
1971         /* BB reg offset */
1972         VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
1973
1974         /* turn on REGR */
1975         MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGR);
1976         /* W_MAX_TIMEOUT is the timeout period */
1977         for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
1978                 VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
1979                 if (byValue & BBREGCTL_DONE)
1980                         break;
1981         }
1982
1983         /* get BB data */
1984         VNSvInPortB(dwIoBase + MAC_REG_BBREGDATA, pbyData);
1985
1986         if (ww == W_MAX_TIMEOUT) {
1987                 DBG_PORT80(0x30);
1988                 pr_debug(" DBG_PORT80(0x30)\n");
1989                 return false;
1990         }
1991         return true;
1992 }
1993
1994 /*
1995  * Description: Write a Byte to BASEBAND, by embedded programming
1996  *
1997  * Parameters:
1998  *  In:
1999  *      dwIoBase    - I/O base address
2000  *      byBBAddr    - address of register in Baseband
2001  *      byData      - data to write
2002  *  Out:
2003  *      none
2004  *
2005  * Return Value: true if succeeded; false if failed.
2006  *
2007  */
2008 bool BBbWriteEmbedded(struct vnt_private *priv,
2009                       unsigned char byBBAddr, unsigned char byData)
2010 {
2011         void __iomem *dwIoBase = priv->PortOffset;
2012         unsigned short ww;
2013         unsigned char byValue;
2014
2015         /* BB reg offset */
2016         VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
2017         /* set BB data */
2018         VNSvOutPortB(dwIoBase + MAC_REG_BBREGDATA, byData);
2019
2020         /* turn on BBREGCTL_REGW */
2021         MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGW);
2022         /* W_MAX_TIMEOUT is the timeout period */
2023         for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
2024                 VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
2025                 if (byValue & BBREGCTL_DONE)
2026                         break;
2027         }
2028
2029         if (ww == W_MAX_TIMEOUT) {
2030                 DBG_PORT80(0x31);
2031                 pr_debug(" DBG_PORT80(0x31)\n");
2032                 return false;
2033         }
2034         return true;
2035 }
2036
2037 /*
2038  * Description: VIA VT3253 Baseband chip init function
2039  *
2040  * Parameters:
2041  *  In:
2042  *      dwIoBase    - I/O base address
2043  *      byRevId     - Revision ID
2044  *      byRFType    - RF type
2045  *  Out:
2046  *      none
2047  *
2048  * Return Value: true if succeeded; false if failed.
2049  *
2050  */
2051
2052 bool BBbVT3253Init(struct vnt_private *priv)
2053 {
2054         bool bResult = true;
2055         int        ii;
2056         void __iomem *dwIoBase = priv->PortOffset;
2057         unsigned char byRFType = priv->byRFType;
2058         unsigned char byLocalID = priv->byLocalID;
2059
2060         if (byRFType == RF_RFMD2959) {
2061                 if (byLocalID <= REV_ID_VT3253_A1) {
2062                         for (ii = 0; ii < CB_VT3253_INIT_FOR_RFMD; ii++)
2063                                 bResult &= BBbWriteEmbedded(priv, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]);
2064
2065                 } else {
2066                         for (ii = 0; ii < CB_VT3253B0_INIT_FOR_RFMD; ii++)
2067                                 bResult &= BBbWriteEmbedded(priv, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]);
2068
2069                         for (ii = 0; ii < CB_VT3253B0_AGC_FOR_RFMD2959; ii++)
2070                                 bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]);
2071
2072                         VNSvOutPortD(dwIoBase + MAC_REG_ITRTMSET, 0x23);
2073                         MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0));
2074                 }
2075                 priv->abyBBVGA[0] = 0x18;
2076                 priv->abyBBVGA[1] = 0x0A;
2077                 priv->abyBBVGA[2] = 0x0;
2078                 priv->abyBBVGA[3] = 0x0;
2079                 priv->ldBmThreshold[0] = -70;
2080                 priv->ldBmThreshold[1] = -50;
2081                 priv->ldBmThreshold[2] = 0;
2082                 priv->ldBmThreshold[3] = 0;
2083         } else if ((byRFType == RF_AIROHA) || (byRFType == RF_AL2230S)) {
2084                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2085                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2086
2087                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2088                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2089
2090                 priv->abyBBVGA[0] = 0x1C;
2091                 priv->abyBBVGA[1] = 0x10;
2092                 priv->abyBBVGA[2] = 0x0;
2093                 priv->abyBBVGA[3] = 0x0;
2094                 priv->ldBmThreshold[0] = -70;
2095                 priv->ldBmThreshold[1] = -48;
2096                 priv->ldBmThreshold[2] = 0;
2097                 priv->ldBmThreshold[3] = 0;
2098         } else if (byRFType == RF_UW2451) {
2099                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
2100                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
2101
2102                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2103                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2104
2105                 VNSvOutPortB(dwIoBase + MAC_REG_ITRTMSET, 0x23);
2106                 MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT(0));
2107
2108                 priv->abyBBVGA[0] = 0x14;
2109                 priv->abyBBVGA[1] = 0x0A;
2110                 priv->abyBBVGA[2] = 0x0;
2111                 priv->abyBBVGA[3] = 0x0;
2112                 priv->ldBmThreshold[0] = -60;
2113                 priv->ldBmThreshold[1] = -50;
2114                 priv->ldBmThreshold[2] = 0;
2115                 priv->ldBmThreshold[3] = 0;
2116         } else if (byRFType == RF_UW2452) {
2117                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
2118                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
2119
2120                 /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2121                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
2122                 /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2123                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
2124                 /* Select VC1/VC2, CR215 = 0x02->0x06 */
2125                 bResult &= BBbWriteEmbedded(priv, 0xd7, 0x06);
2126
2127                 /* {{RobertYu:20050125, request by Jack */
2128                 bResult &= BBbWriteEmbedded(priv, 0x90, 0x20);
2129                 bResult &= BBbWriteEmbedded(priv, 0x97, 0xeb);
2130                 /* }} */
2131
2132                 /* {{RobertYu:20050221, request by Jack */
2133                 bResult &= BBbWriteEmbedded(priv, 0xa6, 0x00);
2134                 bResult &= BBbWriteEmbedded(priv, 0xa8, 0x30);
2135                 /* }} */
2136                 bResult &= BBbWriteEmbedded(priv, 0xb0, 0x58);
2137
2138                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2139                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2140
2141                 priv->abyBBVGA[0] = 0x14;
2142                 priv->abyBBVGA[1] = 0x0A;
2143                 priv->abyBBVGA[2] = 0x0;
2144                 priv->abyBBVGA[3] = 0x0;
2145                 priv->ldBmThreshold[0] = -60;
2146                 priv->ldBmThreshold[1] = -50;
2147                 priv->ldBmThreshold[2] = 0;
2148                 priv->ldBmThreshold[3] = 0;
2149                 /* }} RobertYu */
2150
2151         } else if (byRFType == RF_VT3226) {
2152                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2153                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2154
2155                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2156                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2157
2158                 priv->abyBBVGA[0] = 0x1C;
2159                 priv->abyBBVGA[1] = 0x10;
2160                 priv->abyBBVGA[2] = 0x0;
2161                 priv->abyBBVGA[3] = 0x0;
2162                 priv->ldBmThreshold[0] = -70;
2163                 priv->ldBmThreshold[1] = -48;
2164                 priv->ldBmThreshold[2] = 0;
2165                 priv->ldBmThreshold[3] = 0;
2166                 /* Fix VT3226 DFC system timing issue */
2167                 MACvSetRFLE_LatchBase(dwIoBase);
2168                 /* {{ RobertYu: 20050104 */
2169         } else if (byRFType == RF_AIROHA7230) {
2170                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2171                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2172
2173
2174                 /* {{ RobertYu:20050223, request by JerryChung */
2175                 /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2176                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
2177                 /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2178                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
2179                 /* Select VC1/VC2, CR215 = 0x02->0x06 */
2180                 bResult &= BBbWriteEmbedded(priv, 0xd7, 0x06);
2181                 /* }} */
2182
2183                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2184                         bResult &= BBbWriteEmbedded(priv, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2185
2186                 priv->abyBBVGA[0] = 0x1C;
2187                 priv->abyBBVGA[1] = 0x10;
2188                 priv->abyBBVGA[2] = 0x0;
2189                 priv->abyBBVGA[3] = 0x0;
2190                 priv->ldBmThreshold[0] = -70;
2191                 priv->ldBmThreshold[1] = -48;
2192                 priv->ldBmThreshold[2] = 0;
2193                 priv->ldBmThreshold[3] = 0;
2194                 /* }} RobertYu */
2195         } else {
2196                 /* No VGA Table now */
2197                 priv->bUpdateBBVGA = false;
2198                 priv->abyBBVGA[0] = 0x1C;
2199         }
2200
2201         if (byLocalID > REV_ID_VT3253_A1) {
2202                 BBbWriteEmbedded(priv, 0x04, 0x7F);
2203                 BBbWriteEmbedded(priv, 0x0D, 0x01);
2204         }
2205
2206         return bResult;
2207 }
2208
2209 /*
2210  * Description: Set ShortSlotTime mode
2211  *
2212  * Parameters:
2213  *  In:
2214  *      priv     - Device Structure
2215  *  Out:
2216  *      none
2217  *
2218  * Return Value: none
2219  *
2220  */
2221 void
2222 BBvSetShortSlotTime(struct vnt_private *priv)
2223 {
2224         unsigned char byBBRxConf = 0;
2225         unsigned char byBBVGA = 0;
2226
2227         BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
2228
2229         if (priv->bShortSlotTime)
2230                 byBBRxConf &= 0xDF; /* 1101 1111 */
2231         else
2232                 byBBRxConf |= 0x20; /* 0010 0000 */
2233
2234         /* patch for 3253B0 Baseband with Cardbus module */
2235         BBbReadEmbedded(priv, 0xE7, &byBBVGA);
2236         if (byBBVGA == priv->abyBBVGA[0])
2237                 byBBRxConf |= 0x20; /* 0010 0000 */
2238
2239         BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
2240 }
2241
2242 void BBvSetVGAGainOffset(struct vnt_private *priv, unsigned char byData)
2243 {
2244         unsigned char byBBRxConf = 0;
2245
2246         BBbWriteEmbedded(priv, 0xE7, byData);
2247
2248         BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
2249         /* patch for 3253B0 Baseband with Cardbus module */
2250         if (byData == priv->abyBBVGA[0])
2251                 byBBRxConf |= 0x20; /* 0010 0000 */
2252         else if (priv->bShortSlotTime)
2253                 byBBRxConf &= 0xDF; /* 1101 1111 */
2254         else
2255                 byBBRxConf |= 0x20; /* 0010 0000 */
2256         priv->byBBVGACurrent = byData;
2257         BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
2258 }
2259
2260 /*
2261  * Description: Baseband SoftwareReset
2262  *
2263  * Parameters:
2264  *  In:
2265  *      dwIoBase    - I/O base address
2266  *  Out:
2267  *      none
2268  *
2269  * Return Value: none
2270  *
2271  */
2272 void
2273 BBvSoftwareReset(struct vnt_private *priv)
2274 {
2275         BBbWriteEmbedded(priv, 0x50, 0x40);
2276         BBbWriteEmbedded(priv, 0x50, 0);
2277         BBbWriteEmbedded(priv, 0x9C, 0x01);
2278         BBbWriteEmbedded(priv, 0x9C, 0);
2279 }
2280
2281 /*
2282  * Description: Baseband Power Save Mode ON
2283  *
2284  * Parameters:
2285  *  In:
2286  *      dwIoBase    - I/O base address
2287  *  Out:
2288  *      none
2289  *
2290  * Return Value: none
2291  *
2292  */
2293 void
2294 BBvPowerSaveModeON(struct vnt_private *priv)
2295 {
2296         unsigned char byOrgData;
2297
2298         BBbReadEmbedded(priv, 0x0D, &byOrgData);
2299         byOrgData |= BIT(0);
2300         BBbWriteEmbedded(priv, 0x0D, byOrgData);
2301 }
2302
2303 /*
2304  * Description: Baseband Power Save Mode OFF
2305  *
2306  * Parameters:
2307  *  In:
2308  *      dwIoBase    - I/O base address
2309  *  Out:
2310  *      none
2311  *
2312  * Return Value: none
2313  *
2314  */
2315 void
2316 BBvPowerSaveModeOFF(struct vnt_private *priv)
2317 {
2318         unsigned char byOrgData;
2319
2320         BBbReadEmbedded(priv, 0x0D, &byOrgData);
2321         byOrgData &= ~(BIT(0));
2322         BBbWriteEmbedded(priv, 0x0D, byOrgData);
2323 }
2324
2325 /*
2326  * Description: Set Tx Antenna mode
2327  *
2328  * Parameters:
2329  *  In:
2330  *      priv          - Device Structure
2331  *      byAntennaMode    - Antenna Mode
2332  *  Out:
2333  *      none
2334  *
2335  * Return Value: none
2336  *
2337  */
2338
2339 void
2340 BBvSetTxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode)
2341 {
2342         unsigned char byBBTxConf;
2343
2344         BBbReadEmbedded(priv, 0x09, &byBBTxConf); /* CR09 */
2345         if (byAntennaMode == ANT_DIVERSITY) {
2346                 /* bit 1 is diversity */
2347                 byBBTxConf |= 0x02;
2348         } else if (byAntennaMode == ANT_A) {
2349                 /* bit 2 is ANTSEL */
2350                 byBBTxConf &= 0xF9; /* 1111 1001 */
2351         } else if (byAntennaMode == ANT_B) {
2352                 byBBTxConf &= 0xFD; /* 1111 1101 */
2353                 byBBTxConf |= 0x04;
2354         }
2355         BBbWriteEmbedded(priv, 0x09, byBBTxConf); /* CR09 */
2356 }
2357
2358 /*
2359  * Description: Set Rx Antenna mode
2360  *
2361  * Parameters:
2362  *  In:
2363  *      priv          - Device Structure
2364  *      byAntennaMode    - Antenna Mode
2365  *  Out:
2366  *      none
2367  *
2368  * Return Value: none
2369  *
2370  */
2371
2372 void
2373 BBvSetRxAntennaMode(struct vnt_private *priv, unsigned char byAntennaMode)
2374 {
2375         unsigned char byBBRxConf;
2376
2377         BBbReadEmbedded(priv, 0x0A, &byBBRxConf); /* CR10 */
2378         if (byAntennaMode == ANT_DIVERSITY) {
2379                 byBBRxConf |= 0x01;
2380
2381         } else if (byAntennaMode == ANT_A) {
2382                 byBBRxConf &= 0xFC; /* 1111 1100 */
2383         } else if (byAntennaMode == ANT_B) {
2384                 byBBRxConf &= 0xFE; /* 1111 1110 */
2385                 byBBRxConf |= 0x02;
2386         }
2387         BBbWriteEmbedded(priv, 0x0A, byBBRxConf); /* CR10 */
2388 }
2389
2390 /*
2391  * Description: BBvSetDeepSleep
2392  *
2393  * Parameters:
2394  *  In:
2395  *      priv          - Device Structure
2396  *  Out:
2397  *      none
2398  *
2399  * Return Value: none
2400  *
2401  */
2402 void
2403 BBvSetDeepSleep(struct vnt_private *priv, unsigned char byLocalID)
2404 {
2405         BBbWriteEmbedded(priv, 0x0C, 0x17); /* CR12 */
2406         BBbWriteEmbedded(priv, 0x0D, 0xB9); /* CR13 */
2407 }
2408
2409 void
2410 BBvExitDeepSleep(struct vnt_private *priv, unsigned char byLocalID)
2411 {
2412         BBbWriteEmbedded(priv, 0x0C, 0x00); /* CR12 */
2413         BBbWriteEmbedded(priv, 0x0D, 0x01); /* CR13 */
2414 }
2415
2416 static
2417 unsigned long
2418 s_ulGetRatio(struct vnt_private *priv)
2419 {
2420         unsigned long ulRatio = 0;
2421         unsigned long ulMaxPacket;
2422         unsigned long ulPacketNum;
2423
2424         /* This is a thousand-ratio */
2425         ulMaxPacket = priv->uNumSQ3[RATE_54M];
2426         if (priv->uNumSQ3[RATE_54M] != 0) {
2427                 ulPacketNum = priv->uNumSQ3[RATE_54M];
2428                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2429                 ulRatio += TOP_RATE_54M;
2430         }
2431         if (priv->uNumSQ3[RATE_48M] > ulMaxPacket) {
2432                 ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M];
2433                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2434                 ulRatio += TOP_RATE_48M;
2435                 ulMaxPacket = priv->uNumSQ3[RATE_48M];
2436         }
2437         if (priv->uNumSQ3[RATE_36M] > ulMaxPacket) {
2438                 ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
2439                         priv->uNumSQ3[RATE_36M];
2440                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2441                 ulRatio += TOP_RATE_36M;
2442                 ulMaxPacket = priv->uNumSQ3[RATE_36M];
2443         }
2444         if (priv->uNumSQ3[RATE_24M] > ulMaxPacket) {
2445                 ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
2446                         priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M];
2447                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2448                 ulRatio += TOP_RATE_24M;
2449                 ulMaxPacket = priv->uNumSQ3[RATE_24M];
2450         }
2451         if (priv->uNumSQ3[RATE_18M] > ulMaxPacket) {
2452                 ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
2453                         priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] +
2454                         priv->uNumSQ3[RATE_18M];
2455                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2456                 ulRatio += TOP_RATE_18M;
2457                 ulMaxPacket = priv->uNumSQ3[RATE_18M];
2458         }
2459         if (priv->uNumSQ3[RATE_12M] > ulMaxPacket) {
2460                 ulPacketNum = priv->uNumSQ3[RATE_54M] + priv->uNumSQ3[RATE_48M] +
2461                         priv->uNumSQ3[RATE_36M] + priv->uNumSQ3[RATE_24M] +
2462                         priv->uNumSQ3[RATE_18M] + priv->uNumSQ3[RATE_12M];
2463                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2464                 ulRatio += TOP_RATE_12M;
2465                 ulMaxPacket = priv->uNumSQ3[RATE_12M];
2466         }
2467         if (priv->uNumSQ3[RATE_11M] > ulMaxPacket) {
2468                 ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
2469                         priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] -
2470                         priv->uNumSQ3[RATE_6M] - priv->uNumSQ3[RATE_9M];
2471                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2472                 ulRatio += TOP_RATE_11M;
2473                 ulMaxPacket = priv->uNumSQ3[RATE_11M];
2474         }
2475         if (priv->uNumSQ3[RATE_9M] > ulMaxPacket) {
2476                 ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
2477                         priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M] -
2478                         priv->uNumSQ3[RATE_6M];
2479                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2480                 ulRatio += TOP_RATE_9M;
2481                 ulMaxPacket = priv->uNumSQ3[RATE_9M];
2482         }
2483         if (priv->uNumSQ3[RATE_6M] > ulMaxPacket) {
2484                 ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
2485                         priv->uNumSQ3[RATE_2M] - priv->uNumSQ3[RATE_5M];
2486                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2487                 ulRatio += TOP_RATE_6M;
2488                 ulMaxPacket = priv->uNumSQ3[RATE_6M];
2489         }
2490         if (priv->uNumSQ3[RATE_5M] > ulMaxPacket) {
2491                 ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M] -
2492                         priv->uNumSQ3[RATE_2M];
2493                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2494                 ulRatio += TOP_RATE_55M;
2495                 ulMaxPacket = priv->uNumSQ3[RATE_5M];
2496         }
2497         if (priv->uNumSQ3[RATE_2M] > ulMaxPacket) {
2498                 ulPacketNum = priv->uDiversityCnt - priv->uNumSQ3[RATE_1M];
2499                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2500                 ulRatio += TOP_RATE_2M;
2501                 ulMaxPacket = priv->uNumSQ3[RATE_2M];
2502         }
2503         if (priv->uNumSQ3[RATE_1M] > ulMaxPacket) {
2504                 ulPacketNum = priv->uDiversityCnt;
2505                 ulRatio = (ulPacketNum * 1000 / priv->uDiversityCnt);
2506                 ulRatio += TOP_RATE_1M;
2507         }
2508
2509         return ulRatio;
2510 }
2511
2512 void
2513 BBvClearAntDivSQ3Value(struct vnt_private *priv)
2514 {
2515         unsigned int ii;
2516
2517         priv->uDiversityCnt = 0;
2518         for (ii = 0; ii < MAX_RATE; ii++)
2519                 priv->uNumSQ3[ii] = 0;
2520 }
2521
2522 /*
2523  * Description: Antenna Diversity
2524  *
2525  * Parameters:
2526  *  In:
2527  *      priv          - Device Structure
2528  *      byRSR            - RSR from received packet
2529  *      bySQ3            - SQ3 value from received packet
2530  *  Out:
2531  *      none
2532  *
2533  * Return Value: none
2534  *
2535  */
2536
2537 void BBvAntennaDiversity(struct vnt_private *priv,
2538                          unsigned char byRxRate, unsigned char bySQ3)
2539 {
2540         if ((byRxRate >= MAX_RATE) || (priv->wAntDiversityMaxRate >= MAX_RATE))
2541                 return;
2542
2543         priv->uDiversityCnt++;
2544
2545         priv->uNumSQ3[byRxRate]++;
2546
2547         if (priv->byAntennaState == 0) {
2548                 if (priv->uDiversityCnt > priv->ulDiversityNValue) {
2549                         pr_debug("ulDiversityNValue=[%d],54M-[%d]\n",
2550                                  (int)priv->ulDiversityNValue,
2551                                  (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate]);
2552
2553                         if (priv->uNumSQ3[priv->wAntDiversityMaxRate] < priv->uDiversityCnt/2) {
2554                                 priv->ulRatio_State0 = s_ulGetRatio(priv);
2555                                 pr_debug("SQ3_State0, rate = [%08x]\n",
2556                                          (int)priv->ulRatio_State0);
2557
2558                                 if (priv->byTMax == 0)
2559                                         return;
2560                                 pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n",
2561                                          (int)priv->ulRatio_State0,
2562                                          (int)priv->wAntDiversityMaxRate,
2563                                          (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
2564                                          (int)priv->uDiversityCnt);
2565
2566                                 s_vChangeAntenna(priv);
2567                                 priv->byAntennaState = 1;
2568                                 del_timer(&priv->TimerSQ3Tmax3);
2569                                 del_timer(&priv->TimerSQ3Tmax2);
2570                                 priv->TimerSQ3Tmax1.expires =  RUN_AT(priv->byTMax * HZ);
2571                                 add_timer(&priv->TimerSQ3Tmax1);
2572
2573                         } else {
2574                                 priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
2575                                 add_timer(&priv->TimerSQ3Tmax3);
2576                         }
2577                         BBvClearAntDivSQ3Value(priv);
2578
2579                 }
2580         } else { /* byAntennaState == 1 */
2581
2582                 if (priv->uDiversityCnt > priv->ulDiversityMValue) {
2583                         del_timer(&priv->TimerSQ3Tmax1);
2584
2585                         priv->ulRatio_State1 = s_ulGetRatio(priv);
2586                         pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n",
2587                                  (int)priv->ulRatio_State0,
2588                                  (int)priv->ulRatio_State1);
2589
2590                         if (priv->ulRatio_State1 < priv->ulRatio_State0) {
2591                                 pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
2592                                          (int)priv->ulRatio_State0,
2593                                          (int)priv->ulRatio_State1,
2594                                          (int)priv->wAntDiversityMaxRate,
2595                                          (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
2596                                          (int)priv->uDiversityCnt);
2597
2598                                 s_vChangeAntenna(priv);
2599                                 priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
2600                                 priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
2601                                 add_timer(&priv->TimerSQ3Tmax3);
2602                                 add_timer(&priv->TimerSQ3Tmax2);
2603                         }
2604                         priv->byAntennaState = 0;
2605                         BBvClearAntDivSQ3Value(priv);
2606                 }
2607         } /* byAntennaState */
2608 }
2609
2610 /*+
2611  *
2612  * Description:
2613  *  Timer for SQ3 antenna diversity
2614  *
2615  * Parameters:
2616  *  In:
2617  *  Out:
2618  *      none
2619  *
2620  * Return Value: none
2621  *
2622  -*/
2623
2624 void
2625 TimerSQ3CallBack(
2626         unsigned long data
2627 )
2628 {
2629         struct vnt_private *priv = (struct vnt_private *)data;
2630         unsigned long flags;
2631
2632         pr_debug("TimerSQ3CallBack...\n");
2633
2634         spin_lock_irqsave(&priv->lock, flags);
2635
2636         pr_debug("3.[%08x][%08x], %d\n",
2637                  (int)priv->ulRatio_State0, (int)priv->ulRatio_State1,
2638                  (int)priv->uDiversityCnt);
2639
2640         s_vChangeAntenna(priv);
2641         priv->byAntennaState = 0;
2642         BBvClearAntDivSQ3Value(priv);
2643
2644         priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
2645         priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
2646         add_timer(&priv->TimerSQ3Tmax3);
2647         add_timer(&priv->TimerSQ3Tmax2);
2648
2649         spin_unlock_irqrestore(&priv->lock, flags);
2650 }
2651
2652 /*+
2653  *
2654  * Description:
2655  *  Timer for SQ3 antenna diversity
2656  *
2657  * Parameters:
2658  *  In:
2659  *      pvSysSpec1
2660  *      hDeviceContext - Pointer to the adapter
2661  *      pvSysSpec2
2662  *      pvSysSpec3
2663  *  Out:
2664  *      none
2665  *
2666  * Return Value: none
2667  *
2668  -*/
2669
2670 void
2671 TimerState1CallBack(
2672         unsigned long data
2673 )
2674 {
2675         struct vnt_private *priv = (struct vnt_private *)data;
2676         unsigned long flags;
2677
2678         pr_debug("TimerState1CallBack...\n");
2679
2680         spin_lock_irqsave(&priv->lock, flags);
2681
2682         if (priv->uDiversityCnt < priv->ulDiversityMValue/100) {
2683                 s_vChangeAntenna(priv);
2684                 priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
2685                 priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
2686                 add_timer(&priv->TimerSQ3Tmax3);
2687                 add_timer(&priv->TimerSQ3Tmax2);
2688         } else {
2689                 priv->ulRatio_State1 = s_ulGetRatio(priv);
2690                 pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n",
2691                          (int)priv->ulRatio_State0,
2692                          (int)priv->ulRatio_State1);
2693
2694                 if (priv->ulRatio_State1 < priv->ulRatio_State0) {
2695                         pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
2696                                  (int)priv->ulRatio_State0,
2697                                  (int)priv->ulRatio_State1,
2698                                  (int)priv->wAntDiversityMaxRate,
2699                                  (int)priv->uNumSQ3[(int)priv->wAntDiversityMaxRate],
2700                                  (int)priv->uDiversityCnt);
2701
2702                         s_vChangeAntenna(priv);
2703
2704                         priv->TimerSQ3Tmax3.expires =  RUN_AT(priv->byTMax3 * HZ);
2705                         priv->TimerSQ3Tmax2.expires =  RUN_AT(priv->byTMax2 * HZ);
2706                         add_timer(&priv->TimerSQ3Tmax3);
2707                         add_timer(&priv->TimerSQ3Tmax2);
2708                 }
2709         }
2710         priv->byAntennaState = 0;
2711         BBvClearAntDivSQ3Value(priv);
2712
2713         spin_unlock_irqrestore(&priv->lock, flags);
2714 }