xref: /OK3568_Linux_fs/kernel/drivers/media/usb/cx231xx/cx231xx-pcb-cfg.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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