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 | struct dm_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 | |
37 | /* Value Defined Check =============== */ |
38 | /* QFN Type [15:12] and Cut Version [27:24] need to do value check */ |
39 | |
40 | if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000))) |
41 | return false; |
42 | if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000))) |
43 | return false; |
44 | |
45 | /* Bit Defined Check ================ */ |
46 | /* We don't care [31:28] and [23:20] */ |
47 | /* */ |
48 | cond1 &= 0x000F0FFF; |
49 | driver1 &= 0x000F0FFF; |
50 | |
51 | if ((cond1 & driver1) == cond1) { |
52 | u32 bitMask = 0; |
53 | |
54 | if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE */ |
55 | return true; |
56 | |
57 | if ((cond1 & BIT0) != 0) /* GLNA */ |
58 | bitMask |= 0x000000FF; |
59 | if ((cond1 & BIT1) != 0) /* GPA */ |
60 | bitMask |= 0x0000FF00; |
61 | if ((cond1 & BIT2) != 0) /* ALNA */ |
62 | bitMask |= 0x00FF0000; |
63 | if ((cond1 & BIT3) != 0) /* APA */ |
64 | bitMask |= 0xFF000000; |
65 | |
66 | /* BoardType of each RF path is matched */ |
67 | if ((cond2 & bitMask) == (driver2 & bitMask)) |
68 | return true; |
69 | } |
70 | return false; |
71 | } |
72 | |
73 | static bool CheckNegative( |
74 | struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2 |
75 | ) |
76 | { |
77 | return true; |
78 | } |
79 | |
80 | /****************************************************************************** |
81 | * AGC_TAB.TXT |
82 | ******************************************************************************/ |
83 | |
84 | static u32 Array_MP_8723B_AGC_TAB[] = { |
85 | 0xC78, 0xFD000001, |
86 | 0xC78, 0xFC010001, |
87 | 0xC78, 0xFB020001, |
88 | 0xC78, 0xFA030001, |
89 | 0xC78, 0xF9040001, |
90 | 0xC78, 0xF8050001, |
91 | 0xC78, 0xF7060001, |
92 | 0xC78, 0xF6070001, |
93 | 0xC78, 0xF5080001, |
94 | 0xC78, 0xF4090001, |
95 | 0xC78, 0xF30A0001, |
96 | 0xC78, 0xF20B0001, |
97 | 0xC78, 0xF10C0001, |
98 | 0xC78, 0xF00D0001, |
99 | 0xC78, 0xEF0E0001, |
100 | 0xC78, 0xEE0F0001, |
101 | 0xC78, 0xED100001, |
102 | 0xC78, 0xEC110001, |
103 | 0xC78, 0xEB120001, |
104 | 0xC78, 0xEA130001, |
105 | 0xC78, 0xE9140001, |
106 | 0xC78, 0xE8150001, |
107 | 0xC78, 0xE7160001, |
108 | 0xC78, 0xE6170001, |
109 | 0xC78, 0xE5180001, |
110 | 0xC78, 0xE4190001, |
111 | 0xC78, 0xE31A0001, |
112 | 0xC78, 0xA51B0001, |
113 | 0xC78, 0xA41C0001, |
114 | 0xC78, 0xA31D0001, |
115 | 0xC78, 0x671E0001, |
116 | 0xC78, 0x661F0001, |
117 | 0xC78, 0x65200001, |
118 | 0xC78, 0x64210001, |
119 | 0xC78, 0x63220001, |
120 | 0xC78, 0x4A230001, |
121 | 0xC78, 0x49240001, |
122 | 0xC78, 0x48250001, |
123 | 0xC78, 0x47260001, |
124 | 0xC78, 0x46270001, |
125 | 0xC78, 0x45280001, |
126 | 0xC78, 0x44290001, |
127 | 0xC78, 0x432A0001, |
128 | 0xC78, 0x422B0001, |
129 | 0xC78, 0x292C0001, |
130 | 0xC78, 0x282D0001, |
131 | 0xC78, 0x272E0001, |
132 | 0xC78, 0x262F0001, |
133 | 0xC78, 0x0A300001, |
134 | 0xC78, 0x09310001, |
135 | 0xC78, 0x08320001, |
136 | 0xC78, 0x07330001, |
137 | 0xC78, 0x06340001, |
138 | 0xC78, 0x05350001, |
139 | 0xC78, 0x04360001, |
140 | 0xC78, 0x03370001, |
141 | 0xC78, 0x02380001, |
142 | 0xC78, 0x01390001, |
143 | 0xC78, 0x013A0001, |
144 | 0xC78, 0x013B0001, |
145 | 0xC78, 0x013C0001, |
146 | 0xC78, 0x013D0001, |
147 | 0xC78, 0x013E0001, |
148 | 0xC78, 0x013F0001, |
149 | 0xC78, 0xFC400001, |
150 | 0xC78, 0xFB410001, |
151 | 0xC78, 0xFA420001, |
152 | 0xC78, 0xF9430001, |
153 | 0xC78, 0xF8440001, |
154 | 0xC78, 0xF7450001, |
155 | 0xC78, 0xF6460001, |
156 | 0xC78, 0xF5470001, |
157 | 0xC78, 0xF4480001, |
158 | 0xC78, 0xF3490001, |
159 | 0xC78, 0xF24A0001, |
160 | 0xC78, 0xF14B0001, |
161 | 0xC78, 0xF04C0001, |
162 | 0xC78, 0xEF4D0001, |
163 | 0xC78, 0xEE4E0001, |
164 | 0xC78, 0xED4F0001, |
165 | 0xC78, 0xEC500001, |
166 | 0xC78, 0xEB510001, |
167 | 0xC78, 0xEA520001, |
168 | 0xC78, 0xE9530001, |
169 | 0xC78, 0xE8540001, |
170 | 0xC78, 0xE7550001, |
171 | 0xC78, 0xE6560001, |
172 | 0xC78, 0xE5570001, |
173 | 0xC78, 0xE4580001, |
174 | 0xC78, 0xE3590001, |
175 | 0xC78, 0xA65A0001, |
176 | 0xC78, 0xA55B0001, |
177 | 0xC78, 0xA45C0001, |
178 | 0xC78, 0xA35D0001, |
179 | 0xC78, 0x675E0001, |
180 | 0xC78, 0x665F0001, |
181 | 0xC78, 0x65600001, |
182 | 0xC78, 0x64610001, |
183 | 0xC78, 0x63620001, |
184 | 0xC78, 0x62630001, |
185 | 0xC78, 0x61640001, |
186 | 0xC78, 0x48650001, |
187 | 0xC78, 0x47660001, |
188 | 0xC78, 0x46670001, |
189 | 0xC78, 0x45680001, |
190 | 0xC78, 0x44690001, |
191 | 0xC78, 0x436A0001, |
192 | 0xC78, 0x426B0001, |
193 | 0xC78, 0x286C0001, |
194 | 0xC78, 0x276D0001, |
195 | 0xC78, 0x266E0001, |
196 | 0xC78, 0x256F0001, |
197 | 0xC78, 0x24700001, |
198 | 0xC78, 0x09710001, |
199 | 0xC78, 0x08720001, |
200 | 0xC78, 0x07730001, |
201 | 0xC78, 0x06740001, |
202 | 0xC78, 0x05750001, |
203 | 0xC78, 0x04760001, |
204 | 0xC78, 0x03770001, |
205 | 0xC78, 0x02780001, |
206 | 0xC78, 0x01790001, |
207 | 0xC78, 0x017A0001, |
208 | 0xC78, 0x017B0001, |
209 | 0xC78, 0x017C0001, |
210 | 0xC78, 0x017D0001, |
211 | 0xC78, 0x017E0001, |
212 | 0xC78, 0x017F0001, |
213 | 0xC50, 0x69553422, |
214 | 0xC50, 0x69553420, |
215 | 0x824, 0x00390204, |
216 | |
217 | }; |
218 | |
219 | void ODM_ReadAndConfig_MP_8723B_AGC_TAB(struct dm_odm_t *pDM_Odm) |
220 | { |
221 | u32 i = 0; |
222 | u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_AGC_TAB); |
223 | u32 *Array = Array_MP_8723B_AGC_TAB; |
224 | |
225 | for (i = 0; i < ArrayLen; i += 2) { |
226 | u32 v1 = Array[i]; |
227 | u32 v2 = Array[i+1]; |
228 | |
229 | /* This (offset, data) pair doesn't care the condition. */ |
230 | if (v1 < 0x40000000) { |
231 | odm_ConfigBB_AGC_8723B(pDM_Odm, Addr: v1, bMaskDWord, Data: v2); |
232 | continue; |
233 | } else { |
234 | /* This line is the beginning of branch. */ |
235 | bool bMatched = true; |
236 | u8 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
237 | |
238 | if (cCond == COND_ELSE) { /* ELSE, ENDIF */ |
239 | bMatched = true; |
240 | READ_NEXT_PAIR(v1, v2, i); |
241 | } else if (!CheckPositive(pDM_Odm, Condition1: v1, Condition2: v2)) { |
242 | bMatched = false; |
243 | READ_NEXT_PAIR(v1, v2, i); |
244 | READ_NEXT_PAIR(v1, v2, i); |
245 | } else { |
246 | READ_NEXT_PAIR(v1, v2, i); |
247 | if (!CheckNegative(pDM_Odm, Condition1: v1, Condition2: v2)) |
248 | bMatched = false; |
249 | else |
250 | bMatched = true; |
251 | READ_NEXT_PAIR(v1, v2, i); |
252 | } |
253 | |
254 | if (!bMatched) { |
255 | /* Condition isn't matched. |
256 | * Discard the following (offset, data) pairs. |
257 | */ |
258 | while (v1 < 0x40000000 && i < ArrayLen-2) |
259 | READ_NEXT_PAIR(v1, v2, i); |
260 | |
261 | i -= 2; /* prevent from for-loop += 2 */ |
262 | } else { |
263 | /* Configure matched pairs and skip to end of if-else. */ |
264 | while (v1 < 0x40000000 && i < ArrayLen-2) { |
265 | odm_ConfigBB_AGC_8723B(pDM_Odm, Addr: v1, bMaskDWord, Data: v2); |
266 | READ_NEXT_PAIR(v1, v2, i); |
267 | } |
268 | |
269 | /* Keeps reading until ENDIF. */ |
270 | cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
271 | while (cCond != COND_ENDIF && i < ArrayLen-2) { |
272 | READ_NEXT_PAIR(v1, v2, i); |
273 | cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
274 | } |
275 | } |
276 | } |
277 | } |
278 | } |
279 | |
280 | /****************************************************************************** |
281 | * PHY_REG.TXT |
282 | ******************************************************************************/ |
283 | |
284 | static u32 Array_MP_8723B_PHY_REG[] = { |
285 | 0x800, 0x80040000, |
286 | 0x804, 0x00000003, |
287 | 0x808, 0x0000FC00, |
288 | 0x80C, 0x0000000A, |
289 | 0x810, 0x10001331, |
290 | 0x814, 0x020C3D10, |
291 | 0x818, 0x02200385, |
292 | 0x81C, 0x00000000, |
293 | 0x820, 0x01000100, |
294 | 0x824, 0x00190204, |
295 | 0x828, 0x00000000, |
296 | 0x82C, 0x00000000, |
297 | 0x830, 0x00000000, |
298 | 0x834, 0x00000000, |
299 | 0x838, 0x00000000, |
300 | 0x83C, 0x00000000, |
301 | 0x840, 0x00010000, |
302 | 0x844, 0x00000000, |
303 | 0x848, 0x00000000, |
304 | 0x84C, 0x00000000, |
305 | 0x850, 0x00000000, |
306 | 0x854, 0x00000000, |
307 | 0x858, 0x569A11A9, |
308 | 0x85C, 0x01000014, |
309 | 0x860, 0x66F60110, |
310 | 0x864, 0x061F0649, |
311 | 0x868, 0x00000000, |
312 | 0x86C, 0x27272700, |
313 | 0x870, 0x07000760, |
314 | 0x874, 0x25004000, |
315 | 0x878, 0x00000808, |
316 | 0x87C, 0x00000000, |
317 | 0x880, 0xB0000C1C, |
318 | 0x884, 0x00000001, |
319 | 0x888, 0x00000000, |
320 | 0x88C, 0xCCC000C0, |
321 | 0x890, 0x00000800, |
322 | 0x894, 0xFFFFFFFE, |
323 | 0x898, 0x40302010, |
324 | 0x89C, 0x00706050, |
325 | 0x900, 0x00000000, |
326 | 0x904, 0x00000023, |
327 | 0x908, 0x00000000, |
328 | 0x90C, 0x81121111, |
329 | 0x910, 0x00000002, |
330 | 0x914, 0x00000201, |
331 | 0xA00, 0x00D047C8, |
332 | 0xA04, 0x80FF800C, |
333 | 0xA08, 0x8C838300, |
334 | 0xA0C, 0x2E7F120F, |
335 | 0xA10, 0x9500BB78, |
336 | 0xA14, 0x1114D028, |
337 | 0xA18, 0x00881117, |
338 | 0xA1C, 0x89140F00, |
339 | 0xA20, 0x1A1B0000, |
340 | 0xA24, 0x090E1317, |
341 | 0xA28, 0x00000204, |
342 | 0xA2C, 0x00D30000, |
343 | 0xA70, 0x101FBF00, |
344 | 0xA74, 0x00000007, |
345 | 0xA78, 0x00000900, |
346 | 0xA7C, 0x225B0606, |
347 | 0xA80, 0x21806490, |
348 | 0xB2C, 0x00000000, |
349 | 0xC00, 0x48071D40, |
350 | 0xC04, 0x03A05611, |
351 | 0xC08, 0x000000E4, |
352 | 0xC0C, 0x6C6C6C6C, |
353 | 0xC10, 0x08800000, |
354 | 0xC14, 0x40000100, |
355 | 0xC18, 0x08800000, |
356 | 0xC1C, 0x40000100, |
357 | 0xC20, 0x00000000, |
358 | 0xC24, 0x00000000, |
359 | 0xC28, 0x00000000, |
360 | 0xC2C, 0x00000000, |
361 | 0xC30, 0x69E9AC44, |
362 | 0xC34, 0x469652AF, |
363 | 0xC38, 0x49795994, |
364 | 0xC3C, 0x0A97971C, |
365 | 0xC40, 0x1F7C403F, |
366 | 0xC44, 0x000100B7, |
367 | 0xC48, 0xEC020107, |
368 | 0xC4C, 0x007F037F, |
369 | 0xC50, 0x69553420, |
370 | 0xC54, 0x43BC0094, |
371 | 0xC58, 0x00013149, |
372 | 0xC5C, 0x00250492, |
373 | 0xC60, 0x00000000, |
374 | 0xC64, 0x7112848B, |
375 | 0xC68, 0x47C00BFF, |
376 | 0xC6C, 0x00000036, |
377 | 0xC70, 0x2C7F000D, |
378 | 0xC74, 0x020610DB, |
379 | 0xC78, 0x0000001F, |
380 | 0xC7C, 0x00B91612, |
381 | 0xC80, 0x390000E4, |
382 | 0xC84, 0x20F60000, |
383 | 0xC88, 0x40000100, |
384 | 0xC8C, 0x20200000, |
385 | 0xC90, 0x00020E1A, |
386 | 0xC94, 0x00000000, |
387 | 0xC98, 0x00020E1A, |
388 | 0xC9C, 0x00007F7F, |
389 | 0xCA0, 0x00000000, |
390 | 0xCA4, 0x000300A0, |
391 | 0xCA8, 0x00000000, |
392 | 0xCAC, 0x00000000, |
393 | 0xCB0, 0x00000000, |
394 | 0xCB4, 0x00000000, |
395 | 0xCB8, 0x00000000, |
396 | 0xCBC, 0x28000000, |
397 | 0xCC0, 0x00000000, |
398 | 0xCC4, 0x00000000, |
399 | 0xCC8, 0x00000000, |
400 | 0xCCC, 0x00000000, |
401 | 0xCD0, 0x00000000, |
402 | 0xCD4, 0x00000000, |
403 | 0xCD8, 0x64B22427, |
404 | 0xCDC, 0x00766932, |
405 | 0xCE0, 0x00222222, |
406 | 0xCE4, 0x00000000, |
407 | 0xCE8, 0x37644302, |
408 | 0xCEC, 0x2F97D40C, |
409 | 0xD00, 0x00000740, |
410 | 0xD04, 0x40020401, |
411 | 0xD08, 0x0000907F, |
412 | 0xD0C, 0x20010201, |
413 | 0xD10, 0xA0633333, |
414 | 0xD14, 0x3333BC53, |
415 | 0xD18, 0x7A8F5B6F, |
416 | 0xD2C, 0xCC979975, |
417 | 0xD30, 0x00000000, |
418 | 0xD34, 0x80608000, |
419 | 0xD38, 0x00000000, |
420 | 0xD3C, 0x00127353, |
421 | 0xD40, 0x00000000, |
422 | 0xD44, 0x00000000, |
423 | 0xD48, 0x00000000, |
424 | 0xD4C, 0x00000000, |
425 | 0xD50, 0x6437140A, |
426 | 0xD54, 0x00000000, |
427 | 0xD58, 0x00000282, |
428 | 0xD5C, 0x30032064, |
429 | 0xD60, 0x4653DE68, |
430 | 0xD64, 0x04518A3C, |
431 | 0xD68, 0x00002101, |
432 | 0xD6C, 0x2A201C16, |
433 | 0xD70, 0x1812362E, |
434 | 0xD74, 0x322C2220, |
435 | 0xD78, 0x000E3C24, |
436 | 0xE00, 0x2D2D2D2D, |
437 | 0xE04, 0x2D2D2D2D, |
438 | 0xE08, 0x0390272D, |
439 | 0xE10, 0x2D2D2D2D, |
440 | 0xE14, 0x2D2D2D2D, |
441 | 0xE18, 0x2D2D2D2D, |
442 | 0xE1C, 0x2D2D2D2D, |
443 | 0xE28, 0x00000000, |
444 | 0xE30, 0x1000DC1F, |
445 | 0xE34, 0x10008C1F, |
446 | 0xE38, 0x02140102, |
447 | 0xE3C, 0x681604C2, |
448 | 0xE40, 0x01007C00, |
449 | 0xE44, 0x01004800, |
450 | 0xE48, 0xFB000000, |
451 | 0xE4C, 0x000028D1, |
452 | 0xE50, 0x1000DC1F, |
453 | 0xE54, 0x10008C1F, |
454 | 0xE58, 0x02140102, |
455 | 0xE5C, 0x28160D05, |
456 | 0xE60, 0x00000008, |
457 | 0xE68, 0x001B2556, |
458 | 0xE6C, 0x00C00096, |
459 | 0xE70, 0x00C00096, |
460 | 0xE74, 0x01000056, |
461 | 0xE78, 0x01000014, |
462 | 0xE7C, 0x01000056, |
463 | 0xE80, 0x01000014, |
464 | 0xE84, 0x00C00096, |
465 | 0xE88, 0x01000056, |
466 | 0xE8C, 0x00C00096, |
467 | 0xED0, 0x00C00096, |
468 | 0xED4, 0x00C00096, |
469 | 0xED8, 0x00C00096, |
470 | 0xEDC, 0x000000D6, |
471 | 0xEE0, 0x000000D6, |
472 | 0xEEC, 0x01C00016, |
473 | 0xF14, 0x00000003, |
474 | 0xF4C, 0x00000000, |
475 | 0xF00, 0x00000300, |
476 | 0x820, 0x01000100, |
477 | 0x800, 0x83040000, |
478 | |
479 | }; |
480 | |
481 | void ODM_ReadAndConfig_MP_8723B_PHY_REG(struct dm_odm_t *pDM_Odm) |
482 | { |
483 | u32 i = 0; |
484 | u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_PHY_REG); |
485 | u32 *Array = Array_MP_8723B_PHY_REG; |
486 | |
487 | for (i = 0; i < ArrayLen; i += 2) { |
488 | u32 v1 = Array[i]; |
489 | u32 v2 = Array[i+1]; |
490 | |
491 | /* This (offset, data) pair doesn't care the condition. */ |
492 | if (v1 < 0x40000000) { |
493 | odm_ConfigBB_PHY_8723B(pDM_Odm, Addr: v1, bMaskDWord, Data: v2); |
494 | continue; |
495 | } else { |
496 | /* This line is the beginning of branch. */ |
497 | bool bMatched = true; |
498 | u8 cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
499 | |
500 | if (cCond == COND_ELSE) { /* ELSE, ENDIF */ |
501 | bMatched = true; |
502 | READ_NEXT_PAIR(v1, v2, i); |
503 | } else if (!CheckPositive(pDM_Odm, Condition1: v1, Condition2: v2)) { |
504 | bMatched = false; |
505 | READ_NEXT_PAIR(v1, v2, i); |
506 | READ_NEXT_PAIR(v1, v2, i); |
507 | } else { |
508 | READ_NEXT_PAIR(v1, v2, i); |
509 | if (!CheckNegative(pDM_Odm, Condition1: v1, Condition2: v2)) |
510 | bMatched = false; |
511 | else |
512 | bMatched = true; |
513 | READ_NEXT_PAIR(v1, v2, i); |
514 | } |
515 | |
516 | if (!bMatched) { |
517 | /* Condition isn't matched. |
518 | * Discard the following (offset, data) pairs. |
519 | */ |
520 | while (v1 < 0x40000000 && i < ArrayLen-2) |
521 | READ_NEXT_PAIR(v1, v2, i); |
522 | |
523 | i -= 2; /* prevent from for-loop += 2 */ |
524 | } else { /* Configure matched pairs and skip to end of if-else. */ |
525 | while (v1 < 0x40000000 && i < ArrayLen-2) { |
526 | odm_ConfigBB_PHY_8723B(pDM_Odm, Addr: v1, bMaskDWord, Data: v2); |
527 | READ_NEXT_PAIR(v1, v2, i); |
528 | } |
529 | |
530 | /* Keeps reading until ENDIF. */ |
531 | cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
532 | while (cCond != COND_ENDIF && i < ArrayLen-2) { |
533 | READ_NEXT_PAIR(v1, v2, i); |
534 | cCond = (u8)((v1 & (BIT29|BIT28)) >> 28); |
535 | } |
536 | } |
537 | } |
538 | } |
539 | } |
540 | |
541 | /****************************************************************************** |
542 | * PHY_REG_PG.TXT |
543 | ******************************************************************************/ |
544 | |
545 | static u32 Array_MP_8723B_PHY_REG_PG[] = { |
546 | 0, 0x00000e08, 0x0000ff00, 0x00003800, |
547 | 0, 0x0000086c, 0xffffff00, 0x32343600, |
548 | 0, 0x00000e00, 0xffffffff, 0x40424444, |
549 | 0, 0x00000e04, 0xffffffff, 0x28323638, |
550 | 0, 0x00000e10, 0xffffffff, 0x38404244, |
551 | 0, 0x00000e14, 0xffffffff, 0x26303436 |
552 | }; |
553 | |
554 | void ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(struct dm_odm_t *pDM_Odm) |
555 | { |
556 | u32 i = 0; |
557 | u32 *Array = Array_MP_8723B_PHY_REG_PG; |
558 | |
559 | pDM_Odm->PhyRegPgVersion = 1; |
560 | pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE; |
561 | |
562 | for (i = 0; i < ARRAY_SIZE(Array_MP_8723B_PHY_REG_PG); i += 4) { |
563 | u32 v1 = Array[i]; |
564 | u32 v2 = Array[i+1]; |
565 | u32 v3 = Array[i+2]; |
566 | u32 v4 = Array[i+3]; |
567 | |
568 | odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, RfPath: v1, Addr: v2, Bitmask: v3, Data: v4); |
569 | } |
570 | } |
571 | |