cregit-Linux how code gets into the kernel

Release 4.11 drivers/media/usb/cx231xx/cx231xx-pcb-cfg.c

/*
   cx231xx-pcb-config.c - driver for Conexant
                Cx23100/101/102 USB video capture devices

   Copyright (C) 2008 <srinivasa.deevi at conexant dot com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "cx231xx.h"
#include "cx231xx-conf-reg.h"


static unsigned int pcb_debug;
module_param(pcb_debug, int, 0644);
MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]");

/******************************************************************************/


static struct pcb_config cx231xx_Scenario[] = {
	{
	 INDEX_SELFPOWER_DIGITAL_ONLY,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 MOD_DIGITAL,		/* mode */
	 SOURCE_TS_BDA,		/* ts1_source, digital tv only */
	 NOT_SUPPORTED,		/* ts2_source  */
	 NOT_SUPPORTED,		/* analog source */

	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index   */
	 0,			/* external_index */

	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   ,
           }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed config */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_SELFPOWER_DUAL_DIGITAL,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 MOD_DIGITAL,		/* mode */
	 SOURCE_TS_BDA,		/* ts1_source, digital tv only */
	 0,			/* ts2_source,need update from register */
	 NOT_SUPPORTED,		/* analog source */
	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */

	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    2,			/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    2,			/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_SELFPOWER_ANALOG_ONLY,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 MOD_ANALOG | MOD_DIF | MOD_EXTERNAL,	/* mode ,analog tv only */
	 NOT_SUPPORTED,		/* ts1_source, NOT SUPPORT */
	 NOT_SUPPORTED,		/* ts2_source,NOT SUPPORT */
	 0,			/* analog source, need update */

	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */

	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    1,			/* AUDIO */
	    2,			/* VIDEO */
	    3,			/* VANC */
	    4,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    1,			/* AUDIO */
	    2,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_SELFPOWER_DUAL,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 /* mode ,analog tv and digital path */
	 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
	 0,			/* ts1_source,will update in register */
	 NOT_SUPPORTED,		/* ts2_source,NOT SUPPORT */
	 0,			/* analog source need update */
	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */
	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    4,			/* VANC */
	    5,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_SELFPOWER_TRIPLE,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 /* mode ,analog tv and digital path */
	 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
	 0,			/* ts1_source, update in register */
	 0,			/* ts2_source,update in register */
	 0,			/* analog source, need update */

	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */
	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    2,			/* TS2 index */
	    3,			/* AUDIO */
	    4,			/* VIDEO */
	    5,			/* VANC */
	    6,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    2,			/* TS2 index */
	    3,			/* AUDIO */
	    4,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_SELFPOWER_COMPRESSOR,	/* index */
	 USB_SELF_POWER,	/* power_type */
	 0,			/* speed , not decide yet */
	 /* mode ,analog tv AND DIGITAL path */
	 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
	 NOT_SUPPORTED,		/* ts1_source, disable */
	 SOURCE_TS_BDA,		/* ts2_source */
	 0,			/* analog source,need update */
	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */
	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    1,			/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    4,			/* VANC */
	    5,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed  */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    1,			/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

