Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | /* 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; u32 initialize_cx231xx(struct cx231xx *p_dev); #endif |