blob: 381af1bceef84c9924ee69b0c33f31a64a78820e [file] [log] [blame]
Hans Verkuil1a0adaf2007-04-27 12:31:25 -03001/*
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
Hans Verkuil612570f2007-08-23 05:42:59 -030021#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 */
Hans Verkuile2a17742007-10-30 05:50:03 -030048#define IVTV_CARD_ASUS_FALCON2 21 /* ASUS Falcon2 */
Hans Verkuilfdef4642007-10-30 05:55:58 -030049#define IVTV_CARD_AVER_PVR150PLUS 22 /* AVerMedia PVR-150 Plus */
Hans Verkuile08323f2007-12-07 20:40:16 -030050#define IVTV_CARD_AVER_EZMAKER 23 /* AVerMedia EZMaker PCI Deluxe */
Hans Verkuil22f23fc2008-04-26 09:19:44 -030051#define IVTV_CARD_AVER_M104 24 /* AverMedia M104 miniPCI card */
Hans Verkuild56eebf2008-05-20 06:19:47 -030052#define IVTV_CARD_BUFFALO_MV5L 25 /* Buffalo PC-MV5L/PCI card */
53#define IVTV_CARD_LAST 25
Hans Verkuil612570f2007-08-23 05:42:59 -030054
55/* Variants of existing cards but with the same PCI IDs. The driver
56 detects these based on other device information.
57 These cards must always come last.
58 New cards must be inserted above, and the indices of the cards below
59 must be adjusted accordingly. */
60
61/* PVR-350 V1 (uses saa7114) */
62#define IVTV_CARD_PVR_350_V1 (IVTV_CARD_LAST+1)
63/* 2 variants of Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */
64#define IVTV_CARD_CX23416GYC_NOGR (IVTV_CARD_LAST+2)
65#define IVTV_CARD_CX23416GYC_NOGRYCS (IVTV_CARD_LAST+3)
66
67/* system vendor and device IDs */
68#define PCI_VENDOR_ID_ICOMP 0x4444
69#define PCI_DEVICE_ID_IVTV15 0x0803
70#define PCI_DEVICE_ID_IVTV16 0x0016
71
72/* subsystem vendor ID */
73#define IVTV_PCI_ID_HAUPPAUGE 0x0070
74#define IVTV_PCI_ID_HAUPPAUGE_ALT1 0x0270
75#define IVTV_PCI_ID_HAUPPAUGE_ALT2 0x4070
76#define IVTV_PCI_ID_ADAPTEC 0x9005
Hans Verkuile2a17742007-10-30 05:50:03 -030077#define IVTV_PCI_ID_ASUSTEK 0x1043
Hans Verkuil612570f2007-08-23 05:42:59 -030078#define IVTV_PCI_ID_AVERMEDIA 0x1461
79#define IVTV_PCI_ID_YUAN1 0x12ab
80#define IVTV_PCI_ID_YUAN2 0xff01
81#define IVTV_PCI_ID_YUAN3 0xffab
82#define IVTV_PCI_ID_YUAN4 0xfbab
83#define IVTV_PCI_ID_DIAMONDMM 0xff92
84#define IVTV_PCI_ID_IODATA 0x10fc
85#define IVTV_PCI_ID_MELCO 0x1154
86#define IVTV_PCI_ID_GOTVIEW1 0xffac
87#define IVTV_PCI_ID_GOTVIEW2 0xffad
88
Hans Verkuild9009202007-12-07 21:01:15 -030089/* hardware flags, no gaps allowed, IVTV_HW_GPIO must always be last */
Hans Verkuil1a0adaf2007-04-27 12:31:25 -030090#define IVTV_HW_CX25840 (1 << 0)
91#define IVTV_HW_SAA7115 (1 << 1)
92#define IVTV_HW_SAA7127 (1 << 2)
93#define IVTV_HW_MSP34XX (1 << 3)
94#define IVTV_HW_TUNER (1 << 4)
95#define IVTV_HW_WM8775 (1 << 5)
96#define IVTV_HW_CS53L32A (1 << 6)
97#define IVTV_HW_TVEEPROM (1 << 7)
98#define IVTV_HW_SAA7114 (1 << 8)
Hans Verkuild9009202007-12-07 21:01:15 -030099#define IVTV_HW_UPD64031A (1 << 9)
100#define IVTV_HW_UPD6408X (1 << 10)
101#define IVTV_HW_SAA717X (1 << 11)
102#define IVTV_HW_WM8739 (1 << 12)
103#define IVTV_HW_VP27SMPX (1 << 13)
104#define IVTV_HW_M52790 (1 << 14)
105#define IVTV_HW_GPIO (1 << 15)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300106
107#define IVTV_HW_SAA711X (IVTV_HW_SAA7115 | IVTV_HW_SAA7114)
108
109/* video inputs */
110#define IVTV_CARD_INPUT_VID_TUNER 1
111#define IVTV_CARD_INPUT_SVIDEO1 2
112#define IVTV_CARD_INPUT_SVIDEO2 3
113#define IVTV_CARD_INPUT_COMPOSITE1 4
114#define IVTV_CARD_INPUT_COMPOSITE2 5
115#define IVTV_CARD_INPUT_COMPOSITE3 6
116
117/* audio inputs */
118#define IVTV_CARD_INPUT_AUD_TUNER 1
119#define IVTV_CARD_INPUT_LINE_IN1 2
120#define IVTV_CARD_INPUT_LINE_IN2 3
121
122#define IVTV_CARD_MAX_VIDEO_INPUTS 6
123#define IVTV_CARD_MAX_AUDIO_INPUTS 3
Hans Verkuild00573b2008-04-22 14:45:50 -0300124#define IVTV_CARD_MAX_TUNERS 3
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300125
126/* SAA71XX HW inputs */
127#define IVTV_SAA71XX_COMPOSITE0 0
128#define IVTV_SAA71XX_COMPOSITE1 1
129#define IVTV_SAA71XX_COMPOSITE2 2
130#define IVTV_SAA71XX_COMPOSITE3 3
131#define IVTV_SAA71XX_COMPOSITE4 4
132#define IVTV_SAA71XX_COMPOSITE5 5
133#define IVTV_SAA71XX_SVIDEO0 6
134#define IVTV_SAA71XX_SVIDEO1 7
135#define IVTV_SAA71XX_SVIDEO2 8
136#define IVTV_SAA71XX_SVIDEO3 9
137
138/* SAA717X needs to mark the tuner input by ORing with this flag */
139#define IVTV_SAA717X_TUNER_FLAG 0x80
140
141/* Dummy HW input */
142#define IVTV_DUMMY_AUDIO 0
143
144/* GPIO HW inputs */
145#define IVTV_GPIO_TUNER 0
146#define IVTV_GPIO_LINE_IN 1
147
148/* SAA717X HW inputs */
149#define IVTV_SAA717X_IN0 0
150#define IVTV_SAA717X_IN1 1
151#define IVTV_SAA717X_IN2 2
152
153/* V4L2 capability aliases */
154#define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
155 V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \
156 V4L2_CAP_SLICED_VBI_CAPTURE)
157#define IVTV_CAP_DECODER (V4L2_CAP_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT | \
Hans Verkuil1f137602007-05-29 08:18:37 -0300158 V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300159
160struct ivtv_card_video_input {
161 u8 video_type; /* video input type */
162 u8 audio_index; /* index in ivtv_card_audio_input array */
163 u16 video_input; /* hardware video input */
164};
165
166struct ivtv_card_audio_input {
167 u8 audio_type; /* audio input type */
168 u32 audio_input; /* hardware audio input */
169 u16 muxer_input; /* hardware muxer input for boards with a
170 multiplexer chip */
171};
172
173struct ivtv_card_output {
174 u8 name[32];
175 u16 video_output; /* hardware video output */
176};
177
178struct ivtv_card_pci_info {
179 u16 device;
180 u16 subsystem_vendor;
181 u16 subsystem_device;
182};
183
184/* GPIO definitions */
185
186/* The mask is the set of bits used by the operation */
187
188struct ivtv_gpio_init { /* set initial GPIO DIR and OUT values */
189 u16 direction; /* DIR setting. Leave to 0 if no init is needed */
190 u16 initial_value;
191};
192
193struct ivtv_gpio_video_input { /* select tuner/line in input */
194 u16 mask; /* leave to 0 if not supported */
195 u16 tuner;
196 u16 composite;
197 u16 svideo;
198};
199
200struct ivtv_gpio_audio_input { /* select tuner/line in input */
201 u16 mask; /* leave to 0 if not supported */
202 u16 tuner;
203 u16 linein;
204 u16 radio;
205};
206
207struct ivtv_gpio_audio_mute {
208 u16 mask; /* leave to 0 if not supported */
209 u16 mute; /* set this value to mute, 0 to unmute */
210};
211
212struct ivtv_gpio_audio_mode {
213 u16 mask; /* leave to 0 if not supported */
214 u16 mono; /* set audio to mono */
215 u16 stereo; /* set audio to stereo */
216 u16 lang1; /* set audio to the first language */
217 u16 lang2; /* set audio to the second language */
218 u16 both; /* both languages are output */
219};
220
221struct ivtv_gpio_audio_freq {
222 u16 mask; /* leave to 0 if not supported */
223 u16 f32000;
224 u16 f44100;
225 u16 f48000;
226};
227
228struct ivtv_gpio_audio_detect {
229 u16 mask; /* leave to 0 if not supported */
230 u16 stereo; /* if the input matches this value then
231 stereo is detected */
232};
233
234struct ivtv_card_tuner {
235 v4l2_std_id std; /* standard for which the tuner is suitable */
236 int tuner; /* tuner ID (from tuner.h) */
237};
238
Hans Verkuild9009202007-12-07 21:01:15 -0300239struct ivtv_card_tuner_i2c {
240 unsigned short radio[2];/* radio tuner i2c address to probe */
241 unsigned short demod[2];/* demodulator i2c address to probe */
242 unsigned short tv[4]; /* tv tuner i2c addresses to probe */
243};
244
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300245/* for card information/parameters */
246struct ivtv_card {
247 int type;
248 char *name;
Hans Verkuilecfcc832008-04-26 08:48:26 -0300249 char *comment;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300250 u32 v4l2_capabilities;
251 u32 hw_video; /* hardware used to process video */
252 u32 hw_audio; /* hardware used to process audio */
253 u32 hw_audio_ctrl; /* hardware used for the V4L2 controls (only 1 dev allowed) */
254 u32 hw_muxer; /* hardware used to multiplex audio input */
255 u32 hw_all; /* all hardware used by the board */
256 struct ivtv_card_video_input video_inputs[IVTV_CARD_MAX_VIDEO_INPUTS];
257 struct ivtv_card_audio_input audio_inputs[IVTV_CARD_MAX_AUDIO_INPUTS];
258 struct ivtv_card_audio_input radio_input;
259 int nof_outputs;
260 const struct ivtv_card_output *video_outputs;
261 u8 gr_config; /* config byte for the ghost reduction device */
Hans Verkuil136531d2008-04-26 14:16:18 -0300262 u8 xceive_pin; /* XCeive tuner GPIO reset pin */
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300263
264 /* GPIO card-specific settings */
265 struct ivtv_gpio_init gpio_init;
266 struct ivtv_gpio_video_input gpio_video_input;
267 struct ivtv_gpio_audio_input gpio_audio_input;
268 struct ivtv_gpio_audio_mute gpio_audio_mute;
269 struct ivtv_gpio_audio_mode gpio_audio_mode;
270 struct ivtv_gpio_audio_freq gpio_audio_freq;
271 struct ivtv_gpio_audio_detect gpio_audio_detect;
272
273 struct ivtv_card_tuner tuners[IVTV_CARD_MAX_TUNERS];
Hans Verkuild9009202007-12-07 21:01:15 -0300274 struct ivtv_card_tuner_i2c *i2c;
Hans Verkuil1a0adaf2007-04-27 12:31:25 -0300275
276 /* list of device and subsystem vendor/devices that
277 correspond to this card type. */
278 const struct ivtv_card_pci_info *pci_list;
279};
280
281int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input);
282int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output);
283int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *input);
284int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *output);
285const struct ivtv_card *ivtv_get_card(u16 index);
Hans Verkuil612570f2007-08-23 05:42:59 -0300286
287#endif