aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@brturbo.com.br>2005-09-09 16:03:39 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-09 16:57:49 -0400
commit24a70fdce872d70171b1f49dcd1a7c3a4e8396b2 (patch)
treeb640622565ce6a49befd142ca6770d20caafea82 /drivers/media
parent793cf9e6a54c698e109a599c8b8e303658fcaae6 (diff)
[PATCH] v4l: BTTV updates and card additions
- Remove $Id CVS logs for V4L files - Added DVICO FusionHDTV 5 Lite card. - Added Acorp Y878F. - CodingStyle fixes. - Added tuner_addr to bttv cards structure. - linux/version.h replaced by linux/utsname.h on bttvp.h - kernel module for acquiring RDS data from a SAA6588. - Allow multiple open() and reading calls to /dev/radio on bttv-driver.c - added i2c address for lgdt330x. Signed-off-by: Hans J. Koch <koch@hjk-az.de> Signed-off-by: Michael Krufky <mkrufky@m1k.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/bttv-cards.c1175
-rw-r--r--drivers/media/video/bttv-driver.c48
-rw-r--r--drivers/media/video/bttv-gpio.c1
-rw-r--r--drivers/media/video/bttv-i2c.c2
-rw-r--r--drivers/media/video/bttv-if.c1
-rw-r--r--drivers/media/video/bttv-risc.c1
-rw-r--r--drivers/media/video/bttv-vbi.c1
-rw-r--r--drivers/media/video/bttv.h3
-rw-r--r--drivers/media/video/bttvp.h3
9 files changed, 721 insertions, 514 deletions
diff --git a/drivers/media/video/bttv-cards.c b/drivers/media/video/bttv-cards.c
index a97b9b958ed6..3cb398b7a028 100644
--- a/drivers/media/video/bttv-cards.c
+++ b/drivers/media/video/bttv-cards.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-cards.c,v 1.54 2005/07/19 18:26:46 mkrufky Exp $
3 2
4 bttv-cards.c 3 bttv-cards.c
5 4
@@ -169,10 +168,10 @@ static struct CARD {
169 { 0xd01810fc, BTTV_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" }, 168 { 0xd01810fc, BTTV_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" },
170 169
171 { 0x001211bd, BTTV_PINNACLE, "Pinnacle PCTV" }, 170 { 0x001211bd, BTTV_PINNACLE, "Pinnacle PCTV" },
172 // some cards ship with byteswapped IDs ... 171 /* some cards ship with byteswapped IDs ... */
173 { 0x1200bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" }, 172 { 0x1200bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" },
174 { 0xff00bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" }, 173 { 0xff00bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" },
175 // this seems to happen as well ... 174 /* this seems to happen as well ... */
176 { 0xff1211bd, BTTV_PINNACLE, "Pinnacle PCTV" }, 175 { 0xff1211bd, BTTV_PINNACLE, "Pinnacle PCTV" },
177 176
178 { 0x3000121a, BTTV_VOODOOTV_FM, "3Dfx VoodooTV FM/ VoodooTV 200" }, 177 { 0x3000121a, BTTV_VOODOOTV_FM, "3Dfx VoodooTV FM/ VoodooTV 200" },
@@ -200,12 +199,12 @@ static struct CARD {
200 199
201 { 0x1123153b, BTTV_TERRATVRADIO, "Terratec TV Radio+" }, 200 { 0x1123153b, BTTV_TERRATVRADIO, "Terratec TV Radio+" },
202 { 0x1127153b, BTTV_TERRATV, "Terratec TV+ (V1.05)" }, 201 { 0x1127153b, BTTV_TERRATV, "Terratec TV+ (V1.05)" },
203 // clashes with FlyVideo 202 /* clashes with FlyVideo
204 //{ 0x18521852, BTTV_TERRATV, "Terratec TV+ (V1.10)" }, 203 *{ 0x18521852, BTTV_TERRATV, "Terratec TV+ (V1.10)" }, */
205 { 0x1134153b, BTTV_TERRATVALUE, "Terratec TValue (LR102)" }, 204 { 0x1134153b, BTTV_TERRATVALUE, "Terratec TValue (LR102)" },
206 { 0x1135153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, // LR102 205 { 0x1135153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, /* LR102 */
207 { 0x5018153b, BTTV_TERRATVALUE, "Terratec TValue" }, // ?? 206 { 0x5018153b, BTTV_TERRATVALUE, "Terratec TValue" }, /* ?? */
208 { 0xff3b153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, // ?? 207 { 0xff3b153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, /* ?? */
209 208
210 { 0x400015b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" }, 209 { 0x400015b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
211 { 0x400a15b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" }, 210 { 0x400a15b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
@@ -287,10 +286,12 @@ static struct CARD {
287 { 0x01071805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" }, 286 { 0x01071805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
288 { 0x01081805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" }, 287 { 0x01081805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },
289 288
290 // likely broken, vendor id doesn't match the other magic views ... 289 { 0x15409511, BTTV_ACORP_Y878F, "Acorp Y878F" },
291 //{ 0xa0fca04f, BTTV_MAGICTVIEW063, "Guillemot Maxi TV Video 3" },
292 290
293 // DVB cards (using pci function .1 for mpeg data xfer) 291 /* likely broken, vendor id doesn't match the other magic views ...
292 * { 0xa0fca04f, BTTV_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
293
294 /* DVB cards (using pci function .1 for mpeg data xfer) */
294 { 0x01010071, BTTV_NEBULA_DIGITV, "Nebula Electronics DigiTV" }, 295 { 0x01010071, BTTV_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
295 { 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T 761" }, 296 { 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T 761" },
296 { 0x001c11bd, BTTV_PINNACLESAT, "Pinnacle PCTV Sat" }, 297 { 0x001c11bd, BTTV_PINNACLESAT, "Pinnacle PCTV Sat" },
@@ -299,6 +300,7 @@ static struct CARD {
299 { 0xfc00270f, BTTV_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" }, 300 { 0xfc00270f, BTTV_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" },
300 { 0x07711461, BTTV_AVDVBT_771, "AVermedia AverTV DVB-T 771" }, 301 { 0x07711461, BTTV_AVDVBT_771, "AVermedia AverTV DVB-T 771" },
301 { 0xdb1018ac, BTTV_DVICO_DVBT_LITE, "DVICO FusionHDTV DVB-T Lite" }, 302 { 0xdb1018ac, BTTV_DVICO_DVBT_LITE, "DVICO FusionHDTV DVB-T Lite" },
303 { 0xd50018ac, BTTV_DVICO_FUSIONHDTV_5_LITE, "DVICO FusionHDTV 5 Lite" },
302 304
303 { 0, -1, NULL } 305 { 0, -1, NULL }
304}; 306};
@@ -316,6 +318,7 @@ struct tvcard bttv_tvcards[] = {
316 .svhs = 2, 318 .svhs = 2,
317 .muxsel = { 2, 3, 1, 0}, 319 .muxsel = { 2, 3, 1, 0},
318 .tuner_type = -1, 320 .tuner_type = -1,
321 .tuner_addr = ADDR_UNSET,
319},{ 322},{
320 .name = "MIRO PCTV", 323 .name = "MIRO PCTV",
321 .video_inputs = 4, 324 .video_inputs = 4,
@@ -327,6 +330,7 @@ struct tvcard bttv_tvcards[] = {
327 .audiomux = { 2, 0, 0, 0, 10}, 330 .audiomux = { 2, 0, 0, 0, 10},
328 .needs_tvaudio = 1, 331 .needs_tvaudio = 1,
329 .tuner_type = -1, 332 .tuner_type = -1,
333 .tuner_addr = ADDR_UNSET,
330},{ 334},{
331 .name = "Hauppauge (bt848)", 335 .name = "Hauppauge (bt848)",
332 .video_inputs = 4, 336 .video_inputs = 4,
@@ -338,6 +342,7 @@ struct tvcard bttv_tvcards[] = {
338 .audiomux = { 0, 1, 2, 3, 4}, 342 .audiomux = { 0, 1, 2, 3, 4},
339 .needs_tvaudio = 1, 343 .needs_tvaudio = 1,
340 .tuner_type = -1, 344 .tuner_type = -1,
345 .tuner_addr = ADDR_UNSET,
341},{ 346},{
342 .name = "STB, Gateway P/N 6000699 (bt848)", 347 .name = "STB, Gateway P/N 6000699 (bt848)",
343 .video_inputs = 3, 348 .video_inputs = 3,
@@ -350,6 +355,7 @@ struct tvcard bttv_tvcards[] = {
350 .no_msp34xx = 1, 355 .no_msp34xx = 1,
351 .needs_tvaudio = 1, 356 .needs_tvaudio = 1,
352 .tuner_type = TUNER_PHILIPS_NTSC, 357 .tuner_type = TUNER_PHILIPS_NTSC,
358 .tuner_addr = ADDR_UNSET,
353 .pll = PLL_28, 359 .pll = PLL_28,
354 .has_radio = 1, 360 .has_radio = 1,
355},{ 361},{
@@ -365,6 +371,7 @@ struct tvcard bttv_tvcards[] = {
365 .audiomux = { 0 }, 371 .audiomux = { 0 },
366 .needs_tvaudio = 0, 372 .needs_tvaudio = 0,
367 .tuner_type = 4, 373 .tuner_type = 4,
374 .tuner_addr = ADDR_UNSET,
368},{ 375},{
369 .name = "Diamond DTV2000", 376 .name = "Diamond DTV2000",
370 .video_inputs = 4, 377 .video_inputs = 4,
@@ -376,6 +383,7 @@ struct tvcard bttv_tvcards[] = {
376 .audiomux = { 0, 1, 0, 1, 3}, 383 .audiomux = { 0, 1, 0, 1, 3},
377 .needs_tvaudio = 1, 384 .needs_tvaudio = 1,
378 .tuner_type = -1, 385 .tuner_type = -1,
386 .tuner_addr = ADDR_UNSET,
379},{ 387},{
380 .name = "AVerMedia TVPhone", 388 .name = "AVerMedia TVPhone",
381 .video_inputs = 3, 389 .video_inputs = 3,
@@ -388,6 +396,7 @@ struct tvcard bttv_tvcards[] = {
388 /* 0x04 for some cards ?? */ 396 /* 0x04 for some cards ?? */
389 .needs_tvaudio = 1, 397 .needs_tvaudio = 1,
390 .tuner_type = -1, 398 .tuner_type = -1,
399 .tuner_addr = ADDR_UNSET,
391 .audio_hook = avermedia_tvphone_audio, 400 .audio_hook = avermedia_tvphone_audio,
392 .has_remote = 1, 401 .has_remote = 1,
393},{ 402},{
@@ -401,6 +410,7 @@ struct tvcard bttv_tvcards[] = {
401 .audiomux = {0 }, 410 .audiomux = {0 },
402 .needs_tvaudio = 1, 411 .needs_tvaudio = 1,
403 .tuner_type = -1, 412 .tuner_type = -1,
413 .tuner_addr = ADDR_UNSET,
404},{ 414},{
405 415
406/* ---- card 0x08 ---------------------------------- */ 416/* ---- card 0x08 ---------------------------------- */
@@ -415,6 +425,7 @@ struct tvcard bttv_tvcards[] = {
415 .needs_tvaudio = 1, 425 .needs_tvaudio = 1,
416 .pll = PLL_28, 426 .pll = PLL_28,
417 .tuner_type = -1, 427 .tuner_type = -1,
428 .tuner_addr = ADDR_UNSET,
418},{ 429},{
419 .name = "IMS/IXmicro TurboTV", 430 .name = "IMS/IXmicro TurboTV",
420 .video_inputs = 3, 431 .video_inputs = 3,
@@ -427,6 +438,7 @@ struct tvcard bttv_tvcards[] = {
427 .needs_tvaudio = 0, 438 .needs_tvaudio = 0,
428 .pll = PLL_28, 439 .pll = PLL_28,
429 .tuner_type = TUNER_TEMIC_PAL, 440 .tuner_type = TUNER_TEMIC_PAL,
441 .tuner_addr = ADDR_UNSET,
430},{ 442},{
431 .name = "Hauppauge (bt878)", 443 .name = "Hauppauge (bt878)",
432 .video_inputs = 4, 444 .video_inputs = 4,
@@ -439,6 +451,7 @@ struct tvcard bttv_tvcards[] = {
439 .needs_tvaudio = 1, 451 .needs_tvaudio = 1,
440 .pll = PLL_28, 452 .pll = PLL_28,
441 .tuner_type = -1, 453 .tuner_type = -1,
454 .tuner_addr = ADDR_UNSET,
442},{ 455},{
443 .name = "MIRO PCTV pro", 456 .name = "MIRO PCTV pro",
444 .video_inputs = 3, 457 .video_inputs = 3,
@@ -450,6 +463,7 @@ struct tvcard bttv_tvcards[] = {
450 .audiomux = { 0x20001,0x10001, 0, 0,10}, 463 .audiomux = { 0x20001,0x10001, 0, 0,10},
451 .needs_tvaudio = 1, 464 .needs_tvaudio = 1,
452 .tuner_type = -1, 465 .tuner_type = -1,
466 .tuner_addr = ADDR_UNSET,
453},{ 467},{
454 468
455/* ---- card 0x0c ---------------------------------- */ 469/* ---- card 0x0c ---------------------------------- */
@@ -463,6 +477,7 @@ struct tvcard bttv_tvcards[] = {
463 .audiomux = { 13, 14, 11, 7, 0, 0}, 477 .audiomux = { 13, 14, 11, 7, 0, 0},
464 .needs_tvaudio = 1, 478 .needs_tvaudio = 1,
465 .tuner_type = -1, 479 .tuner_type = -1,
480 .tuner_addr = ADDR_UNSET,
466},{ 481},{
467 .name = "AVerMedia TVCapture 98", 482 .name = "AVerMedia TVCapture 98",
468 .video_inputs = 3, 483 .video_inputs = 3,
@@ -476,6 +491,7 @@ struct tvcard bttv_tvcards[] = {
476 .msp34xx_alt = 1, 491 .msp34xx_alt = 1,
477 .pll = PLL_28, 492 .pll = PLL_28,
478 .tuner_type = TUNER_PHILIPS_PAL, 493 .tuner_type = TUNER_PHILIPS_PAL,
494 .tuner_addr = ADDR_UNSET,
479 .audio_hook = avermedia_tv_stereo_audio, 495 .audio_hook = avermedia_tv_stereo_audio,
480},{ 496},{
481 .name = "Aimslab Video Highway Xtreme (VHX)", 497 .name = "Aimslab Video Highway Xtreme (VHX)",
@@ -489,6 +505,7 @@ struct tvcard bttv_tvcards[] = {
489 .needs_tvaudio = 1, 505 .needs_tvaudio = 1,
490 .pll = PLL_28, 506 .pll = PLL_28,
491 .tuner_type = -1, 507 .tuner_type = -1,
508 .tuner_addr = ADDR_UNSET,
492},{ 509},{
493 .name = "Zoltrix TV-Max", 510 .name = "Zoltrix TV-Max",
494 .video_inputs = 3, 511 .video_inputs = 3,
@@ -500,6 +517,7 @@ struct tvcard bttv_tvcards[] = {
500 .audiomux = {0 , 0, 1 , 0, 10}, 517 .audiomux = {0 , 0, 1 , 0, 10},
501 .needs_tvaudio = 1, 518 .needs_tvaudio = 1,
502 .tuner_type = -1, 519 .tuner_type = -1,
520 .tuner_addr = ADDR_UNSET,
503},{ 521},{
504 522
505/* ---- card 0x10 ---------------------------------- */ 523/* ---- card 0x10 ---------------------------------- */
@@ -510,7 +528,7 @@ struct tvcard bttv_tvcards[] = {
510 .svhs = 2, 528 .svhs = 2,
511 .gpiomask = 0x01fe00, 529 .gpiomask = 0x01fe00,
512 .muxsel = { 2, 3, 1, 1}, 530 .muxsel = { 2, 3, 1, 1},
513 // 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> 531 /* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
514 .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 }, 532 .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 },
515 .needs_tvaudio = 1, 533 .needs_tvaudio = 1,
516 .pll = PLL_28, 534 .pll = PLL_28,
@@ -526,6 +544,7 @@ struct tvcard bttv_tvcards[] = {
526 .audiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007}, 544 .audiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007},
527 .needs_tvaudio = 1, 545 .needs_tvaudio = 1,
528 .tuner_type = -1, 546 .tuner_type = -1,
547 .tuner_addr = ADDR_UNSET,
529 .audio_hook = winview_audio, 548 .audio_hook = winview_audio,
530 .has_radio = 1, 549 .has_radio = 1,
531},{ 550},{
@@ -539,6 +558,7 @@ struct tvcard bttv_tvcards[] = {
539 .audiomux = {1, 0, 0, 0, 0}, 558 .audiomux = {1, 0, 0, 0, 0},
540 .needs_tvaudio = 1, 559 .needs_tvaudio = 1,
541 .tuner_type = -1, 560 .tuner_type = -1,
561 .tuner_addr = ADDR_UNSET,
542},{ 562},{
543 .name = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)", 563 .name = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
544 .video_inputs = 4, 564 .video_inputs = 4,
@@ -550,6 +570,7 @@ struct tvcard bttv_tvcards[] = {
550 .audiomux = { 0 }, 570 .audiomux = { 0 },
551 .no_msp34xx = 1, 571 .no_msp34xx = 1,
552 .tuner_type = -1, 572 .tuner_type = -1,
573 .tuner_addr = ADDR_UNSET,
553},{ 574},{
554 575
555/* ---- card 0x14 ---------------------------------- */ 576/* ---- card 0x14 ---------------------------------- */
@@ -560,10 +581,11 @@ struct tvcard bttv_tvcards[] = {
560 .svhs = 2, 581 .svhs = 2,
561 .muxsel = {2, 3, 1, 1}, 582 .muxsel = {2, 3, 1, 1},
562 .tuner_type = -1, 583 .tuner_type = -1,
584 .tuner_addr = ADDR_UNSET,
563},{ 585},{
564 .name = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50", 586 .name = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
565 .video_inputs = 4, 587 .video_inputs = 4,
566 .audio_inputs = 2, // tuner, line in 588 .audio_inputs = 2, /* tuner, line in */
567 .tuner = 0, 589 .tuner = 0,
568 .svhs = 2, 590 .svhs = 2,
569 .gpiomask = 0x1800, 591 .gpiomask = 0x1800,
@@ -571,6 +593,7 @@ struct tvcard bttv_tvcards[] = {
571 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, 593 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
572 .pll = PLL_28, 594 .pll = PLL_28,
573 .tuner_type = TUNER_PHILIPS_PAL_I, 595 .tuner_type = TUNER_PHILIPS_PAL_I,
596 .tuner_addr = ADDR_UNSET,
574},{ 597},{
575 .name = "Askey CPH050/ Phoebe Tv Master + FM", 598 .name = "Askey CPH050/ Phoebe Tv Master + FM",
576 .video_inputs = 3, 599 .video_inputs = 3,
@@ -583,6 +606,7 @@ struct tvcard bttv_tvcards[] = {
583 .needs_tvaudio = 1, 606 .needs_tvaudio = 1,
584 .pll = PLL_28, 607 .pll = PLL_28,
585 .tuner_type = -1, 608 .tuner_type = -1,
609 .tuner_addr = ADDR_UNSET,
586},{ 610},{
587 .name = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878", 611 .name = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
588 .video_inputs = 3, 612 .video_inputs = 3,
@@ -591,11 +615,12 @@ struct tvcard bttv_tvcards[] = {
591 .svhs = -1, 615 .svhs = -1,
592 .gpiomask = 7, 616 .gpiomask = 7,
593 .muxsel = { 2, 3, -1 }, 617 .muxsel = { 2, 3, -1 },
594 .digital_mode = DIGITAL_MODE_CAMERA, 618 .digital_mode = DIGITAL_MODE_CAMERA,
595 .audiomux = { 0, 0, 0, 0, 0 }, 619 .audiomux = { 0, 0, 0, 0, 0 },
596 .no_msp34xx = 1, 620 .no_msp34xx = 1,
597 .pll = PLL_28, 621 .pll = PLL_28,
598 .tuner_type = TUNER_ALPS_TSBB5_PAL_I, 622 .tuner_type = TUNER_ALPS_TSBB5_PAL_I,
623 .tuner_addr = ADDR_UNSET,
599},{ 624},{
600 625
601/* ---- card 0x18 ---------------------------------- */ 626/* ---- card 0x18 ---------------------------------- */
@@ -610,6 +635,7 @@ struct tvcard bttv_tvcards[] = {
610 .needs_tvaudio = 1, 635 .needs_tvaudio = 1,
611 .pll = PLL_28, 636 .pll = PLL_28,
612 .tuner_type = -1, 637 .tuner_type = -1,
638 .tuner_addr = ADDR_UNSET,
613 .has_remote = 1, 639 .has_remote = 1,
614},{ 640},{
615 .name = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar", 641 .name = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
@@ -622,6 +648,7 @@ struct tvcard bttv_tvcards[] = {
622 .audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000}, 648 .audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000},
623 .needs_tvaudio = 0, 649 .needs_tvaudio = 0,
624 .tuner_type = TUNER_PHILIPS_PAL, 650 .tuner_type = TUNER_PHILIPS_PAL,
651 .tuner_addr = ADDR_UNSET,
625 .audio_hook = terratv_audio, 652 .audio_hook = terratv_audio,
626},{ 653},{
627 .name = "Hauppauge WinCam newer (bt878)", 654 .name = "Hauppauge WinCam newer (bt878)",
@@ -634,6 +661,7 @@ struct tvcard bttv_tvcards[] = {
634 .audiomux = { 0, 1, 2, 3, 4}, 661 .audiomux = { 0, 1, 2, 3, 4},
635 .needs_tvaudio = 1, 662 .needs_tvaudio = 1,
636 .tuner_type = -1, 663 .tuner_type = -1,
664 .tuner_addr = ADDR_UNSET,
637},{ 665},{
638 .name = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50", 666 .name = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
639 .video_inputs = 4, 667 .video_inputs = 4,
@@ -645,6 +673,7 @@ struct tvcard bttv_tvcards[] = {
645 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, 673 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
646 .pll = PLL_28, 674 .pll = PLL_28,
647 .tuner_type = TUNER_PHILIPS_SECAM, 675 .tuner_type = TUNER_PHILIPS_SECAM,
676 .tuner_addr = ADDR_UNSET,
648},{ 677},{
649 678
650/* ---- card 0x1c ---------------------------------- */ 679/* ---- card 0x1c ---------------------------------- */
@@ -658,37 +687,38 @@ struct tvcard bttv_tvcards[] = {
658 .audiomux = { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000}, 687 .audiomux = { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000},
659 .needs_tvaudio = 0, 688 .needs_tvaudio = 0,
660 .tuner_type = TUNER_PHILIPS_PAL, 689 .tuner_type = TUNER_PHILIPS_PAL,
690 .tuner_addr = ADDR_UNSET,
661 .audio_hook = terratv_audio, 691 .audio_hook = terratv_audio,
662 /* GPIO wiring: 692 /* GPIO wiring:
663 External 20 pin connector (for Active Radio Upgrade board) 693 External 20 pin connector (for Active Radio Upgrade board)
664 gpio00: i2c-sda 694 gpio00: i2c-sda
665 gpio01: i2c-scl 695 gpio01: i2c-scl
666 gpio02: om5610-data 696 gpio02: om5610-data
667 gpio03: om5610-clk 697 gpio03: om5610-clk
668 gpio04: om5610-wre 698 gpio04: om5610-wre
669 gpio05: om5610-stereo 699 gpio05: om5610-stereo
670 gpio06: rds6588-davn 700 gpio06: rds6588-davn
671 gpio07: Pin 7 n.c. 701 gpio07: Pin 7 n.c.
672 gpio08: nIOW 702 gpio08: nIOW
673 gpio09+10: nIOR, nSEL ?? (bt878) 703 gpio09+10: nIOR, nSEL ?? (bt878)
674 gpio09: nIOR (bt848) 704 gpio09: nIOR (bt848)
675 gpio10: nSEL (bt848) 705 gpio10: nSEL (bt848)
676 Sound Routing: 706 Sound Routing:
677 gpio16: u2-A0 (1st 4052bt) 707 gpio16: u2-A0 (1st 4052bt)
678 gpio17: u2-A1 708 gpio17: u2-A1
679 gpio18: u2-nEN 709 gpio18: u2-nEN
680 gpio19: u4-A0 (2nd 4052) 710 gpio19: u4-A0 (2nd 4052)
681 gpio20: u4-A1 711 gpio20: u4-A1
682 u4-nEN - GND 712 u4-nEN - GND
683 Btspy: 713 Btspy:
684 00000 : Cdrom (internal audio input) 714 00000 : Cdrom (internal audio input)
685 10000 : ext. Video audio input 715 10000 : ext. Video audio input
686 20000 : TV Mono 716 20000 : TV Mono
687 a0000 : TV Mono/2 717 a0000 : TV Mono/2
688 1a0000 : TV Stereo 718 1a0000 : TV Stereo
689 30000 : Radio 719 30000 : Radio
690 40000 : Mute 720 40000 : Mute
691 */ 721*/
692 722
693},{ 723},{
694 /* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */ 724 /* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
@@ -702,6 +732,7 @@ struct tvcard bttv_tvcards[] = {
702 .audiomux = { 0 }, 732 .audiomux = { 0 },
703 .needs_tvaudio = 1, 733 .needs_tvaudio = 1,
704 .tuner_type = -1, 734 .tuner_type = -1,
735 .tuner_addr = ADDR_UNSET,
705 .muxsel_hook = PXC200_muxsel, 736 .muxsel_hook = PXC200_muxsel,
706 737
707},{ 738},{
@@ -710,11 +741,12 @@ struct tvcard bttv_tvcards[] = {
710 .audio_inputs = 1, 741 .audio_inputs = 1,
711 .tuner = 0, 742 .tuner = 0,
712 .svhs = 2, 743 .svhs = 2,
713 .gpiomask = 0x1800, //0x8dfe00 744 .gpiomask = 0x1800, /* 0x8dfe00 */
714 .muxsel = { 2, 3, 1, 1}, 745 .muxsel = { 2, 3, 1, 1},
715 .audiomux = { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 }, 746 .audiomux = { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 },
716 .pll = PLL_28, 747 .pll = PLL_28,
717 .tuner_type = -1, 748 .tuner_type = -1,
749 .tuner_addr = ADDR_UNSET,
718},{ 750},{
719 .name = "Formac iProTV, Formac ProTV I (bt848)", 751 .name = "Formac iProTV, Formac ProTV I (bt848)",
720 .video_inputs = 4, 752 .video_inputs = 4,
@@ -726,6 +758,7 @@ struct tvcard bttv_tvcards[] = {
726 .audiomux = { 1, 0, 0, 0, 0 }, 758 .audiomux = { 1, 0, 0, 0, 0 },
727 .pll = PLL_28, 759 .pll = PLL_28,
728 .tuner_type = TUNER_PHILIPS_PAL, 760 .tuner_type = TUNER_PHILIPS_PAL,
761 .tuner_addr = ADDR_UNSET,
729},{ 762},{
730 763
731/* ---- card 0x20 ---------------------------------- */ 764/* ---- card 0x20 ---------------------------------- */
@@ -739,6 +772,7 @@ struct tvcard bttv_tvcards[] = {
739 .audiomux = { 0 }, 772 .audiomux = { 0 },
740 .needs_tvaudio = 0, 773 .needs_tvaudio = 0,
741 .tuner_type = 4, 774 .tuner_type = 4,
775 .tuner_addr = ADDR_UNSET,
742},{ 776},{
743 .name = "Terratec TerraTValue Version Bt878", 777 .name = "Terratec TerraTValue Version Bt878",
744 .video_inputs = 3, 778 .video_inputs = 3,
@@ -751,31 +785,33 @@ struct tvcard bttv_tvcards[] = {
751 .needs_tvaudio = 1, 785 .needs_tvaudio = 1,
752 .pll = PLL_28, 786 .pll = PLL_28,
753 .tuner_type = TUNER_PHILIPS_PAL, 787 .tuner_type = TUNER_PHILIPS_PAL,
788 .tuner_addr = ADDR_UNSET,
754},{ 789},{
755 .name = "Leadtek WinFast 2000/ WinFast 2000 XP", 790 .name = "Leadtek WinFast 2000/ WinFast 2000 XP",
756 .video_inputs = 4, 791 .video_inputs = 4,
757 .audio_inputs = 1, 792 .audio_inputs = 1,
758 .tuner = 0, 793 .tuner = 0,
759 .svhs = 2, 794 .svhs = 2,
760 .muxsel = { 2, 3, 1, 1, 0}, // TV, CVid, SVid, CVid over SVid connector 795 .muxsel = { 2, 3, 1, 1, 0}, /* TV, CVid, SVid, CVid over SVid connector */
761 /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */ 796 /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
762 .gpiomask = 0xb33000, 797 .gpiomask = 0xb33000,
763 .audiomux = { 0x122000,0x1000,0x0000,0x620000,0x800000 }, 798 .audiomux = { 0x122000,0x1000,0x0000,0x620000,0x800000 },
764 /* Audio Routing for "WinFast 2000 XP" (no tv stereo !) 799 /* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
765 gpio23 -- hef4052:nEnable (0x800000) 800 gpio23 -- hef4052:nEnable (0x800000)
766 gpio12 -- hef4052:A1 801 gpio12 -- hef4052:A1
767 gpio13 -- hef4052:A0 802 gpio13 -- hef4052:A0
768 0x0000: external audio 803 0x0000: external audio
769 0x1000: FM 804 0x1000: FM
770 0x2000: TV 805 0x2000: TV
771 0x3000: n.c. 806 0x3000: n.c.
772 Note: There exists another variant "Winfast 2000" with tv stereo !? 807 Note: There exists another variant "Winfast 2000" with tv stereo !?
773 Note: eeprom only contains FF and pci subsystem id 107d:6606 808 Note: eeprom only contains FF and pci subsystem id 107d:6606
774 */ 809 */
775 .needs_tvaudio = 0, 810 .needs_tvaudio = 0,
776 .pll = PLL_28, 811 .pll = PLL_28,
777 .has_radio = 1, 812 .has_radio = 1,
778 .tuner_type = 5, // default for now, gpio reads BFFF06 for Pal bg+dk 813 .tuner_type = 5, /* default for now, gpio reads BFFF06 for Pal bg+dk */
814 .tuner_addr = ADDR_UNSET,
779 .audio_hook = winfast2000_audio, 815 .audio_hook = winfast2000_audio,
780 .has_remote = 1, 816 .has_remote = 1,
781},{ 817},{
@@ -789,6 +825,7 @@ struct tvcard bttv_tvcards[] = {
789 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, 825 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
790 .pll = PLL_28, 826 .pll = PLL_28,
791 .tuner_type = -1, 827 .tuner_type = -1,
828 .tuner_addr = ADDR_UNSET,
792},{ 829},{
793 830
794/* ---- card 0x24 ---------------------------------- */ 831/* ---- card 0x24 ---------------------------------- */
@@ -802,6 +839,7 @@ struct tvcard bttv_tvcards[] = {
802 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, 839 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
803 .pll = PLL_28, 840 .pll = PLL_28,
804 .tuner_type = -1, 841 .tuner_type = -1,
842 .tuner_addr = ADDR_UNSET,
805 .has_radio = 1, 843 .has_radio = 1,
806},{ 844},{
807 .name = "Prolink PixelView PlayTV pro", 845 .name = "Prolink PixelView PlayTV pro",
@@ -815,6 +853,7 @@ struct tvcard bttv_tvcards[] = {
815 .no_msp34xx = 1, 853 .no_msp34xx = 1,
816 .pll = PLL_28, 854 .pll = PLL_28,
817 .tuner_type = -1, 855 .tuner_type = -1,
856 .tuner_addr = ADDR_UNSET,
818},{ 857},{
819 .name = "Askey CPH06X TView99", 858 .name = "Askey CPH06X TView99",
820 .video_inputs = 4, 859 .video_inputs = 4,
@@ -827,6 +866,7 @@ struct tvcard bttv_tvcards[] = {
827 .needs_tvaudio = 1, 866 .needs_tvaudio = 1,
828 .pll = PLL_28, 867 .pll = PLL_28,
829 .tuner_type = 1, 868 .tuner_type = 1,
869 .tuner_addr = ADDR_UNSET,
830 .has_remote = 1, 870 .has_remote = 1,
831},{ 871},{
832 .name = "Pinnacle PCTV Studio/Rave", 872 .name = "Pinnacle PCTV Studio/Rave",
@@ -840,6 +880,7 @@ struct tvcard bttv_tvcards[] = {
840 .needs_tvaudio = 0, 880 .needs_tvaudio = 0,
841 .pll = PLL_28, 881 .pll = PLL_28,
842 .tuner_type = -1, 882 .tuner_type = -1,
883 .tuner_addr = ADDR_UNSET,
843},{ 884},{
844 885
845/* ---- card 0x28 ---------------------------------- */ 886/* ---- card 0x28 ---------------------------------- */
@@ -854,6 +895,7 @@ struct tvcard bttv_tvcards[] = {
854 .no_msp34xx = 1, 895 .no_msp34xx = 1,
855 .needs_tvaudio = 1, 896 .needs_tvaudio = 1,
856 .tuner_type = TUNER_PHILIPS_NTSC, 897 .tuner_type = TUNER_PHILIPS_NTSC,
898 .tuner_addr = ADDR_UNSET,
857 .pll = PLL_28, 899 .pll = PLL_28,
858 .has_radio = 1, 900 .has_radio = 1,
859},{ 901},{
@@ -868,6 +910,7 @@ struct tvcard bttv_tvcards[] = {
868 .needs_tvaudio = 1, 910 .needs_tvaudio = 1,
869 .pll = PLL_28, 911 .pll = PLL_28,
870 .tuner_type = -1, 912 .tuner_type = -1,
913 .tuner_addr = ADDR_UNSET,
871 .has_radio = 1, 914 .has_radio = 1,
872 .audio_hook = avermedia_tvphone_audio, 915 .audio_hook = avermedia_tvphone_audio,
873},{ 916},{
@@ -883,6 +926,7 @@ struct tvcard bttv_tvcards[] = {
883 .no_msp34xx = 1, 926 .no_msp34xx = 1,
884 .pll = PLL_28, 927 .pll = PLL_28,
885 .tuner_type = 1, 928 .tuner_type = 1,
929 .tuner_addr = ADDR_UNSET,
886},{ 930},{
887 .name = "Little OnAir TV", 931 .name = "Little OnAir TV",
888 .video_inputs = 3, 932 .video_inputs = 3,
@@ -894,6 +938,7 @@ struct tvcard bttv_tvcards[] = {
894 .audiomux = {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc}, 938 .audiomux = {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc},
895 .no_msp34xx = 1, 939 .no_msp34xx = 1,
896 .tuner_type = -1, 940 .tuner_type = -1,
941 .tuner_addr = ADDR_UNSET,
897},{ 942},{
898 943
899/* ---- card 0x2c ---------------------------------- */ 944/* ---- card 0x2c ---------------------------------- */
@@ -908,6 +953,7 @@ struct tvcard bttv_tvcards[] = {
908 .no_msp34xx = 1, 953 .no_msp34xx = 1,
909 .pll = PLL_NONE, 954 .pll = PLL_NONE,
910 .tuner_type = -1, 955 .tuner_type = -1,
956 .tuner_addr = ADDR_UNSET,
911},{ 957},{
912 .name = "MATRIX-Vision MV-Delta 2", 958 .name = "MATRIX-Vision MV-Delta 2",
913 .video_inputs = 5, 959 .video_inputs = 5,
@@ -920,6 +966,7 @@ struct tvcard bttv_tvcards[] = {
920 .no_msp34xx = 1, 966 .no_msp34xx = 1,
921 .pll = PLL_28, 967 .pll = PLL_28,
922 .tuner_type = -1, 968 .tuner_type = -1,
969 .tuner_addr = ADDR_UNSET,
923},{ 970},{
924 .name = "Zoltrix Genie TV/FM", 971 .name = "Zoltrix Genie TV/FM",
925 .video_inputs = 3, 972 .video_inputs = 3,
@@ -932,6 +979,7 @@ struct tvcard bttv_tvcards[] = {
932 .no_msp34xx = 1, 979 .no_msp34xx = 1,
933 .pll = PLL_28, 980 .pll = PLL_28,
934 .tuner_type = 21, 981 .tuner_type = 21,
982 .tuner_addr = ADDR_UNSET,
935},{ 983},{
936 .name = "Terratec TV/Radio+", 984 .name = "Terratec TV/Radio+",
937 .video_inputs = 3, 985 .video_inputs = 3,
@@ -945,6 +993,7 @@ struct tvcard bttv_tvcards[] = {
945 .no_msp34xx = 1, 993 .no_msp34xx = 1,
946 .pll = PLL_35, 994 .pll = PLL_35,
947 .tuner_type = 1, 995 .tuner_type = 1,
996 .tuner_addr = ADDR_UNSET,
948 .has_radio = 1, 997 .has_radio = 1,
949},{ 998},{
950 999
@@ -960,6 +1009,7 @@ struct tvcard bttv_tvcards[] = {
960 .needs_tvaudio = 1, 1009 .needs_tvaudio = 1,
961 .pll = PLL_28, 1010 .pll = PLL_28,
962 .tuner_type = -1, 1011 .tuner_type = -1,
1012 .tuner_addr = ADDR_UNSET,
963},{ 1013},{
964 .name = "IODATA GV-BCTV3/PCI", 1014 .name = "IODATA GV-BCTV3/PCI",
965 .video_inputs = 3, 1015 .video_inputs = 3,
@@ -972,6 +1022,7 @@ struct tvcard bttv_tvcards[] = {
972 .no_msp34xx = 1, 1022 .no_msp34xx = 1,
973 .pll = PLL_28, 1023 .pll = PLL_28,
974 .tuner_type = TUNER_ALPS_TSHC6_NTSC, 1024 .tuner_type = TUNER_ALPS_TSHC6_NTSC,
1025 .tuner_addr = ADDR_UNSET,
975 .audio_hook = gvbctv3pci_audio, 1026 .audio_hook = gvbctv3pci_audio,
976},{ 1027},{
977 .name = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP", 1028 .name = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
@@ -986,6 +1037,7 @@ struct tvcard bttv_tvcards[] = {
986 .no_msp34xx = 1, 1037 .no_msp34xx = 1,
987 .pll = PLL_28, 1038 .pll = PLL_28,
988 .tuner_type = TUNER_PHILIPS_PAL_I, 1039 .tuner_type = TUNER_PHILIPS_PAL_I,
1040 .tuner_addr = ADDR_UNSET,
989 .has_remote = 1, 1041 .has_remote = 1,
990 /* GPIO wiring: (different from Rev.4C !) 1042 /* GPIO wiring: (different from Rev.4C !)
991 GPIO17: U4.A0 (first hef4052bt) 1043 GPIO17: U4.A0 (first hef4052bt)
@@ -994,8 +1046,8 @@ struct tvcard bttv_tvcards[] = {
994 GPIO21: U4.nEN 1046 GPIO21: U4.nEN
995 GPIO22: BT832 Reset Line 1047 GPIO22: BT832 Reset Line
996 GPIO23: A5,A0, U5,nEN 1048 GPIO23: A5,A0, U5,nEN
997 Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22 1049 Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
998 */ 1050 */
999},{ 1051},{
1000 .name = "Eagle Wireless Capricorn2 (bt878A)", 1052 .name = "Eagle Wireless Capricorn2 (bt878A)",
1001 .video_inputs = 4, 1053 .video_inputs = 4,
@@ -1007,6 +1059,7 @@ struct tvcard bttv_tvcards[] = {
1007 .audiomux = { 0, 1, 2, 3, 4}, 1059 .audiomux = { 0, 1, 2, 3, 4},
1008 .pll = PLL_28, 1060 .pll = PLL_28,
1009 .tuner_type = -1 /* TUNER_ALPS_TMDH2_NTSC */, 1061 .tuner_type = -1 /* TUNER_ALPS_TMDH2_NTSC */,
1062 .tuner_addr = ADDR_UNSET,
1010},{ 1063},{
1011 1064
1012/* ---- card 0x34 ---------------------------------- */ 1065/* ---- card 0x34 ---------------------------------- */
@@ -1020,20 +1073,21 @@ struct tvcard bttv_tvcards[] = {
1020 .muxsel = { 2, 3, 1, 1}, 1073 .muxsel = { 2, 3, 1, 1},
1021 .audiomux = { 1, 0xd0001, 0, 0, 10}, 1074 .audiomux = { 1, 0xd0001, 0, 0, 10},
1022 /* sound path (5 sources): 1075 /* sound path (5 sources):
1023 MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable) 1076 MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
1024 0= ext. Audio IN 1077 0= ext. Audio IN
1025 1= from MUX2 1078 1= from MUX2
1026 2= Mono TV sound from Tuner 1079 2= Mono TV sound from Tuner
1027 3= not connected 1080 3= not connected
1028 MUX2 (mask 0x30000): 1081 MUX2 (mask 0x30000):
1029 0,2,3= from MSP34xx 1082 0,2,3= from MSP34xx
1030 1= FM stereo Radio from Tuner */ 1083 1= FM stereo Radio from Tuner */
1031 .needs_tvaudio = 0, 1084 .needs_tvaudio = 0,
1032 .pll = PLL_28, 1085 .pll = PLL_28,
1033 .tuner_type = -1, 1086 .tuner_type = -1,
1087 .tuner_addr = ADDR_UNSET,
1034},{ 1088},{
1035 /* Claas Langbehn <claas@bigfoot.com>, 1089 /* Claas Langbehn <claas@bigfoot.com>,
1036 Sven Grothklags <sven@upb.de> */ 1090 Sven Grothklags <sven@upb.de> */
1037 .name = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS", 1091 .name = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
1038 .video_inputs = 4, 1092 .video_inputs = 4,
1039 .audio_inputs = 3, 1093 .audio_inputs = 3,
@@ -1045,10 +1099,11 @@ struct tvcard bttv_tvcards[] = {
1045 .needs_tvaudio = 1, 1099 .needs_tvaudio = 1,
1046 .pll = PLL_28, 1100 .pll = PLL_28,
1047 .tuner_type = TUNER_PHILIPS_PAL, 1101 .tuner_type = TUNER_PHILIPS_PAL,
1102 .tuner_addr = ADDR_UNSET,
1048 .has_radio = 1, 1103 .has_radio = 1,
1049},{ 1104},{
1050 /* Tim Röstermundt <rosterm@uni-muenster.de> 1105 /* Tim Röstermundt <rosterm@uni-muenster.de>
1051 in de.comp.os.unix.linux.hardware: 1106 in de.comp.os.unix.linux.hardware:
1052 options bttv card=0 pll=1 radio=1 gpiomask=0x18e0 1107 options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
1053 audiomux=0x44c71f,0x44d71f,0,0x44d71f,0x44dfff 1108 audiomux=0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
1054 options tuner type=5 */ 1109 options tuner type=5 */
@@ -1060,15 +1115,16 @@ struct tvcard bttv_tvcards[] = {
1060 .gpiomask = 0x18e0, 1115 .gpiomask = 0x18e0,
1061 .muxsel = { 2, 3, 1, 1}, 1116 .muxsel = { 2, 3, 1, 1},
1062 .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x18e0 }, 1117 .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x18e0 },
1063 /* For cards with tda9820/tda9821: 1118 /* For cards with tda9820/tda9821:
1064 0x0000: Tuner normal stereo 1119 0x0000: Tuner normal stereo
1065 0x0080: Tuner A2 SAP (second audio program = Zweikanalton) 1120 0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
1066 0x0880: Tuner A2 stereo */ 1121 0x0880: Tuner A2 stereo */
1067 .pll = PLL_28, 1122 .pll = PLL_28,
1068 .tuner_type = -1, 1123 .tuner_type = -1,
1124 .tuner_addr = ADDR_UNSET,
1069},{ 1125},{
1070 /* Miguel Angel Alvarez <maacruz@navegalia.com> 1126 /* Miguel Angel Alvarez <maacruz@navegalia.com>
1071 old Easy TV BT848 version (model CPH031) */ 1127 old Easy TV BT848 version (model CPH031) */
1072 .name = "Askey CPH031/ BESTBUY Easy TV", 1128 .name = "Askey CPH031/ BESTBUY Easy TV",
1073 .video_inputs = 4, 1129 .video_inputs = 4,
1074 .audio_inputs = 1, 1130 .audio_inputs = 1,
@@ -1080,6 +1136,7 @@ struct tvcard bttv_tvcards[] = {
1080 .needs_tvaudio = 0, 1136 .needs_tvaudio = 0,
1081 .pll = PLL_28, 1137 .pll = PLL_28,
1082 .tuner_type = TUNER_TEMIC_PAL, 1138 .tuner_type = TUNER_TEMIC_PAL,
1139 .tuner_addr = ADDR_UNSET,
1083},{ 1140},{
1084 1141
1085/* ---- card 0x38 ---------------------------------- */ 1142/* ---- card 0x38 ---------------------------------- */
@@ -1094,10 +1151,11 @@ struct tvcard bttv_tvcards[] = {
1094 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, 1151 .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
1095 .pll = PLL_28, 1152 .pll = PLL_28,
1096 .tuner_type = 5, 1153 .tuner_type = 5,
1154 .tuner_addr = ADDR_UNSET,
1097},{ 1155},{
1098 /* This is the ultimate cheapo capture card 1156 /* This is the ultimate cheapo capture card
1099 * just a BT848A on a small PCB! 1157 * just a BT848A on a small PCB!
1100 * Steve Hosgood <steve@equiinet.com> */ 1158 * Steve Hosgood <steve@equiinet.com> */
1101 .name = "GrandTec 'Grand Video Capture' (Bt848)", 1159 .name = "GrandTec 'Grand Video Capture' (Bt848)",
1102 .video_inputs = 2, 1160 .video_inputs = 2,
1103 .audio_inputs = 0, 1161 .audio_inputs = 0,
@@ -1110,19 +1168,21 @@ struct tvcard bttv_tvcards[] = {
1110 .no_msp34xx = 1, 1168 .no_msp34xx = 1,
1111 .pll = PLL_35, 1169 .pll = PLL_35,
1112 .tuner_type = -1, 1170 .tuner_type = -1,
1171 .tuner_addr = ADDR_UNSET,
1113},{ 1172},{
1114 /* Daniel Herrington <daniel.herrington@home.com> */ 1173 /* Daniel Herrington <daniel.herrington@home.com> */
1115 .name = "Askey CPH060/ Phoebe TV Master Only (No FM)", 1174 .name = "Askey CPH060/ Phoebe TV Master Only (No FM)",
1116 .video_inputs = 3, 1175 .video_inputs = 3,
1117 .audio_inputs = 1, 1176 .audio_inputs = 1,
1118 .tuner = 0, 1177 .tuner = 0,
1119 .svhs = 2, 1178 .svhs = 2,
1120 .gpiomask = 0xe00, 1179 .gpiomask = 0xe00,
1121 .muxsel = { 2, 3, 1, 1}, 1180 .muxsel = { 2, 3, 1, 1},
1122 .audiomux = { 0x400, 0x400, 0x400, 0x400, 0x800, 0x400 }, 1181 .audiomux = { 0x400, 0x400, 0x400, 0x400, 0x800, 0x400 },
1123 .needs_tvaudio = 1, 1182 .needs_tvaudio = 1,
1124 .pll = PLL_28, 1183 .pll = PLL_28,
1125 .tuner_type = TUNER_TEMIC_4036FY5_NTSC, 1184 .tuner_type = TUNER_TEMIC_4036FY5_NTSC,
1185 .tuner_addr = ADDR_UNSET,
1126},{ 1186},{
1127 /* Matti Mottus <mottus@physic.ut.ee> */ 1187 /* Matti Mottus <mottus@physic.ut.ee> */
1128 .name = "Askey CPH03x TV Capturer", 1188 .name = "Askey CPH03x TV Capturer",
@@ -1130,11 +1190,12 @@ struct tvcard bttv_tvcards[] = {
1130 .audio_inputs = 1, 1190 .audio_inputs = 1,
1131 .tuner = 0, 1191 .tuner = 0,
1132 .svhs = 2, 1192 .svhs = 2,
1133 .gpiomask = 0x03000F, 1193 .gpiomask = 0x03000F,
1134 .muxsel = { 2, 3, 1, 0}, 1194 .muxsel = { 2, 3, 1, 0},
1135 .audiomux = { 2,0,0,0,1 }, 1195 .audiomux = { 2,0,0,0,1 },
1136 .pll = PLL_28, 1196 .pll = PLL_28,
1137 .tuner_type = 0, 1197 .tuner_type = 0,
1198 .tuner_addr = ADDR_UNSET,
1138},{ 1199},{
1139 1200
1140/* ---- card 0x3c ---------------------------------- */ 1201/* ---- card 0x3c ---------------------------------- */
@@ -1149,7 +1210,7 @@ struct tvcard bttv_tvcards[] = {
1149 .audiomux = { 2, 0, 0, 1, 8}, 1210 .audiomux = { 2, 0, 0, 1, 8},
1150 .pll = PLL_35, 1211 .pll = PLL_35,
1151 .tuner_type = TUNER_TEMIC_PAL, 1212 .tuner_type = TUNER_TEMIC_PAL,
1152 1213 .tuner_addr = ADDR_UNSET,
1153},{ 1214},{
1154 /* Adrian Cox <adrian@humboldt.co.uk */ 1215 /* Adrian Cox <adrian@humboldt.co.uk */
1155 .name = "AG Electronics GMV1", 1216 .name = "AG Electronics GMV1",
@@ -1164,10 +1225,11 @@ struct tvcard bttv_tvcards[] = {
1164 .needs_tvaudio = 0, 1225 .needs_tvaudio = 0,
1165 .pll = PLL_28, 1226 .pll = PLL_28,
1166 .tuner_type = -1, 1227 .tuner_type = -1,
1228 .tuner_addr = ADDR_UNSET,
1167},{ 1229},{
1168 /* Miguel Angel Alvarez <maacruz@navegalia.com> 1230 /* Miguel Angel Alvarez <maacruz@navegalia.com>
1169 new Easy TV BT878 version (model CPH061) 1231 new Easy TV BT878 version (model CPH061)
1170 special thanks to Informatica Mieres for providing the card */ 1232 special thanks to Informatica Mieres for providing the card */
1171 .name = "Askey CPH061/ BESTBUY Easy TV (bt878)", 1233 .name = "Askey CPH061/ BESTBUY Easy TV (bt878)",
1172 .video_inputs = 3, 1234 .video_inputs = 3,
1173 .audio_inputs = 2, 1235 .audio_inputs = 2,
@@ -1179,6 +1241,7 @@ struct tvcard bttv_tvcards[] = {
1179 .needs_tvaudio = 0, 1241 .needs_tvaudio = 0,
1180 .pll = PLL_28, 1242 .pll = PLL_28,
1181 .tuner_type = TUNER_PHILIPS_PAL, 1243 .tuner_type = TUNER_PHILIPS_PAL,
1244 .tuner_addr = ADDR_UNSET,
1182},{ 1245},{
1183 /* Lukas Gebauer <geby@volny.cz> */ 1246 /* Lukas Gebauer <geby@volny.cz> */
1184 .name = "ATI TV-Wonder", 1247 .name = "ATI TV-Wonder",
@@ -1191,6 +1254,7 @@ struct tvcard bttv_tvcards[] = {
1191 .audiomux = { 0xbffe, 0, 0xbfff, 0, 0xbffe}, 1254 .audiomux = { 0xbffe, 0, 0xbfff, 0, 0xbffe},
1192 .pll = PLL_28, 1255 .pll = PLL_28,
1193 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, 1256 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
1257 .tuner_addr = ADDR_UNSET,
1194},{ 1258},{
1195 1259
1196/* ---- card 0x40 ---------------------------------- */ 1260/* ---- card 0x40 ---------------------------------- */
@@ -1206,6 +1270,7 @@ struct tvcard bttv_tvcards[] = {
1206 .no_msp34xx = 1, 1270 .no_msp34xx = 1,
1207 .pll = PLL_28, 1271 .pll = PLL_28,
1208 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, 1272 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
1273 .tuner_addr = ADDR_UNSET,
1209},{ 1274},{
1210 /* DeeJay <deejay@westel900.net (2000S) */ 1275 /* DeeJay <deejay@westel900.net (2000S) */
1211 .name = "Lifeview FlyVideo 2000S LR90", 1276 .name = "Lifeview FlyVideo 2000S LR90",
@@ -1216,7 +1281,7 @@ struct tvcard bttv_tvcards[] = {
1216 .gpiomask = 0x18e0, 1281 .gpiomask = 0x18e0,
1217 .muxsel = { 2, 3, 0, 1}, 1282 .muxsel = { 2, 3, 0, 1},
1218 /* Radio changed from 1e80 to 0x800 to make 1283 /* Radio changed from 1e80 to 0x800 to make
1219 FlyVideo2000S in .hu happy (gm)*/ 1284 FlyVideo2000S in .hu happy (gm)*/
1220 /* -dk-???: set mute=0x1800 for tda9874h daughterboard */ 1285 /* -dk-???: set mute=0x1800 for tda9874h daughterboard */
1221 .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x1800, 0x1080 }, 1286 .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x1800, 0x1080 },
1222 .audio_hook = fv2000s_audio, 1287 .audio_hook = fv2000s_audio,
@@ -1225,6 +1290,7 @@ struct tvcard bttv_tvcards[] = {
1225 .needs_tvaudio = 1, 1290 .needs_tvaudio = 1,
1226 .pll = PLL_28, 1291 .pll = PLL_28,
1227 .tuner_type = 5, 1292 .tuner_type = 5,
1293 .tuner_addr = ADDR_UNSET,
1228},{ 1294},{
1229 .name = "Terratec TValueRadio", 1295 .name = "Terratec TValueRadio",
1230 .video_inputs = 3, 1296 .video_inputs = 3,
@@ -1237,6 +1303,7 @@ struct tvcard bttv_tvcards[] = {
1237 .needs_tvaudio = 1, 1303 .needs_tvaudio = 1,
1238 .pll = PLL_28, 1304 .pll = PLL_28,
1239 .tuner_type = TUNER_PHILIPS_PAL, 1305 .tuner_type = TUNER_PHILIPS_PAL,
1306 .tuner_addr = ADDR_UNSET,
1240 .has_radio = 1, 1307 .has_radio = 1,
1241},{ 1308},{
1242 /* TANAKA Kei <peg00625@nifty.com> */ 1309 /* TANAKA Kei <peg00625@nifty.com> */
@@ -1251,25 +1318,27 @@ struct tvcard bttv_tvcards[] = {
1251 .no_msp34xx = 1, 1318 .no_msp34xx = 1,
1252 .pll = PLL_28, 1319 .pll = PLL_28,
1253 .tuner_type = TUNER_SHARP_2U5JF5540_NTSC, 1320 .tuner_type = TUNER_SHARP_2U5JF5540_NTSC,
1321 .tuner_addr = ADDR_UNSET,
1254 .audio_hook = gvbctv3pci_audio, 1322 .audio_hook = gvbctv3pci_audio,
1255},{ 1323},{
1256 1324
1257/* ---- card 0x44 ---------------------------------- */ 1325/* ---- card 0x44 ---------------------------------- */
1258 .name = "3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA)", 1326 .name = "3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA)",
1259 // try "insmod msp3400 simple=0" if you have 1327 /* try "insmod msp3400 simple=0" if you have
1260 // sound problems with this card. 1328 * sound problems with this card. */
1261 .video_inputs = 4, 1329 .video_inputs = 4,
1262 .audio_inputs = 1, 1330 .audio_inputs = 1,
1263 .tuner = 0, 1331 .tuner = 0,
1264 .svhs = -1, 1332 .svhs = -1,
1265 .gpiomask = 0x4f8a00, 1333 .gpiomask = 0x4f8a00,
1266 // 0x100000: 1=MSP enabled (0=disable again) 1334 /* 0x100000: 1=MSP enabled (0=disable again)
1267 // 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) 1335 * 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
1268 .audiomux = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff}, 1336 .audiomux = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff},
1269 // tvtuner, radio, external,internal, mute, stereo 1337 /* tvtuner, radio, external,internal, mute, stereo
1270 /* tuner, Composit, SVid, Composit-on-Svid-adapter*/ 1338 * tuner, Composit, SVid, Composit-on-Svid-adapter */
1271 .muxsel = { 2, 3 ,0 ,1}, 1339 .muxsel = { 2, 3 ,0 ,1},
1272 .tuner_type = TUNER_MT2032, 1340 .tuner_type = TUNER_MT2032,
1341 .tuner_addr = ADDR_UNSET,
1273 .pll = PLL_28, 1342 .pll = PLL_28,
1274 .has_radio = 1, 1343 .has_radio = 1,
1275},{ 1344},{
@@ -1279,22 +1348,24 @@ struct tvcard bttv_tvcards[] = {
1279 .audio_inputs = 0, 1348 .audio_inputs = 0,
1280 .tuner = -1, 1349 .tuner = -1,
1281 .tuner_type = -1, 1350 .tuner_type = -1,
1351 .tuner_addr = ADDR_UNSET,
1282 .pll = PLL_28, 1352 .pll = PLL_28,
1283 .muxsel = { 2 }, 1353 .muxsel = { 2 },
1284 .gpiomask = 0 1354 .gpiomask = 0
1285},{ 1355},{
1286 /* Tomasz Pyra <hellfire@sedez.iq.pl> */ 1356 /* Tomasz Pyra <hellfire@sedez.iq.pl> */
1287 .name = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)", 1357 .name = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
1288 .video_inputs = 3, 1358 .video_inputs = 3,
1289 .audio_inputs = 4, 1359 .audio_inputs = 4,
1290 .tuner = 0, 1360 .tuner = 0,
1291 .svhs = 2, 1361 .svhs = 2,
1292 .gpiomask = 15, 1362 .gpiomask = 15,
1293 .muxsel = { 2, 3, 1, 1}, 1363 .muxsel = { 2, 3, 1, 1},
1294 .audiomux = { 0, 0, 11, 7, 13, 0}, // TV and Radio with same GPIO ! 1364 .audiomux = { 0, 0, 11, 7, 13, 0}, /* TV and Radio with same GPIO ! */
1295 .needs_tvaudio = 1, 1365 .needs_tvaudio = 1,
1296 .pll = PLL_28, 1366 .pll = PLL_28,
1297 .tuner_type = 25, 1367 .tuner_type = 25,
1368 .tuner_addr = ADDR_UNSET,
1298 .has_remote = 1, 1369 .has_remote = 1,
1299 /* GPIO wiring: 1370 /* GPIO wiring:
1300 GPIO0: U4.A0 (hef4052bt) 1371 GPIO0: U4.A0 (hef4052bt)
@@ -1302,16 +1373,18 @@ struct tvcard bttv_tvcards[] = {
1302 GPIO2: U4.A1 (second hef4052bt) 1373 GPIO2: U4.A1 (second hef4052bt)
1303 GPIO3: U4.nEN, U5.A0, A5.nEN 1374 GPIO3: U4.nEN, U5.A0, A5.nEN
1304 GPIO8-15: vrd866b ? 1375 GPIO8-15: vrd866b ?
1305 */ 1376 */
1306},{ 1377},{
1307 .name = "Lifeview FlyVideo 98EZ (capture only) LR51", 1378 .name = "Lifeview FlyVideo 98EZ (capture only) LR51",
1308 .video_inputs = 4, 1379 .video_inputs = 4,
1309 .audio_inputs = 0, 1380 .audio_inputs = 0,
1310 .tuner = -1, 1381 .tuner = -1,
1311 .svhs = 2, 1382 .svhs = 2,
1312 .muxsel = { 2, 3, 1, 1}, // AV1, AV2, SVHS, CVid adapter on SVHS 1383 .muxsel = { 2, 3, 1, 1}, /* AV1, AV2, SVHS, CVid adapter on SVHS */
1313 .pll = PLL_28, 1384 .pll = PLL_28,
1314 .no_msp34xx = 1, 1385 .no_msp34xx = 1,
1386 .tuner_type = UNSET,
1387 .tuner_addr = ADDR_UNSET,
1315},{ 1388},{
1316 1389
1317/* ---- card 0x48 ---------------------------------- */ 1390/* ---- card 0x48 ---------------------------------- */
@@ -1329,8 +1402,9 @@ struct tvcard bttv_tvcards[] = {
1329 .no_tda9875 = 1, 1402 .no_tda9875 = 1,
1330 .pll = PLL_28, 1403 .pll = PLL_28,
1331 .tuner_type = 5, 1404 .tuner_type = 5,
1332 .audio_hook = pvbt878p9b_audio, // Note: not all cards have stereo 1405 .tuner_addr = ADDR_UNSET,
1333 .has_radio = 1, // Note: not all cards have radio 1406 .audio_hook = pvbt878p9b_audio, /* Note: not all cards have stereo */
1407 .has_radio = 1, /* Note: not all cards have radio */
1334 .has_remote = 1, 1408 .has_remote = 1,
1335 /* GPIO wiring: 1409 /* GPIO wiring:
1336 GPIO0: A0 hef4052 1410 GPIO0: A0 hef4052
@@ -1338,7 +1412,7 @@ struct tvcard bttv_tvcards[] = {
1338 GPIO3: nEN hef4052 1412 GPIO3: nEN hef4052
1339 GPIO8-15: vrd866b 1413 GPIO8-15: vrd866b
1340 GPIO20,22,23: R30,R29,R28 1414 GPIO20,22,23: R30,R29,R28
1341 */ 1415 */
1342},{ 1416},{
1343 /* Clay Kunz <ckunz@mail.arc.nasa.gov> */ 1417 /* Clay Kunz <ckunz@mail.arc.nasa.gov> */
1344 /* you must jumper JP5 for the card to work */ 1418 /* you must jumper JP5 for the card to work */
@@ -1352,6 +1426,7 @@ struct tvcard bttv_tvcards[] = {
1352 .audiomux = { 0 }, 1426 .audiomux = { 0 },
1353 .needs_tvaudio = 0, 1427 .needs_tvaudio = 0,
1354 .tuner_type = -1, 1428 .tuner_type = -1,
1429 .tuner_addr = ADDR_UNSET,
1355},{ 1430},{
1356 /* Miguel Freitas <miguel@cetuc.puc-rio.br> */ 1431 /* Miguel Freitas <miguel@cetuc.puc-rio.br> */
1357 .name = "RemoteVision MX (RV605)", 1432 .name = "RemoteVision MX (RV605)",
@@ -1362,71 +1437,78 @@ struct tvcard bttv_tvcards[] = {
1362 .gpiomask = 0x00, 1437 .gpiomask = 0x00,
1363 .gpiomask2 = 0x07ff, 1438 .gpiomask2 = 0x07ff,
1364 .muxsel = { 0x33, 0x13, 0x23, 0x43, 0xf3, 0x73, 0xe3, 0x03, 1439 .muxsel = { 0x33, 0x13, 0x23, 0x43, 0xf3, 0x73, 0xe3, 0x03,
1365 0xd3, 0xb3, 0xc3, 0x63, 0x93, 0x53, 0x83, 0xa3 }, 1440 0xd3, 0xb3, 0xc3, 0x63, 0x93, 0x53, 0x83, 0xa3 },
1366 .no_msp34xx = 1, 1441 .no_msp34xx = 1,
1367 .no_tda9875 = 1, 1442 .no_tda9875 = 1,
1368 .tuner_type = -1, 1443 .tuner_type = -1,
1444 .tuner_addr = ADDR_UNSET,
1369 .muxsel_hook = rv605_muxsel, 1445 .muxsel_hook = rv605_muxsel,
1370},{ 1446},{
1371 .name = "Powercolor MTV878/ MTV878R/ MTV878F", 1447 .name = "Powercolor MTV878/ MTV878R/ MTV878F",
1372 .video_inputs = 3, 1448 .video_inputs = 3,
1373 .audio_inputs = 2, 1449 .audio_inputs = 2,
1374 .tuner = 0, 1450 .tuner = 0,
1375 .svhs = 2, 1451 .svhs = 2,
1376 .gpiomask = 0x1C800F, // Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset 1452 .gpiomask = 0x1C800F, /* Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset */
1377 .muxsel = { 2, 1, 1, }, 1453 .muxsel = { 2, 1, 1, },
1378 .audiomux = { 0, 1, 2, 2, 4 }, 1454 .audiomux = { 0, 1, 2, 2, 4 },
1379 .needs_tvaudio = 0, 1455 .needs_tvaudio = 0,
1380 .tuner_type = TUNER_PHILIPS_PAL, 1456 .tuner_type = TUNER_PHILIPS_PAL,
1457 .tuner_addr = ADDR_UNSET,
1381 .pll = PLL_28, 1458 .pll = PLL_28,
1382 .has_radio = 1, 1459 .has_radio = 1,
1383},{ 1460},{
1384 1461
1385/* ---- card 0x4c ---------------------------------- */ 1462/* ---- card 0x4c ---------------------------------- */
1386 /* Masaki Suzuki <masaki@btree.org> */ 1463 /* Masaki Suzuki <masaki@btree.org> */
1387 .name = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)", 1464 .name = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)",
1388 .video_inputs = 3, 1465 .video_inputs = 3,
1389 .audio_inputs = 1, 1466 .audio_inputs = 1,
1390 .tuner = 0, 1467 .tuner = 0,
1391 .svhs = 2, 1468 .svhs = 2,
1392 .gpiomask = 0x140007, 1469 .gpiomask = 0x140007,
1393 .muxsel = { 2, 3, 1, 1 }, 1470 .muxsel = { 2, 3, 1, 1 },
1394 .audiomux = { 0, 1, 2, 3, 4, 0 }, 1471 .audiomux = { 0, 1, 2, 3, 4, 0 },
1395 .tuner_type = TUNER_PHILIPS_NTSC, 1472 .tuner_type = TUNER_PHILIPS_NTSC,
1396 .audio_hook = windvr_audio, 1473 .tuner_addr = ADDR_UNSET,
1397},{ 1474 .audio_hook = windvr_audio,
1398 .name = "GrandTec Multi Capture Card (Bt878)", 1475},{
1399 .video_inputs = 4, 1476 .name = "GrandTec Multi Capture Card (Bt878)",
1400 .audio_inputs = 0, 1477 .video_inputs = 4,
1401 .tuner = -1, 1478 .audio_inputs = 0,
1402 .svhs = -1, 1479 .tuner = -1,
1403 .gpiomask = 0, 1480 .svhs = -1,
1404 .muxsel = { 2, 3, 1, 0 }, 1481 .gpiomask = 0,
1405 .audiomux = { 0 }, 1482 .muxsel = { 2, 3, 1, 0 },
1406 .needs_tvaudio = 0, 1483 .audiomux = { 0 },
1407 .no_msp34xx = 1, 1484 .needs_tvaudio = 0,
1408 .pll = PLL_28, 1485 .no_msp34xx = 1,
1409 .tuner_type = -1, 1486 .pll = PLL_28,
1410},{ 1487 .tuner_type = -1,
1411 .name = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF", 1488 .tuner_addr = ADDR_UNSET,
1412 .video_inputs = 4, 1489},{
1413 .audio_inputs = 3, 1490 .name = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF",
1414 .tuner = 0, 1491 .video_inputs = 4,
1415 .svhs = 2, 1492 .audio_inputs = 3,
1416 .gpiomask = 7, 1493 .tuner = 0,
1417 .muxsel = { 2, 3, 1, 1 }, // Tuner, SVid, SVHS, SVid to SVHS connector 1494 .svhs = 2,
1418 .audiomux = { 0 ,0 ,4, 4,4,4},// Yes, this tuner uses the same audio output for TV and FM radio! 1495 .gpiomask = 7,
1419 // This card lacks external Audio In, so we mute it on Ext. & Int. 1496 .muxsel = { 2, 3, 1, 1 }, /* Tuner, SVid, SVHS, SVid to SVHS connector */
1420 // The PCB can take a sbx1637/sbx1673, wiring unknown. 1497 .audiomux = { 0 ,0 ,4, 4,4,4},/* Yes, this tuner uses the same audio output for TV and FM radio!
1421 // This card lacks PCI subsystem ID, sigh. 1498 * This card lacks external Audio In, so we mute it on Ext. & Int.
1422 // audiomux=1: lower volume, 2+3: mute 1499 * The PCB can take a sbx1637/sbx1673, wiring unknown.
1423 // btwincap uses 0x80000/0x80003 1500 * This card lacks PCI subsystem ID, sigh.
1424 .needs_tvaudio = 0, 1501 * audiomux=1: lower volume, 2+3: mute
1425 .no_msp34xx = 1, 1502 * btwincap uses 0x80000/0x80003
1426 .pll = PLL_28, 1503 */
1427 .tuner_type = 5, // Samsung TCPA9095PC27A (BG+DK), philips compatible, w/FM, stereo and 1504 .needs_tvaudio = 0,
1428 // radio signal strength indicators work fine. 1505 .no_msp34xx = 1,
1429 .has_radio = 1, 1506 .pll = PLL_28,
1507 .tuner_type = 5,
1508 .tuner_addr = ADDR_UNSET,
1509 /* Samsung TCPA9095PC27A (BG+DK), philips compatible, w/FM, stereo and
1510 radio signal strength indicators work fine. */
1511 .has_radio = 1,
1430 /* GPIO Info: 1512 /* GPIO Info:
1431 GPIO0,1: HEF4052 A0,A1 1513 GPIO0,1: HEF4052 A0,A1
1432 GPIO2: HEF4052 nENABLE 1514 GPIO2: HEF4052 nENABLE
@@ -1437,25 +1519,27 @@ struct tvcard bttv_tvcards[] = {
1437 GPIO22,23: ?? 1519 GPIO22,23: ??
1438 ?? : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/ 1520 ?? : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/
1439},{ 1521},{
1440 /* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */ 1522 /* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */
1441 .name = "DSP Design TCVIDEO", 1523 .name = "DSP Design TCVIDEO",
1442 .video_inputs = 4, 1524 .video_inputs = 4,
1443 .svhs = -1, 1525 .svhs = -1,
1444 .muxsel = { 2, 3, 1, 0}, 1526 .muxsel = { 2, 3, 1, 0},
1445 .pll = PLL_28, 1527 .pll = PLL_28,
1446 .tuner_type = -1, 1528 .tuner_type = -1,
1529 .tuner_addr = ADDR_UNSET,
1447},{ 1530},{
1448 1531
1449 /* ---- card 0x50 ---------------------------------- */ 1532 /* ---- card 0x50 ---------------------------------- */
1450 .name = "Hauppauge WinTV PVR", 1533 .name = "Hauppauge WinTV PVR",
1451 .video_inputs = 4, 1534 .video_inputs = 4,
1452 .audio_inputs = 1, 1535 .audio_inputs = 1,
1453 .tuner = 0, 1536 .tuner = 0,
1454 .svhs = 2, 1537 .svhs = 2,
1455 .muxsel = { 2, 0, 1, 1}, 1538 .muxsel = { 2, 0, 1, 1},
1456 .needs_tvaudio = 1, 1539 .needs_tvaudio = 1,
1457 .pll = PLL_28, 1540 .pll = PLL_28,
1458 .tuner_type = -1, 1541 .tuner_type = -1,
1542 .tuner_addr = ADDR_UNSET,
1459 1543
1460 .gpiomask = 7, 1544 .gpiomask = 7,
1461 .audiomux = {7}, 1545 .audiomux = {7},
@@ -1471,6 +1555,7 @@ struct tvcard bttv_tvcards[] = {
1471 .no_msp34xx = 1, 1555 .no_msp34xx = 1,
1472 .pll = PLL_28, 1556 .pll = PLL_28,
1473 .tuner_type = TUNER_PHILIPS_NTSC_M, 1557 .tuner_type = TUNER_PHILIPS_NTSC_M,
1558 .tuner_addr = ADDR_UNSET,
1474 .audio_hook = gvbctv5pci_audio, 1559 .audio_hook = gvbctv5pci_audio,
1475 .has_radio = 1, 1560 .has_radio = 1,
1476},{ 1561},{
@@ -1482,9 +1567,10 @@ struct tvcard bttv_tvcards[] = {
1482 .muxsel = { 3, 2, 0, 1 }, 1567 .muxsel = { 3, 2, 0, 1 },
1483 .pll = PLL_28, 1568 .pll = PLL_28,
1484 .tuner_type = -1, 1569 .tuner_type = -1,
1485 .no_msp34xx = 1, 1570 .tuner_addr = ADDR_UNSET,
1486 .no_tda9875 = 1, 1571 .no_msp34xx = 1,
1487 .no_tda7432 = 1, 1572 .no_tda9875 = 1,
1573 .no_tda7432 = 1,
1488},{ 1574},{
1489 .name = "Osprey 100/150 (848)", /* 0x04-54C0-C1 & older boards */ 1575 .name = "Osprey 100/150 (848)", /* 0x04-54C0-C1 & older boards */
1490 .video_inputs = 3, 1576 .video_inputs = 3,
@@ -1494,9 +1580,10 @@ struct tvcard bttv_tvcards[] = {
1494 .muxsel = { 2, 3, 1 }, 1580 .muxsel = { 2, 3, 1 },
1495 .pll = PLL_28, 1581 .pll = PLL_28,
1496 .tuner_type = -1, 1582 .tuner_type = -1,
1497 .no_msp34xx = 1, 1583 .tuner_addr = ADDR_UNSET,
1498 .no_tda9875 = 1, 1584 .no_msp34xx = 1,
1499 .no_tda7432 = 1, 1585 .no_tda9875 = 1,
1586 .no_tda7432 = 1,
1500},{ 1587},{
1501 1588
1502 /* ---- card 0x54 ---------------------------------- */ 1589 /* ---- card 0x54 ---------------------------------- */
@@ -1508,9 +1595,10 @@ struct tvcard bttv_tvcards[] = {
1508 .muxsel = { 3, 1 }, 1595 .muxsel = { 3, 1 },
1509 .pll = PLL_28, 1596 .pll = PLL_28,
1510 .tuner_type = -1, 1597 .tuner_type = -1,
1511 .no_msp34xx = 1, 1598 .tuner_addr = ADDR_UNSET,
1512 .no_tda9875 = 1, 1599 .no_msp34xx = 1,
1513 .no_tda7432 = 1, 1600 .no_tda9875 = 1,
1601 .no_tda7432 = 1,
1514},{ 1602},{
1515 .name = "Osprey 101/151", /* 0x1(4|5)-0004-C4 */ 1603 .name = "Osprey 101/151", /* 0x1(4|5)-0004-C4 */
1516 .video_inputs = 1, 1604 .video_inputs = 1,
@@ -1520,9 +1608,10 @@ struct tvcard bttv_tvcards[] = {
1520 .muxsel = { 0 }, 1608 .muxsel = { 0 },
1521 .pll = PLL_28, 1609 .pll = PLL_28,
1522 .tuner_type = -1, 1610 .tuner_type = -1,
1523 .no_msp34xx = 1, 1611 .tuner_addr = ADDR_UNSET,
1524 .no_tda9875 = 1, 1612 .no_msp34xx = 1,
1525 .no_tda7432 = 1, 1613 .no_tda9875 = 1,
1614 .no_tda7432 = 1,
1526},{ 1615},{
1527 .name = "Osprey 101/151 w/ svid", /* 0x(16|17|20)-00C4-C1 */ 1616 .name = "Osprey 101/151 w/ svid", /* 0x(16|17|20)-00C4-C1 */
1528 .video_inputs = 2, 1617 .video_inputs = 2,
@@ -1532,9 +1621,10 @@ struct tvcard bttv_tvcards[] = {
1532 .muxsel = { 0, 1 }, 1621 .muxsel = { 0, 1 },
1533 .pll = PLL_28, 1622 .pll = PLL_28,
1534 .tuner_type = -1, 1623 .tuner_type = -1,
1535 .no_msp34xx = 1, 1624 .tuner_addr = ADDR_UNSET,
1536 .no_tda9875 = 1, 1625 .no_msp34xx = 1,
1537 .no_tda7432 = 1, 1626 .no_tda9875 = 1,
1627 .no_tda7432 = 1,
1538},{ 1628},{
1539 .name = "Osprey 200/201/250/251", /* 0x1(8|9|E|F)-0004-C4 */ 1629 .name = "Osprey 200/201/250/251", /* 0x1(8|9|E|F)-0004-C4 */
1540 .video_inputs = 1, 1630 .video_inputs = 1,
@@ -1543,10 +1633,11 @@ struct tvcard bttv_tvcards[] = {
1543 .svhs = -1, 1633 .svhs = -1,
1544 .muxsel = { 0 }, 1634 .muxsel = { 0 },
1545 .pll = PLL_28, 1635 .pll = PLL_28,
1546 .tuner_type = -1, 1636 .tuner_type = UNSET,
1547 .no_msp34xx = 1, 1637 .tuner_addr = ADDR_UNSET,
1548 .no_tda9875 = 1, 1638 .no_msp34xx = 1,
1549 .no_tda7432 = 1, 1639 .no_tda9875 = 1,
1640 .no_tda7432 = 1,
1550},{ 1641},{
1551 1642
1552 /* ---- card 0x58 ---------------------------------- */ 1643 /* ---- card 0x58 ---------------------------------- */
@@ -1557,10 +1648,11 @@ struct tvcard bttv_tvcards[] = {
1557 .svhs = 1, 1648 .svhs = 1,
1558 .muxsel = { 0, 1 }, 1649 .muxsel = { 0, 1 },
1559 .pll = PLL_28, 1650 .pll = PLL_28,
1560 .tuner_type = -1, 1651 .tuner_type = UNSET,
1561 .no_msp34xx = 1, 1652 .tuner_addr = ADDR_UNSET,
1562 .no_tda9875 = 1, 1653 .no_msp34xx = 1,
1563 .no_tda7432 = 1, 1654 .no_tda9875 = 1,
1655 .no_tda7432 = 1,
1564},{ 1656},{
1565 .name = "Osprey 210/220", /* 0x1(A|B)-04C0-C1 */ 1657 .name = "Osprey 210/220", /* 0x1(A|B)-04C0-C1 */
1566 .video_inputs = 2, 1658 .video_inputs = 2,
@@ -1569,10 +1661,11 @@ struct tvcard bttv_tvcards[] = {
1569 .svhs = 1, 1661 .svhs = 1,
1570 .muxsel = { 2, 3 }, 1662 .muxsel = { 2, 3 },
1571 .pll = PLL_28, 1663 .pll = PLL_28,
1572 .tuner_type = -1, 1664 .tuner_type = UNSET,
1573 .no_msp34xx = 1, 1665 .tuner_addr = ADDR_UNSET,
1574 .no_tda9875 = 1, 1666 .no_msp34xx = 1,
1575 .no_tda7432 = 1, 1667 .no_tda9875 = 1,
1668 .no_tda7432 = 1,
1576},{ 1669},{
1577 .name = "Osprey 500", /* 500 */ 1670 .name = "Osprey 500", /* 500 */
1578 .video_inputs = 2, 1671 .video_inputs = 2,
@@ -1582,19 +1675,21 @@ struct tvcard bttv_tvcards[] = {
1582 .muxsel = { 2, 3 }, 1675 .muxsel = { 2, 3 },
1583 .pll = PLL_28, 1676 .pll = PLL_28,
1584 .tuner_type = -1, 1677 .tuner_type = -1,
1585 .no_msp34xx = 1, 1678 .tuner_addr = ADDR_UNSET,
1586 .no_tda9875 = 1, 1679 .no_msp34xx = 1,
1587 .no_tda7432 = 1, 1680 .no_tda9875 = 1,
1681 .no_tda7432 = 1,
1588},{ 1682},{
1589 .name = "Osprey 540", /* 540 */ 1683 .name = "Osprey 540", /* 540 */
1590 .video_inputs = 4, 1684 .video_inputs = 4,
1591 .audio_inputs = 1, 1685 .audio_inputs = 1,
1592 .tuner = -1, 1686 .tuner = -1,
1593 .pll = PLL_28, 1687 .pll = PLL_28,
1594 .tuner_type = -1, 1688 .tuner_type = -1,
1595 .no_msp34xx = 1, 1689 .tuner_addr = ADDR_UNSET,
1596 .no_tda9875 = 1, 1690 .no_msp34xx = 1,
1597 .no_tda7432 = 1, 1691 .no_tda9875 = 1,
1692 .no_tda7432 = 1,
1598},{ 1693},{
1599 1694
1600 /* ---- card 0x5C ---------------------------------- */ 1695 /* ---- card 0x5C ---------------------------------- */
@@ -1605,10 +1700,11 @@ struct tvcard bttv_tvcards[] = {
1605 .svhs = 1, 1700 .svhs = 1,
1606 .muxsel = { 2, 3 }, 1701 .muxsel = { 2, 3 },
1607 .pll = PLL_28, 1702 .pll = PLL_28,
1608 .tuner_type = -1, 1703 .tuner_type = UNSET,
1609 .no_msp34xx = 1, 1704 .tuner_addr = ADDR_UNSET,
1610 .no_tda9875 = 1, 1705 .no_msp34xx = 1,
1611 .no_tda7432 = 1, /* must avoid, conflicts with the bt860 */ 1706 .no_tda9875 = 1,
1707 .no_tda7432 = 1, /* must avoid, conflicts with the bt860 */
1612},{ 1708},{
1613 /* M G Berberich <berberic@forwiss.uni-passau.de> */ 1709 /* M G Berberich <berberic@forwiss.uni-passau.de> */
1614 .name = "IDS Eagle", 1710 .name = "IDS Eagle",
@@ -1616,6 +1712,7 @@ struct tvcard bttv_tvcards[] = {
1616 .audio_inputs = 0, 1712 .audio_inputs = 0,
1617 .tuner = -1, 1713 .tuner = -1,
1618 .tuner_type = -1, 1714 .tuner_type = -1,
1715 .tuner_addr = ADDR_UNSET,
1619 .svhs = -1, 1716 .svhs = -1,
1620 .gpiomask = 0, 1717 .gpiomask = 0,
1621 .muxsel = { 0, 1, 2, 3 }, 1718 .muxsel = { 0, 1, 2, 3 },
@@ -1630,6 +1727,7 @@ struct tvcard bttv_tvcards[] = {
1630 .svhs = 1, 1727 .svhs = 1,
1631 .tuner = -1, 1728 .tuner = -1,
1632 .tuner_type = -1, 1729 .tuner_type = -1,
1730 .tuner_addr = ADDR_UNSET,
1633 .no_msp34xx = 1, 1731 .no_msp34xx = 1,
1634 .no_tda9875 = 1, 1732 .no_tda9875 = 1,
1635 .no_tda7432 = 1, 1733 .no_tda7432 = 1,
@@ -1641,38 +1739,40 @@ struct tvcard bttv_tvcards[] = {
1641 .no_gpioirq = 1, 1739 .no_gpioirq = 1,
1642 .has_dvb = 1, 1740 .has_dvb = 1,
1643},{ 1741},{
1644 .name = "Formac ProTV II (bt878)", 1742 .name = "Formac ProTV II (bt878)",
1645 .video_inputs = 4, 1743 .video_inputs = 4,
1646 .audio_inputs = 1, 1744 .audio_inputs = 1,
1647 .tuner = 0, 1745 .tuner = 0,
1648 .svhs = 3, 1746 .svhs = 3,
1649 .gpiomask = 2, 1747 .gpiomask = 2,
1650 // TV, Comp1, Composite over SVID con, SVID 1748 /* TV, Comp1, Composite over SVID con, SVID */
1651 .muxsel = { 2, 3, 1, 1}, 1749 .muxsel = { 2, 3, 1, 1},
1652 .audiomux = { 2, 2, 0, 0, 0 }, 1750 .audiomux = { 2, 2, 0, 0, 0 },
1653 .pll = PLL_28, 1751 .pll = PLL_28,
1654 .has_radio = 1, 1752 .has_radio = 1,
1655 .tuner_type = TUNER_PHILIPS_PAL, 1753 .tuner_type = TUNER_PHILIPS_PAL,
1656 /* sound routing: 1754 .tuner_addr = ADDR_UNSET,
1657 GPIO=0x00,0x01,0x03: mute (?) 1755/* sound routing:
1658 0x02: both TV and radio (tuner: FM1216/I) 1756 GPIO=0x00,0x01,0x03: mute (?)
1659 The card has onboard audio connectors labeled "cdrom" and "board", 1757 0x02: both TV and radio (tuner: FM1216/I)
1660 not soldered here, though unknown wiring. 1758 The card has onboard audio connectors labeled "cdrom" and "board",
1661 Card lacks: external audio in, pci subsystem id. 1759 not soldered here, though unknown wiring.
1662 */ 1760 Card lacks: external audio in, pci subsystem id.
1761*/
1663},{ 1762},{
1664 1763
1665 /* ---- card 0x60 ---------------------------------- */ 1764 /* ---- card 0x60 ---------------------------------- */
1666 .name = "MachTV", 1765 .name = "MachTV",
1667 .video_inputs = 3, 1766 .video_inputs = 3,
1668 .audio_inputs = 1, 1767 .audio_inputs = 1,
1669 .tuner = 0, 1768 .tuner = 0,
1670 .svhs = -1, 1769 .svhs = -1,
1671 .gpiomask = 7, 1770 .gpiomask = 7,
1672 .muxsel = { 2, 3, 1, 1}, 1771 .muxsel = { 2, 3, 1, 1},
1673 .audiomux = { 0, 1, 2, 3, 4}, 1772 .audiomux = { 0, 1, 2, 3, 4},
1674 .needs_tvaudio = 1, 1773 .needs_tvaudio = 1,
1675 .tuner_type = 5, 1774 .tuner_type = 5,
1775 .tuner_addr = ADDR_UNSET,
1676 .pll = 1, 1776 .pll = 1,
1677},{ 1777},{
1678 .name = "Euresys Picolo", 1778 .name = "Euresys Picolo",
@@ -1686,6 +1786,8 @@ struct tvcard bttv_tvcards[] = {
1686 .no_tda7432 = 1, 1786 .no_tda7432 = 1,
1687 .muxsel = { 2, 0, 1}, 1787 .muxsel = { 2, 0, 1},
1688 .pll = PLL_28, 1788 .pll = PLL_28,
1789 .tuner_type = UNSET,
1790 .tuner_addr = ADDR_UNSET,
1689},{ 1791},{
1690 /* Luc Van Hoeylandt <luc@e-magic.be> */ 1792 /* Luc Van Hoeylandt <luc@e-magic.be> */
1691 .name = "ProVideo PV150", /* 0x4f */ 1793 .name = "ProVideo PV150", /* 0x4f */
@@ -1699,7 +1801,8 @@ struct tvcard bttv_tvcards[] = {
1699 .needs_tvaudio = 0, 1801 .needs_tvaudio = 0,
1700 .no_msp34xx = 1, 1802 .no_msp34xx = 1,
1701 .pll = PLL_28, 1803 .pll = PLL_28,
1702 .tuner_type = -1, 1804 .tuner_type = UNSET,
1805 .tuner_addr = ADDR_UNSET,
1703},{ 1806},{
1704 /* Hiroshi Takekawa <sian@big.or.jp> */ 1807 /* Hiroshi Takekawa <sian@big.or.jp> */
1705 /* This card lacks subsystem ID */ 1808 /* This card lacks subsystem ID */
@@ -1716,78 +1819,85 @@ struct tvcard bttv_tvcards[] = {
1716 .no_msp34xx = 1, 1819 .no_msp34xx = 1,
1717 .pll = PLL_28, 1820 .pll = PLL_28,
1718 .tuner_type = 2, 1821 .tuner_type = 2,
1822 .tuner_addr = ADDR_UNSET,
1719 .audio_hook = adtvk503_audio, 1823 .audio_hook = adtvk503_audio,
1720},{ 1824},{
1721 1825
1722 /* ---- card 0x64 ---------------------------------- */ 1826 /* ---- card 0x64 ---------------------------------- */
1723 .name = "Hercules Smart TV Stereo", 1827 .name = "Hercules Smart TV Stereo",
1724 .video_inputs = 4, 1828 .video_inputs = 4,
1725 .audio_inputs = 1, 1829 .audio_inputs = 1,
1726 .tuner = 0, 1830 .tuner = 0,
1727 .svhs = 2, 1831 .svhs = 2,
1728 .gpiomask = 0x00, 1832 .gpiomask = 0x00,
1729 .muxsel = { 2, 3, 1, 1 }, 1833 .muxsel = { 2, 3, 1, 1 },
1730 .needs_tvaudio = 1, 1834 .needs_tvaudio = 1,
1731 .no_msp34xx = 1, 1835 .no_msp34xx = 1,
1732 .pll = PLL_28, 1836 .pll = PLL_28,
1733 .tuner_type = 5, 1837 .tuner_type = 5,
1838 .tuner_addr = ADDR_UNSET,
1734 /* Notes: 1839 /* Notes:
1735 - card lacks subsystem ID 1840 - card lacks subsystem ID
1736 - stereo variant w/ daughter board with tda9874a @0xb0 1841 - stereo variant w/ daughter board with tda9874a @0xb0
1737 - Audio Routing: 1842 - Audio Routing:
1738 always from tda9874 independent of GPIO (?) 1843 always from tda9874 independent of GPIO (?)
1739 external line in: unknown 1844 external line in: unknown
1740 - Other chips: em78p156elp @ 0x96 (probably IR remote control) 1845 - Other chips: em78p156elp @ 0x96 (probably IR remote control)
1741 hef4053 (instead 4052) for unknown function 1846 hef4053 (instead 4052) for unknown function
1742 */ 1847 */
1743},{ 1848},{
1744 .name = "Pace TV & Radio Card", 1849 .name = "Pace TV & Radio Card",
1745 .video_inputs = 4, 1850 .video_inputs = 4,
1746 .audio_inputs = 1, 1851 .audio_inputs = 1,
1747 .tuner = 0, 1852 .tuner = 0,
1748 .svhs = 2, 1853 .svhs = 2,
1749 .muxsel = { 2, 3, 1, 1}, // Tuner, CVid, SVid, CVid over SVid connector 1854 .muxsel = { 2, 3, 1, 1}, /* Tuner, CVid, SVid, CVid over SVid connector */
1750 .gpiomask = 0, 1855 .gpiomask = 0,
1751 .no_tda9875 = 1, 1856 .no_tda9875 = 1,
1752 .no_tda7432 = 1, 1857 .no_tda7432 = 1,
1753 .tuner_type = 1, 1858 .tuner_type = 1,
1754 .has_radio = 1, 1859 .tuner_addr = ADDR_UNSET,
1755 .pll = PLL_28, 1860 .has_radio = 1,
1756 /* Bt878, Bt832, FI1246 tuner; no pci subsystem id 1861 .pll = PLL_28,
1757 only internal line out: (4pin header) RGGL 1862 /* Bt878, Bt832, FI1246 tuner; no pci subsystem id
1758 Radio must be decoded by msp3410d (not routed through)*/ 1863 only internal line out: (4pin header) RGGL
1759 // .digital_mode = DIGITAL_MODE_CAMERA, // todo! 1864 Radio must be decoded by msp3410d (not routed through)*/
1760},{ 1865 /*
1761 /* Chris Willing <chris@vislab.usyd.edu.au> */ 1866 .digital_mode = DIGITAL_MODE_CAMERA, todo!
1762 .name = "IVC-200", 1867 */
1763 .video_inputs = 1, 1868},{
1764 .audio_inputs = 0, 1869 /* Chris Willing <chris@vislab.usyd.edu.au> */
1765 .tuner = -1, 1870 .name = "IVC-200",
1766 .tuner_type = -1, 1871 .video_inputs = 1,
1767 .svhs = -1, 1872 .audio_inputs = 0,
1768 .gpiomask = 0xdf, 1873 .tuner = -1,
1769 .muxsel = { 2 }, 1874 .tuner_type = -1,
1770 .pll = PLL_28, 1875 .tuner_addr = ADDR_UNSET,
1876 .svhs = -1,
1877 .gpiomask = 0xdf,
1878 .muxsel = { 2 },
1879 .pll = PLL_28,
1771},{ 1880},{
1772 .name = "Grand X-Guard / Trust 814PCI", 1881 .name = "Grand X-Guard / Trust 814PCI",
1773 .video_inputs = 16, 1882 .video_inputs = 16,
1774 .audio_inputs = 0, 1883 .audio_inputs = 0,
1775 .tuner = -1, 1884 .tuner = -1,
1776 .svhs = -1, 1885 .svhs = -1,
1777 .tuner_type = 4, 1886 .tuner_type = 4,
1778 .gpiomask2 = 0xff, 1887 .tuner_addr = ADDR_UNSET,
1888 .gpiomask2 = 0xff,
1779 .muxsel = { 2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0 }, 1889 .muxsel = { 2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0 },
1780 .muxsel_hook = xguard_muxsel, 1890 .muxsel_hook = xguard_muxsel,
1781 .no_msp34xx = 1, 1891 .no_msp34xx = 1,
1782 .no_tda9875 = 1, 1892 .no_tda9875 = 1,
1783 .no_tda7432 = 1, 1893 .no_tda7432 = 1,
1784 .pll = PLL_28, 1894 .pll = PLL_28,
1785},{ 1895},{
1786 1896
1787 /* ---- card 0x68 ---------------------------------- */ 1897 /* ---- card 0x68 ---------------------------------- */
1788 .name = "Nebula Electronics DigiTV", 1898 .name = "Nebula Electronics DigiTV",
1789 .video_inputs = 1, 1899 .video_inputs = 1,
1790 .tuner = -1, 1900 .tuner = -1,
1791 .svhs = -1, 1901 .svhs = -1,
1792 .muxsel = { 2, 3, 1, 0}, 1902 .muxsel = { 2, 3, 1, 0},
1793 .no_msp34xx = 1, 1903 .no_msp34xx = 1,
@@ -1795,22 +1905,24 @@ struct tvcard bttv_tvcards[] = {
1795 .no_tda7432 = 1, 1905 .no_tda7432 = 1,
1796 .pll = PLL_28, 1906 .pll = PLL_28,
1797 .tuner_type = -1, 1907 .tuner_type = -1,
1908 .tuner_addr = ADDR_UNSET,
1798 .has_dvb = 1, 1909 .has_dvb = 1,
1799 .no_gpioirq = 1, 1910 .no_gpioirq = 1,
1800},{ 1911},{
1801 /* Jorge Boncompte - DTI2 <jorge@dti2.net> */ 1912 /* Jorge Boncompte - DTI2 <jorge@dti2.net> */
1802 .name = "ProVideo PV143", 1913 .name = "ProVideo PV143",
1803 .video_inputs = 4, 1914 .video_inputs = 4,
1804 .audio_inputs = 0, 1915 .audio_inputs = 0,
1805 .tuner = -1, 1916 .tuner = -1,
1806 .svhs = -1, 1917 .svhs = -1,
1807 .gpiomask = 0, 1918 .gpiomask = 0,
1808 .muxsel = { 2, 3, 1, 0 }, 1919 .muxsel = { 2, 3, 1, 0 },
1809 .audiomux = { 0 }, 1920 .audiomux = { 0 },
1810 .needs_tvaudio = 0, 1921 .needs_tvaudio = 0,
1811 .no_msp34xx = 1, 1922 .no_msp34xx = 1,
1812 .pll = PLL_28, 1923 .pll = PLL_28,
1813 .tuner_type = -1, 1924 .tuner_type = -1,
1925 .tuner_addr = ADDR_UNSET,
1814},{ 1926},{
1815 /* M.Klahr@phytec.de */ 1927 /* M.Klahr@phytec.de */
1816 .name = "PHYTEC VD-009-X1 MiniDIN (bt878)", 1928 .name = "PHYTEC VD-009-X1 MiniDIN (bt878)",
@@ -1824,6 +1936,7 @@ struct tvcard bttv_tvcards[] = {
1824 .needs_tvaudio = 1, 1936 .needs_tvaudio = 1,
1825 .pll = PLL_28, 1937 .pll = PLL_28,
1826 .tuner_type = -1, 1938 .tuner_type = -1,
1939 .tuner_addr = ADDR_UNSET,
1827},{ 1940},{
1828 .name = "PHYTEC VD-009-X1 Combi (bt878)", 1941 .name = "PHYTEC VD-009-X1 Combi (bt878)",
1829 .video_inputs = 4, 1942 .video_inputs = 4,
@@ -1836,6 +1949,7 @@ struct tvcard bttv_tvcards[] = {
1836 .needs_tvaudio = 1, 1949 .needs_tvaudio = 1,
1837 .pll = PLL_28, 1950 .pll = PLL_28,
1838 .tuner_type = -1, 1951 .tuner_type = -1,
1952 .tuner_addr = ADDR_UNSET,
1839},{ 1953},{
1840 1954
1841 /* ---- card 0x6c ---------------------------------- */ 1955 /* ---- card 0x6c ---------------------------------- */
@@ -1846,13 +1960,14 @@ struct tvcard bttv_tvcards[] = {
1846 .svhs = 9, 1960 .svhs = 9,
1847 .gpiomask = 0x00, 1961 .gpiomask = 0x00,
1848 .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio 1962 .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio
1849 via the upper nibble of muxsel. here: used for 1963 via the upper nibble of muxsel. here: used for
1850 xternal video-mux */ 1964 xternal video-mux */
1851 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 }, 1965 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 },
1852 .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 1966 .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
1853 .needs_tvaudio = 1, 1967 .needs_tvaudio = 1,
1854 .pll = PLL_28, 1968 .pll = PLL_28,
1855 .tuner_type = -1, 1969 .tuner_type = -1,
1970 .tuner_addr = ADDR_UNSET,
1856},{ 1971},{
1857 .name = "PHYTEC VD-009 Combi (bt878)", 1972 .name = "PHYTEC VD-009 Combi (bt878)",
1858 .video_inputs = 10, 1973 .video_inputs = 10,
@@ -1861,23 +1976,25 @@ struct tvcard bttv_tvcards[] = {
1861 .svhs = 9, 1976 .svhs = 9,
1862 .gpiomask = 0x00, 1977 .gpiomask = 0x00,
1863 .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio 1978 .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio
1864 via the upper nibble of muxsel. here: used for 1979 via the upper nibble of muxsel. here: used for
1865 xternal video-mux */ 1980 xternal video-mux */
1866 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 }, 1981 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 },
1867 .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 1982 .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
1868 .needs_tvaudio = 1, 1983 .needs_tvaudio = 1,
1869 .pll = PLL_28, 1984 .pll = PLL_28,
1870 .tuner_type = -1, 1985 .tuner_type = -1,
1986 .tuner_addr = ADDR_UNSET,
1871},{ 1987},{
1872 .name = "IVC-100", 1988 .name = "IVC-100",
1873 .video_inputs = 4, 1989 .video_inputs = 4,
1874 .audio_inputs = 0, 1990 .audio_inputs = 0,
1875 .tuner = -1, 1991 .tuner = -1,
1876 .tuner_type = -1, 1992 .tuner_type = -1,
1877 .svhs = -1, 1993 .tuner_addr = ADDR_UNSET,
1878 .gpiomask = 0xdf, 1994 .svhs = -1,
1879 .muxsel = { 2, 3, 1, 0 }, 1995 .gpiomask = 0xdf,
1880 .pll = PLL_28, 1996 .muxsel = { 2, 3, 1, 0 },
1997 .pll = PLL_28,
1881},{ 1998},{
1882 /* IVC-120G - Alan Garfield <alan@fromorbit.com> */ 1999 /* IVC-120G - Alan Garfield <alan@fromorbit.com> */
1883 .name = "IVC-120G", 2000 .name = "IVC-120G",
@@ -1885,6 +2002,7 @@ struct tvcard bttv_tvcards[] = {
1885 .audio_inputs = 0, /* card has no audio */ 2002 .audio_inputs = 0, /* card has no audio */
1886 .tuner = -1, /* card has no tuner */ 2003 .tuner = -1, /* card has no tuner */
1887 .tuner_type = -1, 2004 .tuner_type = -1,
2005 .tuner_addr = ADDR_UNSET,
1888 .svhs = -1, /* card has no svhs */ 2006 .svhs = -1, /* card has no svhs */
1889 .needs_tvaudio = 0, 2007 .needs_tvaudio = 0,
1890 .no_msp34xx = 1, 2008 .no_msp34xx = 1,
@@ -1892,7 +2010,7 @@ struct tvcard bttv_tvcards[] = {
1892 .no_tda7432 = 1, 2010 .no_tda7432 = 1,
1893 .gpiomask = 0x00, 2011 .gpiomask = 0x00,
1894 .muxsel = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 2012 .muxsel = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1895 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }, 2013 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 },
1896 .muxsel_hook = ivc120_muxsel, 2014 .muxsel_hook = ivc120_muxsel,
1897 .pll = PLL_28, 2015 .pll = PLL_28,
1898},{ 2016},{
@@ -1905,6 +2023,7 @@ struct tvcard bttv_tvcards[] = {
1905 .svhs = 2, 2023 .svhs = 2,
1906 .muxsel = { 2, 3, 1, 0}, 2024 .muxsel = { 2, 3, 1, 0},
1907 .tuner_type = TUNER_PHILIPS_ATSC, 2025 .tuner_type = TUNER_PHILIPS_ATSC,
2026 .tuner_addr = ADDR_UNSET,
1908 .has_dvb = 1, 2027 .has_dvb = 1,
1909},{ 2028},{
1910 .name = "Twinhan DST + clones", 2029 .name = "Twinhan DST + clones",
@@ -1912,19 +2031,21 @@ struct tvcard bttv_tvcards[] = {
1912 .no_tda9875 = 1, 2031 .no_tda9875 = 1,
1913 .no_tda7432 = 1, 2032 .no_tda7432 = 1,
1914 .tuner_type = TUNER_ABSENT, 2033 .tuner_type = TUNER_ABSENT,
2034 .tuner_addr = ADDR_UNSET,
1915 .no_video = 1, 2035 .no_video = 1,
1916 .has_dvb = 1, 2036 .has_dvb = 1,
1917},{ 2037},{
1918 .name = "Winfast VC100", 2038 .name = "Winfast VC100",
1919 .video_inputs = 3, 2039 .video_inputs = 3,
1920 .audio_inputs = 0, 2040 .audio_inputs = 0,
1921 .svhs = 1, 2041 .svhs = 1,
1922 .tuner = -1, // no tuner 2042 .tuner = -1,
1923 .muxsel = { 3, 1, 1, 3}, // Vid In, SVid In, Vid over SVid in connector 2043 .muxsel = { 3, 1, 1, 3}, /* Vid In, SVid In, Vid over SVid in connector */
1924 .no_msp34xx = 1, 2044 .no_msp34xx = 1,
1925 .no_tda9875 = 1, 2045 .no_tda9875 = 1,
1926 .no_tda7432 = 1, 2046 .no_tda7432 = 1,
1927 .tuner_type = TUNER_ABSENT, 2047 .tuner_type = TUNER_ABSENT,
2048 .tuner_addr = ADDR_UNSET,
1928 .pll = PLL_28, 2049 .pll = PLL_28,
1929},{ 2050},{
1930 .name = "Teppro TEV-560/InterVision IV-560", 2051 .name = "Teppro TEV-560/InterVision IV-560",
@@ -1937,44 +2058,49 @@ struct tvcard bttv_tvcards[] = {
1937 .audiomux = { 1, 1, 1, 1, 0}, 2058 .audiomux = { 1, 1, 1, 1, 0},
1938 .needs_tvaudio = 1, 2059 .needs_tvaudio = 1,
1939 .tuner_type = TUNER_PHILIPS_PAL, 2060 .tuner_type = TUNER_PHILIPS_PAL,
2061 .tuner_addr = ADDR_UNSET,
1940 .pll = PLL_35, 2062 .pll = PLL_35,
1941},{ 2063},{
1942 2064
1943 /* ---- card 0x74 ---------------------------------- */ 2065 /* ---- card 0x74 ---------------------------------- */
1944 .name = "SIMUS GVC1100", 2066 .name = "SIMUS GVC1100",
1945 .video_inputs = 4, 2067 .video_inputs = 4,
1946 .audio_inputs = 0, 2068 .audio_inputs = 0,
1947 .tuner = -1, 2069 .tuner = -1,
1948 .svhs = -1, 2070 .svhs = -1,
1949 .tuner_type = -1, 2071 .tuner_type = -1,
1950 .pll = PLL_28, 2072 .tuner_addr = ADDR_UNSET,
1951 .muxsel = { 2, 2, 2, 2}, 2073 .pll = PLL_28,
1952 .gpiomask = 0x3F, 2074 .muxsel = { 2, 2, 2, 2},
2075 .gpiomask = 0x3F,
1953 .muxsel_hook = gvc1100_muxsel, 2076 .muxsel_hook = gvc1100_muxsel,
1954},{ 2077},{
1955 /* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */ 2078 /* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */
1956 .name = "NGS NGSTV+", 2079 .name = "NGS NGSTV+",
1957 .video_inputs = 3, 2080 .video_inputs = 3,
1958 .tuner = 0, 2081 .tuner = 0,
1959 .svhs = 2, 2082 .svhs = 2,
1960 .gpiomask = 0x008007, 2083 .gpiomask = 0x008007,
1961 .muxsel = {2, 3, 0, 0}, 2084 .muxsel = {2, 3, 0, 0},
1962 .audiomux = {0, 0, 0, 0, 0x000003, 0}, 2085 .audiomux = {0, 0, 0, 0, 0x000003, 0},
1963 .pll = PLL_28, 2086 .pll = PLL_28,
1964 .tuner_type = TUNER_PHILIPS_PAL, 2087 .tuner_type = TUNER_PHILIPS_PAL,
1965 .has_remote = 1, 2088 .tuner_addr = ADDR_UNSET,
1966},{ 2089 .has_remote = 1,
1967 /* http://linuxmedialabs.com */ 2090},{
1968 .name = "LMLBT4", 2091 /* http://linuxmedialabs.com */
1969 .video_inputs = 4, /* IN1,IN2,IN3,IN4 */ 2092 .name = "LMLBT4",
1970 .audio_inputs = 0, 2093 .video_inputs = 4, /* IN1,IN2,IN3,IN4 */
1971 .tuner = -1, 2094 .audio_inputs = 0,
1972 .svhs = -1, 2095 .tuner = -1,
1973 .muxsel = { 2, 3, 1, 0 }, 2096 .svhs = -1,
1974 .no_msp34xx = 1, 2097 .muxsel = { 2, 3, 1, 0 },
1975 .no_tda9875 = 1, 2098 .no_msp34xx = 1,
1976 .no_tda7432 = 1, 2099 .no_tda9875 = 1,
1977 .needs_tvaudio = 0, 2100 .no_tda7432 = 1,
2101 .needs_tvaudio = 0,
2102 .tuner_type = -1,
2103 .tuner_addr = ADDR_UNSET,
1978},{ 2104},{
1979 /* Helmroos Harri <harri.helmroos@pp.inet.fi> */ 2105 /* Helmroos Harri <harri.helmroos@pp.inet.fi> */
1980 .name = "Tekram M205 PRO", 2106 .name = "Tekram M205 PRO",
@@ -1982,6 +2108,7 @@ struct tvcard bttv_tvcards[] = {
1982 .audio_inputs = 1, 2108 .audio_inputs = 1,
1983 .tuner = 0, 2109 .tuner = 0,
1984 .tuner_type = TUNER_PHILIPS_PAL, 2110 .tuner_type = TUNER_PHILIPS_PAL,
2111 .tuner_addr = ADDR_UNSET,
1985 .svhs = 2, 2112 .svhs = 2,
1986 .needs_tvaudio = 0, 2113 .needs_tvaudio = 0,
1987 .gpiomask = 0x68, 2114 .gpiomask = 0x68,
@@ -2004,6 +2131,7 @@ struct tvcard bttv_tvcards[] = {
2004 .needs_tvaudio = 0, 2131 .needs_tvaudio = 0,
2005 .pll = PLL_28, 2132 .pll = PLL_28,
2006 .tuner_type = TUNER_PHILIPS_PAL, 2133 .tuner_type = TUNER_PHILIPS_PAL,
2134 .tuner_addr = ADDR_UNSET,
2007 .has_remote = 1, 2135 .has_remote = 1,
2008 .has_radio = 1, 2136 .has_radio = 1,
2009},{ 2137},{
@@ -2026,6 +2154,8 @@ struct tvcard bttv_tvcards[] = {
2026 .pll = PLL_28, 2154 .pll = PLL_28,
2027 .needs_tvaudio = 0, 2155 .needs_tvaudio = 0,
2028 .muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/ 2156 .muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/
2157 .tuner_type = -1,
2158 .tuner_addr = ADDR_UNSET,
2029},{ 2159},{
2030 /* Spirit TV Tuner from http://spiritmodems.com.au */ 2160 /* Spirit TV Tuner from http://spiritmodems.com.au */
2031 /* Stafford Goodsell <surge@goliath.homeunix.org> */ 2161 /* Stafford Goodsell <surge@goliath.homeunix.org> */
@@ -2038,23 +2168,25 @@ struct tvcard bttv_tvcards[] = {
2038 .muxsel = { 2, 1, 1 }, 2168 .muxsel = { 2, 1, 1 },
2039 .audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00}, 2169 .audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00},
2040 .tuner_type = TUNER_TEMIC_PAL, 2170 .tuner_type = TUNER_TEMIC_PAL,
2171 .tuner_addr = ADDR_UNSET,
2041 .no_msp34xx = 1, 2172 .no_msp34xx = 1,
2042 .no_tda9875 = 1, 2173 .no_tda9875 = 1,
2043},{ 2174},{
2044 /* Wolfram Joost <wojo@frokaschwei.de> */ 2175 /* Wolfram Joost <wojo@frokaschwei.de> */
2045 .name = "AVerMedia AVerTV DVB-T 771", 2176 .name = "AVerMedia AVerTV DVB-T 771",
2046 .video_inputs = 2, 2177 .video_inputs = 2,
2047 .svhs = 1, 2178 .svhs = 1,
2048 .tuner = -1, 2179 .tuner = -1,
2049 .tuner_type = TUNER_ABSENT, 2180 .tuner_type = TUNER_ABSENT,
2050 .muxsel = { 3 , 3 }, 2181 .tuner_addr = ADDR_UNSET,
2051 .no_msp34xx = 1, 2182 .muxsel = { 3 , 3 },
2052 .no_tda9875 = 1, 2183 .no_msp34xx = 1,
2053 .no_tda7432 = 1, 2184 .no_tda9875 = 1,
2054 .pll = PLL_28, 2185 .no_tda7432 = 1,
2055 .has_dvb = 1, 2186 .pll = PLL_28,
2056 .no_gpioirq = 1, 2187 .has_dvb = 1,
2057 .has_remote = 1, 2188 .no_gpioirq = 1,
2189 .has_remote = 1,
2058},{ 2190},{
2059 /* ---- card 0x7c ---------------------------------- */ 2191 /* ---- card 0x7c ---------------------------------- */
2060 /* Matt Jesson <dvb@jesson.eclipse.co.uk> */ 2192 /* Matt Jesson <dvb@jesson.eclipse.co.uk> */
@@ -2069,6 +2201,7 @@ struct tvcard bttv_tvcards[] = {
2069 .no_tda7432 = 1, 2201 .no_tda7432 = 1,
2070 .pll = PLL_28, 2202 .pll = PLL_28,
2071 .tuner_type = -1, 2203 .tuner_type = -1,
2204 .tuner_addr = ADDR_UNSET,
2072 .has_dvb = 1, 2205 .has_dvb = 1,
2073 .no_gpioirq = 1, 2206 .no_gpioirq = 1,
2074 .has_remote = 1, 2207 .has_remote = 1,
@@ -2081,12 +2214,13 @@ struct tvcard bttv_tvcards[] = {
2081 .svhs = -1, 2214 .svhs = -1,
2082 .gpiomask = 0x0, 2215 .gpiomask = 0x0,
2083 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2216 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2,
2084 3, 3, 3, 3, 3, 3, 3, 3 }, 2217 3, 3, 3, 3, 3, 3, 3, 3 },
2085 .muxsel_hook = sigmaSQ_muxsel, 2218 .muxsel_hook = sigmaSQ_muxsel,
2086 .audiomux = { 0 }, 2219 .audiomux = { 0 },
2087 .no_msp34xx = 1, 2220 .no_msp34xx = 1,
2088 .pll = PLL_28, 2221 .pll = PLL_28,
2089 .tuner_type = -1, 2222 .tuner_type = -1,
2223 .tuner_addr = ADDR_UNSET,
2090},{ 2224},{
2091 /* andre.schwarz@matrix-vision.de */ 2225 /* andre.schwarz@matrix-vision.de */
2092 .name = "MATRIX Vision Sigma-SLC", 2226 .name = "MATRIX Vision Sigma-SLC",
@@ -2101,6 +2235,7 @@ struct tvcard bttv_tvcards[] = {
2101 .no_msp34xx = 1, 2235 .no_msp34xx = 1,
2102 .pll = PLL_28, 2236 .pll = PLL_28,
2103 .tuner_type = -1, 2237 .tuner_type = -1,
2238 .tuner_addr = ADDR_UNSET,
2104},{ 2239},{
2105 /* BTTV_APAC_VIEWCOMP */ 2240 /* BTTV_APAC_VIEWCOMP */
2106 /* Attila Kondoros <attila.kondoros@chello.hu> */ 2241 /* Attila Kondoros <attila.kondoros@chello.hu> */
@@ -2116,6 +2251,7 @@ struct tvcard bttv_tvcards[] = {
2116 .needs_tvaudio = 0, 2251 .needs_tvaudio = 0,
2117 .pll = PLL_28, 2252 .pll = PLL_28,
2118 .tuner_type = TUNER_PHILIPS_PAL, 2253 .tuner_type = TUNER_PHILIPS_PAL,
2254 .tuner_addr = ADDR_UNSET,
2119 .has_remote = 1, /* miniremote works, see ir-kbd-gpio.c */ 2255 .has_remote = 1, /* miniremote works, see ir-kbd-gpio.c */
2120 .has_radio = 1, /* not every card has radio */ 2256 .has_radio = 1, /* not every card has radio */
2121},{ 2257},{
@@ -2131,6 +2267,7 @@ struct tvcard bttv_tvcards[] = {
2131 .no_video = 1, 2267 .no_video = 1,
2132 .has_dvb = 1, 2268 .has_dvb = 1,
2133 .tuner_type = -1, 2269 .tuner_type = -1,
2270 .tuner_addr = ADDR_UNSET,
2134},{ 2271},{
2135 /* Steven <photon38@pchome.com.tw> */ 2272 /* Steven <photon38@pchome.com.tw> */
2136 .name = "V-Gear MyVCD", 2273 .name = "V-Gear MyVCD",
@@ -2144,62 +2281,65 @@ struct tvcard bttv_tvcards[] = {
2144 .no_msp34xx = 1, 2281 .no_msp34xx = 1,
2145 .pll = PLL_28, 2282 .pll = PLL_28,
2146 .tuner_type = TUNER_PHILIPS_NTSC_M, 2283 .tuner_type = TUNER_PHILIPS_NTSC_M,
2284 .tuner_addr = ADDR_UNSET,
2147 .has_radio = 0, 2285 .has_radio = 0,
2148 // .has_remote = 1,
2149},{ 2286},{
2150 /* Rick C <cryptdragoon@gmail.com> */ 2287 /* Rick C <cryptdragoon@gmail.com> */
2151 .name = "Super TV Tuner", 2288 .name = "Super TV Tuner",
2152 .video_inputs = 4, 2289 .video_inputs = 4,
2153 .audio_inputs = 1, 2290 .audio_inputs = 1,
2154 .tuner = 0, 2291 .tuner = 0,
2155 .svhs = 2, 2292 .svhs = 2,
2156 .muxsel = { 2, 3, 1, 0}, 2293 .muxsel = { 2, 3, 1, 0},
2157 .tuner_type = TUNER_PHILIPS_NTSC, 2294 .tuner_type = TUNER_PHILIPS_NTSC,
2158 .gpiomask = 0x008007, 2295 .tuner_addr = ADDR_UNSET,
2159 .audiomux = { 0, 0x000001,0,0, 0}, 2296 .gpiomask = 0x008007,
2160 .needs_tvaudio = 1, 2297 .audiomux = { 0, 0x000001,0,0, 0},
2161 .has_radio = 1, 2298 .needs_tvaudio = 1,
2162},{ 2299 .has_radio = 1,
2163 /* Chris Fanning <video4linux@haydon.net> */ 2300},{
2164 .name = "Tibet Systems 'Progress DVR' CS16", 2301 /* Chris Fanning <video4linux@haydon.net> */
2165 .video_inputs = 16, 2302 .name = "Tibet Systems 'Progress DVR' CS16",
2166 .audio_inputs = 0, 2303 .video_inputs = 16,
2167 .tuner = -1, 2304 .audio_inputs = 0,
2168 .svhs = -1, 2305 .tuner = -1,
2169 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 2306 .svhs = -1,
2170 .pll = PLL_28, 2307 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
2171 .no_msp34xx = 1, 2308 .pll = PLL_28,
2172 .no_tda9875 = 1, 2309 .no_msp34xx = 1,
2173 .no_tda7432 = 1, 2310 .no_tda9875 = 1,
2174 .tuner_type = -1, 2311 .no_tda7432 = 1,
2175 .muxsel_hook = tibetCS16_muxsel, 2312 .tuner_type = -1,
2313 .tuner_addr = ADDR_UNSET,
2314 .muxsel_hook = tibetCS16_muxsel,
2176}, 2315},
2177{ 2316{
2178 /* Bill Brack <wbrack@mmm.com.hk> */ 2317 /* Bill Brack <wbrack@mmm.com.hk> */
2179 /* 2318 /*
2180 * Note that, because of the card's wiring, the "master" 2319 * Note that, because of the card's wiring, the "master"
2181 * BT878A chip (i.e. the one which controls the analog switch 2320 * BT878A chip (i.e. the one which controls the analog switch
2182 * and must use this card type) is the 2nd one detected. The 2321 * and must use this card type) is the 2nd one detected. The
2183 * other 3 chips should use card type 0x85, whose description 2322 * other 3 chips should use card type 0x85, whose description
2184 * follows this one. There is a EEPROM on the card (which is 2323 * follows this one. There is a EEPROM on the card (which is
2185 * connected to the I2C of one of those other chips), but is 2324 * connected to the I2C of one of those other chips), but is
2186 * not currently handled. There is also a facility for a 2325 * not currently handled. There is also a facility for a
2187 * "monitor", which is also not currently implemented. 2326 * "monitor", which is also not currently implemented.
2188 */ 2327 */
2189 .name = "Kodicom 4400R (master)", 2328 .name = "Kodicom 4400R (master)",
2190 .video_inputs = 16, 2329 .video_inputs = 16,
2191 .audio_inputs = 0, 2330 .audio_inputs = 0,
2192 .tuner = -1, 2331 .tuner = -1,
2193 .tuner_type = -1, 2332 .tuner_type = -1,
2333 .tuner_addr = ADDR_UNSET,
2194 .svhs = -1, 2334 .svhs = -1,
2195 /* GPIO bits 0-9 used for analog switch: 2335 /* GPIO bits 0-9 used for analog switch:
2196 * 00 - 03: camera selector 2336 * 00 - 03: camera selector
2197 * 04 - 06: channel (controller) selector 2337 * 04 - 06: channel (controller) selector
2198 * 07: data (1->on, 0->off) 2338 * 07: data (1->on, 0->off)
2199 * 08: strobe 2339 * 08: strobe
2200 * 09: reset 2340 * 09: reset
2201 * bit 16 is input from sync separator for the channel 2341 * bit 16 is input from sync separator for the channel
2202 */ 2342 */
2203 .gpiomask = 0x0003ff, 2343 .gpiomask = 0x0003ff,
2204 .no_gpioirq = 1, 2344 .no_gpioirq = 1,
2205 .muxsel = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, 2345 .muxsel = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
@@ -2212,15 +2352,16 @@ struct tvcard bttv_tvcards[] = {
2212{ 2352{
2213 /* Bill Brack <wbrack@mmm.com.hk> */ 2353 /* Bill Brack <wbrack@mmm.com.hk> */
2214 /* Note that, for reasons unknown, the "master" BT878A chip (i.e. the 2354 /* Note that, for reasons unknown, the "master" BT878A chip (i.e. the
2215 * one which controls the analog switch, and must use the card type) 2355 * one which controls the analog switch, and must use the card type)
2216 * is the 2nd one detected. The other 3 chips should use this card 2356 * is the 2nd one detected. The other 3 chips should use this card
2217 * type 2357 * type
2218 */ 2358 */
2219 .name = "Kodicom 4400R (slave)", 2359 .name = "Kodicom 4400R (slave)",
2220 .video_inputs = 16, 2360 .video_inputs = 16,
2221 .audio_inputs = 0, 2361 .audio_inputs = 0,
2222 .tuner = -1, 2362 .tuner = -1,
2223 .tuner_type = -1, 2363 .tuner_type = -1,
2364 .tuner_addr = ADDR_UNSET,
2224 .svhs = -1, 2365 .svhs = -1,
2225 .gpiomask = 0x010000, 2366 .gpiomask = 0x010000,
2226 .no_gpioirq = 1, 2367 .no_gpioirq = 1,
@@ -2232,18 +2373,51 @@ struct tvcard bttv_tvcards[] = {
2232 .muxsel_hook = kodicom4400r_muxsel, 2373 .muxsel_hook = kodicom4400r_muxsel,
2233}, 2374},
2234{ 2375{
2235 /* ---- card 0x85---------------------------------- */ 2376 /* ---- card 0x86---------------------------------- */
2236 /* Michael Henson <mhenson@clarityvi.com> */ 2377 /* Michael Henson <mhenson@clarityvi.com> */
2237 /* Adlink RTV24 with special unlock codes */ 2378 /* Adlink RTV24 with special unlock codes */
2238 .name = "Adlink RTV24", 2379 .name = "Adlink RTV24",
2239 .video_inputs = 4, 2380 .video_inputs = 4,
2240 .audio_inputs = 1, 2381 .audio_inputs = 1,
2241 .tuner = 0, 2382 .tuner = 0,
2242 .svhs = 2, 2383 .svhs = 2,
2243 .muxsel = { 2, 3, 1, 0}, 2384 .muxsel = { 2, 3, 1, 0},
2244 .tuner_type = -1, 2385 .tuner_type = -1,
2245 .pll = PLL_28, 2386 .tuner_addr = ADDR_UNSET,
2246 2387 .pll = PLL_28,
2388},
2389{
2390 /* ---- card 0x87---------------------------------- */
2391 /* Michael Krufky <mkrufky@m1k.net> */
2392 .name = "DVICO FusionHDTV 5 Lite",
2393 .tuner = 0,
2394 .tuner_type = TUNER_LG_TDVS_H062F,
2395 .tuner_addr = ADDR_UNSET,
2396 .video_inputs = 2,
2397 .audio_inputs = 1,
2398 .svhs = 2,
2399 .muxsel = { 2, 3 },
2400 .gpiomask = 0x00e00007,
2401 .audiomux = { 0x00400005, 0, 0, 0, 0, 0 },
2402 .no_msp34xx = 1,
2403 .no_tda9875 = 1,
2404 .no_tda7432 = 1,
2405},{
2406 /* ---- card 0x88---------------------------------- */
2407 /* Mauro Carvalho Chehab <mchehab@brturbo.com.br> */
2408 .name = "Acorp Y878F",
2409 .video_inputs = 3,
2410 .audio_inputs = 1,
2411 .tuner = 0,
2412 .svhs = 2,
2413 .gpiomask = 0x01fe00,
2414 .muxsel = { 2, 3, 1, 1},
2415 .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 },
2416 .needs_tvaudio = 1,
2417 .pll = PLL_28,
2418 .tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
2419 .tuner_addr = 0xc1 >>1,
2420 .has_radio = 1,
2247}}; 2421}};
2248 2422
2249static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); 2423static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
@@ -2355,32 +2529,32 @@ static void flyvideo_gpio(struct bttv *btv)
2355 int tuner=-1,ttype; 2529 int tuner=-1,ttype;
2356 2530
2357 gpio_inout(0xffffff, 0); 2531 gpio_inout(0xffffff, 0);
2358 udelay(8); // without this we would see the 0x1800 mask 2532 udelay(8); /* without this we would see the 0x1800 mask */
2359 gpio = gpio_read(); 2533 gpio = gpio_read();
2360 /* FIXME: must restore OUR_EN ??? */ 2534 /* FIXME: must restore OUR_EN ??? */
2361 2535
2362 // all cards provide GPIO info, some have an additional eeprom 2536 /* all cards provide GPIO info, some have an additional eeprom
2363 // LR50: GPIO coding can be found lower right CP1 .. CP9 2537 * LR50: GPIO coding can be found lower right CP1 .. CP9
2364 // CP9=GPIO23 .. CP1=GPIO15; when OPEN, the corresponding GPIO reads 1. 2538 * CP9=GPIO23 .. CP1=GPIO15; when OPEN, the corresponding GPIO reads 1.
2365 // GPIO14-12: n.c. 2539 * GPIO14-12: n.c.
2366 // LR90: GP9=GPIO23 .. GP1=GPIO15 (right above the bt878) 2540 * LR90: GP9=GPIO23 .. GP1=GPIO15 (right above the bt878)
2367
2368 // lowest 3 bytes are remote control codes (no handshake needed)
2369 // xxxFFF: No remote control chip soldered
2370 // xxxF00(LR26/LR50), xxxFE0(LR90): Remote control chip (LVA001 or CF45) soldered
2371 // Note: Some bits are Audio_Mask !
2372 2541
2542 * lowest 3 bytes are remote control codes (no handshake needed)
2543 * xxxFFF: No remote control chip soldered
2544 * xxxF00(LR26/LR50), xxxFE0(LR90): Remote control chip (LVA001 or CF45) soldered
2545 * Note: Some bits are Audio_Mask !
2546 */
2373 ttype=(gpio&0x0f0000)>>16; 2547 ttype=(gpio&0x0f0000)>>16;
2374 switch(ttype) { 2548 switch(ttype) {
2375 case 0x0: tuner=2; // NTSC, e.g. TPI8NSR11P 2549 case 0x0: tuner=2; /* NTSC, e.g. TPI8NSR11P */
2376 break; 2550 break;
2377 case 0x2: tuner=39;// LG NTSC (newer TAPC series) TAPC-H701P 2551 case 0x2: tuner=39;/* LG NTSC (newer TAPC series) TAPC-H701P */
2378 break; 2552 break;
2379 case 0x4: tuner=5; // Philips PAL TPI8PSB02P, TPI8PSB12P, TPI8PSB12D or FI1216, FM1216 2553 case 0x4: tuner=5; /* Philips PAL TPI8PSB02P, TPI8PSB12P, TPI8PSB12D or FI1216, FM1216 */
2380 break; 2554 break;
2381 case 0x6: tuner=37; // LG PAL (newer TAPC series) TAPC-G702P 2555 case 0x6: tuner=37;/* LG PAL (newer TAPC series) TAPC-G702P */
2382 break; 2556 break;
2383 case 0xC: tuner=3; // Philips SECAM(+PAL) FQ1216ME or FI1216MF 2557 case 0xC: tuner=3; /* Philips SECAM(+PAL) FQ1216ME or FI1216MF */
2384 break; 2558 break;
2385 default: 2559 default:
2386 printk(KERN_INFO "bttv%d: FlyVideo_gpio: unknown tuner type.\n", btv->c.nr); 2560 printk(KERN_INFO "bttv%d: FlyVideo_gpio: unknown tuner type.\n", btv->c.nr);
@@ -2388,15 +2562,16 @@ static void flyvideo_gpio(struct bttv *btv)
2388 2562
2389 has_remote = gpio & 0x800000; 2563 has_remote = gpio & 0x800000;
2390 has_radio = gpio & 0x400000; 2564 has_radio = gpio & 0x400000;
2391 // unknown 0x200000; 2565 /* unknown 0x200000;
2392 // unknown2 0x100000; 2566 * unknown2 0x100000; */
2393 is_capture_only = !(gpio & 0x008000); //GPIO15 2567 is_capture_only = !(gpio & 0x008000); /* GPIO15 */
2394 has_tda9820_tda9821 = !(gpio & 0x004000); 2568 has_tda9820_tda9821 = !(gpio & 0x004000);
2395 is_lr90 = !(gpio & 0x002000); // else LR26/LR50 (LR38/LR51 f. capture only) 2569 is_lr90 = !(gpio & 0x002000); /* else LR26/LR50 (LR38/LR51 f. capture only) */
2396 // gpio & 0x001000 // output bit for audio routing 2570 /*
2571 * gpio & 0x001000 output bit for audio routing */
2397 2572
2398 if(is_capture_only) 2573 if(is_capture_only)
2399 tuner=4; // No tuner present 2574 tuner=4; /* No tuner present */
2400 2575
2401 printk(KERN_INFO "bttv%d: FlyVideo Radio=%s RemoteControl=%s Tuner=%d gpio=0x%06x\n", 2576 printk(KERN_INFO "bttv%d: FlyVideo Radio=%s RemoteControl=%s Tuner=%d gpio=0x%06x\n",
2402 btv->c.nr, has_radio? "yes":"no ", has_remote? "yes":"no ", tuner, gpio); 2577 btv->c.nr, has_radio? "yes":"no ", has_remote? "yes":"no ", tuner, gpio);
@@ -2404,15 +2579,15 @@ static void flyvideo_gpio(struct bttv *btv)
2404 btv->c.nr, is_lr90?"yes":"no ", has_tda9820_tda9821?"yes":"no ", 2579 btv->c.nr, is_lr90?"yes":"no ", has_tda9820_tda9821?"yes":"no ",
2405 is_capture_only?"yes":"no "); 2580 is_capture_only?"yes":"no ");
2406 2581
2407 if(tuner!= -1) // only set if known tuner autodetected, else let insmod option through 2582 if(tuner!= -1) /* only set if known tuner autodetected, else let insmod option through */
2408 btv->tuner_type = tuner; 2583 btv->tuner_type = tuner;
2409 btv->has_radio = has_radio; 2584 btv->has_radio = has_radio;
2410 2585
2411 // LR90 Audio Routing is done by 2 hef4052, so Audio_Mask has 4 bits: 0x001c80 2586 /* LR90 Audio Routing is done by 2 hef4052, so Audio_Mask has 4 bits: 0x001c80
2412 // LR26/LR50 only has 1 hef4052, Audio_Mask 0x000c00 2587 * LR26/LR50 only has 1 hef4052, Audio_Mask 0x000c00
2413 // Audio options: from tuner, from tda9821/tda9821(mono,stereo,sap), from tda9874, ext., mute 2588 * Audio options: from tuner, from tda9821/tda9821(mono,stereo,sap), from tda9874, ext., mute */
2414 if(has_tda9820_tda9821) btv->audio_hook = lt9415_audio; 2589 if(has_tda9820_tda9821) btv->audio_hook = lt9415_audio;
2415 //todo: if(has_tda9874) btv->audio_hook = fv2000s_audio; 2590 /* todo: if(has_tda9874) btv->audio_hook = fv2000s_audio; */
2416} 2591}
2417 2592
2418static int miro_tunermap[] = { 0,6,2,3, 4,5,6,0, 3,0,4,5, 5,2,16,1, 2593static int miro_tunermap[] = { 0,6,2,3, 4,5,6,0, 3,0,4,5, 5,2,16,1,
@@ -2633,6 +2808,8 @@ void __devinit bttv_init_card1(struct bttv *btv)
2633void __devinit bttv_init_card2(struct bttv *btv) 2808void __devinit bttv_init_card2(struct bttv *btv)
2634{ 2809{
2635 int tda9887; 2810 int tda9887;
2811 int addr=ADDR_UNSET;
2812
2636 btv->tuner_type = -1; 2813 btv->tuner_type = -1;
2637 2814
2638 if (BTTV_UNKNOWN == btv->c.type) { 2815 if (BTTV_UNKNOWN == btv->c.type) {
@@ -2773,9 +2950,12 @@ void __devinit bttv_init_card2(struct bttv *btv)
2773 btv->pll.pll_current = -1; 2950 btv->pll.pll_current = -1;
2774 2951
2775 /* tuner configuration (from card list / autodetect / insmod option) */ 2952 /* tuner configuration (from card list / autodetect / insmod option) */
2776 if (UNSET != bttv_tvcards[btv->c.type].tuner_type) 2953 if (ADDR_UNSET != bttv_tvcards[btv->c.type].tuner_addr)
2954 addr = bttv_tvcards[btv->c.type].tuner_addr;
2955
2956 if (UNSET != bttv_tvcards[btv->c.type].tuner_type)
2777 if(UNSET == btv->tuner_type) 2957 if(UNSET == btv->tuner_type)
2778 btv->tuner_type = bttv_tvcards[btv->c.type].tuner_type; 2958 btv->tuner_type = bttv_tvcards[btv->c.type].tuner_type;
2779 if (UNSET != tuner[btv->c.nr]) 2959 if (UNSET != tuner[btv->c.nr])
2780 btv->tuner_type = tuner[btv->c.nr]; 2960 btv->tuner_type = tuner[btv->c.nr];
2781 printk("bttv%d: using tuner=%d\n",btv->c.nr,btv->tuner_type); 2961 printk("bttv%d: using tuner=%d\n",btv->c.nr,btv->tuner_type);
@@ -2787,7 +2967,7 @@ void __devinit bttv_init_card2(struct bttv *btv)
2787 2967
2788 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV; 2968 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;
2789 tun_setup.type = btv->tuner_type; 2969 tun_setup.type = btv->tuner_type;
2790 tun_setup.addr = ADDR_UNSET; 2970 tun_setup.addr = addr;
2791 2971
2792 bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup); 2972 bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup);
2793 } 2973 }
@@ -2902,7 +3082,7 @@ static int terratec_active_radio_upgrade(struct bttv *btv)
2902 btv->mbox_csel = 1 << 10; 3082 btv->mbox_csel = 1 << 10;
2903 3083
2904 freq=88000/62.5; 3084 freq=88000/62.5;
2905 tea5757_write(btv, 5 * freq + 0x358); // write 0x1ed8 3085 tea5757_write(btv, 5 * freq + 0x358); /* write 0x1ed8 */
2906 if (0x1ed8 == tea5757_read(btv)) { 3086 if (0x1ed8 == tea5757_read(btv)) {
2907 printk("bttv%d: Terratec Active Radio Upgrade found.\n", 3087 printk("bttv%d: Terratec Active Radio Upgrade found.\n",
2908 btv->c.nr); 3088 btv->c.nr);
@@ -3073,7 +3253,7 @@ static void __devinit osprey_eeprom(struct bttv *btv)
3073 case 0x0060: 3253 case 0x0060:
3074 case 0x0070: 3254 case 0x0070:
3075 btv->c.type = BTTV_OSPREY2x0; 3255 btv->c.type = BTTV_OSPREY2x0;
3076 //enable output on select control lines 3256 /* enable output on select control lines */
3077 gpio_inout(0xffffff,0x000303); 3257 gpio_inout(0xffffff,0x000303);
3078 break; 3258 break;
3079 default: 3259 default:
@@ -3105,7 +3285,7 @@ static int tuner_1_table[] = {
3105 TUNER_TEMIC_NTSC, TUNER_TEMIC_PAL, 3285 TUNER_TEMIC_NTSC, TUNER_TEMIC_PAL,
3106 TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, 3286 TUNER_TEMIC_PAL, TUNER_TEMIC_PAL,
3107 TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, 3287 TUNER_TEMIC_PAL, TUNER_TEMIC_PAL,
3108 TUNER_TEMIC_4012FY5, TUNER_TEMIC_4012FY5, //TUNER_TEMIC_SECAM 3288 TUNER_TEMIC_4012FY5, TUNER_TEMIC_4012FY5, /* TUNER_TEMIC_SECAM */
3109 TUNER_TEMIC_4012FY5, TUNER_TEMIC_PAL}; 3289 TUNER_TEMIC_4012FY5, TUNER_TEMIC_PAL};
3110 3290
3111static void __devinit avermedia_eeprom(struct bttv *btv) 3291static void __devinit avermedia_eeprom(struct bttv *btv)
@@ -3126,7 +3306,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv)
3126 3306
3127 if (tuner_make == 4) 3307 if (tuner_make == 4)
3128 if(tuner_format == 0x09) 3308 if(tuner_format == 0x09)
3129 tuner = TUNER_LG_NTSC_NEW_TAPC; // TAPC-G702P 3309 tuner = TUNER_LG_NTSC_NEW_TAPC; /* TAPC-G702P */
3130 3310
3131 printk(KERN_INFO "bttv%d: Avermedia eeprom[0x%02x%02x]: tuner=", 3311 printk(KERN_INFO "bttv%d: Avermedia eeprom[0x%02x%02x]: tuner=",
3132 btv->c.nr,eeprom_data[0x41],eeprom_data[0x42]); 3312 btv->c.nr,eeprom_data[0x41],eeprom_data[0x42]);
@@ -3143,7 +3323,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv)
3143/* used on Voodoo TV/FM (Voodoo 200), S0 wired to 0x10000 */ 3323/* used on Voodoo TV/FM (Voodoo 200), S0 wired to 0x10000 */
3144void bttv_tda9880_setnorm(struct bttv *btv, int norm) 3324void bttv_tda9880_setnorm(struct bttv *btv, int norm)
3145{ 3325{
3146 // fix up our card entry 3326 /* fix up our card entry */
3147 if(norm==VIDEO_MODE_NTSC) { 3327 if(norm==VIDEO_MODE_NTSC) {
3148 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[0]=0x957fff; 3328 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[0]=0x957fff;
3149 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x957fff; 3329 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x957fff;
@@ -3154,7 +3334,7 @@ void bttv_tda9880_setnorm(struct bttv *btv, int norm)
3154 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x947fff; 3334 bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x947fff;
3155 dprintk("bttv_tda9880_setnorm to PAL\n"); 3335 dprintk("bttv_tda9880_setnorm to PAL\n");
3156 } 3336 }
3157 // set GPIO according 3337 /* set GPIO according */
3158 gpio_bits(bttv_tvcards[btv->c.type].gpiomask, 3338 gpio_bits(bttv_tvcards[btv->c.type].gpiomask,
3159 bttv_tvcards[btv->c.type].audiomux[btv->audio]); 3339 bttv_tvcards[btv->c.type].audiomux[btv->audio]);
3160} 3340}
@@ -3447,7 +3627,7 @@ static int tea5757_read(struct bttv *btv)
3447 udelay(10); 3627 udelay(10);
3448 timeout= jiffies + HZ; 3628 timeout= jiffies + HZ;
3449 3629
3450 // wait for DATA line to go low; error if it doesn't 3630 /* wait for DATA line to go low; error if it doesn't */
3451 while (bus_in(btv,btv->mbox_data) && time_before(jiffies, timeout)) 3631 while (bus_in(btv,btv->mbox_data) && time_before(jiffies, timeout))
3452 schedule(); 3632 schedule();
3453 if (bus_in(btv,btv->mbox_data)) { 3633 if (bus_in(btv,btv->mbox_data)) {
@@ -3574,8 +3754,8 @@ gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set)
3574 con = 0x300; 3754 con = 0x300;
3575 if (v->mode & VIDEO_SOUND_STEREO) 3755 if (v->mode & VIDEO_SOUND_STEREO)
3576 con = 0x200; 3756 con = 0x200;
3577// if (v->mode & VIDEO_SOUND_MONO) 3757/* if (v->mode & VIDEO_SOUND_MONO)
3578// con = 0x100; 3758 * con = 0x100; */
3579 gpio_bits(0x300, con); 3759 gpio_bits(0x300, con);
3580 } else { 3760 } else {
3581 v->mode = VIDEO_SOUND_STEREO | 3761 v->mode = VIDEO_SOUND_STEREO |
@@ -3718,7 +3898,7 @@ lt9415_audio(struct bttv *btv, struct video_audio *v, int set)
3718 } 3898 }
3719} 3899}
3720 3900
3721// TDA9821 on TerraTV+ Bt848, Bt878 3901/* TDA9821 on TerraTV+ Bt848, Bt878 */
3722static void 3902static void
3723terratv_audio(struct bttv *btv, struct video_audio *v, int set) 3903terratv_audio(struct bttv *btv, struct video_audio *v, int set)
3724{ 3904{
@@ -3818,7 +3998,7 @@ fv2000s_audio(struct bttv *btv, struct video_audio *v, int set)
3818 } 3998 }
3819 if ((v->mode & (VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2)) 3999 if ((v->mode & (VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2))
3820 || (v->mode & VIDEO_SOUND_STEREO)) { 4000 || (v->mode & VIDEO_SOUND_STEREO)) {
3821 val = 0x1080; //-dk-???: 0x0880, 0x0080, 0x1800 ... 4001 val = 0x1080; /*-dk-???: 0x0880, 0x0080, 0x1800 ... */
3822 } 4002 }
3823 if (val != 0xffff) { 4003 if (val != 0xffff) {
3824 gpio_bits(0x1800, val); 4004 gpio_bits(0x1800, val);
@@ -3869,10 +4049,10 @@ adtvk503_audio(struct bttv *btv, struct video_audio *v, int set)
3869{ 4049{
3870 unsigned int con = 0xffffff; 4050 unsigned int con = 0xffffff;
3871 4051
3872 //btaor(0x1e0000, ~0x1e0000, BT848_GPIO_OUT_EN); 4052 /* btaor(0x1e0000, ~0x1e0000, BT848_GPIO_OUT_EN); */
3873 4053
3874 if (set) { 4054 if (set) {
3875 //btor(***, BT848_GPIO_OUT_EN); 4055 /* btor(***, BT848_GPIO_OUT_EN); */
3876 if (v->mode & VIDEO_SOUND_LANG1) 4056 if (v->mode & VIDEO_SOUND_LANG1)
3877 con = 0x00000000; 4057 con = 0x00000000;
3878 if (v->mode & VIDEO_SOUND_LANG2) 4058 if (v->mode & VIDEO_SOUND_LANG2)
@@ -4079,14 +4259,14 @@ static void kodicom4400r_init(struct bttv *btv)
4079 master[btv->c.nr+2] = btv; 4259 master[btv->c.nr+2] = btv;
4080} 4260}
4081 4261
4082// The Grandtec X-Guard framegrabber card uses two Dual 4-channel 4262/* The Grandtec X-Guard framegrabber card uses two Dual 4-channel
4083// video multiplexers to provide up to 16 video inputs. These 4263 * video multiplexers to provide up to 16 video inputs. These
4084// multiplexers are controlled by the lower 8 GPIO pins of the 4264 * multiplexers are controlled by the lower 8 GPIO pins of the
4085// bt878. The multiplexers probably Pericom PI5V331Q or similar. 4265 * bt878. The multiplexers probably Pericom PI5V331Q or similar.
4086
4087// xxx0 is pin xxx of multiplexer U5,
4088// yyy1 is pin yyy of multiplexer U2
4089 4266
4267 * xxx0 is pin xxx of multiplexer U5,
4268 * yyy1 is pin yyy of multiplexer U2
4269 */
4090#define ENA0 0x01 4270#define ENA0 0x01
4091#define ENB0 0x02 4271#define ENB0 0x02
4092#define ENA1 0x04 4272#define ENA1 0x04
@@ -4157,14 +4337,14 @@ static void picolo_tetra_muxsel (struct bttv* btv, unsigned int input)
4157 4337
4158static void ivc120_muxsel(struct bttv *btv, unsigned int input) 4338static void ivc120_muxsel(struct bttv *btv, unsigned int input)
4159{ 4339{
4160 // Simple maths 4340 /* Simple maths */
4161 int key = input % 4; 4341 int key = input % 4;
4162 int matrix = input / 4; 4342 int matrix = input / 4;
4163 4343
4164 dprintk("bttv%d: ivc120_muxsel: Input - %02d | TDA - %02d | In - %02d\n", 4344 dprintk("bttv%d: ivc120_muxsel: Input - %02d | TDA - %02d | In - %02d\n",
4165 btv->c.nr, input, matrix, key); 4345 btv->c.nr, input, matrix, key);
4166 4346
4167 // Handles the input selection on the TDA8540's 4347 /* Handles the input selection on the TDA8540's */
4168 bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x00, 4348 bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x00,
4169 ((matrix == 3) ? (key | key << 2) : 0x00), 1); 4349 ((matrix == 3) ? (key | key << 2) : 0x00), 1);
4170 bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x00, 4350 bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x00,
@@ -4174,17 +4354,17 @@ static void ivc120_muxsel(struct bttv *btv, unsigned int input)
4174 bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x00, 4354 bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x00,
4175 ((matrix == 2) ? (key | key << 2) : 0x00), 1); 4355 ((matrix == 2) ? (key | key << 2) : 0x00), 1);
4176 4356
4177 // Handles the output enables on the TDA8540's 4357 /* Handles the output enables on the TDA8540's */
4178 bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x02, 4358 bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x02,
4179 ((matrix == 3) ? 0x03 : 0x00), 1); // 13 - 16 4359 ((matrix == 3) ? 0x03 : 0x00), 1); /* 13 - 16 */
4180 bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x02, 4360 bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x02,
4181 ((matrix == 0) ? 0x03 : 0x00), 1); // 1-4 4361 ((matrix == 0) ? 0x03 : 0x00), 1); /* 1-4 */
4182 bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x02, 4362 bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x02,
4183 ((matrix == 1) ? 0x03 : 0x00), 1); // 5-8 4363 ((matrix == 1) ? 0x03 : 0x00), 1); /* 5-8 */
4184 bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x02, 4364 bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x02,
4185 ((matrix == 2) ? 0x03 : 0x00), 1); // 9-12 4365 ((matrix == 2) ? 0x03 : 0x00), 1); /* 9-12 */
4186 4366
4187 // Selects MUX0 for input on the 878 4367 /* Selects MUX0 for input on the 878 */
4188 btaor((0)<<5, ~(3<<5), BT848_IFORM); 4368 btaor((0)<<5, ~(3<<5), BT848_IFORM);
4189} 4369}
4190 4370
@@ -4305,7 +4485,6 @@ void __devinit bttv_check_chipset(void)
4305 } 4485 }
4306 if (UNSET != latency) 4486 if (UNSET != latency)
4307 printk(KERN_INFO "bttv: pci latency fixup [%d]\n",latency); 4487 printk(KERN_INFO "bttv: pci latency fixup [%d]\n",latency);
4308
4309 while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL, 4488 while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL,
4310 PCI_DEVICE_ID_INTEL_82441, dev))) { 4489 PCI_DEVICE_ID_INTEL_82441, dev))) {
4311 unsigned char b; 4490 unsigned char b;
diff --git a/drivers/media/video/bttv-driver.c b/drivers/media/video/bttv-driver.c
index 087efb4dea09..53ecdbf46222 100644
--- a/drivers/media/video/bttv-driver.c
+++ b/drivers/media/video/bttv-driver.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-driver.c,v 1.52 2005/08/04 00:55:16 mchehab Exp $
3 2
4 bttv - Bt848 frame grabber driver 3 bttv - Bt848 frame grabber driver
5 4
@@ -42,6 +41,9 @@
42 41
43#include "bttvp.h" 42#include "bttvp.h"
44 43
44#include "rds.h"
45
46
45unsigned int bttv_num; /* number of Bt848s in use */ 47unsigned int bttv_num; /* number of Bt848s in use */
46struct bttv bttvs[BTTV_MAX]; 48struct bttv bttvs[BTTV_MAX];
47 49
@@ -3128,15 +3130,12 @@ static int radio_open(struct inode *inode, struct file *file)
3128 3130
3129 dprintk("bttv%d: open called (radio)\n",btv->c.nr); 3131 dprintk("bttv%d: open called (radio)\n",btv->c.nr);
3130 down(&btv->lock); 3132 down(&btv->lock);
3131 if (btv->radio_user) { 3133
3132 up(&btv->lock);
3133 return -EBUSY;
3134 }
3135 btv->radio_user++; 3134 btv->radio_user++;
3135
3136 file->private_data = btv; 3136 file->private_data = btv;
3137 3137
3138 i2c_vidiocschan(btv); 3138 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
3139 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
3140 audio_mux(btv,AUDIO_RADIO); 3139 audio_mux(btv,AUDIO_RADIO);
3141 3140
3142 up(&btv->lock); 3141 up(&btv->lock);
@@ -3145,9 +3144,13 @@ static int radio_open(struct inode *inode, struct file *file)
3145 3144
3146static int radio_release(struct inode *inode, struct file *file) 3145static int radio_release(struct inode *inode, struct file *file)
3147{ 3146{
3148 struct bttv *btv = file->private_data; 3147 struct bttv *btv = file->private_data;
3148 struct rds_command cmd;
3149 3149
3150 btv->radio_user--; 3150 btv->radio_user--;
3151
3152 bttv_call_i2c_clients(btv, RDS_CMD_CLOSE, &cmd);
3153
3151 return 0; 3154 return 0;
3152} 3155}
3153 3156
@@ -3203,13 +3206,42 @@ static int radio_ioctl(struct inode *inode, struct file *file,
3203 return video_usercopy(inode, file, cmd, arg, radio_do_ioctl); 3206 return video_usercopy(inode, file, cmd, arg, radio_do_ioctl);
3204} 3207}
3205 3208
3209static ssize_t radio_read(struct file *file, char __user *data,
3210 size_t count, loff_t *ppos)
3211{
3212 struct bttv *btv = file->private_data;
3213 struct rds_command cmd;
3214 cmd.block_count = count/3;
3215 cmd.buffer = data;
3216 cmd.instance = file;
3217 cmd.result = -ENODEV;
3218
3219 bttv_call_i2c_clients(btv, RDS_CMD_READ, &cmd);
3220
3221 return cmd.result;
3222}
3223
3224static unsigned int radio_poll(struct file *file, poll_table *wait)
3225{
3226 struct bttv *btv = file->private_data;
3227 struct rds_command cmd;
3228 cmd.instance = file;
3229 cmd.event_list = wait;
3230 cmd.result = -ENODEV;
3231 bttv_call_i2c_clients(btv, RDS_CMD_POLL, &cmd);
3232
3233 return cmd.result;
3234}
3235
3206static struct file_operations radio_fops = 3236static struct file_operations radio_fops =
3207{ 3237{
3208 .owner = THIS_MODULE, 3238 .owner = THIS_MODULE,
3209 .open = radio_open, 3239 .open = radio_open,
3240 .read = radio_read,
3210 .release = radio_release, 3241 .release = radio_release,
3211 .ioctl = radio_ioctl, 3242 .ioctl = radio_ioctl,
3212 .llseek = no_llseek, 3243 .llseek = no_llseek,
3244 .poll = radio_poll,
3213}; 3245};
3214 3246
3215static struct video_device radio_template = 3247static struct video_device radio_template =
diff --git a/drivers/media/video/bttv-gpio.c b/drivers/media/video/bttv-gpio.c
index 77320cdf205f..6b280c03e398 100644
--- a/drivers/media/video/bttv-gpio.c
+++ b/drivers/media/video/bttv-gpio.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-gpio.c,v 1.7 2005/02/16 12:14:10 kraxel Exp $
3 2
4 bttv-gpio.c -- gpio sub drivers 3 bttv-gpio.c -- gpio sub drivers
5 4
diff --git a/drivers/media/video/bttv-i2c.c b/drivers/media/video/bttv-i2c.c
index 706dc48df962..e684df37eb0e 100644
--- a/drivers/media/video/bttv-i2c.c
+++ b/drivers/media/video/bttv-i2c.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-i2c.c,v 1.25 2005/07/05 17:37:35 nsh Exp $
3 2
4 bttv-i2c.c -- all the i2c code is here 3 bttv-i2c.c -- all the i2c code is here
5 4
@@ -381,6 +380,7 @@ void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr)
381} 380}
382 381
383static char *i2c_devs[128] = { 382static char *i2c_devs[128] = {
383 [ 0x1c >> 1 ] = "lgdt330x",
384 [ 0x30 >> 1 ] = "IR (hauppauge)", 384 [ 0x30 >> 1 ] = "IR (hauppauge)",
385 [ 0x80 >> 1 ] = "msp34xx", 385 [ 0x80 >> 1 ] = "msp34xx",
386 [ 0x86 >> 1 ] = "tda9887", 386 [ 0x86 >> 1 ] = "tda9887",
diff --git a/drivers/media/video/bttv-if.c b/drivers/media/video/bttv-if.c
index f7b5543a96a1..e8aada772b89 100644
--- a/drivers/media/video/bttv-if.c
+++ b/drivers/media/video/bttv-if.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-if.c,v 1.4 2004/11/17 18:47:47 kraxel Exp $
3 2
4 bttv-if.c -- old gpio interface to other kernel modules 3 bttv-if.c -- old gpio interface to other kernel modules
5 don't use in new code, will go away in 2.7 4 don't use in new code, will go away in 2.7
diff --git a/drivers/media/video/bttv-risc.c b/drivers/media/video/bttv-risc.c
index 9ed21fd190c6..a5ed99b89445 100644
--- a/drivers/media/video/bttv-risc.c
+++ b/drivers/media/video/bttv-risc.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-risc.c,v 1.10 2004/11/19 18:07:12 kraxel Exp $
3 2
4 bttv-risc.c -- interfaces to other kernel modules 3 bttv-risc.c -- interfaces to other kernel modules
5 4
diff --git a/drivers/media/video/bttv-vbi.c b/drivers/media/video/bttv-vbi.c
index 06f3e62b3e8d..f4f58c60f152 100644
--- a/drivers/media/video/bttv-vbi.c
+++ b/drivers/media/video/bttv-vbi.c
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttv-vbi.c,v 1.9 2005/01/13 17:22:33 kraxel Exp $
3 2
4 bttv - Bt848 frame grabber driver 3 bttv - Bt848 frame grabber driver
5 vbi interface 4 vbi interface
diff --git a/drivers/media/video/bttv.h b/drivers/media/video/bttv.h
index f2af9e1454f0..d254e90e3bb9 100644
--- a/drivers/media/video/bttv.h
+++ b/drivers/media/video/bttv.h
@@ -1,5 +1,4 @@
1/* 1/*
2 * $Id: bttv.h,v 1.22 2005/07/28 18:41:21 mchehab Exp $
3 * 2 *
4 * bttv - Bt848 frame grabber driver 3 * bttv - Bt848 frame grabber driver
5 * 4 *
@@ -218,6 +217,8 @@ struct tvcard
218#define PLL_35 2 217#define PLL_35 2
219 218
220 unsigned int tuner_type; 219 unsigned int tuner_type;
220 unsigned int tuner_addr;
221
221 unsigned int has_radio; 222 unsigned int has_radio;
222 void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set); 223 void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set);
223 void (*muxsel_hook)(struct bttv *btv, unsigned int input); 224 void (*muxsel_hook)(struct bttv *btv, unsigned int input);
diff --git a/drivers/media/video/bttvp.h b/drivers/media/video/bttvp.h
index aab094bc243d..a0eb0ce1aa96 100644
--- a/drivers/media/video/bttvp.h
+++ b/drivers/media/video/bttvp.h
@@ -1,5 +1,4 @@
1/* 1/*
2 $Id: bttvp.h,v 1.21 2005/07/15 21:44:14 mchehab Exp $
3 2
4 bttv - Bt848 frame grabber driver 3 bttv - Bt848 frame grabber driver
5 4
@@ -26,7 +25,7 @@
26#ifndef _BTTVP_H_ 25#ifndef _BTTVP_H_
27#define _BTTVP_H_ 26#define _BTTVP_H_
28 27
29#include <linux/version.h> 28#include <linux/utsname.h>
30#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,16) 29#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,16)
31 30
32#include <linux/types.h> 31#include <linux/types.h>