1 // SPDX-License-Identifier: GPL-2.0-only
2 //
3 // rt1320-sdw.c -- rt1320 SDCA ALSA SoC amplifier audio driver
4 //
5 // Copyright(c) 2024 Realtek Semiconductor Corp.
6 //
7 //
8 #include <linux/delay.h>
9 #include <linux/device.h>
10 #include <linux/pm_runtime.h>
11 #include <linux/mod_devicetable.h>
12 #include <linux/module.h>
13 #include <linux/regmap.h>
14 #include <linux/dmi.h>
15 #include <linux/firmware.h>
16 #include <sound/core.h>
17 #include <sound/pcm.h>
18 #include <sound/pcm_params.h>
19 #include <sound/soc-dapm.h>
20 #include <sound/initval.h>
21 #include <sound/tlv.h>
22 #include <sound/sdw.h>
23 #include "rt1320-sdw.h"
24
25 /*
26 * The 'blind writes' is an SDCA term to deal with platform-specific initialization.
27 * It might include vendor-specific or SDCA control registers.
28 */
29 static const struct reg_sequence rt1320_blind_write[] = {
30 { 0xc003, 0xe0 },
31 { 0xc01b, 0xfc },
32 { 0xc5c3, 0xf2 },
33 { 0xc5c2, 0x00 },
34 { 0xc5c6, 0x10 },
35 { 0xc5c4, 0x12 },
36 { 0xc5c8, 0x03 },
37 { 0xc5d8, 0x0a },
38 { 0xc5f7, 0x22 },
39 { 0xc5f6, 0x22 },
40 { 0xc5d0, 0x0f },
41 { 0xc5d1, 0x89 },
42 { 0xc057, 0x51 },
43 { 0xc054, 0x35 },
44 { 0xc053, 0x55 },
45 { 0xc052, 0x55 },
46 { 0xc051, 0x13 },
47 { 0xc050, 0x15 },
48 { 0xc060, 0x77 },
49 { 0xc061, 0x55 },
50 { 0xc063, 0x55 },
51 { 0xc065, 0xa5 },
52 { 0xc06b, 0x0a },
53 { 0xca05, 0xd6 },
54 { 0xca25, 0xd6 },
55 { 0xcd00, 0x05 },
56 { 0xc604, 0x40 },
57 { 0xc609, 0x40 },
58 { 0xc046, 0xff },
59 { 0xc045, 0xff },
60 { 0xc044, 0xff },
61 { 0xc043, 0xff },
62 { 0xc042, 0xff },
63 { 0xc041, 0xff },
64 { 0xc040, 0xff },
65 { 0xcc10, 0x01 },
66 { 0xc700, 0xf0 },
67 { 0xc701, 0x13 },
68 { 0xc901, 0x04 },
69 { 0xc900, 0x73 },
70 { 0xde03, 0x05 },
71 { 0xdd0b, 0x0d },
72 { 0xdd0a, 0xff },
73 { 0xdd09, 0x0d },
74 { 0xdd08, 0xff },
75 { 0xc570, 0x08 },
76 { 0xe803, 0xbe },
77 { 0xc003, 0xc0 },
78 { 0xc081, 0xfe },
79 { 0xce31, 0x0d },
80 { 0xce30, 0xae },
81 { 0xce37, 0x0b },
82 { 0xce36, 0xd2 },
83 { 0xce39, 0x04 },
84 { 0xce38, 0x80 },
85 { 0xce3f, 0x00 },
86 { 0xce3e, 0x00 },
87 { 0xd470, 0x8b },
88 { 0xd471, 0x18 },
89 { 0xc019, 0x10 },
90 { 0xd487, 0x3f },
91 { 0xd486, 0xc3 },
92 };
93
94 static const struct reg_sequence rt1320_vc_blind_write[] = {
95 { 0xc003, 0xe0 },
96 { 0xe80a, 0x01 },
97 { 0xc5c3, 0xf3 },
98 { 0xc057, 0x51 },
99 { 0xc054, 0x35 },
100 { 0xca05, 0xd6 },
101 { 0xca07, 0x07 },
102 { 0xca25, 0xd6 },
103 { 0xca27, 0x07 },
104 { 0xc604, 0x40 },
105 { 0xc609, 0x40 },
106 { 0xc046, 0xff },
107 { 0xc045, 0xff },
108 { 0xda81, 0x14 },
109 { 0xda8d, 0x14 },
110 { 0xc044, 0xff },
111 { 0xc043, 0xff },
112 { 0xc042, 0xff },
113 { 0xc041, 0x7f },
114 { 0xc040, 0xff },
115 { 0xcc10, 0x01 },
116 { 0xc700, 0xf0 },
117 { 0xc701, 0x13 },
118 { 0xc901, 0x09 },
119 { 0xc900, 0xd0 },
120 { 0xde03, 0x05 },
121 { 0xdd0b, 0x0d },
122 { 0xdd0a, 0xff },
123 { 0xdd09, 0x0d },
124 { 0xdd08, 0xff },
125 { 0xc570, 0x08 },
126 { 0xc086, 0x02 },
127 { 0xc085, 0x7f },
128 { 0xc084, 0x00 },
129 { 0xc081, 0xfe },
130 { 0xf084, 0x0f },
131 { 0xf083, 0xff },
132 { 0xf082, 0xff },
133 { 0xf081, 0xff },
134 { 0xf080, 0xff },
135 { 0xe802, 0xf8 },
136 { 0xe803, 0xbe },
137 { 0xc003, 0xc0 },
138 { 0xd470, 0xec },
139 { 0xd471, 0x3a },
140 { 0xd474, 0x11 },
141 { 0xd475, 0x32 },
142 { 0xd478, 0x64 },
143 { 0xd479, 0x20 },
144 { 0xd47a, 0x10 },
145 { 0xd47c, 0xff },
146 { 0xc019, 0x10 },
147 { 0xd487, 0x0b },
148 { 0xd487, 0x3b },
149 { 0xd486, 0xc3 },
150 { 0xc598, 0x04 },
151 { 0xd500, 0x00 },
152 { 0xd500, 0x17 },
153 { 0xd600, 0x01 },
154 { 0xd601, 0x02 },
155 { 0xd602, 0x03 },
156 { 0xd603, 0x04 },
157 { 0xd64c, 0x03 },
158 { 0xd64d, 0x03 },
159 { 0xd64e, 0x03 },
160 { 0xd64f, 0x03 },
161 { 0xd650, 0x03 },
162 { 0xd651, 0x03 },
163 { 0xd652, 0x03 },
164 { 0xd610, 0x01 },
165 { 0xd608, 0x03 },
166 { 0xd609, 0x00 },
167 };
168
169 static const struct reg_sequence rt1320_vc_patch_code_write[] = {
170 { 0x10007000, 0x37 },
171 { 0x10007001, 0x77 },
172 { 0x10007002, 0x00 },
173 { 0x10007003, 0x10 },
174 { 0x10007004, 0xb7 },
175 { 0x10007005, 0xe7 },
176 { 0x10007006, 0x00 },
177 { 0x10007007, 0x10 },
178 { 0x10007008, 0x13 },
179 { 0x10007009, 0x07 },
180 { 0x1000700a, 0x87 },
181 { 0x1000700b, 0x48 },
182 { 0x1000700c, 0x23 },
183 { 0x1000700d, 0xa6 },
184 { 0x1000700e, 0xe7 },
185 { 0x1000700f, 0xee },
186 { 0x10007010, 0x37 },
187 { 0x10007011, 0x77 },
188 { 0x10007012, 0x00 },
189 { 0x10007013, 0x10 },
190 { 0x10007014, 0x13 },
191 { 0x10007015, 0x07 },
192 { 0x10007016, 0x87 },
193 { 0x10007017, 0x56 },
194 { 0x10007018, 0x23 },
195 { 0x10007019, 0xac },
196 { 0x1000701a, 0xe7 },
197 { 0x1000701b, 0xde },
198 { 0x1000701c, 0x37 },
199 { 0x1000701d, 0x77 },
200 { 0x1000701e, 0x00 },
201 { 0x1000701f, 0x10 },
202 { 0x10007020, 0x13 },
203 { 0x10007021, 0x07 },
204 { 0x10007022, 0xc7 },
205 { 0x10007023, 0x5f },
206 { 0x10007024, 0x23 },
207 { 0x10007025, 0xae },
208 { 0x10007026, 0xe7 },
209 { 0x10007027, 0xdc },
210 { 0x10007028, 0x37 },
211 { 0x10007029, 0x87 },
212 { 0x1000702a, 0x00 },
213 { 0x1000702b, 0x10 },
214 { 0x1000702c, 0x13 },
215 { 0x1000702d, 0x07 },
216 { 0x1000702e, 0xc7 },
217 { 0x1000702f, 0x86 },
218 { 0x10007030, 0x23 },
219 { 0x10007031, 0xae },
220 { 0x10007032, 0xe7 },
221 { 0x10007033, 0xe6 },
222 { 0x10007034, 0x37 },
223 { 0x10007035, 0x77 },
224 { 0x10007036, 0x00 },
225 { 0x10007037, 0x10 },
226 { 0x10007038, 0x13 },
227 { 0x10007039, 0x07 },
228 { 0x1000703a, 0x07 },
229 { 0x1000703b, 0x40 },
230 { 0x1000703c, 0x23 },
231 { 0x1000703d, 0xa6 },
232 { 0x1000703e, 0xe7 },
233 { 0x1000703f, 0xe8 },
234 { 0x10007040, 0x37 },
235 { 0x10007041, 0x77 },
236 { 0x10007042, 0x00 },
237 { 0x10007043, 0x10 },
238 { 0x10007044, 0x13 },
239 { 0x10007045, 0x07 },
240 { 0x10007046, 0xc7 },
241 { 0x10007047, 0x63 },
242 { 0x10007048, 0x23 },
243 { 0x10007049, 0xa2 },
244 { 0x1000704a, 0xe7 },
245 { 0x1000704b, 0xec },
246 { 0x1000704c, 0x37 },
247 { 0x1000704d, 0x77 },
248 { 0x1000704e, 0x00 },
249 { 0x1000704f, 0x10 },
250 { 0x10007050, 0x13 },
251 { 0x10007051, 0x07 },
252 { 0x10007052, 0x47 },
253 { 0x10007053, 0x6f },
254 { 0x10007054, 0x23 },
255 { 0x10007055, 0xa6 },
256 { 0x10007056, 0xe7 },
257 { 0x10007057, 0xec },
258 { 0x10007058, 0x37 },
259 { 0x10007059, 0x77 },
260 { 0x1000705a, 0x00 },
261 { 0x1000705b, 0x10 },
262 { 0x1000705c, 0x13 },
263 { 0x1000705d, 0x07 },
264 { 0x1000705e, 0x07 },
265 { 0x1000705f, 0x44 },
266 { 0x10007060, 0x23 },
267 { 0x10007061, 0xa8 },
268 { 0x10007062, 0xe7 },
269 { 0x10007063, 0xec },
270 { 0x10007064, 0x37 },
271 { 0x10007065, 0x87 },
272 { 0x10007066, 0x00 },
273 { 0x10007067, 0x10 },
274 { 0x10007068, 0x13 },
275 { 0x10007069, 0x07 },
276 { 0x1000706a, 0x87 },
277 { 0x1000706b, 0x84 },
278 { 0x1000706c, 0x23 },
279 { 0x1000706d, 0xa8 },
280 { 0x1000706e, 0xe7 },
281 { 0x1000706f, 0xee },
282 { 0x10007070, 0x37 },
283 { 0x10007071, 0x87 },
284 { 0x10007072, 0x00 },
285 { 0x10007073, 0x10 },
286 { 0x10007074, 0x13 },
287 { 0x10007075, 0x07 },
288 { 0x10007076, 0x47 },
289 { 0x10007077, 0x97 },
290 { 0x10007078, 0x23 },
291 { 0x10007079, 0xaa },
292 { 0x1000707a, 0xe7 },
293 { 0x1000707b, 0xee },
294 { 0x1000707c, 0x67 },
295 { 0x1000707d, 0x80 },
296 { 0x1000707e, 0x00 },
297 { 0x1000707f, 0x00 },
298 { 0x10007400, 0xb7 },
299 { 0x10007401, 0xd6 },
300 { 0x10007402, 0x00 },
301 { 0x10007403, 0x00 },
302 { 0x10007404, 0x83 },
303 { 0x10007405, 0xc7 },
304 { 0x10007406, 0x06 },
305 { 0x10007407, 0x47 },
306 { 0x10007408, 0x93 },
307 { 0x10007409, 0xf7 },
308 { 0x1000740a, 0x87 },
309 { 0x1000740b, 0x00 },
310 { 0x1000740c, 0x63 },
311 { 0x1000740d, 0x88 },
312 { 0x1000740e, 0x07 },
313 { 0x1000740f, 0x02 },
314 { 0x10007410, 0x03 },
315 { 0x10007411, 0xc7 },
316 { 0x10007412, 0x31 },
317 { 0x10007413, 0x43 },
318 { 0x10007414, 0x63 },
319 { 0x10007415, 0x14 },
320 { 0x10007416, 0x07 },
321 { 0x10007417, 0x02 },
322 { 0x10007418, 0x13 },
323 { 0x10007419, 0x07 },
324 { 0x1000741a, 0x10 },
325 { 0x1000741b, 0x00 },
326 { 0x1000741c, 0xa3 },
327 { 0x1000741d, 0x89 },
328 { 0x1000741e, 0xe1 },
329 { 0x1000741f, 0x42 },
330 { 0x10007420, 0x37 },
331 { 0x10007421, 0xc7 },
332 { 0x10007422, 0x00 },
333 { 0x10007423, 0x00 },
334 { 0x10007424, 0x03 },
335 { 0x10007425, 0x46 },
336 { 0x10007426, 0x07 },
337 { 0x10007427, 0x06 },
338 { 0x10007428, 0x23 },
339 { 0x10007429, 0x8a },
340 { 0x1000742a, 0xc1 },
341 { 0x1000742b, 0x42 },
342 { 0x1000742c, 0x83 },
343 { 0x1000742d, 0xc7 },
344 { 0x1000742e, 0x46 },
345 { 0x1000742f, 0x47 },
346 { 0x10007430, 0x93 },
347 { 0x10007431, 0xf7 },
348 { 0x10007432, 0xf7 },
349 { 0x10007433, 0x0f },
350 { 0x10007434, 0x23 },
351 { 0x10007435, 0x00 },
352 { 0x10007436, 0xf7 },
353 { 0x10007437, 0x06 },
354 { 0x10007438, 0x23 },
355 { 0x10007439, 0x89 },
356 { 0x1000743a, 0x01 },
357 { 0x1000743b, 0x42 },
358 { 0x1000743c, 0x67 },
359 { 0x1000743d, 0x80 },
360 { 0x1000743e, 0x00 },
361 { 0x1000743f, 0x00 },
362 { 0x10007440, 0x37 },
363 { 0x10007441, 0xc7 },
364 { 0x10007442, 0x00 },
365 { 0x10007443, 0x00 },
366 { 0x10007444, 0x83 },
367 { 0x10007445, 0x27 },
368 { 0x10007446, 0xc7 },
369 { 0x10007447, 0x5f },
370 { 0x10007448, 0x13 },
371 { 0x10007449, 0x05 },
372 { 0x1000744a, 0x00 },
373 { 0x1000744b, 0x00 },
374 { 0x1000744c, 0x23 },
375 { 0x1000744d, 0xa2 },
376 { 0x1000744e, 0xf1 },
377 { 0x1000744f, 0x42 },
378 { 0x10007450, 0xb7 },
379 { 0x10007451, 0x06 },
380 { 0x10007452, 0x00 },
381 { 0x10007453, 0x10 },
382 { 0x10007454, 0xb3 },
383 { 0x10007455, 0xf7 },
384 { 0x10007456, 0xd7 },
385 { 0x10007457, 0x00 },
386 { 0x10007458, 0x63 },
387 { 0x10007459, 0x86 },
388 { 0x1000745a, 0x07 },
389 { 0x1000745b, 0x02 },
390 { 0x1000745c, 0x83 },
391 { 0x1000745d, 0x47 },
392 { 0x1000745e, 0x07 },
393 { 0x1000745f, 0x56 },
394 { 0x10007460, 0x93 },
395 { 0x10007461, 0xf7 },
396 { 0x10007462, 0x87 },
397 { 0x10007463, 0x01 },
398 { 0x10007464, 0x63 },
399 { 0x10007465, 0x80 },
400 { 0x10007466, 0x07 },
401 { 0x10007467, 0x02 },
402 { 0x10007468, 0x83 },
403 { 0x10007469, 0x47 },
404 { 0x1000746a, 0x17 },
405 { 0x1000746b, 0x08 },
406 { 0x1000746c, 0x93 },
407 { 0x1000746d, 0xf7 },
408 { 0x1000746e, 0x47 },
409 { 0x1000746f, 0x00 },
410 { 0x10007470, 0x63 },
411 { 0x10007471, 0x8a },
412 { 0x10007472, 0x07 },
413 { 0x10007473, 0x00 },
414 { 0x10007474, 0xb7 },
415 { 0x10007475, 0xc7 },
416 { 0x10007476, 0xc2 },
417 { 0x10007477, 0x3f },
418 { 0x10007478, 0x03 },
419 { 0x10007479, 0xa5 },
420 { 0x1000747a, 0x47 },
421 { 0x1000747b, 0xfc },
422 { 0x1000747c, 0x13 },
423 { 0x1000747d, 0x55 },
424 { 0x1000747e, 0x25 },
425 { 0x1000747f, 0x00 },
426 { 0x10007480, 0x13 },
427 { 0x10007481, 0x75 },
428 { 0x10007482, 0x15 },
429 { 0x10007483, 0x00 },
430 { 0x10007484, 0x67 },
431 { 0x10007485, 0x80 },
432 { 0x10007486, 0x00 },
433 { 0x10007487, 0x00 },
434 { 0x10007488, 0x03 },
435 { 0x10007489, 0xa7 },
436 { 0x1000748a, 0x81 },
437 { 0x1000748b, 0x57 },
438 { 0x1000748c, 0x13 },
439 { 0x1000748d, 0x01 },
440 { 0x1000748e, 0x01 },
441 { 0x1000748f, 0xff },
442 { 0x10007490, 0x23 },
443 { 0x10007491, 0x26 },
444 { 0x10007492, 0x11 },
445 { 0x10007493, 0x00 },
446 { 0x10007494, 0x23 },
447 { 0x10007495, 0x24 },
448 { 0x10007496, 0x81 },
449 { 0x10007497, 0x00 },
450 { 0x10007498, 0x23 },
451 { 0x10007499, 0x22 },
452 { 0x1000749a, 0x91 },
453 { 0x1000749b, 0x00 },
454 { 0x1000749c, 0x93 },
455 { 0x1000749d, 0x07 },
456 { 0x1000749e, 0xa0 },
457 { 0x1000749f, 0x05 },
458 { 0x100074a0, 0x63 },
459 { 0x100074a1, 0x14 },
460 { 0x100074a2, 0xf7 },
461 { 0x100074a3, 0x04 },
462 { 0x100074a4, 0x37 },
463 { 0x100074a5, 0x07 },
464 { 0x100074a6, 0x00 },
465 { 0x100074a7, 0x11 },
466 { 0x100074a8, 0x83 },
467 { 0x100074a9, 0x47 },
468 { 0x100074aa, 0x07 },
469 { 0x100074ab, 0x01 },
470 { 0x100074ac, 0x13 },
471 { 0x100074ad, 0x06 },
472 { 0x100074ae, 0x30 },
473 { 0x100074af, 0x00 },
474 { 0x100074b0, 0x93 },
475 { 0x100074b1, 0xf7 },
476 { 0x100074b2, 0xf7 },
477 { 0x100074b3, 0x0f },
478 { 0x100074b4, 0x63 },
479 { 0x100074b5, 0x9a },
480 { 0x100074b6, 0xc7 },
481 { 0x100074b7, 0x02 },
482 { 0x100074b8, 0x03 },
483 { 0x100074b9, 0x47 },
484 { 0x100074ba, 0x87 },
485 { 0x100074bb, 0x01 },
486 { 0x100074bc, 0x13 },
487 { 0x100074bd, 0x77 },
488 { 0x100074be, 0xf7 },
489 { 0x100074bf, 0x0f },
490 { 0x100074c0, 0x63 },
491 { 0x100074c1, 0x14 },
492 { 0x100074c2, 0xf7 },
493 { 0x100074c3, 0x02 },
494 { 0x100074c4, 0x37 },
495 { 0x100074c5, 0xd7 },
496 { 0x100074c6, 0x00 },
497 { 0x100074c7, 0x00 },
498 { 0x100074c8, 0x83 },
499 { 0x100074c9, 0x47 },
500 { 0x100074ca, 0x37 },
501 { 0x100074cb, 0x54 },
502 { 0x100074cc, 0x93 },
503 { 0x100074cd, 0xf7 },
504 { 0x100074ce, 0xf7 },
505 { 0x100074cf, 0x0f },
506 { 0x100074d0, 0x93 },
507 { 0x100074d1, 0xe7 },
508 { 0x100074d2, 0x07 },
509 { 0x100074d3, 0x02 },
510 { 0x100074d4, 0xa3 },
511 { 0x100074d5, 0x01 },
512 { 0x100074d6, 0xf7 },
513 { 0x100074d7, 0x54 },
514 { 0x100074d8, 0x83 },
515 { 0x100074d9, 0x47 },
516 { 0x100074da, 0x37 },
517 { 0x100074db, 0x54 },
518 { 0x100074dc, 0x93 },
519 { 0x100074dd, 0xf7 },
520 { 0x100074de, 0xf7 },
521 { 0x100074df, 0x0d },
522 { 0x100074e0, 0xa3 },
523 { 0x100074e1, 0x01 },
524 { 0x100074e2, 0xf7 },
525 { 0x100074e3, 0x54 },
526 { 0x100074e4, 0x23 },
527 { 0x100074e5, 0xac },
528 { 0x100074e6, 0x01 },
529 { 0x100074e7, 0x56 },
530 { 0x100074e8, 0x37 },
531 { 0x100074e9, 0xd4 },
532 { 0x100074ea, 0x00 },
533 { 0x100074eb, 0x00 },
534 { 0x100074ec, 0x83 },
535 { 0x100074ed, 0x47 },
536 { 0x100074ee, 0xd4 },
537 { 0x100074ef, 0x47 },
538 { 0x100074f0, 0x93 },
539 { 0x100074f1, 0xf7 },
540 { 0x100074f2, 0x17 },
541 { 0x100074f3, 0x00 },
542 { 0x100074f4, 0x63 },
543 { 0x100074f5, 0x80 },
544 { 0x100074f6, 0x07 },
545 { 0x100074f7, 0x06 },
546 { 0x100074f8, 0x37 },
547 { 0x100074f9, 0xd7 },
548 { 0x100074fa, 0x00 },
549 { 0x100074fb, 0x10 },
550 { 0x100074fc, 0x83 },
551 { 0x100074fd, 0x47 },
552 { 0x100074fe, 0x77 },
553 { 0x100074ff, 0xd9 },
554 { 0x10007500, 0x93 },
555 { 0x10007501, 0x87 },
556 { 0x10007502, 0x17 },
557 { 0x10007503, 0x00 },
558 { 0x10007504, 0x93 },
559 { 0x10007505, 0xf7 },
560 { 0x10007506, 0xf7 },
561 { 0x10007507, 0x0f },
562 { 0x10007508, 0xa3 },
563 { 0x10007509, 0x0b },
564 { 0x1000750a, 0xf7 },
565 { 0x1000750b, 0xd8 },
566 { 0x1000750c, 0x03 },
567 { 0x1000750d, 0x47 },
568 { 0x1000750e, 0x77 },
569 { 0x1000750f, 0xd9 },
570 { 0x10007510, 0x83 },
571 { 0x10007511, 0x47 },
572 { 0x10007512, 0xc4 },
573 { 0x10007513, 0x47 },
574 { 0x10007514, 0x13 },
575 { 0x10007515, 0x77 },
576 { 0x10007516, 0xf7 },
577 { 0x10007517, 0x0f },
578 { 0x10007518, 0x93 },
579 { 0x10007519, 0xf7 },
580 { 0x1000751a, 0xf7 },
581 { 0x1000751b, 0x0f },
582 { 0x1000751c, 0x63 },
583 { 0x1000751d, 0x6c },
584 { 0x1000751e, 0xf7 },
585 { 0x1000751f, 0x02 },
586 { 0x10007520, 0xb7 },
587 { 0x10007521, 0xf4 },
588 { 0x10007522, 0x00 },
589 { 0x10007523, 0x00 },
590 { 0x10007524, 0x93 },
591 { 0x10007525, 0x05 },
592 { 0x10007526, 0x00 },
593 { 0x10007527, 0x01 },
594 { 0x10007528, 0x13 },
595 { 0x10007529, 0x85 },
596 { 0x1000752a, 0x34 },
597 { 0x1000752b, 0x52 },
598 { 0x1000752c, 0xef },
599 { 0x1000752d, 0xa0 },
600 { 0x1000752e, 0x8f },
601 { 0x1000752f, 0xc6 },
602 { 0x10007530, 0x93 },
603 { 0x10007531, 0x05 },
604 { 0x10007532, 0x00 },
605 { 0x10007533, 0x00 },
606 { 0x10007534, 0x13 },
607 { 0x10007535, 0x85 },
608 { 0x10007536, 0x54 },
609 { 0x10007537, 0x10 },
610 { 0x10007538, 0xef },
611 { 0x10007539, 0xa0 },
612 { 0x1000753a, 0xcf },
613 { 0x1000753b, 0xc5 },
614 { 0x1000753c, 0x93 },
615 { 0x1000753d, 0x05 },
616 { 0x1000753e, 0x00 },
617 { 0x1000753f, 0x00 },
618 { 0x10007540, 0x13 },
619 { 0x10007541, 0x85 },
620 { 0x10007542, 0x74 },
621 { 0x10007543, 0x10 },
622 { 0x10007544, 0xef },
623 { 0x10007545, 0xa0 },
624 { 0x10007546, 0x0f },
625 { 0x10007547, 0xc5 },
626 { 0x10007548, 0x83 },
627 { 0x10007549, 0x47 },
628 { 0x1000754a, 0xd4 },
629 { 0x1000754b, 0x47 },
630 { 0x1000754c, 0x93 },
631 { 0x1000754d, 0xf7 },
632 { 0x1000754e, 0xe7 },
633 { 0x1000754f, 0x0f },
634 { 0x10007550, 0xa3 },
635 { 0x10007551, 0x0e },
636 { 0x10007552, 0xf4 },
637 { 0x10007553, 0x46 },
638 { 0x10007554, 0x83 },
639 { 0x10007555, 0x20 },
640 { 0x10007556, 0xc1 },
641 { 0x10007557, 0x00 },
642 { 0x10007558, 0x03 },
643 { 0x10007559, 0x24 },
644 { 0x1000755a, 0x81 },
645 { 0x1000755b, 0x00 },
646 { 0x1000755c, 0x83 },
647 { 0x1000755d, 0x24 },
648 { 0x1000755e, 0x41 },
649 { 0x1000755f, 0x00 },
650 { 0x10007560, 0x13 },
651 { 0x10007561, 0x01 },
652 { 0x10007562, 0x01 },
653 { 0x10007563, 0x01 },
654 { 0x10007564, 0x67 },
655 { 0x10007565, 0x80 },
656 { 0x10007566, 0x00 },
657 { 0x10007567, 0x00 },
658 { 0x10007568, 0x13 },
659 { 0x10007569, 0x01 },
660 { 0x1000756a, 0x01 },
661 { 0x1000756b, 0xff },
662 { 0x1000756c, 0x23 },
663 { 0x1000756d, 0x24 },
664 { 0x1000756e, 0x81 },
665 { 0x1000756f, 0x00 },
666 { 0x10007570, 0x23 },
667 { 0x10007571, 0x26 },
668 { 0x10007572, 0x11 },
669 { 0x10007573, 0x00 },
670 { 0x10007574, 0x23 },
671 { 0x10007575, 0x22 },
672 { 0x10007576, 0x91 },
673 { 0x10007577, 0x00 },
674 { 0x10007578, 0x37 },
675 { 0x10007579, 0xd4 },
676 { 0x1000757a, 0x00 },
677 { 0x1000757b, 0x00 },
678 { 0x1000757c, 0x83 },
679 { 0x1000757d, 0x47 },
680 { 0x1000757e, 0x04 },
681 { 0x1000757f, 0x54 },
682 { 0x10007580, 0x93 },
683 { 0x10007581, 0x97 },
684 { 0x10007582, 0x87 },
685 { 0x10007583, 0x01 },
686 { 0x10007584, 0x93 },
687 { 0x10007585, 0xd7 },
688 { 0x10007586, 0x87 },
689 { 0x10007587, 0x41 },
690 { 0x10007588, 0x63 },
691 { 0x10007589, 0xd0 },
692 { 0x1000758a, 0x07 },
693 { 0x1000758b, 0x06 },
694 { 0x1000758c, 0xb7 },
695 { 0x1000758d, 0xf4 },
696 { 0x1000758e, 0x00 },
697 { 0x1000758f, 0x00 },
698 { 0x10007590, 0x93 },
699 { 0x10007591, 0x05 },
700 { 0x10007592, 0x60 },
701 { 0x10007593, 0x01 },
702 { 0x10007594, 0x13 },
703 { 0x10007595, 0x85 },
704 { 0x10007596, 0x34 },
705 { 0x10007597, 0x52 },
706 { 0x10007598, 0xef },
707 { 0x10007599, 0xa0 },
708 { 0x1000759a, 0xcf },
709 { 0x1000759b, 0xbf },
710 { 0x1000759c, 0x93 },
711 { 0x1000759d, 0x05 },
712 { 0x1000759e, 0x00 },
713 { 0x1000759f, 0x04 },
714 { 0x100075a0, 0x13 },
715 { 0x100075a1, 0x85 },
716 { 0x100075a2, 0x54 },
717 { 0x100075a3, 0x10 },
718 { 0x100075a4, 0xef },
719 { 0x100075a5, 0xa0 },
720 { 0x100075a6, 0x0f },
721 { 0x100075a7, 0xbf },
722 { 0x100075a8, 0x93 },
723 { 0x100075a9, 0x05 },
724 { 0x100075aa, 0x00 },
725 { 0x100075ab, 0x04 },
726 { 0x100075ac, 0x13 },
727 { 0x100075ad, 0x85 },
728 { 0x100075ae, 0x74 },
729 { 0x100075af, 0x10 },
730 { 0x100075b0, 0xef },
731 { 0x100075b1, 0xa0 },
732 { 0x100075b2, 0x4f },
733 { 0x100075b3, 0xbe },
734 { 0x100075b4, 0x83 },
735 { 0x100075b5, 0x47 },
736 { 0x100075b6, 0xd4 },
737 { 0x100075b7, 0x47 },
738 { 0x100075b8, 0x37 },
739 { 0x100075b9, 0xd7 },
740 { 0x100075ba, 0x00 },
741 { 0x100075bb, 0x10 },
742 { 0x100075bc, 0x93 },
743 { 0x100075bd, 0xf7 },
744 { 0x100075be, 0xf7 },
745 { 0x100075bf, 0x0f },
746 { 0x100075c0, 0x93 },
747 { 0x100075c1, 0xe7 },
748 { 0x100075c2, 0x17 },
749 { 0x100075c3, 0x00 },
750 { 0x100075c4, 0xa3 },
751 { 0x100075c5, 0x0e },
752 { 0x100075c6, 0xf4 },
753 { 0x100075c7, 0x46 },
754 { 0x100075c8, 0xa3 },
755 { 0x100075c9, 0x0b },
756 { 0x100075ca, 0x07 },
757 { 0x100075cb, 0xd8 },
758 { 0x100075cc, 0x83 },
759 { 0x100075cd, 0x47 },
760 { 0x100075ce, 0x87 },
761 { 0x100075cf, 0xd9 },
762 { 0x100075d0, 0x93 },
763 { 0x100075d1, 0x87 },
764 { 0x100075d2, 0x17 },
765 { 0x100075d3, 0x00 },
766 { 0x100075d4, 0x93 },
767 { 0x100075d5, 0xf7 },
768 { 0x100075d6, 0xf7 },
769 { 0x100075d7, 0x0f },
770 { 0x100075d8, 0x23 },
771 { 0x100075d9, 0x0c },
772 { 0x100075da, 0xf7 },
773 { 0x100075db, 0xd8 },
774 { 0x100075dc, 0x83 },
775 { 0x100075dd, 0x47 },
776 { 0x100075de, 0x04 },
777 { 0x100075df, 0x54 },
778 { 0x100075e0, 0x93 },
779 { 0x100075e1, 0xf7 },
780 { 0x100075e2, 0xf7 },
781 { 0x100075e3, 0x07 },
782 { 0x100075e4, 0x23 },
783 { 0x100075e5, 0x00 },
784 { 0x100075e6, 0xf4 },
785 { 0x100075e7, 0x54 },
786 { 0x100075e8, 0x83 },
787 { 0x100075e9, 0x20 },
788 { 0x100075ea, 0xc1 },
789 { 0x100075eb, 0x00 },
790 { 0x100075ec, 0x03 },
791 { 0x100075ed, 0x24 },
792 { 0x100075ee, 0x81 },
793 { 0x100075ef, 0x00 },
794 { 0x100075f0, 0x83 },
795 { 0x100075f1, 0x24 },
796 { 0x100075f2, 0x41 },
797 { 0x100075f3, 0x00 },
798 { 0x100075f4, 0x13 },
799 { 0x100075f5, 0x01 },
800 { 0x100075f6, 0x01 },
801 { 0x100075f7, 0x01 },
802 { 0x100075f8, 0x67 },
803 { 0x100075f9, 0x80 },
804 { 0x100075fa, 0x00 },
805 { 0x100075fb, 0x00 },
806 { 0x100075fc, 0x13 },
807 { 0x100075fd, 0x01 },
808 { 0x100075fe, 0x01 },
809 { 0x100075ff, 0xff },
810 { 0x10007600, 0x23 },
811 { 0x10007601, 0x24 },
812 { 0x10007602, 0x81 },
813 { 0x10007603, 0x00 },
814 { 0x10007604, 0x37 },
815 { 0x10007605, 0xd4 },
816 { 0x10007606, 0x00 },
817 { 0x10007607, 0x00 },
818 { 0x10007608, 0x83 },
819 { 0x10007609, 0x27 },
820 { 0x1000760a, 0x04 },
821 { 0x1000760b, 0x53 },
822 { 0x1000760c, 0x23 },
823 { 0x1000760d, 0x22 },
824 { 0x1000760e, 0x91 },
825 { 0x1000760f, 0x00 },
826 { 0x10007610, 0xb7 },
827 { 0x10007611, 0x04 },
828 { 0x10007612, 0x00 },
829 { 0x10007613, 0x40 },
830 { 0x10007614, 0x23 },
831 { 0x10007615, 0x26 },
832 { 0x10007616, 0x11 },
833 { 0x10007617, 0x00 },
834 { 0x10007618, 0xb3 },
835 { 0x10007619, 0xf7 },
836 { 0x1000761a, 0x97 },
837 { 0x1000761b, 0x00 },
838 { 0x1000761c, 0x63 },
839 { 0x1000761d, 0x86 },
840 { 0x1000761e, 0x07 },
841 { 0x1000761f, 0x00 },
842 { 0x10007620, 0xef },
843 { 0x10007621, 0xd0 },
844 { 0x10007622, 0x5f },
845 { 0x10007623, 0xc2 },
846 { 0x10007624, 0x23 },
847 { 0x10007625, 0x28 },
848 { 0x10007626, 0x94 },
849 { 0x10007627, 0x52 },
850 { 0x10007628, 0x83 },
851 { 0x10007629, 0x20 },
852 { 0x1000762a, 0xc1 },
853 { 0x1000762b, 0x00 },
854 { 0x1000762c, 0x03 },
855 { 0x1000762d, 0x24 },
856 { 0x1000762e, 0x81 },
857 { 0x1000762f, 0x00 },
858 { 0x10007630, 0x83 },
859 { 0x10007631, 0x24 },
860 { 0x10007632, 0x41 },
861 { 0x10007633, 0x00 },
862 { 0x10007634, 0x13 },
863 { 0x10007635, 0x01 },
864 { 0x10007636, 0x01 },
865 { 0x10007637, 0x01 },
866 { 0x10007638, 0x67 },
867 { 0x10007639, 0x80 },
868 { 0x1000763a, 0x00 },
869 { 0x1000763b, 0x00 },
870 { 0x1000763c, 0x37 },
871 { 0x1000763d, 0xc7 },
872 { 0x1000763e, 0x00 },
873 { 0x1000763f, 0x00 },
874 { 0x10007640, 0x83 },
875 { 0x10007641, 0x27 },
876 { 0x10007642, 0xc7 },
877 { 0x10007643, 0x5f },
878 { 0x10007644, 0x23 },
879 { 0x10007645, 0xa2 },
880 { 0x10007646, 0xf1 },
881 { 0x10007647, 0x42 },
882 { 0x10007648, 0xb7 },
883 { 0x10007649, 0x06 },
884 { 0x1000764a, 0x00 },
885 { 0x1000764b, 0x10 },
886 { 0x1000764c, 0xb3 },
887 { 0x1000764d, 0xf7 },
888 { 0x1000764e, 0xd7 },
889 { 0x1000764f, 0x00 },
890 { 0x10007650, 0x63 },
891 { 0x10007651, 0x80 },
892 { 0x10007652, 0x07 },
893 { 0x10007653, 0x0a },
894 { 0x10007654, 0x83 },
895 { 0x10007655, 0x47 },
896 { 0x10007656, 0x07 },
897 { 0x10007657, 0x56 },
898 { 0x10007658, 0x93 },
899 { 0x10007659, 0xf7 },
900 { 0x1000765a, 0x87 },
901 { 0x1000765b, 0x01 },
902 { 0x1000765c, 0x63 },
903 { 0x1000765d, 0x8a },
904 { 0x1000765e, 0x07 },
905 { 0x1000765f, 0x08 },
906 { 0x10007660, 0x83 },
907 { 0x10007661, 0x47 },
908 { 0x10007662, 0x17 },
909 { 0x10007663, 0x08 },
910 { 0x10007664, 0x93 },
911 { 0x10007665, 0xf7 },
912 { 0x10007666, 0x47 },
913 { 0x10007667, 0x00 },
914 { 0x10007668, 0x63 },
915 { 0x10007669, 0x84 },
916 { 0x1000766a, 0x07 },
917 { 0x1000766b, 0x08 },
918 { 0x1000766c, 0x13 },
919 { 0x1000766d, 0x01 },
920 { 0x1000766e, 0x01 },
921 { 0x1000766f, 0xff },
922 { 0x10007670, 0x23 },
923 { 0x10007671, 0x26 },
924 { 0x10007672, 0x11 },
925 { 0x10007673, 0x00 },
926 { 0x10007674, 0xb7 },
927 { 0x10007675, 0xc7 },
928 { 0x10007676, 0xc2 },
929 { 0x10007677, 0x3f },
930 { 0x10007678, 0x03 },
931 { 0x10007679, 0xa7 },
932 { 0x1000767a, 0x07 },
933 { 0x1000767b, 0xfc },
934 { 0x1000767c, 0x63 },
935 { 0x1000767d, 0x10 },
936 { 0x1000767e, 0x05 },
937 { 0x1000767f, 0x06 },
938 { 0x10007680, 0x13 },
939 { 0x10007681, 0x67 },
940 { 0x10007682, 0x07 },
941 { 0x10007683, 0x20 },
942 { 0x10007684, 0x23 },
943 { 0x10007685, 0xa0 },
944 { 0x10007686, 0xe7 },
945 { 0x10007687, 0xfc },
946 { 0x10007688, 0x03 },
947 { 0x10007689, 0xa7 },
948 { 0x1000768a, 0x07 },
949 { 0x1000768b, 0xfc },
950 { 0x1000768c, 0x13 },
951 { 0x1000768d, 0x67 },
952 { 0x1000768e, 0x07 },
953 { 0x1000768f, 0x40 },
954 { 0x10007690, 0x23 },
955 { 0x10007691, 0xa0 },
956 { 0x10007692, 0xe7 },
957 { 0x10007693, 0xfc },
958 { 0x10007694, 0x37 },
959 { 0x10007695, 0xc7 },
960 { 0x10007696, 0xc2 },
961 { 0x10007697, 0x3f },
962 { 0x10007698, 0x83 },
963 { 0x10007699, 0x27 },
964 { 0x1000769a, 0x07 },
965 { 0x1000769b, 0xfc },
966 { 0x1000769c, 0x13 },
967 { 0x1000769d, 0x75 },
968 { 0x1000769e, 0x15 },
969 { 0x1000769f, 0x00 },
970 { 0x100076a0, 0x13 },
971 { 0x100076a1, 0x15 },
972 { 0x100076a2, 0x85 },
973 { 0x100076a3, 0x00 },
974 { 0x100076a4, 0x93 },
975 { 0x100076a5, 0xf7 },
976 { 0x100076a6, 0xf7 },
977 { 0x100076a7, 0xef },
978 { 0x100076a8, 0x33 },
979 { 0x100076a9, 0xe5 },
980 { 0x100076aa, 0xa7 },
981 { 0x100076ab, 0x00 },
982 { 0x100076ac, 0x23 },
983 { 0x100076ad, 0x20 },
984 { 0x100076ae, 0xa7 },
985 { 0x100076af, 0xfc },
986 { 0x100076b0, 0x93 },
987 { 0x100076b1, 0x05 },
988 { 0x100076b2, 0x00 },
989 { 0x100076b3, 0x00 },
990 { 0x100076b4, 0x13 },
991 { 0x100076b5, 0x05 },
992 { 0x100076b6, 0xa0 },
993 { 0x100076b7, 0x00 },
994 { 0x100076b8, 0xef },
995 { 0x100076b9, 0xe0 },
996 { 0x100076ba, 0xcf },
997 { 0x100076bb, 0xb6 },
998 { 0x100076bc, 0x37 },
999 { 0x100076bd, 0xf7 },
1000 { 0x100076be, 0x00 },
1001 { 0x100076bf, 0x00 },
1002 { 0x100076c0, 0x83 },
1003 { 0x100076c1, 0x47 },
1004 { 0x100076c2, 0x57 },
1005 { 0x100076c3, 0x01 },
1006 { 0x100076c4, 0x93 },
1007 { 0x100076c5, 0xf7 },
1008 { 0x100076c6, 0xf7 },
1009 { 0x100076c7, 0x0f },
1010 { 0x100076c8, 0x93 },
1011 { 0x100076c9, 0xe7 },
1012 { 0x100076ca, 0x47 },
1013 { 0x100076cb, 0x00 },
1014 { 0x100076cc, 0xa3 },
1015 { 0x100076cd, 0x0a },
1016 { 0x100076ce, 0xf7 },
1017 { 0x100076cf, 0x00 },
1018 { 0x100076d0, 0x83 },
1019 { 0x100076d1, 0x20 },
1020 { 0x100076d2, 0xc1 },
1021 { 0x100076d3, 0x00 },
1022 { 0x100076d4, 0x13 },
1023 { 0x100076d5, 0x01 },
1024 { 0x100076d6, 0x01 },
1025 { 0x100076d7, 0x01 },
1026 { 0x100076d8, 0x67 },
1027 { 0x100076d9, 0x80 },
1028 { 0x100076da, 0x00 },
1029 { 0x100076db, 0x00 },
1030 { 0x100076dc, 0x13 },
1031 { 0x100076dd, 0x77 },
1032 { 0x100076de, 0xf7 },
1033 { 0x100076df, 0xdf },
1034 { 0x100076e0, 0x23 },
1035 { 0x100076e1, 0xa0 },
1036 { 0x100076e2, 0xe7 },
1037 { 0x100076e3, 0xfc },
1038 { 0x100076e4, 0x03 },
1039 { 0x100076e5, 0xa7 },
1040 { 0x100076e6, 0x07 },
1041 { 0x100076e7, 0xfc },
1042 { 0x100076e8, 0x13 },
1043 { 0x100076e9, 0x77 },
1044 { 0x100076ea, 0xf7 },
1045 { 0x100076eb, 0xbf },
1046 { 0x100076ec, 0x6f },
1047 { 0x100076ed, 0xf0 },
1048 { 0x100076ee, 0x5f },
1049 { 0x100076ef, 0xfa },
1050 { 0x100076f0, 0x67 },
1051 { 0x100076f1, 0x80 },
1052 { 0x100076f2, 0x00 },
1053 { 0x100076f3, 0x00 },
1054 { 0x100076f4, 0xb7 },
1055 { 0x100076f5, 0xc7 },
1056 { 0x100076f6, 0x00 },
1057 { 0x100076f7, 0x00 },
1058 { 0x100076f8, 0x03 },
1059 { 0x100076f9, 0xc7 },
1060 { 0x100076fa, 0x87 },
1061 { 0x100076fb, 0x59 },
1062 { 0x100076fc, 0x13 },
1063 { 0x100076fd, 0x77 },
1064 { 0x100076fe, 0xf7 },
1065 { 0x100076ff, 0x0f },
1066 { 0x10007700, 0x13 },
1067 { 0x10007701, 0x67 },
1068 { 0x10007702, 0x17 },
1069 { 0x10007703, 0x00 },
1070 { 0x10007704, 0x23 },
1071 { 0x10007705, 0x8c },
1072 { 0x10007706, 0xe7 },
1073 { 0x10007707, 0x58 },
1074 { 0x10007708, 0x03 },
1075 { 0x10007709, 0xc7 },
1076 { 0x1000770a, 0x77 },
1077 { 0x1000770b, 0x04 },
1078 { 0x1000770c, 0x13 },
1079 { 0x1000770d, 0x17 },
1080 { 0x1000770e, 0x87 },
1081 { 0x1000770f, 0x01 },
1082 { 0x10007710, 0x13 },
1083 { 0x10007711, 0x57 },
1084 { 0x10007712, 0x87 },
1085 { 0x10007713, 0x41 },
1086 { 0x10007714, 0x63 },
1087 { 0x10007715, 0x58 },
1088 { 0x10007716, 0x07 },
1089 { 0x10007717, 0x12 },
1090 { 0x10007718, 0x37 },
1091 { 0x10007719, 0xd7 },
1092 { 0x1000771a, 0x00 },
1093 { 0x1000771b, 0x00 },
1094 { 0x1000771c, 0x83 },
1095 { 0x1000771d, 0x26 },
1096 { 0x1000771e, 0x87 },
1097 { 0x1000771f, 0x53 },
1098 { 0x10007720, 0x37 },
1099 { 0x10007721, 0x06 },
1100 { 0x10007722, 0x00 },
1101 { 0x10007723, 0x40 },
1102 { 0x10007724, 0x93 },
1103 { 0x10007725, 0x05 },
1104 { 0x10007726, 0x80 },
1105 { 0x10007727, 0x01 },
1106 { 0x10007728, 0xb3 },
1107 { 0x10007729, 0xe6 },
1108 { 0x1000772a, 0xc6 },
1109 { 0x1000772b, 0x00 },
1110 { 0x1000772c, 0x23 },
1111 { 0x1000772d, 0x2c },
1112 { 0x1000772e, 0xd7 },
1113 { 0x1000772f, 0x52 },
1114 { 0x10007730, 0x83 },
1115 { 0x10007731, 0xc6 },
1116 { 0x10007732, 0x07 },
1117 { 0x10007733, 0x56 },
1118 { 0x10007734, 0x93 },
1119 { 0x10007735, 0xf6 },
1120 { 0x10007736, 0xf6 },
1121 { 0x10007737, 0x0f },
1122 { 0x10007738, 0x63 },
1123 { 0x10007739, 0x9c },
1124 { 0x1000773a, 0xb6 },
1125 { 0x1000773b, 0x0e },
1126 { 0x1000773c, 0x83 },
1127 { 0x1000773d, 0x27 },
1128 { 0x1000773e, 0x87 },
1129 { 0x1000773f, 0x53 },
1130 { 0x10007740, 0xb3 },
1131 { 0x10007741, 0xf7 },
1132 { 0x10007742, 0xc7 },
1133 { 0x10007743, 0x00 },
1134 { 0x10007744, 0x63 },
1135 { 0x10007745, 0x80 },
1136 { 0x10007746, 0x07 },
1137 { 0x10007747, 0x10 },
1138 { 0x10007748, 0x13 },
1139 { 0x10007749, 0x01 },
1140 { 0x1000774a, 0x01 },
1141 { 0x1000774b, 0xff },
1142 { 0x1000774c, 0x23 },
1143 { 0x1000774d, 0x24 },
1144 { 0x1000774e, 0x81 },
1145 { 0x1000774f, 0x00 },
1146 { 0x10007750, 0x83 },
1147 { 0x10007751, 0xa7 },
1148 { 0x10007752, 0x41 },
1149 { 0x10007753, 0x58 },
1150 { 0x10007754, 0x23 },
1151 { 0x10007755, 0x26 },
1152 { 0x10007756, 0x11 },
1153 { 0x10007757, 0x00 },
1154 { 0x10007758, 0x63 },
1155 { 0x10007759, 0x94 },
1156 { 0x1000775a, 0x07 },
1157 { 0x1000775b, 0x0c },
1158 { 0x1000775c, 0x83 },
1159 { 0x1000775d, 0x27 },
1160 { 0x1000775e, 0x07 },
1161 { 0x1000775f, 0x53 },
1162 { 0x10007760, 0x03 },
1163 { 0x10007761, 0xc6 },
1164 { 0x10007762, 0xb1 },
1165 { 0x10007763, 0x42 },
1166 { 0x10007764, 0x93 },
1167 { 0x10007765, 0xd7 },
1168 { 0x10007766, 0xe7 },
1169 { 0x10007767, 0x01 },
1170 { 0x10007768, 0x93 },
1171 { 0x10007769, 0xf7 },
1172 { 0x1000776a, 0x17 },
1173 { 0x1000776b, 0x00 },
1174 { 0x1000776c, 0x93 },
1175 { 0x1000776d, 0x06 },
1176 { 0x1000776e, 0x10 },
1177 { 0x1000776f, 0x00 },
1178 { 0x10007770, 0x63 },
1179 { 0x10007771, 0x14 },
1180 { 0x10007772, 0x06 },
1181 { 0x10007773, 0x00 },
1182 { 0x10007774, 0xb3 },
1183 { 0x10007775, 0x86 },
1184 { 0x10007776, 0xf6 },
1185 { 0x10007777, 0x40 },
1186 { 0x10007778, 0xa3 },
1187 { 0x10007779, 0x85 },
1188 { 0x1000777a, 0xd1 },
1189 { 0x1000777b, 0x42 },
1190 { 0x1000777c, 0x03 },
1191 { 0x1000777d, 0xc6 },
1192 { 0x1000777e, 0xa1 },
1193 { 0x1000777f, 0x42 },
1194 { 0x10007780, 0x93 },
1195 { 0x10007781, 0x06 },
1196 { 0x10007782, 0x10 },
1197 { 0x10007783, 0x00 },
1198 { 0x10007784, 0x63 },
1199 { 0x10007785, 0x14 },
1200 { 0x10007786, 0x06 },
1201 { 0x10007787, 0x00 },
1202 { 0x10007788, 0xb3 },
1203 { 0x10007789, 0x86 },
1204 { 0x1000778a, 0xf6 },
1205 { 0x1000778b, 0x40 },
1206 { 0x1000778c, 0x23 },
1207 { 0x1000778d, 0x85 },
1208 { 0x1000778e, 0xd1 },
1209 { 0x1000778f, 0x42 },
1210 { 0x10007790, 0x03 },
1211 { 0x10007791, 0xc6 },
1212 { 0x10007792, 0x91 },
1213 { 0x10007793, 0x42 },
1214 { 0x10007794, 0x93 },
1215 { 0x10007795, 0x06 },
1216 { 0x10007796, 0x10 },
1217 { 0x10007797, 0x00 },
1218 { 0x10007798, 0x63 },
1219 { 0x10007799, 0x14 },
1220 { 0x1000779a, 0x06 },
1221 { 0x1000779b, 0x00 },
1222 { 0x1000779c, 0xb3 },
1223 { 0x1000779d, 0x86 },
1224 { 0x1000779e, 0xf6 },
1225 { 0x1000779f, 0x40 },
1226 { 0x100077a0, 0xa3 },
1227 { 0x100077a1, 0x84 },
1228 { 0x100077a2, 0xd1 },
1229 { 0x100077a3, 0x42 },
1230 { 0x100077a4, 0x03 },
1231 { 0x100077a5, 0xc6 },
1232 { 0x100077a6, 0x81 },
1233 { 0x100077a7, 0x42 },
1234 { 0x100077a8, 0x93 },
1235 { 0x100077a9, 0x06 },
1236 { 0x100077aa, 0x10 },
1237 { 0x100077ab, 0x00 },
1238 { 0x100077ac, 0x63 },
1239 { 0x100077ad, 0x14 },
1240 { 0x100077ae, 0x06 },
1241 { 0x100077af, 0x00 },
1242 { 0x100077b0, 0xb3 },
1243 { 0x100077b1, 0x86 },
1244 { 0x100077b2, 0xf6 },
1245 { 0x100077b3, 0x40 },
1246 { 0x100077b4, 0x23 },
1247 { 0x100077b5, 0x84 },
1248 { 0x100077b6, 0xd1 },
1249 { 0x100077b7, 0x42 },
1250 { 0x100077b8, 0xb7 },
1251 { 0x100077b9, 0xd7 },
1252 { 0x100077ba, 0x00 },
1253 { 0x100077bb, 0x00 },
1254 { 0x100077bc, 0x83 },
1255 { 0x100077bd, 0xa7 },
1256 { 0x100077be, 0x07 },
1257 { 0x100077bf, 0x53 },
1258 { 0x100077c0, 0x37 },
1259 { 0x100077c1, 0x07 },
1260 { 0x100077c2, 0x00 },
1261 { 0x100077c3, 0x40 },
1262 { 0x100077c4, 0xb3 },
1263 { 0x100077c5, 0xf7 },
1264 { 0x100077c6, 0xe7 },
1265 { 0x100077c7, 0x00 },
1266 { 0x100077c8, 0x63 },
1267 { 0x100077c9, 0x8c },
1268 { 0x100077ca, 0x07 },
1269 { 0x100077cb, 0x04 },
1270 { 0x100077cc, 0xb7 },
1271 { 0x100077cd, 0x47 },
1272 { 0x100077ce, 0x0f },
1273 { 0x100077cf, 0x00 },
1274 { 0x100077d0, 0x93 },
1275 { 0x100077d1, 0x87 },
1276 { 0x100077d2, 0x17 },
1277 { 0x100077d3, 0x24 },
1278 { 0x100077d4, 0xb7 },
1279 { 0x100077d5, 0xf6 },
1280 { 0x100077d6, 0x00 },
1281 { 0x100077d7, 0x00 },
1282 { 0x100077d8, 0x03 },
1283 { 0x100077d9, 0xc7 },
1284 { 0x100077da, 0xf6 },
1285 { 0x100077db, 0x83 },
1286 { 0x100077dc, 0x13 },
1287 { 0x100077dd, 0x77 },
1288 { 0x100077de, 0x07 },
1289 { 0x100077df, 0x04 },
1290 { 0x100077e0, 0x63 },
1291 { 0x100077e1, 0x16 },
1292 { 0x100077e2, 0x07 },
1293 { 0x100077e3, 0x00 },
1294 { 0x100077e4, 0x93 },
1295 { 0x100077e5, 0x87 },
1296 { 0x100077e6, 0xf7 },
1297 { 0x100077e7, 0xff },
1298 { 0x100077e8, 0xe3 },
1299 { 0x100077e9, 0x98 },
1300 { 0x100077ea, 0x07 },
1301 { 0x100077eb, 0xfe },
1302 { 0x100077ec, 0x13 },
1303 { 0x100077ed, 0x05 },
1304 { 0x100077ee, 0x80 },
1305 { 0x100077ef, 0x3e },
1306 { 0x100077f0, 0x93 },
1307 { 0x100077f1, 0x05 },
1308 { 0x100077f2, 0x00 },
1309 { 0x100077f3, 0x00 },
1310 { 0x100077f4, 0xef },
1311 { 0x100077f5, 0xe0 },
1312 { 0x100077f6, 0x0f },
1313 { 0x100077f7, 0xa3 },
1314 { 0x100077f8, 0x37 },
1315 { 0x100077f9, 0xf7 },
1316 { 0x100077fa, 0x00 },
1317 { 0x100077fb, 0x00 },
1318 { 0x100077fc, 0x83 },
1319 { 0x100077fd, 0x47 },
1320 { 0x100077fe, 0xb7 },
1321 { 0x100077ff, 0x80 },
1322 { 0x10007800, 0x93 },
1323 { 0x10007801, 0xe7 },
1324 { 0x10007802, 0x07 },
1325 { 0x10007803, 0xf8 },
1326 { 0x10007804, 0x93 },
1327 { 0x10007805, 0xf7 },
1328 { 0x10007806, 0xf7 },
1329 { 0x10007807, 0x0f },
1330 { 0x10007808, 0xa3 },
1331 { 0x10007809, 0x05 },
1332 { 0x1000780a, 0xf7 },
1333 { 0x1000780b, 0x80 },
1334 { 0x1000780c, 0xb7 },
1335 { 0x1000780d, 0xd7 },
1336 { 0x1000780e, 0x00 },
1337 { 0x1000780f, 0x00 },
1338 { 0x10007810, 0x37 },
1339 { 0x10007811, 0x07 },
1340 { 0x10007812, 0x00 },
1341 { 0x10007813, 0x40 },
1342 { 0x10007814, 0x23 },
1343 { 0x10007815, 0xa8 },
1344 { 0x10007816, 0xe7 },
1345 { 0x10007817, 0x52 },
1346 { 0x10007818, 0x93 },
1347 { 0x10007819, 0x07 },
1348 { 0x1000781a, 0x10 },
1349 { 0x1000781b, 0x00 },
1350 { 0x1000781c, 0x23 },
1351 { 0x1000781d, 0xa2 },
1352 { 0x1000781e, 0xf1 },
1353 { 0x1000781f, 0x58 },
1354 { 0x10007820, 0x83 },
1355 { 0x10007821, 0x20 },
1356 { 0x10007822, 0xc1 },
1357 { 0x10007823, 0x00 },
1358 { 0x10007824, 0x03 },
1359 { 0x10007825, 0x24 },
1360 { 0x10007826, 0x81 },
1361 { 0x10007827, 0x00 },
1362 { 0x10007828, 0x13 },
1363 { 0x10007829, 0x01 },
1364 { 0x1000782a, 0x01 },
1365 { 0x1000782b, 0x01 },
1366 { 0x1000782c, 0x67 },
1367 { 0x1000782d, 0x80 },
1368 { 0x1000782e, 0x00 },
1369 { 0x1000782f, 0x00 },
1370 { 0x10007830, 0x83 },
1371 { 0x10007831, 0xc7 },
1372 { 0x10007832, 0x07 },
1373 { 0x10007833, 0x56 },
1374 { 0x10007834, 0x93 },
1375 { 0x10007835, 0xf7 },
1376 { 0x10007836, 0xf7 },
1377 { 0x10007837, 0x0f },
1378 { 0x10007838, 0x63 },
1379 { 0x10007839, 0x96 },
1380 { 0x1000783a, 0x07 },
1381 { 0x1000783b, 0x00 },
1382 { 0x1000783c, 0x23 },
1383 { 0x1000783d, 0xa2 },
1384 { 0x1000783e, 0x01 },
1385 { 0x1000783f, 0x58 },
1386 { 0x10007840, 0x67 },
1387 { 0x10007841, 0x80 },
1388 { 0x10007842, 0x00 },
1389 { 0x10007843, 0x00 },
1390 { 0x10007844, 0x67 },
1391 { 0x10007845, 0x80 },
1392 { 0x10007846, 0x00 },
1393 { 0x10007847, 0x00 },
1394 { 0x10007848, 0xb7 },
1395 { 0x10007849, 0xc7 },
1396 { 0x1000784a, 0x00 },
1397 { 0x1000784b, 0x00 },
1398 { 0x1000784c, 0x83 },
1399 { 0x1000784d, 0xc7 },
1400 { 0x1000784e, 0x07 },
1401 { 0x1000784f, 0x56 },
1402 { 0x10007850, 0x13 },
1403 { 0x10007851, 0x07 },
1404 { 0x10007852, 0x80 },
1405 { 0x10007853, 0x01 },
1406 { 0x10007854, 0x93 },
1407 { 0x10007855, 0xf7 },
1408 { 0x10007856, 0xf7 },
1409 { 0x10007857, 0x0f },
1410 { 0x10007858, 0x63 },
1411 { 0x10007859, 0x98 },
1412 { 0x1000785a, 0xe7 },
1413 { 0x1000785b, 0x00 },
1414 { 0x1000785c, 0x13 },
1415 { 0x1000785d, 0x05 },
1416 { 0x1000785e, 0x00 },
1417 { 0x1000785f, 0x7d },
1418 { 0x10007860, 0x93 },
1419 { 0x10007861, 0x05 },
1420 { 0x10007862, 0x00 },
1421 { 0x10007863, 0x00 },
1422 { 0x10007864, 0x6f },
1423 { 0x10007865, 0xe0 },
1424 { 0x10007866, 0x0f },
1425 { 0x10007867, 0x9c },
1426 { 0x10007868, 0x67 },
1427 { 0x10007869, 0x80 },
1428 { 0x1000786a, 0x00 },
1429 { 0x1000786b, 0x00 },
1430 { 0x1000786c, 0x13 },
1431 { 0x1000786d, 0x01 },
1432 { 0x1000786e, 0x01 },
1433 { 0x1000786f, 0xff },
1434 { 0x10007870, 0x23 },
1435 { 0x10007871, 0x26 },
1436 { 0x10007872, 0x11 },
1437 { 0x10007873, 0x00 },
1438 { 0x10007874, 0x23 },
1439 { 0x10007875, 0x24 },
1440 { 0x10007876, 0x81 },
1441 { 0x10007877, 0x00 },
1442 { 0x10007878, 0xef },
1443 { 0x10007879, 0xd0 },
1444 { 0x1000787a, 0x4f },
1445 { 0x1000787b, 0x91 },
1446 { 0x1000787c, 0x83 },
1447 { 0x1000787d, 0xc7 },
1448 { 0x1000787e, 0x81 },
1449 { 0x1000787f, 0x41 },
1450 { 0x10007880, 0x63 },
1451 { 0x10007881, 0x84 },
1452 { 0x10007882, 0x07 },
1453 { 0x10007883, 0x08 },
1454 { 0x10007884, 0xb7 },
1455 { 0x10007885, 0xd7 },
1456 { 0x10007886, 0x00 },
1457 { 0x10007887, 0x00 },
1458 { 0x10007888, 0x83 },
1459 { 0x10007889, 0xc7 },
1460 { 0x1000788a, 0x07 },
1461 { 0x1000788b, 0x47 },
1462 { 0x1000788c, 0x93 },
1463 { 0x1000788d, 0xf7 },
1464 { 0x1000788e, 0x07 },
1465 { 0x1000788f, 0x02 },
1466 { 0x10007890, 0x63 },
1467 { 0x10007891, 0x8a },
1468 { 0x10007892, 0x07 },
1469 { 0x10007893, 0x04 },
1470 { 0x10007894, 0x83 },
1471 { 0x10007895, 0xc7 },
1472 { 0x10007896, 0x11 },
1473 { 0x10007897, 0x44 },
1474 { 0x10007898, 0x93 },
1475 { 0x10007899, 0xf7 },
1476 { 0x1000789a, 0xd7 },
1477 { 0x1000789b, 0x0f },
1478 { 0x1000789c, 0x63 },
1479 { 0x1000789d, 0x90 },
1480 { 0x1000789e, 0x07 },
1481 { 0x1000789f, 0x02 },
1482 { 0x100078a0, 0x03 },
1483 { 0x100078a1, 0xc7 },
1484 { 0x100078a2, 0xd1 },
1485 { 0x100078a3, 0x58 },
1486 { 0x100078a4, 0xb7 },
1487 { 0x100078a5, 0x07 },
1488 { 0x100078a6, 0x00 },
1489 { 0x100078a7, 0x11 },
1490 { 0x100078a8, 0x23 },
1491 { 0x100078a9, 0x88 },
1492 { 0x100078aa, 0xe7 },
1493 { 0x100078ab, 0x00 },
1494 { 0x100078ac, 0x23 },
1495 { 0x100078ad, 0x88 },
1496 { 0x100078ae, 0xe7 },
1497 { 0x100078af, 0x20 },
1498 { 0x100078b0, 0x03 },
1499 { 0x100078b1, 0xc7 },
1500 { 0x100078b2, 0xc1 },
1501 { 0x100078b3, 0x58 },
1502 { 0x100078b4, 0x23 },
1503 { 0x100078b5, 0x8c },
1504 { 0x100078b6, 0xe7 },
1505 { 0x100078b7, 0x00 },
1506 { 0x100078b8, 0x6f },
1507 { 0x100078b9, 0x00 },
1508 { 0x100078ba, 0x80 },
1509 { 0x100078bb, 0x04 },
1510 { 0x100078bc, 0xb7 },
1511 { 0x100078bd, 0x07 },
1512 { 0x100078be, 0x00 },
1513 { 0x100078bf, 0x11 },
1514 { 0x100078c0, 0x23 },
1515 { 0x100078c1, 0x88 },
1516 { 0x100078c2, 0x07 },
1517 { 0x100078c3, 0x00 },
1518 { 0x100078c4, 0x23 },
1519 { 0x100078c5, 0x88 },
1520 { 0x100078c6, 0x07 },
1521 { 0x100078c7, 0x20 },
1522 { 0x100078c8, 0x23 },
1523 { 0x100078c9, 0x8c },
1524 { 0x100078ca, 0x07 },
1525 { 0x100078cb, 0x00 },
1526 { 0x100078cc, 0x23 },
1527 { 0x100078cd, 0x8c },
1528 { 0x100078ce, 0x07 },
1529 { 0x100078cf, 0x20 },
1530 { 0x100078d0, 0xef },
1531 { 0x100078d1, 0xb0 },
1532 { 0x100078d2, 0xcf },
1533 { 0x100078d3, 0xc4 },
1534 { 0x100078d4, 0x03 },
1535 { 0x100078d5, 0x24 },
1536 { 0x100078d6, 0x81 },
1537 { 0x100078d7, 0x00 },
1538 { 0x100078d8, 0x83 },
1539 { 0x100078d9, 0x20 },
1540 { 0x100078da, 0xc1 },
1541 { 0x100078db, 0x00 },
1542 { 0x100078dc, 0x13 },
1543 { 0x100078dd, 0x01 },
1544 { 0x100078de, 0x01 },
1545 { 0x100078df, 0x01 },
1546 { 0x100078e0, 0x6f },
1547 { 0x100078e1, 0xb0 },
1548 { 0x100078e2, 0xcf },
1549 { 0x100078e3, 0xcd },
1550 { 0x100078e4, 0x03 },
1551 { 0x100078e5, 0xc7 },
1552 { 0x100078e6, 0xd1 },
1553 { 0x100078e7, 0x58 },
1554 { 0x100078e8, 0xb7 },
1555 { 0x100078e9, 0x07 },
1556 { 0x100078ea, 0x00 },
1557 { 0x100078eb, 0x11 },
1558 { 0x100078ec, 0x23 },
1559 { 0x100078ed, 0x88 },
1560 { 0x100078ee, 0xe7 },
1561 { 0x100078ef, 0x00 },
1562 { 0x100078f0, 0x83 },
1563 { 0x100078f1, 0xc6 },
1564 { 0x100078f2, 0xc1 },
1565 { 0x100078f3, 0x58 },
1566 { 0x100078f4, 0x23 },
1567 { 0x100078f5, 0x88 },
1568 { 0x100078f6, 0xd7 },
1569 { 0x100078f7, 0x20 },
1570 { 0x100078f8, 0x23 },
1571 { 0x100078f9, 0x8c },
1572 { 0x100078fa, 0xd7 },
1573 { 0x100078fb, 0x00 },
1574 { 0x100078fc, 0x03 },
1575 { 0x100078fd, 0xc7 },
1576 { 0x100078fe, 0xc1 },
1577 { 0x100078ff, 0x58 },
1578 { 0x10007900, 0x23 },
1579 { 0x10007901, 0x8c },
1580 { 0x10007902, 0xe7 },
1581 { 0x10007903, 0x20 },
1582 { 0x10007904, 0x6f },
1583 { 0x10007905, 0xf0 },
1584 { 0x10007906, 0xdf },
1585 { 0x10007907, 0xfc },
1586 { 0x10007908, 0xb7 },
1587 { 0x10007909, 0x06 },
1588 { 0x1000790a, 0x00 },
1589 { 0x1000790b, 0x11 },
1590 { 0x1000790c, 0x03 },
1591 { 0x1000790d, 0xc7 },
1592 { 0x1000790e, 0x06 },
1593 { 0x1000790f, 0x21 },
1594 { 0x10007910, 0x03 },
1595 { 0x10007911, 0xc6 },
1596 { 0x10007912, 0xd1 },
1597 { 0x10007913, 0x58 },
1598 { 0x10007914, 0x13 },
1599 { 0x10007915, 0x84 },
1600 { 0x10007916, 0x07 },
1601 { 0x10007917, 0x00 },
1602 { 0x10007918, 0x13 },
1603 { 0x10007919, 0x77 },
1604 { 0x1000791a, 0xf7 },
1605 { 0x1000791b, 0x0f },
1606 { 0x1000791c, 0x63 },
1607 { 0x1000791d, 0x1a },
1608 { 0x1000791e, 0xe6 },
1609 { 0x1000791f, 0x00 },
1610 { 0x10007920, 0x83 },
1611 { 0x10007921, 0xc7 },
1612 { 0x10007922, 0x86 },
1613 { 0x10007923, 0x21 },
1614 { 0x10007924, 0x03 },
1615 { 0x10007925, 0xc7 },
1616 { 0x10007926, 0xc1 },
1617 { 0x10007927, 0x58 },
1618 { 0x10007928, 0x93 },
1619 { 0x10007929, 0xf7 },
1620 { 0x1000792a, 0xf7 },
1621 { 0x1000792b, 0x0f },
1622 { 0x1000792c, 0xe3 },
1623 { 0x1000792d, 0x02 },
1624 { 0x1000792e, 0xf7 },
1625 { 0x1000792f, 0xfa },
1626 { 0x10007930, 0xb7 },
1627 { 0x10007931, 0xc7 },
1628 { 0x10007932, 0x00 },
1629 { 0x10007933, 0x00 },
1630 { 0x10007934, 0x83 },
1631 { 0x10007935, 0xc7 },
1632 { 0x10007936, 0x07 },
1633 { 0x10007937, 0x56 },
1634 { 0x10007938, 0x13 },
1635 { 0x10007939, 0x07 },
1636 { 0x1000793a, 0xf0 },
1637 { 0x1000793b, 0x00 },
1638 { 0x1000793c, 0x93 },
1639 { 0x1000793d, 0xf7 },
1640 { 0x1000793e, 0xf7 },
1641 { 0x1000793f, 0x0f },
1642 { 0x10007940, 0xe3 },
1643 { 0x10007941, 0x78 },
1644 { 0x10007942, 0xf7 },
1645 { 0x10007943, 0xf8 },
1646 { 0x10007944, 0xb7 },
1647 { 0x10007945, 0xd7 },
1648 { 0x10007946, 0x00 },
1649 { 0x10007947, 0x00 },
1650 { 0x10007948, 0x83 },
1651 { 0x10007949, 0xc5 },
1652 { 0x1000794a, 0xa7 },
1653 { 0x1000794b, 0x47 },
1654 { 0x1000794c, 0x93 },
1655 { 0x1000794d, 0xf7 },
1656 { 0x1000794e, 0xf5 },
1657 { 0x1000794f, 0x0f },
1658 { 0x10007950, 0x93 },
1659 { 0x10007951, 0x95 },
1660 { 0x10007952, 0x57 },
1661 { 0x10007953, 0x00 },
1662 { 0x10007954, 0xb3 },
1663 { 0x10007955, 0x85 },
1664 { 0x10007956, 0xf5 },
1665 { 0x10007957, 0x40 },
1666 { 0x10007958, 0x93 },
1667 { 0x10007959, 0x95 },
1668 { 0x1000795a, 0x25 },
1669 { 0x1000795b, 0x00 },
1670 { 0x1000795c, 0xb3 },
1671 { 0x1000795d, 0x85 },
1672 { 0x1000795e, 0xf5 },
1673 { 0x1000795f, 0x00 },
1674 { 0x10007960, 0x13 },
1675 { 0x10007961, 0x95 },
1676 { 0x10007962, 0x35 },
1677 { 0x10007963, 0x00 },
1678 { 0x10007964, 0x93 },
1679 { 0x10007965, 0xd5 },
1680 { 0x10007966, 0xf5 },
1681 { 0x10007967, 0x41 },
1682 { 0x10007968, 0xef },
1683 { 0x10007969, 0xe0 },
1684 { 0x1000796a, 0xcf },
1685 { 0x1000796b, 0x8b },
1686 { 0x1000796c, 0x03 },
1687 { 0x1000796d, 0xc7 },
1688 { 0x1000796e, 0xd1 },
1689 { 0x1000796f, 0x58 },
1690 { 0x10007970, 0x6f },
1691 { 0x10007971, 0xf0 },
1692 { 0x10007972, 0x5f },
1693 { 0x10007973, 0xf3 },
1694 { 0x10007974, 0x13 },
1695 { 0x10007975, 0x01 },
1696 { 0x10007976, 0x01 },
1697 { 0x10007977, 0xfe },
1698 { 0x10007978, 0x23 },
1699 { 0x10007979, 0x2c },
1700 { 0x1000797a, 0x81 },
1701 { 0x1000797b, 0x00 },
1702 { 0x1000797c, 0x83 },
1703 { 0x1000797d, 0xc7 },
1704 { 0x1000797e, 0x21 },
1705 { 0x1000797f, 0x41 },
1706 { 0x10007980, 0x23 },
1707 { 0x10007981, 0x2e },
1708 { 0x10007982, 0x11 },
1709 { 0x10007983, 0x00 },
1710 { 0x10007984, 0x23 },
1711 { 0x10007985, 0x2a },
1712 { 0x10007986, 0x91 },
1713 { 0x10007987, 0x00 },
1714 { 0x10007988, 0x23 },
1715 { 0x10007989, 0x28 },
1716 { 0x1000798a, 0x21 },
1717 { 0x1000798b, 0x01 },
1718 { 0x1000798c, 0x23 },
1719 { 0x1000798d, 0x26 },
1720 { 0x1000798e, 0x31 },
1721 { 0x1000798f, 0x01 },
1722 { 0x10007990, 0x13 },
1723 { 0x10007991, 0x07 },
1724 { 0x10007992, 0x10 },
1725 { 0x10007993, 0x00 },
1726 { 0x10007994, 0x63 },
1727 { 0x10007995, 0x92 },
1728 { 0x10007996, 0xe7 },
1729 { 0x10007997, 0x02 },
1730 { 0x10007998, 0xa3 },
1731 { 0x10007999, 0x81 },
1732 { 0x1000799a, 0xf1 },
1733 { 0x1000799b, 0x40 },
1734 { 0x1000799c, 0x83 },
1735 { 0x1000799d, 0x20 },
1736 { 0x1000799e, 0xc1 },
1737 { 0x1000799f, 0x01 },
1738 { 0x100079a0, 0x03 },
1739 { 0x100079a1, 0x24 },
1740 { 0x100079a2, 0x81 },
1741 { 0x100079a3, 0x01 },
1742 { 0x100079a4, 0x83 },
1743 { 0x100079a5, 0x24 },
1744 { 0x100079a6, 0x41 },
1745 { 0x100079a7, 0x01 },
1746 { 0x100079a8, 0x03 },
1747 { 0x100079a9, 0x29 },
1748 { 0x100079aa, 0x01 },
1749 { 0x100079ab, 0x01 },
1750 { 0x100079ac, 0x83 },
1751 { 0x100079ad, 0x29 },
1752 { 0x100079ae, 0xc1 },
1753 { 0x100079af, 0x00 },
1754 { 0x100079b0, 0x13 },
1755 { 0x100079b1, 0x01 },
1756 { 0x100079b2, 0x01 },
1757 { 0x100079b3, 0x02 },
1758 { 0x100079b4, 0x67 },
1759 { 0x100079b5, 0x80 },
1760 { 0x100079b6, 0x00 },
1761 { 0x100079b7, 0x00 },
1762 { 0x100079b8, 0xe3 },
1763 { 0x100079b9, 0x92 },
1764 { 0x100079ba, 0x07 },
1765 { 0x100079bb, 0xfe },
1766 { 0x100079bc, 0x37 },
1767 { 0x100079bd, 0xc9 },
1768 { 0x100079be, 0x00 },
1769 { 0x100079bf, 0x00 },
1770 { 0x100079c0, 0x83 },
1771 { 0x100079c1, 0x47 },
1772 { 0x100079c2, 0x09 },
1773 { 0x100079c3, 0x56 },
1774 { 0x100079c4, 0x13 },
1775 { 0x100079c5, 0x07 },
1776 { 0x100079c6, 0x80 },
1777 { 0x100079c7, 0x01 },
1778 { 0x100079c8, 0x93 },
1779 { 0x100079c9, 0xf7 },
1780 { 0x100079ca, 0xf7 },
1781 { 0x100079cb, 0x0f },
1782 { 0x100079cc, 0xe3 },
1783 { 0x100079cd, 0x78 },
1784 { 0x100079ce, 0xf7 },
1785 { 0x100079cf, 0xfc },
1786 { 0x100079d0, 0x83 },
1787 { 0x100079d1, 0xc7 },
1788 { 0x100079d2, 0x31 },
1789 { 0x100079d3, 0x40 },
1790 { 0x100079d4, 0xe3 },
1791 { 0x100079d5, 0x84 },
1792 { 0x100079d6, 0x07 },
1793 { 0x100079d7, 0xfc },
1794 { 0x100079d8, 0xb7 },
1795 { 0x100079d9, 0xd4 },
1796 { 0x100079da, 0x00 },
1797 { 0x100079db, 0x00 },
1798 { 0x100079dc, 0x03 },
1799 { 0x100079dd, 0xc5 },
1800 { 0x100079de, 0x94 },
1801 { 0x100079df, 0x47 },
1802 { 0x100079e0, 0xb7 },
1803 { 0x100079e1, 0x15 },
1804 { 0x100079e2, 0x00 },
1805 { 0x100079e3, 0x00 },
1806 { 0x100079e4, 0x93 },
1807 { 0x100079e5, 0x85 },
1808 { 0x100079e6, 0x85 },
1809 { 0x100079e7, 0x38 },
1810 { 0x100079e8, 0x13 },
1811 { 0x100079e9, 0x75 },
1812 { 0x100079ea, 0xf5 },
1813 { 0x100079eb, 0x0f },
1814 { 0x100079ec, 0xef },
1815 { 0x100079ed, 0xe0 },
1816 { 0x100079ee, 0x5f },
1817 { 0x100079ef, 0xe0 },
1818 { 0x100079f0, 0x93 },
1819 { 0x100079f1, 0x55 },
1820 { 0x100079f2, 0xf5 },
1821 { 0x100079f3, 0x41 },
1822 { 0x100079f4, 0xef },
1823 { 0x100079f5, 0xe0 },
1824 { 0x100079f6, 0x0f },
1825 { 0x100079f7, 0x83 },
1826 { 0x100079f8, 0xa3 },
1827 { 0x100079f9, 0x81 },
1828 { 0x100079fa, 0x01 },
1829 { 0x100079fb, 0x40 },
1830 { 0x100079fc, 0x83 },
1831 { 0x100079fd, 0x27 },
1832 { 0x100079fe, 0xc9 },
1833 { 0x100079ff, 0x5f },
1834 { 0x10007a00, 0x37 },
1835 { 0x10007a01, 0x07 },
1836 { 0x10007a02, 0x00 },
1837 { 0x10007a03, 0x02 },
1838 { 0x10007a04, 0xb3 },
1839 { 0x10007a05, 0xf7 },
1840 { 0x10007a06, 0xe7 },
1841 { 0x10007a07, 0x00 },
1842 { 0x10007a08, 0xe3 },
1843 { 0x10007a09, 0x8a },
1844 { 0x10007a0a, 0x07 },
1845 { 0x10007a0b, 0xf8 },
1846 { 0x10007a0c, 0x03 },
1847 { 0x10007a0d, 0xc7 },
1848 { 0x10007a0e, 0x04 },
1849 { 0x10007a0f, 0x90 },
1850 { 0x10007a10, 0x93 },
1851 { 0x10007a11, 0x07 },
1852 { 0x10007a12, 0x10 },
1853 { 0x10007a13, 0x00 },
1854 { 0x10007a14, 0x13 },
1855 { 0x10007a15, 0x77 },
1856 { 0x10007a16, 0x17 },
1857 { 0x10007a17, 0x00 },
1858 { 0x10007a18, 0x63 },
1859 { 0x10007a19, 0x1c },
1860 { 0x10007a1a, 0x07 },
1861 { 0x10007a1b, 0x00 },
1862 { 0x10007a1c, 0x83 },
1863 { 0x10007a1d, 0xc7 },
1864 { 0x10007a1e, 0x34 },
1865 { 0x10007a1f, 0x54 },
1866 { 0x10007a20, 0x93 },
1867 { 0x10007a21, 0xf7 },
1868 { 0x10007a22, 0xf7 },
1869 { 0x10007a23, 0x0f },
1870 { 0x10007a24, 0x93 },
1871 { 0x10007a25, 0xd7 },
1872 { 0x10007a26, 0x17 },
1873 { 0x10007a27, 0x00 },
1874 { 0x10007a28, 0x93 },
1875 { 0x10007a29, 0xc7 },
1876 { 0x10007a2a, 0x17 },
1877 { 0x10007a2b, 0x00 },
1878 { 0x10007a2c, 0x93 },
1879 { 0x10007a2d, 0xf7 },
1880 { 0x10007a2e, 0x17 },
1881 { 0x10007a2f, 0x00 },
1882 { 0x10007a30, 0xa3 },
1883 { 0x10007a31, 0x85 },
1884 { 0x10007a32, 0xf1 },
1885 { 0x10007a33, 0x42 },
1886 { 0x10007a34, 0x37 },
1887 { 0x10007a35, 0xd6 },
1888 { 0x10007a36, 0x00 },
1889 { 0x10007a37, 0x00 },
1890 { 0x10007a38, 0x03 },
1891 { 0x10007a39, 0x47 },
1892 { 0x10007a3a, 0x06 },
1893 { 0x10007a3b, 0x90 },
1894 { 0x10007a3c, 0x93 },
1895 { 0x10007a3d, 0x06 },
1896 { 0x10007a3e, 0x10 },
1897 { 0x10007a3f, 0x00 },
1898 { 0x10007a40, 0x13 },
1899 { 0x10007a41, 0x77 },
1900 { 0x10007a42, 0x27 },
1901 { 0x10007a43, 0x00 },
1902 { 0x10007a44, 0x63 },
1903 { 0x10007a45, 0x18 },
1904 { 0x10007a46, 0x07 },
1905 { 0x10007a47, 0x00 },
1906 { 0x10007a48, 0x03 },
1907 { 0x10007a49, 0x47 },
1908 { 0x10007a4a, 0x36 },
1909 { 0x10007a4b, 0x54 },
1910 { 0x10007a4c, 0x13 },
1911 { 0x10007a4d, 0x77 },
1912 { 0x10007a4e, 0x17 },
1913 { 0x10007a4f, 0x00 },
1914 { 0x10007a50, 0xb3 },
1915 { 0x10007a51, 0x86 },
1916 { 0x10007a52, 0xe6 },
1917 { 0x10007a53, 0x40 },
1918 { 0x10007a54, 0x23 },
1919 { 0x10007a55, 0x85 },
1920 { 0x10007a56, 0xd1 },
1921 { 0x10007a57, 0x42 },
1922 { 0x10007a58, 0xb7 },
1923 { 0x10007a59, 0xd5 },
1924 { 0x10007a5a, 0x00 },
1925 { 0x10007a5b, 0x00 },
1926 { 0x10007a5c, 0x03 },
1927 { 0x10007a5d, 0xc6 },
1928 { 0x10007a5e, 0x05 },
1929 { 0x10007a5f, 0x92 },
1930 { 0x10007a60, 0x13 },
1931 { 0x10007a61, 0x07 },
1932 { 0x10007a62, 0x10 },
1933 { 0x10007a63, 0x00 },
1934 { 0x10007a64, 0x13 },
1935 { 0x10007a65, 0x76 },
1936 { 0x10007a66, 0x16 },
1937 { 0x10007a67, 0x00 },
1938 { 0x10007a68, 0x63 },
1939 { 0x10007a69, 0x1c },
1940 { 0x10007a6a, 0x06 },
1941 { 0x10007a6b, 0x00 },
1942 { 0x10007a6c, 0x03 },
1943 { 0x10007a6d, 0xc7 },
1944 { 0x10007a6e, 0x35 },
1945 { 0x10007a6f, 0x54 },
1946 { 0x10007a70, 0x13 },
1947 { 0x10007a71, 0x77 },
1948 { 0x10007a72, 0xf7 },
1949 { 0x10007a73, 0x0f },
1950 { 0x10007a74, 0x13 },
1951 { 0x10007a75, 0x57 },
1952 { 0x10007a76, 0x37 },
1953 { 0x10007a77, 0x00 },
1954 { 0x10007a78, 0x13 },
1955 { 0x10007a79, 0x47 },
1956 { 0x10007a7a, 0x17 },
1957 { 0x10007a7b, 0x00 },
1958 { 0x10007a7c, 0x13 },
1959 { 0x10007a7d, 0x77 },
1960 { 0x10007a7e, 0x17 },
1961 { 0x10007a7f, 0x00 },
1962 { 0x10007a80, 0xa3 },
1963 { 0x10007a81, 0x84 },
1964 { 0x10007a82, 0xe1 },
1965 { 0x10007a83, 0x42 },
1966 { 0x10007a84, 0xb7 },
1967 { 0x10007a85, 0xd5 },
1968 { 0x10007a86, 0x00 },
1969 { 0x10007a87, 0x00 },
1970 { 0x10007a88, 0x03 },
1971 { 0x10007a89, 0xc6 },
1972 { 0x10007a8a, 0x05 },
1973 { 0x10007a8b, 0x92 },
1974 { 0x10007a8c, 0x13 },
1975 { 0x10007a8d, 0x07 },
1976 { 0x10007a8e, 0x10 },
1977 { 0x10007a8f, 0x00 },
1978 { 0x10007a90, 0x13 },
1979 { 0x10007a91, 0x76 },
1980 { 0x10007a92, 0x26 },
1981 { 0x10007a93, 0x00 },
1982 { 0x10007a94, 0x63 },
1983 { 0x10007a95, 0x1c },
1984 { 0x10007a96, 0x06 },
1985 { 0x10007a97, 0x00 },
1986 { 0x10007a98, 0x03 },
1987 { 0x10007a99, 0xc7 },
1988 { 0x10007a9a, 0x35 },
1989 { 0x10007a9b, 0x54 },
1990 { 0x10007a9c, 0x13 },
1991 { 0x10007a9d, 0x77 },
1992 { 0x10007a9e, 0xf7 },
1993 { 0x10007a9f, 0x0f },
1994 { 0x10007aa0, 0x13 },
1995 { 0x10007aa1, 0x57 },
1996 { 0x10007aa2, 0x27 },
1997 { 0x10007aa3, 0x00 },
1998 { 0x10007aa4, 0x13 },
1999 { 0x10007aa5, 0x47 },
2000 { 0x10007aa6, 0x17 },
2001 { 0x10007aa7, 0x00 },
2002 { 0x10007aa8, 0x13 },
2003 { 0x10007aa9, 0x77 },
2004 { 0x10007aaa, 0x17 },
2005 { 0x10007aab, 0x00 },
2006 { 0x10007aac, 0x23 },
2007 { 0x10007aad, 0x84 },
2008 { 0x10007aae, 0xe1 },
2009 { 0x10007aaf, 0x42 },
2010 { 0x10007ab0, 0x63 },
2011 { 0x10007ab1, 0x84 },
2012 { 0x10007ab2, 0x07 },
2013 { 0x10007ab3, 0x00 },
2014 { 0x10007ab4, 0xe3 },
2015 { 0x10007ab5, 0x94 },
2016 { 0x10007ab6, 0x06 },
2017 { 0x10007ab7, 0xee },
2018 { 0x10007ab8, 0xef },
2019 { 0x10007ab9, 0x90 },
2020 { 0x10007aba, 0x0f },
2021 { 0x10007abb, 0x86 },
2022 { 0x10007abc, 0xef },
2023 { 0x10007abd, 0xd0 },
2024 { 0x10007abe, 0x0f },
2025 { 0x10007abf, 0x97 },
2026 { 0x10007ac0, 0x37 },
2027 { 0x10007ac1, 0x15 },
2028 { 0x10007ac2, 0x00 },
2029 { 0x10007ac3, 0x00 },
2030 { 0x10007ac4, 0x13 },
2031 { 0x10007ac5, 0x05 },
2032 { 0x10007ac6, 0x85 },
2033 { 0x10007ac7, 0xbb },
2034 { 0x10007ac8, 0x93 },
2035 { 0x10007ac9, 0x05 },
2036 { 0x10007aca, 0x00 },
2037 { 0x10007acb, 0x00 },
2038 { 0x10007acc, 0xef },
2039 { 0x10007acd, 0xd0 },
2040 { 0x10007ace, 0x9f },
2041 { 0x10007acf, 0xf5 },
2042 { 0x10007ad0, 0xb7 },
2043 { 0x10007ad1, 0xd7 },
2044 { 0x10007ad2, 0x00 },
2045 { 0x10007ad3, 0x00 },
2046 { 0x10007ad4, 0x83 },
2047 { 0x10007ad5, 0xc7 },
2048 { 0x10007ad6, 0x07 },
2049 { 0x10007ad7, 0x47 },
2050 { 0x10007ad8, 0x93 },
2051 { 0x10007ad9, 0xf7 },
2052 { 0x10007ada, 0x47 },
2053 { 0x10007adb, 0x00 },
2054 { 0x10007adc, 0xe3 },
2055 { 0x10007add, 0x80 },
2056 { 0x10007ade, 0x07 },
2057 { 0x10007adf, 0xec },
2058 { 0x10007ae0, 0xef },
2059 { 0x10007ae1, 0x80 },
2060 { 0x10007ae2, 0xdf },
2061 { 0x10007ae3, 0xf4 },
2062 { 0x10007ae4, 0x23 },
2063 { 0x10007ae5, 0x89 },
2064 { 0x10007ae6, 0xa1 },
2065 { 0x10007ae7, 0x40 },
2066 { 0x10007ae8, 0x6f },
2067 { 0x10007ae9, 0xf0 },
2068 { 0x10007aea, 0x5f },
2069 { 0x10007aeb, 0xeb },
2070 { 0x10007aec, 0x00 },
2071 { 0x10007aed, 0x00 },
2072 { 0x10007aee, 0x00 },
2073 { 0x10007aef, 0x00 },
2074 { 0x3fc2bf83, 0x00 },
2075 { 0x3fc2bf82, 0x00 },
2076 { 0x3fc2bf81, 0x00 },
2077 { 0x3fc2bf80, 0x00 },
2078 { 0x3fc2bfc7, 0x00 },
2079 { 0x3fc2bfc6, 0x00 },
2080 { 0x3fc2bfc5, 0x00 },
2081 { 0x3fc2bfc4, 0x00 },
2082 { 0x3fc2bfc3, 0x00 },
2083 { 0x3fc2bfc2, 0x00 },
2084 { 0x3fc2bfc1, 0x00 },
2085 { 0x3fc2bfc0, 0x03 },
2086 { 0x0000d486, 0x43 },
2087 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x00 },
2088 { 0x1000db00, 0x04 },
2089 { 0x1000db01, 0x00 },
2090 { 0x1000db02, 0x11 },
2091 { 0x1000db03, 0x00 },
2092 { 0x1000db04, 0x00 },
2093 { 0x1000db05, 0x82 },
2094 { 0x1000db06, 0x04 },
2095 { 0x1000db07, 0xf1 },
2096 { 0x1000db08, 0x00 },
2097 { 0x1000db09, 0x00 },
2098 { 0x1000db0a, 0x40 },
2099 { 0x1000db0b, 0x02 },
2100 { 0x1000db0c, 0xf2 },
2101 { 0x1000db0d, 0x00 },
2102 { 0x1000db0e, 0x00 },
2103 { 0x1000db0f, 0xe0 },
2104 { 0x1000db10, 0x00 },
2105 { 0x1000db11, 0x10 },
2106 { 0x1000db12, 0x00 },
2107 { 0x1000db13, 0x00 },
2108 { 0x1000db14, 0x45 },
2109 { 0x0000d540, 0x01 },
2110 { 0x0000c081, 0xfc },
2111 { 0x0000f01e, 0x80 },
2112 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x03 },
2113 };
2114
2115 /*
2116 * The 'patch code' is written to the patch code area.
2117 * The patch code area is used for SDCA register expansion flexibility.
2118 */
2119 static const struct reg_sequence rt1320_patch_code_write[] = {
2120 { 0x10007000, 0x37 },
2121 { 0x10007001, 0x77 },
2122 { 0x10007002, 0x00 },
2123 { 0x10007003, 0x10 },
2124 { 0x10007004, 0xb7 },
2125 { 0x10007005, 0xe7 },
2126 { 0x10007006, 0x00 },
2127 { 0x10007007, 0x10 },
2128 { 0x10007008, 0x13 },
2129 { 0x10007009, 0x07 },
2130 { 0x1000700a, 0x07 },
2131 { 0x1000700b, 0x40 },
2132 { 0x1000700c, 0x23 },
2133 { 0x1000700d, 0xae },
2134 { 0x1000700e, 0xe7 },
2135 { 0x1000700f, 0xda },
2136 { 0x10007010, 0x37 },
2137 { 0x10007011, 0x77 },
2138 { 0x10007012, 0x00 },
2139 { 0x10007013, 0x10 },
2140 { 0x10007014, 0x13 },
2141 { 0x10007015, 0x07 },
2142 { 0x10007016, 0x47 },
2143 { 0x10007017, 0x61 },
2144 { 0x10007018, 0x23 },
2145 { 0x10007019, 0xa4 },
2146 { 0x1000701a, 0xe7 },
2147 { 0x1000701b, 0xde },
2148 { 0x1000701c, 0x37 },
2149 { 0x1000701d, 0x77 },
2150 { 0x1000701e, 0x00 },
2151 { 0x1000701f, 0x10 },
2152 { 0x10007020, 0x13 },
2153 { 0x10007021, 0x07 },
2154 { 0x10007022, 0x07 },
2155 { 0x10007023, 0x52 },
2156 { 0x10007024, 0x23 },
2157 { 0x10007025, 0xae },
2158 { 0x10007026, 0xe7 },
2159 { 0x10007027, 0xde },
2160 { 0x10007028, 0x37 },
2161 { 0x10007029, 0x77 },
2162 { 0x1000702a, 0x00 },
2163 { 0x1000702b, 0x10 },
2164 { 0x1000702c, 0x13 },
2165 { 0x1000702d, 0x07 },
2166 { 0x1000702e, 0x47 },
2167 { 0x1000702f, 0x54 },
2168 { 0x10007030, 0x23 },
2169 { 0x10007031, 0xaa },
2170 { 0x10007032, 0xe7 },
2171 { 0x10007033, 0xe4 },
2172 { 0x10007034, 0x37 },
2173 { 0x10007035, 0x87 },
2174 { 0x10007036, 0x00 },
2175 { 0x10007037, 0x10 },
2176 { 0x10007038, 0x13 },
2177 { 0x10007039, 0x07 },
2178 { 0x1000703a, 0x47 },
2179 { 0x1000703b, 0x81 },
2180 { 0x1000703c, 0x23 },
2181 { 0x1000703d, 0xa2 },
2182 { 0x1000703e, 0xe7 },
2183 { 0x1000703f, 0xe8 },
2184 { 0x10007040, 0x23 },
2185 { 0x10007041, 0xa4 },
2186 { 0x10007042, 0xe7 },
2187 { 0x10007043, 0xe8 },
2188 { 0x10007044, 0x37 },
2189 { 0x10007045, 0x77 },
2190 { 0x10007046, 0x00 },
2191 { 0x10007047, 0x10 },
2192 { 0x10007048, 0x13 },
2193 { 0x10007049, 0x07 },
2194 { 0x1000704a, 0x07 },
2195 { 0x1000704b, 0x59 },
2196 { 0x1000704c, 0x23 },
2197 { 0x1000704d, 0xa8 },
2198 { 0x1000704e, 0xe7 },
2199 { 0x1000704f, 0xea },
2200 { 0x10007050, 0x37 },
2201 { 0x10007051, 0x77 },
2202 { 0x10007052, 0x00 },
2203 { 0x10007053, 0x10 },
2204 { 0x10007054, 0x13 },
2205 { 0x10007055, 0x07 },
2206 { 0x10007056, 0x07 },
2207 { 0x10007057, 0x78 },
2208 { 0x10007058, 0x23 },
2209 { 0x10007059, 0xa6 },
2210 { 0x1000705a, 0xe7 },
2211 { 0x1000705b, 0xec },
2212 { 0x1000705c, 0x67 },
2213 { 0x1000705d, 0x80 },
2214 { 0x1000705e, 0x00 },
2215 { 0x1000705f, 0x00 },
2216 { 0x10007400, 0x37 },
2217 { 0x10007401, 0xd7 },
2218 { 0x10007402, 0x00 },
2219 { 0x10007403, 0x00 },
2220 { 0x10007404, 0x83 },
2221 { 0x10007405, 0x27 },
2222 { 0x10007406, 0x47 },
2223 { 0x10007407, 0x56 },
2224 { 0x10007408, 0xb7 },
2225 { 0x10007409, 0x06 },
2226 { 0x1000740a, 0x00 },
2227 { 0x1000740b, 0x02 },
2228 { 0x1000740c, 0xb3 },
2229 { 0x1000740d, 0xf7 },
2230 { 0x1000740e, 0xd7 },
2231 { 0x1000740f, 0x00 },
2232 { 0x10007410, 0x63 },
2233 { 0x10007411, 0x8a },
2234 { 0x10007412, 0x07 },
2235 { 0x10007413, 0x00 },
2236 { 0x10007414, 0x93 },
2237 { 0x10007415, 0x06 },
2238 { 0x10007416, 0x10 },
2239 { 0x10007417, 0x00 },
2240 { 0x10007418, 0x23 },
2241 { 0x10007419, 0x83 },
2242 { 0x1000741a, 0xd1 },
2243 { 0x1000741b, 0x44 },
2244 { 0x1000741c, 0x93 },
2245 { 0x1000741d, 0x07 },
2246 { 0x1000741e, 0xf0 },
2247 { 0x1000741f, 0xff },
2248 { 0x10007420, 0x23 },
2249 { 0x10007421, 0x22 },
2250 { 0x10007422, 0xf7 },
2251 { 0x10007423, 0x56 },
2252 { 0x10007424, 0x37 },
2253 { 0x10007425, 0xd7 },
2254 { 0x10007426, 0x00 },
2255 { 0x10007427, 0x00 },
2256 { 0x10007428, 0x83 },
2257 { 0x10007429, 0x27 },
2258 { 0x1000742a, 0x47 },
2259 { 0x1000742b, 0x58 },
2260 { 0x1000742c, 0x93 },
2261 { 0x1000742d, 0xf7 },
2262 { 0x1000742e, 0x17 },
2263 { 0x1000742f, 0x00 },
2264 { 0x10007430, 0x63 },
2265 { 0x10007431, 0x86 },
2266 { 0x10007432, 0x07 },
2267 { 0x10007433, 0x00 },
2268 { 0x10007434, 0x93 },
2269 { 0x10007435, 0x07 },
2270 { 0x10007436, 0x10 },
2271 { 0x10007437, 0x00 },
2272 { 0x10007438, 0x23 },
2273 { 0x10007439, 0x22 },
2274 { 0x1000743a, 0xf7 },
2275 { 0x1000743b, 0x58 },
2276 { 0x1000743c, 0xb7 },
2277 { 0x1000743d, 0xd7 },
2278 { 0x1000743e, 0x00 },
2279 { 0x1000743f, 0x00 },
2280 { 0x10007440, 0x03 },
2281 { 0x10007441, 0xa7 },
2282 { 0x10007442, 0x47 },
2283 { 0x10007443, 0x58 },
2284 { 0x10007444, 0xb7 },
2285 { 0x10007445, 0x07 },
2286 { 0x10007446, 0x00 },
2287 { 0x10007447, 0x04 },
2288 { 0x10007448, 0x33 },
2289 { 0x10007449, 0x77 },
2290 { 0x1000744a, 0xf7 },
2291 { 0x1000744b, 0x00 },
2292 { 0x1000744c, 0x93 },
2293 { 0x1000744d, 0x07 },
2294 { 0x1000744e, 0x00 },
2295 { 0x1000744f, 0x00 },
2296 { 0x10007450, 0x63 },
2297 { 0x10007451, 0x0e },
2298 { 0x10007452, 0x07 },
2299 { 0x10007453, 0x04 },
2300 { 0x10007454, 0x37 },
2301 { 0x10007455, 0x07 },
2302 { 0x10007456, 0x00 },
2303 { 0x10007457, 0x11 },
2304 { 0x10007458, 0x03 },
2305 { 0x10007459, 0x47 },
2306 { 0x1000745a, 0x87 },
2307 { 0x1000745b, 0x0e },
2308 { 0x1000745c, 0x93 },
2309 { 0x1000745d, 0x06 },
2310 { 0x1000745e, 0x40 },
2311 { 0x1000745f, 0x00 },
2312 { 0x10007460, 0x13 },
2313 { 0x10007461, 0x77 },
2314 { 0x10007462, 0xf7 },
2315 { 0x10007463, 0x0f },
2316 { 0x10007464, 0x63 },
2317 { 0x10007465, 0x02 },
2318 { 0x10007466, 0xd7 },
2319 { 0x10007467, 0x0a },
2320 { 0x10007468, 0x93 },
2321 { 0x10007469, 0x06 },
2322 { 0x1000746a, 0x70 },
2323 { 0x1000746b, 0x00 },
2324 { 0x1000746c, 0x63 },
2325 { 0x1000746d, 0x10 },
2326 { 0x1000746e, 0xd7 },
2327 { 0x1000746f, 0x04 },
2328 { 0x10007470, 0x93 },
2329 { 0x10007471, 0x07 },
2330 { 0x10007472, 0x60 },
2331 { 0x10007473, 0x06 },
2332 { 0x10007474, 0x37 },
2333 { 0x10007475, 0xd7 },
2334 { 0x10007476, 0x00 },
2335 { 0x10007477, 0x00 },
2336 { 0x10007478, 0x83 },
2337 { 0x10007479, 0x46 },
2338 { 0x1000747a, 0x77 },
2339 { 0x1000747b, 0xa6 },
2340 { 0x1000747c, 0x93 },
2341 { 0x1000747d, 0xe6 },
2342 { 0x1000747e, 0x06 },
2343 { 0x1000747f, 0xf8 },
2344 { 0x10007480, 0x93 },
2345 { 0x10007481, 0xf6 },
2346 { 0x10007482, 0xf6 },
2347 { 0x10007483, 0x0f },
2348 { 0x10007484, 0xa3 },
2349 { 0x10007485, 0x03 },
2350 { 0x10007486, 0xd7 },
2351 { 0x10007487, 0xa6 },
2352 { 0x10007488, 0x83 },
2353 { 0x10007489, 0x46 },
2354 { 0x1000748a, 0x77 },
2355 { 0x1000748b, 0xa8 },
2356 { 0x1000748c, 0x93 },
2357 { 0x1000748d, 0xe6 },
2358 { 0x1000748e, 0x06 },
2359 { 0x1000748f, 0xf8 },
2360 { 0x10007490, 0x93 },
2361 { 0x10007491, 0xf6 },
2362 { 0x10007492, 0xf6 },
2363 { 0x10007493, 0x0f },
2364 { 0x10007494, 0xa3 },
2365 { 0x10007495, 0x03 },
2366 { 0x10007496, 0xd7 },
2367 { 0x10007497, 0xa8 },
2368 { 0x10007498, 0xb7 },
2369 { 0x10007499, 0xc6 },
2370 { 0x1000749a, 0x00 },
2371 { 0x1000749b, 0x00 },
2372 { 0x1000749c, 0x23 },
2373 { 0x1000749d, 0x84 },
2374 { 0x1000749e, 0xf6 },
2375 { 0x1000749f, 0x06 },
2376 { 0x100074a0, 0xa3 },
2377 { 0x100074a1, 0x84 },
2378 { 0x100074a2, 0xf6 },
2379 { 0x100074a3, 0x06 },
2380 { 0x100074a4, 0xb7 },
2381 { 0x100074a5, 0x06 },
2382 { 0x100074a6, 0x00 },
2383 { 0x100074a7, 0x04 },
2384 { 0x100074a8, 0x23 },
2385 { 0x100074a9, 0x22 },
2386 { 0x100074aa, 0xd7 },
2387 { 0x100074ab, 0x58 },
2388 { 0x100074ac, 0x37 },
2389 { 0x100074ad, 0xd7 },
2390 { 0x100074ae, 0x00 },
2391 { 0x100074af, 0x00 },
2392 { 0x100074b0, 0x03 },
2393 { 0x100074b1, 0x27 },
2394 { 0x100074b2, 0x47 },
2395 { 0x100074b3, 0x58 },
2396 { 0x100074b4, 0xb7 },
2397 { 0x100074b5, 0x06 },
2398 { 0x100074b6, 0x00 },
2399 { 0x100074b7, 0x08 },
2400 { 0x100074b8, 0x33 },
2401 { 0x100074b9, 0x77 },
2402 { 0x100074ba, 0xd7 },
2403 { 0x100074bb, 0x00 },
2404 { 0x100074bc, 0x63 },
2405 { 0x100074bd, 0x04 },
2406 { 0x100074be, 0x07 },
2407 { 0x100074bf, 0x04 },
2408 { 0x100074c0, 0x37 },
2409 { 0x100074c1, 0x07 },
2410 { 0x100074c2, 0x00 },
2411 { 0x100074c3, 0x11 },
2412 { 0x100074c4, 0x03 },
2413 { 0x100074c5, 0x47 },
2414 { 0x100074c6, 0xc7 },
2415 { 0x100074c7, 0x0e },
2416 { 0x100074c8, 0x93 },
2417 { 0x100074c9, 0x06 },
2418 { 0x100074ca, 0x40 },
2419 { 0x100074cb, 0x00 },
2420 { 0x100074cc, 0x13 },
2421 { 0x100074cd, 0x77 },
2422 { 0x100074ce, 0xf7 },
2423 { 0x100074cf, 0x0f },
2424 { 0x100074d0, 0x63 },
2425 { 0x100074d1, 0x00 },
2426 { 0x100074d2, 0xd7 },
2427 { 0x100074d3, 0x04 },
2428 { 0x100074d4, 0x93 },
2429 { 0x100074d5, 0x06 },
2430 { 0x100074d6, 0x70 },
2431 { 0x100074d7, 0x00 },
2432 { 0x100074d8, 0x63 },
2433 { 0x100074d9, 0x00 },
2434 { 0x100074da, 0xd7 },
2435 { 0x100074db, 0x04 },
2436 { 0x100074dc, 0x63 },
2437 { 0x100074dd, 0x84 },
2438 { 0x100074de, 0x07 },
2439 { 0x100074df, 0x02 },
2440 { 0x100074e0, 0xb7 },
2441 { 0x100074e1, 0xd6 },
2442 { 0x100074e2, 0x00 },
2443 { 0x100074e3, 0x00 },
2444 { 0x100074e4, 0x03 },
2445 { 0x100074e5, 0xc7 },
2446 { 0x100074e6, 0x56 },
2447 { 0x100074e7, 0xa4 },
2448 { 0x100074e8, 0x13 },
2449 { 0x100074e9, 0x67 },
2450 { 0x100074ea, 0x07 },
2451 { 0x100074eb, 0xf8 },
2452 { 0x100074ec, 0x13 },
2453 { 0x100074ed, 0x77 },
2454 { 0x100074ee, 0xf7 },
2455 { 0x100074ef, 0x0f },
2456 { 0x100074f0, 0xa3 },
2457 { 0x100074f1, 0x82 },
2458 { 0x100074f2, 0xe6 },
2459 { 0x100074f3, 0xa4 },
2460 { 0x100074f4, 0x37 },
2461 { 0x100074f5, 0xc7 },
2462 { 0x100074f6, 0x00 },
2463 { 0x100074f7, 0x00 },
2464 { 0x100074f8, 0x23 },
2465 { 0x100074f9, 0x02 },
2466 { 0x100074fa, 0xf7 },
2467 { 0x100074fb, 0x06 },
2468 { 0x100074fc, 0xb7 },
2469 { 0x100074fd, 0x07 },
2470 { 0x100074fe, 0x00 },
2471 { 0x100074ff, 0x08 },
2472 { 0x10007500, 0x23 },
2473 { 0x10007501, 0xa2 },
2474 { 0x10007502, 0xf6 },
2475 { 0x10007503, 0x58 },
2476 { 0x10007504, 0x67 },
2477 { 0x10007505, 0x80 },
2478 { 0x10007506, 0x00 },
2479 { 0x10007507, 0x00 },
2480 { 0x10007508, 0x93 },
2481 { 0x10007509, 0x07 },
2482 { 0x1000750a, 0x80 },
2483 { 0x1000750b, 0x08 },
2484 { 0x1000750c, 0x6f },
2485 { 0x1000750d, 0xf0 },
2486 { 0x1000750e, 0x9f },
2487 { 0x1000750f, 0xf6 },
2488 { 0x10007510, 0x93 },
2489 { 0x10007511, 0x07 },
2490 { 0x10007512, 0x80 },
2491 { 0x10007513, 0x08 },
2492 { 0x10007514, 0x6f },
2493 { 0x10007515, 0xf0 },
2494 { 0x10007516, 0xdf },
2495 { 0x10007517, 0xfc },
2496 { 0x10007518, 0x93 },
2497 { 0x10007519, 0x07 },
2498 { 0x1000751a, 0x60 },
2499 { 0x1000751b, 0x06 },
2500 { 0x1000751c, 0x6f },
2501 { 0x1000751d, 0xf0 },
2502 { 0x1000751e, 0x5f },
2503 { 0x1000751f, 0xfc },
2504 { 0x10007520, 0x37 },
2505 { 0x10007521, 0xd7 },
2506 { 0x10007522, 0x00 },
2507 { 0x10007523, 0x00 },
2508 { 0x10007524, 0x83 },
2509 { 0x10007525, 0x27 },
2510 { 0x10007526, 0x07 },
2511 { 0x10007527, 0x53 },
2512 { 0x10007528, 0xb7 },
2513 { 0x10007529, 0x06 },
2514 { 0x1000752a, 0x02 },
2515 { 0x1000752b, 0x00 },
2516 { 0x1000752c, 0xb3 },
2517 { 0x1000752d, 0xf7 },
2518 { 0x1000752e, 0xd7 },
2519 { 0x1000752f, 0x00 },
2520 { 0x10007530, 0x63 },
2521 { 0x10007531, 0x88 },
2522 { 0x10007532, 0x07 },
2523 { 0x10007533, 0x00 },
2524 { 0x10007534, 0x13 },
2525 { 0x10007535, 0x06 },
2526 { 0x10007536, 0xa0 },
2527 { 0x10007537, 0x05 },
2528 { 0x10007538, 0x23 },
2529 { 0x10007539, 0xa8 },
2530 { 0x1000753a, 0xc1 },
2531 { 0x1000753b, 0x56 },
2532 { 0x1000753c, 0x23 },
2533 { 0x1000753d, 0x28 },
2534 { 0x1000753e, 0xd7 },
2535 { 0x1000753f, 0x52 },
2536 { 0x10007540, 0x67 },
2537 { 0x10007541, 0x80 },
2538 { 0x10007542, 0x00 },
2539 { 0x10007543, 0x00 },
2540 { 0x10007544, 0x37 },
2541 { 0x10007545, 0xd7 },
2542 { 0x10007546, 0x00 },
2543 { 0x10007547, 0x10 },
2544 { 0x10007548, 0x83 },
2545 { 0x10007549, 0x47 },
2546 { 0x1000754a, 0x07 },
2547 { 0x1000754b, 0xd9 },
2548 { 0x1000754c, 0x93 },
2549 { 0x1000754d, 0x06 },
2550 { 0x1000754e, 0x20 },
2551 { 0x1000754f, 0x00 },
2552 { 0x10007550, 0x93 },
2553 { 0x10007551, 0xf7 },
2554 { 0x10007552, 0xf7 },
2555 { 0x10007553, 0x0f },
2556 { 0x10007554, 0x63 },
2557 { 0x10007555, 0x9c },
2558 { 0x10007556, 0xd7 },
2559 { 0x10007557, 0x02 },
2560 { 0x10007558, 0xb7 },
2561 { 0x10007559, 0xc6 },
2562 { 0x1000755a, 0x00 },
2563 { 0x1000755b, 0x00 },
2564 { 0x1000755c, 0x83 },
2565 { 0x1000755d, 0xc7 },
2566 { 0x1000755e, 0x26 },
2567 { 0x1000755f, 0x04 },
2568 { 0x10007560, 0x93 },
2569 { 0x10007561, 0xf7 },
2570 { 0x10007562, 0xf7 },
2571 { 0x10007563, 0x07 },
2572 { 0x10007564, 0x23 },
2573 { 0x10007565, 0x81 },
2574 { 0x10007566, 0xf6 },
2575 { 0x10007567, 0x04 },
2576 { 0x10007568, 0xb7 },
2577 { 0x10007569, 0xd6 },
2578 { 0x1000756a, 0x00 },
2579 { 0x1000756b, 0x00 },
2580 { 0x1000756c, 0x83 },
2581 { 0x1000756d, 0xc7 },
2582 { 0x1000756e, 0xa6 },
2583 { 0x1000756f, 0xe1 },
2584 { 0x10007570, 0x93 },
2585 { 0x10007571, 0xf7 },
2586 { 0x10007572, 0xf7 },
2587 { 0x10007573, 0x07 },
2588 { 0x10007574, 0x23 },
2589 { 0x10007575, 0x8d },
2590 { 0x10007576, 0xf6 },
2591 { 0x10007577, 0xe0 },
2592 { 0x10007578, 0x23 },
2593 { 0x10007579, 0x08 },
2594 { 0x1000757a, 0x07 },
2595 { 0x1000757b, 0xd8 },
2596 { 0x1000757c, 0x83 },
2597 { 0x1000757d, 0x47 },
2598 { 0x1000757e, 0x47 },
2599 { 0x1000757f, 0xd9 },
2600 { 0x10007580, 0x93 },
2601 { 0x10007581, 0x87 },
2602 { 0x10007582, 0x17 },
2603 { 0x10007583, 0x00 },
2604 { 0x10007584, 0x93 },
2605 { 0x10007585, 0xf7 },
2606 { 0x10007586, 0xf7 },
2607 { 0x10007587, 0x0f },
2608 { 0x10007588, 0x23 },
2609 { 0x10007589, 0x0a },
2610 { 0x1000758a, 0xf7 },
2611 { 0x1000758b, 0xd8 },
2612 { 0x1000758c, 0x67 },
2613 { 0x1000758d, 0x80 },
2614 { 0x1000758e, 0x00 },
2615 { 0x1000758f, 0x00 },
2616 { 0x10007590, 0xb7 },
2617 { 0x10007591, 0xd7 },
2618 { 0x10007592, 0x00 },
2619 { 0x10007593, 0x00 },
2620 { 0x10007594, 0x83 },
2621 { 0x10007595, 0xc7 },
2622 { 0x10007596, 0x07 },
2623 { 0x10007597, 0x47 },
2624 { 0x10007598, 0x93 },
2625 { 0x10007599, 0xf7 },
2626 { 0x1000759a, 0x07 },
2627 { 0x1000759b, 0x01 },
2628 { 0x1000759c, 0x63 },
2629 { 0x1000759d, 0x8a },
2630 { 0x1000759e, 0x07 },
2631 { 0x1000759f, 0x06 },
2632 { 0x100075a0, 0x63 },
2633 { 0x100075a1, 0x02 },
2634 { 0x100075a2, 0x05 },
2635 { 0x100075a3, 0x06 },
2636 { 0x100075a4, 0x37 },
2637 { 0x100075a5, 0xc7 },
2638 { 0x100075a6, 0x00 },
2639 { 0x100075a7, 0x00 },
2640 { 0x100075a8, 0x83 },
2641 { 0x100075a9, 0x27 },
2642 { 0x100075aa, 0xc7 },
2643 { 0x100075ab, 0x5f },
2644 { 0x100075ac, 0x23 },
2645 { 0x100075ad, 0xae },
2646 { 0x100075ae, 0xf1 },
2647 { 0x100075af, 0x40 },
2648 { 0x100075b0, 0xb7 },
2649 { 0x100075b1, 0x06 },
2650 { 0x100075b2, 0x00 },
2651 { 0x100075b3, 0x10 },
2652 { 0x100075b4, 0xb3 },
2653 { 0x100075b5, 0xf7 },
2654 { 0x100075b6, 0xd7 },
2655 { 0x100075b7, 0x00 },
2656 { 0x100075b8, 0x63 },
2657 { 0x100075b9, 0x8c },
2658 { 0x100075ba, 0x07 },
2659 { 0x100075bb, 0x04 },
2660 { 0x100075bc, 0x83 },
2661 { 0x100075bd, 0x47 },
2662 { 0x100075be, 0x07 },
2663 { 0x100075bf, 0x56 },
2664 { 0x100075c0, 0x93 },
2665 { 0x100075c1, 0xf7 },
2666 { 0x100075c2, 0x87 },
2667 { 0x100075c3, 0x01 },
2668 { 0x100075c4, 0x63 },
2669 { 0x100075c5, 0x86 },
2670 { 0x100075c6, 0x07 },
2671 { 0x100075c7, 0x04 },
2672 { 0x100075c8, 0x83 },
2673 { 0x100075c9, 0x47 },
2674 { 0x100075ca, 0x17 },
2675 { 0x100075cb, 0x08 },
2676 { 0x100075cc, 0x93 },
2677 { 0x100075cd, 0xf7 },
2678 { 0x100075ce, 0x47 },
2679 { 0x100075cf, 0x00 },
2680 { 0x100075d0, 0x63 },
2681 { 0x100075d1, 0x80 },
2682 { 0x100075d2, 0x07 },
2683 { 0x100075d3, 0x04 },
2684 { 0x100075d4, 0xb7 },
2685 { 0x100075d5, 0xc7 },
2686 { 0x100075d6, 0xc2 },
2687 { 0x100075d7, 0x3f },
2688 { 0x100075d8, 0x93 },
2689 { 0x100075d9, 0x87 },
2690 { 0x100075da, 0x07 },
2691 { 0x100075db, 0xfc },
2692 { 0x100075dc, 0x83 },
2693 { 0x100075dd, 0xa7 },
2694 { 0x100075de, 0x47 },
2695 { 0x100075df, 0x00 },
2696 { 0x100075e0, 0x93 },
2697 { 0x100075e1, 0xd7 },
2698 { 0x100075e2, 0x17 },
2699 { 0x100075e3, 0x00 },
2700 { 0x100075e4, 0x93 },
2701 { 0x100075e5, 0xf7 },
2702 { 0x100075e6, 0x17 },
2703 { 0x100075e7, 0x00 },
2704 { 0x100075e8, 0x63 },
2705 { 0x100075e9, 0x84 },
2706 { 0x100075ea, 0x07 },
2707 { 0x100075eb, 0x02 },
2708 { 0x100075ec, 0x23 },
2709 { 0x100075ed, 0x8a },
2710 { 0x100075ee, 0xf1 },
2711 { 0x100075ef, 0x40 },
2712 { 0x100075f0, 0xb7 },
2713 { 0x100075f1, 0x07 },
2714 { 0x100075f2, 0x00 },
2715 { 0x100075f3, 0xc0 },
2716 { 0x100075f4, 0x37 },
2717 { 0x100075f5, 0xf7 },
2718 { 0x100075f6, 0x00 },
2719 { 0x100075f7, 0x00 },
2720 { 0x100075f8, 0x93 },
2721 { 0x100075f9, 0x87 },
2722 { 0x100075fa, 0xf7 },
2723 { 0x100075fb, 0xff },
2724 { 0x100075fc, 0x23 },
2725 { 0x100075fd, 0x2c },
2726 { 0x100075fe, 0xf7 },
2727 { 0x100075ff, 0x06 },
2728 { 0x10007600, 0x67 },
2729 { 0x10007601, 0x80 },
2730 { 0x10007602, 0x00 },
2731 { 0x10007603, 0x00 },
2732 { 0x10007604, 0x23 },
2733 { 0x10007605, 0x8a },
2734 { 0x10007606, 0x01 },
2735 { 0x10007607, 0x40 },
2736 { 0x10007608, 0xb7 },
2737 { 0x10007609, 0xf7 },
2738 { 0x1000760a, 0x00 },
2739 { 0x1000760b, 0x00 },
2740 { 0x1000760c, 0x23 },
2741 { 0x1000760d, 0xac },
2742 { 0x1000760e, 0x07 },
2743 { 0x1000760f, 0x06 },
2744 { 0x10007610, 0x67 },
2745 { 0x10007611, 0x80 },
2746 { 0x10007612, 0x00 },
2747 { 0x10007613, 0x00 },
2748 { 0x10007614, 0x13 },
2749 { 0x10007615, 0x01 },
2750 { 0x10007616, 0x01 },
2751 { 0x10007617, 0xff },
2752 { 0x10007618, 0x23 },
2753 { 0x10007619, 0x26 },
2754 { 0x1000761a, 0x11 },
2755 { 0x1000761b, 0x00 },
2756 { 0x1000761c, 0x23 },
2757 { 0x1000761d, 0x24 },
2758 { 0x1000761e, 0x81 },
2759 { 0x1000761f, 0x00 },
2760 { 0x10007620, 0x37 },
2761 { 0x10007621, 0xc7 },
2762 { 0x10007622, 0x00 },
2763 { 0x10007623, 0x00 },
2764 { 0x10007624, 0x83 },
2765 { 0x10007625, 0x47 },
2766 { 0x10007626, 0x07 },
2767 { 0x10007627, 0x56 },
2768 { 0x10007628, 0x93 },
2769 { 0x10007629, 0xf7 },
2770 { 0x1000762a, 0x17 },
2771 { 0x1000762b, 0x00 },
2772 { 0x1000762c, 0x63 },
2773 { 0x1000762d, 0x98 },
2774 { 0x1000762e, 0x07 },
2775 { 0x1000762f, 0x00 },
2776 { 0x10007630, 0x83 },
2777 { 0x10007631, 0x47 },
2778 { 0x10007632, 0x07 },
2779 { 0x10007633, 0x56 },
2780 { 0x10007634, 0x93 },
2781 { 0x10007635, 0xf7 },
2782 { 0x10007636, 0x27 },
2783 { 0x10007637, 0x00 },
2784 { 0x10007638, 0x63 },
2785 { 0x10007639, 0x82 },
2786 { 0x1000763a, 0x07 },
2787 { 0x1000763b, 0x08 },
2788 { 0x1000763c, 0x37 },
2789 { 0x1000763d, 0xd4 },
2790 { 0x1000763e, 0x00 },
2791 { 0x1000763f, 0x00 },
2792 { 0x10007640, 0x83 },
2793 { 0x10007641, 0x47 },
2794 { 0x10007642, 0x14 },
2795 { 0x10007643, 0x47 },
2796 { 0x10007644, 0x93 },
2797 { 0x10007645, 0xf7 },
2798 { 0x10007646, 0x27 },
2799 { 0x10007647, 0x00 },
2800 { 0x10007648, 0x63 },
2801 { 0x10007649, 0x8a },
2802 { 0x1000764a, 0x07 },
2803 { 0x1000764b, 0x06 },
2804 { 0x1000764c, 0x93 },
2805 { 0x1000764d, 0x05 },
2806 { 0x1000764e, 0x10 },
2807 { 0x1000764f, 0x00 },
2808 { 0x10007650, 0x13 },
2809 { 0x10007651, 0x05 },
2810 { 0x10007652, 0x20 },
2811 { 0x10007653, 0x10 },
2812 { 0x10007654, 0xef },
2813 { 0x10007655, 0xa0 },
2814 { 0x10007656, 0x8f },
2815 { 0x10007657, 0x9a },
2816 { 0x10007658, 0x37 },
2817 { 0x10007659, 0x05 },
2818 { 0x1000765a, 0x01 },
2819 { 0x1000765b, 0x00 },
2820 { 0x1000765c, 0x93 },
2821 { 0x1000765d, 0x05 },
2822 { 0x1000765e, 0x00 },
2823 { 0x1000765f, 0x01 },
2824 { 0x10007660, 0x13 },
2825 { 0x10007661, 0x05 },
2826 { 0x10007662, 0xb5 },
2827 { 0x10007663, 0xa0 },
2828 { 0x10007664, 0xef },
2829 { 0x10007665, 0xa0 },
2830 { 0x10007666, 0x8f },
2831 { 0x10007667, 0x99 },
2832 { 0x10007668, 0x83 },
2833 { 0x10007669, 0x47 },
2834 { 0x1000766a, 0x24 },
2835 { 0x1000766b, 0xe0 },
2836 { 0x1000766c, 0x13 },
2837 { 0x1000766d, 0x05 },
2838 { 0x1000766e, 0x80 },
2839 { 0x1000766f, 0x3e },
2840 { 0x10007670, 0x93 },
2841 { 0x10007671, 0x05 },
2842 { 0x10007672, 0x00 },
2843 { 0x10007673, 0x00 },
2844 { 0x10007674, 0x93 },
2845 { 0x10007675, 0xe7 },
2846 { 0x10007676, 0x07 },
2847 { 0x10007677, 0xf8 },
2848 { 0x10007678, 0x93 },
2849 { 0x10007679, 0xf7 },
2850 { 0x1000767a, 0xf7 },
2851 { 0x1000767b, 0x0f },
2852 { 0x1000767c, 0x23 },
2853 { 0x1000767d, 0x01 },
2854 { 0x1000767e, 0xf4 },
2855 { 0x1000767f, 0xe0 },
2856 { 0x10007680, 0x83 },
2857 { 0x10007681, 0x47 },
2858 { 0x10007682, 0x24 },
2859 { 0x10007683, 0xe0 },
2860 { 0x10007684, 0x93 },
2861 { 0x10007685, 0xf7 },
2862 { 0x10007686, 0xf7 },
2863 { 0x10007687, 0x0f },
2864 { 0x10007688, 0x93 },
2865 { 0x10007689, 0xe7 },
2866 { 0x1000768a, 0x07 },
2867 { 0x1000768b, 0x04 },
2868 { 0x1000768c, 0x23 },
2869 { 0x1000768d, 0x01 },
2870 { 0x1000768e, 0xf4 },
2871 { 0x1000768f, 0xe0 },
2872 { 0x10007690, 0xef },
2873 { 0x10007691, 0xe0 },
2874 { 0x10007692, 0x8f },
2875 { 0x10007693, 0xb9 },
2876 { 0x10007694, 0x83 },
2877 { 0x10007695, 0x47 },
2878 { 0x10007696, 0x34 },
2879 { 0x10007697, 0xe0 },
2880 { 0x10007698, 0x93 },
2881 { 0x10007699, 0xf7 },
2882 { 0x1000769a, 0x07 },
2883 { 0x1000769b, 0x02 },
2884 { 0x1000769c, 0xe3 },
2885 { 0x1000769d, 0x9c },
2886 { 0x1000769e, 0x07 },
2887 { 0x1000769f, 0xfe },
2888 { 0x100076a0, 0x37 },
2889 { 0x100076a1, 0x05 },
2890 { 0x100076a2, 0x01 },
2891 { 0x100076a3, 0x00 },
2892 { 0x100076a4, 0x93 },
2893 { 0x100076a5, 0x05 },
2894 { 0x100076a6, 0x00 },
2895 { 0x100076a7, 0x00 },
2896 { 0x100076a8, 0x13 },
2897 { 0x100076a9, 0x05 },
2898 { 0x100076aa, 0xb5 },
2899 { 0x100076ab, 0xa0 },
2900 { 0x100076ac, 0xef },
2901 { 0x100076ad, 0xa0 },
2902 { 0x100076ae, 0x0f },
2903 { 0x100076af, 0x95 },
2904 { 0x100076b0, 0x83 },
2905 { 0x100076b1, 0x47 },
2906 { 0x100076b2, 0x14 },
2907 { 0x100076b3, 0x47 },
2908 { 0x100076b4, 0x93 },
2909 { 0x100076b5, 0xf7 },
2910 { 0x100076b6, 0xd7 },
2911 { 0x100076b7, 0x0f },
2912 { 0x100076b8, 0xa3 },
2913 { 0x100076b9, 0x08 },
2914 { 0x100076ba, 0xf4 },
2915 { 0x100076bb, 0x46 },
2916 { 0x100076bc, 0x03 },
2917 { 0x100076bd, 0xa7 },
2918 { 0x100076be, 0x01 },
2919 { 0x100076bf, 0x57 },
2920 { 0x100076c0, 0x93 },
2921 { 0x100076c1, 0x07 },
2922 { 0x100076c2, 0xa0 },
2923 { 0x100076c3, 0x05 },
2924 { 0x100076c4, 0x63 },
2925 { 0x100076c5, 0x14 },
2926 { 0x100076c6, 0xf7 },
2927 { 0x100076c7, 0x04 },
2928 { 0x100076c8, 0x37 },
2929 { 0x100076c9, 0x07 },
2930 { 0x100076ca, 0x00 },
2931 { 0x100076cb, 0x11 },
2932 { 0x100076cc, 0x83 },
2933 { 0x100076cd, 0x47 },
2934 { 0x100076ce, 0x07 },
2935 { 0x100076cf, 0x01 },
2936 { 0x100076d0, 0x13 },
2937 { 0x100076d1, 0x06 },
2938 { 0x100076d2, 0x30 },
2939 { 0x100076d3, 0x00 },
2940 { 0x100076d4, 0x93 },
2941 { 0x100076d5, 0xf7 },
2942 { 0x100076d6, 0xf7 },
2943 { 0x100076d7, 0x0f },
2944 { 0x100076d8, 0x63 },
2945 { 0x100076d9, 0x9a },
2946 { 0x100076da, 0xc7 },
2947 { 0x100076db, 0x02 },
2948 { 0x100076dc, 0x03 },
2949 { 0x100076dd, 0x47 },
2950 { 0x100076de, 0x87 },
2951 { 0x100076df, 0x01 },
2952 { 0x100076e0, 0x13 },
2953 { 0x100076e1, 0x77 },
2954 { 0x100076e2, 0xf7 },
2955 { 0x100076e3, 0x0f },
2956 { 0x100076e4, 0x63 },
2957 { 0x100076e5, 0x14 },
2958 { 0x100076e6, 0xf7 },
2959 { 0x100076e7, 0x02 },
2960 { 0x100076e8, 0x37 },
2961 { 0x100076e9, 0xd7 },
2962 { 0x100076ea, 0x00 },
2963 { 0x100076eb, 0x00 },
2964 { 0x100076ec, 0x83 },
2965 { 0x100076ed, 0x47 },
2966 { 0x100076ee, 0x37 },
2967 { 0x100076ef, 0x54 },
2968 { 0x100076f0, 0x93 },
2969 { 0x100076f1, 0xf7 },
2970 { 0x100076f2, 0xf7 },
2971 { 0x100076f3, 0x0f },
2972 { 0x100076f4, 0x93 },
2973 { 0x100076f5, 0xe7 },
2974 { 0x100076f6, 0x07 },
2975 { 0x100076f7, 0x02 },
2976 { 0x100076f8, 0xa3 },
2977 { 0x100076f9, 0x01 },
2978 { 0x100076fa, 0xf7 },
2979 { 0x100076fb, 0x54 },
2980 { 0x100076fc, 0x83 },
2981 { 0x100076fd, 0x47 },
2982 { 0x100076fe, 0x37 },
2983 { 0x100076ff, 0x54 },
2984 { 0x10007700, 0x93 },
2985 { 0x10007701, 0xf7 },
2986 { 0x10007702, 0xf7 },
2987 { 0x10007703, 0x0d },
2988 { 0x10007704, 0xa3 },
2989 { 0x10007705, 0x01 },
2990 { 0x10007706, 0xf7 },
2991 { 0x10007707, 0x54 },
2992 { 0x10007708, 0x23 },
2993 { 0x10007709, 0xa8 },
2994 { 0x1000770a, 0x01 },
2995 { 0x1000770b, 0x56 },
2996 { 0x1000770c, 0xb7 },
2997 { 0x1000770d, 0xd7 },
2998 { 0x1000770e, 0x00 },
2999 { 0x1000770f, 0x10 },
3000 { 0x10007710, 0x03 },
3001 { 0x10007711, 0xc7 },
3002 { 0x10007712, 0x07 },
3003 { 0x10007713, 0xd9 },
3004 { 0x10007714, 0x93 },
3005 { 0x10007715, 0x06 },
3006 { 0x10007716, 0x10 },
3007 { 0x10007717, 0x00 },
3008 { 0x10007718, 0x13 },
3009 { 0x10007719, 0x77 },
3010 { 0x1000771a, 0xf7 },
3011 { 0x1000771b, 0x0f },
3012 { 0x1000771c, 0x63 },
3013 { 0x1000771d, 0x1a },
3014 { 0x1000771e, 0xd7 },
3015 { 0x1000771f, 0x04 },
3016 { 0x10007720, 0x03 },
3017 { 0x10007721, 0xc7 },
3018 { 0x10007722, 0x27 },
3019 { 0x10007723, 0xd9 },
3020 { 0x10007724, 0x13 },
3021 { 0x10007725, 0x07 },
3022 { 0x10007726, 0x17 },
3023 { 0x10007727, 0x00 },
3024 { 0x10007728, 0x13 },
3025 { 0x10007729, 0x77 },
3026 { 0x1000772a, 0xf7 },
3027 { 0x1000772b, 0x0f },
3028 { 0x1000772c, 0x23 },
3029 { 0x1000772d, 0x89 },
3030 { 0x1000772e, 0xe7 },
3031 { 0x1000772f, 0xd8 },
3032 { 0x10007730, 0x83 },
3033 { 0x10007731, 0xc6 },
3034 { 0x10007732, 0x27 },
3035 { 0x10007733, 0xd9 },
3036 { 0x10007734, 0x03 },
3037 { 0x10007735, 0xc7 },
3038 { 0x10007736, 0x17 },
3039 { 0x10007737, 0xd9 },
3040 { 0x10007738, 0x93 },
3041 { 0x10007739, 0xf6 },
3042 { 0x1000773a, 0xf6 },
3043 { 0x1000773b, 0x0f },
3044 { 0x1000773c, 0x13 },
3045 { 0x1000773d, 0x77 },
3046 { 0x1000773e, 0xf7 },
3047 { 0x1000773f, 0x0f },
3048 { 0x10007740, 0x63 },
3049 { 0x10007741, 0xe8 },
3050 { 0x10007742, 0xe6 },
3051 { 0x10007743, 0x02 },
3052 { 0x10007744, 0xb7 },
3053 { 0x10007745, 0xd6 },
3054 { 0x10007746, 0x00 },
3055 { 0x10007747, 0x00 },
3056 { 0x10007748, 0x03 },
3057 { 0x10007749, 0xc7 },
3058 { 0x1000774a, 0xa6 },
3059 { 0x1000774b, 0xe1 },
3060 { 0x1000774c, 0x13 },
3061 { 0x1000774d, 0x67 },
3062 { 0x1000774e, 0x07 },
3063 { 0x1000774f, 0xf8 },
3064 { 0x10007750, 0x13 },
3065 { 0x10007751, 0x77 },
3066 { 0x10007752, 0xf7 },
3067 { 0x10007753, 0x0f },
3068 { 0x10007754, 0x23 },
3069 { 0x10007755, 0x8d },
3070 { 0x10007756, 0xe6 },
3071 { 0x10007757, 0xe0 },
3072 { 0x10007758, 0x03 },
3073 { 0x10007759, 0xc7 },
3074 { 0x1000775a, 0x37 },
3075 { 0x1000775b, 0xd9 },
3076 { 0x1000775c, 0x13 },
3077 { 0x1000775d, 0x07 },
3078 { 0x1000775e, 0x17 },
3079 { 0x1000775f, 0x00 },
3080 { 0x10007760, 0x13 },
3081 { 0x10007761, 0x77 },
3082 { 0x10007762, 0xf7 },
3083 { 0x10007763, 0x0f },
3084 { 0x10007764, 0xa3 },
3085 { 0x10007765, 0x89 },
3086 { 0x10007766, 0xe7 },
3087 { 0x10007767, 0xd8 },
3088 { 0x10007768, 0x13 },
3089 { 0x10007769, 0x07 },
3090 { 0x1000776a, 0x20 },
3091 { 0x1000776b, 0x00 },
3092 { 0x1000776c, 0x23 },
3093 { 0x1000776d, 0x88 },
3094 { 0x1000776e, 0xe7 },
3095 { 0x1000776f, 0xd8 },
3096 { 0x10007770, 0x83 },
3097 { 0x10007771, 0x20 },
3098 { 0x10007772, 0xc1 },
3099 { 0x10007773, 0x00 },
3100 { 0x10007774, 0x03 },
3101 { 0x10007775, 0x24 },
3102 { 0x10007776, 0x81 },
3103 { 0x10007777, 0x00 },
3104 { 0x10007778, 0x13 },
3105 { 0x10007779, 0x01 },
3106 { 0x1000777a, 0x01 },
3107 { 0x1000777b, 0x01 },
3108 { 0x1000777c, 0x67 },
3109 { 0x1000777d, 0x80 },
3110 { 0x1000777e, 0x00 },
3111 { 0x1000777f, 0x00 },
3112 { 0x10007780, 0x03 },
3113 { 0x10007781, 0xc7 },
3114 { 0x10007782, 0xa1 },
3115 { 0x10007783, 0x40 },
3116 { 0x10007784, 0x93 },
3117 { 0x10007785, 0x06 },
3118 { 0x10007786, 0x10 },
3119 { 0x10007787, 0x00 },
3120 { 0x10007788, 0x63 },
3121 { 0x10007789, 0x16 },
3122 { 0x1000778a, 0xd7 },
3123 { 0x1000778b, 0x00 },
3124 { 0x1000778c, 0xb7 },
3125 { 0x1000778d, 0xd6 },
3126 { 0x1000778e, 0x00 },
3127 { 0x1000778f, 0x10 },
3128 { 0x10007790, 0xa3 },
3129 { 0x10007791, 0x8a },
3130 { 0x10007792, 0xe6 },
3131 { 0x10007793, 0xd8 },
3132 { 0x10007794, 0x83 },
3133 { 0x10007795, 0xc7 },
3134 { 0x10007796, 0xa1 },
3135 { 0x10007797, 0x40 },
3136 { 0x10007798, 0x63 },
3137 { 0x10007799, 0x9c },
3138 { 0x1000779a, 0x07 },
3139 { 0x1000779b, 0x06 },
3140 { 0x1000779c, 0x13 },
3141 { 0x1000779d, 0x01 },
3142 { 0x1000779e, 0x01 },
3143 { 0x1000779f, 0xff },
3144 { 0x100077a0, 0x23 },
3145 { 0x100077a1, 0x22 },
3146 { 0x100077a2, 0x91 },
3147 { 0x100077a3, 0x00 },
3148 { 0x100077a4, 0x23 },
3149 { 0x100077a5, 0x26 },
3150 { 0x100077a6, 0x11 },
3151 { 0x100077a7, 0x00 },
3152 { 0x100077a8, 0x23 },
3153 { 0x100077a9, 0x24 },
3154 { 0x100077aa, 0x81 },
3155 { 0x100077ab, 0x00 },
3156 { 0x100077ac, 0xb7 },
3157 { 0x100077ad, 0xc4 },
3158 { 0x100077ae, 0x00 },
3159 { 0x100077af, 0x00 },
3160 { 0x100077b0, 0x83 },
3161 { 0x100077b1, 0xc7 },
3162 { 0x100077b2, 0x04 },
3163 { 0x100077b3, 0x56 },
3164 { 0x100077b4, 0x13 },
3165 { 0x100077b5, 0x07 },
3166 { 0x100077b6, 0x80 },
3167 { 0x100077b7, 0x01 },
3168 { 0x100077b8, 0x93 },
3169 { 0x100077b9, 0xf7 },
3170 { 0x100077ba, 0xf7 },
3171 { 0x100077bb, 0x0f },
3172 { 0x100077bc, 0x63 },
3173 { 0x100077bd, 0x70 },
3174 { 0x100077be, 0xf7 },
3175 { 0x100077bf, 0x04 },
3176 { 0x100077c0, 0x37 },
3177 { 0x100077c1, 0xd4 },
3178 { 0x100077c2, 0x00 },
3179 { 0x100077c3, 0x10 },
3180 { 0x100077c4, 0x83 },
3181 { 0x100077c5, 0x47 },
3182 { 0x100077c6, 0x54 },
3183 { 0x100077c7, 0xd9 },
3184 { 0x100077c8, 0x93 },
3185 { 0x100077c9, 0xf7 },
3186 { 0x100077ca, 0xf7 },
3187 { 0x100077cb, 0x0f },
3188 { 0x100077cc, 0x63 },
3189 { 0x100077cd, 0x88 },
3190 { 0x100077ce, 0x07 },
3191 { 0x100077cf, 0x02 },
3192 { 0x100077d0, 0x93 },
3193 { 0x100077d1, 0x07 },
3194 { 0x100077d2, 0x10 },
3195 { 0x100077d3, 0x00 },
3196 { 0x100077d4, 0x23 },
3197 { 0x100077d5, 0x82 },
3198 { 0x100077d6, 0xf4 },
3199 { 0x100077d7, 0x58 },
3200 { 0x100077d8, 0x03 },
3201 { 0x100077d9, 0x45 },
3202 { 0x100077da, 0x64 },
3203 { 0x100077db, 0xd9 },
3204 { 0x100077dc, 0xb7 },
3205 { 0x100077dd, 0x15 },
3206 { 0x100077de, 0x00 },
3207 { 0x100077df, 0x00 },
3208 { 0x100077e0, 0x93 },
3209 { 0x100077e1, 0x85 },
3210 { 0x100077e2, 0x85 },
3211 { 0x100077e3, 0x38 },
3212 { 0x100077e4, 0x13 },
3213 { 0x100077e5, 0x75 },
3214 { 0x100077e6, 0xf5 },
3215 { 0x100077e7, 0x0f },
3216 { 0x100077e8, 0xef },
3217 { 0x100077e9, 0xe0 },
3218 { 0x100077ea, 0x9f },
3219 { 0x100077eb, 0xd0 },
3220 { 0x100077ec, 0x93 },
3221 { 0x100077ed, 0x55 },
3222 { 0x100077ee, 0xf5 },
3223 { 0x100077ef, 0x41 },
3224 { 0x100077f0, 0xef },
3225 { 0x100077f1, 0xe0 },
3226 { 0x100077f2, 0x8f },
3227 { 0x100077f3, 0xa3 },
3228 { 0x100077f4, 0x23 },
3229 { 0x100077f5, 0x82 },
3230 { 0x100077f6, 0x04 },
3231 { 0x100077f7, 0x58 },
3232 { 0x100077f8, 0xa3 },
3233 { 0x100077f9, 0x0a },
3234 { 0x100077fa, 0x04 },
3235 { 0x100077fb, 0xd8 },
3236 { 0x100077fc, 0x83 },
3237 { 0x100077fd, 0x20 },
3238 { 0x100077fe, 0xc1 },
3239 { 0x100077ff, 0x00 },
3240 { 0x10007800, 0x03 },
3241 { 0x10007801, 0x24 },
3242 { 0x10007802, 0x81 },
3243 { 0x10007803, 0x00 },
3244 { 0x10007804, 0x83 },
3245 { 0x10007805, 0x24 },
3246 { 0x10007806, 0x41 },
3247 { 0x10007807, 0x00 },
3248 { 0x10007808, 0x13 },
3249 { 0x10007809, 0x01 },
3250 { 0x1000780a, 0x01 },
3251 { 0x1000780b, 0x01 },
3252 { 0x1000780c, 0x67 },
3253 { 0x1000780d, 0x80 },
3254 { 0x1000780e, 0x00 },
3255 { 0x1000780f, 0x00 },
3256 { 0x10007810, 0x67 },
3257 { 0x10007811, 0x80 },
3258 { 0x10007812, 0x00 },
3259 { 0x10007813, 0x00 },
3260 { 0x10007814, 0x13 },
3261 { 0x10007815, 0x01 },
3262 { 0x10007816, 0x01 },
3263 { 0x10007817, 0xff },
3264 { 0x10007818, 0x23 },
3265 { 0x10007819, 0x26 },
3266 { 0x1000781a, 0x11 },
3267 { 0x1000781b, 0x00 },
3268 { 0x1000781c, 0xef },
3269 { 0x1000781d, 0xd0 },
3270 { 0x1000781e, 0x8f },
3271 { 0x1000781f, 0x86 },
3272 { 0x10007820, 0x83 },
3273 { 0x10007821, 0xc7 },
3274 { 0x10007822, 0x11 },
3275 { 0x10007823, 0x42 },
3276 { 0x10007824, 0x63 },
3277 { 0x10007825, 0x86 },
3278 { 0x10007826, 0x07 },
3279 { 0x10007827, 0x00 },
3280 { 0x10007828, 0x03 },
3281 { 0x10007829, 0xc7 },
3282 { 0x1000782a, 0x01 },
3283 { 0x1000782b, 0x42 },
3284 { 0x1000782c, 0x63 },
3285 { 0x1000782d, 0x10 },
3286 { 0x1000782e, 0x07 },
3287 { 0x1000782f, 0x02 },
3288 { 0x10007830, 0x83 },
3289 { 0x10007831, 0xc6 },
3290 { 0x10007832, 0x21 },
3291 { 0x10007833, 0x41 },
3292 { 0x10007834, 0x13 },
3293 { 0x10007835, 0x07 },
3294 { 0x10007836, 0xf0 },
3295 { 0x10007837, 0x01 },
3296 { 0x10007838, 0x13 },
3297 { 0x10007839, 0x05 },
3298 { 0x1000783a, 0xf0 },
3299 { 0x1000783b, 0x01 },
3300 { 0x1000783c, 0x63 },
3301 { 0x1000783d, 0x98 },
3302 { 0x1000783e, 0xe6 },
3303 { 0x1000783f, 0x02 },
3304 { 0x10007840, 0x63 },
3305 { 0x10007841, 0x8a },
3306 { 0x10007842, 0x07 },
3307 { 0x10007843, 0x02 },
3308 { 0x10007844, 0x83 },
3309 { 0x10007845, 0xc7 },
3310 { 0x10007846, 0x01 },
3311 { 0x10007847, 0x42 },
3312 { 0x10007848, 0x63 },
3313 { 0x10007849, 0x86 },
3314 { 0x1000784a, 0x07 },
3315 { 0x1000784b, 0x02 },
3316 { 0x1000784c, 0x83 },
3317 { 0x1000784d, 0xc7 },
3318 { 0x1000784e, 0x31 },
3319 { 0x1000784f, 0x42 },
3320 { 0x10007850, 0x63 },
3321 { 0x10007851, 0x86 },
3322 { 0x10007852, 0x07 },
3323 { 0x10007853, 0x00 },
3324 { 0x10007854, 0x83 },
3325 { 0x10007855, 0xc7 },
3326 { 0x10007856, 0x21 },
3327 { 0x10007857, 0x42 },
3328 { 0x10007858, 0x63 },
3329 { 0x10007859, 0x9e },
3330 { 0x1000785a, 0x07 },
3331 { 0x1000785b, 0x00 },
3332 { 0x1000785c, 0x03 },
3333 { 0x1000785d, 0xc7 },
3334 { 0x1000785e, 0x21 },
3335 { 0x1000785f, 0x41 },
3336 { 0x10007860, 0x93 },
3337 { 0x10007861, 0x07 },
3338 { 0x10007862, 0xb0 },
3339 { 0x10007863, 0x01 },
3340 { 0x10007864, 0x63 },
3341 { 0x10007865, 0x08 },
3342 { 0x10007866, 0xf7 },
3343 { 0x10007867, 0x00 },
3344 { 0x10007868, 0x13 },
3345 { 0x10007869, 0x05 },
3346 { 0x1000786a, 0xb0 },
3347 { 0x1000786b, 0x01 },
3348 { 0x1000786c, 0xef },
3349 { 0x1000786d, 0xd0 },
3350 { 0x1000786e, 0x0f },
3351 { 0x1000786f, 0xcf },
3352 { 0x10007870, 0xef },
3353 { 0x10007871, 0xd0 },
3354 { 0x10007872, 0x8f },
3355 { 0x10007873, 0xa4 },
3356 { 0x10007874, 0x93 },
3357 { 0x10007875, 0x06 },
3358 { 0x10007876, 0x10 },
3359 { 0x10007877, 0x00 },
3360 { 0x10007878, 0xa3 },
3361 { 0x10007879, 0x89 },
3362 { 0x1000787a, 0xd1 },
3363 { 0x1000787b, 0x40 },
3364 { 0x1000787c, 0x37 },
3365 { 0x1000787d, 0xd7 },
3366 { 0x1000787e, 0x00 },
3367 { 0x1000787f, 0x10 },
3368 { 0x10007880, 0x83 },
3369 { 0x10007881, 0x47 },
3370 { 0x10007882, 0x07 },
3371 { 0x10007883, 0xd9 },
3372 { 0x10007884, 0x93 },
3373 { 0x10007885, 0xf7 },
3374 { 0x10007886, 0xf7 },
3375 { 0x10007887, 0x0f },
3376 { 0x10007888, 0x63 },
3377 { 0x10007889, 0x90 },
3378 { 0x1000788a, 0x07 },
3379 { 0x1000788b, 0x02 },
3380 { 0x1000788c, 0x37 },
3381 { 0x1000788d, 0xc6 },
3382 { 0x1000788e, 0x00 },
3383 { 0x1000788f, 0x00 },
3384 { 0x10007890, 0x83 },
3385 { 0x10007891, 0x47 },
3386 { 0x10007892, 0x26 },
3387 { 0x10007893, 0x04 },
3388 { 0x10007894, 0x93 },
3389 { 0x10007895, 0xe7 },
3390 { 0x10007896, 0x07 },
3391 { 0x10007897, 0xf8 },
3392 { 0x10007898, 0x93 },
3393 { 0x10007899, 0xf7 },
3394 { 0x1000789a, 0xf7 },
3395 { 0x1000789b, 0x0f },
3396 { 0x1000789c, 0x23 },
3397 { 0x1000789d, 0x01 },
3398 { 0x1000789e, 0xf6 },
3399 { 0x1000789f, 0x04 },
3400 { 0x100078a0, 0x23 },
3401 { 0x100078a1, 0x08 },
3402 { 0x100078a2, 0xd7 },
3403 { 0x100078a3, 0xd8 },
3404 { 0x100078a4, 0x23 },
3405 { 0x100078a5, 0x09 },
3406 { 0x100078a6, 0x07 },
3407 { 0x100078a7, 0xd8 },
3408 { 0x100078a8, 0x83 },
3409 { 0x100078a9, 0x20 },
3410 { 0x100078aa, 0xc1 },
3411 { 0x100078ab, 0x00 },
3412 { 0x100078ac, 0x13 },
3413 { 0x100078ad, 0x01 },
3414 { 0x100078ae, 0x01 },
3415 { 0x100078af, 0x01 },
3416 { 0x100078b0, 0x67 },
3417 { 0x100078b1, 0x80 },
3418 { 0x100078b2, 0x00 },
3419 { 0x100078b3, 0x00 },
3420 { 0x3fc2bfc7, 0x00 },
3421 { 0x3fc2bfc6, 0x00 },
3422 { 0x3fc2bfc5, 0x00 },
3423 { 0x3fc2bfc4, 0x01 },
3424 { 0x0000d486, 0x43 },
3425 { 0x1000db00, 0x02 },
3426 { 0x1000db01, 0x00 },
3427 { 0x1000db02, 0x11 },
3428 { 0x1000db03, 0x00 },
3429 { 0x1000db04, 0x00 },
3430 { 0x1000db05, 0x82 },
3431 { 0x1000db06, 0x04 },
3432 { 0x1000db07, 0xf1 },
3433 { 0x1000db08, 0x00 },
3434 { 0x1000db09, 0x00 },
3435 { 0x1000db0a, 0x40 },
3436 { 0x0000d540, 0x01 },
3437 };
3438
3439 static const struct reg_default rt1320_reg_defaults[] = {
3440 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_01), 0x01 },
3441 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_02), 0x01 },
3442 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE27, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x03 },
3443 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x03 },
3444 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PPU21, RT1320_SDCA_CTL_POSTURE_NUMBER, 0), 0x00 },
3445 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS113, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0), 0x09 },
3446 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS14, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0), 0x0b },
3447 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS21, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0), 0x09 },
3448 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_ACTUAL_POWER_STATE, 0), 0x03 },
3449 };
3450
3451 static const struct reg_default rt1320_mbq_defaults[] = {
3452 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_01), 0x0000 },
3453 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_02), 0x0000 },
3454 };
3455
rt1320_readable_register(struct device * dev,unsigned int reg)3456 static bool rt1320_readable_register(struct device *dev, unsigned int reg)
3457 {
3458 switch (reg) {
3459 case 0xc000 ... 0xc086:
3460 case 0xc400 ... 0xc409:
3461 case 0xc480 ... 0xc48f:
3462 case 0xc4c0 ... 0xc4c4:
3463 case 0xc4e0 ... 0xc4e7:
3464 case 0xc500:
3465 case 0xc560 ... 0xc56b:
3466 case 0xc570:
3467 case 0xc580 ... 0xc59a:
3468 case 0xc5b0 ... 0xc60f:
3469 case 0xc640 ... 0xc64f:
3470 case 0xc670:
3471 case 0xc680 ... 0xc683:
3472 case 0xc700 ... 0xc76f:
3473 case 0xc800 ... 0xc801:
3474 case 0xc820:
3475 case 0xc900 ... 0xc901:
3476 case 0xc920 ... 0xc921:
3477 case 0xca00 ... 0xca07:
3478 case 0xca20 ... 0xca27:
3479 case 0xca40 ... 0xca4b:
3480 case 0xca60 ... 0xca68:
3481 case 0xca80 ... 0xca88:
3482 case 0xcb00 ... 0xcb0c:
3483 case 0xcc00 ... 0xcc12:
3484 case 0xcc80 ... 0xcc81:
3485 case 0xcd00:
3486 case 0xcd80 ... 0xcd82:
3487 case 0xce00 ... 0xce4d:
3488 case 0xcf00 ... 0xcf25:
3489 case 0xd000 ... 0xd0ff:
3490 case 0xd100 ... 0xd1ff:
3491 case 0xd200 ... 0xd2ff:
3492 case 0xd300 ... 0xd3ff:
3493 case 0xd400 ... 0xd403:
3494 case 0xd410 ... 0xd417:
3495 case 0xd470 ... 0xd497:
3496 case 0xd4dc ... 0xd50f:
3497 case 0xd520 ... 0xd543:
3498 case 0xd560 ... 0xd5ef:
3499 case 0xd600 ... 0xd663:
3500 case 0xda00 ... 0xda6e:
3501 case 0xda80 ... 0xda9e:
3502 case 0xdb00 ... 0xdb7f:
3503 case 0xdc00:
3504 case 0xdc20 ... 0xdc21:
3505 case 0xdd00 ... 0xdd17:
3506 case 0xde00 ... 0xde09:
3507 case 0xdf00 ... 0xdf1b:
3508 case 0xe000 ... 0xe847:
3509 case 0xf01e:
3510 case 0xf717 ... 0xf719:
3511 case 0xf720 ... 0xf723:
3512 case 0x1000cd91 ... 0x1000cd96:
3513 case 0x1000f008:
3514 case 0x1000f021:
3515 case 0x3fe2e000 ... 0x3fe2e003:
3516 case 0x3fc2ab80 ... 0x3fc2abd4:
3517 /* 0x41000189/0x4100018a */
3518 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_01):
3519 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_02):
3520 /* 0x41001388 */
3521 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE27, RT1320_SDCA_CTL_REQ_POWER_STATE, 0):
3522 /* 0x41001988 */
3523 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0):
3524 /* 0x41080000 */
3525 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT0, RT1320_SDCA_CTL_FUNC_STATUS, 0):
3526 /* 0x41080200 */
3527 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PPU21, RT1320_SDCA_CTL_POSTURE_NUMBER, 0):
3528 /* 0x41080900 */
3529 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS113, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0):
3530 /* 0x41080980 */
3531 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS14, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0):
3532 /* 0x41081080 */
3533 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS21, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0):
3534 /* 0x41081480/0x41081488 */
3535 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_SAPU, RT1320_SDCA_CTL_SAPU_PROTECTION_MODE, 0):
3536 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_SAPU, RT1320_SDCA_CTL_SAPU_PROTECTION_STATUS, 0):
3537 /* 0x41081980 */
3538 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_ACTUAL_POWER_STATE, 0):
3539 return true;
3540 default:
3541 return false;
3542 }
3543 }
3544
rt1320_volatile_register(struct device * dev,unsigned int reg)3545 static bool rt1320_volatile_register(struct device *dev, unsigned int reg)
3546 {
3547 switch (reg) {
3548 case 0xc000:
3549 case 0xc003:
3550 case 0xc081:
3551 case 0xc402 ... 0xc406:
3552 case 0xc48c ... 0xc48f:
3553 case 0xc560:
3554 case 0xc5b5 ... 0xc5b7:
3555 case 0xc5fc ... 0xc5ff:
3556 case 0xc820:
3557 case 0xc900:
3558 case 0xc920:
3559 case 0xca42:
3560 case 0xca62:
3561 case 0xca82:
3562 case 0xcd00:
3563 case 0xce03:
3564 case 0xce10:
3565 case 0xce14 ... 0xce17:
3566 case 0xce44 ... 0xce49:
3567 case 0xce4c ... 0xce4d:
3568 case 0xcf0c:
3569 case 0xcf10 ... 0xcf25:
3570 case 0xd486 ... 0xd487:
3571 case 0xd4e5 ... 0xd4e6:
3572 case 0xd4e8 ... 0xd4ff:
3573 case 0xd530:
3574 case 0xd540:
3575 case 0xd543:
3576 case 0xdb58 ... 0xdb5f:
3577 case 0xdb60 ... 0xdb63:
3578 case 0xdb68 ... 0xdb69:
3579 case 0xdb6d:
3580 case 0xdb70 ... 0xdb71:
3581 case 0xdb76:
3582 case 0xdb7a:
3583 case 0xdb7c ... 0xdb7f:
3584 case 0xdd0c ... 0xdd13:
3585 case 0xde02:
3586 case 0xdf14 ... 0xdf1b:
3587 case 0xe83c ... 0xe847:
3588 case 0xf01e:
3589 case 0xf717 ... 0xf719:
3590 case 0xf720 ... 0xf723:
3591 case 0x10000000 ... 0x10007fff:
3592 case 0x1000c000 ... 0x1000dfff:
3593 case 0x1000f008:
3594 case 0x1000f021:
3595 case 0x3fc2ab80 ... 0x3fc2abd4:
3596 case 0x3fc2bf80 ... 0x3fc2bf83:
3597 case 0x3fc2bfc0 ... 0x3fc2bfc7:
3598 case 0x3fe2e000 ... 0x3fe2e003:
3599 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT0, RT1320_SDCA_CTL_FUNC_STATUS, 0):
3600 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_SAPU, RT1320_SDCA_CTL_SAPU_PROTECTION_MODE, 0):
3601 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_SAPU, RT1320_SDCA_CTL_SAPU_PROTECTION_STATUS, 0):
3602 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_ACTUAL_POWER_STATE, 0):
3603 return true;
3604 default:
3605 return false;
3606 }
3607 }
3608
rt1320_mbq_readable_register(struct device * dev,unsigned int reg)3609 static bool rt1320_mbq_readable_register(struct device *dev, unsigned int reg)
3610 {
3611 switch (reg) {
3612 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_01):
3613 case SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_02):
3614 return true;
3615 default:
3616 return false;
3617 }
3618 }
3619
3620 static const struct regmap_config rt1320_sdw_regmap = {
3621 .reg_bits = 32,
3622 .val_bits = 8,
3623 .readable_reg = rt1320_readable_register,
3624 .volatile_reg = rt1320_volatile_register,
3625 .max_register = 0x41081980,
3626 .reg_defaults = rt1320_reg_defaults,
3627 .num_reg_defaults = ARRAY_SIZE(rt1320_reg_defaults),
3628 .cache_type = REGCACHE_MAPLE,
3629 .use_single_read = true,
3630 .use_single_write = true,
3631 };
3632
3633 static const struct regmap_config rt1320_mbq_regmap = {
3634 .name = "sdw-mbq",
3635 .reg_bits = 32,
3636 .val_bits = 16,
3637 .readable_reg = rt1320_mbq_readable_register,
3638 .max_register = 0x41000192,
3639 .reg_defaults = rt1320_mbq_defaults,
3640 .num_reg_defaults = ARRAY_SIZE(rt1320_mbq_defaults),
3641 .cache_type = REGCACHE_MAPLE,
3642 .use_single_read = true,
3643 .use_single_write = true,
3644 };
3645
rt1320_read_prop(struct sdw_slave * slave)3646 static int rt1320_read_prop(struct sdw_slave *slave)
3647 {
3648 struct sdw_slave_prop *prop = &slave->prop;
3649 int nval;
3650 int i, j;
3651 u32 bit;
3652 unsigned long addr;
3653 struct sdw_dpn_prop *dpn;
3654
3655 /*
3656 * Due to support the multi-lane, we call 'sdw_slave_read_prop' to get the lane mapping
3657 */
3658 sdw_slave_read_prop(slave);
3659
3660 prop->scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY;
3661 prop->quirks = SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY;
3662
3663 prop->paging_support = true;
3664 prop->lane_control_support = true;
3665
3666 /* first we need to allocate memory for set bits in port lists */
3667 prop->source_ports = BIT(4);
3668 prop->sink_ports = BIT(1);
3669
3670 nval = hweight32(prop->source_ports);
3671 prop->src_dpn_prop = devm_kcalloc(&slave->dev, nval,
3672 sizeof(*prop->src_dpn_prop), GFP_KERNEL);
3673 if (!prop->src_dpn_prop)
3674 return -ENOMEM;
3675
3676 i = 0;
3677 dpn = prop->src_dpn_prop;
3678 addr = prop->source_ports;
3679 for_each_set_bit(bit, &addr, 32) {
3680 dpn[i].num = bit;
3681 dpn[i].type = SDW_DPN_FULL;
3682 dpn[i].simple_ch_prep_sm = true;
3683 dpn[i].ch_prep_timeout = 10;
3684 i++;
3685 }
3686
3687 /* do this again for sink now */
3688 nval = hweight32(prop->sink_ports);
3689 prop->sink_dpn_prop = devm_kcalloc(&slave->dev, nval,
3690 sizeof(*prop->sink_dpn_prop), GFP_KERNEL);
3691 if (!prop->sink_dpn_prop)
3692 return -ENOMEM;
3693
3694 j = 0;
3695 dpn = prop->sink_dpn_prop;
3696 addr = prop->sink_ports;
3697 for_each_set_bit(bit, &addr, 32) {
3698 dpn[j].num = bit;
3699 dpn[j].type = SDW_DPN_FULL;
3700 dpn[j].simple_ch_prep_sm = true;
3701 dpn[j].ch_prep_timeout = 10;
3702 j++;
3703 }
3704
3705 /* set the timeout values */
3706 prop->clk_stop_timeout = 64;
3707
3708 return 0;
3709 }
3710
rt1320_pde_transition_delay(struct rt1320_sdw_priv * rt1320,unsigned char ps)3711 static int rt1320_pde_transition_delay(struct rt1320_sdw_priv *rt1320, unsigned char ps)
3712 {
3713 unsigned int delay = 1000, val;
3714
3715 pm_runtime_mark_last_busy(&rt1320->sdw_slave->dev);
3716
3717 /* waiting for Actual PDE becomes to PS0/PS3 */
3718 while (delay) {
3719 regmap_read(rt1320->regmap,
3720 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23,
3721 RT1320_SDCA_CTL_ACTUAL_POWER_STATE, 0), &val);
3722 if (val == ps)
3723 break;
3724
3725 usleep_range(1000, 1500);
3726 delay--;
3727 }
3728 if (!delay) {
3729 dev_warn(&rt1320->sdw_slave->dev, "%s PDE to %s is NOT ready", __func__, ps?"PS3":"PS0");
3730 return -ETIMEDOUT;
3731 }
3732
3733 return 0;
3734 }
3735
rt1320_vc_preset(struct rt1320_sdw_priv * rt1320)3736 static void rt1320_vc_preset(struct rt1320_sdw_priv *rt1320)
3737 {
3738 struct sdw_slave *slave = rt1320->sdw_slave;
3739 unsigned int i, reg, val, delay, retry, tmp;
3740
3741 regmap_multi_reg_write(rt1320->regmap, rt1320_vc_blind_write, ARRAY_SIZE(rt1320_vc_blind_write));
3742
3743 for (i = 0; i < ARRAY_SIZE(rt1320_vc_patch_code_write); i++) {
3744 reg = rt1320_vc_patch_code_write[i].reg;
3745 val = rt1320_vc_patch_code_write[i].def;
3746 delay = rt1320_vc_patch_code_write[i].delay_us;
3747
3748 if ((reg == SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0)) &&
3749 (val == 0x00)) {
3750 retry = 200;
3751 while (retry) {
3752 regmap_read(rt1320->regmap, RT1320_KR0_INT_READY, &tmp);
3753 dev_dbg(&slave->dev, "%s, RT1320_KR0_INT_READY=0x%x\n", __func__, tmp);
3754 if (tmp == 0x1f)
3755 break;
3756 usleep_range(1000, 1500);
3757 retry--;
3758 }
3759 if (!retry)
3760 dev_warn(&slave->dev, "%s MCU is NOT ready!", __func__);
3761 }
3762 regmap_write(rt1320->regmap, reg, val);
3763 if (delay)
3764 usleep_range(delay, delay + 1000);
3765 }
3766 }
3767
rt1320_io_init(struct device * dev,struct sdw_slave * slave)3768 static int rt1320_io_init(struct device *dev, struct sdw_slave *slave)
3769 {
3770 struct rt1320_sdw_priv *rt1320 = dev_get_drvdata(dev);
3771 unsigned int amp_func_status, val, tmp;
3772
3773 if (rt1320->hw_init)
3774 return 0;
3775
3776 regcache_cache_only(rt1320->regmap, false);
3777 regcache_cache_only(rt1320->mbq_regmap, false);
3778 if (rt1320->first_hw_init) {
3779 regcache_cache_bypass(rt1320->regmap, true);
3780 regcache_cache_bypass(rt1320->mbq_regmap, true);
3781 } else {
3782 /*
3783 * PM runtime status is marked as 'active' only when a Slave reports as Attached
3784 */
3785 /* update count of parent 'active' children */
3786 pm_runtime_set_active(&slave->dev);
3787 }
3788
3789 pm_runtime_get_noresume(&slave->dev);
3790
3791 if (rt1320->version_id < 0) {
3792 regmap_read(rt1320->regmap, RT1320_DEV_VERSION_ID_1, &val);
3793 rt1320->version_id = val;
3794 }
3795
3796 regmap_read(rt1320->regmap,
3797 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT0, RT1320_SDCA_CTL_FUNC_STATUS, 0), &_func_status);
3798 dev_dbg(dev, "%s amp func_status=0x%x\n", __func__, amp_func_status);
3799
3800 /* initialization write */
3801 if ((amp_func_status & FUNCTION_NEEDS_INITIALIZATION)) {
3802 if (rt1320->version_id < RT1320_VC) {
3803 regmap_multi_reg_write(rt1320->regmap, rt1320_blind_write, ARRAY_SIZE(rt1320_blind_write));
3804 regmap_multi_reg_write(rt1320->regmap, rt1320_patch_code_write,
3805 ARRAY_SIZE(rt1320_patch_code_write));
3806 } else if (rt1320->version_id == RT1320_VC) {
3807 rt1320_vc_preset(rt1320);
3808 }
3809
3810 regmap_write(rt1320->regmap,
3811 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT0, RT1320_SDCA_CTL_FUNC_STATUS, 0),
3812 FUNCTION_NEEDS_INITIALIZATION);
3813 }
3814 if (!rt1320->first_hw_init && rt1320->version_id == RT1320_VA) {
3815 regmap_write(rt1320->regmap, SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23,
3816 RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0);
3817 regmap_read(rt1320->regmap, RT1320_HIFI_VER_0, &val);
3818 regmap_read(rt1320->regmap, RT1320_HIFI_VER_1, &tmp);
3819 val = (tmp << 8) | val;
3820 regmap_read(rt1320->regmap, RT1320_HIFI_VER_2, &tmp);
3821 val = (tmp << 16) | val;
3822 regmap_read(rt1320->regmap, RT1320_HIFI_VER_3, &tmp);
3823 val = (tmp << 24) | val;
3824 dev_dbg(dev, "%s ROM version=0x%x\n", __func__, val);
3825 /*
3826 * We call the version b which has the new DSP ROM code against version a.
3827 * Therefore, we read the DSP address to check the ID.
3828 */
3829 if (val == RT1320_VER_B_ID)
3830 rt1320->version_id = RT1320_VB;
3831 regmap_write(rt1320->regmap, SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23,
3832 RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 3);
3833 }
3834 dev_dbg(dev, "%s version_id=%d\n", __func__, rt1320->version_id);
3835
3836 if (rt1320->first_hw_init) {
3837 regcache_cache_bypass(rt1320->regmap, false);
3838 regcache_cache_bypass(rt1320->mbq_regmap, false);
3839 regcache_mark_dirty(rt1320->regmap);
3840 regcache_mark_dirty(rt1320->mbq_regmap);
3841 }
3842
3843 /* Mark Slave initialization complete */
3844 rt1320->first_hw_init = true;
3845 rt1320->hw_init = true;
3846
3847 pm_runtime_mark_last_busy(&slave->dev);
3848 pm_runtime_put_autosuspend(&slave->dev);
3849
3850 dev_dbg(&slave->dev, "%s hw_init complete\n", __func__);
3851 return 0;
3852 }
3853
rt1320_update_status(struct sdw_slave * slave,enum sdw_slave_status status)3854 static int rt1320_update_status(struct sdw_slave *slave,
3855 enum sdw_slave_status status)
3856 {
3857 struct rt1320_sdw_priv *rt1320 = dev_get_drvdata(&slave->dev);
3858
3859 if (status == SDW_SLAVE_UNATTACHED)
3860 rt1320->hw_init = false;
3861
3862 /*
3863 * Perform initialization only if slave status is present and
3864 * hw_init flag is false
3865 */
3866 if (rt1320->hw_init || status != SDW_SLAVE_ATTACHED)
3867 return 0;
3868
3869 /* perform I/O transfers required for Slave initialization */
3870 return rt1320_io_init(&slave->dev, slave);
3871 }
3872
rt1320_pde23_event(struct snd_soc_dapm_widget * w,struct snd_kcontrol * kcontrol,int event)3873 static int rt1320_pde23_event(struct snd_soc_dapm_widget *w,
3874 struct snd_kcontrol *kcontrol, int event)
3875 {
3876 struct snd_soc_component *component =
3877 snd_soc_dapm_to_component(w->dapm);
3878 struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
3879 unsigned char ps0 = 0x0, ps3 = 0x3;
3880
3881 switch (event) {
3882 case SND_SOC_DAPM_POST_PMU:
3883 regmap_write(rt1320->regmap,
3884 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23,
3885 RT1320_SDCA_CTL_REQ_POWER_STATE, 0), ps0);
3886 rt1320_pde_transition_delay(rt1320, ps0);
3887 break;
3888 case SND_SOC_DAPM_PRE_PMD:
3889 regmap_write(rt1320->regmap,
3890 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23,
3891 RT1320_SDCA_CTL_REQ_POWER_STATE, 0), ps3);
3892 rt1320_pde_transition_delay(rt1320, ps3);
3893 break;
3894 default:
3895 break;
3896 }
3897
3898 return 0;
3899 }
3900
rt1320_set_gain_put(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3901 static int rt1320_set_gain_put(struct snd_kcontrol *kcontrol,
3902 struct snd_ctl_elem_value *ucontrol)
3903 {
3904 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
3905 struct soc_mixer_control *mc =
3906 (struct soc_mixer_control *)kcontrol->private_value;
3907 struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
3908 unsigned int gain_l_val, gain_r_val;
3909 unsigned int lvalue, rvalue;
3910 const unsigned int interval_offset = 0xc0;
3911
3912 regmap_read(rt1320->mbq_regmap, mc->reg, &lvalue);
3913 regmap_read(rt1320->mbq_regmap, mc->rreg, &rvalue);
3914
3915 /* L Channel */
3916 gain_l_val = ucontrol->value.integer.value[0];
3917 if (gain_l_val > mc->max)
3918 gain_l_val = mc->max;
3919 gain_l_val = 0 - ((mc->max - gain_l_val) * interval_offset);
3920 gain_l_val &= 0xffff;
3921
3922 /* R Channel */
3923 gain_r_val = ucontrol->value.integer.value[1];
3924 if (gain_r_val > mc->max)
3925 gain_r_val = mc->max;
3926 gain_r_val = 0 - ((mc->max - gain_r_val) * interval_offset);
3927 gain_r_val &= 0xffff;
3928
3929 if (lvalue == gain_l_val && rvalue == gain_r_val)
3930 return 0;
3931
3932 /* Lch*/
3933 regmap_write(rt1320->mbq_regmap, mc->reg, gain_l_val);
3934 /* Rch */
3935 regmap_write(rt1320->mbq_regmap, mc->rreg, gain_r_val);
3936
3937 return 1;
3938 }
3939
rt1320_set_gain_get(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3940 static int rt1320_set_gain_get(struct snd_kcontrol *kcontrol,
3941 struct snd_ctl_elem_value *ucontrol)
3942 {
3943 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
3944 struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
3945 struct soc_mixer_control *mc =
3946 (struct soc_mixer_control *)kcontrol->private_value;
3947 unsigned int read_l, read_r, ctl_l = 0, ctl_r = 0;
3948 const unsigned int interval_offset = 0xc0;
3949
3950 regmap_read(rt1320->mbq_regmap, mc->reg, &read_l);
3951 regmap_read(rt1320->mbq_regmap, mc->rreg, &read_r);
3952
3953 ctl_l = mc->max - (((0 - read_l) & 0xffff) / interval_offset);
3954
3955 if (read_l != read_r)
3956 ctl_r = mc->max - (((0 - read_r) & 0xffff) / interval_offset);
3957 else
3958 ctl_r = ctl_l;
3959
3960 ucontrol->value.integer.value[0] = ctl_l;
3961 ucontrol->value.integer.value[1] = ctl_r;
3962 return 0;
3963 }
3964
3965 static const char * const rt1320_rx_data_ch_select[] = {
3966 "L,R",
3967 "R,L",
3968 "L,L",
3969 "R,R",
3970 "L,L+R",
3971 "R,L+R",
3972 "L+R,L",
3973 "L+R,R",
3974 "L+R,L+R",
3975 };
3976
3977 static SOC_ENUM_SINGLE_DECL(rt1320_rx_data_ch_enum,
3978 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PPU21, RT1320_SDCA_CTL_POSTURE_NUMBER, 0), 0,
3979 rt1320_rx_data_ch_select);
3980
3981 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -6525, 75, 0);
3982
3983 static const struct snd_kcontrol_new rt1320_snd_controls[] = {
3984 SOC_DOUBLE_R_EXT_TLV("FU21 Playback Volume",
3985 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_01),
3986 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_VOLUME, CH_02),
3987 0, 0x57, 0, rt1320_set_gain_get, rt1320_set_gain_put, out_vol_tlv),
3988 SOC_ENUM("RX Channel Select", rt1320_rx_data_ch_enum),
3989 };
3990
3991 static const struct snd_kcontrol_new rt1320_spk_l_dac =
3992 SOC_DAPM_SINGLE_AUTODISABLE("Switch",
3993 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_01),
3994 0, 1, 1);
3995 static const struct snd_kcontrol_new rt1320_spk_r_dac =
3996 SOC_DAPM_SINGLE_AUTODISABLE("Switch",
3997 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_FU21, RT1320_SDCA_CTL_FU_MUTE, CH_02),
3998 0, 1, 1);
3999
4000 static const struct snd_soc_dapm_widget rt1320_dapm_widgets[] = {
4001 /* Audio Interface */
4002 SND_SOC_DAPM_AIF_IN("DP1RX", "DP1 Playback", 0, SND_SOC_NOPM, 0, 0),
4003 SND_SOC_DAPM_AIF_OUT("DP4TX", "DP4 Capture", 0, SND_SOC_NOPM, 0, 0),
4004
4005 /* Digital Interface */
4006 SND_SOC_DAPM_PGA("FU21", SND_SOC_NOPM, 0, 0, NULL, 0),
4007 SND_SOC_DAPM_SUPPLY("PDE 23", SND_SOC_NOPM, 0, 0,
4008 rt1320_pde23_event,
4009 SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
4010
4011 /* Output */
4012 SND_SOC_DAPM_SWITCH("OT23 L", SND_SOC_NOPM, 0, 0, &rt1320_spk_l_dac),
4013 SND_SOC_DAPM_SWITCH("OT23 R", SND_SOC_NOPM, 0, 0, &rt1320_spk_r_dac),
4014 SND_SOC_DAPM_OUTPUT("SPOL"),
4015 SND_SOC_DAPM_OUTPUT("SPOR"),
4016
4017 /* Input */
4018 SND_SOC_DAPM_PGA("AEC Data", SND_SOC_NOPM, 0, 0, NULL, 0),
4019 SND_SOC_DAPM_SIGGEN("AEC Gen"),
4020 };
4021
4022 static const struct snd_soc_dapm_route rt1320_dapm_routes[] = {
4023 { "FU21", NULL, "DP1RX" },
4024 { "FU21", NULL, "PDE 23" },
4025 { "OT23 L", "Switch", "FU21" },
4026 { "OT23 R", "Switch", "FU21" },
4027 { "SPOL", NULL, "OT23 L" },
4028 { "SPOR", NULL, "OT23 R" },
4029
4030 { "AEC Data", NULL, "AEC Gen" },
4031 { "DP4TX", NULL, "AEC Data" },
4032 };
4033
rt1320_set_sdw_stream(struct snd_soc_dai * dai,void * sdw_stream,int direction)4034 static int rt1320_set_sdw_stream(struct snd_soc_dai *dai, void *sdw_stream,
4035 int direction)
4036 {
4037 snd_soc_dai_dma_data_set(dai, direction, sdw_stream);
4038 return 0;
4039 }
4040
rt1320_sdw_shutdown(struct snd_pcm_substream * substream,struct snd_soc_dai * dai)4041 static void rt1320_sdw_shutdown(struct snd_pcm_substream *substream,
4042 struct snd_soc_dai *dai)
4043 {
4044 snd_soc_dai_set_dma_data(dai, substream, NULL);
4045 }
4046
rt1320_sdw_hw_params(struct snd_pcm_substream * substream,struct snd_pcm_hw_params * params,struct snd_soc_dai * dai)4047 static int rt1320_sdw_hw_params(struct snd_pcm_substream *substream,
4048 struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
4049 {
4050 struct snd_soc_component *component = dai->component;
4051 struct rt1320_sdw_priv *rt1320 =
4052 snd_soc_component_get_drvdata(component);
4053 struct sdw_stream_config stream_config;
4054 struct sdw_port_config port_config;
4055 struct sdw_stream_runtime *sdw_stream;
4056 int retval;
4057 unsigned int sampling_rate;
4058
4059 dev_dbg(dai->dev, "%s %s", __func__, dai->name);
4060 sdw_stream = snd_soc_dai_get_dma_data(dai, substream);
4061
4062 if (!sdw_stream)
4063 return -EINVAL;
4064
4065 if (!rt1320->sdw_slave)
4066 return -EINVAL;
4067
4068 /* SoundWire specific configuration */
4069 snd_sdw_params_to_config(substream, params, &stream_config, &port_config);
4070
4071 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
4072 if (dai->id == RT1320_AIF1)
4073 port_config.num = 1;
4074 else
4075 return -EINVAL;
4076 } else {
4077 if (dai->id == RT1320_AIF1)
4078 port_config.num = 4;
4079 else
4080 return -EINVAL;
4081 }
4082
4083 retval = sdw_stream_add_slave(rt1320->sdw_slave, &stream_config,
4084 &port_config, 1, sdw_stream);
4085 if (retval) {
4086 dev_err(dai->dev, "%s: Unable to configure port\n", __func__);
4087 return retval;
4088 }
4089
4090 /* sampling rate configuration */
4091 switch (params_rate(params)) {
4092 case 16000:
4093 sampling_rate = RT1320_SDCA_RATE_16000HZ;
4094 break;
4095 case 32000:
4096 sampling_rate = RT1320_SDCA_RATE_32000HZ;
4097 break;
4098 case 44100:
4099 sampling_rate = RT1320_SDCA_RATE_44100HZ;
4100 break;
4101 case 48000:
4102 sampling_rate = RT1320_SDCA_RATE_48000HZ;
4103 break;
4104 case 96000:
4105 sampling_rate = RT1320_SDCA_RATE_96000HZ;
4106 break;
4107 case 192000:
4108 sampling_rate = RT1320_SDCA_RATE_192000HZ;
4109 break;
4110 default:
4111 dev_err(component->dev, "%s: Rate %d is not supported\n",
4112 __func__, params_rate(params));
4113 return -EINVAL;
4114 }
4115
4116 /* set sampling frequency */
4117 regmap_write(rt1320->regmap,
4118 SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_CS21, RT1320_SDCA_CTL_SAMPLE_FREQ_INDEX, 0),
4119 sampling_rate);
4120
4121 return 0;
4122 }
4123
rt1320_sdw_pcm_hw_free(struct snd_pcm_substream * substream,struct snd_soc_dai * dai)4124 static int rt1320_sdw_pcm_hw_free(struct snd_pcm_substream *substream,
4125 struct snd_soc_dai *dai)
4126 {
4127 struct snd_soc_component *component = dai->component;
4128 struct rt1320_sdw_priv *rt1320 =
4129 snd_soc_component_get_drvdata(component);
4130 struct sdw_stream_runtime *sdw_stream =
4131 snd_soc_dai_get_dma_data(dai, substream);
4132
4133 if (!rt1320->sdw_slave)
4134 return -EINVAL;
4135
4136 sdw_stream_remove_slave(rt1320->sdw_slave, sdw_stream);
4137 return 0;
4138 }
4139
4140 /*
4141 * slave_ops: callbacks for get_clock_stop_mode, clock_stop and
4142 * port_prep are not defined for now
4143 */
4144 static const struct sdw_slave_ops rt1320_slave_ops = {
4145 .read_prop = rt1320_read_prop,
4146 .update_status = rt1320_update_status,
4147 };
4148
rt1320_sdw_component_probe(struct snd_soc_component * component)4149 static int rt1320_sdw_component_probe(struct snd_soc_component *component)
4150 {
4151 int ret;
4152 struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
4153
4154 rt1320->component = component;
4155
4156 if (!rt1320->first_hw_init)
4157 return 0;
4158
4159 ret = pm_runtime_resume(component->dev);
4160 dev_dbg(&rt1320->sdw_slave->dev, "%s pm_runtime_resume, ret=%d", __func__, ret);
4161 if (ret < 0 && ret != -EACCES)
4162 return ret;
4163
4164 return 0;
4165 }
4166
4167 static const struct snd_soc_component_driver soc_component_sdw_rt1320 = {
4168 .probe = rt1320_sdw_component_probe,
4169 .controls = rt1320_snd_controls,
4170 .num_controls = ARRAY_SIZE(rt1320_snd_controls),
4171 .dapm_widgets = rt1320_dapm_widgets,
4172 .num_dapm_widgets = ARRAY_SIZE(rt1320_dapm_widgets),
4173 .dapm_routes = rt1320_dapm_routes,
4174 .num_dapm_routes = ARRAY_SIZE(rt1320_dapm_routes),
4175 .endianness = 1,
4176 };
4177
4178 static const struct snd_soc_dai_ops rt1320_aif_dai_ops = {
4179 .hw_params = rt1320_sdw_hw_params,
4180 .hw_free = rt1320_sdw_pcm_hw_free,
4181 .set_stream = rt1320_set_sdw_stream,
4182 .shutdown = rt1320_sdw_shutdown,
4183 };
4184
4185 #define RT1320_STEREO_RATES (SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
4186 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000)
4187 #define RT1320_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE | \
4188 SNDRV_PCM_FMTBIT_S32_LE)
4189
4190 static struct snd_soc_dai_driver rt1320_sdw_dai[] = {
4191 {
4192 .name = "rt1320-aif1",
4193 .id = RT1320_AIF1,
4194 .playback = {
4195 .stream_name = "DP1 Playback",
4196 .channels_min = 1,
4197 .channels_max = 2,
4198 .rates = RT1320_STEREO_RATES,
4199 .formats = RT1320_FORMATS,
4200 },
4201 .capture = {
4202 .stream_name = "DP4 Capture",
4203 .channels_min = 1,
4204 .channels_max = 2,
4205 .rates = RT1320_STEREO_RATES,
4206 .formats = RT1320_FORMATS,
4207 },
4208 .ops = &rt1320_aif_dai_ops,
4209 },
4210 };
4211
rt1320_sdw_init(struct device * dev,struct regmap * regmap,struct regmap * mbq_regmap,struct sdw_slave * slave)4212 static int rt1320_sdw_init(struct device *dev, struct regmap *regmap,
4213 struct regmap *mbq_regmap, struct sdw_slave *slave)
4214 {
4215 struct rt1320_sdw_priv *rt1320;
4216 int ret;
4217
4218 rt1320 = devm_kzalloc(dev, sizeof(*rt1320), GFP_KERNEL);
4219 if (!rt1320)
4220 return -ENOMEM;
4221
4222 dev_set_drvdata(dev, rt1320);
4223 rt1320->sdw_slave = slave;
4224 rt1320->mbq_regmap = mbq_regmap;
4225 rt1320->regmap = regmap;
4226
4227 regcache_cache_only(rt1320->regmap, true);
4228 regcache_cache_only(rt1320->mbq_regmap, true);
4229
4230 /*
4231 * Mark hw_init to false
4232 * HW init will be performed when device reports present
4233 */
4234 rt1320->hw_init = false;
4235 rt1320->first_hw_init = false;
4236 rt1320->version_id = -1;
4237
4238 ret = devm_snd_soc_register_component(dev,
4239 &soc_component_sdw_rt1320,
4240 rt1320_sdw_dai,
4241 ARRAY_SIZE(rt1320_sdw_dai));
4242 if (ret < 0)
4243 return ret;
4244
4245 /* set autosuspend parameters */
4246 pm_runtime_set_autosuspend_delay(dev, 3000);
4247 pm_runtime_use_autosuspend(dev);
4248
4249 /* make sure the device does not suspend immediately */
4250 pm_runtime_mark_last_busy(dev);
4251
4252 pm_runtime_enable(dev);
4253
4254 /* important note: the device is NOT tagged as 'active' and will remain
4255 * 'suspended' until the hardware is enumerated/initialized. This is required
4256 * to make sure the ASoC framework use of pm_runtime_get_sync() does not silently
4257 * fail with -EACCESS because of race conditions between card creation and enumeration
4258 */
4259
4260 dev_dbg(dev, "%s\n", __func__);
4261
4262 return ret;
4263 }
4264
rt1320_sdw_probe(struct sdw_slave * slave,const struct sdw_device_id * id)4265 static int rt1320_sdw_probe(struct sdw_slave *slave,
4266 const struct sdw_device_id *id)
4267 {
4268 struct regmap *regmap, *mbq_regmap;
4269
4270 /* Regmap Initialization */
4271 mbq_regmap = devm_regmap_init_sdw_mbq(slave, &rt1320_mbq_regmap);
4272 if (IS_ERR(mbq_regmap))
4273 return PTR_ERR(mbq_regmap);
4274
4275 regmap = devm_regmap_init_sdw(slave, &rt1320_sdw_regmap);
4276 if (IS_ERR(regmap))
4277 return PTR_ERR(regmap);
4278
4279 return rt1320_sdw_init(&slave->dev, regmap, mbq_regmap, slave);
4280 }
4281
rt1320_sdw_remove(struct sdw_slave * slave)4282 static int rt1320_sdw_remove(struct sdw_slave *slave)
4283 {
4284 pm_runtime_disable(&slave->dev);
4285
4286 return 0;
4287 }
4288
4289 /*
4290 * Version A/B will use the class id 0
4291 * The newer version than A/B will use the class id 1, so add it in advance
4292 */
4293 static const struct sdw_device_id rt1320_id[] = {
4294 SDW_SLAVE_ENTRY_EXT(0x025d, 0x1320, 0x3, 0x0, 0),
4295 SDW_SLAVE_ENTRY_EXT(0x025d, 0x1320, 0x3, 0x1, 0),
4296 {},
4297 };
4298 MODULE_DEVICE_TABLE(sdw, rt1320_id);
4299
rt1320_dev_suspend(struct device * dev)4300 static int __maybe_unused rt1320_dev_suspend(struct device *dev)
4301 {
4302 struct rt1320_sdw_priv *rt1320 = dev_get_drvdata(dev);
4303
4304 if (!rt1320->hw_init)
4305 return 0;
4306
4307 regcache_cache_only(rt1320->regmap, true);
4308 regcache_cache_only(rt1320->mbq_regmap, true);
4309 return 0;
4310 }
4311
4312 #define RT1320_PROBE_TIMEOUT 5000
4313
rt1320_dev_resume(struct device * dev)4314 static int __maybe_unused rt1320_dev_resume(struct device *dev)
4315 {
4316 struct sdw_slave *slave = dev_to_sdw_dev(dev);
4317 struct rt1320_sdw_priv *rt1320 = dev_get_drvdata(dev);
4318 unsigned long time;
4319
4320 if (!rt1320->first_hw_init)
4321 return 0;
4322
4323 if (!slave->unattach_request)
4324 goto regmap_sync;
4325
4326 time = wait_for_completion_timeout(&slave->initialization_complete,
4327 msecs_to_jiffies(RT1320_PROBE_TIMEOUT));
4328 if (!time) {
4329 dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __func__);
4330 return -ETIMEDOUT;
4331 }
4332
4333 regmap_sync:
4334 slave->unattach_request = 0;
4335 regcache_cache_only(rt1320->regmap, false);
4336 regcache_sync(rt1320->regmap);
4337 regcache_cache_only(rt1320->mbq_regmap, false);
4338 regcache_sync(rt1320->mbq_regmap);
4339 return 0;
4340 }
4341
4342 static const struct dev_pm_ops rt1320_pm = {
4343 SET_SYSTEM_SLEEP_PM_OPS(rt1320_dev_suspend, rt1320_dev_resume)
4344 SET_RUNTIME_PM_OPS(rt1320_dev_suspend, rt1320_dev_resume, NULL)
4345 };
4346
4347 static struct sdw_driver rt1320_sdw_driver = {
4348 .driver = {
4349 .name = "rt1320-sdca",
4350 .pm = &rt1320_pm,
4351 },
4352 .probe = rt1320_sdw_probe,
4353 .remove = rt1320_sdw_remove,
4354 .ops = &rt1320_slave_ops,
4355 .id_table = rt1320_id,
4356 };
4357 module_sdw_driver(rt1320_sdw_driver);
4358
4359 MODULE_DESCRIPTION("ASoC RT1320 driver SDCA SDW");
4360 MODULE_AUTHOR("Shuming Fan <shumingf@realtek.com>");
4361 MODULE_LICENSE("GPL");
4362