summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/saa7134/saa7134-dvb.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/video/saa7134/saa7134-dvb.c')
-rw-r--r--linux/drivers/media/video/saa7134/saa7134-dvb.c82
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)