|  | /* | 
|  | cx231xx-pcb-cfg.h - 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. | 
|  | */ | 
|  |  | 
|  | #ifndef _PCB_CONFIG_H_ | 
|  | #define _PCB_CONFIG_H_ | 
|  |  | 
|  | #include <linux/init.h> | 
|  | #include <linux/module.h> | 
|  |  | 
|  | /*************************************************************************** | 
|  | * Class Information * | 
|  | ***************************************************************************/ | 
|  | #define CLASS_DEFAULT       0xFF | 
|  |  | 
|  | enum VENDOR_REQUEST_TYPE { | 
|  | /* Set/Get I2C */ | 
|  | VRT_SET_I2C0 = 0x0, | 
|  | VRT_SET_I2C1 = 0x1, | 
|  | VRT_SET_I2C2 = 0x2, | 
|  | VRT_GET_I2C0 = 0x4, | 
|  | VRT_GET_I2C1 = 0x5, | 
|  | VRT_GET_I2C2 = 0x6, | 
|  |  | 
|  | /* Set/Get GPIO */ | 
|  | VRT_SET_GPIO = 0x8, | 
|  | VRT_GET_GPIO = 0x9, | 
|  |  | 
|  | /* Set/Get GPIE */ | 
|  | VRT_SET_GPIE = 0xA, | 
|  | VRT_GET_GPIE = 0xB, | 
|  |  | 
|  | /* Set/Get Register Control/Status */ | 
|  | VRT_SET_REGISTER = 0xC, | 
|  | VRT_GET_REGISTER = 0xD, | 
|  |  | 
|  | /* Get Extended Compat ID Descriptor */ | 
|  | VRT_GET_EXTCID_DESC = 0xFF, | 
|  | }; | 
|  |  | 
|  | enum BYTE_ENABLE_MASK { | 
|  | ENABLE_ONE_BYTE = 0x1, | 
|  | ENABLE_TWE_BYTE = 0x3, | 
|  | ENABLE_THREE_BYTE = 0x7, | 
|  | ENABLE_FOUR_BYTE = 0xF, | 
|  | }; | 
|  |  | 
|  | #define SPEED_MASK      0x1 | 
|  | enum USB_SPEED{ | 
|  | FULL_SPEED = 0x0,	/* 0: full speed */ | 
|  | HIGH_SPEED = 0x1	/* 1: high speed */ | 
|  | }; | 
|  |  | 
|  | #define TS_MASK         0x6 | 
|  | enum TS_PORT{ | 
|  | NO_TS_PORT = 0x0,	/* 2'b00: Neither port used. PCB not a Hybrid, | 
|  | only offers Analog TV or Video */ | 
|  | TS1_PORT = 0x4,		/* 2'b10: TS1 Input (Hybrid mode : | 
|  | Digital or External Analog/Compressed source) */ | 
|  | TS1_TS2_PORT = 0x6,	/* 2'b11: TS1 & TS2 Inputs | 
|  | (Dual inputs from Digital and/or | 
|  | External Analog/Compressed sources) */ | 
|  | TS1_EXT_CLOCK = 0x6,	/* 2'b11: TS1 & TS2 as selector | 
|  | to external clock */ | 
|  | TS1VIP_TS2_PORT = 0x2	/* 2'b01: TS1 used as 656/VIP Output, | 
|  | TS2 Input (from Compressor) */ | 
|  | }; | 
|  |  | 
|  | #define EAVP_MASK       0x8 | 
|  | enum EAV_PRESENT{ | 
|  | NO_EXTERNAL_AV = 0x0,	/* 0: No External A/V inputs | 
|  | (no need for i2s blcok), | 
|  | Analog Tuner must be present */ | 
|  | EXTERNAL_AV = 0x8	/* 1: External A/V inputs | 
|  | present (requires i2s blk) */ | 
|  | }; | 
|  |  | 
|  | #define ATM_MASK        0x30 | 
|  | enum AT_MODE{ | 
|  | DIF_TUNER = 0x30,	/* 2'b11: IF Tuner (requires use of DIF) */ | 
|  | BASEBAND_SOUND = 0x20,	/* 2'b10: Baseband Composite & | 
|  | Sound-IF Signals present */ | 
|  | NO_TUNER = 0x10		/* 2'b0x: No Analog Tuner present */ | 
|  | }; | 
|  |  | 
|  | #define PWR_SEL_MASK    0x40 | 
|  | enum POWE_TYPE{ | 
|  | SELF_POWER = 0x0,	/* 0: self power */ | 
|  | BUS_POWER = 0x40	/* 1: bus power */ | 
|  | }; | 
|  |  | 
|  | enum USB_POWE_TYPE{ | 
|  | USB_SELF_POWER = 0, | 
|  | USB_BUS_POWER | 
|  | }; | 
|  |  | 
|  | #define BO_0_MASK       0x80 | 
|  | enum AVDEC_STATUS{ | 
|  | AVDEC_DISABLE = 0x0,	/* 0: A/V Decoder Disabled */ | 
|  | AVDEC_ENABLE = 0x80	/* 1: A/V Decoder Enabled */ | 
|  | }; | 
|  |  | 
|  | #define BO_1_MASK       0x100 | 
|  |  | 
|  | #define BUSPOWER_MASK   0xC4	/* for Polaris spec 0.8 */ | 
|  | #define SELFPOWER_MASK  0x86 | 
|  |  | 
|  | /***************************************************************************/ | 
|  | #define NOT_DECIDE_YET  0xFE | 
|  | #define NOT_SUPPORTED   0xFF | 
|  |  | 
|  | /*************************************************************************** | 
|  | * for mod field use * | 
|  | ***************************************************************************/ | 
|  | #define MOD_DIGITAL     0x1 | 
|  | #define MOD_ANALOG      0x2 | 
|  | #define MOD_DIF         0x4 | 
|  | #define MOD_EXTERNAL    0x8 | 
|  | #define CAP_ALL_MOD     0x0f | 
|  |  | 
|  | /*************************************************************************** | 
|  | * source define * | 
|  | ***************************************************************************/ | 
|  | #define SOURCE_DIGITAL          0x1 | 
|  | #define SOURCE_ANALOG           0x2 | 
|  | #define SOURCE_DIF              0x4 | 
|  | #define SOURCE_EXTERNAL         0x8 | 
|  | #define SOURCE_TS_BDA			0x10 | 
|  | #define SOURCE_TS_ENCODE		0x20 | 
|  | #define SOURCE_TS_EXTERNAL   	0x40 | 
|  |  | 
|  | /*************************************************************************** | 
|  | * interface information define * | 
|  | ***************************************************************************/ | 
|  | struct INTERFACE_INFO { | 
|  | u8 interrupt_index; | 
|  | u8 ts1_index; | 
|  | u8 ts2_index; | 
|  | u8 audio_index; | 
|  | u8 video_index; | 
|  | u8 vanc_index;		/* VBI */ | 
|  | u8 hanc_index;		/* Sliced CC */ | 
|  | u8 ir_index; | 
|  | }; | 
|  |  | 
|  | enum INDEX_INTERFACE_INFO{ | 
|  | INDEX_INTERRUPT = 0x0, | 
|  | INDEX_TS1, | 
|  | INDEX_TS2, | 
|  | INDEX_AUDIO, | 
|  | INDEX_VIDEO, | 
|  | INDEX_VANC, | 
|  | INDEX_HANC, | 
|  | INDEX_IR, | 
|  | }; | 
|  |  | 
|  | /*************************************************************************** | 
|  | * configuration information define * | 
|  | ***************************************************************************/ | 
|  | struct CONFIG_INFO { | 
|  | u8 config_index; | 
|  | struct INTERFACE_INFO interface_info; | 
|  | }; | 
|  |  | 
|  | struct pcb_config { | 
|  | u8 index; | 
|  | u8 type;		/* bus power or self power, | 
|  | self power--0, bus_power--1 */ | 
|  | u8 speed;		/* usb speed, 2.0--1, 1.1--0 */ | 
|  | u8 mode;		/* digital , anlog, dif or external A/V */ | 
|  | u32 ts1_source;		/* three source -- BDA,External,encode */ | 
|  | u32 ts2_source; | 
|  | u32 analog_source; | 
|  | u8 digital_index;	/* bus-power used */ | 
|  | u8 analog_index;	/* bus-power used */ | 
|  | u8 dif_index;		/* bus-power used */ | 
|  | u8 external_index;	/* bus-power used */ | 
|  | u8 config_num;		/* current config num, 0,1,2, | 
|  | for self-power, always 0 */ | 
|  | struct CONFIG_INFO hs_config_info[3]; | 
|  | struct CONFIG_INFO fs_config_info[3]; | 
|  | }; | 
|  |  | 
|  | enum INDEX_PCB_CONFIG{ | 
|  | INDEX_SELFPOWER_DIGITAL_ONLY = 0x0, | 
|  | INDEX_SELFPOWER_DUAL_DIGITAL, | 
|  | INDEX_SELFPOWER_ANALOG_ONLY, | 
|  | INDEX_SELFPOWER_DUAL, | 
|  | INDEX_SELFPOWER_TRIPLE, | 
|  | INDEX_SELFPOWER_COMPRESSOR, | 
|  | INDEX_BUSPOWER_DIGITAL_ONLY, | 
|  | INDEX_BUSPOWER_ANALOG_ONLY, | 
|  | INDEX_BUSPOWER_DIF_ONLY, | 
|  | INDEX_BUSPOWER_EXTERNAL_ONLY, | 
|  | INDEX_BUSPOWER_EXTERNAL_ANALOG, | 
|  | INDEX_BUSPOWER_EXTERNAL_DIF, | 
|  | INDEX_BUSPOWER_EXTERNAL_DIGITAL, | 
|  | INDEX_BUSPOWER_DIGITAL_ANALOG, | 
|  | INDEX_BUSPOWER_DIGITAL_DIF, | 
|  | INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL, | 
|  | INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL, | 
|  | }; | 
|  |  | 
|  | /***************************************************************************/ | 
|  | struct cx231xx; | 
|  |  | 
|  | int initialize_cx231xx(struct cx231xx *p_dev); | 
|  |  | 
|  | #endif |