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 (RTL8703B_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_8703b_agc_tab[] = {
119 0xC78, 0xFC000101,
120 0xC78, 0xFB010101,
121 0xC78, 0xFA020101,
122 0xC78, 0xF9030101,
123 0xC78, 0xF8040101,
124 0xC78, 0xF7050101,
125 0xC78, 0xF6060101,
126 0xC78, 0xF5070101,
127 0xC78, 0xF4080101,
128 0xC78, 0xF3090101,
129 0xC78, 0xF20A0101,
130 0xC78, 0xF10B0101,
131 0xC78, 0xF00C0101,
132 0xC78, 0xEF0D0101,
133 0xC78, 0xEE0E0101,
134 0xC78, 0xED0F0101,
135 0xC78, 0xEC100101,
136 0xC78, 0xEB110101,
137 0xC78, 0xEA120101,
138 0xC78, 0xE9130101,
139 0xC78, 0xE8140101,
140 0xC78, 0xE7150101,
141 0xC78, 0xE6160101,
142 0xC78, 0xE5170101,
143 0xC78, 0xE4180101,
144 0xC78, 0xE3190101,
145 0xC78, 0x661A0101,
146 0xC78, 0x651B0101,
147 0xC78, 0x641C0101,
148 0xC78, 0x631D0101,
149 0xC78, 0x071E0101,
150 0xC78, 0x061F0101,
151 0xC78, 0x05200101,
152 0xC78, 0x04210101,
153 0xC78, 0x03220101,
154 0xC78, 0xE8230001,
155 0xC78, 0xE7240001,
156 0xC78, 0xE6250001,
157 0xC78, 0xE5260001,
158 0xC78, 0xE4270001,
159 0xC78, 0x89280001,
160 0xC78, 0x88290001,
161 0xC78, 0x872A0001,
162 0xC78, 0x862B0001,
163 0xC78, 0x852C0001,
164 0xC78, 0x482D0001,
165 0xC78, 0x472E0001,
166 0xC78, 0x462F0001,
167 0xC78, 0x45300001,
168 0xC78, 0x44310001,
169 0xC78, 0x07320001,
170 0xC78, 0x06330001,
171 0xC78, 0x05340001,
172 0xC78, 0x04350001,
173 0xC78, 0x03360001,
174 0xC78, 0x02370001,
175 0xC78, 0x01380001,
176 0xC78, 0x00390001,
177 0xC78, 0x003A0001,
178 0xC78, 0x003B0001,
179 0xC78, 0x003C0001,
180 0xC78, 0x003D0001,
181 0xC78, 0x003E0001,
182 0xC78, 0x003F0001,
183 0xC78, 0x7F002001,
184 0xC78, 0x7F012001,
185 0xC78, 0x7F022001,
186 0xC78, 0x7F032001,
187 0xC78, 0x7F042001,
188 0xC78, 0x7F052001,
189 0xC78, 0x7F062001,
190 0xC78, 0x7F072001,
191 0xC78, 0x7F082001,
192 0xC78, 0x7F092001,
193 0xC78, 0x7F0A2001,
194 0xC78, 0x7F0B2001,
195 0xC78, 0x7F0C2001,
196 0xC78, 0x7F0D2001,
197 0xC78, 0x7F0E2001,
198 0xC78, 0x7F0F2001,
199 0xC78, 0x7F102001,
200 0xC78, 0x7F112001,
201 0xC78, 0x7E122001,
202 0xC78, 0x7D132001,
203 0xC78, 0x7C142001,
204 0xC78, 0x7B152001,
205 0xC78, 0x7A162001,
206 0xC78, 0x79172001,
207 0xC78, 0x78182001,
208 0xC78, 0x77192001,
209 0xC78, 0x761A2001,
210 0xC78, 0x751B2001,
211 0xC78, 0x741C2001,
212 0xC78, 0x731D2001,
213 0xC78, 0x721E2001,
214 0xC78, 0x711F2001,
215 0xC78, 0x70202001,
216 0xC78, 0x6F212001,
217 0xC78, 0x6E222001,
218 0xC78, 0x6D232001,
219 0xC78, 0x6C242001,
220 0xC78, 0x6B252001,
221 0xC78, 0x6A262001,
222 0xC78, 0x69272001,
223 0xC78, 0x68282001,
224 0xC78, 0x67292001,
225 0xC78, 0x662A2001,
226 0xC78, 0x652B2001,
227 0xC78, 0x642C2001,
228 0xC78, 0x632D2001,
229 0xC78, 0x622E2001,
230 0xC78, 0x612F2001,
231 0xC78, 0x60302001,
232 0xC78, 0x42312001,
233 0xC78, 0x41322001,
234 0xC78, 0x40332001,
235 0xC78, 0x23342001,
236 0xC78, 0x22352001,
237 0xC78, 0x21362001,
238 0xC78, 0x20372001,
239 0xC78, 0x00382001,
240 0xC78, 0x02392001,
241 0xC78, 0x013A2001,
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, 0x7E073101,
255 0xC78, 0x7D083101,
256 0xC78, 0x7C093101,
257 0xC78, 0x7B0A3101,
258 0xC78, 0x7A0B3101,
259 0xC78, 0x790C3101,
260 0xC78, 0x780D3101,
261 0xC78, 0x770E3101,
262 0xC78, 0x760F3101,
263 0xC78, 0x75103101,
264 0xC78, 0x74113101,
265 0xC78, 0x73123101,
266 0xC78, 0x72133101,
267 0xC78, 0x71143101,
268 0xC78, 0x70153101,
269 0xC78, 0x6F163101,
270 0xC78, 0x69173101,
271 0xC78, 0x68183101,
272 0xC78, 0x67193101,
273 0xC78, 0x661A3101,
274 0xC78, 0x651B3101,
275 0xC78, 0x641C3101,
276 0xC78, 0x631D3101,
277 0xC78, 0x621E3101,
278 0xC78, 0x611F3101,
279 0xC78, 0x60203101,
280 0xC78, 0x42213101,
281 0xC78, 0x41223101,
282 0xC78, 0x40233101,
283 0xC78, 0x22243101,
284 0xC78, 0x21253101,
285 0xC78, 0x20263101,
286 0xC78, 0x00273101,
287 0xC78, 0x00283101,
288 0xC78, 0x00293101,
289 0xC78, 0x002A3101,
290 0xC78, 0x002B3101,
291 0xC78, 0x002C3101,
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, 0xFA403101,
312 0xC78, 0xF9413101,
313 0xC78, 0xF8423101,
314 0xC78, 0xF7433101,
315 0xC78, 0xF6443101,
316 0xC78, 0xF5453101,
317 0xC78, 0xF4463101,
318 0xC78, 0xF3473101,
319 0xC78, 0xF2483101,
320 0xC78, 0xE1493101,
321 0xC78, 0xE04A3101,
322 0xC78, 0xEF4B3101,
323 0xC78, 0xEE4C3101,
324 0xC78, 0xED4D3101,
325 0xC78, 0xEC4E3101,
326 0xC78, 0xEB4F3101,
327 0xC78, 0xEA503101,
328 0xC78, 0xE9513101,
329 0xC78, 0xE8523101,
330 0xC78, 0xE7533101,
331 0xC78, 0xE6543101,
332 0xC78, 0xE5553101,
333 0xC78, 0xE4563101,
334 0xC78, 0xE3573101,
335 0xC78, 0xE2583101,
336 0xC78, 0xE1593101,
337 0xC78, 0xE05A3101,
338 0xC78, 0xC25B3101,
339 0xC78, 0xC15C3101,
340 0xC78, 0xC05D3101,
341 0xC78, 0x825E3101,
342 0xC78, 0x815F3101,
343 0xC78, 0x80603101,
344 0xC78, 0x80613101,
345 0xC78, 0x80623101,
346 0xC78, 0x80633101,
347 0xC78, 0x80643101,
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, 0xFF402001,
376 0xC78, 0xFF412001,
377 0xC78, 0xFF422001,
378 0xC78, 0xFF432001,
379 0xC78, 0xFF442001,
380 0xC78, 0xFF452001,
381 0xC78, 0xFF462001,
382 0xC78, 0xFF472001,
383 0xC78, 0xFF482001,
384 0xC78, 0xFF492001,
385 0xC78, 0xFF4A2001,
386 0xC78, 0xFF4B2001,
387 0xC78, 0xFF4C2001,
388 0xC78, 0xFE4D2001,
389 0xC78, 0xFD4E2001,
390 0xC78, 0xFC4F2001,
391 0xC78, 0xFB502001,
392 0xC78, 0xFA512001,
393 0xC78, 0xF9522001,
394 0xC78, 0xF8532001,
395 0xC78, 0xF7542001,
396 0xC78, 0xF6552001,
397 0xC78, 0xF5562001,
398 0xC78, 0xF4572001,
399 0xC78, 0xF3582001,
400 0xC78, 0xF2592001,
401 0xC78, 0xF15A2001,
402 0xC78, 0xF05B2001,
403 0xC78, 0xEF5C2001,
404 0xC78, 0xEE5D2001,
405 0xC78, 0xED5E2001,
406 0xC78, 0xEC5F2001,
407 0xC78, 0xEB602001,
408 0xC78, 0xEA612001,
409 0xC78, 0xE9622001,
410 0xC78, 0xE8632001,
411 0xC78, 0xE7642001,
412 0xC78, 0xE6652001,
413 0xC78, 0xE5662001,
414 0xC78, 0xE4672001,
415 0xC78, 0xE3682001,
416 0xC78, 0xC5692001,
417 0xC78, 0xC46A2001,
418 0xC78, 0xC36B2001,
419 0xC78, 0xA46C2001,
420 0xC78, 0x846D2001,
421 0xC78, 0x836E2001,
422 0xC78, 0x826F2001,
423 0xC78, 0x81702001,
424 0xC78, 0x80712001,
425 0xC78, 0x80722001,
426 0xC78, 0x80732001,
427 0xC78, 0x80742001,
428 0xC78, 0x80752001,
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 0xC50, 0x69553422,
440 0xC50, 0x69553420,
441
442 };
443
444 void
odm_read_and_config_mp_8703b_agc_tab(struct dm_struct * dm)445 odm_read_and_config_mp_8703b_agc_tab(struct dm_struct *dm)
446 {
447 u32 i = 0;
448 u8 c_cond;
449 boolean is_matched = true, is_skipped = false;
450 u32 array_len = sizeof(array_mp_8703b_agc_tab) / sizeof(u32);
451 u32 *array = array_mp_8703b_agc_tab;
452
453 u32 v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
454
455 PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
456
457 while ((i + 1) < array_len) {
458 v1 = array[i];
459 v2 = array[i + 1];
460
461 if (v1 & (BIT(31) | BIT(30))) {/*positive & negative condition*/
462 if (v1 & BIT(31)) {/* positive condition*/
463 c_cond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
464 if (c_cond == COND_ENDIF) {/*end*/
465 is_matched = true;
466 is_skipped = false;
467 PHYDM_DBG(dm, ODM_COMP_INIT, "ENDIF\n");
468 } else if (c_cond == COND_ELSE) { /*else*/
469 is_matched = is_skipped ? false : true;
470 PHYDM_DBG(dm, ODM_COMP_INIT, "ELSE\n");
471 } else {/*if , else if*/
472 pre_v1 = v1;
473 pre_v2 = v2;
474 PHYDM_DBG(dm, ODM_COMP_INIT, "IF or ELSE IF\n");
475 }
476 } else if (v1 & BIT(30)) { /*negative condition*/
477 if (is_skipped == false) {
478 if (check_positive(dm, pre_v1, pre_v2, v1, v2)) {
479 is_matched = true;
480 is_skipped = true;
481 } else {
482 is_matched = false;
483 is_skipped = false;
484 }
485 } else
486 is_matched = false;
487 }
488 } else {
489 if (is_matched)
490 odm_config_bb_agc_8703b(dm, v1, MASKDWORD, v2);
491 }
492 i = i + 2;
493 }
494 }
495
496 u32
odm_get_version_mp_8703b_agc_tab(void)497 odm_get_version_mp_8703b_agc_tab(void)
498 {
499 return 18;
500 }
501
502 /******************************************************************************
503 * phy_reg.TXT
504 ******************************************************************************/
505
506 u32 array_mp_8703b_phy_reg[] = {
507 0x800, 0x83045700,
508 0x804, 0x00000003,
509 0x808, 0x0000FC00,
510 0x80C, 0x0000000A,
511 0x810, 0x10001331,
512 0x814, 0x020C3D10,
513 0x818, 0x02200385,
514 0x81C, 0x00000000,
515 0x820, 0x01000100,
516 0x824, 0x00390204,
517 0x828, 0x00000000,
518 0x82C, 0x00000000,
519 0x830, 0x00000000,
520 0x834, 0x00000000,
521 0x838, 0x00000000,
522 0x83C, 0x00000000,
523 0x840, 0x00010000,
524 0x844, 0x00000000,
525 0x848, 0x00000000,
526 0x84C, 0x00000000,
527 0x850, 0x00000000,
528 0x854, 0x00000000,
529 0x858, 0x569A11A9,
530 0x85C, 0x01000014,
531 0x860, 0x66F60110,
532 0x864, 0x061F0649,
533 0x868, 0x00000000,
534 0x86C, 0x27272700,
535 0x870, 0x07000760,
536 0x874, 0x25004000,
537 0x878, 0x00000808,
538 0x87C, 0x004F0201,
539 0x880, 0xB0000B1E,
540 0x884, 0x00000001,
541 0x888, 0x00000000,
542 0x88C, 0xCCC000C0,
543 0x890, 0x00000800,
544 0x894, 0xFFFFFFFE,
545 0x898, 0x40302010,
546 0x89C, 0x00706050,
547 0x900, 0x00000000,
548 0x904, 0x00000023,
549 0x908, 0x00000000,
550 0x90C, 0x81121111,
551 0x910, 0x00000002,
552 0x914, 0x00000201,
553 0x948, 0x99000000,
554 0x94C, 0x00000010,
555 0x950, 0x20003800,
556 0x954, 0x4A880000,
557 0x958, 0x4BC5D87A,
558 0x95C, 0x04EB9B79,
559 0xA00, 0x00D047C8,
560 0xA04, 0x80FF800C,
561 0xA08, 0x8C838300,
562 0xA0C, 0x2E7F120F,
563 0xA10, 0x9500BB78,
564 0xA14, 0x1114D028,
565 0xA18, 0x00881117,
566 0xA1C, 0x89140F00,
567 0xA20, 0xD1D80000,
568 0xA24, 0x5A7DA0BD,
569 0xA28, 0x0000223B,
570 0xA2C, 0x00D30000,
571 0xA70, 0x101FBF00,
572 0xA74, 0x00000007,
573 0xA78, 0x00008900,
574 0xA7C, 0x225B0606,
575 0xA80, 0x2180FA74,
576 0xA84, 0x00120000,
577 0xA88, 0x040C0000,
578 0xA8C, 0x12345678,
579 0xA90, 0xABCDEF00,
580 0xA94, 0x001B1B89,
581 0xA98, 0x05100000,
582 0xA9C, 0x3F000000,
583 0xAA0, 0x00000000,
584 0xB2C, 0x00000000,
585 0xC00, 0x48071D40,
586 0xC04, 0x03A05611,
587 0xC08, 0x000000E4,
588 0xC0C, 0x6C6C6C6C,
589 0xC10, 0x18800000,
590 0xC14, 0x40000100,
591 0xC18, 0x08800000,
592 0xC1C, 0x40000100,
593 0xC20, 0x00000000,
594 0xC24, 0x00000000,
595 0xC28, 0x00000000,
596 0xC2C, 0x00000000,
597 0xC30, 0x69E9AC4B,
598 0xC34, 0x31000040,
599 0xC38, 0x21688080,
600 0xC3C, 0x000016CC,
601 0xC40, 0x1F78403F,
602 0xC44, 0x00010036,
603 0xC48, 0xEC020107,
604 0xC4C, 0x007F037F,
605 0xC50, 0x69553420,
606 0xC54, 0x43BC0094,
607 0xC58, 0x00015967,
608 0xC5C, 0x18250492,
609 0xC60, 0x00000000,
610 0xC64, 0x7112848B,
611 0xC68, 0x47C07BFF,
612 0xC6C, 0x00000036,
613 0xC70, 0x2C7F000D,
614 0xC74, 0x020600DB,
615 0xC78, 0x0000001F,
616 0xC7C, 0x00B91612,
617 0xC80, 0x390000E4,
618 0xC84, 0x19F60000,
619 0xC88, 0x40000100,
620 0xC8C, 0x20200000,
621 0xC90, 0x00091521,
622 0xC94, 0x00000000,
623 0xC98, 0x00121820,
624 0xC9C, 0x00007F7F,
625 0xCA0, 0x00000000,
626 0xCA4, 0x000300A0,
627 0xCA8, 0x00000000,
628 0xCAC, 0x00000000,
629 0xCB0, 0x00000000,
630 0xCB4, 0x00000000,
631 0xCB8, 0x00000000,
632 0xCBC, 0x28000000,
633 0xCC0, 0x00000000,
634 0xCC4, 0x00000000,
635 0xCC8, 0x00000000,
636 0xCCC, 0x00000000,
637 0xCD0, 0x00000000,
638 0xCD4, 0x00000000,
639 0xCD8, 0x64B22427,
640 0xCDC, 0x00766932,
641 0xCE0, 0x00222222,
642 0xCE4, 0x10000000,
643 0xCE8, 0x37644302,
644 0xCEC, 0x2F97D40C,
645 0xD00, 0x00030740,
646 0xD04, 0x40020401,
647 0xD08, 0x0000907F,
648 0xD0C, 0x20010201,
649 0xD10, 0xA0633333,
650 0xD14, 0x3333BC53,
651 0xD18, 0x7A8F5B6F,
652 0xD2C, 0xCB979975,
653 0xD30, 0x00000000,
654 0xD34, 0x80608000,
655 0xD38, 0x98000000,
656 0xD3C, 0x40127353,
657 0xD40, 0x00000000,
658 0xD44, 0x00000000,
659 0xD48, 0x00000000,
660 0xD4C, 0x00000000,
661 0xD50, 0x6437140A,
662 0xD54, 0x00000000,
663 0xD58, 0x00000282,
664 0xD5C, 0x30032064,
665 0xD60, 0x4653DE68,
666 0xD64, 0x04518A3C,
667 0xD68, 0x00002101,
668 0xE00, 0x2D2D2D2D,
669 0xE04, 0x2D2D2D2D,
670 0xE08, 0x0390272D,
671 0xE10, 0x2D2D2D2D,
672 0xE14, 0x2D2D2D2D,
673 0xE18, 0x2D2D2D2D,
674 0xE1C, 0x2D2D2D2D,
675 0xE28, 0x00000000,
676 0xE30, 0x1000DC1F,
677 0xE34, 0x10008C1F,
678 0xE38, 0x02140102,
679 0xE3C, 0x681604C2,
680 0xE40, 0x01007C00,
681 0xE44, 0x01004800,
682 0xE48, 0xFB000000,
683 0xE4C, 0x000028D1,
684 0xE50, 0x1000DC1F,
685 0xE54, 0x10008C1F,
686 0xE58, 0x02140102,
687 0xE5C, 0x28160D05,
688 0xE60, 0x00000048,
689 0xE68, 0x001B25A4,
690 0xE6C, 0x01C00014,
691 0xE70, 0x01C00014,
692 0xE74, 0x02000014,
693 0xE78, 0x02000014,
694 0xE7C, 0x02000014,
695 0xE80, 0x02000014,
696 0xE84, 0x01C00014,
697 0xE88, 0x02000014,
698 0xE8C, 0x01C00014,
699 0xED0, 0x01C00014,
700 0xED4, 0x01C00014,
701 0xED8, 0x01C00014,
702 0xEDC, 0x00000014,
703 0xEE0, 0x00000014,
704 0xEE8, 0x21555448,
705 0xEEC, 0x03C00014,
706 0xF14, 0x00000003,
707 0xF4C, 0x00000000,
708 0xF00, 0x00000300,
709
710 };
711
712 void
odm_read_and_config_mp_8703b_phy_reg(struct dm_struct * dm)713 odm_read_and_config_mp_8703b_phy_reg(struct dm_struct *dm)
714 {
715 u32 i = 0;
716 u8 c_cond;
717 boolean is_matched = true, is_skipped = false;
718 u32 array_len = sizeof(array_mp_8703b_phy_reg) / sizeof(u32);
719 u32 *array = array_mp_8703b_phy_reg;
720
721 u32 v1 = 0, v2 = 0, pre_v1 = 0, pre_v2 = 0;
722
723 PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
724
725 while ((i + 1) < array_len) {
726 v1 = array[i];
727 v2 = array[i + 1];
728
729 if (v1 & (BIT(31) | BIT(30))) {/*positive & negative condition*/
730 if (v1 & BIT(31)) {/* positive condition*/
731 c_cond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
732 if (c_cond == COND_ENDIF) {/*end*/
733 is_matched = true;
734 is_skipped = false;
735 PHYDM_DBG(dm, ODM_COMP_INIT, "ENDIF\n");
736 } else if (c_cond == COND_ELSE) { /*else*/
737 is_matched = is_skipped ? false : true;
738 PHYDM_DBG(dm, ODM_COMP_INIT, "ELSE\n");
739 } else {/*if , else if*/
740 pre_v1 = v1;
741 pre_v2 = v2;
742 PHYDM_DBG(dm, ODM_COMP_INIT, "IF or ELSE IF\n");
743 }
744 } else if (v1 & BIT(30)) { /*negative condition*/
745 if (is_skipped == false) {
746 if (check_positive(dm, pre_v1, pre_v2, v1, v2)) {
747 is_matched = true;
748 is_skipped = true;
749 } else {
750 is_matched = false;
751 is_skipped = false;
752 }
753 } else
754 is_matched = false;
755 }
756 } else {
757 if (is_matched)
758 odm_config_bb_phy_8703b(dm, v1, MASKDWORD, v2);
759 }
760 i = i + 2;
761 }
762 }
763
764 u32
odm_get_version_mp_8703b_phy_reg(void)765 odm_get_version_mp_8703b_phy_reg(void)
766 {
767 return 18;
768 }
769
770 /******************************************************************************
771 * phy_reg_pg.TXT
772 ******************************************************************************/
773
774 u32 array_mp_8703b_phy_reg_pg[] = {
775 0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003200,
776 0, 0, 0, 0x0000086c, 0xffffff00, 0x32323200,
777 0, 0, 0, 0x00000e00, 0xffffffff, 0x34363636,
778 0, 0, 0, 0x00000e04, 0xffffffff, 0x28303234,
779 0, 0, 0, 0x00000e10, 0xffffffff, 0x30343434,
780 0, 0, 0, 0x00000e14, 0xffffffff, 0x26262830
781 };
782
783 void
odm_read_and_config_mp_8703b_phy_reg_pg(struct dm_struct * dm)784 odm_read_and_config_mp_8703b_phy_reg_pg(struct dm_struct *dm)
785 {
786 u32 i = 0;
787 u32 array_len = sizeof(array_mp_8703b_phy_reg_pg) / sizeof(u32);
788 u32 *array = array_mp_8703b_phy_reg_pg;
789
790 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
791 void *adapter = dm->adapter;
792 HAL_DATA_TYPE *hal_data = GET_HAL_DATA(((PADAPTER)adapter));
793
794 PlatformZeroMemory(hal_data->BufOfLinesPwrByRate, MAX_LINES_HWCONFIG_TXT * MAX_BYTES_LINE_HWCONFIG_TXT);
795 hal_data->nLinesReadPwrByRate = array_len / 6;
796 #endif
797
798 PHYDM_DBG(dm, ODM_COMP_INIT, "===> %s\n", __func__);
799
800 dm->phy_reg_pg_version = 1;
801 dm->phy_reg_pg_value_type = PHY_REG_PG_EXACT_VALUE;
802
803 for (i = 0; i < array_len; i += 6) {
804 u32 v1 = array[i];
805 u32 v2 = array[i + 1];
806 u32 v3 = array[i + 2];
807 u32 v4 = array[i + 3];
808 u32 v5 = array[i + 4];
809 u32 v6 = array[i + 5];
810
811 odm_config_bb_phy_reg_pg_8703b(dm, v1, v2, v3, v4, v5, v6);
812
813 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
814 rsprintf((char *)hal_data->BufOfLinesPwrByRate[i / 6], 100, "%s, %s, %s, 0x%X, 0x%08X, 0x%08X,",
815 (v1 == 0 ? "2.4G" : " 5G"), (v2 == 0 ? "A" : "B"), (v3 == 0 ? "1Tx" : "2Tx"), v4, v5, v6);
816 #endif
817 }
818 }
819
820
821
822 #endif /* end of HWIMG_SUPPORT*/
823
824