diff options
author | Douglas Schilling Landgraf <dougsland@gmail.com> | 2008-07-27 13:03:32 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-07-27 13:22:54 -0400 |
commit | 95b86a9a9020da22e7c25abc77aae4dc8f02ab55 (patch) | |
tree | a8fd33408c8bb82218d2a87bb481106d2424c6f6 /drivers/media | |
parent | 59d07f1b705c466ea4eaca9c43d46be6d6a065a4 (diff) |
V4L/DVB (8539): em28xx-cards: New supported IDs for analog models
- New supported IDs for analog models
(Based on Markus Rechberger <mrechberger@gmail.com> version of em28xx driver)
- Validation field for new em28xx boards.
Signed-off-by: Douglas Schilling Landgraf <dougsland@gmail.com>
[mchehab@infradead.org: Need to fix some merge conflicts]
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 914 | ||||
-rw-r--r-- | drivers/media/video/em28xx/em28xx.h | 45 |
2 files changed, 938 insertions, 21 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index 9b29c8f4c18a..e3e965defd5a 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -52,6 +52,15 @@ struct em28xx_hash_table { | |||
52 | }; | 52 | }; |
53 | 53 | ||
54 | struct em28xx_board em28xx_boards[] = { | 54 | struct em28xx_board em28xx_boards[] = { |
55 | [EM2750_BOARD_UNKNOWN] = { | ||
56 | .name = "Unknown EM2750/EM2751 webcam grabber", | ||
57 | .vchannels = 1, | ||
58 | .input = { { | ||
59 | .type = EM28XX_VMUX_COMPOSITE1, | ||
60 | .vmux = 0, | ||
61 | .amux = 0, | ||
62 | } }, | ||
63 | }, | ||
55 | [EM2800_BOARD_UNKNOWN] = { | 64 | [EM2800_BOARD_UNKNOWN] = { |
56 | .name = "Unknown EM2800 video grabber", | 65 | .name = "Unknown EM2800 video grabber", |
57 | .is_em2800 = 1, | 66 | .is_em2800 = 1, |
@@ -73,6 +82,39 @@ struct em28xx_board em28xx_boards[] = { | |||
73 | .is_em2800 = 0, | 82 | .is_em2800 = 0, |
74 | .tuner_type = TUNER_ABSENT, | 83 | .tuner_type = TUNER_ABSENT, |
75 | }, | 84 | }, |
85 | [EM2750_BOARD_DLCW_130] = { | ||
86 | /* Beijing Huaqi Information Digital Technology Co., Ltd */ | ||
87 | .name = "Huaqi DLCW-130", | ||
88 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
89 | .vchannels = 1, | ||
90 | .input = { { | ||
91 | .type = EM28XX_VMUX_COMPOSITE1, | ||
92 | .vmux = 0, | ||
93 | .amux = 0, | ||
94 | } }, | ||
95 | }, | ||
96 | [EM2800_BOARD_KWORLD_USB2800] = { | ||
97 | .name = "Kworld USB2800", | ||
98 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
99 | .is_em2800 = 1, | ||
100 | .vchannels = 3, | ||
101 | .tuner_type = TUNER_PHILIPS_FCV1236D, | ||
102 | .tda9887_conf = TDA9887_PRESENT, | ||
103 | .decoder = EM28XX_SAA7113, | ||
104 | .input = { { | ||
105 | .type = EM28XX_VMUX_TELEVISION, | ||
106 | .vmux = SAA7115_COMPOSITE2, | ||
107 | .amux = 0, | ||
108 | }, { | ||
109 | .type = EM28XX_VMUX_COMPOSITE1, | ||
110 | .vmux = SAA7115_COMPOSITE0, | ||
111 | .amux = 1, | ||
112 | }, { | ||
113 | .type = EM28XX_VMUX_SVIDEO, | ||
114 | .vmux = SAA7115_SVIDEO3, | ||
115 | .amux = 1, | ||
116 | } }, | ||
117 | }, | ||
76 | [EM2820_BOARD_KWORLD_PVRTV2800RF] = { | 118 | [EM2820_BOARD_KWORLD_PVRTV2800RF] = { |
77 | .name = "Kworld PVR TV 2800 RF", | 119 | .name = "Kworld PVR TV 2800 RF", |
78 | .is_em2800 = 0, | 120 | .is_em2800 = 0, |
@@ -151,6 +193,376 @@ struct em28xx_board em28xx_boards[] = { | |||
151 | MSP_DSP_IN_SCART, MSP_DSP_IN_SCART), | 193 | MSP_DSP_IN_SCART, MSP_DSP_IN_SCART), |
152 | } }, | 194 | } }, |
153 | }, | 195 | }, |
196 | [EM2820_BOARD_DLINK_USB_TV] = { | ||
197 | .name = "D-Link DUB-T210 TV Tuner", | ||
198 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
199 | .vchannels = 3, | ||
200 | .is_em2800 = 0, | ||
201 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, | ||
202 | .tda9887_conf = TDA9887_PRESENT, | ||
203 | .decoder = EM28XX_SAA7113, | ||
204 | .input = { { | ||
205 | .type = EM28XX_VMUX_TELEVISION, | ||
206 | .vmux = SAA7115_COMPOSITE2, | ||
207 | .amux = 1, | ||
208 | }, { | ||
209 | .type = EM28XX_VMUX_COMPOSITE1, | ||
210 | .vmux = SAA7115_COMPOSITE0, | ||
211 | .amux = 1, | ||
212 | }, { | ||
213 | .type = EM28XX_VMUX_SVIDEO, | ||
214 | .vmux = SAA7115_SVIDEO3, | ||
215 | .amux = 1, | ||
216 | } }, | ||
217 | }, | ||
218 | [EM2820_BOARD_HERCULES_SMART_TV_USB2] = { | ||
219 | .name = "Hercules Smart TV USB 2.0", | ||
220 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
221 | .vchannels = 3, | ||
222 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, | ||
223 | .tda9887_conf = TDA9887_PRESENT, | ||
224 | .decoder = EM28XX_SAA7113, | ||
225 | .input = { { | ||
226 | .type = EM28XX_VMUX_TELEVISION, | ||
227 | .vmux = SAA7115_COMPOSITE2, | ||
228 | .amux = 1, | ||
229 | }, { | ||
230 | .type = EM28XX_VMUX_COMPOSITE1, | ||
231 | .vmux = SAA7115_COMPOSITE0, | ||
232 | .amux = 1, | ||
233 | }, { | ||
234 | .type = EM28XX_VMUX_SVIDEO, | ||
235 | .vmux = SAA7115_SVIDEO3, | ||
236 | .amux = 1, | ||
237 | } }, | ||
238 | }, | ||
239 | [EM2820_BOARD_PINNACLE_USB_2_FM1216ME] = { | ||
240 | .name = "Pinnacle PCTV USB 2 (Philips FM1216ME)", | ||
241 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
242 | .vchannels = 3, | ||
243 | .is_em2800 = 0, | ||
244 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | ||
245 | .tda9887_conf = TDA9887_PRESENT, | ||
246 | .decoder = EM28XX_SAA7113, | ||
247 | .input = { { | ||
248 | .type = EM28XX_VMUX_TELEVISION, | ||
249 | .vmux = SAA7115_COMPOSITE2, | ||
250 | .amux = 0, | ||
251 | }, { | ||
252 | .type = EM28XX_VMUX_COMPOSITE1, | ||
253 | .vmux = SAA7115_COMPOSITE0, | ||
254 | .amux = 1, | ||
255 | }, { | ||
256 | .type = EM28XX_VMUX_SVIDEO, | ||
257 | .vmux = SAA7115_SVIDEO3, | ||
258 | .amux = 1, | ||
259 | } }, | ||
260 | }, | ||
261 | [EM2820_BOARD_GADMEI_UTV310] = { | ||
262 | .name = "Gadmei UTV310", | ||
263 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
264 | .vchannels = 3, | ||
265 | .tuner_type = TUNER_TNF_5335MF, | ||
266 | .tda9887_conf = TDA9887_PRESENT, | ||
267 | .decoder = EM28XX_SAA7113, | ||
268 | .input = { { | ||
269 | .type = EM28XX_VMUX_TELEVISION, | ||
270 | .vmux = SAA7115_COMPOSITE1, | ||
271 | .amux = 1, | ||
272 | }, { | ||
273 | .type = EM28XX_VMUX_COMPOSITE1, | ||
274 | .vmux = SAA7115_COMPOSITE0, | ||
275 | .amux = 1, | ||
276 | }, { | ||
277 | .type = EM28XX_VMUX_SVIDEO, | ||
278 | .vmux = SAA7115_SVIDEO3, | ||
279 | .amux = 1, | ||
280 | } }, | ||
281 | }, | ||
282 | [EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE] = { | ||
283 | .name = "Leadtek Winfast USB II Deluxe", | ||
284 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
285 | .vchannels = 3, | ||
286 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | ||
287 | .tda9887_conf = TDA9887_PRESENT, | ||
288 | .decoder = EM28XX_SAA7114, | ||
289 | .input = { { | ||
290 | .type = EM28XX_VMUX_TELEVISION, | ||
291 | .vmux = 2, | ||
292 | .amux = 0, | ||
293 | }, { | ||
294 | .type = EM28XX_VMUX_COMPOSITE1, | ||
295 | .vmux = 0, | ||
296 | .amux = 1, | ||
297 | }, { | ||
298 | .type = EM28XX_VMUX_SVIDEO, | ||
299 | .vmux = 9, | ||
300 | .amux = 1, | ||
301 | } }, | ||
302 | }, | ||
303 | [EM2820_BOARD_PINNACLE_DVC_100] = { | ||
304 | .name = "Pinnacle Dazzle DVC 100", | ||
305 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
306 | .vchannels = 3, | ||
307 | .decoder = EM28XX_SAA7113, | ||
308 | .input = { { | ||
309 | .type = EM28XX_VMUX_COMPOSITE1, | ||
310 | .vmux = SAA7115_COMPOSITE0, | ||
311 | .amux = 1, | ||
312 | }, { | ||
313 | .type = EM28XX_VMUX_SVIDEO, | ||
314 | .vmux = SAA7115_SVIDEO3, | ||
315 | .amux = 1, | ||
316 | } }, | ||
317 | }, | ||
318 | [EM2820_BOARD_VIDEOLOGY_20K14XUSB] = { | ||
319 | .name = "Videology 20K14XUSB USB2.0", | ||
320 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
321 | .vchannels = 1, | ||
322 | .input = { { | ||
323 | .type = EM28XX_VMUX_COMPOSITE1, | ||
324 | .vmux = 0, | ||
325 | .amux = 0, | ||
326 | } }, | ||
327 | }, | ||
328 | [EM2821_BOARD_PROLINK_PLAYTV_USB2] = { | ||
329 | .name = "SIIG AVTuner-PVR/Prolink PlayTV USB 2.0", | ||
330 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
331 | .vchannels = 3, | ||
332 | .is_em2800 = 0, | ||
333 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, /* unknown? */ | ||
334 | .tda9887_conf = TDA9887_PRESENT, /* unknown? */ | ||
335 | .decoder = EM28XX_SAA7113, | ||
336 | .input = { { | ||
337 | .type = EM28XX_VMUX_TELEVISION, | ||
338 | .vmux = SAA7115_COMPOSITE2, | ||
339 | .amux = 1, | ||
340 | }, { | ||
341 | .type = EM28XX_VMUX_COMPOSITE1, | ||
342 | .vmux = SAA7115_COMPOSITE0, | ||
343 | .amux = 1, | ||
344 | }, { | ||
345 | .type = EM28XX_VMUX_SVIDEO, | ||
346 | .vmux = SAA7115_SVIDEO3, | ||
347 | .amux = 1, | ||
348 | } }, | ||
349 | }, | ||
350 | [EM2821_BOARD_SUPERCOMP_USB_2] = { | ||
351 | .name = "Supercomp USB 2.0 TV", | ||
352 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
353 | .vchannels = 3, | ||
354 | .is_em2800 = 0, | ||
355 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, | ||
356 | .tda9887_conf = TDA9887_PRESENT | | ||
357 | TDA9887_PORT1_ACTIVE | | ||
358 | TDA9887_PORT2_ACTIVE, | ||
359 | .decoder = EM28XX_SAA7113, | ||
360 | .input = { { | ||
361 | .type = EM28XX_VMUX_TELEVISION, | ||
362 | .vmux = SAA7115_COMPOSITE2, | ||
363 | .amux = 1, | ||
364 | }, { | ||
365 | .type = EM28XX_VMUX_COMPOSITE1, | ||
366 | .vmux = SAA7115_COMPOSITE0, | ||
367 | .amux = 0, | ||
368 | }, { | ||
369 | .type = EM28XX_VMUX_SVIDEO, | ||
370 | .vmux = SAA7115_SVIDEO3, | ||
371 | .amux = 1, | ||
372 | } }, | ||
373 | }, | ||
374 | [EM2821_BOARD_USBGEAR_VD204] = { | ||
375 | .name = "Usbgear VD204v9", | ||
376 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
377 | .vchannels = 2, | ||
378 | .decoder = EM28XX_SAA7113, | ||
379 | .input = { { | ||
380 | .type = EM28XX_VMUX_COMPOSITE1, | ||
381 | .vmux = SAA7115_COMPOSITE0, | ||
382 | .amux = 1, | ||
383 | }, { | ||
384 | .type = EM28XX_VMUX_SVIDEO, | ||
385 | .vmux = SAA7115_SVIDEO3, | ||
386 | .amux = 1, | ||
387 | } }, | ||
388 | }, | ||
389 | [EM2860_BOARD_NETGMBH_CAM] = { | ||
390 | /* Beijing Huaqi Information Digital Technology Co., Ltd */ | ||
391 | .name = "NetGMBH Cam", | ||
392 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
393 | .vchannels = 1, | ||
394 | .input = { { | ||
395 | .type = EM28XX_VMUX_COMPOSITE1, | ||
396 | .vmux = 0, | ||
397 | .amux = 0, | ||
398 | } }, | ||
399 | }, | ||
400 | [EM2860_BOARD_TYPHOON_DVD_MAKER] = { | ||
401 | .name = "Typhoon DVD Maker", | ||
402 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
403 | .vchannels = 2, | ||
404 | .decoder = EM28XX_SAA7113, | ||
405 | .input = { { | ||
406 | .type = EM28XX_VMUX_COMPOSITE1, | ||
407 | .vmux = SAA7115_COMPOSITE0, | ||
408 | .amux = 1, | ||
409 | }, { | ||
410 | .type = EM28XX_VMUX_SVIDEO, | ||
411 | .vmux = SAA7115_SVIDEO3, | ||
412 | .amux = 1, | ||
413 | } }, | ||
414 | }, | ||
415 | [EM2860_BOARD_GADMEI_UTV330] = { | ||
416 | .name = "Gadmei UTV330", | ||
417 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
418 | .vchannels = 3, | ||
419 | .tuner_type = TUNER_TNF_5335MF, | ||
420 | .tda9887_conf = TDA9887_PRESENT, | ||
421 | .decoder = EM28XX_SAA7113, | ||
422 | .input = { { | ||
423 | .type = EM28XX_VMUX_TELEVISION, | ||
424 | .vmux = SAA7115_COMPOSITE2, | ||
425 | .amux = 0, | ||
426 | }, { | ||
427 | .type = EM28XX_VMUX_COMPOSITE1, | ||
428 | .vmux = SAA7115_COMPOSITE0, | ||
429 | .amux = 1, | ||
430 | }, { | ||
431 | .type = EM28XX_VMUX_SVIDEO, | ||
432 | .vmux = SAA7115_SVIDEO3, | ||
433 | .amux = 1, | ||
434 | } }, | ||
435 | }, | ||
436 | [EM2860_BOARD_TERRATEC_HYBRID_XS] = { | ||
437 | .name = "Terratec Cinergy A Hybrid XS", | ||
438 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
439 | .vchannels = 3, | ||
440 | .tuner_type = TUNER_XC2028, | ||
441 | .decoder = EM28XX_TVP5150, | ||
442 | .input = { { | ||
443 | .type = EM28XX_VMUX_TELEVISION, | ||
444 | .vmux = TVP5150_COMPOSITE0, | ||
445 | .amux = 0, | ||
446 | }, { | ||
447 | .type = EM28XX_VMUX_COMPOSITE1, | ||
448 | .vmux = TVP5150_COMPOSITE1, | ||
449 | .amux = 1, | ||
450 | }, { | ||
451 | .type = EM28XX_VMUX_SVIDEO, | ||
452 | .vmux = TVP5150_SVIDEO, | ||
453 | .amux = 1, | ||
454 | } }, | ||
455 | }, | ||
456 | [EM2861_BOARD_KWORLD_PVRTV_300U] = { | ||
457 | .name = "KWorld PVRTV 300U", | ||
458 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
459 | .vchannels = 3, | ||
460 | .tuner_type = TUNER_XC2028, | ||
461 | .decoder = EM28XX_TVP5150, | ||
462 | .input = { { | ||
463 | .type = EM28XX_VMUX_TELEVISION, | ||
464 | .vmux = TVP5150_COMPOSITE0, | ||
465 | .amux = 0, | ||
466 | }, { | ||
467 | .type = EM28XX_VMUX_COMPOSITE1, | ||
468 | .vmux = TVP5150_COMPOSITE1, | ||
469 | .amux = 1, | ||
470 | }, { | ||
471 | .type = EM28XX_VMUX_SVIDEO, | ||
472 | .vmux = TVP5150_SVIDEO, | ||
473 | .amux = 1, | ||
474 | } }, | ||
475 | }, | ||
476 | [EM2861_BOARD_YAKUMO_MOVIE_MIXER] = { | ||
477 | .name = "Yakumo MovieMixer", | ||
478 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
479 | .vchannels = 1, | ||
480 | .decoder = EM28XX_TVP5150, | ||
481 | .input = { { | ||
482 | .type = EM28XX_VMUX_TELEVISION, | ||
483 | .vmux = TVP5150_COMPOSITE0, | ||
484 | .amux = 0, | ||
485 | }, { | ||
486 | .type = EM28XX_VMUX_COMPOSITE1, | ||
487 | .vmux = TVP5150_COMPOSITE1, | ||
488 | .amux = 1, | ||
489 | }, { | ||
490 | .type = EM28XX_VMUX_SVIDEO, | ||
491 | .vmux = TVP5150_SVIDEO, | ||
492 | .amux = 1, | ||
493 | } }, | ||
494 | }, | ||
495 | [EM2861_BOARD_PLEXTOR_PX_TV100U] = { | ||
496 | .name = "Plextor ConvertX PX-TV100U", | ||
497 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
498 | .vchannels = 3, | ||
499 | .tuner_type = TUNER_TNF_5335MF, | ||
500 | .tda9887_conf = TDA9887_PRESENT, | ||
501 | .decoder = EM28XX_TVP5150, | ||
502 | .input = { { | ||
503 | .type = EM28XX_VMUX_TELEVISION, | ||
504 | .vmux = TVP5150_COMPOSITE0, | ||
505 | .amux = 1, | ||
506 | }, { | ||
507 | .type = EM28XX_VMUX_COMPOSITE1, | ||
508 | .vmux = TVP5150_COMPOSITE1, | ||
509 | .amux = 1, | ||
510 | }, { | ||
511 | .type = EM28XX_VMUX_SVIDEO, | ||
512 | .vmux = TVP5150_SVIDEO, | ||
513 | .amux = 1, | ||
514 | } }, | ||
515 | }, | ||
516 | [EM2870_BOARD_TERRATEC_XS] = { | ||
517 | .name = "Terratec Cinergy T XS", | ||
518 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
519 | .tuner_type = TUNER_XC2028, | ||
520 | }, | ||
521 | [EM2870_BOARD_TERRATEC_XS_MT2060] = { | ||
522 | .name = "Terratec Cinergy T XS (MT2060)", | ||
523 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
524 | .tuner_type = TUNER_ABSENT, /* MT2060 */ | ||
525 | }, | ||
526 | [EM2870_BOARD_KWORLD_350U] = { | ||
527 | .name = "Kworld 350 U DVB-T", | ||
528 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
529 | .tuner_type = TUNER_XC2028, | ||
530 | }, | ||
531 | [EM2870_BOARD_KWORLD_355U] = { | ||
532 | .name = "Kworld 355 U DVB-T", | ||
533 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
534 | }, | ||
535 | [EM2870_BOARD_PINNACLE_PCTV_DVB] = { | ||
536 | .name = "Pinnacle PCTV DVB-T", | ||
537 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
538 | .tuner_type = TUNER_ABSENT, /* MT2060 */ | ||
539 | }, | ||
540 | [EM2870_BOARD_COMPRO_VIDEOMATE] = { | ||
541 | .name = "Compro, VideoMate U3", | ||
542 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
543 | .tuner_type = TUNER_ABSENT, /* MT2060 */ | ||
544 | }, | ||
545 | [EM2880_BOARD_TERRATEC_HYBRID_XS_FR] = { | ||
546 | .name = "Terratec Hybrid XS Secam", | ||
547 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
548 | .vchannels = 3, | ||
549 | .has_msp34xx = 1, | ||
550 | .tuner_type = TUNER_XC2028, | ||
551 | .decoder = EM28XX_TVP5150, | ||
552 | .input = { { | ||
553 | .type = EM28XX_VMUX_TELEVISION, | ||
554 | .vmux = TVP5150_COMPOSITE0, | ||
555 | .amux = 0, | ||
556 | }, { | ||
557 | .type = EM28XX_VMUX_COMPOSITE1, | ||
558 | .vmux = TVP5150_COMPOSITE1, | ||
559 | .amux = 1, | ||
560 | }, { | ||
561 | .type = EM28XX_VMUX_SVIDEO, | ||
562 | .vmux = TVP5150_SVIDEO, | ||
563 | .amux = 1, | ||
564 | } }, | ||
565 | }, | ||
154 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900] = { | 566 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900] = { |
155 | .name = "Hauppauge WinTV HVR 900", | 567 | .name = "Hauppauge WinTV HVR 900", |
156 | .vchannels = 3, | 568 | .vchannels = 3, |
@@ -501,13 +913,236 @@ struct em28xx_board em28xx_boards[] = { | |||
501 | .amux = 0, | 913 | .amux = 0, |
502 | } }, | 914 | } }, |
503 | }, | 915 | }, |
916 | [EM2880_BOARD_MSI_DIGIVOX_AD] = { | ||
917 | .name = "MSI DigiVox A/D", | ||
918 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
919 | .vchannels = 3, | ||
920 | .tuner_type = TUNER_XC2028, | ||
921 | .decoder = EM28XX_TVP5150, | ||
922 | .input = { { | ||
923 | .type = EM28XX_VMUX_TELEVISION, | ||
924 | .vmux = TVP5150_COMPOSITE0, | ||
925 | .amux = 0, | ||
926 | }, { | ||
927 | .type = EM28XX_VMUX_COMPOSITE1, | ||
928 | .vmux = TVP5150_COMPOSITE1, | ||
929 | .amux = 1, | ||
930 | }, { | ||
931 | .type = EM28XX_VMUX_SVIDEO, | ||
932 | .vmux = TVP5150_SVIDEO, | ||
933 | .amux = 1, | ||
934 | } }, | ||
935 | }, | ||
936 | [EM2880_BOARD_MSI_DIGIVOX_AD_II] = { | ||
937 | .name = "MSI DigiVox A/D II", | ||
938 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
939 | .vchannels = 3, | ||
940 | .tuner_type = TUNER_XC2028, | ||
941 | .decoder = EM28XX_TVP5150, | ||
942 | .input = { { | ||
943 | .type = EM28XX_VMUX_TELEVISION, | ||
944 | .vmux = TVP5150_COMPOSITE0, | ||
945 | .amux = 0, | ||
946 | }, { | ||
947 | .type = EM28XX_VMUX_COMPOSITE1, | ||
948 | .vmux = TVP5150_COMPOSITE1, | ||
949 | .amux = 1, | ||
950 | }, { | ||
951 | .type = EM28XX_VMUX_SVIDEO, | ||
952 | .vmux = TVP5150_SVIDEO, | ||
953 | .amux = 1, | ||
954 | } }, | ||
955 | }, | ||
956 | [EM2880_BOARD_KWORLD_DVB_305U] = { | ||
957 | .name = "KWorld DVB-T 305U", | ||
958 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
959 | .vchannels = 3, | ||
960 | .tuner_type = TUNER_XC2028, | ||
961 | .decoder = EM28XX_TVP5150, | ||
962 | .input = { { | ||
963 | .type = EM28XX_VMUX_TELEVISION, | ||
964 | .vmux = TVP5150_COMPOSITE0, | ||
965 | .amux = 0, | ||
966 | }, { | ||
967 | .type = EM28XX_VMUX_COMPOSITE1, | ||
968 | .vmux = TVP5150_COMPOSITE1, | ||
969 | .amux = 1, | ||
970 | }, { | ||
971 | .type = EM28XX_VMUX_SVIDEO, | ||
972 | .vmux = TVP5150_SVIDEO, | ||
973 | .amux = 1, | ||
974 | } }, | ||
975 | }, | ||
976 | [EM2880_BOARD_KWORLD_DVB_310U] = { | ||
977 | .name = "KWorld DVB-T 310U", | ||
978 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
979 | .vchannels = 3, | ||
980 | .tuner_type = TUNER_XC2028, | ||
981 | .decoder = EM28XX_TVP5150, | ||
982 | .input = { { | ||
983 | .type = EM28XX_VMUX_TELEVISION, | ||
984 | .vmux = TVP5150_COMPOSITE0, | ||
985 | .amux = 0, | ||
986 | }, { | ||
987 | .type = EM28XX_VMUX_COMPOSITE1, | ||
988 | .vmux = TVP5150_COMPOSITE1, | ||
989 | .amux = 1, | ||
990 | }, { | ||
991 | .type = EM28XX_VMUX_SVIDEO, | ||
992 | .vmux = TVP5150_SVIDEO, | ||
993 | .amux = 1, | ||
994 | } }, | ||
995 | }, | ||
996 | [EM2881_BOARD_DNT_DA2_HYBRID] = { | ||
997 | .name = "DNT DA2 Hybrid", | ||
998 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
999 | .vchannels = 3, | ||
1000 | .tuner_type = TUNER_XC2028, | ||
1001 | .decoder = EM28XX_TVP5150, | ||
1002 | .input = { { | ||
1003 | .type = EM28XX_VMUX_TELEVISION, | ||
1004 | .vmux = TVP5150_COMPOSITE0, | ||
1005 | .amux = 0, | ||
1006 | }, { | ||
1007 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1008 | .vmux = TVP5150_COMPOSITE1, | ||
1009 | .amux = 1, | ||
1010 | }, { | ||
1011 | .type = EM28XX_VMUX_SVIDEO, | ||
1012 | .vmux = TVP5150_SVIDEO, | ||
1013 | .amux = 1, | ||
1014 | } }, | ||
1015 | }, | ||
1016 | [EM2881_BOARD_PINNACLE_HYBRID_PRO] = { | ||
1017 | .name = "Pinnacle Hybrid Pro", | ||
1018 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1019 | .vchannels = 3, | ||
1020 | .tuner_type = TUNER_XC2028, | ||
1021 | .decoder = EM28XX_TVP5150, | ||
1022 | .input = { { | ||
1023 | .type = EM28XX_VMUX_TELEVISION, | ||
1024 | .vmux = TVP5150_COMPOSITE0, | ||
1025 | .amux = 0, | ||
1026 | }, { | ||
1027 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1028 | .vmux = TVP5150_COMPOSITE1, | ||
1029 | .amux = 1, | ||
1030 | }, { | ||
1031 | .type = EM28XX_VMUX_SVIDEO, | ||
1032 | .vmux = TVP5150_SVIDEO, | ||
1033 | .amux = 1, | ||
1034 | } }, | ||
1035 | }, | ||
1036 | [EM2882_BOARD_PINNACLE_HYBRID_PRO] = { | ||
1037 | .name = "Pinnacle Hybrid Pro (2)", | ||
1038 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1039 | .vchannels = 3, | ||
1040 | .tuner_type = TUNER_XC2028, | ||
1041 | .decoder = EM28XX_TVP5150, | ||
1042 | .input = { { | ||
1043 | .type = EM28XX_VMUX_TELEVISION, | ||
1044 | .vmux = TVP5150_COMPOSITE0, | ||
1045 | .amux = 0, | ||
1046 | }, { | ||
1047 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1048 | .vmux = TVP5150_COMPOSITE1, | ||
1049 | .amux = 1, | ||
1050 | }, { | ||
1051 | .type = EM28XX_VMUX_SVIDEO, | ||
1052 | .vmux = TVP5150_SVIDEO, | ||
1053 | .amux = 1, | ||
1054 | } }, | ||
1055 | }, | ||
1056 | [EM2882_BOARD_KWORLD_VS_DVBT] = { | ||
1057 | .name = "Kworld VS-DVB-T 323UR", | ||
1058 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1059 | .vchannels = 3, | ||
1060 | .tuner_type = TUNER_XC2028, | ||
1061 | .decoder = EM28XX_TVP5150, | ||
1062 | .input = { { | ||
1063 | .type = EM28XX_VMUX_TELEVISION, | ||
1064 | .vmux = TVP5150_COMPOSITE0, | ||
1065 | .amux = 0, | ||
1066 | }, { | ||
1067 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1068 | .vmux = TVP5150_COMPOSITE1, | ||
1069 | .amux = 1, | ||
1070 | }, { | ||
1071 | .type = EM28XX_VMUX_SVIDEO, | ||
1072 | .vmux = TVP5150_SVIDEO, | ||
1073 | .amux = 1, | ||
1074 | } }, | ||
1075 | }, | ||
1076 | [EM2882_BOARD_TERRATEC_HYBRID_XS] = { | ||
1077 | .name = "Terratec Hybrid XS (em2882)", | ||
1078 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1079 | .vchannels = 3, | ||
1080 | .tuner_type = TUNER_XC2028, | ||
1081 | .decoder = EM28XX_TVP5150, | ||
1082 | .input = { { | ||
1083 | .type = EM28XX_VMUX_TELEVISION, | ||
1084 | .vmux = TVP5150_COMPOSITE0, | ||
1085 | .amux = 0, | ||
1086 | }, { | ||
1087 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1088 | .vmux = TVP5150_COMPOSITE1, | ||
1089 | .amux = 1, | ||
1090 | }, { | ||
1091 | .type = EM28XX_VMUX_SVIDEO, | ||
1092 | .vmux = TVP5150_SVIDEO, | ||
1093 | .amux = 1, | ||
1094 | } }, | ||
1095 | }, | ||
1096 | [EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950] = { | ||
1097 | .name = "Hauppauge WinTV HVR 950", | ||
1098 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1099 | .vchannels = 3, | ||
1100 | .tuner_type = TUNER_XC2028, | ||
1101 | .decoder = EM28XX_TVP5150, | ||
1102 | .input = { { | ||
1103 | .type = EM28XX_VMUX_TELEVISION, | ||
1104 | .vmux = TVP5150_COMPOSITE0, | ||
1105 | .amux = 0, | ||
1106 | }, { | ||
1107 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1108 | .vmux = TVP5150_COMPOSITE1, | ||
1109 | .amux = 1, | ||
1110 | }, { | ||
1111 | .type = EM28XX_VMUX_SVIDEO, | ||
1112 | .vmux = TVP5150_SVIDEO, | ||
1113 | .amux = 1, | ||
1114 | } }, | ||
1115 | }, | ||
1116 | [EM2883_BOARD_KWORLD_HYBRID_A316] = { | ||
1117 | .name = "Kworld PlusTV HD Hybrid 330", | ||
1118 | .valid = EM28XX_BOARD_NOT_VALIDATED, | ||
1119 | .vchannels = 3, | ||
1120 | .is_em2800 = 0, | ||
1121 | .tuner_type = TUNER_XC2028, | ||
1122 | .decoder = EM28XX_TVP5150, | ||
1123 | .input = { { | ||
1124 | .type = EM28XX_VMUX_TELEVISION, | ||
1125 | .vmux = TVP5150_COMPOSITE0, | ||
1126 | .amux = 0, | ||
1127 | }, { | ||
1128 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1129 | .vmux = TVP5150_COMPOSITE1, | ||
1130 | .amux = 1, | ||
1131 | }, { | ||
1132 | .type = EM28XX_VMUX_SVIDEO, | ||
1133 | .vmux = TVP5150_SVIDEO, | ||
1134 | .amux = 1, | ||
1135 | } }, | ||
1136 | }, | ||
504 | }; | 1137 | }; |
505 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); | 1138 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); |
506 | 1139 | ||
507 | /* table of devices that work with this driver */ | 1140 | /* table of devices that work with this driver */ |
508 | struct usb_device_id em28xx_id_table [] = { | 1141 | struct usb_device_id em28xx_id_table [] = { |
509 | { USB_DEVICE(0xeb1a, 0x2750), | 1142 | { USB_DEVICE(0xeb1a, 0x2750), |
510 | .driver_info = EM2820_BOARD_UNKNOWN }, | 1143 | .driver_info = EM2750_BOARD_UNKNOWN }, |
1144 | { USB_DEVICE(0xeb1a, 0x2751), | ||
1145 | .driver_info = EM2750_BOARD_UNKNOWN }, | ||
511 | { USB_DEVICE(0xeb1a, 0x2800), | 1146 | { USB_DEVICE(0xeb1a, 0x2800), |
512 | .driver_info = EM2800_BOARD_UNKNOWN }, | 1147 | .driver_info = EM2800_BOARD_UNKNOWN }, |
513 | { USB_DEVICE(0xeb1a, 0x2820), | 1148 | { USB_DEVICE(0xeb1a, 0x2820), |
@@ -524,20 +1159,46 @@ struct usb_device_id em28xx_id_table [] = { | |||
524 | .driver_info = EM2820_BOARD_UNKNOWN }, | 1159 | .driver_info = EM2820_BOARD_UNKNOWN }, |
525 | { USB_DEVICE(0xeb1a, 0x2883), | 1160 | { USB_DEVICE(0xeb1a, 0x2883), |
526 | .driver_info = EM2820_BOARD_UNKNOWN }, | 1161 | .driver_info = EM2820_BOARD_UNKNOWN }, |
1162 | { USB_DEVICE(0xeb1a, 0xe300), | ||
1163 | .driver_info = EM2861_BOARD_KWORLD_PVRTV_300U }, | ||
1164 | { USB_DEVICE(0xeb1a, 0xe305), | ||
1165 | .driver_info = EM2880_BOARD_KWORLD_DVB_305U }, | ||
1166 | { USB_DEVICE(0xeb1a, 0xe310), | ||
1167 | .driver_info = EM2880_BOARD_MSI_DIGIVOX_AD }, | ||
1168 | { USB_DEVICE(0xeb1a, 0xa316), | ||
1169 | .driver_info = EM2883_BOARD_KWORLD_HYBRID_A316 }, | ||
1170 | { USB_DEVICE(0xeb1a, 0xe320), | ||
1171 | .driver_info = EM2880_BOARD_MSI_DIGIVOX_AD_II }, | ||
1172 | { USB_DEVICE(0xeb1a, 0xe323), | ||
1173 | .driver_info = EM2882_BOARD_KWORLD_VS_DVBT }, | ||
1174 | { USB_DEVICE(0xeb1a, 0xe350), | ||
1175 | .driver_info = EM2870_BOARD_KWORLD_350U }, | ||
1176 | { USB_DEVICE(0xeb1a, 0xe355), | ||
1177 | .driver_info = EM2870_BOARD_KWORLD_355U }, | ||
1178 | { USB_DEVICE(0xeb1a, 0x2801), | ||
1179 | .driver_info = EM2800_BOARD_GRABBEEX_USB2800 }, | ||
1180 | { USB_DEVICE(0xeb1a, 0xe357), | ||
1181 | .driver_info = EM2870_BOARD_KWORLD_355U }, | ||
527 | { USB_DEVICE(0x0ccd, 0x0036), | 1182 | { USB_DEVICE(0x0ccd, 0x0036), |
528 | .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 }, | 1183 | .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 }, |
529 | { USB_DEVICE(0x2304, 0x0208), | 1184 | { USB_DEVICE(0x0ccd, 0x004c), |
530 | .driver_info = EM2820_BOARD_PINNACLE_USB_2 }, | 1185 | .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS_FR }, |
1186 | { USB_DEVICE(0x0ccd, 0x004f), | ||
1187 | .driver_info = EM2860_BOARD_TERRATEC_HYBRID_XS }, | ||
1188 | { USB_DEVICE(0x0ccd, 0x005e), | ||
1189 | .driver_info = EM2882_BOARD_TERRATEC_HYBRID_XS }, | ||
1190 | { USB_DEVICE(0x0ccd, 0x0042), | ||
1191 | .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS }, | ||
1192 | { USB_DEVICE(0x0ccd, 0x0043), | ||
1193 | .driver_info = EM2870_BOARD_TERRATEC_XS }, | ||
1194 | { USB_DEVICE(0x0ccd, 0x0047), | ||
1195 | .driver_info = EM2880_BOARD_TERRATEC_PRODIGY_XS }, | ||
1196 | { USB_DEVICE(0x185b, 0x2870), | ||
1197 | .driver_info = EM2870_BOARD_COMPRO_VIDEOMATE }, | ||
531 | { USB_DEVICE(0x2040, 0x4200), | 1198 | { USB_DEVICE(0x2040, 0x4200), |
532 | .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, | 1199 | .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, |
533 | { USB_DEVICE(0x2040, 0x4201), | 1200 | { USB_DEVICE(0x2040, 0x4201), |
534 | .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, | 1201 | .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, |
535 | { USB_DEVICE(0x2304, 0x0207), | ||
536 | .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | ||
537 | { USB_DEVICE(0x2304, 0x021a), | ||
538 | .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | ||
539 | { USB_DEVICE(0x2304, 0x0227), | ||
540 | .driver_info = EM2880_BOARD_PINNACLE_PCTV_HD_PRO }, | ||
541 | { USB_DEVICE(0x2040, 0x6500), | 1202 | { USB_DEVICE(0x2040, 0x6500), |
542 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 }, | 1203 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 }, |
543 | { USB_DEVICE(0x2040, 0x6502), | 1204 | { USB_DEVICE(0x2040, 0x6502), |
@@ -550,14 +1211,24 @@ struct usb_device_id em28xx_id_table [] = { | |||
550 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, | 1211 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, |
551 | { USB_DEVICE(0x2040, 0x651f), /* HCW HVR-850 */ | 1212 | { USB_DEVICE(0x2040, 0x651f), /* HCW HVR-850 */ |
552 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, | 1213 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, |
553 | { USB_DEVICE(0x0ccd, 0x0042), | ||
554 | .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS }, | ||
555 | { USB_DEVICE(0x0ccd, 0x0047), | ||
556 | .driver_info = EM2880_BOARD_TERRATEC_PRODIGY_XS }, | ||
557 | { USB_DEVICE(0x0438, 0xb002), | 1214 | { USB_DEVICE(0x0438, 0xb002), |
558 | .driver_info = EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 }, | 1215 | .driver_info = EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 }, |
559 | { USB_DEVICE(0xeb1a, 0x2801), | 1216 | { USB_DEVICE(0x2001, 0xf112), |
560 | .driver_info = EM2800_BOARD_GRABBEEX_USB2800 }, | 1217 | .driver_info = EM2820_BOARD_DLINK_USB_TV }, |
1218 | { USB_DEVICE(0x2304, 0x0207), | ||
1219 | .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | ||
1220 | { USB_DEVICE(0x2304, 0x0208), | ||
1221 | .driver_info = EM2820_BOARD_PINNACLE_USB_2 }, | ||
1222 | { USB_DEVICE(0x2304, 0x021a), | ||
1223 | .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | ||
1224 | { USB_DEVICE(0x2304, 0x0226), | ||
1225 | .driver_info = EM2882_BOARD_PINNACLE_HYBRID_PRO }, | ||
1226 | { USB_DEVICE(0x2304, 0x0227), | ||
1227 | .driver_info = EM2880_BOARD_PINNACLE_PCTV_HD_PRO }, | ||
1228 | { USB_DEVICE(0x0413, 0x6023), | ||
1229 | .driver_info = EM2800_BOARD_LEADTEK_WINFAST_USBII }, | ||
1230 | { USB_DEVICE(0x093b, 0xa005), | ||
1231 | .driver_info = EM2861_BOARD_PLEXTOR_PX_TV100U }, | ||
561 | { }, | 1232 | { }, |
562 | }; | 1233 | }; |
563 | MODULE_DEVICE_TABLE(usb, em28xx_id_table); | 1234 | MODULE_DEVICE_TABLE(usb, em28xx_id_table); |
@@ -566,6 +1237,18 @@ MODULE_DEVICE_TABLE(usb, em28xx_id_table); | |||
566 | * Reset sequences for analog/digital modes | 1237 | * Reset sequences for analog/digital modes |
567 | */ | 1238 | */ |
568 | 1239 | ||
1240 | /* Reset for the most [analog] boards */ | ||
1241 | static struct em28xx_reg_seq default_analog[] = { | ||
1242 | {EM28XX_R08_GPIO, 0x6d, ~EM_GPIO_4, 10}, | ||
1243 | { -1, -1, -1, -1}, | ||
1244 | }; | ||
1245 | |||
1246 | /* Reset for the most [digital] boards */ | ||
1247 | static struct em28xx_reg_seq default_digital[] = { | ||
1248 | {EM28XX_R08_GPIO, 0x6e, ~EM_GPIO_4, 10}, | ||
1249 | { -1, -1, -1, -1}, | ||
1250 | }; | ||
1251 | |||
569 | /* Board Hauppauge WinTV HVR 900 analog */ | 1252 | /* Board Hauppauge WinTV HVR 900 analog */ |
570 | static struct em28xx_reg_seq hauppauge_wintv_hvr_900_analog[] = { | 1253 | static struct em28xx_reg_seq hauppauge_wintv_hvr_900_analog[] = { |
571 | {EM28XX_R08_GPIO, 0x2d, ~EM_GPIO_4, 10}, | 1254 | {EM28XX_R08_GPIO, 0x2d, ~EM_GPIO_4, 10}, |
@@ -581,14 +1264,42 @@ static struct em28xx_reg_seq hauppauge_wintv_hvr_900_digital[] = { | |||
581 | { -1, -1, -1, -1}, | 1264 | { -1, -1, -1, -1}, |
582 | }; | 1265 | }; |
583 | 1266 | ||
584 | /* Board Hauppauge WinTV HVR 900 tuner_callback */ | 1267 | /* Boards - EM2880 MSI DIGIVOX AD and EM2880_BOARD_MSI_DIGIVOX_AD_II */ |
585 | static struct em28xx_reg_seq hauppauge_wintv_hvr_900_tuner_callback[] = { | 1268 | static struct em28xx_reg_seq em2880_msi_digivox_ad_analog[] = { |
1269 | {EM28XX_R08_GPIO, 0x69, ~EM_GPIO_4, 10}, | ||
1270 | { -1, -1, -1, -1}, | ||
1271 | }; | ||
1272 | |||
1273 | /* Boards - EM2880 MSI DIGIVOX AD and EM2880_BOARD_MSI_DIGIVOX_AD_II */ | ||
1274 | static struct em28xx_reg_seq em2880_msi_digivox_ad_digital[] = { | ||
1275 | {EM28XX_R08_GPIO, 0x6a, ~EM_GPIO_4, 10}, | ||
1276 | { -1, -1, -1, -1}, | ||
1277 | }; | ||
1278 | |||
1279 | /* Board - EM2870 Kworld 355u | ||
1280 | Analog - No input analog */ | ||
1281 | static struct em28xx_reg_seq em2870_kworld_355u_digital[] = { | ||
1282 | {EM2880_R04_GPO, 0x01, 0xff, 10}, | ||
1283 | { -1, -1, -1, -1}, | ||
1284 | }; | ||
1285 | |||
1286 | /* Callback for the most boards */ | ||
1287 | static struct em28xx_reg_seq default_callback[] = { | ||
586 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, | 1288 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, |
587 | {EM28XX_R08_GPIO, 0, EM_GPIO_4, 10}, | 1289 | {EM28XX_R08_GPIO, 0, EM_GPIO_4, 10}, |
588 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, | 1290 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, |
589 | { -1, -1, -1, -1}, | 1291 | { -1, -1, -1, -1}, |
590 | }; | 1292 | }; |
591 | 1293 | ||
1294 | /* Callback for EM2882 TERRATEC HYBRID XS */ | ||
1295 | static struct em28xx_reg_seq em2882_terratec_hybrid_xs_digital[] = { | ||
1296 | {EM28XX_R08_GPIO, 0x2e, 0xff, 6}, | ||
1297 | {EM28XX_R08_GPIO, 0x3e, ~EM_GPIO_4, 6}, | ||
1298 | {EM2880_R04_GPO, 0x04, 0xff, 10}, | ||
1299 | {EM2880_R04_GPO, 0x0c, 0xff, 10}, | ||
1300 | { -1, -1, -1, -1}, | ||
1301 | }; | ||
1302 | |||
592 | /* | 1303 | /* |
593 | * EEPROM hash table for devices with generic USB IDs | 1304 | * EEPROM hash table for devices with generic USB IDs |
594 | */ | 1305 | */ |
@@ -635,6 +1346,7 @@ static void em28xx_set_model(struct em28xx *dev) | |||
635 | dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480; | 1346 | dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480; |
636 | dev->has_dvb = em28xx_boards[dev->model].has_dvb; | 1347 | dev->has_dvb = em28xx_boards[dev->model].has_dvb; |
637 | dev->has_snapshot_button = em28xx_boards[dev->model].has_snapshot_button; | 1348 | dev->has_snapshot_button = em28xx_boards[dev->model].has_snapshot_button; |
1349 | dev->valid = em28xx_boards[dev->model].valid; | ||
638 | } | 1350 | } |
639 | 1351 | ||
640 | /* Since em28xx_pre_card_setup() requires a proper dev->model, | 1352 | /* Since em28xx_pre_card_setup() requires a proper dev->model, |
@@ -670,9 +1382,12 @@ void em28xx_pre_card_setup(struct em28xx *dev) | |||
670 | case EM2880_BOARD_TERRATEC_PRODIGY_XS: | 1382 | case EM2880_BOARD_TERRATEC_PRODIGY_XS: |
671 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: | 1383 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: |
672 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: | 1384 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: |
673 | case EM2880_BOARD_TERRATEC_HYBRID_XS: | 1385 | case EM2860_BOARD_TERRATEC_HYBRID_XS: |
674 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950: | 1386 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950: |
675 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: | 1387 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: |
1388 | case EM2882_BOARD_PINNACLE_HYBRID_PRO: | ||
1389 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: | ||
1390 | case EM2883_BOARD_KWORLD_HYBRID_A316: | ||
676 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: | 1391 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: |
677 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | 1392 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); |
678 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | 1393 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); |
@@ -681,9 +1396,158 @@ void em28xx_pre_card_setup(struct em28xx *dev) | |||
681 | /* Sets GPO/GPIO sequences for this device */ | 1396 | /* Sets GPO/GPIO sequences for this device */ |
682 | dev->analog_gpio = hauppauge_wintv_hvr_900_analog; | 1397 | dev->analog_gpio = hauppauge_wintv_hvr_900_analog; |
683 | dev->digital_gpio = hauppauge_wintv_hvr_900_digital; | 1398 | dev->digital_gpio = hauppauge_wintv_hvr_900_digital; |
684 | dev->tun_analog_gpio = hauppauge_wintv_hvr_900_tuner_callback; | 1399 | dev->tun_analog_gpio = default_callback; |
685 | dev->tun_digital_gpio = hauppauge_wintv_hvr_900_tuner_callback; | 1400 | dev->tun_digital_gpio = default_callback; |
1401 | break; | ||
1402 | |||
1403 | case EM2882_BOARD_TERRATEC_HYBRID_XS: | ||
1404 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1405 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1406 | msleep(50); | ||
1407 | |||
1408 | /* should be added ir_codes here */ | ||
1409 | |||
1410 | /* Sets GPO/GPIO sequences for this device */ | ||
1411 | dev->analog_gpio = hauppauge_wintv_hvr_900_analog; | ||
1412 | dev->digital_gpio = hauppauge_wintv_hvr_900_digital; | ||
1413 | dev->tun_analog_gpio = default_callback; | ||
1414 | dev->tun_digital_gpio = em2882_terratec_hybrid_xs_digital; | ||
1415 | break; | ||
1416 | |||
1417 | case EM2880_BOARD_TERRATEC_HYBRID_XS_FR: | ||
1418 | case EM2880_BOARD_TERRATEC_HYBRID_XS: | ||
1419 | case EM2870_BOARD_TERRATEC_XS: | ||
1420 | case EM2881_BOARD_PINNACLE_HYBRID_PRO: | ||
1421 | case EM2880_BOARD_KWORLD_DVB_310U: | ||
1422 | case EM2870_BOARD_KWORLD_350U: | ||
1423 | case EM2881_BOARD_DNT_DA2_HYBRID: | ||
1424 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1425 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1426 | msleep(50); | ||
1427 | |||
1428 | /* NOTE: EM2881_DNT_DA2_HYBRID spend 140 msleep for digital | ||
1429 | and analog commands. If this commands doesn't work, | ||
1430 | add this timer. */ | ||
686 | 1431 | ||
1432 | /* Sets GPO/GPIO sequences for this device */ | ||
1433 | dev->analog_gpio = default_analog; | ||
1434 | dev->digital_gpio = default_digital; | ||
1435 | dev->tun_analog_gpio = default_callback; | ||
1436 | dev->tun_digital_gpio = default_callback; | ||
1437 | break; | ||
1438 | |||
1439 | case EM2880_BOARD_MSI_DIGIVOX_AD: | ||
1440 | case EM2880_BOARD_MSI_DIGIVOX_AD_II: | ||
1441 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1442 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1443 | msleep(50); | ||
1444 | |||
1445 | /* Sets GPO/GPIO sequences for this device */ | ||
1446 | dev->analog_gpio = em2880_msi_digivox_ad_analog; | ||
1447 | dev->digital_gpio = em2880_msi_digivox_ad_digital; | ||
1448 | dev->tun_analog_gpio = default_callback; | ||
1449 | dev->tun_digital_gpio = default_callback; | ||
1450 | break; | ||
1451 | |||
1452 | case EM2750_BOARD_UNKNOWN: | ||
1453 | case EM2750_BOARD_DLCW_130: | ||
1454 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x0a", 1); | ||
1455 | break; | ||
1456 | |||
1457 | case EM2861_BOARD_PLEXTOR_PX_TV100U: | ||
1458 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1459 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1460 | /* FIXME guess */ | ||
1461 | /* Turn on analog audio output */ | ||
1462 | em28xx_write_regs_req(dev, 0x00, 0x08, "\xfd", 1); | ||
1463 | break; | ||
1464 | |||
1465 | case EM2861_BOARD_KWORLD_PVRTV_300U: | ||
1466 | case EM2880_BOARD_KWORLD_DVB_305U: | ||
1467 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1468 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x4c", 1); | ||
1469 | msleep(10); | ||
1470 | em28xx_write_regs(dev, 0x08, "\x6d", 1); | ||
1471 | msleep(10); | ||
1472 | em28xx_write_regs(dev, 0x08, "\x7d", 1); | ||
1473 | msleep(10); | ||
1474 | break; | ||
1475 | |||
1476 | case EM2870_BOARD_KWORLD_355U: | ||
1477 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1478 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1479 | msleep(50); | ||
1480 | |||
1481 | /* Sets GPO/GPIO sequences for this device */ | ||
1482 | dev->digital_gpio = em2870_kworld_355u_digital; | ||
1483 | break; | ||
1484 | |||
1485 | case EM2870_BOARD_COMPRO_VIDEOMATE: | ||
1486 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1487 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1488 | /* TODO: someone can do some cleanup here... | ||
1489 | not everything's needed */ | ||
1490 | em28xx_write_regs(dev, 0x04, "\x00", 1); | ||
1491 | msleep(10); | ||
1492 | em28xx_write_regs(dev, 0x04, "\x01", 1); | ||
1493 | msleep(10); | ||
1494 | em28xx_write_regs(dev, 0x08, "\xfd", 1); | ||
1495 | mdelay(70); | ||
1496 | em28xx_write_regs(dev, 0x08, "\xfc", 1); | ||
1497 | mdelay(70); | ||
1498 | em28xx_write_regs(dev, 0x08, "\xdc", 1); | ||
1499 | mdelay(70); | ||
1500 | em28xx_write_regs(dev, 0x08, "\xfc", 1); | ||
1501 | mdelay(70); | ||
1502 | break; | ||
1503 | |||
1504 | case EM2870_BOARD_TERRATEC_XS_MT2060: | ||
1505 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1506 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1507 | /* this device needs some gpio writes to get the DVB-T | ||
1508 | demod work */ | ||
1509 | em28xx_write_regs(dev, 0x08, "\xfe", 1); | ||
1510 | mdelay(70); | ||
1511 | em28xx_write_regs(dev, 0x08, "\xde", 1); | ||
1512 | mdelay(70); | ||
1513 | dev->em28xx_write_regs(dev, 0x08, "\xfe", 1); | ||
1514 | mdelay(70); | ||
1515 | break; | ||
1516 | |||
1517 | case EM2870_BOARD_PINNACLE_PCTV_DVB: | ||
1518 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1519 | /* this device needs some gpio writes to get the | ||
1520 | DVB-T demod work */ | ||
1521 | em28xx_write_regs(dev, 0x08, "\xfe", 1); | ||
1522 | mdelay(70); | ||
1523 | em28xx_write_regs(dev, 0x08, "\xde", 1); | ||
1524 | mdelay(70); | ||
1525 | em28xx_write_regs(dev, 0x08, "\xfe", 1); | ||
1526 | mdelay(70); | ||
1527 | /* switch em2880 rc protocol */ | ||
1528 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x22", 1); | ||
1529 | /* should be added ir_codes here */ | ||
1530 | break; | ||
1531 | |||
1532 | case EM2820_BOARD_GADMEI_UTV310: | ||
1533 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1534 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1535 | /* Turn on analog audio output */ | ||
1536 | em28xx_write_regs_req(dev, 0x00, 0x08, "\xfd", 1); | ||
1537 | break; | ||
1538 | |||
1539 | case EM2860_BOARD_GADMEI_UTV330: | ||
1540 | /* Turn on IR */ | ||
1541 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x07", 1); | ||
1542 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1543 | /* should be added ir_codes here */ | ||
1544 | break; | ||
1545 | |||
1546 | case EM2820_BOARD_MSI_VOX_USB_2: | ||
1547 | em28xx_write_regs(dev, EM28XX_R0F_XCLK, "\x27", 1); | ||
1548 | em28xx_write_regs(dev, EM28XX_R06_I2C_CLK, "\x40", 1); | ||
1549 | /* enables audio for that device */ | ||
1550 | em28xx_write_regs_req(dev, 0x00, 0x08, "\xfd", 1); | ||
687 | break; | 1551 | break; |
688 | } | 1552 | } |
689 | 1553 | ||
@@ -927,11 +1791,21 @@ void em28xx_card_setup(struct em28xx *dev) | |||
927 | case EM2800_BOARD_UNKNOWN: | 1791 | case EM2800_BOARD_UNKNOWN: |
928 | if (!em28xx_hint_board(dev)) | 1792 | if (!em28xx_hint_board(dev)) |
929 | em28xx_set_model(dev); | 1793 | em28xx_set_model(dev); |
1794 | break; | ||
930 | } | 1795 | } |
931 | 1796 | ||
932 | if (dev->has_snapshot_button) | 1797 | if (dev->has_snapshot_button) |
933 | em28xx_register_snapshot_button(dev); | 1798 | em28xx_register_snapshot_button(dev); |
934 | 1799 | ||
1800 | if (dev->valid == EM28XX_BOARD_NOT_VALIDATED) { | ||
1801 | em28xx_errdev("\n\n"); | ||
1802 | em28xx_errdev("The support for this board weren't " | ||
1803 | "valid yet.\n"); | ||
1804 | em28xx_errdev("Please send a report of having this working\n"); | ||
1805 | em28xx_errdev("not to V4L mailing list (and/or to other " | ||
1806 | "addresses)\n\n"); | ||
1807 | } | ||
1808 | |||
935 | /* Allow override tuner type by a module parameter */ | 1809 | /* Allow override tuner type by a module parameter */ |
936 | if (tuner >= 0) | 1810 | if (tuner >= 0) |
937 | dev->tuner_type = tuner; | 1811 | dev->tuner_type = tuner; |
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h index 84bc0b902ac8..1b7364d664bf 100644 --- a/drivers/media/video/em28xx/em28xx.h +++ b/drivers/media/video/em28xx/em28xx.h | |||
@@ -60,11 +60,52 @@ | |||
60 | #define EM2860_BOARD_POINTNIX_INTRAORAL_CAMERA 19 | 60 | #define EM2860_BOARD_POINTNIX_INTRAORAL_CAMERA 19 |
61 | #define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 20 | 61 | #define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 20 |
62 | #define EM2800_BOARD_GRABBEEX_USB2800 21 | 62 | #define EM2800_BOARD_GRABBEEX_USB2800 21 |
63 | #define EM2750_BOARD_UNKNOWN 22 | ||
64 | #define EM2750_BOARD_DLCW_130 23 | ||
65 | #define EM2820_BOARD_DLINK_USB_TV 24 | ||
66 | #define EM2820_BOARD_GADMEI_UTV310 25 | ||
67 | #define EM2820_BOARD_HERCULES_SMART_TV_USB2 26 | ||
68 | #define EM2820_BOARD_PINNACLE_USB_2_FM1216ME 27 | ||
69 | #define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28 | ||
70 | #define EM2820_BOARD_PINNACLE_DVC_100 29 | ||
71 | #define EM2820_BOARD_VIDEOLOGY_20K14XUSB 30 | ||
72 | #define EM2821_BOARD_USBGEAR_VD204 31 | ||
73 | #define EM2821_BOARD_SUPERCOMP_USB_2 32 | ||
74 | #define EM2821_BOARD_PROLINK_PLAYTV_USB2 33 | ||
75 | #define EM2860_BOARD_TERRATEC_HYBRID_XS 34 | ||
76 | #define EM2860_BOARD_TYPHOON_DVD_MAKER 35 | ||
77 | #define EM2860_BOARD_NETGMBH_CAM 36 | ||
78 | #define EM2860_BOARD_GADMEI_UTV330 37 | ||
79 | #define EM2861_BOARD_YAKUMO_MOVIE_MIXER 38 | ||
80 | #define EM2861_BOARD_KWORLD_PVRTV_300U 39 | ||
81 | #define EM2861_BOARD_PLEXTOR_PX_TV100U 40 | ||
82 | #define EM2870_BOARD_KWORLD_350U 41 | ||
83 | #define EM2870_BOARD_KWORLD_355U 42 | ||
84 | #define EM2870_BOARD_TERRATEC_XS 43 | ||
85 | #define EM2870_BOARD_TERRATEC_XS_MT2060 44 | ||
86 | #define EM2870_BOARD_PINNACLE_PCTV_DVB 45 | ||
87 | #define EM2870_BOARD_COMPRO_VIDEOMATE 46 | ||
88 | #define EM2880_BOARD_KWORLD_DVB_305U 47 | ||
89 | #define EM2880_BOARD_KWORLD_DVB_310U 48 | ||
90 | #define EM2880_BOARD_MSI_DIGIVOX_AD 49 | ||
91 | #define EM2880_BOARD_MSI_DIGIVOX_AD_II 50 | ||
92 | #define EM2880_BOARD_TERRATEC_HYBRID_XS_FR 51 | ||
93 | #define EM2881_BOARD_DNT_DA2_HYBRID 52 | ||
94 | #define EM2881_BOARD_PINNACLE_HYBRID_PRO 53 | ||
95 | #define EM2882_BOARD_KWORLD_VS_DVBT 54 | ||
96 | #define EM2882_BOARD_TERRATEC_HYBRID_XS 55 | ||
97 | #define EM2882_BOARD_PINNACLE_HYBRID_PRO 56 | ||
98 | #define EM2883_BOARD_KWORLD_HYBRID_A316 57 | ||
99 | #define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950 58 | ||
63 | 100 | ||
64 | /* Limits minimum and default number of buffers */ | 101 | /* Limits minimum and default number of buffers */ |
65 | #define EM28XX_MIN_BUF 4 | 102 | #define EM28XX_MIN_BUF 4 |
66 | #define EM28XX_DEF_BUF 8 | 103 | #define EM28XX_DEF_BUF 8 |
67 | 104 | ||
105 | /* Params for validated field */ | ||
106 | #define EM28XX_BOARD_NOT_VALIDATED 1 | ||
107 | #define EM28XX_BOARD_VALIDATED 0 | ||
108 | |||
68 | /* maximum number of em28xx boards */ | 109 | /* maximum number of em28xx boards */ |
69 | #define EM28XX_MAXBOARDS 4 /*FIXME: should be bigger */ | 110 | #define EM28XX_MAXBOARDS 4 /*FIXME: should be bigger */ |
70 | 111 | ||
@@ -253,6 +294,7 @@ struct em28xx_board { | |||
253 | unsigned int max_range_640_480:1; | 294 | unsigned int max_range_640_480:1; |
254 | unsigned int has_dvb:1; | 295 | unsigned int has_dvb:1; |
255 | unsigned int has_snapshot_button:1; | 296 | unsigned int has_snapshot_button:1; |
297 | unsigned int valid:1; | ||
256 | 298 | ||
257 | enum em28xx_decoder decoder; | 299 | enum em28xx_decoder decoder; |
258 | 300 | ||
@@ -333,6 +375,7 @@ struct em28xx { | |||
333 | unsigned int max_range_640_480:1; | 375 | unsigned int max_range_640_480:1; |
334 | unsigned int has_dvb:1; | 376 | unsigned int has_dvb:1; |
335 | unsigned int has_snapshot_button:1; | 377 | unsigned int has_snapshot_button:1; |
378 | unsigned int valid:1; /* report for validated boards */ | ||
336 | 379 | ||
337 | /* Some older em28xx chips needs a waiting time after writing */ | 380 | /* Some older em28xx chips needs a waiting time after writing */ |
338 | unsigned int wait_after_write; | 381 | unsigned int wait_after_write; |
@@ -362,7 +405,7 @@ struct em28xx { | |||
362 | v4l2_std_id norm; /* selected tv norm */ | 405 | v4l2_std_id norm; /* selected tv norm */ |
363 | int ctl_freq; /* selected frequency */ | 406 | int ctl_freq; /* selected frequency */ |
364 | unsigned int ctl_input; /* selected input */ | 407 | unsigned int ctl_input; /* selected input */ |
365 | unsigned int ctl_ainput; /* slected audio input */ | 408 | unsigned int ctl_ainput;/* selected audio input */ |
366 | int mute; | 409 | int mute; |
367 | int volume; | 410 | int volume; |
368 | /* frame properties */ | 411 | /* frame properties */ |