dev->name, tv.model);
}
+/* Tuner callback function for cx23885 boards. Currently only needed
+ * for HVR1500Q, which has an xc5000 tuner.
+ */
+int cx23885_tuner_callback(void *i2c_bus, int command, int arg)
+{
+ struct cx23885_i2c *bus = i2c_bus;
+ struct cx23885_dev *dev = bus->dev;
+
+ switch(dev->board) {
+ case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
+ if(command == 0) { /* Tuner Reset Command from xc5000 */
+ /* Drive the tuner into reset and out */
+ cx_clear(GP0_IO, 0x00000004);
+ mdelay(200);
+ cx_set(GP0_IO, 0x00000004);
+ return 0;
+ }
+ else {
+ printk(KERN_ERR
+ "%s(): Unknow command.\n", __FUNCTION__);
+ return -EINVAL;
+ }
+ break;
+ }
+
+ return 0; /* Should never be here */
+}
+EXPORT_SYMBOL(cx23885_tuner_callback);
void cx23885_gpio_setup(struct cx23885_dev *dev)
{
switch(dev->board) {
cx23885_free_buffer(q, (struct cx23885_buffer*)vb);
}
-static int cx23885_request_firmware(struct dvb_frontend *fe,
- const struct firmware **fw, char *name)
-{
- struct cx23885_tsport *port = fe->dvb->priv;
- struct cx23885_dev *dev = port->dev;
-
- dprintk(1, "%s(?,?,%s)\n", __FUNCTION__, name);
-
- return request_firmware(fw, name, &dev->pci->dev);
-}
-
-static int hauppauge_hvr1500q_tuner_reset(struct dvb_frontend *fe)
-{
- struct cx23885_tsport *port = fe->dvb->priv;
- struct cx23885_dev *dev = port->dev;
-
- dprintk(1, "%s()\n", __FUNCTION__);
-
- /* Drive the tuner into reset back back */
- cx_clear(GP0_IO, 0x00000004);
- mdelay(200);
- cx_set(GP0_IO, 0x00000004);
-
- return 0;
-}
-
static struct videobuf_queue_ops dvb_qops = {
.buf_setup = dvb_buf_setup,
.buf_prepare = dvb_buf_prepare,
static struct xc5000_config hauppauge_hvr1500q_tunerconfig = {
.i2c_address = 0x61,
.if_khz = 5380,
- .request_firmware = cx23885_request_firmware,
- .tuner_reset = hauppauge_hvr1500q_tuner_reset
+ /* cannot set .video_dev here, do it before attach. */
+ .tuner_callback = cx23885_tuner_callback
};
static struct tda829x_config tda829x_no_probe = {
&hauppauge_hvr1500q_config,
&dev->i2c_bus[0].i2c_adap);
if (port->dvb.frontend != NULL) {
+ /* tunerconfig.video_dev must point to
+ * i2c_adap.algo_data
+ */
+ hauppauge_hvr1500q_tunerconfig.video_dev =
+ i2c_bus->i2c_adap.algo_data;
dvb_attach(xc5000_attach, port->dvb.frontend,
&i2c_bus->i2c_adap,
&hauppauge_hvr1500q_tunerconfig);