aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134/saa7134-cards.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-cards.c')
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c294
1 files changed, 288 insertions, 6 deletions
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 6bc63a4086c1..fdd7f48f3b76 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -536,7 +536,7 @@ struct saa7134_board saa7134_boards[] = {
536 .radio = { 536 .radio = {
537 .name = name_radio, 537 .name = name_radio,
538 .amux = LINE2, 538 .amux = LINE2,
539 }, 539 },
540 }, 540 },
541 [SAA7134_BOARD_MD7134] = { 541 [SAA7134_BOARD_MD7134] = {
542 .name = "Medion 7134", 542 .name = "Medion 7134",
@@ -640,6 +640,32 @@ struct saa7134_board saa7134_boards[] = {
640 .tv = 1, 640 .tv = 1,
641 }}, 641 }},
642 }, 642 },
643 [SAA7134_BOARD_ELSA_700TV] = {
644 .name = "ELSA EX-VISION 700TV",
645 .audio_clock = 0x00187de7,
646 .tuner_type = TUNER_HITACHI_NTSC,
647 .radio_type = UNSET,
648 .tuner_addr = ADDR_UNSET,
649 .radio_addr = ADDR_UNSET,
650 .inputs = {{
651 .name = name_tv,
652 .vmux = 4,
653 .amux = LINE2,
654 .tv = 1,
655 },{
656 .name = name_comp1,
657 .vmux = 6,
658 .amux = LINE1,
659 },{
660 .name = name_svideo,
661 .vmux = 7,
662 .amux = LINE1,
663 }},
664 .mute = {
665 .name = name_mute,
666 .amux = TV,
667 },
668 },
643 [SAA7134_BOARD_ASUSTeK_TVFM7134] = { 669 [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
644 .name = "ASUS TV-FM 7134", 670 .name = "ASUS TV-FM 7134",
645 .audio_clock = 0x00187de7, 671 .audio_clock = 0x00187de7,
@@ -2002,7 +2028,7 @@ struct saa7134_board saa7134_boards[] = {
2002 [SAA7134_BOARD_FLYTV_DIGIMATRIX] = { 2028 [SAA7134_BOARD_FLYTV_DIGIMATRIX] = {
2003 .name = "FlyTV mini Asus Digimatrix", 2029 .name = "FlyTV mini Asus Digimatrix",
2004 .audio_clock = 0x00200000, 2030 .audio_clock = 0x00200000,
2005 .tuner_type = TUNER_LG_NTSC_TALN_MINI, 2031 .tuner_type = TUNER_LG_TALN,
2006 .radio_type = UNSET, 2032 .radio_type = UNSET,
2007 .tuner_addr = ADDR_UNSET, 2033 .tuner_addr = ADDR_UNSET,
2008 .radio_addr = ADDR_UNSET, 2034 .radio_addr = ADDR_UNSET,
@@ -2598,6 +2624,7 @@ struct saa7134_board saa7134_boards[] = {
2598 .tuner_addr = ADDR_UNSET, 2624 .tuner_addr = ADDR_UNSET,
2599 .radio_addr = ADDR_UNSET, 2625 .radio_addr = ADDR_UNSET,
2600 .gpiomask = 0x00200000, 2626 .gpiomask = 0x00200000,
2627 .mpeg = SAA7134_MPEG_DVB,
2601 .inputs = {{ 2628 .inputs = {{
2602 .name = name_tv, /* Analog broadcast/cable TV */ 2629 .name = name_tv, /* Analog broadcast/cable TV */
2603 .vmux = 1, 2630 .vmux = 1,
@@ -2623,6 +2650,164 @@ struct saa7134_board saa7134_boards[] = {
2623 .gpio = 0x000000, /* GPIO21=Low for FM radio antenna */ 2650 .gpio = 0x000000, /* GPIO21=Low for FM radio antenna */
2624 }, 2651 },
2625 }, 2652 },
2653 [SAA7134_BOARD_AVERMEDIA_777] = {
2654 .name = "AverTV DVB-T 777",
2655 .audio_clock = 0x00187de7,
2656 .tuner_type = TUNER_ABSENT,
2657 .radio_type = UNSET,
2658 .tuner_addr = ADDR_UNSET,
2659 .radio_addr = ADDR_UNSET,
2660 .mpeg = SAA7134_MPEG_DVB,
2661 .inputs = {{
2662 .name = name_comp1,
2663 .vmux = 0,
2664 .amux = LINE1,
2665 },{
2666 .name = name_svideo,
2667 .vmux = 8,
2668 .amux = LINE1,
2669 }},
2670 },
2671 [SAA7134_BOARD_FLYDVBT_LR301] = {
2672 /* LifeView FlyDVB-T */
2673 /* Giampiero Giancipoli <gianci@libero.it> */
2674 .name = "LifeView FlyDVB-T",
2675 .audio_clock = 0x00200000,
2676 .tuner_type = TUNER_ABSENT,
2677 .radio_type = UNSET,
2678 .tuner_addr = ADDR_UNSET,
2679 .radio_addr = ADDR_UNSET,
2680 .mpeg = SAA7134_MPEG_DVB,
2681 .inputs = {{
2682 .name = name_comp1, /* Composite input */
2683 .vmux = 3,
2684 .amux = LINE2,
2685 },{
2686 .name = name_svideo, /* S-Video signal on S-Video input */
2687 .vmux = 8,
2688 .amux = LINE2,
2689 }},
2690 },
2691 [SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331] = {
2692 .name = "ADS Instant TV Duo Cardbus PTV331",
2693 .audio_clock = 0x00200000,
2694 .tuner_type = TUNER_PHILIPS_TDA8290,
2695 .radio_type = UNSET,
2696 .tuner_addr = ADDR_UNSET,
2697 .radio_addr = ADDR_UNSET,
2698 .mpeg = SAA7134_MPEG_DVB,
2699 .gpiomask = 0x00600000, /* Bit 21 0=Radio, Bit 22 0=TV */
2700 .inputs = {{
2701 .name = name_tv,
2702 .vmux = 1,
2703 .amux = TV,
2704 .tv = 1,
2705 .gpio = 0x00200000,
2706 }},
2707 },
2708 [SAA7134_BOARD_TEVION_DVBT_220RF] = {
2709 .name = "Tevion/KWorld DVB-T 220RF",
2710 .audio_clock = 0x00187de7,
2711 .tuner_type = TUNER_PHILIPS_TDA8290,
2712 .radio_type = UNSET,
2713 .tuner_addr = ADDR_UNSET,
2714 .radio_addr = ADDR_UNSET,
2715 .mpeg = SAA7134_MPEG_DVB,
2716 .inputs = {{
2717 .name = name_tv,
2718 .vmux = 1,
2719 .amux = TV,
2720 .tv = 1,
2721 },{
2722 .name = name_comp1,
2723 .vmux = 3,
2724 .amux = LINE1,
2725 },{
2726 .name = name_svideo,
2727 .vmux = 0,
2728 .amux = LINE1,
2729 }},
2730 .radio = {
2731 .name = name_radio,
2732 .amux = LINE1,
2733 },
2734 },
2735 [SAA7134_BOARD_KWORLD_ATSC110] = {
2736 .name = "Kworld ATSC110",
2737 .audio_clock = 0x00187de7,
2738 .tuner_type = TUNER_PHILIPS_TUV1236D,
2739 .radio_type = UNSET,
2740 .tuner_addr = ADDR_UNSET,
2741 .radio_addr = ADDR_UNSET,
2742 .tda9887_conf = TDA9887_PRESENT,
2743 .mpeg = SAA7134_MPEG_DVB,
2744 .inputs = {{
2745 .name = name_tv,
2746 .vmux = 1,
2747 .amux = TV,
2748 .tv = 1,
2749 },{
2750 .name = name_comp1,
2751 .vmux = 3,
2752 .amux = LINE2,
2753 },{
2754 .name = name_svideo,
2755 .vmux = 8,
2756 .amux = LINE2,
2757 }},
2758 },
2759 [SAA7134_BOARD_AVERMEDIA_A169_B] = {
2760 /* AVerMedia A169 */
2761 /* Rickard Osser <ricky@osser.se> */
2762 /* This card has two saa7134 chips on it,
2763 but only one of them is currently working. */
2764 .name = "AVerMedia A169 B",
2765 .audio_clock = 0x02187de7,
2766 .tuner_type = TUNER_LG_TALN,
2767 .radio_type = UNSET,
2768 .tuner_addr = ADDR_UNSET,
2769 .radio_addr = ADDR_UNSET,
2770 .tda9887_conf = TDA9887_PRESENT,
2771 .gpiomask = 0x0a60000,
2772 },
2773 [SAA7134_BOARD_AVERMEDIA_A169_B1] = {
2774 /* AVerMedia A169 */
2775 /* Rickard Osser <ricky@osser.se> */
2776 .name = "AVerMedia A169 B1",
2777 .audio_clock = 0x02187de7,
2778 .tuner_type = TUNER_LG_TALN,
2779 .radio_type = UNSET,
2780 .tuner_addr = ADDR_UNSET,
2781 .radio_addr = ADDR_UNSET,
2782 .tda9887_conf = TDA9887_PRESENT,
2783 .gpiomask = 0xca60000,
2784 .inputs = {{
2785 .name = name_tv,
2786 .vmux = 4,
2787 .amux = TV,
2788 .tv = 1,
2789 .gpio = 0x04a61000,
2790 },{
2791 .name = name_comp2, /* Composite SVIDEO (B/W if signal is carried with SVIDEO) */
2792 .vmux = 1,
2793 .amux = LINE2,
2794 },{
2795 .name = name_svideo,
2796 .vmux = 9, /* 9 is correct as S-VIDEO1 according to a169.inf! */
2797 .amux = LINE1,
2798 }},
2799 },
2800 [SAA7134_BOARD_MD7134_BRIDGE_2] = {
2801 /* This card has two saa7134 chips on it,
2802 but only one of them is currently working.
2803 The programming for the primary decoder is
2804 in SAA7134_BOARD_MD7134 */
2805 .name = "Medion 7134 Bridge #2",
2806 .audio_clock = 0x00187de7,
2807 .radio_type = UNSET,
2808 .tuner_addr = ADDR_UNSET,
2809 .radio_addr = ADDR_UNSET,
2810 },
2626}; 2811};
2627 2812
2628const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); 2813const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -2753,6 +2938,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
2753 .driver_data = SAA7134_BOARD_ELSA_500TV, 2938 .driver_data = SAA7134_BOARD_ELSA_500TV,
2754 },{ 2939 },{
2755 .vendor = PCI_VENDOR_ID_PHILIPS, 2940 .vendor = PCI_VENDOR_ID_PHILIPS,
2941 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2942 .subvendor = 0x1048,
2943 .subdevice = 0x226c,
2944 .driver_data = SAA7134_BOARD_ELSA_700TV,
2945 },{
2946 .vendor = PCI_VENDOR_ID_PHILIPS,
2756 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 2947 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2757 .subvendor = PCI_VENDOR_ID_ASUSTEK, 2948 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2758 .subdevice = 0x4842, 2949 .subdevice = 0x4842,
@@ -3094,6 +3285,54 @@ struct pci_device_id saa7134_pci_tbl[] = {
3094 .subdevice = 0x0319, 3285 .subdevice = 0x0319,
3095 .driver_data = SAA7134_BOARD_FLYDVB_TRIO, 3286 .driver_data = SAA7134_BOARD_FLYDVB_TRIO,
3096 },{ 3287 },{
3288 .vendor = PCI_VENDOR_ID_PHILIPS,
3289 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, /* SAA 7131E */
3290 .subvendor = 0x1461,
3291 .subdevice = 0x2c05,
3292 .driver_data = SAA7134_BOARD_AVERMEDIA_777,
3293 },{
3294 .vendor = PCI_VENDOR_ID_PHILIPS,
3295 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
3296 .subvendor = 0x5168,
3297 .subdevice = 0x0301,
3298 .driver_data = SAA7134_BOARD_FLYDVBT_LR301,
3299 },{
3300 .vendor = PCI_VENDOR_ID_PHILIPS,
3301 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
3302 .subvendor = 0x0331,
3303 .subdevice = 0x1421,
3304 .driver_data = SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331,
3305 },{
3306 .vendor = PCI_VENDOR_ID_PHILIPS,
3307 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
3308 .subvendor = 0x17de,
3309 .subdevice = 0x7201,
3310 .driver_data = SAA7134_BOARD_TEVION_DVBT_220RF,
3311 },{
3312 .vendor = PCI_VENDOR_ID_PHILIPS,
3313 .device = PCI_DEVICE_ID_PHILIPS_SAA7133, /* SAA7135HL */
3314 .subvendor = 0x17de,
3315 .subdevice = 0x7350,
3316 .driver_data = SAA7134_BOARD_KWORLD_ATSC110,
3317 },{
3318 .vendor = PCI_VENDOR_ID_PHILIPS,
3319 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
3320 .subvendor = 0x1461,
3321 .subdevice = 0x7360,
3322 .driver_data = SAA7134_BOARD_AVERMEDIA_A169_B,
3323 },{
3324 .vendor = PCI_VENDOR_ID_PHILIPS,
3325 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
3326 .subvendor = 0x1461,
3327 .subdevice = 0x6360,
3328 .driver_data = SAA7134_BOARD_AVERMEDIA_A169_B1,
3329 },{
3330 .vendor = PCI_VENDOR_ID_PHILIPS,
3331 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
3332 .subvendor = 0x16be,
3333 .subdevice = 0x0005,
3334 .driver_data = SAA7134_BOARD_MD7134_BRIDGE_2,
3335 },{
3097 /* --- boards without eeprom + subsystem ID --- */ 3336 /* --- boards without eeprom + subsystem ID --- */
3098 .vendor = PCI_VENDOR_ID_PHILIPS, 3337 .vendor = PCI_VENDOR_ID_PHILIPS,
3099 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 3338 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
@@ -3193,13 +3432,15 @@ int saa7134_board_init1(struct saa7134_dev *dev)
3193 case SAA7134_BOARD_GOTVIEW_7135: 3432 case SAA7134_BOARD_GOTVIEW_7135:
3194 case SAA7134_BOARD_KWORLD_TERMINATOR: 3433 case SAA7134_BOARD_KWORLD_TERMINATOR:
3195 case SAA7134_BOARD_SEDNA_PC_TV_CARDBUS: 3434 case SAA7134_BOARD_SEDNA_PC_TV_CARDBUS:
3435 case SAA7134_BOARD_FLYDVBT_LR301:
3436 case SAA7134_BOARD_FLYDVBTDUO:
3196 dev->has_remote = SAA7134_REMOTE_GPIO; 3437 dev->has_remote = SAA7134_REMOTE_GPIO;
3197 break; 3438 break;
3198 case SAA7134_BOARD_MD5044: 3439 case SAA7134_BOARD_MD5044:
3199 printk("%s: seems there are two different versions of the MD5044\n" 3440 printk("%s: seems there are two different versions of the MD5044\n"
3200 "%s: (with the same ID) out there. If sound doesn't work for\n" 3441 "%s: (with the same ID) out there. If sound doesn't work for\n"
3201 "%s: you try the audio_clock_override=0x200000 insmod option.\n", 3442 "%s: you try the audio_clock_override=0x200000 insmod option.\n",
3202 dev->name,dev->name,dev->name); 3443 dev->name,dev->name,dev->name);
3203 break; 3444 break;
3204 case SAA7134_BOARD_CINERGY400_CARDBUS: 3445 case SAA7134_BOARD_CINERGY400_CARDBUS:
3205 /* power-up tuner chip */ 3446 /* power-up tuner chip */
@@ -3220,6 +3461,10 @@ int saa7134_board_init1(struct saa7134_dev *dev)
3220 saa_writeb(SAA7134_GPIO_GPMODE3, 0x08); 3461 saa_writeb(SAA7134_GPIO_GPMODE3, 0x08);
3221 saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x06); 3462 saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x06);
3222 break; 3463 break;
3464 case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331:
3465 saa_writeb(SAA7134_GPIO_GPMODE3, 0x08);
3466 saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00);
3467 break;
3223 case SAA7134_BOARD_AVERMEDIA_CARDBUS: 3468 case SAA7134_BOARD_AVERMEDIA_CARDBUS:
3224 /* power-up tuner chip */ 3469 /* power-up tuner chip */
3225 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); 3470 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff);
@@ -3242,6 +3487,13 @@ int saa7134_board_init1(struct saa7134_dev *dev)
3242 case SAA7134_BOARD_UPMOST_PURPLE_TV: 3487 case SAA7134_BOARD_UPMOST_PURPLE_TV:
3243 dev->has_remote = SAA7134_REMOTE_I2C; 3488 dev->has_remote = SAA7134_REMOTE_I2C;
3244 break; 3489 break;
3490 case SAA7134_BOARD_AVERMEDIA_A169_B:
3491 case SAA7134_BOARD_MD7134_BRIDGE_2:
3492 printk("%s: %s: dual saa713x broadcast decoders\n"
3493 "%s: Sorry, none of the inputs to this chip are supported yet.\n"
3494 "%s: Dual decoder functionality is disabled for now, use the other chip.\n",
3495 dev->name,card(dev).name,dev->name,dev->name);
3496 break;
3245 } 3497 }
3246 return 0; 3498 return 0;
3247} 3499}
@@ -3362,14 +3614,44 @@ int saa7134_board_init2(struct saa7134_dev *dev)
3362 } 3614 }
3363 break; 3615 break;
3364 case SAA7134_BOARD_PHILIPS_TIGER: 3616 case SAA7134_BOARD_PHILIPS_TIGER:
3617 case SAA7134_BOARD_TEVION_DVBT_220RF:
3365 case SAA7134_BOARD_ASUSTeK_P7131_DUAL: 3618 case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
3366 /* this is a hybrid board, initialize to analog mode */ 3619 /* this is a hybrid board, initialize to analog mode
3620 * and configure firmware eeprom address
3621 */
3367 { 3622 {
3368 u8 data[] = { 0x3c, 0x33, 0x68}; 3623 u8 data[] = { 0x3c, 0x33, 0x68};
3369 struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)}; 3624 struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
3370 i2c_transfer(&dev->i2c_adap, &msg, 1); 3625 i2c_transfer(&dev->i2c_adap, &msg, 1);
3371 } 3626 }
3372 break; 3627 break;
3628 case SAA7134_BOARD_FLYDVB_TRIO:
3629 {
3630 u8 data[] = { 0x3c, 0x33, 0x62};
3631 struct i2c_msg msg = {.addr=0x09, .flags=0, .buf=data, .len = sizeof(data)};
3632 i2c_transfer(&dev->i2c_adap, &msg, 1);
3633 }
3634 break;
3635 case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331:
3636 /* make the tda10046 find its eeprom */
3637 {
3638 u8 data[] = { 0x3c, 0x33, 0x62};
3639 struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
3640 i2c_transfer(&dev->i2c_adap, &msg, 1);
3641 }
3642 break;
3643 case SAA7134_BOARD_KWORLD_ATSC110:
3644 {
3645 /* enable tuner */
3646 int i;
3647 static const u8 buffer [] = { 0x10,0x12,0x13,0x04,0x16,0x00,0x14,0x04,0x017,0x00 };
3648 dev->i2c_client.addr = 0x0a;
3649 for (i = 0; i < 5; i++)
3650 if (2 != i2c_master_send(&dev->i2c_client,&buffer[i*2],2))
3651 printk(KERN_WARNING "%s: Unable to enable tuner(%i).\n",
3652 dev->name, i);
3653 }
3654 break;
3373 } 3655 }
3374 return 0; 3656 return 0;
3375} 3657}