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