xref: /linux/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c (revision 307797159ac25fe5a2048bf5c6a5718298edca57)
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 }
635