summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/cx88/cx88-dvb.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2008-01-29 11:27:16 -0200
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-01-29 11:27:16 -0200
commit0f94dd6558d5cebdf356bdc5d8fcc9b946011d7f (patch)
tree6351049f7e63fdf79831a84f5a84293ef066c9e6 /linux/drivers/media/video/cx88/cx88-dvb.c
parentc8e431185645e3a2118da493e008c62020f86947 (diff)
downloadmediapointer-dvb-s2-0f94dd6558d5cebdf356bdc5d8fcc9b946011d7f.tar.gz
mediapointer-dvb-s2-0f94dd6558d5cebdf356bdc5d8fcc9b946011d7f.tar.bz2
cx88: Add xc2028/3028 boards
From: Mauro Carvalho Chehab <mchehab@infradead.org> This patch ports a patch from Markus Rechberger to work with tuner-xc2028. It adds entries for several cx88 boards with xc2038/3028 tuners. Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org> --- linux/Documentation/video4linux/CARDLIST.cx88 | 4 linux/drivers/media/video/cx88/cx88-cards.c | 192 +++++++++++++++++++++++++- linux/drivers/media/video/cx88/cx88-dvb.c | 50 ++++++ linux/drivers/media/video/cx88/cx88.h | 4 4 files changed, 248 insertions(+), 2 deletions(-)
Diffstat (limited to 'linux/drivers/media/video/cx88/cx88-dvb.c')
-rw-r--r--linux/drivers/media/video/cx88/cx88-dvb.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/linux/drivers/media/video/cx88/cx88-dvb.c b/linux/drivers/media/video/cx88/cx88-dvb.c
index f01625fd7..f8276b341 100644
--- a/linux/drivers/media/video/cx88/cx88-dvb.c
+++ b/linux/drivers/media/video/cx88/cx88-dvb.c
@@ -435,8 +435,22 @@ static struct xc5000_config pinnacle_pctv_hd_800i_tuner_config = {
.tuner_callback = cx88_tuner_callback,
};
+static struct zl10353_config cx88_geniatech_x8000_mt = {
+ .demod_address = (0x1e >> 1),
+ .no_tuner = 1,
+#if 0
+ .input_frequency = 0xe609,
+ .parallel_ts = 1,
+ .r56_agc_targets = 0x2b,
+ .r5c_clk_mpegts_output = 0x75,
+#endif
+};
+
+
static int dvb_register(struct cx8802_dev *dev)
{
+ int attach_xc3028 = 0;
+
/* init struct videobuf_dvb */
dev->dvb.name = dev->core->name;
dev->ts_gen_cntrl = 0x0c;
@@ -728,16 +742,50 @@ static int dvb_register(struct cx8802_dev *dev)
fe->ops.tuner_ops.set_config(fe, &ctl);
}
break;
+ case CX88_BOARD_PINNACLE_HYBRID_PCTV:
+ dev->dvb.frontend = dvb_attach(zl10353_attach,
+ &cx88_geniatech_x8000_mt,
+ &dev->core->i2c_adap);
+ attach_xc3028 = 1;
+ break;
+ case CX88_BOARD_GENIATECH_X8000_MT:
+ dev->ts_gen_cntrl = 0x00;
+
+ dev->dvb.frontend = dvb_attach(zl10353_attach,
+ &cx88_geniatech_x8000_mt,
+ &dev->core->i2c_adap);
+ attach_xc3028 = 1;
+ break;
default:
printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n",
dev->core->name);
break;
}
if (NULL == dev->dvb.frontend) {
- printk(KERN_ERR "%s/2: frontend initialization failed\n", dev->core->name);
+ printk(KERN_ERR
+ "%s/2: frontend initialization failed\n",
+ dev->core->name);
return -1;
}
+ if (attach_xc3028) {
+ struct dvb_frontend *fe;
+ struct xc2028_config cfg = {
+ .i2c_adap = &dev->core->i2c_adap,
+ .i2c_addr = 0x61,
+ .video_dev = dev->core,
+ };
+ fe = dvb_attach(xc2028_attach, dev->dvb.frontend, &cfg);
+ if (!fe) {
+ printk(KERN_ERR "%s/2: xc3028 attach failed\n",
+ dev->core->name);
+ dvb_frontend_detach(dev->dvb.frontend);
+ dvb_unregister_frontend(dev->dvb.frontend);
+ dev->dvb.frontend = NULL;
+ return -1;
+ }
+ }
+
/* Ensure all frontends negotiate bus access */
dev->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl;