brintos

brintos / linux-shallow public Read only

0
0
Text · 20.0 KiB · bba4cfd Raw
799 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3   cx231xx-pcb-config.c - driver for Conexant4		Cx23100/101/102 USB video capture devices5 6   Copyright (C) 2008 <srinivasa.deevi at conexant dot com>7 8 */9 10#include "cx231xx.h"11#include "cx231xx-conf-reg.h"12 13static unsigned int pcb_debug;14module_param(pcb_debug, int, 0644);15MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]");16 17/******************************************************************************/18 19static 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 645int 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 which661	pcb config it is related to */662	retval = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, BOARD_CFG_STAT,663				       data, 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