Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney...
[linux-2.6] / drivers / media / video / ivtv / ivtv-cards.h
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_LAST               20
49
50 /* Variants of existing cards but with the same PCI IDs. The driver
51    detects these based on other device information.
52    These cards must always come last.
53    New cards must be inserted above, and the indices of the cards below
54    must be adjusted accordingly. */
55
56 /* PVR-350 V1 (uses saa7114) */
57 #define IVTV_CARD_PVR_350_V1         (IVTV_CARD_LAST+1)
58 /* 2 variants of Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */
59 #define IVTV_CARD_CX23416GYC_NOGR    (IVTV_CARD_LAST+2)
60 #define IVTV_CARD_CX23416GYC_NOGRYCS (IVTV_CARD_LAST+3)
61
62 /* system vendor and device IDs */
63 #define PCI_VENDOR_ID_ICOMP  0x4444
64 #define PCI_DEVICE_ID_IVTV15 0x0803
65 #define PCI_DEVICE_ID_IVTV16 0x0016
66
67 /* subsystem vendor ID */
68 #define IVTV_PCI_ID_HAUPPAUGE           0x0070
69 #define IVTV_PCI_ID_HAUPPAUGE_ALT1      0x0270
70 #define IVTV_PCI_ID_HAUPPAUGE_ALT2      0x4070
71 #define IVTV_PCI_ID_ADAPTEC             0x9005
72 #define IVTV_PCI_ID_AVERMEDIA           0x1461
73 #define IVTV_PCI_ID_YUAN1               0x12ab
74 #define IVTV_PCI_ID_YUAN2               0xff01
75 #define IVTV_PCI_ID_YUAN3               0xffab
76 #define IVTV_PCI_ID_YUAN4               0xfbab
77 #define IVTV_PCI_ID_DIAMONDMM           0xff92
78 #define IVTV_PCI_ID_IODATA              0x10fc
79 #define IVTV_PCI_ID_MELCO               0x1154
80 #define IVTV_PCI_ID_GOTVIEW1            0xffac
81 #define IVTV_PCI_ID_GOTVIEW2            0xffad
82
83 /* hardware flags */
84 #define IVTV_HW_CX25840   (1 << 0)
85 #define IVTV_HW_SAA7115   (1 << 1)
86 #define IVTV_HW_SAA7127   (1 << 2)
87 #define IVTV_HW_MSP34XX   (1 << 3)
88 #define IVTV_HW_TUNER     (1 << 4)
89 #define IVTV_HW_WM8775    (1 << 5)
90 #define IVTV_HW_CS53L32A  (1 << 6)
91 #define IVTV_HW_TVEEPROM  (1 << 7)
92 #define IVTV_HW_SAA7114   (1 << 8)
93 #define IVTV_HW_TVAUDIO   (1 << 9)
94 #define IVTV_HW_UPD64031A (1 << 10)
95 #define IVTV_HW_UPD6408X  (1 << 11)
96 #define IVTV_HW_SAA717X   (1 << 12)
97 #define IVTV_HW_WM8739    (1 << 13)
98 #define IVTV_HW_VP27SMPX  (1 << 14)
99 #define IVTV_HW_GPIO      (1 << 15)
100
101 #define IVTV_HW_SAA711X   (IVTV_HW_SAA7115 | IVTV_HW_SAA7114)
102
103 /* video inputs */
104 #define IVTV_CARD_INPUT_VID_TUNER       1
105 #define IVTV_CARD_INPUT_SVIDEO1         2
106 #define IVTV_CARD_INPUT_SVIDEO2         3
107 #define IVTV_CARD_INPUT_COMPOSITE1      4
108 #define IVTV_CARD_INPUT_COMPOSITE2      5
109 #define IVTV_CARD_INPUT_COMPOSITE3      6
110
111 /* audio inputs */
112 #define IVTV_CARD_INPUT_AUD_TUNER       1
113 #define IVTV_CARD_INPUT_LINE_IN1        2
114 #define IVTV_CARD_INPUT_LINE_IN2        3
115
116 #define IVTV_CARD_MAX_VIDEO_INPUTS 6
117 #define IVTV_CARD_MAX_AUDIO_INPUTS 3
118 #define IVTV_CARD_MAX_TUNERS       2
119
120 /* SAA71XX HW inputs */
121 #define IVTV_SAA71XX_COMPOSITE0 0
122 #define IVTV_SAA71XX_COMPOSITE1 1
123 #define IVTV_SAA71XX_COMPOSITE2 2
124 #define IVTV_SAA71XX_COMPOSITE3 3
125 #define IVTV_SAA71XX_COMPOSITE4 4
126 #define IVTV_SAA71XX_COMPOSITE5 5
127 #define IVTV_SAA71XX_SVIDEO0    6
128 #define IVTV_SAA71XX_SVIDEO1    7
129 #define IVTV_SAA71XX_SVIDEO2    8
130 #define IVTV_SAA71XX_SVIDEO3    9
131
132 /* SAA717X needs to mark the tuner input by ORing with this flag */
133 #define IVTV_SAA717X_TUNER_FLAG 0x80
134
135 /* Dummy HW input */
136 #define IVTV_DUMMY_AUDIO        0
137
138 /* GPIO HW inputs */
139 #define IVTV_GPIO_TUNER   0
140 #define IVTV_GPIO_LINE_IN 1
141
142 /* SAA717X HW inputs */
143 #define IVTV_SAA717X_IN0 0
144 #define IVTV_SAA717X_IN1 1
145 #define IVTV_SAA717X_IN2 2
146
147 /* V4L2 capability aliases */
148 #define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
149                           V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \
150                           V4L2_CAP_SLICED_VBI_CAPTURE)
151 #define IVTV_CAP_DECODER (V4L2_CAP_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT | \
152                           V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
153
154 struct ivtv_card_video_input {
155         u8  video_type;         /* video input type */
156         u8  audio_index;        /* index in ivtv_card_audio_input array */
157         u16 video_input;        /* hardware video input */
158 };
159
160 struct ivtv_card_audio_input {
161         u8  audio_type;         /* audio input type */
162         u32 audio_input;        /* hardware audio input */
163         u16 muxer_input;        /* hardware muxer input for boards with a
164                                    multiplexer chip */
165 };
166
167 struct ivtv_card_output {
168         u8  name[32];
169         u16 video_output;  /* hardware video output */
170 };
171
172 struct ivtv_card_pci_info {
173         u16 device;
174         u16 subsystem_vendor;
175         u16 subsystem_device;
176 };
177
178 /* GPIO definitions */
179
180 /* The mask is the set of bits used by the operation */
181
182 struct ivtv_gpio_init {         /* set initial GPIO DIR and OUT values */
183         u16 direction;          /* DIR setting. Leave to 0 if no init is needed */
184         u16 initial_value;
185 };
186
187 struct ivtv_gpio_video_input {  /* select tuner/line in input */
188         u16 mask;               /* leave to 0 if not supported */
189         u16 tuner;
190         u16 composite;
191         u16 svideo;
192 };
193
194 struct ivtv_gpio_audio_input {  /* select tuner/line in input */
195         u16 mask;               /* leave to 0 if not supported */
196         u16 tuner;
197         u16 linein;
198         u16 radio;
199 };
200
201 struct ivtv_gpio_audio_mute {
202         u16 mask;               /* leave to 0 if not supported */
203         u16 mute;               /* set this value to mute, 0 to unmute */
204 };
205
206 struct ivtv_gpio_audio_mode {
207         u16 mask;               /* leave to 0 if not supported */
208         u16 mono;               /* set audio to mono */
209         u16 stereo;             /* set audio to stereo */
210         u16 lang1;              /* set audio to the first language */
211         u16 lang2;              /* set audio to the second language */
212         u16 both;               /* both languages are output */
213 };
214
215 struct ivtv_gpio_audio_freq {
216         u16 mask;               /* leave to 0 if not supported */
217         u16 f32000;
218         u16 f44100;
219         u16 f48000;
220 };
221
222 struct ivtv_gpio_audio_detect {
223         u16 mask;               /* leave to 0 if not supported */
224         u16 stereo;             /* if the input matches this value then
225                                    stereo is detected */
226 };
227
228 struct ivtv_card_tuner {
229         v4l2_std_id std;        /* standard for which the tuner is suitable */
230         int         tuner;      /* tuner ID (from tuner.h) */
231 };
232
233 /* for card information/parameters */
234 struct ivtv_card {
235         int type;
236         char *name;
237         u32 v4l2_capabilities;
238         u32 hw_video;           /* hardware used to process video */
239         u32 hw_audio;           /* hardware used to process audio */
240         u32 hw_audio_ctrl;      /* hardware used for the V4L2 controls (only 1 dev allowed) */
241         u32 hw_muxer;           /* hardware used to multiplex audio input */
242         u32 hw_all;             /* all hardware used by the board */
243         struct ivtv_card_video_input video_inputs[IVTV_CARD_MAX_VIDEO_INPUTS];
244         struct ivtv_card_audio_input audio_inputs[IVTV_CARD_MAX_AUDIO_INPUTS];
245         struct ivtv_card_audio_input radio_input;
246         int nof_outputs;
247         const struct ivtv_card_output *video_outputs;
248         u8 gr_config;           /* config byte for the ghost reduction device */
249
250         /* GPIO card-specific settings */
251         struct ivtv_gpio_init           gpio_init;
252         struct ivtv_gpio_video_input    gpio_video_input;
253         struct ivtv_gpio_audio_input    gpio_audio_input;
254         struct ivtv_gpio_audio_mute     gpio_audio_mute;
255         struct ivtv_gpio_audio_mode     gpio_audio_mode;
256         struct ivtv_gpio_audio_freq     gpio_audio_freq;
257         struct ivtv_gpio_audio_detect   gpio_audio_detect;
258
259         struct ivtv_card_tuner tuners[IVTV_CARD_MAX_TUNERS];
260
261         /* list of device and subsystem vendor/devices that
262            correspond to this card type. */
263         const struct ivtv_card_pci_info *pci_list;
264 };
265
266 int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input);
267 int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output);
268 int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *input);
269 int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *output);
270 const struct ivtv_card *ivtv_get_card(u16 index);
271
272 #endif