1 /* sane - Scanner Access Now Easy.
2
3 Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt>
4
5 This file is part of the SANE package.
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the
10 License, or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <https://www.gnu.org/licenses/>.
19
20 As a special exception, the authors of SANE give permission for
21 additional uses of the libraries contained in this release of SANE.
22
23 The exception is that, if you link a SANE library with other files
24 to produce an executable, this does not by itself cause the
25 resulting executable to be covered by the GNU General Public
26 License. Your use of that executable is in no way restricted on
27 account of linking the SANE library code into it.
28
29 This exception does not, however, invalidate any other reasons why
30 the executable file might be covered by the GNU General Public
31 License.
32
33 If you submit changes to SANE to the maintainers to be included in
34 a subsequent release, you agree by submitting the changes that
35 those changes may be distributed with this exception intact.
36
37 If you write modifications of your own for SANE, it is your choice
38 whether to permit this exception to apply to your modifications.
39 If you do not wish that, delete this exception notice.
40 */
41
42 #define DEBUG_DECLARE_ONLY
43
44 #include "low.h"
45
46 namespace genesys {
47
48 StaticInit<std::vector<Genesys_Frontend>> s_frontends;
49
genesys_init_frontend_tables()50 void genesys_init_frontend_tables()
51 {
52 s_frontends.init();
53
54 GenesysFrontendLayout wolfson_layout;
55 wolfson_layout.type = FrontendType::WOLFSON;
56 wolfson_layout.offset_addr = { 0x20, 0x21, 0x22 };
57 wolfson_layout.gain_addr = { 0x28, 0x29, 0x2a };
58
59 GenesysFrontendLayout analog_devices;
60 analog_devices.type = FrontendType::ANALOG_DEVICES;
61 analog_devices.offset_addr = { 0x05, 0x06, 0x07 };
62 analog_devices.gain_addr = { 0x02, 0x03, 0x04 };
63
64 Genesys_Frontend fe;
65 fe.id = AdcId::WOLFSON_UMAX;
66 fe.layout = wolfson_layout;
67 fe.regs = {
68 { 0x00, 0x00 },
69 { 0x01, 0x03 },
70 { 0x02, 0x05 },
71 { 0x03, 0x11 },
72 { 0x20, 0x80 },
73 { 0x21, 0x80 },
74 { 0x22, 0x80 },
75 { 0x24, 0x00 },
76 { 0x25, 0x00 },
77 { 0x26, 0x00 },
78 { 0x28, 0x02 },
79 { 0x29, 0x02 },
80 { 0x2a, 0x02 },
81 };
82 fe.reg2 = {0x00, 0x00, 0x00};
83 s_frontends->push_back(fe);
84
85
86 fe = Genesys_Frontend();
87 fe.id = AdcId::WOLFSON_ST12;
88 fe.layout = wolfson_layout;
89 fe.regs = {
90 { 0x00, 0x00 },
91 { 0x01, 0x03 },
92 { 0x02, 0x05 },
93 { 0x03, 0x03 },
94 { 0x20, 0xc8 },
95 { 0x21, 0xc8 },
96 { 0x22, 0xc8 },
97 { 0x24, 0x00 },
98 { 0x25, 0x00 },
99 { 0x26, 0x00 },
100 { 0x28, 0x04 },
101 { 0x29, 0x04 },
102 { 0x2a, 0x04 },
103 };
104 fe.reg2 = {0x00, 0x00, 0x00};
105 s_frontends->push_back(fe);
106
107
108 fe = Genesys_Frontend();
109 fe.id = AdcId::WOLFSON_ST24;
110 fe.layout = wolfson_layout;
111 fe.regs = {
112 { 0x00, 0x00 },
113 { 0x01, 0x03 },
114 { 0x02, 0x05 },
115 { 0x03, 0x21 },
116 { 0x20, 0xc8 },
117 { 0x21, 0xc8 },
118 { 0x22, 0xc8 },
119 { 0x24, 0x00 },
120 { 0x25, 0x00 },
121 { 0x26, 0x00 },
122 { 0x28, 0x06 },
123 { 0x29, 0x06 },
124 { 0x2a, 0x06 },
125 };
126 fe.reg2 = {0x00, 0x00, 0x00};
127 s_frontends->push_back(fe);
128
129
130 fe = Genesys_Frontend();
131 fe.id = AdcId::WOLFSON_5345;
132 fe.layout = wolfson_layout;
133 fe.regs = {
134 { 0x00, 0x00 },
135 { 0x01, 0x03 },
136 { 0x02, 0x05 },
137 { 0x03, 0x12 },
138 { 0x20, 0xb8 },
139 { 0x21, 0xb8 },
140 { 0x22, 0xb8 },
141 { 0x24, 0x00 },
142 { 0x25, 0x00 },
143 { 0x26, 0x00 },
144 { 0x28, 0x04 },
145 { 0x29, 0x04 },
146 { 0x2a, 0x04 },
147 };
148 fe.reg2 = {0x00, 0x00, 0x00};
149 s_frontends->push_back(fe);
150
151
152 // reg3=0x02 for 50-600 dpi, 0x32 (0x12 also works well) at 1200
153 fe = Genesys_Frontend();
154 fe.id = AdcId::WOLFSON_HP2400;
155 fe.layout = wolfson_layout;
156 fe.regs = {
157 { 0x00, 0x00 },
158 { 0x01, 0x03 },
159 { 0x02, 0x05 },
160 { 0x03, 0x02 },
161 { 0x20, 0xb4 },
162 { 0x21, 0xb6 },
163 { 0x22, 0xbc },
164 { 0x24, 0x00 },
165 { 0x25, 0x00 },
166 { 0x26, 0x00 },
167 { 0x28, 0x06 },
168 { 0x29, 0x09 },
169 { 0x2a, 0x08 },
170 };
171 fe.reg2 = {0x00, 0x00, 0x00};
172 s_frontends->push_back(fe);
173
174
175 fe = Genesys_Frontend();
176 fe.id = AdcId::WOLFSON_HP2300;
177 fe.layout = wolfson_layout;
178 fe.regs = {
179 { 0x00, 0x00 },
180 { 0x01, 0x03 },
181 { 0x02, 0x04 },
182 { 0x03, 0x02 },
183 { 0x20, 0xbe },
184 { 0x21, 0xbe },
185 { 0x22, 0xbe },
186 { 0x24, 0x00 },
187 { 0x25, 0x00 },
188 { 0x26, 0x00 },
189 { 0x28, 0x04 },
190 { 0x29, 0x04 },
191 { 0x2a, 0x04 },
192 };
193 fe.reg2 = {0x00, 0x00, 0x00};
194 s_frontends->push_back(fe);
195
196
197 fe = Genesys_Frontend();
198 fe.id = AdcId::CANON_LIDE_35;
199 fe.layout = wolfson_layout;
200 fe.layout.type = FrontendType::WOLFSON_GL841;
201 fe.regs = {
202 { 0x00, 0x00 },
203 { 0x01, 0x3d },
204 { 0x02, 0x08 },
205 { 0x03, 0x00 },
206 { 0x20, 0xe1 },
207 { 0x21, 0xe1 },
208 { 0x22, 0xe1 },
209 { 0x24, 0x00 },
210 { 0x25, 0x00 },
211 { 0x26, 0x00 },
212 { 0x28, 0x93 },
213 { 0x29, 0x93 },
214 { 0x2a, 0x93 },
215 };
216 fe.reg2 = {0x00, 0x19, 0x06};
217 s_frontends->push_back(fe);
218
219
220 fe = Genesys_Frontend();
221 fe.id = AdcId::CANON_LIDE_90;
222 fe.layout = wolfson_layout;
223 fe.layout.type = FrontendType::WOLFSON;
224 fe.regs = {
225 { 0x01, 0x23 },
226 { 0x02, 0x07 },
227 { 0x03, 0x29 },
228 { 0x06, 0x0d },
229 { 0x08, 0x00 },
230 { 0x09, 0x16 },
231 { 0x20, 0x4d },
232 { 0x21, 0x4d },
233 { 0x22, 0x4d },
234 { 0x23, 0x4d },
235 { 0x28, 0x14 },
236 { 0x29, 0x14 },
237 { 0x2a, 0x14 },
238 { 0x2b, 0x14 },
239 };
240 fe.reg2 = {0x00, 0x00, 0x00};
241 s_frontends->push_back(fe);
242
243
244 fe = Genesys_Frontend();
245 fe.id = AdcId::AD_XP200;
246 fe.layout = wolfson_layout;
247 fe.regs = {
248 { 0x00, 0x58 },
249 { 0x01, 0x80 },
250 { 0x02, 0x00 },
251 { 0x03, 0x00 },
252 { 0x20, 0x09 },
253 { 0x21, 0x09 },
254 { 0x22, 0x09 },
255 { 0x24, 0x00 },
256 { 0x25, 0x00 },
257 { 0x26, 0x00 },
258 { 0x28, 0x09 },
259 { 0x29, 0x09 },
260 { 0x2a, 0x09 },
261 };
262 fe.reg2 = {0x00, 0x00, 0x00};
263 s_frontends->push_back(fe);
264
265
266 fe = Genesys_Frontend();
267 fe.id = AdcId::WOLFSON_XP300;
268 fe.layout = wolfson_layout;
269 fe.layout.type = FrontendType::WOLFSON_GL841;
270 fe.regs = {
271 { 0x00, 0x00 },
272 { 0x01, 0x35 },
273 { 0x02, 0x20 },
274 { 0x03, 0x14 },
275 { 0x20, 0xe1 },
276 { 0x21, 0xe1 },
277 { 0x22, 0xe1 },
278 { 0x24, 0x00 },
279 { 0x25, 0x00 },
280 { 0x26, 0x00 },
281 { 0x28, 0x93 },
282 { 0x29, 0x93 },
283 { 0x2a, 0x93 },
284 };
285 fe.reg2 = {0x07, 0x00, 0x00};
286 s_frontends->push_back(fe);
287
288
289 fe = Genesys_Frontend();
290 fe.id = AdcId::WOLFSON_HP3670;
291 fe.layout = wolfson_layout;
292 fe.regs = {
293 { 0x00, 0x00 },
294 { 0x01, 0x03 },
295 { 0x02, 0x05 },
296 { 0x03, 0x32 },
297 { 0x20, 0xba },
298 { 0x21, 0xb8 },
299 { 0x22, 0xb8 },
300 { 0x24, 0x00 },
301 { 0x25, 0x00 },
302 { 0x26, 0x00 },
303 { 0x28, 0x06 },
304 { 0x29, 0x05 },
305 { 0x2a, 0x04 },
306 };
307 fe.reg2 = {0x00, 0x00, 0x00};
308 s_frontends->push_back(fe);
309
310
311 fe = Genesys_Frontend();
312 fe.id = AdcId::WOLFSON_DSM600;
313 fe.layout = wolfson_layout;
314 fe.layout.type = FrontendType::WOLFSON_GL841;
315 fe.regs = {
316 { 0x00, 0x00 },
317 { 0x01, 0x35 },
318 { 0x02, 0x20 },
319 { 0x03, 0x14 },
320 { 0x20, 0x85 },
321 { 0x21, 0x85 },
322 { 0x22, 0x85 },
323 { 0x24, 0x00 },
324 { 0x25, 0x00 },
325 { 0x26, 0x00 },
326 { 0x28, 0xa0 },
327 { 0x29, 0xa0 },
328 { 0x2a, 0xa0 },
329 };
330 fe.reg2 = {0x07, 0x00, 0x00};
331 s_frontends->push_back(fe);
332
333
334 fe = Genesys_Frontend();
335 fe.id = AdcId::CANON_LIDE_200;
336 fe.layout = analog_devices;
337 fe.layout.type = FrontendType::ANALOG_DEVICES_GL847;
338 fe.regs = {
339 { 0x00, 0x9d },
340 { 0x01, 0x91 },
341 { 0x02, 0x32 },
342 { 0x03, 0x04 },
343 { 0x04, 0x00 },
344 { 0x05, 0x00 },
345 { 0x06, 0x3f },
346 { 0x07, 0x00 },
347 };
348 s_frontends->push_back(fe);
349
350
351 fe = Genesys_Frontend();
352 fe.id = AdcId::CANON_LIDE_700F;
353 fe.layout = analog_devices;
354 fe.layout.type = FrontendType::ANALOG_DEVICES_GL847;
355 fe.regs = {
356 { 0x00, 0x9d },
357 { 0x01, 0x9e },
358 { 0x02, 0x2f },
359 { 0x03, 0x04 },
360 { 0x04, 0x00 },
361 { 0x05, 0x00 },
362 { 0x06, 0x3f },
363 { 0x07, 0x00 },
364 };
365 s_frontends->push_back(fe);
366
367
368 fe = Genesys_Frontend();
369 fe.id = AdcId::KVSS080;
370 fe.layout = wolfson_layout;
371 fe.regs = {
372 { 0x00, 0x00 },
373 { 0x01, 0x23 },
374 { 0x02, 0x24 },
375 { 0x03, 0x0f },
376 { 0x20, 0x80 },
377 { 0x21, 0x80 },
378 { 0x22, 0x80 },
379 { 0x24, 0x00 },
380 { 0x25, 0x00 },
381 { 0x26, 0x00 },
382 { 0x28, 0x4b },
383 { 0x29, 0x4b },
384 { 0x2a, 0x4b },
385 };
386 fe.reg2 = {0x00,0x00,0x00};
387 s_frontends->push_back(fe);
388
389
390 fe = Genesys_Frontend();
391 fe.id = AdcId::G4050;
392 fe.layout = wolfson_layout;
393 fe.regs = {
394 { 0x00, 0x00 },
395 { 0x01, 0x23 },
396 { 0x02, 0x24 },
397 { 0x03, 0x1f },
398 { 0x20, 0x45 },
399 { 0x21, 0x45 },
400 { 0x22, 0x45 },
401 { 0x24, 0x00 },
402 { 0x25, 0x00 },
403 { 0x26, 0x00 },
404 { 0x28, 0x4b },
405 { 0x29, 0x4b },
406 { 0x2a, 0x4b },
407 };
408 fe.reg2 = {0x00,0x00,0x00};
409 s_frontends->push_back(fe);
410
411
412 fe = Genesys_Frontend();
413 fe.id = AdcId::CANON_LIDE_110;
414 fe.layout = wolfson_layout;
415 fe.layout.type = FrontendType::WOLFSON_GL124;
416 fe.regs = {
417 { 0x00, 0x80 },
418 { 0x01, 0x8a },
419 { 0x02, 0x23 },
420 { 0x03, 0x4c },
421 { 0x20, 0x00 },
422 { 0x21, 0x00 },
423 { 0x22, 0x00 },
424 { 0x24, 0x00 },
425 { 0x25, 0xca },
426 { 0x26, 0x94 },
427 { 0x28, 0x00 },
428 { 0x29, 0x00 },
429 { 0x2a, 0x00 },
430 };
431 fe.reg2 = {0x00, 0x00, 0x00};
432 s_frontends->push_back(fe);
433
434 /** @brief GL124 special case
435 * for GL124 based scanners, this struct is "abused"
436 * in fact the fields are map like below to AFE registers
437 * (from Texas Instrument or alike ?)
438 */
439 fe = Genesys_Frontend();
440 fe.id = AdcId::CANON_LIDE_120;
441 fe.layout = wolfson_layout;
442 fe.layout.type = FrontendType::WOLFSON_GL124;
443 fe.regs = {
444 { 0x00, 0x80 },
445 { 0x01, 0xa3 },
446 { 0x02, 0x2b },
447 { 0x03, 0x4c },
448 { 0x20, 0x00 },
449 { 0x21, 0x00 },
450 { 0x22, 0x00 },
451 { 0x24, 0x00 }, // actual address 0x05
452 { 0x25, 0xca }, // actual address 0x06
453 { 0x26, 0x95 }, // actual address 0x07
454 { 0x28, 0x00 },
455 { 0x29, 0x00 },
456 { 0x2a, 0x00 },
457 };
458 fe.reg2 = {0x00, 0x00, 0x00};
459 s_frontends->push_back(fe);
460
461
462 fe = Genesys_Frontend();
463 fe.id = AdcId::PLUSTEK_OPTICPRO_3600;
464 fe.layout = wolfson_layout;
465 fe.regs = {
466 { 0x00, 0x70 },
467 { 0x01, 0x80 },
468 { 0x02, 0x00 },
469 { 0x03, 0x00 },
470 { 0x20, 0x00 },
471 { 0x21, 0x00 },
472 { 0x22, 0x00 },
473 { 0x24, 0x00 },
474 { 0x25, 0x00 },
475 { 0x26, 0x00 },
476 { 0x28, 0x3f },
477 { 0x29, 0x3d },
478 { 0x2a, 0x3d },
479 };
480 fe.reg2 = {0x00, 0x00, 0x00};
481 s_frontends->push_back(fe);
482
483
484 fe = Genesys_Frontend();
485 fe.id = AdcId::PLUSTEK_OPTICFILM_7200;
486 fe.layout = analog_devices;
487 fe.regs = {
488 { 0x00, 0xf8 },
489 { 0x01, 0x80 },
490 { 0x02, 0x2e },
491 { 0x03, 0x17 },
492 { 0x04, 0x20 },
493 { 0x05, 0x0109 },
494 { 0x06, 0x01 },
495 { 0x07, 0x0104 },
496 };
497 fe.reg2 = {0x00, 0x00, 0x00};
498 s_frontends->push_back(fe);
499
500
501 fe = Genesys_Frontend();
502 fe.id = AdcId::PLUSTEK_OPTICFILM_7200I;
503 fe.layout = analog_devices;
504 fe.regs = {
505 { 0x00, 0xf8 },
506 { 0x01, 0x80 },
507 { 0x02, 0x0a },
508 { 0x03, 0x06 },
509 { 0x04, 0x0f },
510 { 0x05, 0x56 },
511 { 0x06, 0x64 },
512 { 0x07, 0x56 },
513 };
514 fe.reg2 = {0x00, 0x00, 0x00};
515 s_frontends->push_back(fe);
516
517
518 fe = Genesys_Frontend();
519 fe.id = AdcId::PLUSTEK_OPTICFILM_7300;
520 fe.layout = analog_devices;
521 fe.regs = {
522 { 0x00, 0xf8 },
523 { 0x01, 0x80 },
524 { 0x02, 0x10 },
525 { 0x03, 0x06 },
526 { 0x04, 0x06 },
527 { 0x05, 0x09 },
528 { 0x06, 0x0a },
529 { 0x07, 0x0102 },
530 };
531 fe.reg2 = {0x00, 0x00, 0x00};
532 s_frontends->push_back(fe);
533
534
535 fe = Genesys_Frontend();
536 fe.id = AdcId::PLUSTEK_OPTICFILM_7400;
537 fe.layout = analog_devices;
538 fe.regs = {
539 { 0x00, 0xf8 },
540 { 0x01, 0x80 },
541 { 0x02, 0x1f },
542 { 0x03, 0x14 },
543 { 0x04, 0x19 },
544 { 0x05, 0x1b },
545 { 0x06, 0x1e },
546 { 0x07, 0x0e },
547 };
548 fe.reg2 = {0x00, 0x00, 0x00};
549 s_frontends->push_back(fe);
550
551
552 fe = Genesys_Frontend();
553 fe.id = AdcId::PLUSTEK_OPTICFILM_7500I;
554 fe.layout = analog_devices;
555 fe.regs = {
556 { 0x00, 0xf8 },
557 { 0x01, 0x80 },
558 { 0x02, 0x1d },
559 { 0x03, 0x17 },
560 { 0x04, 0x13 },
561 { 0x05, 0x00 },
562 { 0x06, 0x00 },
563 { 0x07, 0x0111 },
564 };
565 fe.reg2 = {0x00, 0x00, 0x00};
566 s_frontends->push_back(fe);
567
568
569 fe = Genesys_Frontend();
570 fe.id = AdcId::PLUSTEK_OPTICFILM_8200I;
571 fe.layout = analog_devices;
572 fe.regs = {
573 { 0x00, 0xf8 },
574 { 0x01, 0x80 },
575 { 0x02, 0x28 },
576 { 0x03, 0x20 },
577 { 0x04, 0x28 },
578 { 0x05, 0x2f },
579 { 0x06, 0x2d },
580 { 0x07, 0x23 },
581 };
582 fe.reg2 = {0x00, 0x00, 0x00};
583 s_frontends->push_back(fe);
584
585
586 fe = Genesys_Frontend();
587 fe.id = AdcId::CANON_4400F;
588 fe.layout = wolfson_layout;
589 fe.regs = {
590 { 0x00, 0x00 },
591 { 0x01, 0x23 },
592 { 0x02, 0x24 },
593 { 0x03, 0x2f },
594 { 0x20, 0x6d },
595 { 0x21, 0x67 },
596 { 0x22, 0x5b },
597 { 0x24, 0x00 },
598 { 0x25, 0x00 },
599 { 0x26, 0x00 },
600 { 0x28, 0xd8 },
601 { 0x29, 0xd1 },
602 { 0x2a, 0xb9 },
603 };
604 fe.reg2 = {0x00, 0x00, 0x00};
605 s_frontends->push_back(fe);
606
607
608 fe = Genesys_Frontend();
609 fe.id = AdcId::CANON_5600F;
610 fe.layout = wolfson_layout;
611 fe.regs = {
612 { 0x01, 0x23 },
613 { 0x02, 0x24 },
614 { 0x03, 0x2f },
615 { 0x06, 0x00 },
616 { 0x08, 0x00 },
617 { 0x09, 0x00 },
618 { 0x20, 0x60 },
619 { 0x21, 0x60 },
620 { 0x22, 0x60 },
621 { 0x28, 0x77 },
622 { 0x29, 0x77 },
623 { 0x2a, 0x77 },
624 };
625 s_frontends->push_back(fe);
626
627
628 fe = Genesys_Frontend();
629 fe.id = AdcId::CANON_8400F;
630 fe.layout = wolfson_layout;
631 fe.regs = {
632 { 0x00, 0x00 },
633 { 0x01, 0x23 },
634 { 0x02, 0x24 },
635 { 0x03, 0x0f },
636 { 0x20, 0x60 },
637 { 0x21, 0x5c },
638 { 0x22, 0x6c },
639 { 0x24, 0x00 },
640 { 0x25, 0x00 },
641 { 0x26, 0x00 },
642 { 0x28, 0x8a },
643 { 0x29, 0x9f },
644 { 0x2a, 0xc2 },
645 };
646 fe.reg2 = {0x00, 0x00, 0x00};
647 s_frontends->push_back(fe);
648
649
650 fe = Genesys_Frontend();
651 fe.id = AdcId::CANON_8600F;
652 fe.layout = wolfson_layout;
653 fe.regs = {
654 { 0x00, 0x00 },
655 { 0x01, 0x23 },
656 { 0x02, 0x24 },
657 { 0x03, 0x2f },
658 { 0x20, 0x67 },
659 { 0x21, 0x69 },
660 { 0x22, 0x68 },
661 { 0x24, 0x00 },
662 { 0x25, 0x00 },
663 { 0x26, 0x00 },
664 { 0x28, 0xdb },
665 { 0x29, 0xda },
666 { 0x2a, 0xd7 },
667 };
668 fe.reg2 = { 0x00, 0x00, 0x00 };
669 s_frontends->push_back(fe);
670
671
672 fe = Genesys_Frontend();
673 fe.id = AdcId::IMG101;
674 fe.layout = wolfson_layout;
675 fe.layout.type = FrontendType::WOLFSON_GL846;
676 fe.regs = {
677 { 0x00, 0x78 },
678 { 0x01, 0xf0 },
679 { 0x02, 0x00 },
680 { 0x03, 0x00 },
681 { 0x20, 0x00 },
682 { 0x21, 0x00 },
683 { 0x22, 0x00 },
684 { 0x24, 0x00 },
685 { 0x25, 0x00 },
686 { 0x26, 0x00 },
687 { 0x28, 0x00 },
688 { 0x29, 0x00 },
689 { 0x2a, 0x00 },
690 };
691 fe.reg2 = {0x00, 0x00, 0x00};
692 s_frontends->push_back(fe);
693
694
695 fe = Genesys_Frontend();
696 fe.id = AdcId::PLUSTEK_OPTICBOOK_3800;
697 fe.layout = wolfson_layout;
698 fe.layout.type = FrontendType::WOLFSON_GL846;
699 fe.regs = {
700 { 0x00, 0x78 },
701 { 0x01, 0xf0 },
702 { 0x02, 0x00 },
703 { 0x03, 0x00 },
704 { 0x20, 0x00 },
705 { 0x21, 0x00 },
706 { 0x22, 0x00 },
707 { 0x24, 0x00 },
708 { 0x25, 0x00 },
709 { 0x26, 0x00 },
710 { 0x28, 0x00 },
711 { 0x29, 0x00 },
712 { 0x2a, 0x00 },
713 };
714 fe.reg2 = {0x00, 0x00, 0x00};
715 s_frontends->push_back(fe);
716
717
718 /* reg0: control 74 data, 70 no data
719 * reg3: offset
720 * reg6: gain
721 * reg0 , reg3, reg6 */
722 fe = Genesys_Frontend();
723 fe.id = AdcId::CANON_LIDE_80;
724 fe.layout = wolfson_layout;
725 fe.layout.type = FrontendType::CANON_LIDE_80;
726 fe.regs = {
727 { 0x00, 0x70 },
728 { 0x01, 0x16 },
729 { 0x02, 0x60 },
730 { 0x03, 0x00 },
731 { 0x20, 0x00 },
732 { 0x21, 0x00 },
733 { 0x22, 0x00 },
734 { 0x24, 0x00 },
735 { 0x25, 0x00 },
736 { 0x26, 0x00 },
737 { 0x28, 0x00 },
738 { 0x29, 0x00 },
739 { 0x2a, 0x00 },
740 };
741 fe.reg2 = {0x00, 0x00, 0x00};
742 s_frontends->push_back(fe);
743 }
744
745 } // namespace genesys
746