diff options
author | darron@kewl.org <darron@kewl.org> | 2008-10-11 15:31:41 +0100 |
---|---|---|
committer | darron@kewl.org <darron@kewl.org> | 2008-10-11 15:31:41 +0100 |
commit | 872031679e22f84f4df51a299225015f12a73f1a (patch) | |
tree | e610fbe1ec2964a563190bf30e82706a97b32f00 /linux | |
parent | 4f4658c3f82486387d88365559739c233f8c7766 (diff) | |
download | mediapointer-dvb-s2-872031679e22f84f4df51a299225015f12a73f1a.tar.gz mediapointer-dvb-s2-872031679e22f84f4df51a299225015f12a73f1a.tar.bz2 |
MFE: Add configurable gate control
From: Darron Broad <darron@kewl.org>
This adds a configurable (one per card) gate control option
for multi-frontend. Prior to this point gate control was
assumed to be on the primary frontend, this is a fault
when the gate to the analogue section is on the secondary
which is the default for both the HVR-3000 and HVR-4000
in MFE.
Priority: normal
Signed-off-by: Darron Broad <darron@kewl.org>
Diffstat (limited to 'linux')
-rw-r--r-- | linux/drivers/media/video/cx88/cx88-dvb.c | 7 | ||||
-rw-r--r-- | linux/drivers/media/video/cx88/cx88-i2c.c | 20 | ||||
-rw-r--r-- | linux/include/media/videobuf-dvb.h | 1 |
3 files changed, 18 insertions, 10 deletions
diff --git a/linux/drivers/media/video/cx88/cx88-dvb.c b/linux/drivers/media/video/cx88/cx88-dvb.c index a7e549695..a2b91e41f 100644 --- a/linux/drivers/media/video/cx88/cx88-dvb.c +++ b/linux/drivers/media/video/cx88/cx88-dvb.c @@ -615,7 +615,10 @@ static int dvb_register(struct cx8802_dev *dev) if (!fe0) return -EINVAL; - /* init frontend */ + /* multi-frontend gate control is undefined or defaults to fe0 */ + dev->frontends.gate = 0; + + /* init frontend(s) */ switch (core->boardnr) { case CX88_BOARD_HAUPPAUGE_DVB_T1: fe0->dvb.frontend = dvb_attach(cx22702_attach, @@ -672,6 +675,7 @@ static int dvb_register(struct cx8802_dev *dev) /* DVB-T init */ fe1 = videobuf_dvb_get_frontend(&dev->frontends, 2); if (fe1) { + dev->frontends.gate = 2; fe1->dvb.frontend = dvb_attach(cx22702_attach, &hauppauge_hvr_config, &dev->core->i2c_adap); @@ -1015,6 +1019,7 @@ static int dvb_register(struct cx8802_dev *dev) /* DVB-T Init */ fe1 = videobuf_dvb_get_frontend(&dev->frontends, 2); if (fe1) { + dev->frontends.gate = 2; fe1->dvb.frontend = dvb_attach(cx22702_attach, &hauppauge_hvr_config, &dev->core->i2c_adap); diff --git a/linux/drivers/media/video/cx88/cx88-i2c.c b/linux/drivers/media/video/cx88/cx88-i2c.c index 582769de2..01de23007 100644 --- a/linux/drivers/media/video/cx88/cx88-i2c.c +++ b/linux/drivers/media/video/cx88/cx88-i2c.c @@ -116,23 +116,25 @@ static int detach_inform(struct i2c_client *client) void cx88_call_i2c_clients(struct cx88_core *core, unsigned int cmd, void *arg) { - struct videobuf_dvb_frontend *fe0 = NULL; + struct videobuf_dvb_frontends *f = &core->dvbdev->frontends; + struct videobuf_dvb_frontend *fe = NULL; if (0 != core->i2c_rc) return; #if defined(CONFIG_VIDEO_CX88_DVB) || defined(CONFIG_VIDEO_CX88_DVB_MODULE) - if (core->dvbdev) { - /* Get the first frontend and assume that all I2C is routed through it */ - /* TODO: Get _THIS_FE_ then find the right i2c_gate_ctrl for it */ - fe0 = videobuf_dvb_get_frontend(&core->dvbdev->frontends, 1); + if (core->dvbdev && f) { + if(f->gate <= 1) /* undefined or fe0 */ + fe = videobuf_dvb_get_frontend(f, 1); + else + fe = videobuf_dvb_get_frontend(f, f->gate); - if (fe0 && fe0->dvb.frontend && fe0->dvb.frontend->ops.i2c_gate_ctrl) - fe0->dvb.frontend->ops.i2c_gate_ctrl(fe0->dvb.frontend, 1); + if (fe && fe->dvb.frontend && fe->dvb.frontend->ops.i2c_gate_ctrl) + fe->dvb.frontend->ops.i2c_gate_ctrl(fe->dvb.frontend, 1); i2c_clients_command(&core->i2c_adap, cmd, arg); - if (fe0 && fe0->dvb.frontend && fe0->dvb.frontend->ops.i2c_gate_ctrl) - fe0->dvb.frontend->ops.i2c_gate_ctrl(fe0->dvb.frontend, 0); + if (fe && fe->dvb.frontend && fe->dvb.frontend->ops.i2c_gate_ctrl) + fe->dvb.frontend->ops.i2c_gate_ctrl(fe->dvb.frontend, 0); } else #endif i2c_clients_command(&core->i2c_adap, cmd, arg); diff --git a/linux/include/media/videobuf-dvb.h b/linux/include/media/videobuf-dvb.h index 09547ec3f..47bc2c5e7 100644 --- a/linux/include/media/videobuf-dvb.h +++ b/linux/include/media/videobuf-dvb.h @@ -36,6 +36,7 @@ struct videobuf_dvb_frontends { struct dvb_adapter adapter; int active_fe_id; /* Indicates which frontend in the felist is in use */ struct videobuf_dvb_frontend frontend; + int gate; /* Frontend with gate control 0=!MFE,1=fe0,2=fe1 etc */ }; int videobuf_dvb_register_bus(struct videobuf_dvb_frontends *f, |