]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
1da177e4 LT |
2 | * |
3 | * device driver for Conexant 2388x based TV cards | |
4 | * card-specific stuff. | |
5 | * | |
6 | * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License | |
19 | * along with this program; if not, write to the Free Software | |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
21 | */ | |
22 | ||
23 | #include <linux/init.h> | |
24 | #include <linux/module.h> | |
25 | #include <linux/pci.h> | |
26 | #include <linux/delay.h> | |
27 | ||
28 | #include "cx88.h" | |
55c88610 | 29 | #include "tea5767.h" |
c2cb8fcc | 30 | #include "tuner-xc2028.h" |
1da177e4 | 31 | |
bbc83597 TP |
32 | static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; |
33 | static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; | |
34 | static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; | |
35 | ||
36 | module_param_array(tuner, int, NULL, 0444); | |
37 | module_param_array(radio, int, NULL, 0444); | |
38 | module_param_array(card, int, NULL, 0444); | |
39 | ||
40 | MODULE_PARM_DESC(tuner,"tuner type"); | |
41 | MODULE_PARM_DESC(radio,"radio tuner type"); | |
42 | MODULE_PARM_DESC(card,"card type"); | |
43 | ||
44 | static unsigned int latency = UNSET; | |
45 | module_param(latency,int,0444); | |
46 | MODULE_PARM_DESC(latency,"pci latency timer"); | |
47 | ||
1da177e4 LT |
48 | /* ------------------------------------------------------------------ */ |
49 | /* board config info */ | |
50 | ||
bbc83597 | 51 | static const struct cx88_board cx88_boards[] = { |
1da177e4 LT |
52 | [CX88_BOARD_UNKNOWN] = { |
53 | .name = "UNKNOWN/GENERIC", | |
54 | .tuner_type = UNSET, | |
b45009b0 MCC |
55 | .radio_type = UNSET, |
56 | .tuner_addr = ADDR_UNSET, | |
57 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
58 | .input = {{ |
59 | .type = CX88_VMUX_COMPOSITE1, | |
60 | .vmux = 0, | |
61 | },{ | |
62 | .type = CX88_VMUX_COMPOSITE2, | |
63 | .vmux = 1, | |
64 | },{ | |
65 | .type = CX88_VMUX_COMPOSITE3, | |
66 | .vmux = 2, | |
67 | },{ | |
68 | .type = CX88_VMUX_COMPOSITE4, | |
69 | .vmux = 3, | |
70 | }}, | |
71 | }, | |
72 | [CX88_BOARD_HAUPPAUGE] = { | |
73 | .name = "Hauppauge WinTV 34xxx models", | |
74 | .tuner_type = UNSET, | |
b45009b0 MCC |
75 | .radio_type = UNSET, |
76 | .tuner_addr = ADDR_UNSET, | |
77 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
78 | .tda9887_conf = TDA9887_PRESENT, |
79 | .input = {{ | |
80 | .type = CX88_VMUX_TELEVISION, | |
81 | .vmux = 0, | |
82 | .gpio0 = 0xff00, // internal decoder | |
83 | },{ | |
84 | .type = CX88_VMUX_DEBUG, | |
85 | .vmux = 0, | |
86 | .gpio0 = 0xff01, // mono from tuner chip | |
87 | },{ | |
88 | .type = CX88_VMUX_COMPOSITE1, | |
89 | .vmux = 1, | |
90 | .gpio0 = 0xff02, | |
91 | },{ | |
92 | .type = CX88_VMUX_SVIDEO, | |
93 | .vmux = 2, | |
94 | .gpio0 = 0xff02, | |
95 | }}, | |
96 | .radio = { | |
97 | .type = CX88_RADIO, | |
98 | .gpio0 = 0xff01, | |
99 | }, | |
100 | }, | |
101 | [CX88_BOARD_GDI] = { | |
102 | .name = "GDI Black Gold", | |
103 | .tuner_type = UNSET, | |
b45009b0 MCC |
104 | .radio_type = UNSET, |
105 | .tuner_addr = ADDR_UNSET, | |
106 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
107 | .input = {{ |
108 | .type = CX88_VMUX_TELEVISION, | |
109 | .vmux = 0, | |
fd3113e8 MCC |
110 | },{ |
111 | .type = CX88_VMUX_SVIDEO, | |
112 | .vmux = 2, | |
1da177e4 LT |
113 | }}, |
114 | }, | |
115 | [CX88_BOARD_PIXELVIEW] = { | |
116 | .name = "PixelView", | |
b45009b0 MCC |
117 | .tuner_type = TUNER_PHILIPS_PAL, |
118 | .radio_type = UNSET, | |
119 | .tuner_addr = ADDR_UNSET, | |
120 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
121 | .input = {{ |
122 | .type = CX88_VMUX_TELEVISION, | |
123 | .vmux = 0, | |
124 | .gpio0 = 0xff00, // internal decoder | |
125 | },{ | |
126 | .type = CX88_VMUX_COMPOSITE1, | |
127 | .vmux = 1, | |
128 | },{ | |
129 | .type = CX88_VMUX_SVIDEO, | |
130 | .vmux = 2, | |
131 | }}, | |
132 | .radio = { | |
133 | .type = CX88_RADIO, | |
134 | .gpio0 = 0xff10, | |
47ee2f38 | 135 | }, |
1da177e4 LT |
136 | }, |
137 | [CX88_BOARD_ATI_WONDER_PRO] = { | |
138 | .name = "ATI TV Wonder Pro", | |
b45009b0 MCC |
139 | .tuner_type = TUNER_PHILIPS_4IN1, |
140 | .radio_type = UNSET, | |
141 | .tuner_addr = ADDR_UNSET, | |
142 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
143 | .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER, |
144 | .input = {{ | |
145 | .type = CX88_VMUX_TELEVISION, | |
146 | .vmux = 0, | |
4ac97914 | 147 | .gpio0 = 0x03ff, |
1da177e4 LT |
148 | },{ |
149 | .type = CX88_VMUX_COMPOSITE1, | |
150 | .vmux = 1, | |
4ac97914 | 151 | .gpio0 = 0x03fe, |
1da177e4 LT |
152 | },{ |
153 | .type = CX88_VMUX_SVIDEO, | |
154 | .vmux = 2, | |
4ac97914 | 155 | .gpio0 = 0x03fe, |
1da177e4 LT |
156 | }}, |
157 | }, | |
4ac97914 MCC |
158 | [CX88_BOARD_WINFAST2000XP_EXPERT] = { |
159 | .name = "Leadtek Winfast 2000XP Expert", | |
160 | .tuner_type = TUNER_PHILIPS_4IN1, | |
b45009b0 MCC |
161 | .radio_type = UNSET, |
162 | .tuner_addr = ADDR_UNSET, | |
163 | .radio_addr = ADDR_UNSET, | |
1da177e4 | 164 | .tda9887_conf = TDA9887_PRESENT, |
4ac97914 MCC |
165 | .input = {{ |
166 | .type = CX88_VMUX_TELEVISION, | |
167 | .vmux = 0, | |
1da177e4 LT |
168 | .gpio0 = 0x00F5e700, |
169 | .gpio1 = 0x00003004, | |
170 | .gpio2 = 0x00F5e700, | |
171 | .gpio3 = 0x02000000, | |
172 | },{ | |
173 | .type = CX88_VMUX_COMPOSITE1, | |
174 | .vmux = 1, | |
175 | .gpio0 = 0x00F5c700, | |
176 | .gpio1 = 0x00003004, | |
177 | .gpio2 = 0x00F5c700, | |
178 | .gpio3 = 0x02000000, | |
179 | },{ | |
180 | .type = CX88_VMUX_SVIDEO, | |
181 | .vmux = 2, | |
182 | .gpio0 = 0x00F5c700, | |
183 | .gpio1 = 0x00003004, | |
184 | .gpio2 = 0x00F5c700, | |
185 | .gpio3 = 0x02000000, | |
4ac97914 MCC |
186 | }}, |
187 | .radio = { | |
188 | .type = CX88_RADIO, | |
1da177e4 LT |
189 | .gpio0 = 0x00F5d700, |
190 | .gpio1 = 0x00003004, | |
191 | .gpio2 = 0x00F5d700, | |
192 | .gpio3 = 0x02000000, | |
4ac97914 MCC |
193 | }, |
194 | }, | |
7418f346 | 195 | [CX88_BOARD_AVERTV_STUDIO_303] = { |
1da177e4 | 196 | .name = "AverTV Studio 303 (M126)", |
b45009b0 MCC |
197 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, |
198 | .radio_type = UNSET, | |
199 | .tuner_addr = ADDR_UNSET, | |
200 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
201 | .tda9887_conf = TDA9887_PRESENT, |
202 | .input = {{ | |
203 | .type = CX88_VMUX_TELEVISION, | |
204 | .vmux = 0, | |
4aca4831 | 205 | .gpio1 = 0xe09f, |
1da177e4 LT |
206 | },{ |
207 | .type = CX88_VMUX_COMPOSITE1, | |
208 | .vmux = 1, | |
4aca4831 | 209 | .gpio1 = 0xe05f, |
1da177e4 LT |
210 | },{ |
211 | .type = CX88_VMUX_SVIDEO, | |
212 | .vmux = 2, | |
4aca4831 | 213 | .gpio1 = 0xe05f, |
1da177e4 LT |
214 | }}, |
215 | .radio = { | |
4aca4831 | 216 | .gpio1 = 0xe0df, |
1da177e4 LT |
217 | .type = CX88_RADIO, |
218 | }, | |
219 | }, | |
220 | [CX88_BOARD_MSI_TVANYWHERE_MASTER] = { | |
221 | // added gpio values thanks to Michal | |
222 | // values for PAL from DScaler | |
223 | .name = "MSI TV-@nywhere Master", | |
b45009b0 MCC |
224 | .tuner_type = TUNER_MT2032, |
225 | .radio_type = UNSET, | |
226 | .tuner_addr = ADDR_UNSET, | |
227 | .radio_addr = ADDR_UNSET, | |
3ae1adc6 | 228 | .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC, |
1da177e4 LT |
229 | .input = {{ |
230 | .type = CX88_VMUX_TELEVISION, | |
231 | .vmux = 0, | |
232 | .gpio0 = 0x000040bf, | |
233 | .gpio1 = 0x000080c0, | |
234 | .gpio2 = 0x0000ff40, | |
235 | },{ | |
4ac97914 MCC |
236 | .type = CX88_VMUX_COMPOSITE1, |
237 | .vmux = 1, | |
1da177e4 LT |
238 | .gpio0 = 0x000040bf, |
239 | .gpio1 = 0x000080c0, | |
240 | .gpio2 = 0x0000ff40, | |
241 | },{ | |
4ac97914 MCC |
242 | .type = CX88_VMUX_SVIDEO, |
243 | .vmux = 2, | |
1da177e4 LT |
244 | .gpio0 = 0x000040bf, |
245 | .gpio1 = 0x000080c0, | |
246 | .gpio2 = 0x0000ff40, | |
4ac97914 MCC |
247 | }}, |
248 | .radio = { | |
1da177e4 | 249 | .type = CX88_RADIO, |
55c88610 MCC |
250 | .vmux = 3, |
251 | .gpio0 = 0x000040bf, | |
252 | .gpio1 = 0x000080c0, | |
253 | .gpio2 = 0x0000ff20, | |
4ac97914 | 254 | }, |
1da177e4 LT |
255 | }, |
256 | [CX88_BOARD_WINFAST_DV2000] = { | |
4ac97914 MCC |
257 | .name = "Leadtek Winfast DV2000", |
258 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | |
b45009b0 MCC |
259 | .radio_type = UNSET, |
260 | .tuner_addr = ADDR_UNSET, | |
261 | .radio_addr = ADDR_UNSET, | |
1da177e4 | 262 | .tda9887_conf = TDA9887_PRESENT, |
4ac97914 MCC |
263 | .input = {{ |
264 | .type = CX88_VMUX_TELEVISION, | |
265 | .vmux = 0, | |
1da177e4 LT |
266 | .gpio0 = 0x0035e700, |
267 | .gpio1 = 0x00003004, | |
268 | .gpio2 = 0x0035e700, | |
269 | .gpio3 = 0x02000000, | |
270 | },{ | |
271 | ||
272 | .type = CX88_VMUX_COMPOSITE1, | |
273 | .vmux = 1, | |
274 | .gpio0 = 0x0035c700, | |
275 | .gpio1 = 0x00003004, | |
276 | .gpio2 = 0x0035c700, | |
277 | .gpio3 = 0x02000000, | |
278 | },{ | |
279 | .type = CX88_VMUX_SVIDEO, | |
280 | .vmux = 2, | |
281 | .gpio0 = 0x0035c700, | |
282 | .gpio1 = 0x0035c700, | |
283 | .gpio2 = 0x02000000, | |
284 | .gpio3 = 0x02000000, | |
285 | }}, | |
4ac97914 | 286 | .radio = { |
1da177e4 LT |
287 | .type = CX88_RADIO, |
288 | .gpio0 = 0x0035d700, | |
289 | .gpio1 = 0x00007004, | |
290 | .gpio2 = 0x0035d700, | |
291 | .gpio3 = 0x02000000, | |
47ee2f38 | 292 | }, |
4ac97914 | 293 | }, |
b45009b0 | 294 | [CX88_BOARD_LEADTEK_PVR2000] = { |
1da177e4 | 295 | // gpio values for PAL version from regspy by DScaler |
b45009b0 MCC |
296 | .name = "Leadtek PVR 2000", |
297 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | |
298 | .radio_type = UNSET, | |
299 | .tuner_addr = ADDR_UNSET, | |
300 | .radio_addr = ADDR_UNSET, | |
1da177e4 | 301 | .tda9887_conf = TDA9887_PRESENT, |
b45009b0 MCC |
302 | .input = {{ |
303 | .type = CX88_VMUX_TELEVISION, | |
304 | .vmux = 0, | |
305 | .gpio0 = 0x0000bde2, | |
7b27d45b | 306 | .audioroute = 1, |
b45009b0 MCC |
307 | },{ |
308 | .type = CX88_VMUX_COMPOSITE1, | |
309 | .vmux = 1, | |
310 | .gpio0 = 0x0000bde6, | |
7b27d45b | 311 | .audioroute = 1, |
b45009b0 MCC |
312 | },{ |
313 | .type = CX88_VMUX_SVIDEO, | |
314 | .vmux = 2, | |
315 | .gpio0 = 0x0000bde6, | |
7b27d45b | 316 | .audioroute = 1, |
b45009b0 MCC |
317 | }}, |
318 | .radio = { | |
319 | .type = CX88_RADIO, | |
320 | .gpio0 = 0x0000bd62, | |
7b27d45b | 321 | .audioroute = 1, |
b45009b0 | 322 | }, |
48d5e803 | 323 | .mpeg = CX88_MPEG_BLACKBIRD, |
b45009b0 | 324 | }, |
1da177e4 | 325 | [CX88_BOARD_IODATA_GVVCP3PCI] = { |
4ac97914 | 326 | .name = "IODATA GV-VCP3/PCI", |
1da177e4 | 327 | .tuner_type = TUNER_ABSENT, |
4ac97914 | 328 | .radio_type = UNSET, |
b45009b0 MCC |
329 | .tuner_addr = ADDR_UNSET, |
330 | .radio_addr = ADDR_UNSET, | |
331 | .input = {{ | |
4ac97914 MCC |
332 | .type = CX88_VMUX_COMPOSITE1, |
333 | .vmux = 0, | |
334 | },{ | |
335 | .type = CX88_VMUX_COMPOSITE2, | |
336 | .vmux = 1, | |
337 | },{ | |
338 | .type = CX88_VMUX_SVIDEO, | |
339 | .vmux = 2, | |
340 | }}, | |
341 | }, | |
1da177e4 | 342 | [CX88_BOARD_PROLINK_PLAYTVPVR] = { |
4ac97914 MCC |
343 | .name = "Prolink PlayTV PVR", |
344 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, | |
b45009b0 MCC |
345 | .radio_type = UNSET, |
346 | .tuner_addr = ADDR_UNSET, | |
347 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
348 | .tda9887_conf = TDA9887_PRESENT, |
349 | .input = {{ | |
350 | .type = CX88_VMUX_TELEVISION, | |
351 | .vmux = 0, | |
fc34f165 | 352 | .gpio0 = 0xbff0, |
1da177e4 LT |
353 | },{ |
354 | .type = CX88_VMUX_COMPOSITE1, | |
355 | .vmux = 1, | |
fc34f165 | 356 | .gpio0 = 0xbff3, |
1da177e4 LT |
357 | },{ |
358 | .type = CX88_VMUX_SVIDEO, | |
359 | .vmux = 2, | |
fc34f165 | 360 | .gpio0 = 0xbff3, |
1da177e4 LT |
361 | }}, |
362 | .radio = { | |
363 | .type = CX88_RADIO, | |
fc34f165 | 364 | .gpio0 = 0xbff0, |
1da177e4 LT |
365 | }, |
366 | }, | |
367 | [CX88_BOARD_ASUS_PVR_416] = { | |
368 | .name = "ASUS PVR-416", | |
b45009b0 MCC |
369 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, |
370 | .radio_type = UNSET, | |
371 | .tuner_addr = ADDR_UNSET, | |
372 | .radio_addr = ADDR_UNSET, | |
373 | .tda9887_conf = TDA9887_PRESENT, | |
1da177e4 LT |
374 | .input = {{ |
375 | .type = CX88_VMUX_TELEVISION, | |
376 | .vmux = 0, | |
377 | .gpio0 = 0x0000fde6, | |
4ac97914 | 378 | },{ |
1da177e4 LT |
379 | .type = CX88_VMUX_SVIDEO, |
380 | .vmux = 2, | |
381 | .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in? | |
7b27d45b | 382 | .audioroute = 1, |
1da177e4 | 383 | }}, |
4ac97914 MCC |
384 | .radio = { |
385 | .type = CX88_RADIO, | |
1da177e4 | 386 | .gpio0 = 0x0000fde2, |
4ac97914 | 387 | }, |
48d5e803 | 388 | .mpeg = CX88_MPEG_BLACKBIRD, |
1da177e4 LT |
389 | }, |
390 | [CX88_BOARD_MSI_TVANYWHERE] = { | |
391 | .name = "MSI TV-@nywhere", | |
b45009b0 MCC |
392 | .tuner_type = TUNER_MT2032, |
393 | .radio_type = UNSET, | |
394 | .tuner_addr = ADDR_UNSET, | |
395 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
396 | .tda9887_conf = TDA9887_PRESENT, |
397 | .input = {{ | |
398 | .type = CX88_VMUX_TELEVISION, | |
399 | .vmux = 0, | |
400 | .gpio0 = 0x00000fbf, | |
401 | .gpio2 = 0x0000fc08, | |
402 | },{ | |
4ac97914 MCC |
403 | .type = CX88_VMUX_COMPOSITE1, |
404 | .vmux = 1, | |
1da177e4 LT |
405 | .gpio0 = 0x00000fbf, |
406 | .gpio2 = 0x0000fc68, | |
407 | },{ | |
4ac97914 MCC |
408 | .type = CX88_VMUX_SVIDEO, |
409 | .vmux = 2, | |
1da177e4 LT |
410 | .gpio0 = 0x00000fbf, |
411 | .gpio2 = 0x0000fc68, | |
4ac97914 | 412 | }}, |
1da177e4 | 413 | }, |
4ac97914 MCC |
414 | [CX88_BOARD_KWORLD_DVB_T] = { |
415 | .name = "KWorld/VStream XPert DVB-T", | |
1da177e4 | 416 | .tuner_type = TUNER_ABSENT, |
b45009b0 MCC |
417 | .radio_type = UNSET, |
418 | .tuner_addr = ADDR_UNSET, | |
419 | .radio_addr = ADDR_UNSET, | |
4ac97914 MCC |
420 | .input = {{ |
421 | .type = CX88_VMUX_COMPOSITE1, | |
422 | .vmux = 1, | |
1da177e4 LT |
423 | .gpio0 = 0x0700, |
424 | .gpio2 = 0x0101, | |
4ac97914 MCC |
425 | },{ |
426 | .type = CX88_VMUX_SVIDEO, | |
427 | .vmux = 2, | |
1da177e4 LT |
428 | .gpio0 = 0x0700, |
429 | .gpio2 = 0x0101, | |
4ac97914 | 430 | }}, |
48d5e803 | 431 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
432 | }, |
433 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = { | |
a82decf6 | 434 | .name = "DViCO FusionHDTV DVB-T1", |
1da177e4 | 435 | .tuner_type = TUNER_ABSENT, /* No analog tuner */ |
b45009b0 MCC |
436 | .radio_type = UNSET, |
437 | .tuner_addr = ADDR_UNSET, | |
438 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
439 | .input = {{ |
440 | .type = CX88_VMUX_COMPOSITE1, | |
441 | .vmux = 1, | |
442 | .gpio0 = 0x000027df, | |
47ee2f38 | 443 | },{ |
1da177e4 LT |
444 | .type = CX88_VMUX_SVIDEO, |
445 | .vmux = 2, | |
446 | .gpio0 = 0x000027df, | |
447 | }}, | |
48d5e803 | 448 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
449 | }, |
450 | [CX88_BOARD_KWORLD_LTV883] = { | |
451 | .name = "KWorld LTV883RF", | |
b45009b0 MCC |
452 | .tuner_type = TUNER_TNF_8831BGFF, |
453 | .radio_type = UNSET, | |
454 | .tuner_addr = ADDR_UNSET, | |
455 | .radio_addr = ADDR_UNSET, | |
4ac97914 MCC |
456 | .input = {{ |
457 | .type = CX88_VMUX_TELEVISION, | |
458 | .vmux = 0, | |
459 | .gpio0 = 0x07f8, | |
1da177e4 LT |
460 | },{ |
461 | .type = CX88_VMUX_DEBUG, | |
462 | .vmux = 0, | |
463 | .gpio0 = 0x07f9, // mono from tuner chip | |
4ac97914 MCC |
464 | },{ |
465 | .type = CX88_VMUX_COMPOSITE1, | |
466 | .vmux = 1, | |
467 | .gpio0 = 0x000007fa, | |
468 | },{ | |
469 | .type = CX88_VMUX_SVIDEO, | |
470 | .vmux = 2, | |
471 | .gpio0 = 0x000007fa, | |
472 | }}, | |
473 | .radio = { | |
474 | .type = CX88_RADIO, | |
475 | .gpio0 = 0x000007f8, | |
476 | }, | |
1da177e4 | 477 | }, |
a82decf6 MCC |
478 | [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = { |
479 | .name = "DViCO FusionHDTV 3 Gold-Q", | |
1da177e4 | 480 | .tuner_type = TUNER_MICROTUNE_4042FI5, |
b45009b0 MCC |
481 | .radio_type = UNSET, |
482 | .tuner_addr = ADDR_UNSET, | |
483 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
484 | /* |
485 | GPIO[0] resets DT3302 DTV receiver | |
486 | 0 - reset asserted | |
487 | 1 - normal operation | |
488 | GPIO[1] mutes analog audio output connector | |
489 | 0 - enable selected source | |
490 | 1 - mute | |
491 | GPIO[2] selects source for analog audio output connector | |
492 | 0 - analog audio input connector on tab | |
493 | 1 - analog DAC output from CX23881 chip | |
494 | GPIO[3] selects RF input connector on tuner module | |
495 | 0 - RF connector labeled CABLE | |
496 | 1 - RF connector labeled ANT | |
a82decf6 MCC |
497 | GPIO[4] selects high RF for QAM256 mode |
498 | 0 - normal RF | |
499 | 1 - high RF | |
1da177e4 LT |
500 | */ |
501 | .input = {{ | |
502 | .type = CX88_VMUX_TELEVISION, | |
503 | .vmux = 0, | |
504 | .gpio0 = 0x0f0d, | |
505 | },{ | |
506 | .type = CX88_VMUX_CABLE, | |
507 | .vmux = 0, | |
508 | .gpio0 = 0x0f05, | |
509 | },{ | |
510 | .type = CX88_VMUX_COMPOSITE1, | |
511 | .vmux = 1, | |
512 | .gpio0 = 0x0f00, | |
513 | },{ | |
514 | .type = CX88_VMUX_SVIDEO, | |
515 | .vmux = 2, | |
516 | .gpio0 = 0x0f00, | |
517 | }}, | |
48d5e803 | 518 | .mpeg = CX88_MPEG_DVB, |
1da177e4 | 519 | }, |
4ac97914 | 520 | [CX88_BOARD_HAUPPAUGE_DVB_T1] = { |
b45009b0 | 521 | .name = "Hauppauge Nova-T DVB-T", |
1da177e4 | 522 | .tuner_type = TUNER_ABSENT, |
b45009b0 MCC |
523 | .radio_type = UNSET, |
524 | .tuner_addr = ADDR_UNSET, | |
525 | .radio_addr = ADDR_UNSET, | |
526 | .input = {{ | |
4ac97914 MCC |
527 | .type = CX88_VMUX_DVB, |
528 | .vmux = 0, | |
529 | }}, | |
48d5e803 | 530 | .mpeg = CX88_MPEG_DVB, |
1da177e4 | 531 | }, |
4ac97914 | 532 | [CX88_BOARD_CONEXANT_DVB_T1] = { |
1da177e4 LT |
533 | .name = "Conexant DVB-T reference design", |
534 | .tuner_type = TUNER_ABSENT, | |
b45009b0 MCC |
535 | .radio_type = UNSET, |
536 | .tuner_addr = ADDR_UNSET, | |
537 | .radio_addr = ADDR_UNSET, | |
4ac97914 MCC |
538 | .input = {{ |
539 | .type = CX88_VMUX_DVB, | |
540 | .vmux = 0, | |
541 | }}, | |
48d5e803 | 542 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
543 | }, |
544 | [CX88_BOARD_PROVIDEO_PV259] = { | |
545 | .name = "Provideo PV259", | |
546 | .tuner_type = TUNER_PHILIPS_FQ1216ME, | |
b45009b0 MCC |
547 | .radio_type = UNSET, |
548 | .tuner_addr = ADDR_UNSET, | |
549 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
550 | .input = {{ |
551 | .type = CX88_VMUX_TELEVISION, | |
552 | .vmux = 0, | |
7b27d45b | 553 | .audioroute = 1, |
1da177e4 | 554 | }}, |
48d5e803 | 555 | .mpeg = CX88_MPEG_BLACKBIRD, |
1da177e4 LT |
556 | }, |
557 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = { | |
a82decf6 | 558 | .name = "DViCO FusionHDTV DVB-T Plus", |
1da177e4 | 559 | .tuner_type = TUNER_ABSENT, /* No analog tuner */ |
b45009b0 MCC |
560 | .radio_type = UNSET, |
561 | .tuner_addr = ADDR_UNSET, | |
562 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
563 | .input = {{ |
564 | .type = CX88_VMUX_COMPOSITE1, | |
565 | .vmux = 1, | |
566 | .gpio0 = 0x000027df, | |
47ee2f38 | 567 | },{ |
1da177e4 LT |
568 | .type = CX88_VMUX_SVIDEO, |
569 | .vmux = 2, | |
570 | .gpio0 = 0x000027df, | |
571 | }}, | |
48d5e803 | 572 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
573 | }, |
574 | [CX88_BOARD_DNTV_LIVE_DVB_T] = { | |
4ac97914 | 575 | .name = "digitalnow DNTV Live! DVB-T", |
1da177e4 | 576 | .tuner_type = TUNER_ABSENT, |
b45009b0 MCC |
577 | .radio_type = UNSET, |
578 | .tuner_addr = ADDR_UNSET, | |
579 | .radio_addr = ADDR_UNSET, | |
4ac97914 | 580 | .input = {{ |
1da177e4 LT |
581 | .type = CX88_VMUX_COMPOSITE1, |
582 | .vmux = 1, | |
583 | .gpio0 = 0x00000700, | |
584 | .gpio2 = 0x00000101, | |
585 | },{ | |
586 | .type = CX88_VMUX_SVIDEO, | |
587 | .vmux = 2, | |
588 | .gpio0 = 0x00000700, | |
589 | .gpio2 = 0x00000101, | |
590 | }}, | |
48d5e803 | 591 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
592 | }, |
593 | [CX88_BOARD_PCHDTV_HD3000] = { | |
594 | .name = "pcHDTV HD3000 HDTV", | |
9175b854 | 595 | .tuner_type = TUNER_THOMSON_DTT761X, |
b45009b0 MCC |
596 | .radio_type = UNSET, |
597 | .tuner_addr = ADDR_UNSET, | |
598 | .radio_addr = ADDR_UNSET, | |
e4f5c82a | 599 | .tda9887_conf = TDA9887_PRESENT, |
19dc74b7 TP |
600 | /* GPIO[2] = audio source for analog audio out connector |
601 | * 0 = analog audio input connector | |
602 | * 1 = CX88 audio DACs | |
603 | * | |
604 | * GPIO[7] = input to CX88's audio/chroma ADC | |
605 | * 0 = FM 10.7 MHz IF | |
606 | * 1 = Sound 4.5 MHz IF | |
607 | * | |
608 | * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively | |
609 | * | |
610 | * GPIO[16] = Remote control input | |
611 | */ | |
1da177e4 LT |
612 | .input = {{ |
613 | .type = CX88_VMUX_TELEVISION, | |
614 | .vmux = 0, | |
615 | .gpio0 = 0x00008484, | |
1da177e4 LT |
616 | },{ |
617 | .type = CX88_VMUX_COMPOSITE1, | |
618 | .vmux = 1, | |
619 | .gpio0 = 0x00008400, | |
1da177e4 LT |
620 | },{ |
621 | .type = CX88_VMUX_SVIDEO, | |
622 | .vmux = 2, | |
623 | .gpio0 = 0x00008400, | |
1da177e4 LT |
624 | }}, |
625 | .radio = { | |
626 | .type = CX88_RADIO, | |
19dc74b7 | 627 | .gpio0 = 0x00008404, |
1da177e4 | 628 | }, |
48d5e803 | 629 | .mpeg = CX88_MPEG_DVB, |
1da177e4 LT |
630 | }, |
631 | [CX88_BOARD_HAUPPAUGE_ROSLYN] = { | |
632 | // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu> | |
633 | // GPIO values obtained from regspy, courtesy Sean Covel | |
b45009b0 MCC |
634 | .name = "Hauppauge WinTV 28xxx (Roslyn) models", |
635 | .tuner_type = UNSET, | |
636 | .radio_type = UNSET, | |
637 | .tuner_addr = ADDR_UNSET, | |
638 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
639 | .input = {{ |
640 | .type = CX88_VMUX_TELEVISION, | |
641 | .vmux = 0, | |
0345c387 | 642 | .gpio0 = 0xed1a, |
1da177e4 LT |
643 | .gpio2 = 0x00ff, |
644 | },{ | |
645 | .type = CX88_VMUX_DEBUG, | |
646 | .vmux = 0, | |
0345c387 | 647 | .gpio0 = 0xff01, |
1da177e4 LT |
648 | },{ |
649 | .type = CX88_VMUX_COMPOSITE1, | |
650 | .vmux = 1, | |
651 | .gpio0 = 0xff02, | |
652 | },{ | |
653 | .type = CX88_VMUX_SVIDEO, | |
654 | .vmux = 2, | |
655 | .gpio0 = 0xed92, | |
656 | .gpio2 = 0x00ff, | |
657 | }}, | |
658 | .radio = { | |
659 | .type = CX88_RADIO, | |
660 | .gpio0 = 0xed96, | |
661 | .gpio2 = 0x00ff, | |
662 | }, | |
48d5e803 | 663 | .mpeg = CX88_MPEG_BLACKBIRD, |
1da177e4 LT |
664 | }, |
665 | [CX88_BOARD_DIGITALLOGIC_MEC] = { | |
1da177e4 | 666 | .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)", |
b45009b0 MCC |
667 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, |
668 | .radio_type = UNSET, | |
669 | .tuner_addr = ADDR_UNSET, | |
670 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
671 | .tda9887_conf = TDA9887_PRESENT, |
672 | .input = {{ | |
673 | .type = CX88_VMUX_TELEVISION, | |
674 | .vmux = 0, | |
b45009b0 | 675 | .gpio0 = 0x00009d80, |
7b27d45b | 676 | .audioroute = 1, |
1da177e4 LT |
677 | },{ |
678 | .type = CX88_VMUX_COMPOSITE1, | |
679 | .vmux = 1, | |
b45009b0 | 680 | .gpio0 = 0x00009d76, |
7b27d45b | 681 | .audioroute = 1, |
1da177e4 LT |
682 | },{ |
683 | .type = CX88_VMUX_SVIDEO, | |
684 | .vmux = 2, | |
b45009b0 | 685 | .gpio0 = 0x00009d76, |
7b27d45b | 686 | .audioroute = 1, |
1da177e4 LT |
687 | }}, |
688 | .radio = { | |
689 | .type = CX88_RADIO, | |
b45009b0 | 690 | .gpio0 = 0x00009d00, |
7b27d45b | 691 | .audioroute = 1, |
1da177e4 | 692 | }, |
48d5e803 | 693 | .mpeg = CX88_MPEG_BLACKBIRD, |
1da177e4 LT |
694 | }, |
695 | [CX88_BOARD_IODATA_GVBCTV7E] = { | |
696 | .name = "IODATA GV/BCTV7E", | |
697 | .tuner_type = TUNER_PHILIPS_FQ1286, | |
b45009b0 MCC |
698 | .radio_type = UNSET, |
699 | .tuner_addr = ADDR_UNSET, | |
700 | .radio_addr = ADDR_UNSET, | |
1da177e4 LT |
701 | .tda9887_conf = TDA9887_PRESENT, |
702 | .input = {{ | |
703 | .type = CX88_VMUX_TELEVISION, | |
704 | .vmux = 1, | |
705 | .gpio1 = 0x0000e03f, | |
706 | },{ | |
707 | .type = CX88_VMUX_COMPOSITE1, | |
708 | .vmux = 2, | |
709 | .gpio1 = 0x0000e07f, | |
710 | },{ | |
711 | .type = CX88_VMUX_SVIDEO, | |
712 | .vmux = 3, | |
713 | .gpio1 = 0x0000e07f, | |
714 | }} | |
715 | }, | |
239df2e2 MC |
716 | [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = { |
717 | .name = "PixelView PlayTV Ultra Pro (Stereo)", | |
b45009b0 MCC |
718 | /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ |
719 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | |
c5287ba1 MCC |
720 | .radio_type = UNSET, |
721 | .tuner_addr = ADDR_UNSET, | |
722 | .radio_addr = ADDR_UNSET, | |
239df2e2 MC |
723 | .input = {{ |
724 | .type = CX88_VMUX_TELEVISION, | |
725 | .vmux = 0, | |
b45009b0 | 726 | .gpio0 = 0xbf61, /* internal decoder */ |
239df2e2 MC |
727 | },{ |
728 | .type = CX88_VMUX_COMPOSITE1, | |
729 | .vmux = 1, | |
b45009b0 | 730 | .gpio0 = 0xbf63, |
239df2e2 MC |
731 | },{ |
732 | .type = CX88_VMUX_SVIDEO, | |
733 | .vmux = 2, | |
b45009b0 | 734 | .gpio0 = 0xbf63, |
239df2e2 MC |
735 | }}, |
736 | .radio = { | |
b45009b0 MCC |
737 | .type = CX88_RADIO, |
738 | .gpio0 = 0xbf60, | |
739 | }, | |
239df2e2 | 740 | }, |
4ac97914 | 741 | [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { |
a82decf6 | 742 | .name = "DViCO FusionHDTV 3 Gold-T", |
83ac8722 | 743 | .tuner_type = TUNER_THOMSON_DTT761X, |
b45009b0 MCC |
744 | .radio_type = UNSET, |
745 | .tuner_addr = ADDR_UNSET, | |
746 | .radio_addr = ADDR_UNSET, | |
e4f5c82a | 747 | .tda9887_conf = TDA9887_PRESENT, |
a82decf6 | 748 | .input = {{ |
4ac97914 MCC |
749 | .type = CX88_VMUX_TELEVISION, |
750 | .vmux = 0, | |
751 | .gpio0 = 0x97ed, | |
752 | },{ | |
753 | .type = CX88_VMUX_COMPOSITE1, | |
754 | .vmux = 1, | |
755 | .gpio0 = 0x97e9, | |
756 | },{ | |
757 | .type = CX88_VMUX_SVIDEO, | |
758 | .vmux = 2, | |
759 | .gpio0 = 0x97e9, | |
760 | }}, | |
48d5e803 | 761 | .mpeg = CX88_MPEG_DVB, |
4ac97914 MCC |
762 | }, |
763 | [CX88_BOARD_ADSTECH_DVB_T_PCI] = { | |
764 | .name = "ADS Tech Instant TV DVB-T PCI", | |
a82decf6 MCC |
765 | .tuner_type = TUNER_ABSENT, |
766 | .radio_type = UNSET, | |
767 | .tuner_addr = ADDR_UNSET, | |
768 | .radio_addr = ADDR_UNSET, | |
769 | .input = {{ | |
4ac97914 MCC |
770 | .type = CX88_VMUX_COMPOSITE1, |
771 | .vmux = 1, | |
a82decf6 MCC |
772 | .gpio0 = 0x0700, |
773 | .gpio2 = 0x0101, | |
4ac97914 MCC |
774 | },{ |
775 | .type = CX88_VMUX_SVIDEO, | |
776 | .vmux = 2, | |
a82decf6 MCC |
777 | .gpio0 = 0x0700, |
778 | .gpio2 = 0x0101, | |
4ac97914 | 779 | }}, |
48d5e803 | 780 | .mpeg = CX88_MPEG_DVB, |
a82decf6 | 781 | }, |
e057ee11 MK |
782 | [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = { |
783 | .name = "TerraTec Cinergy 1400 DVB-T", | |
784 | .tuner_type = TUNER_ABSENT, | |
785 | .input = {{ | |
786 | .type = CX88_VMUX_DVB, | |
787 | .vmux = 0, | |
05eda249 HB |
788 | },{ |
789 | .type = CX88_VMUX_COMPOSITE1, | |
790 | .vmux = 2, | |
791 | },{ | |
792 | .type = CX88_VMUX_SVIDEO, | |
793 | .vmux = 2, | |
e057ee11 | 794 | }}, |
48d5e803 | 795 | .mpeg = CX88_MPEG_DVB, |
e057ee11 | 796 | }, |
9fef07ca MK |
797 | [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = { |
798 | .name = "DViCO FusionHDTV 5 Gold", | |
9c26c8b1 | 799 | .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */ |
9fef07ca MK |
800 | .radio_type = UNSET, |
801 | .tuner_addr = ADDR_UNSET, | |
802 | .radio_addr = ADDR_UNSET, | |
e52e98a7 | 803 | .tda9887_conf = TDA9887_PRESENT, |
9fef07ca | 804 | .input = {{ |
4ac97914 MCC |
805 | .type = CX88_VMUX_TELEVISION, |
806 | .vmux = 0, | |
807 | .gpio0 = 0x87fd, | |
808 | },{ | |
809 | .type = CX88_VMUX_COMPOSITE1, | |
810 | .vmux = 1, | |
811 | .gpio0 = 0x87f9, | |
812 | },{ | |
813 | .type = CX88_VMUX_SVIDEO, | |
814 | .vmux = 2, | |
815 | .gpio0 = 0x87f9, | |
816 | }}, | |
48d5e803 | 817 | .mpeg = CX88_MPEG_DVB, |
9fef07ca | 818 | }, |
d45170ed NS |
819 | [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = { |
820 | .name = "AverMedia UltraTV Media Center PCI 550", | |
821 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, | |
822 | .radio_type = UNSET, | |
823 | .tuner_addr = ADDR_UNSET, | |
824 | .radio_addr = ADDR_UNSET, | |
825 | .tda9887_conf = TDA9887_PRESENT, | |
d45170ed NS |
826 | .input = {{ |
827 | .type = CX88_VMUX_COMPOSITE1, | |
828 | .vmux = 0, | |
829 | .gpio0 = 0x0000cd73, | |
7b27d45b | 830 | .audioroute = 1, |
d45170ed NS |
831 | },{ |
832 | .type = CX88_VMUX_SVIDEO, | |
833 | .vmux = 1, | |
834 | .gpio0 = 0x0000cd73, | |
7b27d45b | 835 | .audioroute = 1, |
d45170ed NS |
836 | },{ |
837 | .type = CX88_VMUX_TELEVISION, | |
838 | .vmux = 3, | |
839 | .gpio0 = 0x0000cdb3, | |
7b27d45b | 840 | .audioroute = 1, |
d45170ed NS |
841 | }}, |
842 | .radio = { | |
843 | .type = CX88_RADIO, | |
844 | .vmux = 2, | |
845 | .gpio0 = 0x0000cdf3, | |
7b27d45b | 846 | .audioroute = 1, |
d45170ed | 847 | }, |
5b26c82f | 848 | .mpeg = CX88_MPEG_BLACKBIRD, |
d45170ed | 849 | }, |
0bcc37c3 AW |
850 | [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = { |
851 | /* Alexander Wold <awold@bigfoot.com> */ | |
4ac97914 MCC |
852 | .name = "Kworld V-Stream Xpert DVD", |
853 | .tuner_type = UNSET, | |
854 | .input = {{ | |
855 | .type = CX88_VMUX_COMPOSITE1, | |
856 | .vmux = 1, | |
857 | .gpio0 = 0x03000000, | |
0bcc37c3 AW |
858 | .gpio1 = 0x01000000, |
859 | .gpio2 = 0x02000000, | |
860 | .gpio3 = 0x00100000, | |
4ac97914 MCC |
861 | },{ |
862 | .type = CX88_VMUX_SVIDEO, | |
863 | .vmux = 2, | |
864 | .gpio0 = 0x03000000, | |
865 | .gpio1 = 0x01000000, | |
866 | .gpio2 = 0x02000000, | |
867 | .gpio3 = 0x00100000, | |
868 | }}, | |
0bcc37c3 | 869 | }, |
e976f937 KL |
870 | [CX88_BOARD_ATI_HDTVWONDER] = { |
871 | .name = "ATI HDTV Wonder", | |
872 | .tuner_type = TUNER_PHILIPS_TUV1236D, | |
873 | .radio_type = UNSET, | |
874 | .tuner_addr = ADDR_UNSET, | |
875 | .radio_addr = ADDR_UNSET, | |
876 | .input = {{ | |
877 | .type = CX88_VMUX_TELEVISION, | |
878 | .vmux = 0, | |
879 | .gpio0 = 0x00000ff7, | |
880 | .gpio1 = 0x000000ff, | |
881 | .gpio2 = 0x00000001, | |
882 | .gpio3 = 0x00000000, | |
883 | },{ | |
884 | .type = CX88_VMUX_COMPOSITE1, | |
885 | .vmux = 1, | |
886 | .gpio0 = 0x00000ffe, | |
887 | .gpio1 = 0x000000ff, | |
888 | .gpio2 = 0x00000001, | |
889 | .gpio3 = 0x00000000, | |
890 | },{ | |
891 | .type = CX88_VMUX_SVIDEO, | |
892 | .vmux = 2, | |
893 | .gpio0 = 0x00000ffe, | |
894 | .gpio1 = 0x000000ff, | |
895 | .gpio2 = 0x00000001, | |
896 | .gpio3 = 0x00000000, | |
897 | }}, | |
48d5e803 | 898 | .mpeg = CX88_MPEG_DVB, |
e976f937 | 899 | }, |
2b5200a7 DS |
900 | [CX88_BOARD_WINFAST_DTV1000] = { |
901 | .name = "WinFast DTV1000-T", | |
902 | .tuner_type = TUNER_ABSENT, | |
903 | .radio_type = UNSET, | |
904 | .tuner_addr = ADDR_UNSET, | |
905 | .radio_addr = ADDR_UNSET, | |
906 | .input = {{ | |
907 | .type = CX88_VMUX_DVB, | |
908 | .vmux = 0, | |
e8f4e752 JD |
909 | },{ |
910 | .type = CX88_VMUX_COMPOSITE1, | |
911 | .vmux = 1, | |
912 | },{ | |
913 | .type = CX88_VMUX_SVIDEO, | |
914 | .vmux = 2, | |
2b5200a7 | 915 | }}, |
48d5e803 | 916 | .mpeg = CX88_MPEG_DVB, |
2b5200a7 | 917 | }, |
7418f346 LB |
918 | [CX88_BOARD_AVERTV_303] = { |
919 | .name = "AVerTV 303 (M126)", | |
920 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | |
921 | .radio_type = UNSET, | |
922 | .tuner_addr = ADDR_UNSET, | |
923 | .radio_addr = ADDR_UNSET, | |
924 | .tda9887_conf = TDA9887_PRESENT, | |
925 | .input = {{ | |
926 | .type = CX88_VMUX_TELEVISION, | |
927 | .vmux = 0, | |
928 | .gpio0 = 0x00ff, | |
929 | .gpio1 = 0xe09f, | |
930 | .gpio2 = 0x0010, | |
931 | .gpio3 = 0x0000, | |
932 | },{ | |
933 | .type = CX88_VMUX_COMPOSITE1, | |
934 | .vmux = 1, | |
935 | .gpio0 = 0x00ff, | |
936 | .gpio1 = 0xe05f, | |
937 | .gpio2 = 0x0010, | |
938 | .gpio3 = 0x0000, | |
939 | },{ | |
940 | .type = CX88_VMUX_SVIDEO, | |
941 | .vmux = 2, | |
942 | .gpio0 = 0x00ff, | |
943 | .gpio1 = 0xe05f, | |
944 | .gpio2 = 0x0010, | |
945 | .gpio3 = 0x0000, | |
946 | }}, | |
947 | }, | |
0fa14aa6 ST |
948 | [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = { |
949 | .name = "Hauppauge Nova-S-Plus DVB-S", | |
950 | .tuner_type = TUNER_ABSENT, | |
951 | .radio_type = UNSET, | |
952 | .tuner_addr = ADDR_UNSET, | |
953 | .radio_addr = ADDR_UNSET, | |
0fa14aa6 ST |
954 | .input = {{ |
955 | .type = CX88_VMUX_DVB, | |
956 | .vmux = 0, | |
957 | },{ | |
958 | .type = CX88_VMUX_COMPOSITE1, | |
959 | .vmux = 1, | |
960 | },{ | |
961 | .type = CX88_VMUX_SVIDEO, | |
962 | .vmux = 2, | |
963 | }}, | |
48d5e803 | 964 | .mpeg = CX88_MPEG_DVB, |
0fa14aa6 ST |
965 | }, |
966 | [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { | |
967 | .name = "Hauppauge Nova-SE2 DVB-S", | |
968 | .tuner_type = TUNER_ABSENT, | |
969 | .radio_type = UNSET, | |
970 | .tuner_addr = ADDR_UNSET, | |
971 | .radio_addr = ADDR_UNSET, | |
972 | .input = {{ | |
973 | .type = CX88_VMUX_DVB, | |
974 | .vmux = 0, | |
975 | }}, | |
48d5e803 | 976 | .mpeg = CX88_MPEG_DVB, |
0fa14aa6 | 977 | }, |
0e0351e3 VC |
978 | [CX88_BOARD_KWORLD_DVBS_100] = { |
979 | .name = "KWorld DVB-S 100", | |
980 | .tuner_type = TUNER_ABSENT, | |
981 | .radio_type = UNSET, | |
982 | .tuner_addr = ADDR_UNSET, | |
983 | .radio_addr = ADDR_UNSET, | |
984 | .input = {{ | |
985 | .type = CX88_VMUX_DVB, | |
986 | .vmux = 0, | |
987 | },{ | |
988 | .type = CX88_VMUX_COMPOSITE1, | |
989 | .vmux = 1, | |
990 | },{ | |
991 | .type = CX88_VMUX_SVIDEO, | |
992 | .vmux = 2, | |
993 | }}, | |
48d5e803 | 994 | .mpeg = CX88_MPEG_DVB, |
0e0351e3 | 995 | }, |
611900c1 ST |
996 | [CX88_BOARD_HAUPPAUGE_HVR1100] = { |
997 | .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", | |
998 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
999 | .radio_type = UNSET, | |
1000 | .tuner_addr = ADDR_UNSET, | |
1001 | .radio_addr = ADDR_UNSET, | |
1002 | .tda9887_conf = TDA9887_PRESENT, | |
1003 | .input = {{ | |
1004 | .type = CX88_VMUX_TELEVISION, | |
1005 | .vmux = 0, | |
1006 | },{ | |
1007 | .type = CX88_VMUX_COMPOSITE1, | |
1008 | .vmux = 1, | |
1009 | },{ | |
1010 | .type = CX88_VMUX_SVIDEO, | |
1011 | .vmux = 2, | |
1012 | }}, | |
1013 | /* fixme: Add radio support */ | |
48d5e803 | 1014 | .mpeg = CX88_MPEG_DVB, |
611900c1 ST |
1015 | }, |
1016 | [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { | |
1017 | .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", | |
1018 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
1019 | .radio_type = UNSET, | |
1020 | .tuner_addr = ADDR_UNSET, | |
1021 | .radio_addr = ADDR_UNSET, | |
1022 | .tda9887_conf = TDA9887_PRESENT, | |
1023 | .input = {{ | |
1024 | .type = CX88_VMUX_TELEVISION, | |
1025 | .vmux = 0, | |
1026 | },{ | |
1027 | .type = CX88_VMUX_COMPOSITE1, | |
1028 | .vmux = 1, | |
1029 | }}, | |
1030 | /* fixme: Add radio support */ | |
48d5e803 | 1031 | .mpeg = CX88_MPEG_DVB, |
611900c1 | 1032 | }, |
fc40b261 CP |
1033 | [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { |
1034 | .name = "digitalnow DNTV Live! DVB-T Pro", | |
1035 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
1036 | .radio_type = UNSET, | |
1037 | .tuner_addr = ADDR_UNSET, | |
1038 | .radio_addr = ADDR_UNSET, | |
1039 | .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | | |
1040 | TDA9887_PORT2_ACTIVE, | |
1041 | .input = {{ | |
1042 | .type = CX88_VMUX_TELEVISION, | |
1043 | .vmux = 0, | |
1044 | .gpio0 = 0xf80808, | |
1045 | },{ | |
1046 | .type = CX88_VMUX_COMPOSITE1, | |
1047 | .vmux = 1, | |
1048 | .gpio0 = 0xf80808, | |
1049 | },{ | |
1050 | .type = CX88_VMUX_SVIDEO, | |
1051 | .vmux = 2, | |
1052 | .gpio0 = 0xf80808, | |
1053 | }}, | |
1054 | .radio = { | |
1055 | .type = CX88_RADIO, | |
1056 | .gpio0 = 0xf80808, | |
1057 | }, | |
48d5e803 | 1058 | .mpeg = CX88_MPEG_DVB, |
fc40b261 | 1059 | }, |
f39624fd MM |
1060 | [CX88_BOARD_KWORLD_DVB_T_CX22702] = { |
1061 | /* Kworld V-stream Xpert DVB-T with Thomson tuner */ | |
1062 | /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */ | |
1063 | /* Manenti Marco <marco_manenti@colman.it> */ | |
1064 | .name = "KWorld/VStream XPert DVB-T with cx22702", | |
1065 | .tuner_type = TUNER_ABSENT, | |
1066 | .radio_type = UNSET, | |
1067 | .tuner_addr = ADDR_UNSET, | |
1068 | .radio_addr = ADDR_UNSET, | |
1069 | .input = {{ | |
1070 | .type = CX88_VMUX_COMPOSITE1, | |
1071 | .vmux = 1, | |
1072 | .gpio0 = 0x0700, | |
1073 | .gpio2 = 0x0101, | |
1074 | },{ | |
1075 | .type = CX88_VMUX_SVIDEO, | |
1076 | .vmux = 2, | |
1077 | .gpio0 = 0x0700, | |
1078 | .gpio2 = 0x0101, | |
1079 | }}, | |
48d5e803 | 1080 | .mpeg = CX88_MPEG_DVB, |
f39624fd | 1081 | }, |
43eabb4e CP |
1082 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { |
1083 | .name = "DViCO FusionHDTV DVB-T Dual Digital", | |
1084 | .tuner_type = TUNER_ABSENT, /* No analog tuner */ | |
1085 | .radio_type = UNSET, | |
1086 | .tuner_addr = ADDR_UNSET, | |
1087 | .radio_addr = ADDR_UNSET, | |
1088 | .input = {{ | |
1089 | .type = CX88_VMUX_COMPOSITE1, | |
1090 | .vmux = 1, | |
d536e9c4 | 1091 | .gpio0 = 0x000067df, |
43eabb4e CP |
1092 | },{ |
1093 | .type = CX88_VMUX_SVIDEO, | |
1094 | .vmux = 2, | |
d536e9c4 | 1095 | .gpio0 = 0x000067df, |
43eabb4e | 1096 | }}, |
48d5e803 | 1097 | .mpeg = CX88_MPEG_DVB, |
43eabb4e | 1098 | }, |
44256de1 | 1099 | [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = { |
44256de1 MK |
1100 | .name = "KWorld HardwareMpegTV XPert", |
1101 | .tuner_type = TUNER_PHILIPS_TDA8290, | |
1102 | .radio_type = UNSET, | |
1103 | .tuner_addr = ADDR_UNSET, | |
1104 | .radio_addr = ADDR_UNSET, | |
1105 | .input = {{ | |
1106 | .type = CX88_VMUX_TELEVISION, | |
1107 | .vmux = 0, | |
e2798212 | 1108 | .gpio0 = 0x3de2, |
24da4e4b | 1109 | .gpio2 = 0x00ff, |
bc53f783 MK |
1110 | },{ |
1111 | .type = CX88_VMUX_COMPOSITE1, | |
1112 | .vmux = 1, | |
1113 | .gpio0 = 0x3de6, | |
7b27d45b | 1114 | .audioroute = 1, |
bc53f783 MK |
1115 | },{ |
1116 | .type = CX88_VMUX_SVIDEO, | |
1117 | .vmux = 2, | |
1118 | .gpio0 = 0x3de6, | |
7b27d45b | 1119 | .audioroute = 1, |
44256de1 | 1120 | }}, |
e2798212 MK |
1121 | .radio = { |
1122 | .type = CX88_RADIO, | |
1123 | .gpio0 = 0x3de6, | |
24da4e4b | 1124 | .gpio2 = 0x00ff, |
e2798212 | 1125 | }, |
48d5e803 | 1126 | .mpeg = CX88_MPEG_BLACKBIRD, |
44256de1 | 1127 | }, |
780dfef3 CP |
1128 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { |
1129 | .name = "DViCO FusionHDTV DVB-T Hybrid", | |
91ae3299 | 1130 | .tuner_type = TUNER_THOMSON_FE6600, |
780dfef3 CP |
1131 | .radio_type = UNSET, |
1132 | .tuner_addr = ADDR_UNSET, | |
1133 | .radio_addr = ADDR_UNSET, | |
1134 | .input = {{ | |
1135 | .type = CX88_VMUX_TELEVISION, | |
1136 | .vmux = 0, | |
1137 | .gpio0 = 0x0000a75f, | |
1138 | },{ | |
1139 | .type = CX88_VMUX_COMPOSITE1, | |
1140 | .vmux = 1, | |
1141 | .gpio0 = 0x0000a75b, | |
1142 | },{ | |
1143 | .type = CX88_VMUX_SVIDEO, | |
1144 | .vmux = 2, | |
1145 | .gpio0 = 0x0000a75b, | |
1146 | }}, | |
48d5e803 | 1147 | .mpeg = CX88_MPEG_DVB, |
780dfef3 | 1148 | }, |
e142e7c4 MK |
1149 | [CX88_BOARD_PCHDTV_HD5500] = { |
1150 | .name = "pcHDTV HD5500 HDTV", | |
9c26c8b1 | 1151 | .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */ |
e142e7c4 MK |
1152 | .radio_type = UNSET, |
1153 | .tuner_addr = ADDR_UNSET, | |
1154 | .radio_addr = ADDR_UNSET, | |
1155 | .tda9887_conf = TDA9887_PRESENT, | |
1156 | .input = {{ | |
1157 | .type = CX88_VMUX_TELEVISION, | |
1158 | .vmux = 0, | |
1159 | .gpio0 = 0x87fd, | |
1160 | },{ | |
1161 | .type = CX88_VMUX_COMPOSITE1, | |
1162 | .vmux = 1, | |
1163 | .gpio0 = 0x87f9, | |
1164 | },{ | |
1165 | .type = CX88_VMUX_SVIDEO, | |
1166 | .vmux = 2, | |
1167 | .gpio0 = 0x87f9, | |
1168 | }}, | |
48d5e803 | 1169 | .mpeg = CX88_MPEG_DVB, |
e142e7c4 | 1170 | }, |
b3038304 VZ |
1171 | [CX88_BOARD_KWORLD_MCE200_DELUXE] = { |
1172 | /* FIXME: tested TV input only, disabled composite, | |
1173 | svideo and radio until they can be tested also. */ | |
1174 | .name = "Kworld MCE 200 Deluxe", | |
1175 | .tuner_type = TUNER_TENA_9533_DI, | |
1176 | .radio_type = UNSET, | |
1177 | .tda9887_conf = TDA9887_PRESENT, | |
1178 | .tuner_addr = ADDR_UNSET, | |
1179 | .radio_addr = ADDR_UNSET, | |
1180 | .input = {{ | |
1181 | .type = CX88_VMUX_TELEVISION, | |
1182 | .vmux = 0, | |
1183 | .gpio0 = 0x0000BDE6 | |
1184 | }}, | |
48d5e803 | 1185 | .mpeg = CX88_MPEG_BLACKBIRD, |
b3038304 | 1186 | }, |
a3124622 AM |
1187 | [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = { |
1188 | /* FIXME: SVideo, Composite and FM inputs are untested */ | |
1189 | .name = "PixelView PlayTV P7000", | |
1190 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | |
1191 | .radio_type = UNSET, | |
1192 | .tuner_addr = ADDR_UNSET, | |
1193 | .radio_addr = ADDR_UNSET, | |
1194 | .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | | |
1195 | TDA9887_PORT2_ACTIVE, | |
1196 | .input = {{ | |
1197 | .type = CX88_VMUX_TELEVISION, | |
1198 | .vmux = 0, | |
1199 | .gpio0 = 0x5da6, | |
1200 | }}, | |
48d5e803 | 1201 | .mpeg = CX88_MPEG_BLACKBIRD, |
a3124622 | 1202 | }, |
be4f4519 RC |
1203 | [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = { |
1204 | .name = "NPG Tech Real TV FM Top 10", | |
1205 | .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */ | |
680543c5 RC |
1206 | .radio_type = UNSET, |
1207 | .tuner_addr = ADDR_UNSET, | |
1208 | .radio_addr = ADDR_UNSET, | |
1209 | .input = {{ | |
1210 | .type = CX88_VMUX_TELEVISION, | |
1211 | .vmux = 0, | |
1212 | .gpio0 = 0x0788, | |
1213 | },{ | |
1214 | .type = CX88_VMUX_COMPOSITE1, | |
1215 | .vmux = 1, | |
1216 | .gpio0 = 0x078b, | |
1217 | },{ | |
1218 | .type = CX88_VMUX_SVIDEO, | |
1219 | .vmux = 2, | |
be4f4519 | 1220 | .gpio0 = 0x078b, |
680543c5 RC |
1221 | }}, |
1222 | .radio = { | |
1223 | .type = CX88_RADIO, | |
1224 | .gpio0 = 0x074a, | |
1225 | }, | |
1226 | }, | |
4bd6e9d9 MV |
1227 | [CX88_BOARD_WINFAST_DTV2000H] = { |
1228 | /* video inputs and radio still in testing */ | |
1229 | .name = "WinFast DTV2000 H", | |
1230 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
1231 | .radio_type = UNSET, | |
1232 | .tuner_addr = ADDR_UNSET, | |
1233 | .radio_addr = ADDR_UNSET, | |
1234 | .tda9887_conf = TDA9887_PRESENT, | |
1235 | .input = {{ | |
1236 | .type = CX88_VMUX_TELEVISION, | |
1237 | .vmux = 0, | |
1238 | .gpio0 = 0x00017304, | |
1239 | .gpio1 = 0x00008203, | |
1240 | .gpio2 = 0x00017304, | |
1241 | .gpio3 = 0x02000000, | |
1242 | }}, | |
48d5e803 | 1243 | .mpeg = CX88_MPEG_DVB, |
4bd6e9d9 | 1244 | }, |
c02a34f4 SA |
1245 | [CX88_BOARD_GENIATECH_DVBS] = { |
1246 | .name = "Geniatech DVB-S", | |
1247 | .tuner_type = TUNER_ABSENT, | |
1248 | .radio_type = UNSET, | |
1249 | .tuner_addr = ADDR_UNSET, | |
1250 | .radio_addr = ADDR_UNSET, | |
1251 | .input = {{ | |
1252 | .type = CX88_VMUX_DVB, | |
1253 | .vmux = 0, | |
1254 | },{ | |
1255 | .type = CX88_VMUX_COMPOSITE1, | |
1256 | .vmux = 1, | |
1257 | }}, | |
48d5e803 | 1258 | .mpeg = CX88_MPEG_DVB, |
c02a34f4 | 1259 | }, |
ad10c930 ET |
1260 | [CX88_BOARD_HAUPPAUGE_HVR3000] = { |
1261 | /* FIXME: Add dvb & radio support */ | |
1262 | .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", | |
1263 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
1264 | .radio_type = UNSET, | |
1265 | .tuner_addr = ADDR_UNSET, | |
1266 | .radio_addr = ADDR_UNSET, | |
1267 | .tda9887_conf = TDA9887_PRESENT, | |
1268 | .input = {{ | |
1269 | .type = CX88_VMUX_TELEVISION, | |
1270 | .vmux = 0, | |
1271 | .gpio0 = 0x84bf, | |
1272 | },{ | |
1273 | .type = CX88_VMUX_COMPOSITE1, | |
1274 | .vmux = 1, | |
1275 | .gpio0 = 0x84bf, | |
1276 | },{ | |
1277 | .type = CX88_VMUX_SVIDEO, | |
1278 | .vmux = 2, | |
1279 | .gpio0 = 0x84bf, | |
1280 | }}, | |
76dc82ab | 1281 | .mpeg = CX88_MPEG_DVB, |
ad10c930 | 1282 | }, |
d1009bd7 PN |
1283 | [CX88_BOARD_NORWOOD_MICRO] = { |
1284 | .name = "Norwood Micro TV Tuner", | |
1285 | .tuner_type = TUNER_TNF_5335MF, | |
1286 | .radio_type = UNSET, | |
1287 | .tuner_addr = ADDR_UNSET, | |
1288 | .radio_addr = ADDR_UNSET, | |
1289 | .input = {{ | |
1290 | .type = CX88_VMUX_TELEVISION, | |
1291 | .vmux = 0, | |
1292 | .gpio0 = 0x0709, | |
1293 | },{ | |
1294 | .type = CX88_VMUX_COMPOSITE1, | |
1295 | .vmux = 1, | |
1296 | .gpio0 = 0x070b, | |
1297 | },{ | |
1298 | .type = CX88_VMUX_SVIDEO, | |
1299 | .vmux = 2, | |
1300 | .gpio0 = 0x070b, | |
1301 | }}, | |
1302 | }, | |
5b26c82f MK |
1303 | [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { |
1304 | .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", | |
1305 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, | |
1306 | .radio_type = UNSET, | |
1307 | .tuner_addr = ADDR_UNSET, | |
1308 | .radio_addr = ADDR_UNSET, | |
1309 | .input = {{ | |
1310 | .type = CX88_VMUX_TELEVISION, | |
1311 | .vmux = 0, | |
1312 | .gpio0 = 0x003fffff, | |
1313 | .gpio1 = 0x00e00000, | |
1314 | .gpio2 = 0x003fffff, | |
1315 | .gpio3 = 0x02000000, | |
1316 | },{ | |
1317 | .type = CX88_VMUX_COMPOSITE1, | |
1318 | .vmux = 1, | |
1319 | .gpio0 = 0x003fffff, | |
1320 | .gpio1 = 0x00e00000, | |
1321 | .gpio2 = 0x003fffff, | |
1322 | .gpio3 = 0x02000000, | |
1323 | },{ | |
1324 | .type = CX88_VMUX_SVIDEO, | |
1325 | .vmux = 2, | |
1326 | .gpio0 = 0x003fffff, | |
1327 | .gpio1 = 0x00e00000, | |
1328 | .gpio2 = 0x003fffff, | |
1329 | .gpio3 = 0x02000000, | |
1330 | }}, | |
1331 | }, | |
aa481a65 ST |
1332 | [CX88_BOARD_HAUPPAUGE_HVR1300] = { |
1333 | .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", | |
1334 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | |
1335 | .radio_type = UNSET, | |
1336 | .tuner_addr = ADDR_UNSET, | |
1337 | .radio_addr = ADDR_UNSET, | |
1338 | .tda9887_conf = TDA9887_PRESENT, | |
3057906d | 1339 | .audio_chip = AUDIO_CHIP_WM8775, |
aa481a65 ST |
1340 | .input = {{ |
1341 | .type = CX88_VMUX_TELEVISION, | |
1342 | .vmux = 0, | |
1343 | .gpio0 = 0xe780, | |
7b27d45b | 1344 | .audioroute = 1, |
aa481a65 ST |
1345 | },{ |
1346 | .type = CX88_VMUX_COMPOSITE1, | |
1347 | .vmux = 1, | |
1348 | .gpio0 = 0xe780, | |
7b27d45b | 1349 | .audioroute = 2, |
aa481a65 ST |
1350 | },{ |
1351 | .type = CX88_VMUX_SVIDEO, | |
1352 | .vmux = 2, | |
1353 | .gpio0 = 0xe780, | |
7b27d45b | 1354 | .audioroute = 2, |
aa481a65 ST |
1355 | }}, |
1356 | /* fixme: Add radio support */ | |
6c5be74c | 1357 | .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, |
aa481a65 | 1358 | }, |
7cb47a14 DG |
1359 | [CX88_BOARD_ADSTECH_PTV_390] = { |
1360 | .name = "ADS Tech Instant Video PCI", | |
1361 | .tuner_type = TUNER_ABSENT, | |
1362 | .radio_type = UNSET, | |
1363 | .tuner_addr = ADDR_UNSET, | |
1364 | .radio_addr = ADDR_UNSET, | |
1365 | .input = {{ | |
1366 | .type = CX88_VMUX_DEBUG, | |
1367 | .vmux = 3, | |
1368 | .gpio0 = 0x04ff, | |
1369 | },{ | |
1370 | .type = CX88_VMUX_COMPOSITE1, | |
1371 | .vmux = 1, | |
1372 | .gpio0 = 0x07fa, | |
1373 | },{ | |
1374 | .type = CX88_VMUX_SVIDEO, | |
1375 | .vmux = 2, | |
1376 | .gpio0 = 0x07fa, | |
1377 | }}, | |
1378 | }, | |
60464da8 ST |
1379 | [CX88_BOARD_PINNACLE_PCTV_HD_800i] = { |
1380 | .name = "Pinnacle PCTV HD 800i", | |
1381 | .tuner_type = TUNER_XC5000, | |
1382 | .radio_type = UNSET, | |
1383 | .tuner_addr = ADDR_UNSET, | |
1384 | .radio_addr = ADDR_UNSET, | |
1385 | .input = {{ | |
1386 | .type = CX88_VMUX_TELEVISION, | |
1387 | .vmux = 0, | |
1388 | .gpio0 = 0x04fb, | |
1389 | .gpio1 = 0x10ff, | |
1390 | },{ | |
1391 | .type = CX88_VMUX_COMPOSITE1, | |
1392 | .vmux = 1, | |
1393 | .gpio0 = 0x04fb, | |
1394 | .gpio1 = 0x10ef, | |
1395 | .audioroute = 1, | |
1396 | },{ | |
1397 | .type = CX88_VMUX_SVIDEO, | |
1398 | .vmux = 2, | |
1399 | .gpio0 = 0x04fb, | |
1400 | .gpio1 = 0x10ef, | |
1401 | .audioroute = 1, | |
1402 | }}, | |
1403 | .mpeg = CX88_MPEG_DVB, | |
1404 | }, | |
5c00fac0 | 1405 | [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = { |
8efd2e28 MK |
1406 | .name = "DViCO FusionHDTV 5 PCI nano", |
1407 | /* xc3008 tuner, digital only for now */ | |
5c00fac0 ST |
1408 | .tuner_type = TUNER_ABSENT, |
1409 | .radio_type = UNSET, | |
1410 | .tuner_addr = ADDR_UNSET, | |
1411 | .radio_addr = ADDR_UNSET, | |
1412 | .input = {{ | |
1413 | .type = CX88_VMUX_TELEVISION, | |
1414 | .vmux = 0, | |
1415 | .gpio0 = 0x000027df, /* Unconfirmed */ | |
1416 | }, { | |
1417 | .type = CX88_VMUX_COMPOSITE1, | |
1418 | .vmux = 1, | |
1419 | .gpio0 = 0x000027df, /* Unconfirmed */ | |
1420 | .audioroute = 1, | |
1421 | }, { | |
1422 | .type = CX88_VMUX_SVIDEO, | |
1423 | .vmux = 2, | |
1424 | .gpio0 = 0x000027df, /* Unconfirmed */ | |
1425 | .audioroute = 1, | |
1426 | } }, | |
1427 | .mpeg = CX88_MPEG_DVB, | |
1428 | }, | |
9507901e MCC |
1429 | [CX88_BOARD_PINNACLE_HYBRID_PCTV] = { |
1430 | .name = "Pinnacle Hybrid PCTV", | |
1431 | .tuner_type = TUNER_XC2028, | |
1432 | .tuner_addr = 0x61, | |
1433 | .input = { { | |
1434 | .type = CX88_VMUX_TELEVISION, | |
1435 | .vmux = 0, | |
1436 | }, { | |
1437 | .type = CX88_VMUX_COMPOSITE1, | |
1438 | .vmux = 1, | |
1439 | }, { | |
1440 | .type = CX88_VMUX_SVIDEO, | |
1441 | .vmux = 2, | |
1442 | } }, | |
1443 | .radio = { | |
1444 | .type = CX88_RADIO, | |
1445 | .gpio0 = 0x004ff, | |
1446 | .gpio1 = 0x010ff, | |
1447 | .gpio2 = 0x0ff, | |
1448 | }, | |
1449 | }, | |
1450 | [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = { | |
1451 | .name = "Winfast TV2000 XP Global", | |
1452 | .tuner_type = TUNER_XC2028, | |
1453 | .tuner_addr = 0x61, | |
1454 | .input = { { | |
1455 | .type = CX88_VMUX_TELEVISION, | |
1456 | .vmux = 0, | |
1457 | .gpio0 = 0x0400, /* pin 2:mute = 0 (off?) */ | |
1458 | .gpio1 = 0x0000, | |
1459 | .gpio2 = 0x0800, /* pin 19:audio = 0 (tv) */ | |
1460 | ||
1461 | }, { | |
1462 | .type = CX88_VMUX_COMPOSITE1, | |
1463 | .vmux = 1, | |
1464 | .gpio0 = 0x0400, /* probably? or 0x0404 to turn mute on */ | |
1465 | .gpio1 = 0x0000, | |
1466 | .gpio2 = 0x0808, /* pin 19:audio = 1 (line) */ | |
1467 | ||
1468 | }, { | |
1469 | .type = CX88_VMUX_SVIDEO, | |
1470 | .vmux = 2, | |
1471 | } }, | |
1472 | .radio = { | |
1473 | .type = CX88_RADIO, | |
1474 | .gpio0 = 0x004ff, | |
1475 | .gpio1 = 0x010ff, | |
1476 | .gpio2 = 0x0ff, | |
1477 | }, | |
1478 | }, | |
1479 | [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { | |
1480 | .name = "PowerColor Real Angel 330", | |
1481 | .tuner_type = TUNER_XC2028, | |
1482 | .tuner_addr = 0x61, | |
1483 | .input = { { | |
1484 | .type = CX88_VMUX_TELEVISION, | |
1485 | .vmux = 0, | |
1486 | .gpio0 = 0x0400, /* pin 2:mute = 0 (off?) */ | |
1487 | .gpio1 = 0x0000, | |
1488 | .gpio2 = 0x0800, /* pin 19:audio = 0 (tv) */ | |
1489 | }, { | |
1490 | .type = CX88_VMUX_COMPOSITE1, | |
1491 | .vmux = 1, | |
1492 | .gpio0 = 0x0400, /* probably? or 0x0404 to turn mute on */ | |
1493 | .gpio1 = 0x0000, | |
1494 | .gpio2 = 0x0808, /* pin 19:audio = 1 (line) */ | |
1495 | }, { | |
1496 | .type = CX88_VMUX_SVIDEO, | |
1497 | .vmux = 2, | |
1498 | .gpio0 = 0x000ff, | |
1499 | .gpio1 = 0x0f37d, | |
1500 | .gpio2 = 0x00019, | |
1501 | .gpio3 = 0x00000, | |
1502 | } }, | |
1503 | .radio = { | |
1504 | .type = CX88_RADIO, | |
1505 | .gpio0 = 0x000ff, | |
1506 | .gpio1 = 0x0f35d, | |
1507 | .gpio2 = 0x00019, | |
1508 | .gpio3 = 0x00000, | |
1509 | }, | |
1510 | }, | |
1511 | [CX88_BOARD_GENIATECH_X8000_MT] = { | |
1512 | /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */ | |
1513 | .name = "Geniatech X8000-MT DVBT", | |
1514 | .tuner_type = TUNER_XC2028, | |
1515 | .tuner_addr = 0x61, | |
1516 | .input = { { | |
1517 | .type = CX88_VMUX_TELEVISION, | |
1518 | .vmux = 0, | |
1519 | .gpio0 = 0x00000000, | |
1520 | .gpio1 = 0x00e3e341, | |
1521 | .gpio2 = 0x00000000, | |
1522 | .gpio3 = 0x00000000, | |
1523 | }, { | |
1524 | .type = CX88_VMUX_COMPOSITE1, | |
1525 | .vmux = 1, | |
1526 | .gpio0 = 0x00000000, | |
1527 | .gpio1 = 0x00e3e361, | |
1528 | .gpio2 = 0x00000000, | |
1529 | .gpio3 = 0x00000000, | |
1530 | }, { | |
1531 | .type = CX88_VMUX_SVIDEO, | |
1532 | .vmux = 2, | |
1533 | .gpio0 = 0x00000000, | |
1534 | .gpio1 = 0x00e3e361, | |
1535 | .gpio2 = 0x00000000, | |
1536 | .gpio3 = 0x00000000, | |
1537 | } }, | |
1538 | .radio = { | |
1539 | .type = CX88_RADIO, | |
1540 | .gpio0 = 0x00000000, | |
1541 | .gpio1 = 0x00e3e341, | |
1542 | .gpio2 = 0x00000000, | |
1543 | .gpio3 = 0x00000000, | |
1544 | }, | |
1545 | .mpeg = CX88_MPEG_DVB, | |
b3fb91d2 CP |
1546 | }, |
1547 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = { | |
1548 | .name = "DViCO FusionHDTV DVB-T PRO", | |
1549 | .tuner_type = TUNER_ABSENT, /* XXX: Has XC3028 */ | |
1550 | .radio_type = UNSET, | |
1551 | .tuner_addr = ADDR_UNSET, | |
1552 | .radio_addr = ADDR_UNSET, | |
1553 | .input = { { | |
1554 | .type = CX88_VMUX_COMPOSITE1, | |
1555 | .vmux = 1, | |
1556 | .gpio0 = 0x000067df, | |
1557 | }, { | |
1558 | .type = CX88_VMUX_SVIDEO, | |
1559 | .vmux = 2, | |
1560 | .gpio0 = 0x000067df, | |
1561 | } }, | |
1562 | .mpeg = CX88_MPEG_DVB, | |
1563 | }, | |
1da177e4 | 1564 | }; |
1da177e4 LT |
1565 | |
1566 | /* ------------------------------------------------------------------ */ | |
1567 | /* PCI subsystem IDs */ | |
1568 | ||
bbc83597 | 1569 | static const struct cx88_subid cx88_subids[] = { |
1da177e4 LT |
1570 | { |
1571 | .subvendor = 0x0070, | |
1572 | .subdevice = 0x3400, | |
1573 | .card = CX88_BOARD_HAUPPAUGE, | |
1574 | },{ | |
1575 | .subvendor = 0x0070, | |
1576 | .subdevice = 0x3401, | |
1577 | .card = CX88_BOARD_HAUPPAUGE, | |
1578 | },{ | |
1579 | .subvendor = 0x14c7, | |
1580 | .subdevice = 0x0106, | |
1581 | .card = CX88_BOARD_GDI, | |
1582 | },{ | |
1583 | .subvendor = 0x14c7, | |
1584 | .subdevice = 0x0107, /* with mpeg encoder */ | |
1585 | .card = CX88_BOARD_GDI, | |
1586 | },{ | |
1587 | .subvendor = PCI_VENDOR_ID_ATI, | |
1588 | .subdevice = 0x00f8, | |
1589 | .card = CX88_BOARD_ATI_WONDER_PRO, | |
1590 | },{ | |
4ac97914 MCC |
1591 | .subvendor = 0x107d, |
1592 | .subdevice = 0x6611, | |
1593 | .card = CX88_BOARD_WINFAST2000XP_EXPERT, | |
1594 | },{ | |
1595 | .subvendor = 0x107d, | |
1596 | .subdevice = 0x6613, /* NTSC */ | |
1597 | .card = CX88_BOARD_WINFAST2000XP_EXPERT, | |
1598 | },{ | |
1599 | .subvendor = 0x107d, | |
1600 | .subdevice = 0x6620, | |
1601 | .card = CX88_BOARD_WINFAST_DV2000, | |
1da177e4 | 1602 | },{ |
4ac97914 MCC |
1603 | .subvendor = 0x107d, |
1604 | .subdevice = 0x663b, | |
1605 | .card = CX88_BOARD_LEADTEK_PVR2000, | |
1da177e4 LT |
1606 | },{ |
1607 | .subvendor = 0x107d, | |
8dd86eeb | 1608 | .subdevice = 0x663c, |
4ac97914 MCC |
1609 | .card = CX88_BOARD_LEADTEK_PVR2000, |
1610 | },{ | |
1da177e4 LT |
1611 | .subvendor = 0x1461, |
1612 | .subdevice = 0x000b, | |
7418f346 | 1613 | .card = CX88_BOARD_AVERTV_STUDIO_303, |
1da177e4 LT |
1614 | },{ |
1615 | .subvendor = 0x1462, | |
1616 | .subdevice = 0x8606, | |
1617 | .card = CX88_BOARD_MSI_TVANYWHERE_MASTER, | |
1618 | },{ | |
4ac97914 MCC |
1619 | .subvendor = 0x10fc, |
1620 | .subdevice = 0xd003, | |
1621 | .card = CX88_BOARD_IODATA_GVVCP3PCI, | |
1da177e4 | 1622 | },{ |
4ac97914 MCC |
1623 | .subvendor = 0x1043, |
1624 | .subdevice = 0x4823, /* with mpeg encoder */ | |
1625 | .card = CX88_BOARD_ASUS_PVR_416, | |
1da177e4 LT |
1626 | },{ |
1627 | .subvendor = 0x17de, | |
1628 | .subdevice = 0x08a6, | |
1629 | .card = CX88_BOARD_KWORLD_DVB_T, | |
1630 | },{ | |
1631 | .subvendor = 0x18ac, | |
1632 | .subdevice = 0xd810, | |
a82decf6 | 1633 | .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, |
097b750e MK |
1634 | },{ |
1635 | .subvendor = 0x18ac, | |
1636 | .subdevice = 0xd820, | |
80d34362 | 1637 | .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T, |
1da177e4 | 1638 | },{ |
7df64e8c MK |
1639 | .subvendor = 0x18ac, |
1640 | .subdevice = 0xdb00, | |
1da177e4 | 1641 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1, |
4ac97914 | 1642 | },{ |
1da177e4 LT |
1643 | .subvendor = 0x0070, |
1644 | .subdevice = 0x9002, | |
1645 | .card = CX88_BOARD_HAUPPAUGE_DVB_T1, | |
4ac97914 | 1646 | },{ |
1da177e4 LT |
1647 | .subvendor = 0x14f1, |
1648 | .subdevice = 0x0187, | |
1649 | .card = CX88_BOARD_CONEXANT_DVB_T1, | |
4ac97914 | 1650 | },{ |
1da177e4 LT |
1651 | .subvendor = 0x1540, |
1652 | .subdevice = 0x2580, | |
1653 | .card = CX88_BOARD_PROVIDEO_PV259, | |
1654 | },{ | |
7df64e8c MK |
1655 | .subvendor = 0x18ac, |
1656 | .subdevice = 0xdb10, | |
1da177e4 LT |
1657 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, |
1658 | },{ | |
4ac97914 MCC |
1659 | .subvendor = 0x1554, |
1660 | .subdevice = 0x4811, | |
1661 | .card = CX88_BOARD_PIXELVIEW, | |
1da177e4 LT |
1662 | },{ |
1663 | .subvendor = 0x7063, | |
1664 | .subdevice = 0x3000, /* HD-3000 card */ | |
1665 | .card = CX88_BOARD_PCHDTV_HD3000, | |
1666 | },{ | |
7df64e8c MK |
1667 | .subvendor = 0x17de, |
1668 | .subdevice = 0xa8a6, | |
1da177e4 LT |
1669 | .card = CX88_BOARD_DNTV_LIVE_DVB_T, |
1670 | },{ | |
1671 | .subvendor = 0x0070, | |
1672 | .subdevice = 0x2801, | |
1673 | .card = CX88_BOARD_HAUPPAUGE_ROSLYN, | |
1674 | },{ | |
7df64e8c | 1675 | .subvendor = 0x14f1, |
1da177e4 LT |
1676 | .subdevice = 0x0342, |
1677 | .card = CX88_BOARD_DIGITALLOGIC_MEC, | |
1678 | },{ | |
1679 | .subvendor = 0x10fc, | |
1680 | .subdevice = 0xd035, | |
1681 | .card = CX88_BOARD_IODATA_GVBCTV7E, | |
a82decf6 MCC |
1682 | },{ |
1683 | .subvendor = 0x1421, | |
1684 | .subdevice = 0x0334, | |
1685 | .card = CX88_BOARD_ADSTECH_DVB_T_PCI, | |
4ac97914 | 1686 | },{ |
e057ee11 MK |
1687 | .subvendor = 0x153b, |
1688 | .subdevice = 0x1166, | |
1689 | .card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1, | |
4ac97914 | 1690 | },{ |
9fef07ca MK |
1691 | .subvendor = 0x18ac, |
1692 | .subdevice = 0xd500, | |
1693 | .card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD, | |
4ac97914 | 1694 | },{ |
d45170ed NS |
1695 | .subvendor = 0x1461, |
1696 | .subdevice = 0x8011, | |
1697 | .card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550, | |
4ac97914 | 1698 | },{ |
e976f937 KL |
1699 | .subvendor = PCI_VENDOR_ID_ATI, |
1700 | .subdevice = 0xa101, | |
1701 | .card = CX88_BOARD_ATI_HDTVWONDER, | |
4ac97914 | 1702 | },{ |
2b5200a7 DS |
1703 | .subvendor = 0x107d, |
1704 | .subdevice = 0x665f, | |
1705 | .card = CX88_BOARD_WINFAST_DTV1000, | |
7418f346 LB |
1706 | },{ |
1707 | .subvendor = 0x1461, | |
1708 | .subdevice = 0x000a, | |
1709 | .card = CX88_BOARD_AVERTV_303, | |
0fa14aa6 ST |
1710 | },{ |
1711 | .subvendor = 0x0070, | |
1712 | .subdevice = 0x9200, | |
fb56cb65 ST |
1713 | .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1, |
1714 | },{ | |
1715 | .subvendor = 0x0070, | |
1716 | .subdevice = 0x9201, | |
0fa14aa6 ST |
1717 | .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, |
1718 | },{ | |
1719 | .subvendor = 0x0070, | |
1720 | .subdevice = 0x9202, | |
fb56cb65 | 1721 | .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, |
0e0351e3 VC |
1722 | },{ |
1723 | .subvendor = 0x17de, | |
1724 | .subdevice = 0x08b2, | |
1725 | .card = CX88_BOARD_KWORLD_DVBS_100, | |
611900c1 ST |
1726 | },{ |
1727 | .subvendor = 0x0070, | |
1728 | .subdevice = 0x9400, | |
1729 | .card = CX88_BOARD_HAUPPAUGE_HVR1100, | |
1730 | },{ | |
1731 | .subvendor = 0x0070, | |
1732 | .subdevice = 0x9402, | |
1733 | .card = CX88_BOARD_HAUPPAUGE_HVR1100, | |
1734 | },{ | |
1735 | .subvendor = 0x0070, | |
1736 | .subdevice = 0x9800, | |
1737 | .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, | |
1738 | },{ | |
1739 | .subvendor = 0x0070, | |
1740 | .subdevice = 0x9802, | |
1741 | .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, | |
c432a072 ST |
1742 | },{ |
1743 | .subvendor = 0x0070, | |
1744 | .subdevice = 0x9001, | |
1745 | .card = CX88_BOARD_HAUPPAUGE_DVB_T1, | |
fc40b261 CP |
1746 | },{ |
1747 | .subvendor = 0x1822, | |
1748 | .subdevice = 0x0025, | |
1749 | .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, | |
f39624fd | 1750 | },{ |
b9f4ad57 CP |
1751 | .subvendor = 0x17de, |
1752 | .subdevice = 0x08a1, | |
1753 | .card = CX88_BOARD_KWORLD_DVB_T_CX22702, | |
43eabb4e CP |
1754 | },{ |
1755 | .subvendor = 0x18ac, | |
1756 | .subdevice = 0xdb50, | |
1757 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, | |
f74a6b39 MK |
1758 | },{ |
1759 | .subvendor = 0x18ac, | |
1760 | .subdevice = 0xdb54, | |
1761 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, | |
1762 | /* Re-branded DViCO: DigitalNow DVB-T Dual */ | |
6bfb2e1f MK |
1763 | },{ |
1764 | .subvendor = 0x18ac, | |
1765 | .subdevice = 0xdb11, | |
1766 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, | |
1767 | /* Re-branded DViCO: UltraView DVB-T Plus */ | |
b3fb91d2 CP |
1768 | }, { |
1769 | .subvendor = 0x18ac, | |
1770 | .subdevice = 0xdb30, | |
1771 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO, | |
1772 | }, { | |
44256de1 MK |
1773 | .subvendor = 0x17de, |
1774 | .subdevice = 0x0840, | |
923da8a7 MK |
1775 | .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, |
1776 | },{ | |
1777 | .subvendor = 0x1421, | |
1778 | .subdevice = 0x0305, | |
44256de1 | 1779 | .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, |
780dfef3 CP |
1780 | },{ |
1781 | .subvendor = 0x18ac, | |
1782 | .subdevice = 0xdb40, | |
1783 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, | |
1784 | },{ | |
1785 | .subvendor = 0x18ac, | |
1786 | .subdevice = 0xdb44, | |
1787 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, | |
da215d22 RS |
1788 | },{ |
1789 | .subvendor = 0x7063, | |
1790 | .subdevice = 0x5500, | |
1791 | .card = CX88_BOARD_PCHDTV_HD5500, | |
b3038304 VZ |
1792 | },{ |
1793 | .subvendor = 0x17de, | |
1794 | .subdevice = 0x0841, | |
1795 | .card = CX88_BOARD_KWORLD_MCE200_DELUXE, | |
fc066478 MK |
1796 | },{ |
1797 | .subvendor = 0x1822, | |
1798 | .subdevice = 0x0019, | |
1799 | .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, | |
a3124622 AM |
1800 | },{ |
1801 | .subvendor = 0x1554, | |
1802 | .subdevice = 0x4813, | |
1803 | .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000, | |
680543c5 RC |
1804 | },{ |
1805 | .subvendor = 0x14f1, | |
1806 | .subdevice = 0x0842, | |
be4f4519 | 1807 | .card = CX88_BOARD_NPGTECH_REALTV_TOP10FM, |
4bd6e9d9 MV |
1808 | },{ |
1809 | .subvendor = 0x107d, | |
1810 | .subdevice = 0x665e, | |
1811 | .card = CX88_BOARD_WINFAST_DTV2000H, | |
65271bff MK |
1812 | },{ |
1813 | .subvendor = 0x18ac, | |
1814 | .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */ | |
1815 | .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, | |
c02a34f4 SA |
1816 | },{ |
1817 | .subvendor = 0x14f1, | |
1818 | .subdevice = 0x0084, | |
1819 | .card = CX88_BOARD_GENIATECH_DVBS, | |
ad10c930 ET |
1820 | },{ |
1821 | .subvendor = 0x0070, | |
1822 | .subdevice = 0x1404, | |
1823 | .card = CX88_BOARD_HAUPPAUGE_HVR3000, | |
5dbaa2cb MK |
1824 | },{ |
1825 | .subvendor = 0x1461, | |
1826 | .subdevice = 0xc111, /* AverMedia M150-D */ | |
1827 | /* This board is known to work with the ASUS PVR416 config */ | |
1828 | .card = CX88_BOARD_ASUS_PVR_416, | |
2acadefa DB |
1829 | },{ |
1830 | .subvendor = 0xc180, | |
1831 | .subdevice = 0xc980, | |
1832 | .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, | |
aa481a65 ST |
1833 | },{ |
1834 | .subvendor = 0x0070, | |
1835 | .subdevice = 0x9600, | |
1836 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | |
1837 | },{ | |
1838 | .subvendor = 0x0070, | |
1839 | .subdevice = 0x9601, | |
1840 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | |
1841 | },{ | |
1842 | .subvendor = 0x0070, | |
1843 | .subdevice = 0x9602, | |
1844 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | |
dab489df MK |
1845 | },{ |
1846 | .subvendor = 0x107d, | |
1847 | .subdevice = 0x6632, | |
1848 | .card = CX88_BOARD_LEADTEK_PVR2000, | |
4508f598 MK |
1849 | },{ |
1850 | .subvendor = 0x12ab, | |
1851 | .subdevice = 0x2300, /* Club3D Zap TV2100 */ | |
1852 | .card = CX88_BOARD_KWORLD_DVB_T_CX22702, | |
3979ecc7 ST |
1853 | },{ |
1854 | .subvendor = 0x0070, | |
1855 | .subdevice = 0x9000, | |
1856 | .card = CX88_BOARD_HAUPPAUGE_DVB_T1, | |
76dc82ab ST |
1857 | },{ |
1858 | .subvendor = 0x0070, | |
1859 | .subdevice = 0x1400, | |
1860 | .card = CX88_BOARD_HAUPPAUGE_HVR3000, | |
1861 | },{ | |
1862 | .subvendor = 0x0070, | |
1863 | .subdevice = 0x1401, | |
1864 | .card = CX88_BOARD_HAUPPAUGE_HVR3000, | |
1865 | },{ | |
1866 | .subvendor = 0x0070, | |
1867 | .subdevice = 0x1402, | |
1868 | .card = CX88_BOARD_HAUPPAUGE_HVR3000, | |
733aeaf4 MK |
1869 | },{ |
1870 | .subvendor = 0x1421, | |
1871 | .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */ | |
1872 | .card = CX88_BOARD_KWORLD_DVBS_100, | |
7cb47a14 DG |
1873 | },{ |
1874 | .subvendor = 0x1421, | |
1875 | .subdevice = 0x0390, | |
1876 | .card = CX88_BOARD_ADSTECH_PTV_390, | |
60464da8 ST |
1877 | },{ |
1878 | .subvendor = 0x11bd, | |
1879 | .subdevice = 0x0051, | |
1880 | .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, | |
5c00fac0 ST |
1881 | }, { |
1882 | .subvendor = 0x18ac, | |
1883 | .subdevice = 0xd530, | |
1884 | .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO, | |
9507901e MCC |
1885 | }, { |
1886 | .subvendor = 0x12ab, | |
1887 | .subdevice = 0x1788, | |
1888 | .card = CX88_BOARD_PINNACLE_HYBRID_PCTV, | |
1889 | }, { | |
1890 | .subvendor = 0x14f1, | |
1891 | .subdevice = 0xea3d, | |
1892 | .card = CX88_BOARD_POWERCOLOR_REAL_ANGEL, | |
1893 | }, { | |
1894 | .subvendor = 0x107d, | |
1895 | .subdevice = 0x6f18, | |
1896 | .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, | |
1897 | }, { | |
1898 | .subvendor = 0x14f1, | |
1899 | .subdevice = 0x8852, | |
1900 | .card = CX88_BOARD_GENIATECH_X8000_MT, | |
1901 | } | |
1da177e4 | 1902 | }; |
1da177e4 LT |
1903 | |
1904 | /* ----------------------------------------------------------------------- */ | |
1905 | /* some leadtek specific stuff */ | |
1906 | ||
69f7e75a | 1907 | static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) |
1da177e4 LT |
1908 | { |
1909 | /* This is just for the "Winfast 2000XP Expert" board ATM; I don't have data on | |
1910 | * any others. | |
1911 | * | |
1912 | * Byte 0 is 1 on the NTSC board. | |
1913 | */ | |
1914 | ||
1915 | if (eeprom_data[4] != 0x7d || | |
1916 | eeprom_data[5] != 0x10 || | |
1917 | eeprom_data[7] != 0x66) { | |
1918 | printk(KERN_WARNING "%s: Leadtek eeprom invalid.\n", | |
1919 | core->name); | |
1920 | return; | |
1921 | } | |
1922 | ||
6a59d64c TP |
1923 | core->board.tuner_type = (eeprom_data[6] == 0x13) ? |
1924 | TUNER_PHILIPS_FM1236_MK3 : TUNER_PHILIPS_FM1216ME_MK3; | |
1da177e4 LT |
1925 | |
1926 | printk(KERN_INFO "%s: Leadtek Winfast 2000XP Expert config: " | |
1927 | "tuner=%d, eeprom[0]=0x%02x\n", | |
6a59d64c | 1928 | core->name, core->board.tuner_type, eeprom_data[0]); |
1da177e4 LT |
1929 | } |
1930 | ||
1da177e4 LT |
1931 | static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) |
1932 | { | |
1933 | struct tveeprom tv; | |
1934 | ||
0f97a931 | 1935 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); |
6a59d64c | 1936 | core->board.tuner_type = tv.tuner_type; |
0345c387 | 1937 | core->tuner_formats = tv.tuner_formats; |
6a59d64c | 1938 | core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; |
1da177e4 LT |
1939 | |
1940 | /* Make sure we support the board model */ | |
3ca0ea98 ST |
1941 | switch (tv.model) |
1942 | { | |
76dc82ab ST |
1943 | case 14009: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */ |
1944 | case 14019: /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */ | |
1945 | case 14029: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */ | |
1946 | case 14109: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */ | |
1947 | case 14129: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */ | |
1948 | case 14559: /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */ | |
ad10c930 | 1949 | case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ |
76dc82ab ST |
1950 | case 14659: /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */ |
1951 | case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */ | |
0345c387 | 1952 | case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ |
42d2b6ef | 1953 | case 34519: /* WinTV-PCI-FM */ |
759324c3 | 1954 | case 90002: /* Nova-T-PCI (9002) */ |
0fe22865 ST |
1955 | case 92001: /* Nova-S-Plus (Video and IR) */ |
1956 | case 92002: /* Nova-S-Plus (Video and IR) */ | |
1957 | case 90003: /* Nova-T-PCI (9002 No RF out) */ | |
759324c3 ST |
1958 | case 90500: /* Nova-T-PCI (oem) */ |
1959 | case 90501: /* Nova-T-PCI (oem/IR) */ | |
3ca0ea98 | 1960 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ |
611900c1 ST |
1961 | case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ |
1962 | case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ | |
aa481a65 ST |
1963 | case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ |
1964 | case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ | |
1965 | case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ | |
1966 | case 96569: /* WinTV-HVR1300 () */ | |
1967 | case 96659: /* WinTV-HVR1300 () */ | |
611900c1 | 1968 | case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ |
1da177e4 LT |
1969 | /* known */ |
1970 | break; | |
1971 | default: | |
1972 | printk("%s: warning: unknown hauppauge model #%d\n", | |
3ca0ea98 | 1973 | core->name, tv.model); |
1da177e4 LT |
1974 | break; |
1975 | } | |
1976 | ||
3ca0ea98 ST |
1977 | printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n", |
1978 | core->name, tv.model); | |
1da177e4 LT |
1979 | } |
1980 | ||
1981 | /* ----------------------------------------------------------------------- */ | |
1982 | /* some GDI (was: Modular Technology) specific stuff */ | |
1983 | ||
1984 | static struct { | |
1985 | int id; | |
1986 | int fm; | |
1987 | char *name; | |
1988 | } gdi_tuner[] = { | |
1989 | [ 0x01 ] = { .id = TUNER_ABSENT, | |
1990 | .name = "NTSC_M" }, | |
1991 | [ 0x02 ] = { .id = TUNER_ABSENT, | |
1992 | .name = "PAL_B" }, | |
1993 | [ 0x03 ] = { .id = TUNER_ABSENT, | |
1994 | .name = "PAL_I" }, | |
1995 | [ 0x04 ] = { .id = TUNER_ABSENT, | |
1996 | .name = "PAL_D" }, | |
1997 | [ 0x05 ] = { .id = TUNER_ABSENT, | |
1998 | .name = "SECAM" }, | |
1999 | ||
2000 | [ 0x10 ] = { .id = TUNER_ABSENT, | |
2001 | .fm = 1, | |
2002 | .name = "TEMIC_4049" }, | |
2003 | [ 0x11 ] = { .id = TUNER_TEMIC_4136FY5, | |
2004 | .name = "TEMIC_4136" }, | |
2005 | [ 0x12 ] = { .id = TUNER_ABSENT, | |
2006 | .name = "TEMIC_4146" }, | |
2007 | ||
2008 | [ 0x20 ] = { .id = TUNER_PHILIPS_FQ1216ME, | |
2009 | .fm = 1, | |
2010 | .name = "PHILIPS_FQ1216_MK3" }, | |
2011 | [ 0x21 ] = { .id = TUNER_ABSENT, .fm = 1, | |
2012 | .name = "PHILIPS_FQ1236_MK3" }, | |
2013 | [ 0x22 ] = { .id = TUNER_ABSENT, | |
2014 | .name = "PHILIPS_FI1236_MK3" }, | |
2015 | [ 0x23 ] = { .id = TUNER_ABSENT, | |
2016 | .name = "PHILIPS_FI1216_MK3" }, | |
2017 | }; | |
2018 | ||
2019 | static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) | |
2020 | { | |
2021 | char *name = (eeprom_data[0x0d] < ARRAY_SIZE(gdi_tuner)) | |
2022 | ? gdi_tuner[eeprom_data[0x0d]].name : NULL; | |
2023 | ||
2024 | printk(KERN_INFO "%s: GDI: tuner=%s\n", core->name, | |
2025 | name ? name : "unknown"); | |
2026 | if (NULL == name) | |
2027 | return; | |
6a59d64c TP |
2028 | core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id; |
2029 | core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ? | |
2030 | CX88_RADIO : 0; | |
1da177e4 LT |
2031 | } |
2032 | ||
b3fb91d2 CP |
2033 | /* ------------------------------------------------------------------- */ |
2034 | /* some Divco specific stuff */ | |
2035 | static int cx88_dvico_xc2028_callback(void *ptr, int command, int arg) | |
2036 | { | |
2037 | struct cx88_core *core = ptr; | |
2038 | ||
2039 | switch (command) { | |
2040 | case XC2028_TUNER_RESET: | |
2041 | cx_set(MO_GP0_IO, 0x0200); | |
2042 | cx_clear(MO_GP0_IO, 0x02); | |
2043 | mdelay(100); | |
2044 | cx_set(MO_GP0_IO, 0x02); | |
2045 | mdelay(100); | |
2046 | break; | |
2047 | default: | |
2048 | return -EINVAL; | |
2049 | } | |
2050 | ||
2051 | return 0; | |
2052 | } | |
2053 | ||
2054 | ||
9507901e MCC |
2055 | /* ----------------------------------------------------------------------- */ |
2056 | /* some Geniatech specific stuff */ | |
2057 | ||
2058 | static int cx88_xc3028_geniatech_tuner_callback(void *priv, int command, int mode) | |
2059 | { | |
2060 | struct i2c_algo_bit_data *i2c_algo = priv; | |
2061 | struct cx88_core *core = i2c_algo->data; | |
2062 | ||
2063 | switch (command) { | |
2064 | case XC2028_TUNER_RESET: | |
2065 | switch (INPUT(core->input).type) { | |
2066 | case CX88_RADIO: | |
2067 | cx_write(MO_GP1_IO, 0x101010); | |
2068 | mdelay(50); | |
2069 | cx_write(MO_GP1_IO, 0x101000); | |
2070 | mdelay(50); | |
2071 | cx_write(MO_GP1_IO, 0x101010); | |
2072 | mdelay(50); | |
2073 | return 0; | |
2074 | case CX88_VMUX_DVB: | |
2075 | cx_write(MO_GP1_IO, 0x030302); | |
2076 | mdelay(50); | |
2077 | cx_write(MO_GP1_IO, 0x101010); | |
2078 | mdelay(50); | |
2079 | cx_write(MO_GP1_IO, 0x101000); | |
2080 | mdelay(50); | |
2081 | cx_write(MO_GP1_IO, 0x101010); | |
2082 | mdelay(50); | |
2083 | return 0; | |
2084 | default: | |
2085 | cx_write(MO_GP1_IO, 0x030301); | |
2086 | mdelay(50); | |
2087 | cx_write(MO_GP1_IO, 0x101010); | |
2088 | mdelay(50); | |
2089 | cx_write(MO_GP1_IO, 0x101000); | |
2090 | mdelay(50); | |
2091 | cx_write(MO_GP1_IO, 0x101010); | |
2092 | mdelay(50); | |
2093 | return 0; | |
2094 | } | |
2095 | } | |
2096 | return -EINVAL; | |
2097 | } | |
2098 | ||
780dfef3 CP |
2099 | /* ----------------------------------------------------------------------- */ |
2100 | /* some DViCO specific stuff */ | |
2101 | ||
2102 | static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) | |
2103 | { | |
2104 | struct i2c_msg msg = { .addr = 0x45, .flags = 0 }; | |
2105 | int i, err; | |
69b27e3d | 2106 | static u8 init_bufs[13][5] = { |
780dfef3 CP |
2107 | { 0x10, 0x00, 0x20, 0x01, 0x03 }, |
2108 | { 0x10, 0x10, 0x01, 0x00, 0x21 }, | |
2109 | { 0x10, 0x10, 0x10, 0x00, 0xCA }, | |
2110 | { 0x10, 0x10, 0x12, 0x00, 0x08 }, | |
2111 | { 0x10, 0x10, 0x13, 0x00, 0x0A }, | |
2112 | { 0x10, 0x10, 0x16, 0x01, 0xC0 }, | |
2113 | { 0x10, 0x10, 0x22, 0x01, 0x3D }, | |
2114 | { 0x10, 0x10, 0x73, 0x01, 0x2E }, | |
2115 | { 0x10, 0x10, 0x72, 0x00, 0xC5 }, | |
2116 | { 0x10, 0x10, 0x71, 0x01, 0x97 }, | |
2117 | { 0x10, 0x10, 0x70, 0x00, 0x0F }, | |
2118 | { 0x10, 0x10, 0xB0, 0x00, 0x01 }, | |
2119 | { 0x03, 0x0C }, | |
2120 | }; | |
2121 | ||
5b9c4e6d | 2122 | for (i = 0; i < ARRAY_SIZE(init_bufs); i++) { |
780dfef3 CP |
2123 | msg.buf = init_bufs[i]; |
2124 | msg.len = (i != 12 ? 5 : 2); | |
2125 | err = i2c_transfer(&core->i2c_adap, &msg, 1); | |
2126 | if (err != 1) { | |
2127 | printk("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", i, err); | |
2128 | return; | |
2129 | } | |
2130 | } | |
2131 | } | |
2132 | ||
c2cb8fcc MCC |
2133 | static int cx88_xc2028_tuner_callback(void *priv, int command, int arg) |
2134 | { | |
2135 | struct i2c_algo_bit_data *i2c_algo = priv; | |
2136 | struct cx88_core *core = i2c_algo->data; | |
2137 | ||
9507901e MCC |
2138 | /* Board-specific callbacks */ |
2139 | switch (core->boardnr) { | |
2140 | case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: | |
2141 | case CX88_BOARD_POWERCOLOR_REAL_ANGEL: | |
2142 | case CX88_BOARD_GENIATECH_X8000_MT: | |
2143 | return cx88_xc3028_geniatech_tuner_callback(priv, command, arg); | |
b3fb91d2 CP |
2144 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: |
2145 | return cx88_dvico_xc2028_callback(priv, command, arg); | |
9507901e MCC |
2146 | } |
2147 | ||
c2cb8fcc MCC |
2148 | switch (command) { |
2149 | case XC2028_TUNER_RESET: | |
2150 | { | |
2151 | switch (INPUT(core->input).type) { | |
2152 | case CX88_RADIO: | |
2153 | printk(KERN_INFO "setting GPIO to radio!\n"); | |
2154 | cx_write(MO_GP0_IO, 0x4ff); | |
2155 | mdelay(250); | |
2156 | cx_write(MO_GP2_IO, 0xff); | |
2157 | mdelay(250); | |
2158 | cx_write(MO_GP1_IO, 0x101010); | |
2159 | mdelay(250); | |
2160 | cx_write(MO_GP1_IO, 0x101000); | |
2161 | mdelay(250); | |
2162 | cx_write(MO_GP1_IO, 0x101010); | |
2163 | mdelay(250); | |
2164 | return 0; | |
2165 | case CX88_VMUX_DVB: /* Digital TV*/ | |
2166 | default: /* Analog TV */ | |
2167 | printk(KERN_INFO "setting GPIO to TV!\n"); | |
2168 | cx_write(MO_GP1_IO, 0x101010); | |
2169 | mdelay(250); | |
2170 | cx_write(MO_GP1_IO, 0x101000); | |
2171 | mdelay(250); | |
2172 | cx_write(MO_GP1_IO, 0x101010); | |
2173 | mdelay(250); | |
2174 | return 0; | |
2175 | } | |
2176 | } | |
2177 | } | |
2178 | return -EINVAL; | |
2179 | } | |
2180 | ||
60464da8 ST |
2181 | /* ----------------------------------------------------------------------- */ |
2182 | /* Tuner callback function. Currently only needed for the Pinnacle * | |
2183 | * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both * | |
2184 | * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */ | |
2185 | ||
c2cb8fcc | 2186 | static int cx88_xc5000_tuner_callback(void *priv, int command, int arg) |
60464da8 | 2187 | { |
73c993a8 ST |
2188 | struct i2c_algo_bit_data *i2c_algo = priv; |
2189 | struct cx88_core *core = i2c_algo->data; | |
60464da8 | 2190 | |
c2cb8fcc | 2191 | switch (core->boardnr) { |
60464da8 | 2192 | case CX88_BOARD_PINNACLE_PCTV_HD_800i: |
c2cb8fcc | 2193 | if (command == 0) { /* This is the reset command from xc5000 */ |
72e04f72 ST |
2194 | /* Reset XC5000 tuner via SYS_RSTO_pin */ |
2195 | cx_write(MO_SRST_IO, 0); | |
2196 | msleep(10); | |
2197 | cx_write(MO_SRST_IO, 1); | |
60464da8 | 2198 | return 0; |
c2cb8fcc | 2199 | } else { |
60464da8 ST |
2200 | printk(KERN_ERR |
2201 | "xc5000: unknown tuner callback command.\n"); | |
2202 | return -EINVAL; | |
2203 | } | |
2204 | break; | |
2205 | } | |
2206 | return 0; /* Should never be here */ | |
2207 | } | |
c2cb8fcc MCC |
2208 | |
2209 | int cx88_tuner_callback(void *priv, int command, int arg) | |
2210 | { | |
2211 | struct i2c_algo_bit_data *i2c_algo = priv; | |
2212 | struct cx88_core *core = i2c_algo->data; | |
2213 | ||
2214 | switch (core->board.tuner_type) { | |
2215 | case TUNER_XC2028: | |
2216 | return cx88_xc2028_tuner_callback(priv, command, arg); | |
2217 | case TUNER_XC5000: | |
2218 | return cx88_xc5000_tuner_callback(priv, command, arg); | |
2219 | } | |
2220 | return -EINVAL; | |
2221 | } | |
60464da8 ST |
2222 | EXPORT_SYMBOL(cx88_tuner_callback); |
2223 | ||
1da177e4 LT |
2224 | /* ----------------------------------------------------------------------- */ |
2225 | ||
bbc83597 | 2226 | static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) |
1da177e4 LT |
2227 | { |
2228 | int i; | |
2229 | ||
2230 | if (0 == pci->subsystem_vendor && | |
2231 | 0 == pci->subsystem_device) { | |
2232 | printk("%s: Your board has no valid PCI Subsystem ID and thus can't\n" | |
2233 | "%s: be autodetected. Please pass card=<n> insmod option to\n" | |
2234 | "%s: workaround that. Redirect complaints to the vendor of\n" | |
2235 | "%s: the TV card. Best regards,\n" | |
2236 | "%s: -- tux\n", | |
2237 | core->name,core->name,core->name,core->name,core->name); | |
2238 | } else { | |
2239 | printk("%s: Your board isn't known (yet) to the driver. You can\n" | |
2240 | "%s: try to pick one of the existing card configs via\n" | |
2241 | "%s: card=<n> insmod option. Updating to the latest\n" | |
2242 | "%s: version might help as well.\n", | |
2243 | core->name,core->name,core->name,core->name); | |
2244 | } | |
2245 | printk("%s: Here is a list of valid choices for the card=<n> insmod option:\n", | |
2246 | core->name); | |
bbc83597 | 2247 | for (i = 0; i < ARRAY_SIZE(cx88_boards); i++) |
1da177e4 LT |
2248 | printk("%s: card=%d -> %s\n", |
2249 | core->name, i, cx88_boards[i].name); | |
2250 | } | |
2251 | ||
bbc83597 | 2252 | static void cx88_card_setup_pre_i2c(struct cx88_core *core) |
aa481a65 | 2253 | { |
6a59d64c | 2254 | switch (core->boardnr) { |
aa481a65 ST |
2255 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
2256 | /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */ | |
2257 | /* We leave here with the 702 on the bus */ | |
2258 | cx_write(MO_GP0_IO, 0x0000e780); | |
2259 | udelay(1000); | |
2260 | cx_clear(MO_GP0_IO, 0x00000080); | |
2261 | udelay(50); | |
2262 | cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ | |
2263 | udelay(1000); | |
2264 | break; | |
2265 | } | |
2266 | } | |
2267 | ||
bbc83597 | 2268 | static void cx88_card_setup(struct cx88_core *core) |
1da177e4 | 2269 | { |
3ca0ea98 | 2270 | static u8 eeprom[256]; |
1da177e4 LT |
2271 | |
2272 | if (0 == core->i2c_rc) { | |
2273 | core->i2c_client.addr = 0xa0 >> 1; | |
2274 | tveeprom_read(&core->i2c_client,eeprom,sizeof(eeprom)); | |
2275 | } | |
2276 | ||
6a59d64c | 2277 | switch (core->boardnr) { |
1da177e4 LT |
2278 | case CX88_BOARD_HAUPPAUGE: |
2279 | case CX88_BOARD_HAUPPAUGE_ROSLYN: | |
2280 | if (0 == core->i2c_rc) | |
2281 | hauppauge_eeprom(core,eeprom+8); | |
2282 | break; | |
2283 | case CX88_BOARD_GDI: | |
2284 | if (0 == core->i2c_rc) | |
2285 | gdi_eeprom(core,eeprom); | |
2286 | break; | |
2287 | case CX88_BOARD_WINFAST2000XP_EXPERT: | |
2288 | if (0 == core->i2c_rc) | |
2289 | leadtek_eeprom(core,eeprom); | |
2290 | break; | |
0fa14aa6 ST |
2291 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: |
2292 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: | |
1da177e4 | 2293 | case CX88_BOARD_HAUPPAUGE_DVB_T1: |
611900c1 ST |
2294 | case CX88_BOARD_HAUPPAUGE_HVR1100: |
2295 | case CX88_BOARD_HAUPPAUGE_HVR1100LP: | |
ad10c930 | 2296 | case CX88_BOARD_HAUPPAUGE_HVR3000: |
aa481a65 | 2297 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
1da177e4 | 2298 | if (0 == core->i2c_rc) |
3ca0ea98 | 2299 | hauppauge_eeprom(core,eeprom); |
1da177e4 | 2300 | break; |
0e0351e3 VC |
2301 | case CX88_BOARD_KWORLD_DVBS_100: |
2302 | cx_write(MO_GP0_IO, 0x000007f8); | |
2303 | cx_write(MO_GP1_IO, 0x00000001); | |
2304 | break; | |
d536e9c4 CP |
2305 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: |
2306 | /* GPIO0:6 is hooked to FX2 reset pin */ | |
2307 | cx_set(MO_GP0_IO, 0x00004040); | |
2308 | cx_clear(MO_GP0_IO, 0x00000040); | |
2309 | msleep(1000); | |
2310 | cx_set(MO_GP0_IO, 0x00004040); | |
2311 | /* FALLTHROUGH */ | |
1da177e4 LT |
2312 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
2313 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | |
780dfef3 | 2314 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: |
b3fb91d2 | 2315 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: |
1da177e4 LT |
2316 | /* GPIO0:0 is hooked to mt352 reset pin */ |
2317 | cx_set(MO_GP0_IO, 0x00000101); | |
2318 | cx_clear(MO_GP0_IO, 0x00000001); | |
2319 | msleep(1); | |
2320 | cx_set(MO_GP0_IO, 0x00000101); | |
780dfef3 | 2321 | if (0 == core->i2c_rc && |
6a59d64c | 2322 | core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) |
780dfef3 | 2323 | dvico_fusionhdtv_hybrid_init(core); |
1da177e4 LT |
2324 | break; |
2325 | case CX88_BOARD_KWORLD_DVB_T: | |
2326 | case CX88_BOARD_DNTV_LIVE_DVB_T: | |
2327 | cx_set(MO_GP0_IO, 0x00000707); | |
2328 | cx_set(MO_GP2_IO, 0x00000101); | |
2329 | cx_clear(MO_GP2_IO, 0x00000001); | |
2330 | msleep(1); | |
2331 | cx_clear(MO_GP0_IO, 0x00000007); | |
2332 | cx_set(MO_GP2_IO, 0x00000101); | |
2333 | break; | |
fc40b261 CP |
2334 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: |
2335 | cx_write(MO_GP0_IO, 0x00080808); | |
2336 | break; | |
e976f937 KL |
2337 | case CX88_BOARD_ATI_HDTVWONDER: |
2338 | if (0 == core->i2c_rc) { | |
2339 | /* enable tuner */ | |
2340 | int i; | |
5b9c4e6d MCC |
2341 | static const u8 buffer [][2] = { |
2342 | {0x10,0x12}, | |
2343 | {0x13,0x04}, | |
2344 | {0x16,0x00}, | |
2345 | {0x14,0x04}, | |
2346 | {0x17,0x00} | |
2347 | }; | |
e976f937 | 2348 | core->i2c_client.addr = 0x0a; |
e976f937 | 2349 | |
5b9c4e6d MCC |
2350 | for (i = 0; i < ARRAY_SIZE(buffer); i++) |
2351 | if (2 != i2c_master_send(&core->i2c_client, | |
2352 | buffer[i],2)) | |
2353 | printk(KERN_WARNING | |
2354 | "%s: Unable to enable " | |
2355 | "tuner(%i).\n", | |
e976f937 KL |
2356 | core->name, i); |
2357 | } | |
2358 | break; | |
55c88610 MCC |
2359 | case CX88_BOARD_MSI_TVANYWHERE_MASTER: |
2360 | { | |
2361 | struct v4l2_priv_tun_config tea5767_cfg; | |
2362 | struct tea5767_ctrl ctl; | |
2363 | ||
2364 | memset(&ctl, 0, sizeof(ctl)); | |
2365 | ||
2366 | ctl.high_cut = 1; | |
2367 | ctl.st_noise = 1; | |
2368 | ctl.deemph_75 = 1; | |
2369 | ctl.xtal_freq = TEA5767_HIGH_LO_13MHz; | |
2370 | ||
2371 | tea5767_cfg.tuner = TUNER_TEA5767; | |
2372 | tea5767_cfg.priv = &ctl; | |
2373 | ||
2374 | cx88_call_i2c_clients(core, TUNER_SET_CONFIG, &tea5767_cfg); | |
2375 | } | |
1da177e4 | 2376 | } |
c2cb8fcc MCC |
2377 | |
2378 | if (core->board.tuner_type == TUNER_XC2028) { | |
2379 | struct v4l2_priv_tun_config xc2028_cfg; | |
2380 | struct xc2028_ctrl ctl; | |
2381 | ||
2382 | memset(&xc2028_cfg, 0, sizeof(ctl)); | |
2383 | memset(&ctl, 0, sizeof(ctl)); | |
2384 | ||
2385 | ctl.fname = XC2028_DEFAULT_FIRMWARE; | |
2386 | ctl.max_len = 64; | |
b3fb91d2 CP |
2387 | |
2388 | switch (core->boardnr) { | |
2389 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: | |
2390 | ctl.scode_table = XC3028_FE_ZARLINK456; | |
2391 | break; | |
2392 | case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: | |
2393 | ctl.demod = XC3028_FE_OREN538; | |
2394 | break; | |
2395 | default: | |
2396 | ctl.demod = XC3028_FE_OREN538; | |
2397 | ctl.mts = 1; | |
2398 | } | |
c2cb8fcc MCC |
2399 | |
2400 | xc2028_cfg.tuner = TUNER_XC2028; | |
2401 | xc2028_cfg.priv = &ctl; | |
2402 | ||
2403 | cx88_call_i2c_clients(core, TUNER_SET_CONFIG, &xc2028_cfg); | |
2404 | } | |
2405 | ||
1da177e4 LT |
2406 | } |
2407 | ||
2408 | /* ------------------------------------------------------------------ */ | |
2409 | ||
bbc83597 TP |
2410 | static int cx88_pci_quirks(const char *name, struct pci_dev *pci) |
2411 | { | |
2412 | unsigned int lat = UNSET; | |
2413 | u8 ctrl = 0; | |
2414 | u8 value; | |
2415 | ||
2416 | /* check pci quirks */ | |
2417 | if (pci_pci_problems & PCIPCI_TRITON) { | |
2418 | printk(KERN_INFO "%s: quirk: PCIPCI_TRITON -- set TBFX\n", | |
2419 | name); | |
2420 | ctrl |= CX88X_EN_TBFX; | |
2421 | } | |
2422 | if (pci_pci_problems & PCIPCI_NATOMA) { | |
2423 | printk(KERN_INFO "%s: quirk: PCIPCI_NATOMA -- set TBFX\n", | |
2424 | name); | |
2425 | ctrl |= CX88X_EN_TBFX; | |
2426 | } | |
2427 | if (pci_pci_problems & PCIPCI_VIAETBF) { | |
2428 | printk(KERN_INFO "%s: quirk: PCIPCI_VIAETBF -- set TBFX\n", | |
2429 | name); | |
2430 | ctrl |= CX88X_EN_TBFX; | |
2431 | } | |
2432 | if (pci_pci_problems & PCIPCI_VSFX) { | |
2433 | printk(KERN_INFO "%s: quirk: PCIPCI_VSFX -- set VSFX\n", | |
2434 | name); | |
2435 | ctrl |= CX88X_EN_VSFX; | |
2436 | } | |
2437 | #ifdef PCIPCI_ALIMAGIK | |
2438 | if (pci_pci_problems & PCIPCI_ALIMAGIK) { | |
2439 | printk(KERN_INFO "%s: quirk: PCIPCI_ALIMAGIK -- latency fixup\n", | |
2440 | name); | |
2441 | lat = 0x0A; | |
2442 | } | |
2443 | #endif | |
2444 | ||
2445 | /* check insmod options */ | |
2446 | if (UNSET != latency) | |
2447 | lat = latency; | |
2448 | ||
2449 | /* apply stuff */ | |
2450 | if (ctrl) { | |
2451 | pci_read_config_byte(pci, CX88X_DEVCTRL, &value); | |
2452 | value |= ctrl; | |
2453 | pci_write_config_byte(pci, CX88X_DEVCTRL, value); | |
2454 | } | |
2455 | if (UNSET != lat) { | |
2456 | printk(KERN_INFO "%s: setting pci latency timer to %d\n", | |
2457 | name, latency); | |
2458 | pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency); | |
2459 | } | |
2460 | return 0; | |
2461 | } | |
2462 | ||
2463 | int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci) | |
2464 | { | |
2465 | if (request_mem_region(pci_resource_start(pci,0), | |
2466 | pci_resource_len(pci,0), | |
2467 | core->name)) | |
2468 | return 0; | |
2469 | printk(KERN_ERR | |
2470 | "%s/%d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n", | |
2471 | core->name, PCI_FUNC(pci->devfn), | |
2472 | (unsigned long long)pci_resource_start(pci, 0), | |
2473 | pci->subsystem_vendor, pci->subsystem_device); | |
2474 | return -EBUSY; | |
2475 | } | |
2476 | ||
2477 | /* Allocate and initialize the cx88 core struct. One should hold the | |
2478 | * devlist mutex before calling this. */ | |
2479 | struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) | |
2480 | { | |
2481 | struct cx88_core *core; | |
2482 | int i; | |
2483 | ||
2484 | core = kzalloc(sizeof(*core), GFP_KERNEL); | |
2485 | ||
2486 | atomic_inc(&core->refcount); | |
2487 | core->pci_bus = pci->bus->number; | |
2488 | core->pci_slot = PCI_SLOT(pci->devfn); | |
8ddac9ee TP |
2489 | core->pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT | |
2490 | PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT | | |
2491 | PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT; | |
bbc83597 TP |
2492 | mutex_init(&core->lock); |
2493 | ||
2494 | core->nr = nr; | |
2495 | sprintf(core->name, "cx88[%d]", core->nr); | |
2496 | if (0 != cx88_get_resources(core, pci)) { | |
2497 | kfree(core); | |
2498 | return NULL; | |
2499 | } | |
2500 | ||
2501 | /* PCI stuff */ | |
2502 | cx88_pci_quirks(core->name, pci); | |
2503 | core->lmmio = ioremap(pci_resource_start(pci, 0), | |
2504 | pci_resource_len(pci, 0)); | |
2505 | core->bmmio = (u8 __iomem *)core->lmmio; | |
2506 | ||
2507 | /* board config */ | |
2508 | core->boardnr = UNSET; | |
2509 | if (card[core->nr] < ARRAY_SIZE(cx88_boards)) | |
2510 | core->boardnr = card[core->nr]; | |
2511 | for (i = 0; UNSET == core->boardnr && i < ARRAY_SIZE(cx88_subids); i++) | |
2512 | if (pci->subsystem_vendor == cx88_subids[i].subvendor && | |
2513 | pci->subsystem_device == cx88_subids[i].subdevice) | |
2514 | core->boardnr = cx88_subids[i].card; | |
2515 | if (UNSET == core->boardnr) { | |
2516 | core->boardnr = CX88_BOARD_UNKNOWN; | |
2517 | cx88_card_list(core, pci); | |
2518 | } | |
2519 | ||
2520 | memcpy(&core->board, &cx88_boards[core->boardnr], sizeof(core->board)); | |
2521 | ||
5772f813 | 2522 | printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n", |
bbc83597 TP |
2523 | core->name,pci->subsystem_vendor, |
2524 | pci->subsystem_device, core->board.name, | |
2525 | core->boardnr, card[core->nr] == core->boardnr ? | |
2526 | "insmod option" : "autodetected"); | |
2527 | ||
2528 | if (tuner[core->nr] != UNSET) | |
2529 | core->board.tuner_type = tuner[core->nr]; | |
2530 | if (radio[core->nr] != UNSET) | |
2531 | core->board.radio_type = radio[core->nr]; | |
2532 | ||
5772f813 TP |
2533 | printk(KERN_INFO "%s: TV tuner type %d, Radio tuner type %d\n", |
2534 | core->name, core->board.tuner_type, core->board.radio_type); | |
bbc83597 TP |
2535 | |
2536 | /* init hardware */ | |
2537 | cx88_reset(core); | |
2538 | cx88_card_setup_pre_i2c(core); | |
2539 | cx88_i2c_init(core, pci); | |
189bf5f0 MCC |
2540 | |
2541 | /* load tuner module, if needed */ | |
2542 | if (TUNER_ABSENT != core->board.tuner_type) | |
2543 | request_module("tuner"); | |
2544 | ||
bbc83597 TP |
2545 | cx88_call_i2c_clients (core, TUNER_SET_STANDBY, NULL); |
2546 | cx88_card_setup(core); | |
2547 | cx88_ir_init(core, pci); | |
2548 | ||
2549 | return core; | |
2550 | } |