diff options
Diffstat (limited to 'linux/drivers/media/video/saa7134/saa7134-dvb.c')
-rw-r--r-- | linux/drivers/media/video/saa7134/saa7134-dvb.c | 82 |
1 files changed, 76 insertions, 6 deletions
diff --git a/linux/drivers/media/video/saa7134/saa7134-dvb.c b/linux/drivers/media/video/saa7134/saa7134-dvb.c index b51f0acb1..b2cbaee4c 100644 --- a/linux/drivers/media/video/saa7134/saa7134-dvb.c +++ b/linux/drivers/media/video/saa7134/saa7134-dvb.c @@ -1,5 +1,5 @@ /* - * $Id: saa7134-dvb.c,v 1.4 2004/11/07 14:44:59 kraxel Exp $ + * $Id: saa7134-dvb.c,v 1.5 2004/12/09 12:51:35 kraxel Exp $ * * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] * @@ -30,15 +30,65 @@ #include "saa7134-reg.h" #include "saa7134.h" +#include "dvb-pll.h" +#include "mt352.h" +#include "mt352_priv.h" /* FIXME */ + MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]"); MODULE_LICENSE("GPL"); /* ------------------------------------------------------------------ */ -static int dvb_init(struct saa7134_dev *dev) +static int mt352_init(struct dvb_frontend* fe) { - printk("%s: %s\n",dev->name,__FUNCTION__); + static u8 clock_config [] = { CLOCK_CTL, 0x38, 0x39 }; + static u8 reset [] = { RESET, 0x80 }; +#if 0 + static u8 adc_ctl_1_cfg [] = { ADC_CTL_1, 0x40 }; + static u8 agc_cfg [] = { AGC_TARGET, 0x24, 0x20 }; + static u8 gpp_ctl_cfg [] = { GPP_CTL, 0x33 }; + static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 }; +#endif + struct saa7134_dev *dev= fe->dvb->priv; + + printk("%s: %s called\n",dev->name,__FUNCTION__); + + mt352_write(fe, clock_config, sizeof(clock_config)); + udelay(200); + mt352_write(fe, reset, sizeof(reset)); +#if 0 + mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg)); + + mt352_write(fe, agc_cfg, sizeof(agc_cfg)); + mt352_write(fe, gpp_ctl_cfg, sizeof(gpp_ctl_cfg)); + mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg)); +#endif + return 0; +} + +static int mt352_pll_set(struct dvb_frontend* fe, + struct dvb_frontend_parameters* params, + u8* pllbuf) +{ + struct saa7134_dev *dev= fe->dvb->priv; + printk("%s: %s called\n",dev->name,__FUNCTION__); + /* FIXME */ + memset(pllbuf,0,5); + return 0; +} + +static struct mt352_config pinnacle_300i = { + .demod_address = 0x3c >> 1, +// .demod_address = 0x1e >> 1, + .demod_init = mt352_init, + .pll_set = mt352_pll_set, +}; + +/* ------------------------------------------------------------------ */ + +static int dvb_init(struct saa7134_dev *dev) +{ /* init struct videobuf_dvb */ dev->dvb.name = dev->name; videobuf_queue_init(&dev->dvb.dvbq, &saa7134_ts_qops, @@ -48,12 +98,32 @@ static int dvb_init(struct saa7134_dev *dev) sizeof(struct saa7134_buf), dev); - /* TODO: init frontend */ - if (NULL == dev->dvb.frontend) + switch (dev->board) { + case SAA7134_BOARD_PINNACLE_300I_DVBT_PAL: + printk("%s: pinnacle 300i dvb setup\n",dev->name); + { + u8 buf[16]; + dev->i2c_client.addr = 0x3c >> 1; + memset(buf,0,sizeof(buf)); + buf[0] = CHIP_ID; + i2c_master_send(&dev->i2c_client,buf,1); + i2c_master_recv(&dev->i2c_client,buf,1); + } + dev->dvb.frontend = mt352_attach(&pinnacle_300i, + &dev->i2c_adap); + break; + default: + printk("%s: Huh? unknown DVB card?\n",dev->name); + break; + } + + if (NULL == dev->dvb.frontend) { + printk("%s: frontend initialization failed\n",dev->name); return -1; + } /* register everything else */ - return videobuf_dvb_register(&dev->dvb); + return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev); } static int dvb_fini(struct saa7134_dev *dev) |