	{
	 INDEX_BUSPOWER_DIGITAL_ONLY,	/* index */
	 USB_BUS_POWER,		/* power_type */
	 0,			/* speed , not decide yet */
	 MOD_DIGITAL,		/* mode ,analog tv AND DIGITAL path */
	 SOURCE_TS_BDA,		/* ts1_source, disable */
	 NOT_SUPPORTED,		/* ts2_source */
	 NOT_SUPPORTED,		/* analog source */

	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */

	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index  = 2 */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 /* full-speed */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index  = 2 */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    NOT_SUPPORTED,	/* AUDIO */
	    NOT_SUPPORTED,	/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,
	{
	 INDEX_BUSPOWER_ANALOG_ONLY,	/* index */
	 USB_BUS_POWER,		/* power_type */
	 0,			/* speed , not decide yet */
	 MOD_ANALOG,		/* mode ,analog tv AND DIGITAL path */
	 NOT_SUPPORTED,		/* ts1_source, disable */
	 NOT_SUPPORTED,		/* ts2_source */
	 SOURCE_ANALOG,		/* analog source--analog */
	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */
	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    1,			/* AUDIO */
	    2,			/* VIDEO */
	    3,			/* VANC */
	    4,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 {			/* full-speed */
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    NOT_SUPPORTED,	/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    1,			/* AUDIO */
	    2,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,
	{
	 INDEX_BUSPOWER_DIF_ONLY,	/* index */
	 USB_BUS_POWER,		/* power_type */
	 0,			/* speed , not decide yet */
	 /* mode ,analog tv AND DIGITAL path */
	 MOD_DIF | MOD_ANALOG | MOD_DIGITAL | MOD_EXTERNAL,
	 SOURCE_TS_BDA,		/* ts1_source, disable */
	 NOT_SUPPORTED,		/* ts2_source */
	 SOURCE_DIF | SOURCE_ANALOG | SOURCE_EXTERNAL,	/* analog source, dif */
	 0,			/* digital_index  */
	 0,			/* analog index */
	 0,			/* dif_index */
	 0,			/* external_index */
	 1,			/* only one configuration */
	 {
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    4,			/* VANC */
	    5,			/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 ,
	 {			/* full speed */
	  {
	   0,			/* config index */
	   {
	    0,			/* interrupt ep index */
	    1,			/* ts1 index */
	    NOT_SUPPORTED,	/* TS2 index */
	    2,			/* AUDIO */
	    3,			/* VIDEO */
	    NOT_SUPPORTED,	/* VANC */
	    NOT_SUPPORTED,	/* HANC */
	    NOT_SUPPORTED	/* ir_index */
	    }
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  ,
	  {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
			   NOT_SUPPORTED}
	   }
	  }
	 }
	,

};

/*****************************************************************/


int initialize_cx231xx(struct cx231xx *dev) { int retval; u32 config_info = 0; struct pcb_config *p_pcb_info; u8 usb_speed = 1; /* from register,1--HS, 0--FS */ u8 data[4] = { 0, 0, 0, 0 }; u32 ts1_source = 0; u32 ts2_source = 0; u32 analog_source = 0; u8 _current_scenario_idx = 0xff; ts1_source = SOURCE_TS_BDA; ts2_source = SOURCE_TS_BDA; /* read board config register to find out which pcb config it is related to */ retval = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, BOARD_CFG_STAT, data, 4); if (retval < 0) return retval; config_info = le32_to_cpu(*((__le32 *)data)); usb_speed = (u8) (config_info & 0x1); /* Verify this device belongs to Bus power or Self power device */ if (config_info & BUS_POWER) { /* bus-power */ switch (config_info & BUSPOWER_MASK) { case TS1_PORT | BUS_POWER: cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY].speed = usb_speed; p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY]; _current_scenario_idx = INDEX_BUSPOWER_DIGITAL_ONLY; break; case AVDEC_ENABLE | BUS_POWER: cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY].speed = usb_speed; p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY]; _current_scenario_idx = INDEX_BUSPOWER_ANALOG_ONLY; break; case AVDEC_ENABLE | BUS_POWER | TS1_PORT: cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY].speed = usb_speed; p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY]; _current_scenario_idx = INDEX_BUSPOWER_DIF_ONLY; break; default: dev_err(dev->dev, "bad config in buspower!!!!\nconfig_info=%x\n", config_info & BUSPOWER_MASK); return 1; } } else { /* self-power */ switch (config_info & SELFPOWER_MASK) { case TS1_PORT | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY].speed = usb_speed; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY]; _current_scenario_idx = INDEX_SELFPOWER_DIGITAL_ONLY; break; case TS1_TS2_PORT | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL].speed = usb_speed; cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]. ts2_source = ts2_source; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]; _current_scenario_idx = INDEX_SELFPOWER_DUAL_DIGITAL; break; case AVDEC_ENABLE | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY].speed = usb_speed; cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]. analog_source = analog_source; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]; _current_scenario_idx = INDEX_SELFPOWER_ANALOG_ONLY; break; case AVDEC_ENABLE | TS1_PORT | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_DUAL].speed = usb_speed; cx231xx_Scenario[INDEX_SELFPOWER_DUAL].ts1_source = ts1_source; cx231xx_Scenario[INDEX_SELFPOWER_DUAL].analog_source = analog_source; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DUAL]; _current_scenario_idx = INDEX_SELFPOWER_DUAL; break; case AVDEC_ENABLE | TS1_TS2_PORT | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].speed = usb_speed; cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts1_source = ts1_source; cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts2_source = ts2_source; cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].analog_source = analog_source; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE]; _current_scenario_idx = INDEX_SELFPOWER_TRIPLE; break; case AVDEC_ENABLE | TS1VIP_TS2_PORT | SELF_POWER: cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR].speed = usb_speed; cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]. analog_source = analog_source; p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]; _current_scenario_idx = INDEX_SELFPOWER_COMPRESSOR; break; default: dev_err(dev->dev, "bad senario!!!!!\nconfig_info=%x\n", config_info & SELFPOWER_MASK); return -ENODEV; } } dev->current_scenario_idx = _current_scenario_idx; memcpy(&dev->current_pcb_config, p_pcb_info, sizeof(struct pcb_config)); if (pcb_debug) { dev_info(dev->dev, "SC(0x00) register = 0x%x\n", config_info); dev_info(dev->dev, "scenario %d\n", (dev->current_pcb_config.index) + 1); dev_info(dev->dev, "type=%x\n", dev->current_pcb_config.type); dev_info(dev->dev, "mode=%x\n", dev->current_pcb_config.mode); dev_info(dev->dev, "speed=%x\n", dev->current_pcb_config.speed); dev_info(dev->dev, "ts1_source=%x\n", dev->current_pcb_config.ts1_source); dev_info(dev->dev, "ts2_source=%x\n", dev->current_pcb_config.ts2_source); dev_info(dev->dev, "analog_source=%x\n", dev->current_pcb_config.analog_source); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Sri Deevi57486.71%116.67%
Mauro Carvalho Chehab8412.69%350.00%
Hans Verkuil40.60%233.33%
Total662100.00%6100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Sri Deevi228795.41%116.67%
Mauro Carvalho Chehab1054.38%350.00%
Hans Verkuil50.21%233.33%
Total2397100.00%6100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.