xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8723ds/hal/phydm/rtl8723d/halhwimg8723d_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.2*/
17 #include "mp_precomp.h"
18 #include "../phydm_precomp.h"
19 
20 #if (RTL8723D_SUPPORT == 1)
21 static boolean
check_positive(struct dm_struct * dm,const u32 condition1,const u32 condition2,const u32 condition3,const u32 condition4)22 check_positive(
23 	struct dm_struct *dm,
24 	const u32	condition1,
25 	const u32	condition2,
26 	const u32	condition3,
27 	const u32	condition4
28 )
29 {
30 	u8	_board_type = ((dm->board_type & BIT(4)) >> 4) << 0 | /* _GLNA*/
31 			((dm->board_type & BIT(3)) >> 3) << 1 | /* _GPA*/
32 			((dm->board_type & BIT(7)) >> 7) << 2 | /* _ALNA*/
33 			((dm->board_type & BIT(6)) >> 6) << 3 | /* _APA */
34 			((dm->board_type & BIT(2)) >> 2) << 4 | /* _BT*/
35 			((dm->board_type & BIT(1)) >> 1) << 5 | /* _NGFF*/
36 			((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 = (dm->cut_version ==  ODM_CUT_A) ? 15 : dm->cut_version;
41 	u8	pkg_type_for_para = (dm->package_type == 0) ? 15 : dm->package_type;
42 
43 	u32	driver1 = cut_version_for_para << 24 |
44 			(dm->support_interface & 0xF0) << 16 |
45 			dm->support_platform << 16 |
46 			pkg_type_for_para << 12 |
47 			(dm->support_interface & 0x0F) << 8  |
48 			_board_type;
49 
50 	u32	driver2 = (dm->type_glna & 0xFF) <<  0 |
51 			(dm->type_gpa & 0xFF)  <<  8 |
52 			(dm->type_alna & 0xFF) << 16 |
53 			(dm->type_apa & 0xFF)  << 24;
54 
55 	u32	driver3 = 0;
56 
57 	u32	driver4 = (dm->type_glna & 0xFF00) >>  8 |
58 			(dm->type_gpa & 0xFF00) |
59 			(dm->type_alna & 0xFF00) << 8 |
60 			(dm->type_apa & 0xFF00)  << 16;
61 
62 	PHYDM_DBG(dm, ODM_COMP_INIT,
63 		  "===> %s (cond1, cond2, cond3, cond4) = (0x%X 0x%X 0x%X 0x%X)\n",
64 		  __func__, cond1, cond2, cond3, cond4);
65 	PHYDM_DBG(dm, ODM_COMP_INIT,
66 		  "===> %s (driver1, driver2, driver3, driver4) = (0x%X 0x%X 0x%X 0x%X)\n",
67 		  __func__, driver1, driver2, driver3, driver4);
68 
69 	PHYDM_DBG(dm, ODM_COMP_INIT,
70 		  "	(Platform, Interface) = (0x%X, 0x%X)\n",
71 		  dm->support_platform, dm->support_interface);
72 	PHYDM_DBG(dm, ODM_COMP_INIT,
73 		  "	(Board, Package) = (0x%X, 0x%X)\n", dm->board_type,
74 		  dm->package_type);
75 
76 
77 	/*============== value Defined Check ===============*/
78 	/*QFN type [15:12] and cut version [27:24] need to do value check*/
79 
80 	if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
81 		return false;
82 	if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
83 		return false;
84 
85 	/*=============== Bit Defined Check ================*/
86 	/* We don't care [31:28] */
87 
88 	cond1 &= 0x00FF0FFF;
89 	driver1 &= 0x00FF0FFF;
90 
91 	if ((cond1 & driver1) == cond1) {
92 		u32	bit_mask = 0;
93 
94 		if ((cond1 & 0x0F) == 0) /* board_type is DONTCARE*/
95 			return true;
96 
97 		if ((cond1 & BIT(0)) != 0) /*GLNA*/
98 			bit_mask |= 0x000000FF;
99 		if ((cond1 & BIT(1)) != 0) /*GPA*/
100 			bit_mask |= 0x0000FF00;
101 		if ((cond1 & BIT(2)) != 0) /*ALNA*/
102 			bit_mask |= 0x00FF0000;
103 		if ((cond1 & BIT(3)) != 0) /*APA*/
104 			bit_mask |= 0xFF000000;
105 
106 		if (((cond2 & bit_mask) == (driver2 & bit_mask)) && ((cond4 & bit_mask) == (driver4 & bit_mask)))  /* board_type of each RF path is matched*/
107 			return true;
108 		else
109 			return false;
110 	} else
111 		return false;
112 }
113 
114 /******************************************************************************
115 *                           agc_tab.TXT
116 ******************************************************************************/
117 
118 u32 array_mp_8723d_agc_tab[] = {
119 		0xC78, 0xFE000101,
120 		0xC78, 0xFD010101,
121 		0xC78, 0xFC020101,
122 		0xC78, 0xFB030101,
123 		0xC78, 0xFA040101,
124 		0xC78, 0xF9050101,
125 		0xC78, 0xF8060101,
126 		0xC78, 0xF7070101,
127 		0xC78, 0xF6080101,
128 		0xC78, 0xF5090101,
129 		0xC78, 0xF40A0101,
130 		0xC78, 0xF30B0101,
131 		0xC78, 0xF20C0101,
132 		0xC78, 0xF10D0101,
133 		0xC78, 0xF00E0101,
134 		0xC78, 0xEF0F0101,
135 		0xC78, 0xEE100101,
136 		0xC78, 0xED110101,
137 		0xC78, 0xEC120101,
138 		0xC78, 0xEB130101,
139 		0xC78, 0xEA140101,
140 		0xC78, 0xE9150101,
141 		0xC78, 0xE8160101,
142 		0xC78, 0xE7170101,
143 		0xC78, 0xE6180101,
144 		0xC78, 0xE5190101,
145 		0xC78, 0xE41A0101,
146 		0xC78, 0xE31B0101,
147 		0xC78, 0xE21C0101,
148 		0xC78, 0xE11D0101,
149 		0xC78, 0xE01E0101,
150 		0xC78, 0x861F0101,
151 		0xC78, 0x85200101,
152 		0xC78, 0x84210101,
153 		0xC78, 0x83220101,
154 		0xC78, 0x82230101,
155 		0xC78, 0x81240101,
156 		0xC78, 0x80250101,
157 		0xC78, 0x44260101,
158 		0xC78, 0x43270101,
159 		0xC78, 0x42280101,
160 		0xC78, 0x41290101,
161 		0xC78, 0x402A0101,
162 		0xC78, 0x022B0101,
163 		0xC78, 0x012C0101,
164 		0xC78, 0x002D0101,
165 		0xC78, 0xC52E0001,
166 		0xC78, 0xC42F0001,
167 		0xC78, 0xC3300001,
168 		0xC78, 0xC2310001,
169 		0xC78, 0xC1320001,
170 		0xC78, 0xC0330001,
171 		0xC78, 0x04340001,
172 		0xC78, 0x03350001,
173 		0xC78, 0x02360001,
174 		0xC78, 0x01370001,
175 		0xC78, 0x00380001,
176 		0xC78, 0x00390001,
177 		0xC78, 0x003A0001,
178 		0xC78, 0x003B0001,
179 		0xC78, 0x003C0001,
180 		0xC78, 0x003D0001,
181 		0xC78, 0x003E0001,
182 		0xC78, 0x003F0001,
183 		0xC78, 0x6F002001,
184 		0xC78, 0x6F012001,
185 		0xC78, 0x6F022001,
186 		0xC78, 0x6F032001,
187 		0xC78, 0x6F042001,
188 		0xC78, 0x6F052001,
189 		0xC78, 0x6F062001,
190 		0xC78, 0x6F072001,
191 		0xC78, 0x6F082001,
192 		0xC78, 0x6F092001,
193 		0xC78, 0x6F0A2001,
194 		0xC78, 0x6F0B2001,
195 		0xC78, 0x6F0C2001,
196 		0xC78, 0x6F0D2001,
197 		0xC78, 0x6F0E2001,
198 		0xC78, 0x6F0F2001,
199 		0xC78, 0x6F102001,
200 		0xC78, 0x6F112001,
201 		0xC78, 0x6F122001,
202 		0xC78, 0x6F132001,
203 		0xC78, 0x6F142001,
204 		0xC78, 0x6F152001,
205 		0xC78, 0x6F162001,
206 		0xC78, 0x6F172001,
207 		0xC78, 0x6F182001,
208 		0xC78, 0x6F192001,
209 		0xC78, 0x6F1A2001,
210 		0xC78, 0x6F1B2001,
211 		0xC78, 0x6F1C2001,
212 		0xC78, 0x6F1D2001,
213 		0xC78, 0x6F1E2001,
214 		0xC78, 0x6F1F2001,
215 		0xC78, 0x6F202001,
216 		0xC78, 0x6F212001,
217 		0xC78, 0x6F222001,
218 		0xC78, 0x6F232001,
219 		0xC78, 0x6E242001,
220 		0xC78, 0x6D252001,
221 		0xC78, 0x6C262001,
222 		0xC78, 0x6B272001,
223 		0xC78, 0x6A282001,
224 		0xC78, 0x69292001,
225 		0xC78, 0x4B2A2001,
226 		0xC78, 0x4A2B2001,
227 		0xC78, 0x492C2001,
228 		0xC78, 0x482D2001,
229 		0xC78, 0x472E2001,
230 		0xC78, 0x462F2001,
231 		0xC78, 0x45302001,
232 		0xC78, 0x44312001,
233 		0xC78, 0x43322001,
234 		0xC78, 0x42332001,
235 		0xC78, 0x41342001,
236 		0xC78, 0x40352001,
237 		0xC78, 0x02362001,
238 		0xC78, 0x01372001,
239 		0xC78, 0x00382001,
240 		0xC78, 0x00392001,
241 		0xC78, 0x003A2001,
242 		0xC78, 0x003B2001,
243 		0xC78, 0x003C2001,
244 		0xC78, 0x003D2001,
245 		0xC78, 0x003E2001,
246 		0xC78, 0x003F2001,
247 		0xC78, 0x7F003101,
248 		0xC78, 0x7F013101,
249 		0xC78, 0x7F023101,
250 		0xC78, 0x7F033101,
251 		0xC78, 0x7F043101,
252 		0xC78, 0x7F053101,
253 		0xC78, 0x7F063101,
254 		0xC78, 0x7F073101,
255 		0xC78, 0x7E083101,
256 		0xC78, 0x7D093101,
257 		0xC78, 0x7C0A3101,
258 		0xC78, 0x7B0B3101,
259 		0xC78, 0x7A0C3101,
260 		0xC78, 0x790D3101,
261 		0xC78, 0x780E3101,
262 		0xC78, 0x770F3101,
263 		0xC78, 0x76103101,
264 		0xC78, 0x75113101,
265 		0xC78, 0x74123101,
266 		0xC78, 0x73133101,
267 		0xC78, 0x72143101,
268 		0xC78, 0x71153101,
269 		0xC78, 0x70163101,
270 		0xC78, 0x6F173101,
271 		0xC78, 0x6E183101,
272 		0xC78, 0x6D193101,
273 		0xC78, 0x6C1A3101,
274 		0xC78, 0x6B1B3101,
275 		0xC78, 0x6A1C3101,
276 		0xC78, 0x691D3101,
277 		0xC78, 0x681E3101,
278 		0xC78, 0x4B1F3101,
279 		0xC78, 0x4A203101,
280 		0xC78, 0x49213101,
281 		0xC78, 0x48223101,
282 		0xC78, 0x47233101,
283 		0xC78, 0x46243101,
284 		0xC78, 0x45253101,
285 		0xC78, 0x44263101,
286 		0xC78, 0x43273101,
287 		0xC78, 0x42283101,
288 		0xC78, 0x41293101,
289 		0xC78, 0x402A3101,
290 		0xC78, 0x022B3101,
291 		0xC78, 0x012C3101,
292 		0xC78, 0x002D3101,
293 		0xC78, 0x002E3101,
294 		0xC78, 0x002F3101,
295 		0xC78, 0x00303101,
296 		0xC78, 0x00313101,
297 		0xC78, 0x00323101,
298 		0xC78, 0x00333101,
299 		0xC78, 0x00343101,
300 		0xC78, 0x00353101,
301 		0xC78, 0x00363101,
302 		0xC78, 0x00373101,
303 		0xC78, 0x00383101,
304 		0xC78, 0x00393101,
305 		0xC78, 0x003A3101,
306 		0xC78, 0x003B3101,
307 		0xC78, 0x003C3101,
308 		0xC78, 0x003D3101,
309 		0xC78, 0x003E3101,
310 		0xC78, 0x003F3101,
311 		0xC78, 0xFE403101,
312 		0xC78, 0xFD413101,
313 		0xC78, 0xFC423101,
314 		0xC78, 0xFB433101,
315 		0xC78, 0xFA443101,
316 		0xC78, 0xF9453101,
317 		0xC78, 0xF8463101,
318 		0xC78, 0xF7473101,
319 		0xC78, 0xF6483101,
320 		0xC78, 0xF5493101,
321 		0xC78, 0xF44A3101,
322 		0xC78, 0xF34B3101,
323 		0xC78, 0xF24C3101,
324 		0xC78, 0xF14D3101,
325 		0xC78, 0xF04E3101,
326 		0xC78, 0xEF4F3101,
327 		0xC78, 0xEE503101,
328 		0xC78, 0xED513101,
329 		0xC78, 0xEC523101,
330 		0xC78, 0xEB533101,
331 		0xC78, 0xEA543101,
332 		0xC78, 0xE9553101,
333 		0xC78, 0xE8563101,
334 		0xC78, 0xE7573101,
335 		0xC78, 0xE6583101,
336 		0xC78, 0xE5593101,
337 		0xC78, 0xE45A3101,
338 		0xC78, 0xE35B3101,
339 		0xC78, 0xE25C3101,
340 		0xC78, 0xE15D3101,
341 		0xC78, 0xE05E3101,
342 		0xC78, 0x865F3101,
343 		0xC78, 0x85603101,
344 		0xC78, 0x84613101,
345 		0xC78, 0x83623101,
346 		0xC78, 0x82633101,
347 		0xC78, 0x81643101,
348 		0xC78, 0x80653101,
349 		0xC78, 0x80663101,
350 		0xC78, 0x80673101,
351 		0xC78, 0x80683101,
352 		0xC78, 0x80693101,
353 		0xC78, 0x806A3101,
354 		0xC78, 0x806B3101,
355 		0xC78, 0x806C3101,
356 		0xC78, 0x806D3101,
357 		0xC78, 0x806E3101,
358 		0xC78, 0x806F3101,
359 		0xC78, 0x80703101,
360 		0xC78, 0x80713101,
361 		0xC78, 0x80723101,
362 		0xC78, 0x80733101,
363 		0xC78, 0x80743101,
364 		0xC78, 0x80753101,
365 		0xC78, 0x80763101,
366 		0xC78, 0x80773101,
367 		0xC78, 0x80783101,
368 		0xC78, 0x80793101,
369 		0xC78, 0x807A3101,
370 		0xC78, 0x807B3101,
371 		0xC78, 0x807C3101,
372 		0xC78, 0x807D3101,
373 		0xC78, 0x807E3101,
374 		0xC78, 0x807F3101,
375 		0xC78, 0xEF402001,
376 		0xC78, 0xEF412001,
377 		0xC78, 0xEF422001,
378 		0xC78, 0xEF432001,
379 		0xC78, 0xEF442001,
380 		0xC78, 0xEF452001,
381 		0xC78, 0xEF462001,
382 		0xC78, 0xEF472001,
383 		0xC78, 0xEF482001,
384 		0xC78, 0xEF492001,
385 		0xC78, 0xEF4A2001,
386 		0xC78, 0xEF4B2001,
387 		0xC78, 0xEF4C2001,
388 		0xC78, 0xEF4D2001,
389 		0xC78, 0xEF4E2001,
390 		0xC78, 0xEF4F2001,
391 		0xC78, 0xEF502001,
392 		0xC78, 0xEF512001,
393 		0xC78, 0xEF522001,
394 		0xC78, 0xEF532001,
395 		0xC78, 0xEF542001,
396 		0xC78, 0xEF552001,
397 		0xC78, 0xEF562001,
398 		0xC78, 0xEF572001,
399 		0xC78, 0xEF582001,
400 		0xC78, 0xEF592001,
401 		0xC78, 0xEF5A2001,
402 		0xC78, 0xEF5B2001,
403 		0xC78, 0xEF5C2001,
404 		0xC78, 0xEF5D2001,
405 		0xC78, 0xEF5E2001,
406 		0xC78, 0xEF5F2001,
407 		0xC78, 0xEF602001,
408 		0xC78, 0xEE612001,
409 		0xC78, 0xED622001,
410 		0xC78, 0xEC632001,
411 		0xC78, 0xEB642001,
412 		0xC78, 0xEA652001,
413 		0xC78, 0xE9662001,
414 		0xC78, 0xE8672001,
415 		0xC78, 0xCB682001,
416 		0xC78, 0xCA692001,
417 		0xC78, 0xC96A2001,
418 		0xC78, 0xC86B2001,
419 		0xC78, 0xC76C2001,
420 		0xC78, 0xC66D2001,
421 		0xC78, 0xC56E2001,
422 		0xC78, 0xC46F2001,
423 		0xC78, 0xC3702001,
424 		0xC78, 0xC2712001,
425 		0xC78, 0xC1722001,
426 		0xC78, 0xC0732001,
427 		0xC78, 0x82742001,
428 		0xC78, 0x81752001,
429 		0xC78, 0x80762001,
430 		0xC78, 0x80772001,
431 		0xC78, 0x80782001,
432 		0xC78, 0x80792001,
433 		0xC78, 0x807A2001,
434 		0xC78, 0x807B2001,
435 		0xC78, 0x807C2001,
436 		0xC78, 0x807D2001,
437 		0xC78, 0x807E2001,
438 		0xC78, 0x807F2001,
439 		0xC78, 0xFA001101,
440 		0xC78, 0xF9011101,
441 		0xC78, 0xF8021101,
442 		0xC78, 0xF7031101,
443 		0xC78, 0xF6041101,
444 		0xC78, 0xF5051101,
445 		0xC78, 0xF4061101,
446 		0xC78, 0xD7071101,
447 		0xC78, 0xD6081101,
448 		0xC78, 0xD5091101,
449 		0xC78, 0xD40A1101,
450 		0xC78, 0x970B1101,
451 		0xC78, 0x960C1101,
452 		0xC78, 0x950D1101,
453 		0xC78, 0x940E1101,
454 		0xC78, 0x930F1101,
455 		0xC78, 0x92101101,
456 		0xC78, 0x91111101,
457 		0xC78, 0x90121101,
458 		0xC78, 0x8F131101,
459 		0xC78, 0x8E141101,
460 		0xC78, 0x8D151101,
461 		0xC78, 0x8C161101,
462 		0xC78, 0x8B171101,
463 		0xC78, 0x8A181101,
464 		0xC78, 0x89191101,
465 		0xC78, 0x881A1101,
466 		0xC78, 0x871B1101,
467 		0xC78, 0x861C1101,
468 		0xC78, 0x851D1101,
469 		0xC78, 0x841E1101,
470 		0xC78, 0x831F1101,
471 		0xC78, 0x82201101,
472 		0xC78, 0x81211101,
473 		0xC78, 0x80221101,
474 		0xC78, 0x43231101,
475 		0xC78, 0x42241101,
476 		0xC78, 0x41251101,
477 		0xC78, 0x04261101,
478 		0xC78, 0x03271101,
479 		0xC78, 0x02281101,
480 		0xC78, 0x01291101,
481 		0xC78, 0x002A1101,
482 		0xC78, 0xC42B1001,
483 		0xC78, 0xC32C1001,
484 		0xC78, 0xC22D1001,
485 		0xC78, 0xC12E1001,
486 		0xC78, 0xC02F1001,
487 		0xC78, 0x85301001,
488 		0xC78, 0x84311001,
489 		0xC78, 0x83321001,
490 		0xC78, 0x82331001,
491 		0xC78, 0x81341001,
492 		0xC78, 0x80351001,
493 		0xC78, 0x05361001,
494 		0xC78, 0x04371001,
495 		0xC78, 0x03381001,
496 		0xC78, 0x02391001,
497 		0xC78, 0x013A1001,
498 		0xC78, 0x003B1001,
499 		0xC78, 0x003C1001,
500 		0xC78, 0x003D1001,
501 		0xC78, 0x003E1001,
502 		0xC78, 0x003F1001,
503 		0xC50, 0x69553422,
504 		0xC50, 0x69553420,
505 
506 };
507 
508 void
odm_read_and_config_mp_8723d_agc_tab(struct dm_struct * dm)509 odm_read_and_config_mp_8723d_agc_tab(struct dm_struct *dm)
510 {
511 	u32	i = 0;
512 	u8	c_cond;
513 	boolean	is_matched = true, is_skipped = false;
514 	u32	array_len = sizeof(array_mp_8723d_agc_tab) / sizeof(u32);
515 	u32	*array = array_mp_8723d_agc_tab;
516 
517 	u32	v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
518 
519 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
520 
521 	while ((i + 1) < array_len) {
522 		v1 = array[i];
523 		v2 = array[i + 1];
524 
525 		if (v1 & (BIT(31) | BIT(30))) {/*positive & negative condition*/
526 			if (v1 & BIT(31)) {/* positive condition*/
527 				c_cond  = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
528 				if (c_cond == COND_ENDIF) {/*end*/
529 					is_matched = true;
530 					is_skipped = false;
531 					PHYDM_DBG(dm, ODM_COMP_INIT, "ENDIF\n");
532 				} else if (c_cond == COND_ELSE) { /*else*/
533 					is_matched = is_skipped ? false : true;
534 					PHYDM_DBG(dm, ODM_COMP_INIT, "ELSE\n");
535 				} else {/*if , else if*/
536 					pre_v1 = v1;
537 					pre_v2 = v2;
538 					PHYDM_DBG(dm, ODM_COMP_INIT, "IF or ELSE IF\n");
539 				}
540 			} else if (v1 & BIT(30)) { /*negative condition*/
541 				if (is_skipped == false) {
542 					if (check_positive(dm, pre_v1, pre_v2, v1, v2)) {
543 						is_matched = true;
544 						is_skipped = true;
545 					} else {
546 						is_matched = false;
547 						is_skipped = false;
548 					}
549 				} else
550 					is_matched = false;
551 			}
552 		} else {
553 			if (is_matched)
554 				odm_config_bb_agc_8723d(dm, v1, MASKDWORD, v2);
555 		}
556 		i = i + 2;
557 	}
558 }
559 
560 u32
odm_get_version_mp_8723d_agc_tab(void)561 odm_get_version_mp_8723d_agc_tab(void)
562 {
563 		return 42;
564 }
565 
566 /******************************************************************************
567 *                           phy_reg.TXT
568 ******************************************************************************/
569 
570 u32 array_mp_8723d_phy_reg[] = {
571 		0x800, 0x80046C00,
572 		0x804, 0x00000003,
573 		0x808, 0x0000FC00,
574 		0x80C, 0x0000000A,
575 		0x810, 0x10001331,
576 		0x814, 0x020C3910,
577 		0x818, 0x00200385,
578 		0x81C, 0x00000000,
579 		0x820, 0x01000100,
580 		0x824, 0x00390204,
581 		0x828, 0x00000000,
582 		0x82C, 0x00000000,
583 		0x830, 0x00000000,
584 		0x834, 0x00000000,
585 		0x838, 0x00000000,
586 		0x83C, 0x00000000,
587 		0x840, 0x00010000,
588 		0x844, 0x00000000,
589 		0x848, 0x00000000,
590 		0x84C, 0x00000000,
591 		0x850, 0x00000000,
592 		0x854, 0x00000000,
593 		0x858, 0x569A11A9,
594 		0x85C, 0x01000014,
595 		0x860, 0x66F60110,
596 		0x864, 0x461F0641,
597 		0x868, 0x00000000,
598 		0x86C, 0x27272700,
599 		0x870, 0x07000460,
600 		0x874, 0x25004000,
601 		0x878, 0x00000808,
602 		0x87C, 0x004F0201,
603 		0x880, 0xB2002E12,
604 		0x884, 0x00000007,
605 		0x888, 0x00000000,
606 		0x88C, 0xCCC000C0,
607 		0x890, 0x00000800,
608 		0x894, 0xFFFFFFFE,
609 		0x898, 0x40302010,
610 		0x89C, 0x00706050,
611 		0x900, 0x00000000,
612 		0x904, 0x00000023,
613 		0x908, 0x00000000,
614 		0x90C, 0x81121111,
615 		0x910, 0x00000402,
616 		0x914, 0x00000300,
617 		0x920, 0x18C6318C,
618 		0x924, 0x0000018C,
619 		0x948, 0x99000000,
620 		0x94C, 0x00000010,
621 		0x950, 0x00003800,
622 		0x954, 0x5A380000,
623 		0x958, 0x4BC6D87A,
624 		0x95C, 0x04EB9B79,
625 		0x96C, 0x00000003,
626 		0x970, 0x00000000,
627 		0x974, 0x00000000,
628 		0x978, 0x00000000,
629 		0x97C, 0x13000000,
630 		0x980, 0x00000000,
631 		0xA00, 0x00D046C8,
632 		0xA04, 0x80FF800C,
633 		0xA08, 0x8C838300,
634 		0xA0C, 0x2E20100F,
635 		0xA10, 0x9500BB78,
636 		0xA14, 0x1114D028,
637 		0xA18, 0x00881117,
638 		0xA1C, 0x89140F00,
639 		0xA20, 0xE82C0001,
640 		0xA24, 0x64B80C1C,
641 		0xA28, 0x00008810,
642 		0xA2C, 0x00D30000,
643 		0xA70, 0x101FBF00,
644 		0xA74, 0x00000007,
645 		0xA78, 0x00008900,
646 		0xA7C, 0x225B0606,
647 		0xA80, 0x2180FA74,
648 		0xA84, 0x00200000,
649 		0xA88, 0x040C0000,
650 		0xA8C, 0x12345678,
651 		0xA90, 0xABCDEF00,
652 		0xA94, 0x001B1B89,
653 		0xA98, 0x00000000,
654 		0xA9C, 0x00020000,
655 		0xAA0, 0x00000000,
656 		0xAA4, 0x0000000C,
657 		0xAA8, 0xCA100008,
658 		0xAAC, 0x01235667,
659 		0xAB0, 0x00000000,
660 		0xAB4, 0x20201402,
661 		0xB2C, 0x00000000,
662 		0xC00, 0x48071D40,
663 		0xC04, 0x03A05611,
664 		0xC08, 0x000000E4,
665 		0xC0C, 0x6C6C6C6C,
666 		0xC10, 0x28800000,
667 		0xC14, 0x40000100,
668 		0xC18, 0x08800000,
669 		0xC1C, 0x40000100,
670 		0xC20, 0x00000000,
671 		0xC24, 0x00000000,
672 		0xC28, 0x00000000,
673 		0xC2C, 0x00000000,
674 		0xC30, 0x69E9AC48,
675 		0xC34, 0x31000040,
676 		0xC38, 0x21688080,
677 		0xC3C, 0x000016D4,
678 		0xC40, 0x1F78403F,
679 		0xC44, 0x00010036,
680 		0xC48, 0xEC020107,
681 		0xC4C, 0x007F037F,
682 		0xC50, 0x69553420,
683 		0xC54, 0x43BC0094,
684 		0xC58, 0x00015969,
685 		0xC5C, 0x00310492,
686 		0xC60, 0x00280A00,
687 		0xC64, 0x7112848B,
688 		0xC68, 0x47C074FF,
689 		0xC6C, 0x00000036,
690 		0xC70, 0x2C7F000D,
691 		0xC74, 0x020600DB,
692 		0xC78, 0x0000001F,
693 		0xC7C, 0x00B91612,
694 		0xC80, 0x390000E4,
695 		0xC84, 0x21F60000,
696 		0xC88, 0x40000100,
697 		0xC8C, 0x20200000,
698 		0xC90, 0x00091521,
699 		0xC94, 0x00000000,
700 		0xC98, 0x00121820,
701 		0xC9C, 0x00007F7F,
702 		0xCA0, 0x00012000,
703 		0xCA4, 0x800000A0,
704 		0xCA8, 0x84E6C606,
705 		0xCAC, 0x00000060,
706 		0xCB0, 0x00000000,
707 		0xCB4, 0x00000000,
708 		0xCB8, 0x00000000,
709 		0xCBC, 0x28000000,
710 		0xCC0, 0x0010A3D0,
711 		0xCC4, 0x00000F7D,
712 		0xCC8, 0x000442D6,
713 		0xCCC, 0x00000000,
714 		0xCD0, 0x000001C8,
715 		0xCD4, 0x001C8000,
716 		0xCD8, 0x00000100,
717 		0xCDC, 0x40100000,
718 		0xCE0, 0x00222220,
719 		0xCE4, 0x20000000,
720 		0xCE8, 0x37644302,
721 		0xCEC, 0x2F97D40C,
722 		0xD00, 0x00030740,
723 		0xD04, 0x40020401,
724 		0xD08, 0x0000907F,
725 		0xD0C, 0x20010201,
726 		0xD10, 0xA0633333,
727 		0xD14, 0x3333BC53,
728 		0xD18, 0x7A8F5B6F,
729 		0xD2C, 0xCC979975,
730 		0xD30, 0x00000000,
731 		0xD34, 0x40608000,
732 		0xD38, 0x88000000,
733 		0xD3C, 0xC0127343,
734 		0xD40, 0x00000000,
735 		0xD44, 0x00000000,
736 		0xD48, 0x00000000,
737 		0xD4C, 0x00000000,
738 		0xD50, 0x00000038,
739 		0xD54, 0x00000000,
740 		0xD58, 0x00000282,
741 		0xD5C, 0x30032064,
742 		0xD60, 0x4653DE68,
743 		0xD64, 0x04518A3C,
744 		0xD68, 0x00002101,
745 		0xE00, 0x2D2D2D2D,
746 		0xE04, 0x2D2D2D2D,
747 		0xE08, 0x0390272D,
748 		0xE10, 0x2D2D2D2D,
749 		0xE14, 0x2D2D2D2D,
750 		0xE18, 0x2D2D2D2D,
751 		0xE1C, 0x2D2D2D2D,
752 		0xE28, 0x00000000,
753 		0xE30, 0x1000DC1F,
754 		0xE34, 0x10008C1F,
755 		0xE38, 0x02140102,
756 		0xE3C, 0x681604C2,
757 		0xE40, 0x01007C00,
758 		0xE44, 0x01004800,
759 		0xE48, 0xFB000000,
760 		0xE4C, 0x000028D1,
761 		0xE50, 0x1000DC1F,
762 		0xE54, 0x10008C1F,
763 		0xE58, 0x02140102,
764 		0xE5C, 0x28160D05,
765 		0xE60, 0x00000008,
766 		0xE68, 0x001B25A4,
767 		0xE6C, 0x01C00014,
768 		0xE70, 0x01C00016,
769 		0xE74, 0x02000014,
770 		0xE78, 0x02000014,
771 		0xE7C, 0x02000014,
772 		0xE80, 0x02000014,
773 		0xE84, 0x01C00014,
774 		0xE88, 0x02000014,
775 		0xE8C, 0x01C00014,
776 		0xED0, 0x01C00014,
777 		0xED4, 0x01C00014,
778 		0xED8, 0x01C00014,
779 		0xEDC, 0x00000014,
780 		0xEE0, 0x00000014,
781 		0xEE8, 0x21555448,
782 		0xEEC, 0x03C00014,
783 		0xF14, 0x00000003,
784 		0xF00, 0x00100300,
785 		0xF08, 0x0000800B,
786 		0xF0C, 0x0000F007,
787 		0xF10, 0x0000A487,
788 		0xF1C, 0x80000064,
789 		0xF38, 0x00030155,
790 		0xF3C, 0x0000003A,
791 		0xF4C, 0x13000000,
792 		0xF50, 0x00000000,
793 		0xF18, 0x00000000,
794 
795 };
796 
797 void
odm_read_and_config_mp_8723d_phy_reg(struct dm_struct * dm)798 odm_read_and_config_mp_8723d_phy_reg(struct dm_struct *dm)
799 {
800 	u32	i = 0;
801 	u8	c_cond;
802 	boolean	is_matched = true, is_skipped = false;
803 	u32	array_len = sizeof(array_mp_8723d_phy_reg) / sizeof(u32);
804 	u32	*array = array_mp_8723d_phy_reg;
805 
806 	u32	v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
807 
808 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
809 
810 	while ((i + 1) < array_len) {
811 		v1 = array[i];
812 		v2 = array[i + 1];
813 
814 		if (v1 & (BIT(31) | BIT(30))) {/*positive & negative condition*/
815 			if (v1 & BIT(31)) {/* positive condition*/
816 				c_cond  = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
817 				if (c_cond == COND_ENDIF) {/*end*/
818 					is_matched = true;
819 					is_skipped = false;
820 					PHYDM_DBG(dm, ODM_COMP_INIT, "ENDIF\n");
821 				} else if (c_cond == COND_ELSE) { /*else*/
822 					is_matched = is_skipped ? false : true;
823 					PHYDM_DBG(dm, ODM_COMP_INIT, "ELSE\n");
824 				} else {/*if , else if*/
825 					pre_v1 = v1;
826 					pre_v2 = v2;
827 					PHYDM_DBG(dm, ODM_COMP_INIT, "IF or ELSE IF\n");
828 				}
829 			} else if (v1 & BIT(30)) { /*negative condition*/
830 				if (is_skipped == false) {
831 					if (check_positive(dm, pre_v1, pre_v2, v1, v2)) {
832 						is_matched = true;
833 						is_skipped = true;
834 					} else {
835 						is_matched = false;
836 						is_skipped = false;
837 					}
838 				} else
839 					is_matched = false;
840 			}
841 		} else {
842 			if (is_matched)
843 				odm_config_bb_phy_8723d(dm, v1, MASKDWORD, v2);
844 		}
845 		i = i + 2;
846 	}
847 }
848 
849 u32
odm_get_version_mp_8723d_phy_reg(void)850 odm_get_version_mp_8723d_phy_reg(void)
851 {
852 		return 42;
853 }
854 
855 /******************************************************************************
856 *                           phy_reg_pg.TXT
857 ******************************************************************************/
858 
859 u32 array_mp_8723d_phy_reg_pg[] = {
860 	0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003200,
861 	0, 0, 0, 0x0000086c, 0xffffff00, 0x32323200,
862 	0, 0, 0, 0x00000e00, 0xffffffff, 0x32343434,
863 	0, 0, 0, 0x00000e04, 0xffffffff, 0x28303032,
864 	0, 0, 0, 0x00000e10, 0xffffffff, 0x30323234,
865 	0, 0, 0, 0x00000e14, 0xffffffff, 0x26282830
866 };
867 
868 void
odm_read_and_config_mp_8723d_phy_reg_pg(struct dm_struct * dm)869 odm_read_and_config_mp_8723d_phy_reg_pg(struct dm_struct *dm)
870 {
871 	u32	i = 0;
872 	u32	array_len = sizeof(array_mp_8723d_phy_reg_pg) / sizeof(u32);
873 	u32	*array = array_mp_8723d_phy_reg_pg;
874 
875 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
876 	void	*adapter = dm->adapter;
877 	HAL_DATA_TYPE	*hal_data = GET_HAL_DATA(((PADAPTER)adapter));
878 
879 	PlatformZeroMemory(hal_data->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT * MAX_BYTES_LINE_HWCONFIG_TXT);
880 	hal_data->nLinesReadPwrByRate = array_len / 6;
881 #endif
882 
883 	PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
884 
885 	dm->phy_reg_pg_version = 1;
886 	dm->phy_reg_pg_value_type = PHY_REG_PG_EXACT_VALUE;
887 
888 	for (i = 0; i < array_len; i += 6) {
889 		u32	v1 = array[i];
890 		u32	v2 = array[i + 1];
891 		u32	v3 = array[i + 2];
892 		u32	v4 = array[i + 3];
893 		u32	v5 = array[i + 4];
894 		u32	v6 = array[i + 5];
895 
896 		odm_config_bb_phy_reg_pg_8723d(dm, v1, v2, v3, v4, v5, v6);
897 
898 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
899 	rsprintf((char *)hal_data->BufOfLinesPwrByRate[i / 6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",
900 		(v1 == 0 ? "2.4G" : "  5G"), (v2 == 0 ? "A" : "B"), (v3 == 0 ? "1Tx" : "2Tx"), v4, v5, v6);
901 #endif
902 	}
903 }
904 
905 
906 
907 #endif /* end of HWIMG_SUPPORT*/
908 
909