• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/media/video/ivtv/
1/*
2    Functions to query card hardware
3    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
4    Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#ifndef IVTV_CARDS_H
22#define IVTV_CARDS_H
23
24/* Supported cards */
25#define IVTV_CARD_PVR_250 	      0	/* WinTV PVR 250 */
26#define IVTV_CARD_PVR_350 	      1	/* encoder, decoder, tv-out */
27#define IVTV_CARD_PVR_150 	      2	/* WinTV PVR 150 and PVR 500 (really just two
28					   PVR150s on one PCI board) */
29#define IVTV_CARD_M179    	      3	/* AVerMedia M179 (encoder only) */
30#define IVTV_CARD_MPG600  	      4	/* Kuroutoshikou ITVC16-STVLP/YUAN MPG600, encoder only */
31#define IVTV_CARD_MPG160  	      5	/* Kuroutoshikou ITVC15-STVLP/YUAN MPG160
32					   cx23415 based, but does not have tv-out */
33#define IVTV_CARD_PG600 	      6	/* YUAN PG600/DIAMONDMM PVR-550 based on the CX Falcon 2 */
34#define IVTV_CARD_AVC2410 	      7	/* Adaptec AVC-2410 */
35#define IVTV_CARD_AVC2010 	      8	/* Adaptec AVD-2010 (No Tuner) */
36#define IVTV_CARD_TG5000TV   	      9 /* NAGASE TRANSGEAR 5000TV, encoder only */
37#define IVTV_CARD_VA2000MAX_SNT6     10 /* VA2000MAX-STN6 */
38#define IVTV_CARD_CX23416GYC 	     11 /* Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */
39#define IVTV_CARD_GV_MVPRX   	     12 /* I/O Data GV-MVP/RX, RX2, RX2W */
40#define IVTV_CARD_GV_MVPRX2E 	     13 /* I/O Data GV-MVP/RX2E */
41#define IVTV_CARD_GOTVIEW_PCI_DVD    14	/* GotView PCI DVD */
42#define IVTV_CARD_GOTVIEW_PCI_DVD2   15	/* GotView PCI DVD2 */
43#define IVTV_CARD_YUAN_MPC622        16	/* Yuan MPC622 miniPCI */
44#define IVTV_CARD_DCTMTVP1 	     17 /* DIGITAL COWBOY DCT-MTVP1 */
45#define IVTV_CARD_PG600V2	     18 /* Yuan PG600V2/GotView PCI DVD Lite */
46#define IVTV_CARD_CLUB3D	     19 /* Club3D ZAP-TV1x01 */
47#define IVTV_CARD_AVERTV_MCE116	     20 /* AVerTV MCE 116 Plus */
48#define IVTV_CARD_ASUS_FALCON2	     21 /* ASUS Falcon2 */
49#define IVTV_CARD_AVER_PVR150PLUS    22 /* AVerMedia PVR-150 Plus */
50#define IVTV_CARD_AVER_EZMAKER       23 /* AVerMedia EZMaker PCI Deluxe */
51#define IVTV_CARD_AVER_M104          24 /* AverMedia M104 miniPCI card */
52#define IVTV_CARD_BUFFALO_MV5L       25 /* Buffalo PC-MV5L/PCI card */
53#define IVTV_CARD_AVER_ULTRA1500MCE  26 /* AVerMedia UltraTV 1500 MCE */
54#define IVTV_CARD_KIKYOU             27 /* Sony VAIO Giga Pocket (ENX Kikyou) */
55#define IVTV_CARD_LAST 		     27
56
57/* Variants of existing cards but with the same PCI IDs. The driver
58   detects these based on other device information.
59   These cards must always come last.
60   New cards must be inserted above, and the indices of the cards below
61   must be adjusted accordingly. */
62
63/* PVR-350 V1 (uses saa7114) */
64#define IVTV_CARD_PVR_350_V1 	     (IVTV_CARD_LAST+1)
65/* 2 variants of Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */
66#define IVTV_CARD_CX23416GYC_NOGR    (IVTV_CARD_LAST+2)
67#define IVTV_CARD_CX23416GYC_NOGRYCS (IVTV_CARD_LAST+3)
68
69/* system vendor and device IDs */
70#define PCI_VENDOR_ID_ICOMP  0x4444
71#define PCI_DEVICE_ID_IVTV15 0x0803
72#define PCI_DEVICE_ID_IVTV16 0x0016
73
74/* subsystem vendor ID */
75#define IVTV_PCI_ID_HAUPPAUGE 		0x0070
76#define IVTV_PCI_ID_HAUPPAUGE_ALT1 	0x0270
77#define IVTV_PCI_ID_HAUPPAUGE_ALT2 	0x4070
78#define IVTV_PCI_ID_ADAPTEC 		0x9005
79#define IVTV_PCI_ID_ASUSTEK 		0x1043
80#define IVTV_PCI_ID_AVERMEDIA 		0x1461
81#define IVTV_PCI_ID_YUAN1		0x12ab
82#define IVTV_PCI_ID_YUAN2 		0xff01
83#define IVTV_PCI_ID_YUAN3 		0xffab
84#define IVTV_PCI_ID_YUAN4 		0xfbab
85#define IVTV_PCI_ID_DIAMONDMM 		0xff92
86#define IVTV_PCI_ID_IODATA 		0x10fc
87#define IVTV_PCI_ID_MELCO 		0x1154
88#define IVTV_PCI_ID_GOTVIEW1		0xffac
89#define IVTV_PCI_ID_GOTVIEW2 		0xffad
90#define IVTV_PCI_ID_SONY 		0x104d
91
92/* hardware flags, no gaps allowed */
93#define IVTV_HW_CX25840			(1 << 0)
94#define IVTV_HW_SAA7115			(1 << 1)
95#define IVTV_HW_SAA7127			(1 << 2)
96#define IVTV_HW_MSP34XX			(1 << 3)
97#define IVTV_HW_TUNER			(1 << 4)
98#define IVTV_HW_WM8775			(1 << 5)
99#define IVTV_HW_CS53L32A		(1 << 6)
100#define IVTV_HW_TVEEPROM		(1 << 7)
101#define IVTV_HW_SAA7114			(1 << 8)
102#define IVTV_HW_UPD64031A		(1 << 9)
103#define IVTV_HW_UPD6408X		(1 << 10)
104#define IVTV_HW_SAA717X			(1 << 11)
105#define IVTV_HW_WM8739			(1 << 12)
106#define IVTV_HW_VP27SMPX		(1 << 13)
107#define IVTV_HW_M52790			(1 << 14)
108#define IVTV_HW_GPIO			(1 << 15)
109#define IVTV_HW_I2C_IR_RX_AVER		(1 << 16)
110#define IVTV_HW_I2C_IR_RX_HAUP_EXT	(1 << 17) /* External before internal */
111#define IVTV_HW_I2C_IR_RX_HAUP_INT	(1 << 18)
112#define IVTV_HW_Z8F0811_IR_TX_HAUP	(1 << 19)
113#define IVTV_HW_Z8F0811_IR_RX_HAUP	(1 << 20)
114
115#define IVTV_HW_Z8F0811_IR_HAUP	(IVTV_HW_Z8F0811_IR_RX_HAUP | \
116				 IVTV_HW_Z8F0811_IR_TX_HAUP)
117
118#define IVTV_HW_SAA711X   (IVTV_HW_SAA7115 | IVTV_HW_SAA7114)
119
120#define IVTV_HW_IR_RX_ANY (IVTV_HW_I2C_IR_RX_AVER | \
121			   IVTV_HW_I2C_IR_RX_HAUP_EXT | \
122			   IVTV_HW_I2C_IR_RX_HAUP_INT | \
123			   IVTV_HW_Z8F0811_IR_RX_HAUP)
124
125#define IVTV_HW_IR_TX_ANY (IVTV_HW_Z8F0811_IR_TX_HAUP)
126
127#define IVTV_HW_IR_ANY	  (IVTV_HW_IR_RX_ANY | IVTV_HW_IR_TX_ANY)
128
129/* video inputs */
130#define	IVTV_CARD_INPUT_VID_TUNER	1
131#define	IVTV_CARD_INPUT_SVIDEO1 	2
132#define	IVTV_CARD_INPUT_SVIDEO2 	3
133#define	IVTV_CARD_INPUT_COMPOSITE1 	4
134#define	IVTV_CARD_INPUT_COMPOSITE2 	5
135#define	IVTV_CARD_INPUT_COMPOSITE3 	6
136
137/* audio inputs */
138#define	IVTV_CARD_INPUT_AUD_TUNER	1
139#define	IVTV_CARD_INPUT_LINE_IN1 	2
140#define	IVTV_CARD_INPUT_LINE_IN2 	3
141
142#define IVTV_CARD_MAX_VIDEO_INPUTS 6
143#define IVTV_CARD_MAX_AUDIO_INPUTS 3
144#define IVTV_CARD_MAX_TUNERS  	   3
145
146/* SAA71XX HW inputs */
147#define IVTV_SAA71XX_COMPOSITE0 0
148#define IVTV_SAA71XX_COMPOSITE1 1
149#define IVTV_SAA71XX_COMPOSITE2 2
150#define IVTV_SAA71XX_COMPOSITE3 3
151#define IVTV_SAA71XX_COMPOSITE4 4
152#define IVTV_SAA71XX_COMPOSITE5 5
153#define IVTV_SAA71XX_SVIDEO0    6
154#define IVTV_SAA71XX_SVIDEO1    7
155#define IVTV_SAA71XX_SVIDEO2    8
156#define IVTV_SAA71XX_SVIDEO3    9
157
158/* SAA717X needs to mark the tuner input by ORing with this flag */
159#define IVTV_SAA717X_TUNER_FLAG 0x80
160
161/* Dummy HW input */
162#define IVTV_DUMMY_AUDIO        0
163
164/* GPIO HW inputs */
165#define IVTV_GPIO_TUNER   0
166#define IVTV_GPIO_LINE_IN 1
167
168/* SAA717X HW inputs */
169#define IVTV_SAA717X_IN0 0
170#define IVTV_SAA717X_IN1 1
171#define IVTV_SAA717X_IN2 2
172
173/* V4L2 capability aliases */
174#define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
175			  V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \
176			  V4L2_CAP_SLICED_VBI_CAPTURE)
177#define IVTV_CAP_DECODER (V4L2_CAP_VIDEO_OUTPUT | \
178			  V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
179
180struct ivtv_card_video_input {
181	u8  video_type; 	/* video input type */
182	u8  audio_index;	/* index in ivtv_card_audio_input array */
183	u16 video_input;	/* hardware video input */
184};
185
186struct ivtv_card_audio_input {
187	u8  audio_type;		/* audio input type */
188	u32 audio_input;	/* hardware audio input */
189	u16 muxer_input;	/* hardware muxer input for boards with a
190				   multiplexer chip */
191};
192
193struct ivtv_card_output {
194	u8  name[32];
195	u16 video_output;  /* hardware video output */
196};
197
198struct ivtv_card_pci_info {
199	u16 device;
200	u16 subsystem_vendor;
201	u16 subsystem_device;
202};
203
204/* GPIO definitions */
205
206/* The mask is the set of bits used by the operation */
207
208struct ivtv_gpio_init { 	/* set initial GPIO DIR and OUT values */
209	u16 direction; 		/* DIR setting. Leave to 0 if no init is needed */
210	u16 initial_value;
211};
212
213struct ivtv_gpio_video_input { 	/* select tuner/line in input */
214	u16 mask; 		/* leave to 0 if not supported */
215	u16 tuner;
216	u16 composite;
217	u16 svideo;
218};
219
220struct ivtv_gpio_audio_input { 	/* select tuner/line in input */
221	u16 mask; 		/* leave to 0 if not supported */
222	u16 tuner;
223	u16 linein;
224	u16 radio;
225};
226
227struct ivtv_gpio_audio_mute {
228	u16 mask; 		/* leave to 0 if not supported */
229	u16 mute;		/* set this value to mute, 0 to unmute */
230};
231
232struct ivtv_gpio_audio_mode {
233	u16 mask; 		/* leave to 0 if not supported */
234	u16 mono; 		/* set audio to mono */
235	u16 stereo; 		/* set audio to stereo */
236	u16 lang1;		/* set audio to the first language */
237	u16 lang2;		/* set audio to the second language */
238	u16 both; 		/* both languages are output */
239};
240
241struct ivtv_gpio_audio_freq {
242	u16 mask; 		/* leave to 0 if not supported */
243	u16 f32000;
244	u16 f44100;
245	u16 f48000;
246};
247
248struct ivtv_gpio_audio_detect {
249	u16 mask; 		/* leave to 0 if not supported */
250	u16 stereo; 		/* if the input matches this value then
251				   stereo is detected */
252};
253
254struct ivtv_card_tuner {
255	v4l2_std_id std; 	/* standard for which the tuner is suitable */
256	int 	    tuner; 	/* tuner ID (from tuner.h) */
257};
258
259struct ivtv_card_tuner_i2c {
260	unsigned short radio[2];/* radio tuner i2c address to probe */
261	unsigned short demod[2];/* demodulator i2c address to probe */
262	unsigned short tv[4];	/* tv tuner i2c addresses to probe */
263};
264
265/* for card information/parameters */
266struct ivtv_card {
267	int type;
268	char *name;
269	char *comment;
270	u32 v4l2_capabilities;
271	u32 hw_video;		/* hardware used to process video */
272	u32 hw_audio;		/* hardware used to process audio */
273	u32 hw_audio_ctrl;	/* hardware used for the V4L2 controls (only 1 dev allowed) */
274	u32 hw_muxer;		/* hardware used to multiplex audio input */
275	u32 hw_all;		/* all hardware used by the board */
276	struct ivtv_card_video_input video_inputs[IVTV_CARD_MAX_VIDEO_INPUTS];
277	struct ivtv_card_audio_input audio_inputs[IVTV_CARD_MAX_AUDIO_INPUTS];
278	struct ivtv_card_audio_input radio_input;
279	int nof_outputs;
280	const struct ivtv_card_output *video_outputs;
281	u8 gr_config; 		/* config byte for the ghost reduction device */
282	u8 xceive_pin; 		/* XCeive tuner GPIO reset pin */
283
284	/* GPIO card-specific settings */
285	struct ivtv_gpio_init 		gpio_init;
286	struct ivtv_gpio_video_input	gpio_video_input;
287	struct ivtv_gpio_audio_input 	gpio_audio_input;
288	struct ivtv_gpio_audio_mute 	gpio_audio_mute;
289	struct ivtv_gpio_audio_mode 	gpio_audio_mode;
290	struct ivtv_gpio_audio_freq 	gpio_audio_freq;
291	struct ivtv_gpio_audio_detect 	gpio_audio_detect;
292
293	struct ivtv_card_tuner tuners[IVTV_CARD_MAX_TUNERS];
294	struct ivtv_card_tuner_i2c *i2c;
295
296	/* list of device and subsystem vendor/devices that
297	   correspond to this card type. */
298	const struct ivtv_card_pci_info *pci_list;
299};
300
301int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input);
302int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output);
303int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *input);
304int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *output);
305const struct ivtv_card *ivtv_get_card(u16 index);
306
307#endif
308