V4L/DVB (12209): ivtv: Add card entry for AVerMedia UltraTV 1500 MCE (M113 variant)
[deliverable/linux.git] / drivers / media / video / ivtv / ivtv-cards.c
CommitLineData
1a0adaf3
HV
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#include "ivtv-driver.h"
22#include "ivtv-cards.h"
23#include "ivtv-i2c.h"
24
25#include <media/msp3400.h>
e2a1774d 26#include <media/m52790.h>
1a0adaf3
HV
27#include <media/wm8775.h>
28#include <media/cs53l32a.h>
29#include <media/cx25840.h>
30#include <media/upd64031a.h>
31
32#define MSP_TUNER MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
33 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER)
34#define MSP_SCART1 MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
35 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
36#define MSP_SCART2 MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, \
37 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
38#define MSP_SCART3 MSP_INPUT(MSP_IN_SCART3, MSP_IN_TUNER1, \
39 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
40#define MSP_MONO MSP_INPUT(MSP_IN_MONO, MSP_IN_TUNER1, \
41 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
42
156f194b 43#define V4L2_STD_PAL_SECAM (V4L2_STD_PAL|V4L2_STD_SECAM)
a0bdd273 44
d9009201
HV
45/* usual i2c tuner addresses to probe */
46static struct ivtv_card_tuner_i2c ivtv_i2c_std = {
47 .radio = { I2C_CLIENT_END },
48 .demod = { 0x43, I2C_CLIENT_END },
49 .tv = { 0x61, 0x60, I2C_CLIENT_END },
50};
51
52/* as above, but with possible radio tuner */
53static struct ivtv_card_tuner_i2c ivtv_i2c_radio = {
54 .radio = { 0x60, I2C_CLIENT_END },
55 .demod = { 0x43, I2C_CLIENT_END },
56 .tv = { 0x61, I2C_CLIENT_END },
57};
58
59/* using the tda8290+75a combo */
60static struct ivtv_card_tuner_i2c ivtv_i2c_tda8290 = {
61 .radio = { I2C_CLIENT_END },
62 .demod = { I2C_CLIENT_END },
63 .tv = { 0x4b, I2C_CLIENT_END },
64};
65
1a0adaf3
HV
66/********************** card configuration *******************************/
67
68/* Please add new PCI IDs to: http://pci-ids.ucw.cz/iii
69 This keeps the PCI ID database up to date. Note that the entries
70 must be added under vendor 0x4444 (Conexant) as subsystem IDs.
71 New vendor IDs should still be added to the vendor ID list. */
72
73/* Hauppauge PVR-250 cards */
74
75/* Note: for Hauppauge cards the tveeprom information is used instead of PCI IDs */
76static const struct ivtv_card ivtv_card_pvr250 = {
77 .type = IVTV_CARD_PVR_250,
78 .name = "Hauppauge WinTV PVR-250",
79 .v4l2_capabilities = IVTV_CAP_ENCODER,
80 .hw_video = IVTV_HW_SAA7115,
81 .hw_audio = IVTV_HW_MSP34XX,
82 .hw_audio_ctrl = IVTV_HW_MSP34XX,
83 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
84 IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
85 .video_inputs = {
86 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
87 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
88 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
89 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
90 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
91 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
92 },
93 .audio_inputs = {
94 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
95 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
96 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
97 },
98 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
d9009201 99 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
100};
101
102/* ------------------------------------------------------------------------- */
103
104/* Hauppauge PVR-350 cards */
105
106/* Outputs for Hauppauge PVR350 cards */
107static struct ivtv_card_output ivtv_pvr350_outputs[] = {
108 {
109 .name = "S-Video + Composite",
110 .video_output = 0,
111 }, {
112 .name = "Composite",
113 .video_output = 1,
114 }, {
115 .name = "S-Video",
116 .video_output = 2,
117 }, {
118 .name = "RGB",
119 .video_output = 3,
120 }, {
121 .name = "YUV C",
122 .video_output = 4,
123 }, {
124 .name = "YUV V",
125 .video_output = 5,
126 }
127};
128
129static const struct ivtv_card ivtv_card_pvr350 = {
130 .type = IVTV_CARD_PVR_350,
131 .name = "Hauppauge WinTV PVR-350",
132 .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER,
133 .video_outputs = ivtv_pvr350_outputs,
134 .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs),
135 .hw_video = IVTV_HW_SAA7115,
136 .hw_audio = IVTV_HW_MSP34XX,
137 .hw_audio_ctrl = IVTV_HW_MSP34XX,
138 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
139 IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
140 .video_inputs = {
141 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
142 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
143 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
144 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
145 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
146 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
147 },
148 .audio_inputs = {
149 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
150 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
151 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
152 },
153 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
d9009201 154 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
155};
156
157/* PVR-350 V1 boards have a different audio tuner input and use a
158 saa7114 instead of a saa7115.
159 Note that the info below comes from a pre-production model so it may
160 not be correct. Especially the audio behaves strangely (mono only it seems) */
161static const struct ivtv_card ivtv_card_pvr350_v1 = {
162 .type = IVTV_CARD_PVR_350_V1,
163 .name = "Hauppauge WinTV PVR-350 (V1)",
164 .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER,
165 .video_outputs = ivtv_pvr350_outputs,
166 .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs),
167 .hw_video = IVTV_HW_SAA7114,
168 .hw_audio = IVTV_HW_MSP34XX,
169 .hw_audio_ctrl = IVTV_HW_MSP34XX,
170 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7114 |
171 IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
172 .video_inputs = {
173 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
174 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
175 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
176 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
177 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
178 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
179 },
180 .audio_inputs = {
181 { IVTV_CARD_INPUT_AUD_TUNER, MSP_MONO },
182 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
183 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
184 },
185 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
d9009201 186 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
187};
188
189/* ------------------------------------------------------------------------- */
190
191/* Hauppauge PVR-150/PVR-500 cards */
192
193static const struct ivtv_card ivtv_card_pvr150 = {
194 .type = IVTV_CARD_PVR_150,
195 .name = "Hauppauge WinTV PVR-150",
196 .v4l2_capabilities = IVTV_CAP_ENCODER,
197 .hw_video = IVTV_HW_CX25840,
198 .hw_audio = IVTV_HW_CX25840,
199 .hw_audio_ctrl = IVTV_HW_CX25840,
200 .hw_muxer = IVTV_HW_WM8775,
201 .hw_all = IVTV_HW_WM8775 | IVTV_HW_CX25840 |
202 IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
203 .video_inputs = {
204 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE7 },
205 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO1 },
206 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 },
207 { IVTV_CARD_INPUT_SVIDEO2, 2, CX25840_SVIDEO2 },
208 { IVTV_CARD_INPUT_COMPOSITE2, 2, CX25840_COMPOSITE4 },
209 },
210 .audio_inputs = {
211 { IVTV_CARD_INPUT_AUD_TUNER,
212 CX25840_AUDIO8, WM8775_AIN2 },
213 { IVTV_CARD_INPUT_LINE_IN1,
214 CX25840_AUDIO_SERIAL, WM8775_AIN2 },
215 { IVTV_CARD_INPUT_LINE_IN2,
216 CX25840_AUDIO_SERIAL, WM8775_AIN3 },
217 },
218 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER,
219 CX25840_AUDIO_SERIAL, WM8775_AIN4 },
220 /* apparently needed for the IR blaster */
221 .gpio_init = { .direction = 0x1f01, .initial_value = 0x26f3 },
d9009201 222 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
223};
224
225/* ------------------------------------------------------------------------- */
226
227/* AVerMedia M179 cards */
228
229static const struct ivtv_card_pci_info ivtv_pci_m179[] = {
230 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3cf },
231 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3ce },
232 { 0, 0, 0 }
233};
234
235static const struct ivtv_card ivtv_card_m179 = {
236 .type = IVTV_CARD_M179,
237 .name = "AVerMedia M179",
238 .v4l2_capabilities = IVTV_CAP_ENCODER,
239 .hw_video = IVTV_HW_SAA7114,
240 .hw_audio = IVTV_HW_GPIO,
241 .hw_audio_ctrl = IVTV_HW_GPIO,
242 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER,
243 .video_inputs = {
244 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
245 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
246 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
247 },
248 .audio_inputs = {
249 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
250 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
251 },
252 .gpio_init = { .direction = 0xe380, .initial_value = 0x8290 },
253 .gpio_audio_input = { .mask = 0x8040, .tuner = 0x8000, .linein = 0x0000 },
254 .gpio_audio_mute = { .mask = 0x2000, .mute = 0x2000 },
255 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
256 .lang1 = 0x0200, .lang2 = 0x0100, .both = 0x0000 },
257 .gpio_audio_freq = { .mask = 0x0018, .f32000 = 0x0000,
258 .f44100 = 0x0008, .f48000 = 0x0010 },
259 .gpio_audio_detect = { .mask = 0x4000, .stereo = 0x0000 },
260 .tuners = {
261 /* As far as we know all M179 cards use this tuner */
262 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_NTSC },
263 },
264 .pci_list = ivtv_pci_m179,
d9009201 265 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
266};
267
268/* ------------------------------------------------------------------------- */
269
270/* Yuan MPG600/Kuroutoshikou ITVC16-STVLP cards */
271
272static const struct ivtv_card_pci_info ivtv_pci_mpg600[] = {
273 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xfff3 },
274 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xffff },
275 { 0, 0, 0 }
276};
277
278static const struct ivtv_card ivtv_card_mpg600 = {
279 .type = IVTV_CARD_MPG600,
280 .name = "Yuan MPG600, Kuroutoshikou ITVC16-STVLP",
281 .v4l2_capabilities = IVTV_CAP_ENCODER,
282 .hw_video = IVTV_HW_SAA7115,
283 .hw_audio = IVTV_HW_GPIO,
284 .hw_audio_ctrl = IVTV_HW_GPIO,
285 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER,
286 .video_inputs = {
287 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
288 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
289 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
290 },
291 .audio_inputs = {
292 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
293 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
294 },
295 .gpio_init = { .direction = 0x3080, .initial_value = 0x0004 },
296 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
297 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
298 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
299 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
300 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
301 .tuners = {
302 /* The PAL tuner is confirmed */
156f194b 303 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
1a0adaf3
HV
304 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
305 },
306 .pci_list = ivtv_pci_mpg600,
d9009201 307 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
308};
309
310/* ------------------------------------------------------------------------- */
311
312/* Yuan MPG160/Kuroutoshikou ITVC15-STVLP cards */
313
314static const struct ivtv_card_pci_info ivtv_pci_mpg160[] = {
315 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_YUAN1, 0 },
316 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_IODATA, 0x40a0 },
317 { 0, 0, 0 }
318};
319
320static const struct ivtv_card ivtv_card_mpg160 = {
321 .type = IVTV_CARD_MPG160,
322 .name = "YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI",
323 .v4l2_capabilities = IVTV_CAP_ENCODER,
324 .hw_video = IVTV_HW_SAA7114,
325 .hw_audio = IVTV_HW_GPIO,
326 .hw_audio_ctrl = IVTV_HW_GPIO,
327 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER,
328 .video_inputs = {
329 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
330 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
331 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
332 },
333 .audio_inputs = {
334 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
335 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
336 },
337 .gpio_init = { .direction = 0x7080, .initial_value = 0x400c },
338 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
339 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
340 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
341 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
342 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
343 .tuners = {
156f194b 344 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
1a0adaf3
HV
345 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
346 },
347 .pci_list = ivtv_pci_mpg160,
d9009201 348 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
349};
350
351/* ------------------------------------------------------------------------- */
352
353/* Yuan PG600/Diamond PVR-550 cards */
354
355static const struct ivtv_card_pci_info ivtv_pci_pg600[] = {
356 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_DIAMONDMM, 0x0070 },
357 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
358 { 0, 0, 0 }
359};
360
361static const struct ivtv_card ivtv_card_pg600 = {
362 .type = IVTV_CARD_PG600,
363 .name = "Yuan PG600, Diamond PVR-550",
364 .v4l2_capabilities = IVTV_CAP_ENCODER,
365 .hw_video = IVTV_HW_CX25840,
366 .hw_audio = IVTV_HW_CX25840,
367 .hw_audio_ctrl = IVTV_HW_CX25840,
368 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
369 .video_inputs = {
370 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
371 { IVTV_CARD_INPUT_SVIDEO1, 1,
372 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
373 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
374 },
375 .audio_inputs = {
376 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
377 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
378 },
379 .tuners = {
156f194b 380 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
1a0adaf3
HV
381 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
382 },
383 .pci_list = ivtv_pci_pg600,
d9009201 384 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
385};
386
387/* ------------------------------------------------------------------------- */
388
389/* Adaptec VideOh! AVC-2410 card */
390
391static const struct ivtv_card_pci_info ivtv_pci_avc2410[] = {
392 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
393 { 0, 0, 0 }
394};
395
396static const struct ivtv_card ivtv_card_avc2410 = {
397 .type = IVTV_CARD_AVC2410,
398 .name = "Adaptec VideOh! AVC-2410",
399 .v4l2_capabilities = IVTV_CAP_ENCODER,
400 .hw_video = IVTV_HW_SAA7115,
401 .hw_audio = IVTV_HW_MSP34XX,
402 .hw_audio_ctrl = IVTV_HW_MSP34XX,
403 .hw_muxer = IVTV_HW_CS53L32A,
404 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_CS53L32A |
405 IVTV_HW_SAA7115 | IVTV_HW_TUNER,
406 .video_inputs = {
407 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
408 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
409 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
410 },
411 .audio_inputs = {
412 { IVTV_CARD_INPUT_AUD_TUNER,
413 MSP_TUNER, CS53L32A_IN0 },
414 { IVTV_CARD_INPUT_LINE_IN1,
415 MSP_SCART1, CS53L32A_IN2 },
416 },
417 /* This card has no eeprom and in fact the Windows driver relies
418 on the country/region setting of the user to decide which tuner
419 is available. */
420 .tuners = {
156f194b 421 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
d00573bb
HV
422 { .std = V4L2_STD_ALL - V4L2_STD_NTSC_M_JP,
423 .tuner = TUNER_PHILIPS_FM1236_MK3 },
424 { .std = V4L2_STD_NTSC_M_JP, .tuner = TUNER_PHILIPS_FQ1286 },
1a0adaf3
HV
425 },
426 .pci_list = ivtv_pci_avc2410,
d9009201 427 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
428};
429
430/* ------------------------------------------------------------------------- */
431
432/* Adaptec VideOh! AVC-2010 card */
433
434static const struct ivtv_card_pci_info ivtv_pci_avc2010[] = {
435 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
436 { 0, 0, 0 }
437};
438
439static const struct ivtv_card ivtv_card_avc2010 = {
440 .type = IVTV_CARD_AVC2010,
441 .name = "Adaptec VideOh! AVC-2010",
442 .v4l2_capabilities = IVTV_CAP_ENCODER,
443 .hw_video = IVTV_HW_SAA7115,
444 .hw_audio = IVTV_HW_CS53L32A,
445 .hw_audio_ctrl = IVTV_HW_CS53L32A,
446 .hw_all = IVTV_HW_CS53L32A | IVTV_HW_SAA7115,
447 .video_inputs = {
448 { IVTV_CARD_INPUT_SVIDEO1, 0, IVTV_SAA71XX_SVIDEO0 },
449 { IVTV_CARD_INPUT_COMPOSITE1, 0, IVTV_SAA71XX_COMPOSITE3 },
450 },
451 .audio_inputs = {
452 { IVTV_CARD_INPUT_LINE_IN1, CS53L32A_IN2 },
453 },
454 /* Does not have a tuner */
455 .pci_list = ivtv_pci_avc2010,
456};
457
458/* ------------------------------------------------------------------------- */
459
460/* Nagase Transgear 5000TV card */
461
462static const struct ivtv_card_pci_info ivtv_pci_tg5000tv[] = {
463 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff },
464 { 0, 0, 0 }
465};
466
467static const struct ivtv_card ivtv_card_tg5000tv = {
468 .type = IVTV_CARD_TG5000TV,
469 .name = "Nagase Transgear 5000TV",
470 .v4l2_capabilities = IVTV_CAP_ENCODER,
471 .hw_video = IVTV_HW_SAA7114 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X |
472 IVTV_HW_GPIO,
473 .hw_audio = IVTV_HW_GPIO,
474 .hw_audio_ctrl = IVTV_HW_GPIO,
475 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER |
476 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
477 .video_inputs = {
478 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
479 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 },
480 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
481 },
482 .audio_inputs = {
483 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
484 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
485 },
486 .gr_config = UPD64031A_VERTICAL_EXTERNAL,
487 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
488 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
489 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
490 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
491 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
492 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
493 .composite = 0x0010, .svideo = 0x0020 },
494 .tuners = {
156f194b 495 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
1a0adaf3
HV
496 },
497 .pci_list = ivtv_pci_tg5000tv,
d9009201 498 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
499};
500
501/* ------------------------------------------------------------------------- */
502
503/* AOpen VA2000MAX-SNT6 card */
504
505static const struct ivtv_card_pci_info ivtv_pci_va2000[] = {
506 { PCI_DEVICE_ID_IVTV16, 0, 0xff5f },
507 { 0, 0, 0 }
508};
509
510static const struct ivtv_card ivtv_card_va2000 = {
511 .type = IVTV_CARD_VA2000MAX_SNT6,
512 .name = "AOpen VA2000MAX-SNT6",
513 .v4l2_capabilities = IVTV_CAP_ENCODER,
514 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD6408X,
515 .hw_audio = IVTV_HW_MSP34XX,
516 .hw_audio_ctrl = IVTV_HW_MSP34XX,
517 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
518 IVTV_HW_UPD6408X | IVTV_HW_TUNER,
519 .video_inputs = {
520 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
521 },
522 .audio_inputs = {
523 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
524 },
525 .tuners = {
156f194b 526 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
1a0adaf3
HV
527 },
528 .pci_list = ivtv_pci_va2000,
d9009201 529 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
530};
531
532/* ------------------------------------------------------------------------- */
533
534/* Yuan MPG600GR/Kuroutoshikou CX23416GYC-STVLP cards */
535
536static const struct ivtv_card_pci_info ivtv_pci_cx23416gyc[] = {
537 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 },
538 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN4, 0x0600 },
539 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x0523 },
540 { 0, 0, 0 }
541};
542
543static const struct ivtv_card ivtv_card_cx23416gyc = {
544 .type = IVTV_CARD_CX23416GYC,
545 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP",
546 .v4l2_capabilities = IVTV_CAP_ENCODER,
547 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO |
548 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
549 .hw_audio = IVTV_HW_SAA717X,
550 .hw_audio_ctrl = IVTV_HW_SAA717X,
551 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER |
552 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
553 .video_inputs = {
554 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO3 |
555 IVTV_SAA717X_TUNER_FLAG },
556 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
557 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO3 },
558 },
559 .audio_inputs = {
560 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
561 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
562 },
563 .gr_config = UPD64031A_VERTICAL_EXTERNAL,
564 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
565 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
566 .composite = 0x0020, .svideo = 0x0020 },
567 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
568 .f44100 = 0x4000, .f48000 = 0x8000 },
569 .tuners = {
156f194b 570 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
1a0adaf3
HV
571 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
572 },
573 .pci_list = ivtv_pci_cx23416gyc,
d9009201 574 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
575};
576
577static const struct ivtv_card ivtv_card_cx23416gyc_nogr = {
578 .type = IVTV_CARD_CX23416GYC_NOGR,
579 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR)",
580 .v4l2_capabilities = IVTV_CAP_ENCODER,
581 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO | IVTV_HW_UPD6408X,
582 .hw_audio = IVTV_HW_SAA717X,
583 .hw_audio_ctrl = IVTV_HW_SAA717X,
584 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER |
585 IVTV_HW_UPD6408X,
586 .video_inputs = {
587 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 |
588 IVTV_SAA717X_TUNER_FLAG },
589 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
590 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
591 },
592 .audio_inputs = {
593 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
594 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
595 },
596 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
597 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
598 .composite = 0x0020, .svideo = 0x0020 },
599 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
600 .f44100 = 0x4000, .f48000 = 0x8000 },
601 .tuners = {
156f194b 602 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
1a0adaf3
HV
603 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
604 },
d9009201 605 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
606};
607
608static const struct ivtv_card ivtv_card_cx23416gyc_nogrycs = {
609 .type = IVTV_CARD_CX23416GYC_NOGRYCS,
610 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS)",
611 .v4l2_capabilities = IVTV_CAP_ENCODER,
612 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO,
613 .hw_audio = IVTV_HW_SAA717X,
614 .hw_audio_ctrl = IVTV_HW_SAA717X,
615 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER,
616 .video_inputs = {
617 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 |
618 IVTV_SAA717X_TUNER_FLAG },
619 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
620 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
621 },
622 .audio_inputs = {
623 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
624 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
625 },
626 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
627 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
628 .composite = 0x0020, .svideo = 0x0020 },
629 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
630 .f44100 = 0x4000, .f48000 = 0x8000 },
631 .tuners = {
156f194b 632 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
1a0adaf3
HV
633 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
634 },
d9009201 635 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
636};
637
638/* ------------------------------------------------------------------------- */
639
640/* I/O Data GV-MVP/RX & GV-MVP/RX2W (dual tuner) cards */
641
642static const struct ivtv_card_pci_info ivtv_pci_gv_mvprx[] = {
643 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd01e },
644 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd038 }, /* 2W unit #1 */
645 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd039 }, /* 2W unit #2 */
646 { 0, 0, 0 }
647};
648
649static const struct ivtv_card ivtv_card_gv_mvprx = {
650 .type = IVTV_CARD_GV_MVPRX,
651 .name = "I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner)",
652 .v4l2_capabilities = IVTV_CAP_ENCODER,
653 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
654 .hw_audio = IVTV_HW_GPIO,
655 .hw_audio_ctrl = IVTV_HW_WM8739,
ac247433 656 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_VP27SMPX |
1a0adaf3
HV
657 IVTV_HW_TUNER | IVTV_HW_WM8739 |
658 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
659 .video_inputs = {
660 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
661 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO1 },
662 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
663 },
664 .audio_inputs = {
665 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
666 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
667 },
668 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
669 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
670 .tuners = {
671 /* This card has the Panasonic VP27 tuner */
156f194b 672 { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
1a0adaf3
HV
673 },
674 .pci_list = ivtv_pci_gv_mvprx,
d9009201 675 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
676};
677
678/* ------------------------------------------------------------------------- */
679
680/* I/O Data GV-MVP/RX2E card */
681
682static const struct ivtv_card_pci_info ivtv_pci_gv_mvprx2e[] = {
683 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd025 },
684 {0, 0, 0}
685};
686
687static const struct ivtv_card ivtv_card_gv_mvprx2e = {
688 .type = IVTV_CARD_GV_MVPRX2E,
689 .name = "I/O Data GV-MVP/RX2E",
690 .v4l2_capabilities = IVTV_CAP_ENCODER,
691 .hw_video = IVTV_HW_SAA7115,
692 .hw_audio = IVTV_HW_GPIO,
693 .hw_audio_ctrl = IVTV_HW_WM8739,
694 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER |
ac247433 695 IVTV_HW_VP27SMPX | IVTV_HW_WM8739,
1a0adaf3
HV
696 .video_inputs = {
697 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
698 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
699 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
700 },
701 .audio_inputs = {
702 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
703 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
704 },
705 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
706 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
707 .tuners = {
708 /* This card has the Panasonic VP27 tuner */
156f194b 709 { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
1a0adaf3
HV
710 },
711 .pci_list = ivtv_pci_gv_mvprx2e,
d9009201 712 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
713};
714
715/* ------------------------------------------------------------------------- */
716
717/* GotVIEW PCI DVD card */
718
719static const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd[] = {
720 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 },
721 { 0, 0, 0 }
722};
723
724static const struct ivtv_card ivtv_card_gotview_pci_dvd = {
725 .type = IVTV_CARD_GOTVIEW_PCI_DVD,
726 .name = "GotView PCI DVD",
727 .v4l2_capabilities = IVTV_CAP_ENCODER,
728 .hw_video = IVTV_HW_SAA717X,
729 .hw_audio = IVTV_HW_SAA717X,
730 .hw_audio_ctrl = IVTV_HW_SAA717X,
731 .hw_all = IVTV_HW_SAA717X | IVTV_HW_TUNER,
732 .video_inputs = {
733 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE1 }, /* pin 116 */
734 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, /* pin 114/109 */
735 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, /* pin 118 */
736 },
737 .audio_inputs = {
738 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN0 },
739 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN2 },
740 },
741 .gpio_init = { .direction = 0xf000, .initial_value = 0xA000 },
742 .tuners = {
743 /* This card has a Philips FQ1216ME MK3 tuner */
156f194b 744 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
1a0adaf3
HV
745 },
746 .pci_list = ivtv_pci_gotview_pci_dvd,
d9009201 747 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
748};
749
750/* ------------------------------------------------------------------------- */
751
752/* GotVIEW PCI DVD2 Deluxe card */
753
754static const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd2[] = {
755 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW1, 0x0600 },
756 { 0, 0, 0 }
757};
758
759static const struct ivtv_card ivtv_card_gotview_pci_dvd2 = {
760 .type = IVTV_CARD_GOTVIEW_PCI_DVD2,
761 .name = "GotView PCI DVD2 Deluxe",
762 .v4l2_capabilities = IVTV_CAP_ENCODER,
763 .hw_video = IVTV_HW_CX25840,
764 .hw_audio = IVTV_HW_CX25840,
765 .hw_audio_ctrl = IVTV_HW_CX25840,
766 .hw_muxer = IVTV_HW_GPIO,
767 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
768 .video_inputs = {
769 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
770 { IVTV_CARD_INPUT_SVIDEO1, 1,
771 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
772 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
773 },
774 .audio_inputs = {
775 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
776 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
777 },
778 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
779 .gpio_init = { .direction = 0x0800, .initial_value = 0 },
780 .gpio_audio_input = { .mask = 0x0800, .tuner = 0, .linein = 0, .radio = 0x0800 },
781 .tuners = {
782 /* This card has a Philips FQ1216ME MK5 tuner */
156f194b 783 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
1a0adaf3
HV
784 },
785 .pci_list = ivtv_pci_gotview_pci_dvd2,
d9009201 786 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
787};
788
789/* ------------------------------------------------------------------------- */
790
791/* Yuan MPC622 miniPCI card */
792
793static const struct ivtv_card_pci_info ivtv_pci_yuan_mpc622[] = {
794 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN2, 0xd998 },
795 { 0, 0, 0 }
796};
797
798static const struct ivtv_card ivtv_card_yuan_mpc622 = {
799 .type = IVTV_CARD_YUAN_MPC622,
800 .name = "Yuan MPC622",
801 .v4l2_capabilities = IVTV_CAP_ENCODER,
802 .hw_video = IVTV_HW_CX25840,
803 .hw_audio = IVTV_HW_CX25840,
804 .hw_audio_ctrl = IVTV_HW_CX25840,
805 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
806 .video_inputs = {
807 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
808 { IVTV_CARD_INPUT_SVIDEO1, 1,
809 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
810 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
811 },
812 .audio_inputs = {
813 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
814 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
815 },
816 .gpio_init = { .direction = 0x00ff, .initial_value = 0x0002 },
817 .tuners = {
818 /* This card has the TDA8290/TDA8275 tuner chips */
819 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_TDA8290 },
820 },
821 .pci_list = ivtv_pci_yuan_mpc622,
d9009201 822 .i2c = &ivtv_i2c_tda8290,
1a0adaf3
HV
823};
824
825/* ------------------------------------------------------------------------- */
826
827/* DIGITAL COWBOY DCT-MTVP1 card */
828
829static const struct ivtv_card_pci_info ivtv_pci_dctmvtvp1[] = {
830 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff },
831 { 0, 0, 0 }
832};
833
834static const struct ivtv_card ivtv_card_dctmvtvp1 = {
835 .type = IVTV_CARD_DCTMTVP1,
836 .name = "Digital Cowboy DCT-MTVP1",
837 .v4l2_capabilities = IVTV_CAP_ENCODER,
838 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X |
839 IVTV_HW_GPIO,
840 .hw_audio = IVTV_HW_GPIO,
841 .hw_audio_ctrl = IVTV_HW_GPIO,
842 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER |
843 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
844 .video_inputs = {
845 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
846 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 },
847 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
848 },
849 .audio_inputs = {
850 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
851 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
852 },
853 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
854 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
855 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
856 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
857 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
858 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
859 .composite = 0x0010, .svideo = 0x0020},
860 .tuners = {
156f194b 861 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
1a0adaf3
HV
862 },
863 .pci_list = ivtv_pci_dctmvtvp1,
d9009201 864 .i2c = &ivtv_i2c_std,
1a0adaf3
HV
865};
866
867/* ------------------------------------------------------------------------- */
868
37297805 869/* Yuan PG600-2/GotView PCI DVD Lite cards */
1a0adaf3
HV
870
871static const struct ivtv_card_pci_info ivtv_pci_pg600v2[] = {
872 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
873 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW2, 0x0600 },
874 { 0, 0, 0 }
875};
876
877static const struct ivtv_card ivtv_card_pg600v2 = {
878 .type = IVTV_CARD_PG600V2,
37297805 879 .name = "Yuan PG600-2, GotView PCI DVD Lite",
1a0adaf3
HV
880 .v4l2_capabilities = IVTV_CAP_ENCODER,
881 .hw_video = IVTV_HW_CX25840,
882 .hw_audio = IVTV_HW_CX25840,
883 .hw_audio_ctrl = IVTV_HW_CX25840,
48fc6bb3
HV
884 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
885 /* XC2028 support apparently works for the Yuan, it's still
886 uncertain whether it also works with the GotView. */
1a0adaf3 887 .video_inputs = {
48fc6bb3
HV
888 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
889 { IVTV_CARD_INPUT_SVIDEO1, 1,
1a0adaf3 890 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
48fc6bb3 891 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1a0adaf3
HV
892 },
893 .audio_inputs = {
48fc6bb3 894 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
1a0adaf3
HV
895 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
896 },
48fc6bb3
HV
897 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
898 .xceive_pin = 12,
899 .tuners = {
900 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
901 },
1a0adaf3 902 .pci_list = ivtv_pci_pg600v2,
d9009201 903 .i2c = &ivtv_i2c_std,
1a0adaf3 904};
37297805
HV
905
906/* ------------------------------------------------------------------------- */
907
908/* Club3D ZAP-TV1x01 cards */
909
910static const struct ivtv_card_pci_info ivtv_pci_club3d[] = {
911 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
912 { 0, 0, 0 }
913};
914
915static const struct ivtv_card ivtv_card_club3d = {
916 .type = IVTV_CARD_CLUB3D,
917 .name = "Club3D ZAP-TV1x01",
918 .v4l2_capabilities = IVTV_CAP_ENCODER,
919 .hw_video = IVTV_HW_CX25840,
920 .hw_audio = IVTV_HW_CX25840,
921 .hw_audio_ctrl = IVTV_HW_CX25840,
922 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
923 .video_inputs = {
0e614cd1
HV
924 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
925 { IVTV_CARD_INPUT_SVIDEO1, 1,
37297805 926 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0e614cd1 927 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 },
37297805
HV
928 },
929 .audio_inputs = {
0e614cd1 930 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
37297805
HV
931 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
932 },
0e614cd1 933 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
136531da 934 .xceive_pin = 12,
37297805 935 .tuners = {
12466577 936 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
37297805
HV
937 },
938 .pci_list = ivtv_pci_club3d,
d9009201 939 .i2c = &ivtv_i2c_std,
37297805
HV
940};
941
942/* ------------------------------------------------------------------------- */
943
944/* AVerTV MCE 116 Plus (M116) card */
945
946static const struct ivtv_card_pci_info ivtv_pci_avertv_mce116[] = {
947 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc439 },
948 { 0, 0, 0 }
949};
950
951static const struct ivtv_card ivtv_card_avertv_mce116 = {
952 .type = IVTV_CARD_AVERTV_MCE116,
953 .name = "AVerTV MCE 116 Plus",
954 .v4l2_capabilities = IVTV_CAP_ENCODER,
955 .hw_video = IVTV_HW_CX25840,
956 .hw_audio = IVTV_HW_CX25840,
957 .hw_audio_ctrl = IVTV_HW_CX25840,
136531da 958 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739,
37297805 959 .video_inputs = {
136531da
HV
960 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
961 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
962 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
37297805
HV
963 },
964 .audio_inputs = {
136531da 965 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
37297805
HV
966 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
967 },
136531da 968 /* enable line-in */
4451342d 969 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
136531da
HV
970 .xceive_pin = 10,
971 .tuners = {
972 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
973 },
37297805 974 .pci_list = ivtv_pci_avertv_mce116,
d9009201 975 .i2c = &ivtv_i2c_std,
37297805 976};
1a0adaf3 977
e2a1774d
HV
978/* ------------------------------------------------------------------------- */
979
fdef464a
HV
980/* AVerMedia PVR-150 Plus (M113) card */
981
982static const struct ivtv_card_pci_info ivtv_pci_aver_pvr150[] = {
983 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc035 },
984 { 0, 0, 0 }
985};
986
987static const struct ivtv_card ivtv_card_aver_pvr150 = {
988 .type = IVTV_CARD_AVER_PVR150PLUS,
989 .name = "AVerMedia PVR-150 Plus",
990 .v4l2_capabilities = IVTV_CAP_ENCODER,
991 .hw_video = IVTV_HW_CX25840,
992 .hw_audio = IVTV_HW_CX25840,
993 .hw_audio_ctrl = IVTV_HW_CX25840,
994 .hw_muxer = IVTV_HW_GPIO,
995 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
996 .video_inputs = {
997 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
998 { IVTV_CARD_INPUT_SVIDEO1, 1,
999 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
1000 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1001 },
1002 .audio_inputs = {
1003 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
1004 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1005 },
1006 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1007 .gpio_init = { .direction = 0x0800, .initial_value = 0 },
1008 .gpio_audio_input = { .mask = 0x0800, .tuner = 0, .linein = 0, .radio = 0x0800 },
1009 .tuners = {
1010 /* This card has a Partsnic PTI-5NF05 tuner */
156f194b 1011 { .std = V4L2_STD_MN, .tuner = TUNER_TCL_2002N },
fdef464a
HV
1012 },
1013 .pci_list = ivtv_pci_aver_pvr150,
d9009201 1014 .i2c = &ivtv_i2c_radio,
fdef464a
HV
1015};
1016
1017/* ------------------------------------------------------------------------- */
1018
50364593
AW
1019/* AVerMedia UltraTV 1500 MCE (newer non-cx88 version, M113 variant) card */
1020
1021static const struct ivtv_card_pci_info ivtv_pci_aver_ultra1500mce[] = {
1022 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc019 },
1023 { 0, 0, 0 }
1024};
1025
1026static const struct ivtv_card ivtv_card_aver_ultra1500mce = {
1027 .type = IVTV_CARD_AVER_ULTRA1500MCE,
1028 .name = "AVerMedia UltraTV 1500 MCE / AVerTV M113",
1029 .v4l2_capabilities = IVTV_CAP_ENCODER,
1030 .hw_video = IVTV_HW_CX25840,
1031 .hw_audio = IVTV_HW_CX25840,
1032 .hw_audio_ctrl = IVTV_HW_CX25840,
1033 .hw_muxer = IVTV_HW_GPIO,
1034 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER |
1035 IVTV_HW_WM8739 | IVTV_HW_GPIO,
1036 .video_inputs = {
1037 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1038 { IVTV_CARD_INPUT_SVIDEO1, 1,
1039 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
1040 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1041 },
1042 .audio_inputs = {
1043 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
1044 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1045 },
1046 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1047 /* The 74HC4502 Dual 4:1 multiplexer is controlled by 2 GPIO lines */
1048 .gpio_init = { .direction = 0xc000, .initial_value = 0 },
1049 .gpio_audio_input = { .mask = 0xc000,
1050 .tuner = 0x0000,
1051 .linein = 0x4000,
1052 .radio = 0x8000 },
1053 .tuners = {
1054 /* The UltraTV 1500 MCE has a Philips FM1236 MK5 TV/FM tuner */
1055 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
1056 },
1057 .pci_list = ivtv_pci_aver_ultra1500mce,
1058 .i2c = &ivtv_i2c_std,
1059};
1060
1061/* ------------------------------------------------------------------------- */
1062
e08323f0
HV
1063/* AVerMedia EZMaker PCI Deluxe card */
1064
1065static const struct ivtv_card_pci_info ivtv_pci_aver_ezmaker[] = {
1066 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc03f },
1067 { 0, 0, 0 }
1068};
1069
1070static const struct ivtv_card ivtv_card_aver_ezmaker = {
1071 .type = IVTV_CARD_AVER_EZMAKER,
1072 .name = "AVerMedia EZMaker PCI Deluxe",
1073 .v4l2_capabilities = IVTV_CAP_ENCODER,
1074 .hw_video = IVTV_HW_CX25840,
1075 .hw_audio = IVTV_HW_CX25840,
1076 .hw_audio_ctrl = IVTV_HW_CX25840,
1077 .hw_all = IVTV_HW_CX25840 | IVTV_HW_WM8739,
1078 .video_inputs = {
1079 { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 },
1080 { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 },
1081 },
1082 .audio_inputs = {
1083 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 0 },
1084 },
1085 .gpio_init = { .direction = 0x4000, .initial_value = 0x4000 },
d9009201 1086 /* Does not have a tuner */
e08323f0
HV
1087 .pci_list = ivtv_pci_aver_ezmaker,
1088};
1089
1090/* ------------------------------------------------------------------------- */
1091
e2a1774d
HV
1092/* ASUS Falcon2 */
1093
1094static const struct ivtv_card_pci_info ivtv_pci_asus_falcon2[] = {
1095 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b66 },
1096 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x462e },
1097 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b2e },
1098 { 0, 0, 0 }
1099};
1100
1101static const struct ivtv_card ivtv_card_asus_falcon2 = {
1102 .type = IVTV_CARD_ASUS_FALCON2,
1103 .name = "ASUS Falcon2",
1104 .v4l2_capabilities = IVTV_CAP_ENCODER,
1105 .hw_video = IVTV_HW_CX25840,
1106 .hw_audio = IVTV_HW_CX25840,
1107 .hw_audio_ctrl = IVTV_HW_CX25840,
1108 .hw_muxer = IVTV_HW_M52790,
1109 .hw_all = IVTV_HW_CX25840 | IVTV_HW_M52790 | IVTV_HW_TUNER,
1110 .video_inputs = {
1111 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1112 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
1113 { IVTV_CARD_INPUT_COMPOSITE1, 2, CX25840_COMPOSITE2 },
1114 },
1115 .audio_inputs = {
1116 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, M52790_IN_TUNER },
1117 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL,
1118 M52790_IN_V2 | M52790_SW1_YCMIX | M52790_SW2_YCMIX },
1119 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, M52790_IN_V2 },
1120 },
1121 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, M52790_IN_TUNER },
1122 .tuners = {
156f194b 1123 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
e2a1774d
HV
1124 },
1125 .pci_list = ivtv_pci_asus_falcon2,
d9009201 1126 .i2c = &ivtv_i2c_std,
e2a1774d
HV
1127};
1128
22f23fcc
HV
1129/* ------------------------------------------------------------------------- */
1130
1131/* AVerMedia M104 miniPCI card */
1132
1133static const struct ivtv_card_pci_info ivtv_pci_aver_m104[] = {
1134 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc136 },
1135 { 0, 0, 0 }
1136};
1137
1138static const struct ivtv_card ivtv_card_aver_m104 = {
1139 .type = IVTV_CARD_AVER_M104,
1140 .name = "AVerMedia M104",
1141 .comment = "Not yet supported!\n",
1142 .v4l2_capabilities = 0, /*IVTV_CAP_ENCODER,*/
1143 .hw_video = IVTV_HW_CX25840,
1144 .hw_audio = IVTV_HW_CX25840,
1145 .hw_audio_ctrl = IVTV_HW_CX25840,
1146 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739,
1147 .video_inputs = {
1148 { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 },
1149 { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 },
1150 },
1151 .audio_inputs = {
1152 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1153 },
1154 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1155 /* enable line-in + reset tuner */
4451342d 1156 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
136531da 1157 .xceive_pin = 10,
22f23fcc
HV
1158 .tuners = {
1159 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
1160 },
1161 .pci_list = ivtv_pci_aver_m104,
1162 .i2c = &ivtv_i2c_std,
1163};
1164
d56eebfb
HV
1165/* ------------------------------------------------------------------------- */
1166
1167/* Buffalo PC-MV5L/PCI cards */
1168
1169static const struct ivtv_card_pci_info ivtv_pci_buffalo[] = {
1170 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x052b },
1171 { 0, 0, 0 }
1172};
1173
1174static const struct ivtv_card ivtv_card_buffalo = {
1175 .type = IVTV_CARD_BUFFALO_MV5L,
1176 .name = "Buffalo PC-MV5L/PCI",
1177 .v4l2_capabilities = IVTV_CAP_ENCODER,
1178 .hw_video = IVTV_HW_CX25840,
1179 .hw_audio = IVTV_HW_CX25840,
1180 .hw_audio_ctrl = IVTV_HW_CX25840,
1181 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
1182 .video_inputs = {
1183 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1184 { IVTV_CARD_INPUT_SVIDEO1, 1,
1185 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
1186 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1187 },
1188 .audio_inputs = {
1189 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
1190 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
1191 },
d56eebfb
HV
1192 .xceive_pin = 12,
1193 .tuners = {
1194 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
1195 },
1196 .pci_list = ivtv_pci_buffalo,
1197 .i2c = &ivtv_i2c_std,
1198};
1199
1a0adaf3
HV
1200static const struct ivtv_card *ivtv_card_list[] = {
1201 &ivtv_card_pvr250,
1202 &ivtv_card_pvr350,
1203 &ivtv_card_pvr150,
1204 &ivtv_card_m179,
1205 &ivtv_card_mpg600,
1206 &ivtv_card_mpg160,
1207 &ivtv_card_pg600,
1208 &ivtv_card_avc2410,
1209 &ivtv_card_avc2010,
1210 &ivtv_card_tg5000tv,
1211 &ivtv_card_va2000,
1212 &ivtv_card_cx23416gyc,
1213 &ivtv_card_gv_mvprx,
1214 &ivtv_card_gv_mvprx2e,
1215 &ivtv_card_gotview_pci_dvd,
1216 &ivtv_card_gotview_pci_dvd2,
1217 &ivtv_card_yuan_mpc622,
1218 &ivtv_card_dctmvtvp1,
1a0adaf3 1219 &ivtv_card_pg600v2,
37297805
HV
1220 &ivtv_card_club3d,
1221 &ivtv_card_avertv_mce116,
e2a1774d 1222 &ivtv_card_asus_falcon2,
fdef464a 1223 &ivtv_card_aver_pvr150,
e08323f0 1224 &ivtv_card_aver_ezmaker,
22f23fcc 1225 &ivtv_card_aver_m104,
d56eebfb 1226 &ivtv_card_buffalo,
1a0adaf3
HV
1227
1228 /* Variations of standard cards but with the same PCI IDs.
1229 These cards must come last in this list. */
1230 &ivtv_card_pvr350_v1,
1231 &ivtv_card_cx23416gyc_nogr,
1232 &ivtv_card_cx23416gyc_nogrycs,
1233};
1234
1235const struct ivtv_card *ivtv_get_card(u16 index)
1236{
1237 if (index >= ARRAY_SIZE(ivtv_card_list))
1238 return NULL;
1239 return ivtv_card_list[index];
1240}
1241
1242int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input)
1243{
1244 const struct ivtv_card_video_input *card_input = itv->card->video_inputs + index;
1245 static const char * const input_strs[] = {
1246 "Tuner 1",
1247 "S-Video 1",
1248 "S-Video 2",
1249 "Composite 1",
1250 "Composite 2",
1251 "Composite 3"
1252 };
1253
1254 memset(input, 0, sizeof(*input));
1255 if (index >= itv->nof_inputs)
1256 return -EINVAL;
1257 input->index = index;
cebfadff
HV
1258 strlcpy(input->name, input_strs[card_input->video_type - 1],
1259 sizeof(input->name));
1a0adaf3
HV
1260 input->type = (card_input->video_type == IVTV_CARD_INPUT_VID_TUNER ?
1261 V4L2_INPUT_TYPE_TUNER : V4L2_INPUT_TYPE_CAMERA);
1262 input->audioset = (1 << itv->nof_audio_inputs) - 1;
1263 input->std = (input->type == V4L2_INPUT_TYPE_TUNER) ?
1264 itv->tuner_std : V4L2_STD_ALL;
1265 return 0;
1266}
1267
1268int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output)
1269{
1270 const struct ivtv_card_output *card_output = itv->card->video_outputs + index;
1271
1272 memset(output, 0, sizeof(*output));
1273 if (index >= itv->card->nof_outputs)
1274 return -EINVAL;
1275 output->index = index;
cebfadff 1276 strlcpy(output->name, card_output->name, sizeof(output->name));
1a0adaf3
HV
1277 output->type = V4L2_OUTPUT_TYPE_ANALOG;
1278 output->audioset = 1;
1279 output->std = V4L2_STD_ALL;
1280 return 0;
1281}
1282
1283int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *audio)
1284{
1285 const struct ivtv_card_audio_input *aud_input = itv->card->audio_inputs + index;
1286 static const char * const input_strs[] = {
1287 "Tuner 1",
1288 "Line In 1",
1289 "Line In 2"
1290 };
1291
1292 memset(audio, 0, sizeof(*audio));
1293 if (index >= itv->nof_audio_inputs)
1294 return -EINVAL;
cebfadff
HV
1295 strlcpy(audio->name, input_strs[aud_input->audio_type - 1],
1296 sizeof(audio->name));
1a0adaf3
HV
1297 audio->index = index;
1298 audio->capability = V4L2_AUDCAP_STEREO;
1299 return 0;
1300}
1301
1302int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *aud_output)
1303{
1304 memset(aud_output, 0, sizeof(*aud_output));
1305 if (itv->card->video_outputs == NULL || index != 0)
1306 return -EINVAL;
cebfadff 1307 strlcpy(aud_output->name, "A/V Audio Out", sizeof(aud_output->name));
1a0adaf3
HV
1308 return 0;
1309}
This page took 0.408956 seconds and 5 git commands to generate.