GNU Linux-libre 4.19.264-gnu1
[releases.git] / drivers / staging / rtl8723bs / hal / HalHWImg8723B_BB.c
1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
3 *
4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 *
6 ******************************************************************************/
7
8 #include <linux/kernel.h>
9 #include "odm_precomp.h"
10
11 static bool CheckPositive(
12         PDM_ODM_T pDM_Odm, const u32 Condition1, const u32 Condition2
13 )
14 {
15         u8 _BoardType =
16                 ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /*  _GLNA */
17                 ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /*  _GPA */
18                 ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /*  _ALNA */
19                 ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /*  _APA */
20                 ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  /*  _BT */
21
22         u32 cond1 = Condition1, cond2 = Condition2;
23         u32 driver1 =
24                 pDM_Odm->CutVersion << 24 |
25                 pDM_Odm->SupportPlatform << 16 |
26                 pDM_Odm->PackageType << 12 |
27                 pDM_Odm->SupportInterface << 8  |
28                 _BoardType;
29
30         u32 driver2 =
31                 pDM_Odm->TypeGLNA << 0 |
32                 pDM_Odm->TypeGPA << 8 |
33                 pDM_Odm->TypeALNA << 16 |
34                 pDM_Odm->TypeAPA << 24;
35
36         ODM_RT_TRACE(
37                 pDM_Odm,
38                 ODM_COMP_INIT,
39                 ODM_DBG_TRACE,
40                 (
41                         "===> [8812A] CheckPositive (cond1, cond2) = (0x%X 0x%X)\n",
42                         cond1,
43                         cond2
44                 )
45         );
46         ODM_RT_TRACE(
47                 pDM_Odm,
48                 ODM_COMP_INIT,
49                 ODM_DBG_TRACE,
50                 (
51                         "===> [8812A] CheckPositive (driver1, driver2) = (0x%X 0x%X)\n",
52                         driver1,
53                         driver2
54                 )
55         );
56
57         ODM_RT_TRACE(
58                 pDM_Odm,
59                 ODM_COMP_INIT,
60                 ODM_DBG_TRACE,
61                 ("      (Platform, Interface) = (0x%X, 0x%X)\n",
62                         pDM_Odm->SupportPlatform,
63                         pDM_Odm->SupportInterface
64                 )
65         );
66         ODM_RT_TRACE(
67                 pDM_Odm,
68                 ODM_COMP_INIT,
69                 ODM_DBG_TRACE,
70                 (
71                         "       (Board, Package) = (0x%X, 0x%X)\n",
72                         pDM_Odm->BoardType,
73                         pDM_Odm->PackageType
74                 )
75         );
76
77
78         /*  Value Defined Check =============== */
79         /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
80
81         if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
82                 return false;
83         if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
84                 return false;
85
86         /*  Bit Defined Check ================ */
87         /*  We don't care [31:28] and [23:20] */
88         /*  */
89         cond1   &= 0x000F0FFF;
90         driver1 &= 0x000F0FFF;
91
92         if ((cond1 & driver1) == cond1) {
93                 u32 bitMask = 0;
94
95                 if ((cond1 & 0x0F) == 0) /*  BoardType is DONTCARE */
96                         return true;
97
98                 if ((cond1 & BIT0) != 0) /* GLNA */
99                         bitMask |= 0x000000FF;
100                 if ((cond1 & BIT1) != 0) /* GPA */
101                         bitMask |= 0x0000FF00;
102                 if ((cond1 & BIT2) != 0) /* ALNA */
103                         bitMask |= 0x00FF0000;
104                 if ((cond1 & BIT3) != 0) /* APA */
105                         bitMask |= 0xFF000000;
106
107                 /*  BoardType of each RF path is matched */
108                 if ((cond2 & bitMask) == (driver2 & bitMask))
109                         return true;
110         }
111         return false;
112 }
113
114 static bool CheckNegative(
115         PDM_ODM_T pDM_Odm, const u32  Condition1, const u32 Condition2
116 )
117 {
118         return true;
119 }
120
121 /******************************************************************************
122 *                           AGC_TAB.TXT
123 ******************************************************************************/
124
125 static u32 Array_MP_8723B_AGC_TAB[] = {
126                 0xC78, 0xFD000001,
127                 0xC78, 0xFC010001,
128                 0xC78, 0xFB020001,
129                 0xC78, 0xFA030001,
130                 0xC78, 0xF9040001,
131                 0xC78, 0xF8050001,
132                 0xC78, 0xF7060001,
133                 0xC78, 0xF6070001,
134                 0xC78, 0xF5080001,
135                 0xC78, 0xF4090001,
136                 0xC78, 0xF30A0001,
137                 0xC78, 0xF20B0001,
138                 0xC78, 0xF10C0001,
139                 0xC78, 0xF00D0001,
140                 0xC78, 0xEF0E0001,
141                 0xC78, 0xEE0F0001,
142                 0xC78, 0xED100001,
143                 0xC78, 0xEC110001,
144                 0xC78, 0xEB120001,
145                 0xC78, 0xEA130001,
146                 0xC78, 0xE9140001,
147                 0xC78, 0xE8150001,
148                 0xC78, 0xE7160001,
149                 0xC78, 0xE6170001,
150                 0xC78, 0xE5180001,
151                 0xC78, 0xE4190001,
152                 0xC78, 0xE31A0001,
153                 0xC78, 0xA51B0001,
154                 0xC78, 0xA41C0001,
155                 0xC78, 0xA31D0001,
156                 0xC78, 0x671E0001,
157                 0xC78, 0x661F0001,
158                 0xC78, 0x65200001,
159                 0xC78, 0x64210001,
160                 0xC78, 0x63220001,
161                 0xC78, 0x4A230001,
162                 0xC78, 0x49240001,
163                 0xC78, 0x48250001,
164                 0xC78, 0x47260001,
165                 0xC78, 0x46270001,
166                 0xC78, 0x45280001,
167                 0xC78, 0x44290001,
168                 0xC78, 0x432A0001,
169                 0xC78, 0x422B0001,
170                 0xC78, 0x292C0001,
171                 0xC78, 0x282D0001,
172                 0xC78, 0x272E0001,
173                 0xC78, 0x262F0001,
174                 0xC78, 0x0A300001,
175                 0xC78, 0x09310001,
176                 0xC78, 0x08320001,
177                 0xC78, 0x07330001,
178                 0xC78, 0x06340001,
179                 0xC78, 0x05350001,
180                 0xC78, 0x04360001,
181                 0xC78, 0x03370001,
182                 0xC78, 0x02380001,
183                 0xC78, 0x01390001,
184                 0xC78, 0x013A0001,
185                 0xC78, 0x013B0001,
186                 0xC78, 0x013C0001,
187                 0xC78, 0x013D0001,
188                 0xC78, 0x013E0001,
189                 0xC78, 0x013F0001,
190                 0xC78, 0xFC400001,
191                 0xC78, 0xFB410001,
192                 0xC78, 0xFA420001,
193                 0xC78, 0xF9430001,
194                 0xC78, 0xF8440001,
195                 0xC78, 0xF7450001,
196                 0xC78, 0xF6460001,
197                 0xC78, 0xF5470001,
198                 0xC78, 0xF4480001,
199                 0xC78, 0xF3490001,
200                 0xC78, 0xF24A0001,
201                 0xC78, 0xF14B0001,
202                 0xC78, 0xF04C0001,
203                 0xC78, 0xEF4D0001,
204                 0xC78, 0xEE4E0001,
205                 0xC78, 0xED4F0001,
206                 0xC78, 0xEC500001,
207                 0xC78, 0xEB510001,
208                 0xC78, 0xEA520001,
209                 0xC78, 0xE9530001,
210                 0xC78, 0xE8540001,
211                 0xC78, 0xE7550001,
212                 0xC78, 0xE6560001,
213                 0xC78, 0xE5570001,
214                 0xC78, 0xE4580001,
215                 0xC78, 0xE3590001,
216                 0xC78, 0xA65A0001,
217                 0xC78, 0xA55B0001,
218                 0xC78, 0xA45C0001,
219                 0xC78, 0xA35D0001,
220                 0xC78, 0x675E0001,
221                 0xC78, 0x665F0001,
222                 0xC78, 0x65600001,
223                 0xC78, 0x64610001,
224                 0xC78, 0x63620001,
225                 0xC78, 0x62630001,
226                 0xC78, 0x61640001,
227                 0xC78, 0x48650001,
228                 0xC78, 0x47660001,
229                 0xC78, 0x46670001,
230                 0xC78, 0x45680001,
231                 0xC78, 0x44690001,
232                 0xC78, 0x436A0001,
233                 0xC78, 0x426B0001,
234                 0xC78, 0x286C0001,
235                 0xC78, 0x276D0001,
236                 0xC78, 0x266E0001,
237                 0xC78, 0x256F0001,
238                 0xC78, 0x24700001,
239                 0xC78, 0x09710001,
240                 0xC78, 0x08720001,
241                 0xC78, 0x07730001,
242                 0xC78, 0x06740001,
243                 0xC78, 0x05750001,
244                 0xC78, 0x04760001,
245                 0xC78, 0x03770001,
246                 0xC78, 0x02780001,
247                 0xC78, 0x01790001,
248                 0xC78, 0x017A0001,
249                 0xC78, 0x017B0001,
250                 0xC78, 0x017C0001,
251                 0xC78, 0x017D0001,
252                 0xC78, 0x017E0001,
253                 0xC78, 0x017F0001,
254                 0xC50, 0x69553422,
255                 0xC50, 0x69553420,
256                 0x824, 0x00390204,
257
258 };
259
260 void ODM_ReadAndConfig_MP_8723B_AGC_TAB(PDM_ODM_T pDM_Odm)
261 {
262         u32 i = 0;
263         u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_AGC_TAB);
264         u32 *Array = Array_MP_8723B_AGC_TAB;
265
266         ODM_RT_TRACE(
267                 pDM_Odm,
268                 ODM_COMP_INIT,
269                 ODM_DBG_LOUD,
270                 ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n")
271         );
272
273         for (i = 0; i < ArrayLen; i += 2) {
274                 u32 v1 = Array[i];
275                 u32 v2 = Array[i+1];
276
277                 /*  This (offset, data) pair doesn't care the condition. */
278                 if (v1 < 0x40000000) {
279                         odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
280                         continue;
281                 } else {
282                         /*  This line is the beginning of branch. */
283                         bool bMatched = true;
284                         u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
285
286                         if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
287                                 bMatched = true;
288                                 READ_NEXT_PAIR(v1, v2, i);
289                         } else if (!CheckPositive(pDM_Odm, v1, v2)) {
290                                 bMatched = false;
291                                 READ_NEXT_PAIR(v1, v2, i);
292                                 READ_NEXT_PAIR(v1, v2, i);
293                         } else {
294                                 READ_NEXT_PAIR(v1, v2, i);
295                                 if (!CheckNegative(pDM_Odm, v1, v2))
296                                         bMatched = false;
297                                 else
298                                         bMatched = true;
299                                 READ_NEXT_PAIR(v1, v2, i);
300                         }
301
302                         if (bMatched == false) {
303                                 /*  Condition isn't matched.
304                                 *   Discard the following (offset, data) pairs.
305                                 */
306                                 while (v1 < 0x40000000 && i < ArrayLen-2)
307                                         READ_NEXT_PAIR(v1, v2, i);
308
309                                 i -= 2; /*  prevent from for-loop += 2 */
310                         } else {
311                                 /*  Configure matched pairs and skip to end of if-else. */
312                                 while (v1 < 0x40000000 && i < ArrayLen-2) {
313                                         odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
314                                         READ_NEXT_PAIR(v1, v2, i);
315                                 }
316
317                                 /*  Keeps reading until ENDIF. */
318                                 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
319                                 while (cCond != COND_ENDIF && i < ArrayLen-2) {
320                                         READ_NEXT_PAIR(v1, v2, i);
321                                         cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
322                                 }
323                         }
324                 }
325         }
326 }
327
328 /******************************************************************************
329 *                           PHY_REG.TXT
330 ******************************************************************************/
331
332 static u32 Array_MP_8723B_PHY_REG[] = {
333                 0x800, 0x80040000,
334                 0x804, 0x00000003,
335                 0x808, 0x0000FC00,
336                 0x80C, 0x0000000A,
337                 0x810, 0x10001331,
338                 0x814, 0x020C3D10,
339                 0x818, 0x02200385,
340                 0x81C, 0x00000000,
341                 0x820, 0x01000100,
342                 0x824, 0x00190204,
343                 0x828, 0x00000000,
344                 0x82C, 0x00000000,
345                 0x830, 0x00000000,
346                 0x834, 0x00000000,
347                 0x838, 0x00000000,
348                 0x83C, 0x00000000,
349                 0x840, 0x00010000,
350                 0x844, 0x00000000,
351                 0x848, 0x00000000,
352                 0x84C, 0x00000000,
353                 0x850, 0x00000000,
354                 0x854, 0x00000000,
355                 0x858, 0x569A11A9,
356                 0x85C, 0x01000014,
357                 0x860, 0x66F60110,
358                 0x864, 0x061F0649,
359                 0x868, 0x00000000,
360                 0x86C, 0x27272700,
361                 0x870, 0x07000760,
362                 0x874, 0x25004000,
363                 0x878, 0x00000808,
364                 0x87C, 0x00000000,
365                 0x880, 0xB0000C1C,
366                 0x884, 0x00000001,
367                 0x888, 0x00000000,
368                 0x88C, 0xCCC000C0,
369                 0x890, 0x00000800,
370                 0x894, 0xFFFFFFFE,
371                 0x898, 0x40302010,
372                 0x89C, 0x00706050,
373                 0x900, 0x00000000,
374                 0x904, 0x00000023,
375                 0x908, 0x00000000,
376                 0x90C, 0x81121111,
377                 0x910, 0x00000002,
378                 0x914, 0x00000201,
379                 0xA00, 0x00D047C8,
380                 0xA04, 0x80FF800C,
381                 0xA08, 0x8C838300,
382                 0xA0C, 0x2E7F120F,
383                 0xA10, 0x9500BB78,
384                 0xA14, 0x1114D028,
385                 0xA18, 0x00881117,
386                 0xA1C, 0x89140F00,
387                 0xA20, 0x1A1B0000,
388                 0xA24, 0x090E1317,
389                 0xA28, 0x00000204,
390                 0xA2C, 0x00D30000,
391                 0xA70, 0x101FBF00,
392                 0xA74, 0x00000007,
393                 0xA78, 0x00000900,
394                 0xA7C, 0x225B0606,
395                 0xA80, 0x21806490,
396                 0xB2C, 0x00000000,
397                 0xC00, 0x48071D40,
398                 0xC04, 0x03A05611,
399                 0xC08, 0x000000E4,
400                 0xC0C, 0x6C6C6C6C,
401                 0xC10, 0x08800000,
402                 0xC14, 0x40000100,
403                 0xC18, 0x08800000,
404                 0xC1C, 0x40000100,
405                 0xC20, 0x00000000,
406                 0xC24, 0x00000000,
407                 0xC28, 0x00000000,
408                 0xC2C, 0x00000000,
409                 0xC30, 0x69E9AC44,
410                 0xC34, 0x469652AF,
411                 0xC38, 0x49795994,
412                 0xC3C, 0x0A97971C,
413                 0xC40, 0x1F7C403F,
414                 0xC44, 0x000100B7,
415                 0xC48, 0xEC020107,
416                 0xC4C, 0x007F037F,
417                 0xC50, 0x69553420,
418                 0xC54, 0x43BC0094,
419                 0xC58, 0x00013149,
420                 0xC5C, 0x00250492,
421                 0xC60, 0x00000000,
422                 0xC64, 0x7112848B,
423                 0xC68, 0x47C00BFF,
424                 0xC6C, 0x00000036,
425                 0xC70, 0x2C7F000D,
426                 0xC74, 0x020610DB,
427                 0xC78, 0x0000001F,
428                 0xC7C, 0x00B91612,
429                 0xC80, 0x390000E4,
430                 0xC84, 0x20F60000,
431                 0xC88, 0x40000100,
432                 0xC8C, 0x20200000,
433                 0xC90, 0x00020E1A,
434                 0xC94, 0x00000000,
435                 0xC98, 0x00020E1A,
436                 0xC9C, 0x00007F7F,
437                 0xCA0, 0x00000000,
438                 0xCA4, 0x000300A0,
439                 0xCA8, 0x00000000,
440                 0xCAC, 0x00000000,
441                 0xCB0, 0x00000000,
442                 0xCB4, 0x00000000,
443                 0xCB8, 0x00000000,
444                 0xCBC, 0x28000000,
445                 0xCC0, 0x00000000,
446                 0xCC4, 0x00000000,
447                 0xCC8, 0x00000000,
448                 0xCCC, 0x00000000,
449                 0xCD0, 0x00000000,
450                 0xCD4, 0x00000000,
451                 0xCD8, 0x64B22427,
452                 0xCDC, 0x00766932,
453                 0xCE0, 0x00222222,
454                 0xCE4, 0x00000000,
455                 0xCE8, 0x37644302,
456                 0xCEC, 0x2F97D40C,
457                 0xD00, 0x00000740,
458                 0xD04, 0x40020401,
459                 0xD08, 0x0000907F,
460                 0xD0C, 0x20010201,
461                 0xD10, 0xA0633333,
462                 0xD14, 0x3333BC53,
463                 0xD18, 0x7A8F5B6F,
464                 0xD2C, 0xCC979975,
465                 0xD30, 0x00000000,
466                 0xD34, 0x80608000,
467                 0xD38, 0x00000000,
468                 0xD3C, 0x00127353,
469                 0xD40, 0x00000000,
470                 0xD44, 0x00000000,
471                 0xD48, 0x00000000,
472                 0xD4C, 0x00000000,
473                 0xD50, 0x6437140A,
474                 0xD54, 0x00000000,
475                 0xD58, 0x00000282,
476                 0xD5C, 0x30032064,
477                 0xD60, 0x4653DE68,
478                 0xD64, 0x04518A3C,
479                 0xD68, 0x00002101,
480                 0xD6C, 0x2A201C16,
481                 0xD70, 0x1812362E,
482                 0xD74, 0x322C2220,
483                 0xD78, 0x000E3C24,
484                 0xE00, 0x2D2D2D2D,
485                 0xE04, 0x2D2D2D2D,
486                 0xE08, 0x0390272D,
487                 0xE10, 0x2D2D2D2D,
488                 0xE14, 0x2D2D2D2D,
489                 0xE18, 0x2D2D2D2D,
490                 0xE1C, 0x2D2D2D2D,
491                 0xE28, 0x00000000,
492                 0xE30, 0x1000DC1F,
493                 0xE34, 0x10008C1F,
494                 0xE38, 0x02140102,
495                 0xE3C, 0x681604C2,
496                 0xE40, 0x01007C00,
497                 0xE44, 0x01004800,
498                 0xE48, 0xFB000000,
499                 0xE4C, 0x000028D1,
500                 0xE50, 0x1000DC1F,
501                 0xE54, 0x10008C1F,
502                 0xE58, 0x02140102,
503                 0xE5C, 0x28160D05,
504                 0xE60, 0x00000008,
505                 0xE68, 0x001B2556,
506                 0xE6C, 0x00C00096,
507                 0xE70, 0x00C00096,
508                 0xE74, 0x01000056,
509                 0xE78, 0x01000014,
510                 0xE7C, 0x01000056,
511                 0xE80, 0x01000014,
512                 0xE84, 0x00C00096,
513                 0xE88, 0x01000056,
514                 0xE8C, 0x00C00096,
515                 0xED0, 0x00C00096,
516                 0xED4, 0x00C00096,
517                 0xED8, 0x00C00096,
518                 0xEDC, 0x000000D6,
519                 0xEE0, 0x000000D6,
520                 0xEEC, 0x01C00016,
521                 0xF14, 0x00000003,
522                 0xF4C, 0x00000000,
523                 0xF00, 0x00000300,
524                 0x820, 0x01000100,
525                 0x800, 0x83040000,
526
527 };
528
529 void ODM_ReadAndConfig_MP_8723B_PHY_REG(PDM_ODM_T pDM_Odm)
530 {
531         u32 i = 0;
532         u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_PHY_REG);
533         u32 *Array = Array_MP_8723B_PHY_REG;
534
535         ODM_RT_TRACE(
536                 pDM_Odm,
537                 ODM_COMP_INIT,
538                 ODM_DBG_LOUD,
539                 ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n")
540         );
541
542         for (i = 0; i < ArrayLen; i += 2) {
543                 u32 v1 = Array[i];
544                 u32 v2 = Array[i+1];
545
546                 /*  This (offset, data) pair doesn't care the condition. */
547                 if (v1 < 0x40000000) {
548                         odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
549                         continue;
550                 } else {
551                         /*  This line is the beginning of branch. */
552                         bool bMatched = true;
553                         u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
554
555                         if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
556                                 bMatched = true;
557                                 READ_NEXT_PAIR(v1, v2, i);
558                         } else if (!CheckPositive(pDM_Odm, v1, v2)) {
559                                 bMatched = false;
560                                 READ_NEXT_PAIR(v1, v2, i);
561                                 READ_NEXT_PAIR(v1, v2, i);
562                         } else {
563                                 READ_NEXT_PAIR(v1, v2, i);
564                                 if (!CheckNegative(pDM_Odm, v1, v2))
565                                         bMatched = false;
566                                 else
567                                         bMatched = true;
568                                 READ_NEXT_PAIR(v1, v2, i);
569                         }
570
571                         if (bMatched == false) {
572                                 /*  Condition isn't matched.
573                                 *   Discard the following (offset, data) pairs.
574                                 */
575                                 while (v1 < 0x40000000 && i < ArrayLen-2)
576                                         READ_NEXT_PAIR(v1, v2, i);
577
578                                 i -= 2; /*  prevent from for-loop += 2 */
579                         } else { /*  Configure matched pairs and skip to end of if-else. */
580                                 while (v1 < 0x40000000 && i < ArrayLen-2) {
581                                         odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
582                                         READ_NEXT_PAIR(v1, v2, i);
583                                 }
584
585                                 /*  Keeps reading until ENDIF. */
586                                 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
587                                 while (cCond != COND_ENDIF && i < ArrayLen-2) {
588                                         READ_NEXT_PAIR(v1, v2, i);
589                                         cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
590                                 }
591                         }
592                 }
593         }
594 }
595
596 /******************************************************************************
597 *                           PHY_REG_PG.TXT
598 ******************************************************************************/
599
600 static u32 Array_MP_8723B_PHY_REG_PG[] = {
601         0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003800,
602         0, 0, 0, 0x0000086c, 0xffffff00, 0x32343600,
603         0, 0, 0, 0x00000e00, 0xffffffff, 0x40424444,
604         0, 0, 0, 0x00000e04, 0xffffffff, 0x28323638,
605         0, 0, 0, 0x00000e10, 0xffffffff, 0x38404244,
606         0, 0, 0, 0x00000e14, 0xffffffff, 0x26303436
607 };
608
609 void ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(PDM_ODM_T pDM_Odm)
610 {
611         u32 i = 0;
612         u32 *Array = Array_MP_8723B_PHY_REG_PG;
613
614         ODM_RT_TRACE(
615                 pDM_Odm,
616                 ODM_COMP_INIT,
617                 ODM_DBG_LOUD,
618                 ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG_PG\n")
619         );
620
621         pDM_Odm->PhyRegPgVersion = 1;
622         pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;
623
624         for (i = 0; i < ARRAY_SIZE(Array_MP_8723B_PHY_REG_PG); i += 6) {
625                 u32 v1 = Array[i];
626                 u32 v2 = Array[i+1];
627                 u32 v3 = Array[i+2];
628                 u32 v4 = Array[i+3];
629                 u32 v5 = Array[i+4];
630                 u32 v6 = Array[i+5];
631
632                 odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);
633         }
634 }