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