mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
798 lines
20 KiB
798 lines
20 KiB
// SPDX-License-Identifier: GPL-2.0-or-later |
|
/* |
|
cx231xx-pcb-config.c - driver for Conexant |
|
Cx23100/101/102 USB video capture devices |
|
|
|
Copyright (C) 2008 <srinivasa.deevi at conexant dot com> |
|
|
|
*/ |
|
|
|
#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 scenario!!!!!\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; |
|
}
|
|
|