1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | cx231xx-pcb-config.c - driver for Conexant |
4 | Cx23100/101/102 USB video capture devices |
5 | |
6 | Copyright (C) 2008 <srinivasa.deevi at conexant dot com> |
7 | |
8 | */ |
9 | |
10 | #include "cx231xx.h" |
11 | #include "cx231xx-conf-reg.h" |
12 | |
13 | static unsigned int pcb_debug; |
14 | module_param(pcb_debug, int, 0644); |
15 | MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]" ); |
16 | |
17 | /******************************************************************************/ |
18 | |
19 | static struct pcb_config cx231xx_Scenario[] = { |
20 | { |
21 | INDEX_SELFPOWER_DIGITAL_ONLY, /* index */ |
22 | USB_SELF_POWER, /* power_type */ |
23 | 0, /* speed , not decide yet */ |
24 | MOD_DIGITAL, /* mode */ |
25 | SOURCE_TS_BDA, /* ts1_source, digital tv only */ |
26 | NOT_SUPPORTED, /* ts2_source */ |
27 | NOT_SUPPORTED, /* analog source */ |
28 | |
29 | 0, /* digital_index */ |
30 | 0, /* analog index */ |
31 | 0, /* dif_index */ |
32 | 0, /* external_index */ |
33 | |
34 | 1, /* only one configuration */ |
35 | { |
36 | { |
37 | 0, /* config index */ |
38 | { |
39 | 0, /* interrupt ep index */ |
40 | 1, /* ts1 index */ |
41 | NOT_SUPPORTED, /* TS2 index */ |
42 | NOT_SUPPORTED, /* AUDIO */ |
43 | NOT_SUPPORTED, /* VIDEO */ |
44 | NOT_SUPPORTED, /* VANC */ |
45 | NOT_SUPPORTED, /* HANC */ |
46 | NOT_SUPPORTED /* ir_index */ |
47 | } |
48 | , |
49 | } |
50 | , |
51 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
52 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
53 | NOT_SUPPORTED} |
54 | } |
55 | , |
56 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
57 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
58 | NOT_SUPPORTED} |
59 | } |
60 | } |
61 | , |
62 | /* full-speed config */ |
63 | { |
64 | { |
65 | 0, /* config index */ |
66 | { |
67 | 0, /* interrupt ep index */ |
68 | 1, /* ts1 index */ |
69 | NOT_SUPPORTED, /* TS2 index */ |
70 | NOT_SUPPORTED, /* AUDIO */ |
71 | NOT_SUPPORTED, /* VIDEO */ |
72 | NOT_SUPPORTED, /* VANC */ |
73 | NOT_SUPPORTED, /* HANC */ |
74 | NOT_SUPPORTED /* ir_index */ |
75 | } |
76 | } |
77 | , |
78 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
79 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
80 | NOT_SUPPORTED} |
81 | } |
82 | , |
83 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
84 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
85 | NOT_SUPPORTED} |
86 | } |
87 | } |
88 | } |
89 | , |
90 | |
91 | { |
92 | INDEX_SELFPOWER_DUAL_DIGITAL, /* index */ |
93 | USB_SELF_POWER, /* power_type */ |
94 | 0, /* speed , not decide yet */ |
95 | MOD_DIGITAL, /* mode */ |
96 | SOURCE_TS_BDA, /* ts1_source, digital tv only */ |
97 | 0, /* ts2_source,need update from register */ |
98 | NOT_SUPPORTED, /* analog source */ |
99 | 0, /* digital_index */ |
100 | 0, /* analog index */ |
101 | 0, /* dif_index */ |
102 | 0, /* external_index */ |
103 | |
104 | 1, /* only one configuration */ |
105 | { |
106 | { |
107 | 0, /* config index */ |
108 | { |
109 | 0, /* interrupt ep index */ |
110 | 1, /* ts1 index */ |
111 | 2, /* TS2 index */ |
112 | NOT_SUPPORTED, /* AUDIO */ |
113 | NOT_SUPPORTED, /* VIDEO */ |
114 | NOT_SUPPORTED, /* VANC */ |
115 | NOT_SUPPORTED, /* HANC */ |
116 | NOT_SUPPORTED /* ir_index */ |
117 | } |
118 | } |
119 | , |
120 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
121 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
122 | NOT_SUPPORTED} |
123 | } |
124 | , |
125 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
126 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
127 | NOT_SUPPORTED} |
128 | } |
129 | } |
130 | , |
131 | /* full-speed */ |
132 | { |
133 | { |
134 | 0, /* config index */ |
135 | { |
136 | 0, /* interrupt ep index */ |
137 | 1, /* ts1 index */ |
138 | 2, /* TS2 index */ |
139 | NOT_SUPPORTED, /* AUDIO */ |
140 | NOT_SUPPORTED, /* VIDEO */ |
141 | NOT_SUPPORTED, /* VANC */ |
142 | NOT_SUPPORTED, /* HANC */ |
143 | NOT_SUPPORTED /* ir_index */ |
144 | } |
145 | } |
146 | , |
147 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
148 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
149 | NOT_SUPPORTED} |
150 | } |
151 | , |
152 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
153 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
154 | NOT_SUPPORTED} |
155 | } |
156 | } |
157 | } |
158 | , |
159 | |
160 | { |
161 | INDEX_SELFPOWER_ANALOG_ONLY, /* index */ |
162 | USB_SELF_POWER, /* power_type */ |
163 | 0, /* speed , not decide yet */ |
164 | MOD_ANALOG | MOD_DIF | MOD_EXTERNAL, /* mode ,analog tv only */ |
165 | NOT_SUPPORTED, /* ts1_source, NOT SUPPORT */ |
166 | NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */ |
167 | 0, /* analog source, need update */ |
168 | |
169 | 0, /* digital_index */ |
170 | 0, /* analog index */ |
171 | 0, /* dif_index */ |
172 | 0, /* external_index */ |
173 | |
174 | 1, /* only one configuration */ |
175 | { |
176 | { |
177 | 0, /* config index */ |
178 | { |
179 | 0, /* interrupt ep index */ |
180 | NOT_SUPPORTED, /* ts1 index */ |
181 | NOT_SUPPORTED, /* TS2 index */ |
182 | 1, /* AUDIO */ |
183 | 2, /* VIDEO */ |
184 | 3, /* VANC */ |
185 | 4, /* HANC */ |
186 | NOT_SUPPORTED /* ir_index */ |
187 | } |
188 | } |
189 | , |
190 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
191 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
192 | NOT_SUPPORTED} |
193 | } |
194 | , |
195 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
196 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
197 | NOT_SUPPORTED} |
198 | } |
199 | } |
200 | , |
201 | /* full-speed */ |
202 | { |
203 | { |
204 | 0, /* config index */ |
205 | { |
206 | 0, /* interrupt ep index */ |
207 | NOT_SUPPORTED, /* ts1 index */ |
208 | NOT_SUPPORTED, /* TS2 index */ |
209 | 1, /* AUDIO */ |
210 | 2, /* VIDEO */ |
211 | NOT_SUPPORTED, /* VANC */ |
212 | NOT_SUPPORTED, /* HANC */ |
213 | NOT_SUPPORTED /* ir_index */ |
214 | } |
215 | } |
216 | , |
217 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
218 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
219 | NOT_SUPPORTED} |
220 | } |
221 | , |
222 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
223 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
224 | NOT_SUPPORTED} |
225 | } |
226 | } |
227 | } |
228 | , |
229 | |
230 | { |
231 | INDEX_SELFPOWER_DUAL, /* index */ |
232 | USB_SELF_POWER, /* power_type */ |
233 | 0, /* speed , not decide yet */ |
234 | /* mode ,analog tv and digital path */ |
235 | MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, |
236 | 0, /* ts1_source,will update in register */ |
237 | NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */ |
238 | 0, /* analog source need update */ |
239 | 0, /* digital_index */ |
240 | 0, /* analog index */ |
241 | 0, /* dif_index */ |
242 | 0, /* external_index */ |
243 | 1, /* only one configuration */ |
244 | { |
245 | { |
246 | 0, /* config index */ |
247 | { |
248 | 0, /* interrupt ep index */ |
249 | 1, /* ts1 index */ |
250 | NOT_SUPPORTED, /* TS2 index */ |
251 | 2, /* AUDIO */ |
252 | 3, /* VIDEO */ |
253 | 4, /* VANC */ |
254 | 5, /* HANC */ |
255 | NOT_SUPPORTED /* ir_index */ |
256 | } |
257 | } |
258 | , |
259 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
260 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
261 | NOT_SUPPORTED} |
262 | } |
263 | , |
264 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
265 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
266 | NOT_SUPPORTED} |
267 | } |
268 | } |
269 | , |
270 | /* full-speed */ |
271 | { |
272 | { |
273 | 0, /* config index */ |
274 | { |
275 | 0, /* interrupt ep index */ |
276 | 1, /* ts1 index */ |
277 | NOT_SUPPORTED, /* TS2 index */ |
278 | 2, /* AUDIO */ |
279 | 3, /* VIDEO */ |
280 | NOT_SUPPORTED, /* VANC */ |
281 | NOT_SUPPORTED, /* HANC */ |
282 | NOT_SUPPORTED /* ir_index */ |
283 | } |
284 | } |
285 | , |
286 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
287 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
288 | NOT_SUPPORTED} |
289 | } |
290 | , |
291 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
292 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
293 | NOT_SUPPORTED} |
294 | } |
295 | } |
296 | } |
297 | , |
298 | |
299 | { |
300 | INDEX_SELFPOWER_TRIPLE, /* index */ |
301 | USB_SELF_POWER, /* power_type */ |
302 | 0, /* speed , not decide yet */ |
303 | /* mode ,analog tv and digital path */ |
304 | MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, |
305 | 0, /* ts1_source, update in register */ |
306 | 0, /* ts2_source,update in register */ |
307 | 0, /* analog source, need update */ |
308 | |
309 | 0, /* digital_index */ |
310 | 0, /* analog index */ |
311 | 0, /* dif_index */ |
312 | 0, /* external_index */ |
313 | 1, /* only one configuration */ |
314 | { |
315 | { |
316 | 0, /* config index */ |
317 | { |
318 | 0, /* interrupt ep index */ |
319 | 1, /* ts1 index */ |
320 | 2, /* TS2 index */ |
321 | 3, /* AUDIO */ |
322 | 4, /* VIDEO */ |
323 | 5, /* VANC */ |
324 | 6, /* HANC */ |
325 | NOT_SUPPORTED /* ir_index */ |
326 | } |
327 | } |
328 | , |
329 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
330 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
331 | NOT_SUPPORTED} |
332 | } |
333 | , |
334 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
335 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
336 | NOT_SUPPORTED} |
337 | } |
338 | } |
339 | , |
340 | /* full-speed */ |
341 | { |
342 | { |
343 | 0, /* config index */ |
344 | { |
345 | 0, /* interrupt ep index */ |
346 | 1, /* ts1 index */ |
347 | 2, /* TS2 index */ |
348 | 3, /* AUDIO */ |
349 | 4, /* VIDEO */ |
350 | NOT_SUPPORTED, /* VANC */ |
351 | NOT_SUPPORTED, /* HANC */ |
352 | NOT_SUPPORTED /* ir_index */ |
353 | } |
354 | } |
355 | , |
356 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
357 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
358 | NOT_SUPPORTED} |
359 | } |
360 | , |
361 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
362 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
363 | NOT_SUPPORTED} |
364 | } |
365 | } |
366 | } |
367 | , |
368 | |
369 | { |
370 | INDEX_SELFPOWER_COMPRESSOR, /* index */ |
371 | USB_SELF_POWER, /* power_type */ |
372 | 0, /* speed , not decide yet */ |
373 | /* mode ,analog tv AND DIGITAL path */ |
374 | MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, |
375 | NOT_SUPPORTED, /* ts1_source, disable */ |
376 | SOURCE_TS_BDA, /* ts2_source */ |
377 | 0, /* analog source,need update */ |
378 | 0, /* digital_index */ |
379 | 0, /* analog index */ |
380 | 0, /* dif_index */ |
381 | 0, /* external_index */ |
382 | 1, /* only one configuration */ |
383 | { |
384 | { |
385 | 0, /* config index */ |
386 | { |
387 | 0, /* interrupt ep index */ |
388 | NOT_SUPPORTED, /* ts1 index */ |
389 | 1, /* TS2 index */ |
390 | 2, /* AUDIO */ |
391 | 3, /* VIDEO */ |
392 | 4, /* VANC */ |
393 | 5, /* HANC */ |
394 | NOT_SUPPORTED /* ir_index */ |
395 | } |
396 | } |
397 | , |
398 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
399 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
400 | NOT_SUPPORTED} |
401 | } |
402 | , |
403 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
404 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
405 | NOT_SUPPORTED} |
406 | } |
407 | } |
408 | , |
409 | /* full-speed */ |
410 | { |
411 | { |
412 | 0, /* config index */ |
413 | { |
414 | 0, /* interrupt ep index */ |
415 | NOT_SUPPORTED, /* ts1 index */ |
416 | 1, /* TS2 index */ |
417 | 2, /* AUDIO */ |
418 | 3, /* VIDEO */ |
419 | NOT_SUPPORTED, /* VANC */ |
420 | NOT_SUPPORTED, /* HANC */ |
421 | NOT_SUPPORTED /* ir_index */ |
422 | } |
423 | } |
424 | , |
425 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
426 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
427 | NOT_SUPPORTED} |
428 | } |
429 | , |
430 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
431 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
432 | NOT_SUPPORTED} |
433 | } |
434 | } |
435 | } |
436 | , |
437 | |
438 | { |
439 | INDEX_BUSPOWER_DIGITAL_ONLY, /* index */ |
440 | USB_BUS_POWER, /* power_type */ |
441 | 0, /* speed , not decide yet */ |
442 | MOD_DIGITAL, /* mode ,analog tv AND DIGITAL path */ |
443 | SOURCE_TS_BDA, /* ts1_source, disable */ |
444 | NOT_SUPPORTED, /* ts2_source */ |
445 | NOT_SUPPORTED, /* analog source */ |
446 | |
447 | 0, /* digital_index */ |
448 | 0, /* analog index */ |
449 | 0, /* dif_index */ |
450 | 0, /* external_index */ |
451 | |
452 | 1, /* only one configuration */ |
453 | { |
454 | { |
455 | 0, /* config index */ |
456 | { |
457 | 0, /* interrupt ep index = 2 */ |
458 | 1, /* ts1 index */ |
459 | NOT_SUPPORTED, /* TS2 index */ |
460 | NOT_SUPPORTED, /* AUDIO */ |
461 | NOT_SUPPORTED, /* VIDEO */ |
462 | NOT_SUPPORTED, /* VANC */ |
463 | NOT_SUPPORTED, /* HANC */ |
464 | NOT_SUPPORTED /* ir_index */ |
465 | } |
466 | } |
467 | , |
468 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
469 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
470 | NOT_SUPPORTED} |
471 | } |
472 | , |
473 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
474 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
475 | NOT_SUPPORTED} |
476 | } |
477 | } |
478 | , |
479 | /* full-speed */ |
480 | { |
481 | { |
482 | 0, /* config index */ |
483 | { |
484 | 0, /* interrupt ep index = 2 */ |
485 | 1, /* ts1 index */ |
486 | NOT_SUPPORTED, /* TS2 index */ |
487 | NOT_SUPPORTED, /* AUDIO */ |
488 | NOT_SUPPORTED, /* VIDEO */ |
489 | NOT_SUPPORTED, /* VANC */ |
490 | NOT_SUPPORTED, /* HANC */ |
491 | NOT_SUPPORTED /* ir_index */ |
492 | } |
493 | } |
494 | , |
495 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
496 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
497 | NOT_SUPPORTED} |
498 | } |
499 | , |
500 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
501 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
502 | NOT_SUPPORTED} |
503 | } |
504 | } |
505 | } |
506 | , |
507 | { |
508 | INDEX_BUSPOWER_ANALOG_ONLY, /* index */ |
509 | USB_BUS_POWER, /* power_type */ |
510 | 0, /* speed , not decide yet */ |
511 | MOD_ANALOG, /* mode ,analog tv AND DIGITAL path */ |
512 | NOT_SUPPORTED, /* ts1_source, disable */ |
513 | NOT_SUPPORTED, /* ts2_source */ |
514 | SOURCE_ANALOG, /* analog source--analog */ |
515 | 0, /* digital_index */ |
516 | 0, /* analog index */ |
517 | 0, /* dif_index */ |
518 | 0, /* external_index */ |
519 | 1, /* only one configuration */ |
520 | { |
521 | { |
522 | 0, /* config index */ |
523 | { |
524 | 0, /* interrupt ep index */ |
525 | NOT_SUPPORTED, /* ts1 index */ |
526 | NOT_SUPPORTED, /* TS2 index */ |
527 | 1, /* AUDIO */ |
528 | 2, /* VIDEO */ |
529 | 3, /* VANC */ |
530 | 4, /* HANC */ |
531 | NOT_SUPPORTED /* ir_index */ |
532 | } |
533 | } |
534 | , |
535 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
536 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
537 | NOT_SUPPORTED} |
538 | } |
539 | , |
540 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
541 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
542 | NOT_SUPPORTED} |
543 | } |
544 | } |
545 | , |
546 | { /* full-speed */ |
547 | { |
548 | 0, /* config index */ |
549 | { |
550 | 0, /* interrupt ep index */ |
551 | NOT_SUPPORTED, /* ts1 index */ |
552 | NOT_SUPPORTED, /* TS2 index */ |
553 | 1, /* AUDIO */ |
554 | 2, /* VIDEO */ |
555 | NOT_SUPPORTED, /* VANC */ |
556 | NOT_SUPPORTED, /* HANC */ |
557 | NOT_SUPPORTED /* ir_index */ |
558 | } |
559 | } |
560 | , |
561 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
562 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
563 | NOT_SUPPORTED} |
564 | } |
565 | , |
566 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
567 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
568 | NOT_SUPPORTED} |
569 | } |
570 | } |
571 | } |
572 | , |
573 | { |
574 | INDEX_BUSPOWER_DIF_ONLY, /* index */ |
575 | USB_BUS_POWER, /* power_type */ |
576 | 0, /* speed , not decide yet */ |
577 | /* mode ,analog tv AND DIGITAL path */ |
578 | MOD_DIF | MOD_ANALOG | MOD_DIGITAL | MOD_EXTERNAL, |
579 | SOURCE_TS_BDA, /* ts1_source, disable */ |
580 | NOT_SUPPORTED, /* ts2_source */ |
581 | SOURCE_DIF | SOURCE_ANALOG | SOURCE_EXTERNAL, /* analog source, dif */ |
582 | 0, /* digital_index */ |
583 | 0, /* analog index */ |
584 | 0, /* dif_index */ |
585 | 0, /* external_index */ |
586 | 1, /* only one configuration */ |
587 | { |
588 | { |
589 | 0, /* config index */ |
590 | { |
591 | 0, /* interrupt ep index */ |
592 | 1, /* ts1 index */ |
593 | NOT_SUPPORTED, /* TS2 index */ |
594 | 2, /* AUDIO */ |
595 | 3, /* VIDEO */ |
596 | 4, /* VANC */ |
597 | 5, /* HANC */ |
598 | NOT_SUPPORTED /* ir_index */ |
599 | } |
600 | } |
601 | , |
602 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
603 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
604 | NOT_SUPPORTED} |
605 | } |
606 | , |
607 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
608 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
609 | NOT_SUPPORTED} |
610 | } |
611 | } |
612 | , |
613 | { /* full speed */ |
614 | { |
615 | 0, /* config index */ |
616 | { |
617 | 0, /* interrupt ep index */ |
618 | 1, /* ts1 index */ |
619 | NOT_SUPPORTED, /* TS2 index */ |
620 | 2, /* AUDIO */ |
621 | 3, /* VIDEO */ |
622 | NOT_SUPPORTED, /* VANC */ |
623 | NOT_SUPPORTED, /* HANC */ |
624 | NOT_SUPPORTED /* ir_index */ |
625 | } |
626 | } |
627 | , |
628 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
629 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
630 | NOT_SUPPORTED} |
631 | } |
632 | , |
633 | {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
634 | NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, |
635 | NOT_SUPPORTED} |
636 | } |
637 | } |
638 | } |
639 | , |
640 | |
641 | }; |
642 | |
643 | /*****************************************************************/ |
644 | |
645 | int initialize_cx231xx(struct cx231xx *dev) |
646 | { |
647 | int retval; |
648 | u32 config_info = 0; |
649 | struct pcb_config *p_pcb_info; |
650 | u8 usb_speed = 1; /* from register,1--HS, 0--FS */ |
651 | u8 data[4] = { 0, 0, 0, 0 }; |
652 | u32 ts1_source = 0; |
653 | u32 ts2_source = 0; |
654 | u32 analog_source = 0; |
655 | u8 _current_scenario_idx = 0xff; |
656 | |
657 | ts1_source = SOURCE_TS_BDA; |
658 | ts2_source = SOURCE_TS_BDA; |
659 | |
660 | /* read board config register to find out which |
661 | pcb config it is related to */ |
662 | retval = cx231xx_read_ctrl_reg(dev, req: VRT_GET_REGISTER, BOARD_CFG_STAT, |
663 | buf: data, len: 4); |
664 | if (retval < 0) |
665 | return retval; |
666 | |
667 | config_info = le32_to_cpu(*((__le32 *)data)); |
668 | usb_speed = (u8) (config_info & 0x1); |
669 | |
670 | /* Verify this device belongs to Bus power or Self power device */ |
671 | if (config_info & BUS_POWER) { /* bus-power */ |
672 | switch (config_info & BUSPOWER_MASK) { |
673 | case TS1_PORT | BUS_POWER: |
674 | cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY].speed = |
675 | usb_speed; |
676 | p_pcb_info = |
677 | &cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY]; |
678 | _current_scenario_idx = INDEX_BUSPOWER_DIGITAL_ONLY; |
679 | break; |
680 | case AVDEC_ENABLE | BUS_POWER: |
681 | cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY].speed = |
682 | usb_speed; |
683 | p_pcb_info = |
684 | &cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY]; |
685 | _current_scenario_idx = INDEX_BUSPOWER_ANALOG_ONLY; |
686 | break; |
687 | case AVDEC_ENABLE | BUS_POWER | TS1_PORT: |
688 | cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY].speed = |
689 | usb_speed; |
690 | p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY]; |
691 | _current_scenario_idx = INDEX_BUSPOWER_DIF_ONLY; |
692 | break; |
693 | default: |
694 | dev_err(dev->dev, |
695 | "bad config in buspower!!!!\nconfig_info=%x\n" , |
696 | config_info & BUSPOWER_MASK); |
697 | return 1; |
698 | } |
699 | } else { /* self-power */ |
700 | |
701 | switch (config_info & SELFPOWER_MASK) { |
702 | case TS1_PORT | SELF_POWER: |
703 | cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY].speed = |
704 | usb_speed; |
705 | p_pcb_info = |
706 | &cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY]; |
707 | _current_scenario_idx = INDEX_SELFPOWER_DIGITAL_ONLY; |
708 | break; |
709 | case TS1_TS2_PORT | SELF_POWER: |
710 | cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL].speed = |
711 | usb_speed; |
712 | cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]. |
713 | ts2_source = ts2_source; |
714 | p_pcb_info = |
715 | &cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]; |
716 | _current_scenario_idx = INDEX_SELFPOWER_DUAL_DIGITAL; |
717 | break; |
718 | case AVDEC_ENABLE | SELF_POWER: |
719 | cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY].speed = |
720 | usb_speed; |
721 | cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]. |
722 | analog_source = analog_source; |
723 | p_pcb_info = |
724 | &cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]; |
725 | _current_scenario_idx = INDEX_SELFPOWER_ANALOG_ONLY; |
726 | break; |
727 | case AVDEC_ENABLE | TS1_PORT | SELF_POWER: |
728 | cx231xx_Scenario[INDEX_SELFPOWER_DUAL].speed = |
729 | usb_speed; |
730 | cx231xx_Scenario[INDEX_SELFPOWER_DUAL].ts1_source = |
731 | ts1_source; |
732 | cx231xx_Scenario[INDEX_SELFPOWER_DUAL].analog_source = |
733 | analog_source; |
734 | p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DUAL]; |
735 | _current_scenario_idx = INDEX_SELFPOWER_DUAL; |
736 | break; |
737 | case AVDEC_ENABLE | TS1_TS2_PORT | SELF_POWER: |
738 | cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].speed = |
739 | usb_speed; |
740 | cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts1_source = |
741 | ts1_source; |
742 | cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts2_source = |
743 | ts2_source; |
744 | cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].analog_source = |
745 | analog_source; |
746 | p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE]; |
747 | _current_scenario_idx = INDEX_SELFPOWER_TRIPLE; |
748 | break; |
749 | case AVDEC_ENABLE | TS1VIP_TS2_PORT | SELF_POWER: |
750 | cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR].speed = |
751 | usb_speed; |
752 | cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]. |
753 | analog_source = analog_source; |
754 | p_pcb_info = |
755 | &cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]; |
756 | _current_scenario_idx = INDEX_SELFPOWER_COMPRESSOR; |
757 | break; |
758 | default: |
759 | dev_err(dev->dev, |
760 | "bad scenario!!!!!\nconfig_info=%x\n" , |
761 | config_info & SELFPOWER_MASK); |
762 | return -ENODEV; |
763 | } |
764 | } |
765 | |
766 | dev->current_scenario_idx = _current_scenario_idx; |
767 | |
768 | memcpy(&dev->current_pcb_config, p_pcb_info, |
769 | sizeof(struct pcb_config)); |
770 | |
771 | if (pcb_debug) { |
772 | dev_info(dev->dev, |
773 | "SC(0x00) register = 0x%x\n" , config_info); |
774 | dev_info(dev->dev, |
775 | "scenario %d\n" , |
776 | (dev->current_pcb_config.index) + 1); |
777 | dev_info(dev->dev, |
778 | "type=%x\n" , |
779 | dev->current_pcb_config.type); |
780 | dev_info(dev->dev, |
781 | "mode=%x\n" , |
782 | dev->current_pcb_config.mode); |
783 | dev_info(dev->dev, |
784 | "speed=%x\n" , |
785 | dev->current_pcb_config.speed); |
786 | dev_info(dev->dev, |
787 | "ts1_source=%x\n" , |
788 | dev->current_pcb_config.ts1_source); |
789 | dev_info(dev->dev, |
790 | "ts2_source=%x\n" , |
791 | dev->current_pcb_config.ts2_source); |
792 | dev_info(dev->dev, |
793 | "analog_source=%x\n" , |
794 | dev->current_pcb_config.analog_source); |
795 | } |
796 | |
797 | return 0; |
798 | } |
799 | |