]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c
staging: Add rtl8723bs sdio wifi driver
[karo-tx-linux.git] / drivers / staging / rtl8723bs / hal / HalHWImg8723B_RF.c
1 /******************************************************************************
2 *
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 ******************************************************************************/
15
16
17 #include "odm_precomp.h"
18
19 static bool CheckPositive(
20         PDM_ODM_T pDM_Odm, const u32 Condition1, const u32 Condition2
21 )
22 {
23         u8 _BoardType =
24                         ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /*  _GLNA */
25                         ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /*  _GPA */
26                         ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /*  _ALNA */
27                         ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /*  _APA */
28                         ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  /*  _BT */
29
30         u32 cond1 = Condition1, cond2 = Condition2;
31         u32 driver1 =
32                 pDM_Odm->CutVersion << 24 |
33                 pDM_Odm->SupportPlatform << 16 |
34                 pDM_Odm->PackageType << 12 |
35                 pDM_Odm->SupportInterface << 8 |
36                 _BoardType;
37
38         u32 driver2 =
39                 pDM_Odm->TypeGLNA <<  0 |
40                 pDM_Odm->TypeGPA  <<  8 |
41                 pDM_Odm->TypeALNA << 16 |
42                 pDM_Odm->TypeAPA  << 24;
43
44         ODM_RT_TRACE(
45                 pDM_Odm,
46                 ODM_COMP_INIT,
47                 ODM_DBG_TRACE,
48                 (
49                         "===> [8812A] CheckPositive (cond1, cond2) = (0x%X 0x%X)\n",
50                         cond1,
51                         cond2
52                 )
53         );
54         ODM_RT_TRACE(
55                 pDM_Odm,
56                 ODM_COMP_INIT,
57                 ODM_DBG_TRACE,
58                 (
59                         "===> [8812A] CheckPositive (driver1, driver2) = (0x%X 0x%X)\n",
60                         driver1,
61                         driver2
62                 )
63         );
64
65         ODM_RT_TRACE(
66                 pDM_Odm,
67                 ODM_COMP_INIT,
68                 ODM_DBG_TRACE,
69                 (
70                         "       (Platform, Interface) = (0x%X, 0x%X)\n",
71                         pDM_Odm->SupportPlatform,
72                         pDM_Odm->SupportInterface
73                 )
74         );
75         ODM_RT_TRACE(
76                 pDM_Odm,
77                 ODM_COMP_INIT,
78                 ODM_DBG_TRACE,
79                 (
80                         "       (Board, Package) = (0x%X, 0x%X)\n",
81                         pDM_Odm->BoardType,
82                         pDM_Odm->PackageType
83                 )
84         );
85
86         /*  Value Defined Check =============== */
87         /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
88
89         if (
90                 ((cond1 & 0x0000F000) != 0) &&
91                 ((cond1 & 0x0000F000) != (driver1 & 0x0000F000))
92         )
93                 return false;
94
95         if (
96                 ((cond1 & 0x0F000000) != 0) &&
97                 ((cond1 & 0x0F000000) != (driver1 & 0x0F000000))
98         )
99                 return false;
100
101         /*  Bit Defined Check ================ */
102         /*  We don't care [31:28] and [23:20] */
103         cond1   &= 0x000F0FFF;
104         driver1 &= 0x000F0FFF;
105
106         if ((cond1 & driver1) == cond1) {
107                 u32 bitMask = 0;
108
109                 if ((cond1 & 0x0F) == 0) /*  BoardType is DONTCARE */
110                         return true;
111
112                 if ((cond1 & BIT0) != 0) /* GLNA */
113                         bitMask |= 0x000000FF;
114                 if ((cond1 & BIT1) != 0) /* GPA */
115                         bitMask |= 0x0000FF00;
116                 if ((cond1 & BIT2) != 0) /* ALNA */
117                         bitMask |= 0x00FF0000;
118                 if ((cond1 & BIT3) != 0) /* APA */
119                         bitMask |= 0xFF000000;
120
121                 /*  BoardType of each RF path is matched */
122                 if ((cond2 & bitMask) == (driver2 & bitMask))
123                         return true;
124
125                 return false;
126         }
127
128         return false;
129 }
130
131 static bool CheckNegative(
132         PDM_ODM_T pDM_Odm, const u32  Condition1, const u32 Condition2
133 )
134 {
135         return true;
136 }
137
138 /******************************************************************************
139 *                           RadioA.TXT
140 ******************************************************************************/
141
142 static u32 Array_MP_8723B_RadioA[] = {
143                 0x000, 0x00010000,
144                 0x0B0, 0x000DFFE0,
145                 0x0FE, 0x00000000,
146                 0x0FE, 0x00000000,
147                 0x0FE, 0x00000000,
148                 0x0B1, 0x00000018,
149                 0x0FE, 0x00000000,
150                 0x0FE, 0x00000000,
151                 0x0FE, 0x00000000,
152                 0x0B2, 0x00084C00,
153                 0x0B5, 0x0000D2CC,
154                 0x0B6, 0x000925AA,
155                 0x0B7, 0x00000010,
156                 0x0B8, 0x0000907F,
157                 0x05C, 0x00000002,
158                 0x07C, 0x00000002,
159                 0x07E, 0x00000005,
160                 0x08B, 0x0006FC00,
161                 0x0B0, 0x000FF9F0,
162                 0x01C, 0x000739D2,
163                 0x01E, 0x00000000,
164                 0x0DF, 0x00000780,
165                 0x050, 0x00067435,
166         0x80002000, 0x00000000, 0x40000000, 0x00000000,
167                 0x051, 0x0006B10E,
168         0x90003000, 0x00000000, 0x40000000, 0x00000000,
169                 0x051, 0x0006B10E,
170         0x90004000, 0x00000000, 0x40000000, 0x00000000,
171                 0x051, 0x0006B10E,
172         0xA0000000, 0x00000000,
173                 0x051, 0x0006B04E,
174         0xB0000000, 0x00000000,
175                 0x052, 0x000007D2,
176                 0x053, 0x00000000,
177                 0x054, 0x00050400,
178                 0x055, 0x0004026E,
179                 0x0DD, 0x0000004C,
180                 0x070, 0x00067435,
181         0x80002000, 0x00000000, 0x40000000, 0x00000000,
182                 0x071, 0x0006B10E,
183         0x90003000, 0x00000000, 0x40000000, 0x00000000,
184                 0x071, 0x0006B10E,
185         0x90004000, 0x00000000, 0x40000000, 0x00000000,
186                 0x071, 0x0006B10E,
187         0xA0000000, 0x00000000,
188                 0x071, 0x0006B04E,
189         0xB0000000, 0x00000000,
190                 0x072, 0x000007D2,
191                 0x073, 0x00000000,
192                 0x074, 0x00050400,
193                 0x075, 0x0004026E,
194                 0x0EF, 0x00000100,
195                 0x034, 0x0000ADD7,
196                 0x035, 0x00005C00,
197                 0x034, 0x00009DD4,
198                 0x035, 0x00005000,
199                 0x034, 0x00008DD1,
200                 0x035, 0x00004400,
201                 0x034, 0x00007DCE,
202                 0x035, 0x00003800,
203                 0x034, 0x00006CD1,
204                 0x035, 0x00004400,
205                 0x034, 0x00005CCE,
206                 0x035, 0x00003800,
207                 0x034, 0x000048CE,
208                 0x035, 0x00004400,
209                 0x034, 0x000034CE,
210                 0x035, 0x00003800,
211                 0x034, 0x00002451,
212                 0x035, 0x00004400,
213                 0x034, 0x0000144E,
214                 0x035, 0x00003800,
215                 0x034, 0x00000051,
216                 0x035, 0x00004400,
217                 0x0EF, 0x00000000,
218                 0x0EF, 0x00000100,
219                 0x0ED, 0x00000010,
220                 0x044, 0x0000ADD7,
221                 0x044, 0x00009DD4,
222                 0x044, 0x00008DD1,
223                 0x044, 0x00007DCE,
224                 0x044, 0x00006CC1,
225                 0x044, 0x00005CCE,
226                 0x044, 0x000044D1,
227                 0x044, 0x000034CE,
228                 0x044, 0x00002451,
229                 0x044, 0x0000144E,
230                 0x044, 0x00000051,
231                 0x0EF, 0x00000000,
232                 0x0ED, 0x00000000,
233                 0x07F, 0x00020080,
234                 0x0EF, 0x00002000,
235                 0x03B, 0x000380EF,
236                 0x03B, 0x000302FE,
237                 0x03B, 0x00028CE6,
238                 0x03B, 0x000200BC,
239                 0x03B, 0x000188A5,
240                 0x03B, 0x00010FBC,
241                 0x03B, 0x00008F71,
242                 0x03B, 0x00000900,
243                 0x0EF, 0x00000000,
244                 0x0ED, 0x00000001,
245                 0x040, 0x000380EF,
246                 0x040, 0x000302FE,
247                 0x040, 0x00028CE6,
248                 0x040, 0x000200BC,
249                 0x040, 0x000188A5,
250                 0x040, 0x00010FBC,
251                 0x040, 0x00008F71,
252                 0x040, 0x00000900,
253                 0x0ED, 0x00000000,
254                 0x082, 0x00080000,
255                 0x083, 0x00008000,
256                 0x084, 0x00048D80,
257                 0x085, 0x00068000,
258                 0x0A2, 0x00080000,
259                 0x0A3, 0x00008000,
260                 0x0A4, 0x00048D80,
261                 0x0A5, 0x00068000,
262                 0x0ED, 0x00000002,
263                 0x0EF, 0x00000002,
264                 0x056, 0x00000032,
265                 0x076, 0x00000032,
266                 0x001, 0x00000780,
267
268 };
269
270 void ODM_ReadAndConfig_MP_8723B_RadioA(PDM_ODM_T pDM_Odm)
271 {
272         u32 i = 0;
273         u32 ArrayLen = sizeof(Array_MP_8723B_RadioA)/sizeof(u32);
274         u32 *Array = Array_MP_8723B_RadioA;
275
276         ODM_RT_TRACE(
277                 pDM_Odm,
278                 ODM_COMP_INIT,
279                 ODM_DBG_LOUD,
280                 ("===> ODM_ReadAndConfig_MP_8723B_RadioA\n")
281         );
282
283         for (i = 0; i < ArrayLen; i += 2) {
284                 u32 v1 = Array[i];
285                 u32 v2 = Array[i+1];
286
287                 /*  This (offset, data) pair doesn't care the condition. */
288                 if (v1 < 0x40000000) {
289                         odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
290                         continue;
291                 } else {
292                         /*  This line is the beginning of branch. */
293                         bool bMatched = true;
294                         u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
295
296                         if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
297                                 bMatched = true;
298                                 READ_NEXT_PAIR(v1, v2, i);
299                         } else if (!CheckPositive(pDM_Odm, v1, v2)) {
300                                 bMatched = false;
301                                 READ_NEXT_PAIR(v1, v2, i);
302                                 READ_NEXT_PAIR(v1, v2, i);
303                         } else {
304                                 READ_NEXT_PAIR(v1, v2, i);
305                                 if (!CheckNegative(pDM_Odm, v1, v2))
306                                         bMatched = false;
307                                 else
308                                         bMatched = true;
309                                 READ_NEXT_PAIR(v1, v2, i);
310                         }
311
312                         if (bMatched == false) {
313                                 /*  Condition isn't matched.
314                                 *   Discard the following (offset, data) pairs.
315                                 */
316                                 while (v1 < 0x40000000 && i < ArrayLen-2)
317                                         READ_NEXT_PAIR(v1, v2, i);
318
319                                 i -= 2; /*  prevent from for-loop += 2 */
320                         } else {
321                                 /*  Configure matched pairs and skip to end of if-else. */
322                                 while (v1 < 0x40000000 && i < ArrayLen-2) {
323                                         odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
324                                         READ_NEXT_PAIR(v1, v2, i);
325                                 }
326
327                                 /*  Keeps reading until ENDIF. */
328                                 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
329                                 while (cCond != COND_ENDIF && i < ArrayLen-2) {
330                                         READ_NEXT_PAIR(v1, v2, i);
331                                         cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
332                                 }
333                         }
334                 }
335         }
336 }
337
338 /******************************************************************************
339 *                           TxPowerTrack_SDIO.TXT
340 ******************************************************************************/
341
342 static u8 gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
343         {
344                 0, 1, 1, 2, 2, 3, 4, 5, 5, 6,  6,  7,  7,  8,  8,  9,
345                 9, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14
346         },
347         {
348                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10,
349                 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14
350         },
351         {
352                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  7,  8,  8,  9,  9, 10,
353                 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14
354         },
355 };
356 static u8 gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
357         {
358                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12,
359                 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 19, 20, 20, 20
360         },
361         {
362                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12,
363                 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20
364         },
365         {
366                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12,
367                 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21
368         },
369 };
370 static u8 gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
371         {
372                 0, 1, 2, 3, 3, 4, 4, 5, 5, 6,  7,  8,  8,  9,  9, 10,
373                 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14
374         },
375         {
376                 0, 1, 2, 3, 3, 4, 5, 6, 6, 6,  7,  7,  8,  8,  9, 10,
377                 11, 11, 12, 13, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16
378         },
379         {
380                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 10, 11,
381                 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16
382         },
383 };
384 static u8 gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B[][DELTA_SWINGIDX_SIZE] = {
385         {
386                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
387                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
388         },
389         {
390                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12,
391                 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21
392         },
393         {
394                 0, 1, 2, 3, 3, 4, 5, 6, 6, 7,  8,  9,  9, 10, 11, 12,
395                 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 21
396         },
397 };
398 static u8 gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B[] = {
399         0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6, 6,  6,
400         7,  7,  7, 8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15
401 };
402 static u8 gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B[] = {
403         0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,
404         9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15
405 };
406 static u8 gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B[] = {
407         0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  6,  6,
408         7,  7,  7,  8,  8,  9,  9, 10, 10, 11, 12, 13, 14, 15
409 };
410 static u8 gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B[] = {
411         0, 0, 1, 2, 2, 3, 3, 4, 5, 5,  6,  6,  7,  7,  8,  8,
412         9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15
413 };
414 static u8 gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B[] = {
415         0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,
416         8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15
417 };
418 static u8 gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B[] = {
419         0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,
420         8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15
421 };
422 static u8 gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B[] = {
423         0, 0, 1, 2, 2, 3, 3, 4, 4, 5,  6,  6,  7,  7,  7,  8,
424         8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15
425 };
426 static u8 gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B[] = {
427         0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,  5,  6,  6,  7,  7,
428         8,  8,  9,  9,  9, 10, 10, 11, 11, 12, 12, 13, 14, 15
429 };
430
431 void ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(PDM_ODM_T pDM_Odm)
432 {
433         PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
434
435         ODM_RT_TRACE(
436                 pDM_Odm,
437                 ODM_COMP_INIT,
438                 ODM_DBG_LOUD,
439                 ("===> ODM_ReadAndConfig_MP_MP_8723B\n")
440         );
441
442
443         memcpy(
444                 pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P,
445                 gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B,
446                 DELTA_SWINGIDX_SIZE
447         );
448         memcpy(
449                 pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N,
450                 gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B,
451                 DELTA_SWINGIDX_SIZE
452         );
453         memcpy(
454                 pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P,
455                 gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B,
456                 DELTA_SWINGIDX_SIZE
457         );
458         memcpy(
459                 pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N,
460                 gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B,
461                 DELTA_SWINGIDX_SIZE
462         );
463
464         memcpy(
465                 pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P,
466                 gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B,
467                 DELTA_SWINGIDX_SIZE
468         );
469         memcpy(
470                 pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N,
471                 gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B,
472                 DELTA_SWINGIDX_SIZE
473         );
474         memcpy(
475                 pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P,
476                 gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B,
477                 DELTA_SWINGIDX_SIZE
478         );
479         memcpy(
480                 pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N,
481                 gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B,
482                 DELTA_SWINGIDX_SIZE
483         );
484
485         memcpy(
486                 pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P,
487                 gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_SDIO_8723B,
488                 DELTA_SWINGIDX_SIZE*3
489         );
490         memcpy(
491                 pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N,
492                 gDeltaSwingTableIdx_MP_5GA_N_TxPowerTrack_SDIO_8723B,
493                 DELTA_SWINGIDX_SIZE*3
494         );
495         memcpy(
496                 pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P,
497                 gDeltaSwingTableIdx_MP_5GB_P_TxPowerTrack_SDIO_8723B,
498                 DELTA_SWINGIDX_SIZE*3
499         );
500         memcpy(
501                 pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N,
502                 gDeltaSwingTableIdx_MP_5GB_N_TxPowerTrack_SDIO_8723B,
503                 DELTA_SWINGIDX_SIZE*3
504         );
505 }
506
507 /******************************************************************************
508 *                           TXPWR_LMT.TXT
509 ******************************************************************************/
510
511 static u8 *Array_MP_8723B_TXPWR_LMT[] = {
512         "FCC", "2.4G", "20M", "CCK", "1T", "01", "32",
513         "ETSI", "2.4G", "20M", "CCK", "1T", "01", "32",
514         "MKK", "2.4G", "20M", "CCK", "1T", "01", "32",
515         "FCC", "2.4G", "20M", "CCK", "1T", "02", "32",
516         "ETSI", "2.4G", "20M", "CCK", "1T", "02", "32",
517         "MKK", "2.4G", "20M", "CCK", "1T", "02", "32",
518         "FCC", "2.4G", "20M", "CCK", "1T", "03", "32",
519         "ETSI", "2.4G", "20M", "CCK", "1T", "03", "32",
520         "MKK", "2.4G", "20M", "CCK", "1T", "03", "32",
521         "FCC", "2.4G", "20M", "CCK", "1T", "04", "32",
522         "ETSI", "2.4G", "20M", "CCK", "1T", "04", "32",
523         "MKK", "2.4G", "20M", "CCK", "1T", "04", "32",
524         "FCC", "2.4G", "20M", "CCK", "1T", "05", "32",
525         "ETSI", "2.4G", "20M", "CCK", "1T", "05", "32",
526         "MKK", "2.4G", "20M", "CCK", "1T", "05", "32",
527         "FCC", "2.4G", "20M", "CCK", "1T", "06", "32",
528         "ETSI", "2.4G", "20M", "CCK", "1T", "06", "32",
529         "MKK", "2.4G", "20M", "CCK", "1T", "06", "32",
530         "FCC", "2.4G", "20M", "CCK", "1T", "07", "32",
531         "ETSI", "2.4G", "20M", "CCK", "1T", "07", "32",
532         "MKK", "2.4G", "20M", "CCK", "1T", "07", "32",
533         "FCC", "2.4G", "20M", "CCK", "1T", "08", "32",
534         "ETSI", "2.4G", "20M", "CCK", "1T", "08", "32",
535         "MKK", "2.4G", "20M", "CCK", "1T", "08", "32",
536         "FCC", "2.4G", "20M", "CCK", "1T", "09", "32",
537         "ETSI", "2.4G", "20M", "CCK", "1T", "09", "32",
538         "MKK", "2.4G", "20M", "CCK", "1T", "09", "32",
539         "FCC", "2.4G", "20M", "CCK", "1T", "10", "32",
540         "ETSI", "2.4G", "20M", "CCK", "1T", "10", "32",
541         "MKK", "2.4G", "20M", "CCK", "1T", "10", "32",
542         "FCC", "2.4G", "20M", "CCK", "1T", "11", "32",
543         "ETSI", "2.4G", "20M", "CCK", "1T", "11", "32",
544         "MKK", "2.4G", "20M", "CCK", "1T", "11", "32",
545         "FCC", "2.4G", "20M", "CCK", "1T", "12", "63",
546         "ETSI", "2.4G", "20M", "CCK", "1T", "12", "32",
547         "MKK", "2.4G", "20M", "CCK", "1T", "12", "32",
548         "FCC", "2.4G", "20M", "CCK", "1T", "13", "63",
549         "ETSI", "2.4G", "20M", "CCK", "1T", "13", "32",
550         "MKK", "2.4G", "20M", "CCK", "1T", "13", "32",
551         "FCC", "2.4G", "20M", "CCK", "1T", "14", "63",
552         "ETSI", "2.4G", "20M", "CCK", "1T", "14", "63",
553         "MKK", "2.4G", "20M", "CCK", "1T", "14", "32",
554         "FCC", "2.4G", "20M", "OFDM", "1T", "01", "28",
555         "ETSI", "2.4G", "20M", "OFDM", "1T", "01", "32",
556         "MKK", "2.4G", "20M", "OFDM", "1T", "01", "32",
557         "FCC", "2.4G", "20M", "OFDM", "1T", "02", "28",
558         "ETSI", "2.4G", "20M", "OFDM", "1T", "02", "32",
559         "MKK", "2.4G", "20M", "OFDM", "1T", "02", "32",
560         "FCC", "2.4G", "20M", "OFDM", "1T", "03", "32",
561         "ETSI", "2.4G", "20M", "OFDM", "1T", "03", "32",
562         "MKK", "2.4G", "20M", "OFDM", "1T", "03", "32",
563         "FCC", "2.4G", "20M", "OFDM", "1T", "04", "32",
564         "ETSI", "2.4G", "20M", "OFDM", "1T", "04", "32",
565         "MKK", "2.4G", "20M", "OFDM", "1T", "04", "32",
566         "FCC", "2.4G", "20M", "OFDM", "1T", "05", "32",
567         "ETSI", "2.4G", "20M", "OFDM", "1T", "05", "32",
568         "MKK", "2.4G", "20M", "OFDM", "1T", "05", "32",
569         "FCC", "2.4G", "20M", "OFDM", "1T", "06", "32",
570         "ETSI", "2.4G", "20M", "OFDM", "1T", "06", "32",
571         "MKK", "2.4G", "20M", "OFDM", "1T", "06", "32",
572         "FCC", "2.4G", "20M", "OFDM", "1T", "07", "32",
573         "ETSI", "2.4G", "20M", "OFDM", "1T", "07", "32",
574         "MKK", "2.4G", "20M", "OFDM", "1T", "07", "32",
575         "FCC", "2.4G", "20M", "OFDM", "1T", "08", "32",
576         "ETSI", "2.4G", "20M", "OFDM", "1T", "08", "32",
577         "MKK", "2.4G", "20M", "OFDM", "1T", "08", "32",
578         "FCC", "2.4G", "20M", "OFDM", "1T", "09", "32",
579         "ETSI", "2.4G", "20M", "OFDM", "1T", "09", "32",
580         "MKK", "2.4G", "20M", "OFDM", "1T", "09", "32",
581         "FCC", "2.4G", "20M", "OFDM", "1T", "10", "28",
582         "ETSI", "2.4G", "20M", "OFDM", "1T", "10", "32",
583         "MKK", "2.4G", "20M", "OFDM", "1T", "10", "32",
584         "FCC", "2.4G", "20M", "OFDM", "1T", "11", "28",
585         "ETSI", "2.4G", "20M", "OFDM", "1T", "11", "32",
586         "MKK", "2.4G", "20M", "OFDM", "1T", "11", "32",
587         "FCC", "2.4G", "20M", "OFDM", "1T", "12", "63",
588         "ETSI", "2.4G", "20M", "OFDM", "1T", "12", "32",
589         "MKK", "2.4G", "20M", "OFDM", "1T", "12", "32",
590         "FCC", "2.4G", "20M", "OFDM", "1T", "13", "63",
591         "ETSI", "2.4G", "20M", "OFDM", "1T", "13", "32",
592         "MKK", "2.4G", "20M", "OFDM", "1T", "13", "32",
593         "FCC", "2.4G", "20M", "OFDM", "1T", "14", "63",
594         "ETSI", "2.4G", "20M", "OFDM", "1T", "14", "63",
595         "MKK", "2.4G", "20M", "OFDM", "1T", "14", "63",
596         "FCC", "2.4G", "20M", "HT", "1T", "01", "26",
597         "ETSI", "2.4G", "20M", "HT", "1T", "01", "32",
598         "MKK", "2.4G", "20M", "HT", "1T", "01", "32",
599         "FCC", "2.4G", "20M", "HT", "1T", "02", "26",
600         "ETSI", "2.4G", "20M", "HT", "1T", "02", "32",
601         "MKK", "2.4G", "20M", "HT", "1T", "02", "32",
602         "FCC", "2.4G", "20M", "HT", "1T", "03", "32",
603         "ETSI", "2.4G", "20M", "HT", "1T", "03", "32",
604         "MKK", "2.4G", "20M", "HT", "1T", "03", "32",
605         "FCC", "2.4G", "20M", "HT", "1T", "04", "32",
606         "ETSI", "2.4G", "20M", "HT", "1T", "04", "32",
607         "MKK", "2.4G", "20M", "HT", "1T", "04", "32",
608         "FCC", "2.4G", "20M", "HT", "1T", "05", "32",
609         "ETSI", "2.4G", "20M", "HT", "1T", "05", "32",
610         "MKK", "2.4G", "20M", "HT", "1T", "05", "32",
611         "FCC", "2.4G", "20M", "HT", "1T", "06", "32",
612         "ETSI", "2.4G", "20M", "HT", "1T", "06", "32",
613         "MKK", "2.4G", "20M", "HT", "1T", "06", "32",
614         "FCC", "2.4G", "20M", "HT", "1T", "07", "32",
615         "ETSI", "2.4G", "20M", "HT", "1T", "07", "32",
616         "MKK", "2.4G", "20M", "HT", "1T", "07", "32",
617         "FCC", "2.4G", "20M", "HT", "1T", "08", "32",
618         "ETSI", "2.4G", "20M", "HT", "1T", "08", "32",
619         "MKK", "2.4G", "20M", "HT", "1T", "08", "32",
620         "FCC", "2.4G", "20M", "HT", "1T", "09", "32",
621         "ETSI", "2.4G", "20M", "HT", "1T", "09", "32",
622         "MKK", "2.4G", "20M", "HT", "1T", "09", "32",
623         "FCC", "2.4G", "20M", "HT", "1T", "10", "26",
624         "ETSI", "2.4G", "20M", "HT", "1T", "10", "32",
625         "MKK", "2.4G", "20M", "HT", "1T", "10", "32",
626         "FCC", "2.4G", "20M", "HT", "1T", "11", "26",
627         "ETSI", "2.4G", "20M", "HT", "1T", "11", "32",
628         "MKK", "2.4G", "20M", "HT", "1T", "11", "32",
629         "FCC", "2.4G", "20M", "HT", "1T", "12", "63",
630         "ETSI", "2.4G", "20M", "HT", "1T", "12", "32",
631         "MKK", "2.4G", "20M", "HT", "1T", "12", "32",
632         "FCC", "2.4G", "20M", "HT", "1T", "13", "63",
633         "ETSI", "2.4G", "20M", "HT", "1T", "13", "32",
634         "MKK", "2.4G", "20M", "HT", "1T", "13", "32",
635         "FCC", "2.4G", "20M", "HT", "1T", "14", "63",
636         "ETSI", "2.4G", "20M", "HT", "1T", "14", "63",
637         "MKK", "2.4G", "20M", "HT", "1T", "14", "63",
638         "FCC", "2.4G", "20M", "HT", "2T", "01", "30",
639         "ETSI", "2.4G", "20M", "HT", "2T", "01", "32",
640         "MKK", "2.4G", "20M", "HT", "2T", "01", "32",
641         "FCC", "2.4G", "20M", "HT", "2T", "02", "32",
642         "ETSI", "2.4G", "20M", "HT", "2T", "02", "32",
643         "MKK", "2.4G", "20M", "HT", "2T", "02", "32",
644         "FCC", "2.4G", "20M", "HT", "2T", "03", "32",
645         "ETSI", "2.4G", "20M", "HT", "2T", "03", "32",
646         "MKK", "2.4G", "20M", "HT", "2T", "03", "32",
647         "FCC", "2.4G", "20M", "HT", "2T", "04", "32",
648         "ETSI", "2.4G", "20M", "HT", "2T", "04", "32",
649         "MKK", "2.4G", "20M", "HT", "2T", "04", "32",
650         "FCC", "2.4G", "20M", "HT", "2T", "05", "32",
651         "ETSI", "2.4G", "20M", "HT", "2T", "05", "32",
652         "MKK", "2.4G", "20M", "HT", "2T", "05", "32",
653         "FCC", "2.4G", "20M", "HT", "2T", "06", "32",
654         "ETSI", "2.4G", "20M", "HT", "2T", "06", "32",
655         "MKK", "2.4G", "20M", "HT", "2T", "06", "32",
656         "FCC", "2.4G", "20M", "HT", "2T", "07", "32",
657         "ETSI", "2.4G", "20M", "HT", "2T", "07", "32",
658         "MKK", "2.4G", "20M", "HT", "2T", "07", "32",
659         "FCC", "2.4G", "20M", "HT", "2T", "08", "32",
660         "ETSI", "2.4G", "20M", "HT", "2T", "08", "32",
661         "MKK", "2.4G", "20M", "HT", "2T", "08", "32",
662         "FCC", "2.4G", "20M", "HT", "2T", "09", "32",
663         "ETSI", "2.4G", "20M", "HT", "2T", "09", "32",
664         "MKK", "2.4G", "20M", "HT", "2T", "09", "32",
665         "FCC", "2.4G", "20M", "HT", "2T", "10", "32",
666         "ETSI", "2.4G", "20M", "HT", "2T", "10", "32",
667         "MKK", "2.4G", "20M", "HT", "2T", "10", "32",
668         "FCC", "2.4G", "20M", "HT", "2T", "11", "30",
669         "ETSI", "2.4G", "20M", "HT", "2T", "11", "32",
670         "MKK", "2.4G", "20M", "HT", "2T", "11", "32",
671         "FCC", "2.4G", "20M", "HT", "2T", "12", "63",
672         "ETSI", "2.4G", "20M", "HT", "2T", "12", "32",
673         "MKK", "2.4G", "20M", "HT", "2T", "12", "32",
674         "FCC", "2.4G", "20M", "HT", "2T", "13", "63",
675         "ETSI", "2.4G", "20M", "HT", "2T", "13", "32",
676         "MKK", "2.4G", "20M", "HT", "2T", "13", "32",
677         "FCC", "2.4G", "20M", "HT", "2T", "14", "63",
678         "ETSI", "2.4G", "20M", "HT", "2T", "14", "63",
679         "MKK", "2.4G", "20M", "HT", "2T", "14", "63",
680         "FCC", "2.4G", "40M", "HT", "1T", "01", "63",
681         "ETSI", "2.4G", "40M", "HT", "1T", "01", "63",
682         "MKK", "2.4G", "40M", "HT", "1T", "01", "63",
683         "FCC", "2.4G", "40M", "HT", "1T", "02", "63",
684         "ETSI", "2.4G", "40M", "HT", "1T", "02", "63",
685         "MKK", "2.4G", "40M", "HT", "1T", "02", "63",
686         "FCC", "2.4G", "40M", "HT", "1T", "03", "26",
687         "ETSI", "2.4G", "40M", "HT", "1T", "03", "32",
688         "MKK", "2.4G", "40M", "HT", "1T", "03", "32",
689         "FCC", "2.4G", "40M", "HT", "1T", "04", "26",
690         "ETSI", "2.4G", "40M", "HT", "1T", "04", "32",
691         "MKK", "2.4G", "40M", "HT", "1T", "04", "32",
692         "FCC", "2.4G", "40M", "HT", "1T", "05", "32",
693         "ETSI", "2.4G", "40M", "HT", "1T", "05", "32",
694         "MKK", "2.4G", "40M", "HT", "1T", "05", "32",
695         "FCC", "2.4G", "40M", "HT", "1T", "06", "32",
696         "ETSI", "2.4G", "40M", "HT", "1T", "06", "32",
697         "MKK", "2.4G", "40M", "HT", "1T", "06", "32",
698         "FCC", "2.4G", "40M", "HT", "1T", "07", "32",
699         "ETSI", "2.4G", "40M", "HT", "1T", "07", "32",
700         "MKK", "2.4G", "40M", "HT", "1T", "07", "32",
701         "FCC", "2.4G", "40M", "HT", "1T", "08", "26",
702         "ETSI", "2.4G", "40M", "HT", "1T", "08", "32",
703         "MKK", "2.4G", "40M", "HT", "1T", "08", "32",
704         "FCC", "2.4G", "40M", "HT", "1T", "09", "26",
705         "ETSI", "2.4G", "40M", "HT", "1T", "09", "32",
706         "MKK", "2.4G", "40M", "HT", "1T", "09", "32",
707         "FCC", "2.4G", "40M", "HT", "1T", "10", "26",
708         "ETSI", "2.4G", "40M", "HT", "1T", "10", "32",
709         "MKK", "2.4G", "40M", "HT", "1T", "10", "32",
710         "FCC", "2.4G", "40M", "HT", "1T", "11", "26",
711         "ETSI", "2.4G", "40M", "HT", "1T", "11", "32",
712         "MKK", "2.4G", "40M", "HT", "1T", "11", "32",
713         "FCC", "2.4G", "40M", "HT", "1T", "12", "63",
714         "ETSI", "2.4G", "40M", "HT", "1T", "12", "32",
715         "MKK", "2.4G", "40M", "HT", "1T", "12", "32",
716         "FCC", "2.4G", "40M", "HT", "1T", "13", "63",
717         "ETSI", "2.4G", "40M", "HT", "1T", "13", "32",
718         "MKK", "2.4G", "40M", "HT", "1T", "13", "32",
719         "FCC", "2.4G", "40M", "HT", "1T", "14", "63",
720         "ETSI", "2.4G", "40M", "HT", "1T", "14", "63",
721         "MKK", "2.4G", "40M", "HT", "1T", "14", "63",
722         "FCC", "2.4G", "40M", "HT", "2T", "01", "63",
723         "ETSI", "2.4G", "40M", "HT", "2T", "01", "63",
724         "MKK", "2.4G", "40M", "HT", "2T", "01", "63",
725         "FCC", "2.4G", "40M", "HT", "2T", "02", "63",
726         "ETSI", "2.4G", "40M", "HT", "2T", "02", "63",
727         "MKK", "2.4G", "40M", "HT", "2T", "02", "63",
728         "FCC", "2.4G", "40M", "HT", "2T", "03", "30",
729         "ETSI", "2.4G", "40M", "HT", "2T", "03", "30",
730         "MKK", "2.4G", "40M", "HT", "2T", "03", "30",
731         "FCC", "2.4G", "40M", "HT", "2T", "04", "32",
732         "ETSI", "2.4G", "40M", "HT", "2T", "04", "30",
733         "MKK", "2.4G", "40M", "HT", "2T", "04", "30",
734         "FCC", "2.4G", "40M", "HT", "2T", "05", "32",
735         "ETSI", "2.4G", "40M", "HT", "2T", "05", "30",
736         "MKK", "2.4G", "40M", "HT", "2T", "05", "30",
737         "FCC", "2.4G", "40M", "HT", "2T", "06", "32",
738         "ETSI", "2.4G", "40M", "HT", "2T", "06", "30",
739         "MKK", "2.4G", "40M", "HT", "2T", "06", "30",
740         "FCC", "2.4G", "40M", "HT", "2T", "07", "32",
741         "ETSI", "2.4G", "40M", "HT", "2T", "07", "30",
742         "MKK", "2.4G", "40M", "HT", "2T", "07", "30",
743         "FCC", "2.4G", "40M", "HT", "2T", "08", "32",
744         "ETSI", "2.4G", "40M", "HT", "2T", "08", "30",
745         "MKK", "2.4G", "40M", "HT", "2T", "08", "30",
746         "FCC", "2.4G", "40M", "HT", "2T", "09", "32",
747         "ETSI", "2.4G", "40M", "HT", "2T", "09", "30",
748         "MKK", "2.4G", "40M", "HT", "2T", "09", "30",
749         "FCC", "2.4G", "40M", "HT", "2T", "10", "32",
750         "ETSI", "2.4G", "40M", "HT", "2T", "10", "30",
751         "MKK", "2.4G", "40M", "HT", "2T", "10", "30",
752         "FCC", "2.4G", "40M", "HT", "2T", "11", "30",
753         "ETSI", "2.4G", "40M", "HT", "2T", "11", "30",
754         "MKK", "2.4G", "40M", "HT", "2T", "11", "30",
755         "FCC", "2.4G", "40M", "HT", "2T", "12", "63",
756         "ETSI", "2.4G", "40M", "HT", "2T", "12", "32",
757         "MKK", "2.4G", "40M", "HT", "2T", "12", "32",
758         "FCC", "2.4G", "40M", "HT", "2T", "13", "63",
759         "ETSI", "2.4G", "40M", "HT", "2T", "13", "32",
760         "MKK", "2.4G", "40M", "HT", "2T", "13", "32",
761         "FCC", "2.4G", "40M", "HT", "2T", "14", "63",
762         "ETSI", "2.4G", "40M", "HT", "2T", "14", "63",
763         "MKK", "2.4G", "40M", "HT", "2T", "14", "63"
764 };
765
766 void ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(PDM_ODM_T pDM_Odm)
767 {
768         u32 i = 0;
769         u32 ArrayLen = sizeof(Array_MP_8723B_TXPWR_LMT)/sizeof(u8 *);
770         u8 **Array = Array_MP_8723B_TXPWR_LMT;
771
772         ODM_RT_TRACE(
773                 pDM_Odm,
774                 ODM_COMP_INIT,
775                 ODM_DBG_LOUD,
776                 ("===> ODM_ReadAndConfig_MP_8723B_TXPWR_LMT\n")
777         );
778
779         for (i = 0; i < ArrayLen; i += 7) {
780                 u8 *regulation = Array[i];
781                 u8 *band = Array[i+1];
782                 u8 *bandwidth = Array[i+2];
783                 u8 *rate = Array[i+3];
784                 u8 *rfPath = Array[i+4];
785                 u8 *chnl = Array[i+5];
786                 u8 *val = Array[i+6];
787
788                 odm_ConfigBB_TXPWR_LMT_8723B(
789                         pDM_Odm,
790                         regulation,
791                         band,
792                         bandwidth,
793                         rate,
794                         rfPath,
795                         chnl,
796                         val
797                 );
798         }
799 }