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