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