浏览代码

V4L/DVB (4398): Add support for Acorp TV134DS + FlyDVB-S cards.

Add support for Acorp TV134DS and FlyDVB-S cards (both based on
tda10086+tda826x)

Signed-off-by: Igor M. Liplianin <liplianin@me.by>
Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Igor M. Liplianin 19 年之前
父节点
当前提交
e2ac28fa15

+ 1 - 0
Documentation/video4linux/CARDLIST.saa7134

@@ -95,3 +95,4 @@
  94 -> LifeView FlyDVB-T Hybrid Cardbus         [5168:3306,5168:3502]
  94 -> LifeView FlyDVB-T Hybrid Cardbus         [5168:3306,5168:3502]
  95 -> LifeView FlyVIDEO3000 (NTSC)             [5169:0138]
  95 -> LifeView FlyVIDEO3000 (NTSC)             [5169:0138]
  96 -> Medion Md8800 Quadro                     [16be:0007,16be:0008]
  96 -> Medion Md8800 Quadro                     [16be:0007,16be:0008]
+ 97 -> LifeView FlyDVB-S /Acorp TV134DS         [5168:0300,4e42:0300]

+ 38 - 0
drivers/media/video/saa7134/saa7134-cards.c

@@ -2914,6 +2914,27 @@ struct saa7134_board saa7134_boards[] = {
 			.amux   = LINE2,
 			.amux   = LINE2,
 		}},
 		}},
 	},
 	},
+	[SAA7134_BOARD_FLYDVBS_LR300] = {
+		/* LifeView FlyDVB-s */
+		/* Igor M. Liplianin <liplianin@tut.by> */
+		.name           = "LifeView FlyDVB-S /Acorp TV134DS",
+		.audio_clock    = 0x00200000,
+		.tuner_type     = TUNER_ABSENT,
+		.radio_type     = UNSET,
+		.tuner_addr	= ADDR_UNSET,
+		.radio_addr	= ADDR_UNSET,
+		.mpeg           = SAA7134_MPEG_DVB,
+		.inputs         = {{
+			.name = name_comp1,	/* Composite input */
+			.vmux = 3,
+			.amux = LINE1,
+		},{
+			.name = name_svideo,	/* S-Video signal on S-Video input */
+			.vmux = 8,
+			.amux = LINE1,
+		}},
+	},
+
 };
 };
 
 
 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -3444,6 +3465,18 @@ struct pci_device_id saa7134_pci_tbl[] = {
 		.subvendor    = 0x16be,
 		.subvendor    = 0x16be,
 		.subdevice    = 0x0005,
 		.subdevice    = 0x0005,
 		.driver_data  = SAA7134_BOARD_MD7134_BRIDGE_2,
 		.driver_data  = SAA7134_BOARD_MD7134_BRIDGE_2,
+	},{
+		.vendor       = PCI_VENDOR_ID_PHILIPS,
+		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+		.subvendor    = 0x5168,
+		.subdevice    = 0x0300,
+		.driver_data  = SAA7134_BOARD_FLYDVBS_LR300,
+	},{
+		.vendor       = PCI_VENDOR_ID_PHILIPS,
+		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+		.subvendor    = 0x4e42,
+		.subdevice    = 0x0300,/* LR300 */
+		.driver_data  = SAA7134_BOARD_FLYDVBS_LR300,
 	},{
 	},{
 		.vendor = PCI_VENDOR_ID_PHILIPS,
 		.vendor = PCI_VENDOR_ID_PHILIPS,
 		.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
 		.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
@@ -3597,6 +3630,11 @@ int saa7134_board_init1(struct saa7134_dev *dev)
 	case SAA7134_BOARD_FLYDVBTDUO:
 	case SAA7134_BOARD_FLYDVBTDUO:
 		dev->has_remote = SAA7134_REMOTE_GPIO;
 		dev->has_remote = SAA7134_REMOTE_GPIO;
 		break;
 		break;
+	case SAA7134_BOARD_FLYDVBS_LR300:
+		saa_writeb(SAA7134_GPIO_GPMODE3, 0x80);
+		saa_writeb(SAA7134_GPIO_GPSTATUS2, 0x40);
+		dev->has_remote = SAA7134_REMOTE_GPIO;
+		break;
 	case SAA7134_BOARD_MD5044:
 	case SAA7134_BOARD_MD5044:
 		printk("%s: seems there are two different versions of the MD5044\n"
 		printk("%s: seems there are two different versions of the MD5044\n"
 		       "%s: (with the same ID) out there.  If sound doesn't work for\n"
 		       "%s: (with the same ID) out there.  If sound doesn't work for\n"

+ 19 - 0
drivers/media/video/saa7134/saa7134-dvb.c

@@ -39,6 +39,9 @@
 #include "tda1004x.h"
 #include "tda1004x.h"
 #include "nxt200x.h"
 #include "nxt200x.h"
 
 
+#include "tda10086.h"
+#include "tda826x.h"
+#include "isl6421.h"
 MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
 MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 
 
@@ -1002,6 +1005,11 @@ static struct tda1004x_config md8800_dvbt_config = {
 	.request_firmware = NULL,
 	.request_firmware = NULL,
 };
 };
 
 
+static struct tda10086_config flydvbs = {
+	.demod_address = 0x0e,
+	.invert = 0,
+};
+
 /* ------------------------------------------------------------------ */
 /* ------------------------------------------------------------------ */
 
 
 static struct nxt200x_config avertvhda180 = {
 static struct nxt200x_config avertvhda180 = {
@@ -1199,6 +1207,17 @@ static int dvb_init(struct saa7134_dev *dev)
 			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tuv1236d);
 			dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tuv1236d);
 		}
 		}
 		break;
 		break;
+	case SAA7134_BOARD_FLYDVBS_LR300:
+		dev->dvb.frontend = dvb_attach(tda10086_attach, &flydvbs, &dev->i2c_adap);
+		if (dev->dvb.frontend) {
+			if (dvb_attach(tda826x_attach, dev->dvb.frontend, 0x60, &dev->i2c_adap, 0) == NULL) {
+				printk("%s: No tda826x found!\n", __FUNCTION__);
+			}
+			if (dvb_attach(isl6421_attach, dev->dvb.frontend, &dev->i2c_adap, 0x08, 0, 0) == NULL) {
+				printk("%s: No ISL6421 found!\n", __FUNCTION__);
+			}
+		}
+		break;
 	default:
 	default:
 		printk("%s: Huh? unknown DVB card?\n",dev->name);
 		printk("%s: Huh? unknown DVB card?\n",dev->name);
 		break;
 		break;

+ 1 - 0
drivers/media/video/saa7134/saa7134.h

@@ -224,6 +224,7 @@ struct saa7134_format {
 #define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
 #define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
 #define SAA7134_BOARD_FLYVIDEO3000_NTSC 95
 #define SAA7134_BOARD_FLYVIDEO3000_NTSC 95
 #define SAA7134_BOARD_MEDION_MD8800_QUADRO 96
 #define SAA7134_BOARD_MEDION_MD8800_QUADRO 96
+#define SAA7134_BOARD_FLYDVBS_LR300 97
 
 
 #define SAA7134_MAXBOARDS 8
 #define SAA7134_MAXBOARDS 8
 #define SAA7134_INPUT_MAX 8
 #define SAA7134_INPUT_MAX 8