diff --git a/drivers/media/dvb/frontends/xc5000.c b/drivers/media/dvb/frontends/xc5000.c index 28048d5307a2..a0705a640baf 100644 --- a/drivers/media/dvb/frontends/xc5000.c +++ b/drivers/media/dvb/frontends/xc5000.c @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include #include @@ -212,7 +212,7 @@ static void xc5000_TunerReset(struct dvb_frontend *fe) dprintk(1, "%s()\n", __FUNCTION__); if (priv->cfg->tuner_callback) { - ret = priv->cfg->tuner_callback(priv->cfg->video_dev, + ret = priv->cfg->tuner_callback(priv->cfg->priv, XC5000_TUNER_RESET, 0); if (ret) printk(KERN_ERR "xc5000: reset failed\n"); diff --git a/drivers/media/dvb/frontends/xc5000.h b/drivers/media/dvb/frontends/xc5000.h index 85b2d438fa41..e0e84562aed1 100644 --- a/drivers/media/dvb/frontends/xc5000.h +++ b/drivers/media/dvb/frontends/xc5000.h @@ -30,8 +30,16 @@ struct i2c_adapter; struct xc5000_config { u8 i2c_address; u32 if_khz; - void *video_dev; - int (*tuner_callback) (void *dev, int command, int arg); + + /* For each bridge framework, when it attaches either analog or digital, + * it has to store a reference back to its _core equivalent structure, + * so that it can service the hardware by steering gpio's etc. + * Each bridge implementation is different so cast priv accordingly. + * The xc5000 driver cares not for this value, other than ensuring + * it's passed back to a bridge during tuner_callback(). + */ + void *priv; + int (*tuner_callback) (void *priv, int command, int arg); }; /* xc5000 callback command */ diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c index ee3f1b099145..2d414dad5c31 100644 --- a/drivers/media/video/cx23885/cx23885-cards.c +++ b/drivers/media/video/cx23885/cx23885-cards.c @@ -247,9 +247,9 @@ static void hauppauge_eeprom(struct cx23885_dev *dev, u8 *eeprom_data) /* 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) +int cx23885_tuner_callback(void *priv, int command, int arg) { - struct cx23885_i2c *bus = i2c_bus; + struct cx23885_i2c *bus = priv; struct cx23885_dev *dev = bus->dev; switch(dev->board) { @@ -271,7 +271,7 @@ int cx23885_tuner_callback(void *i2c_bus, int command, int arg) return 0; /* Should never be here */ } -EXPORT_SYMBOL(cx23885_tuner_callback); + void cx23885_gpio_setup(struct cx23885_dev *dev) { switch(dev->board) { diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c index 61d75d04db8d..ed465c007cea 100644 --- a/drivers/media/video/cx23885/cx23885-dvb.c +++ b/drivers/media/video/cx23885/cx23885-dvb.c @@ -156,7 +156,6 @@ static struct s5h1409_config hauppauge_hvr1500q_config = { static struct xc5000_config hauppauge_hvr1500q_tunerconfig = { .i2c_address = 0x61, .if_khz = 5380, - /* cannot set .video_dev here, do it before attach. */ .tuner_callback = cx23885_tuner_callback }; @@ -282,11 +281,7 @@ static int dvb_register(struct cx23885_tsport *port) &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; + hauppauge_hvr1500q_tunerconfig.priv = i2c_bus; dvb_attach(xc5000_attach, port->dvb.frontend, &i2c_bus->i2c_adap, &hauppauge_hvr1500q_tunerconfig); diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h index ac9a76624e98..7cb2179f2622 100644 --- a/drivers/media/video/cx23885/cx23885.h +++ b/drivers/media/video/cx23885/cx23885.h @@ -393,7 +393,7 @@ extern const unsigned int cx23885_bcount; extern struct cx23885_subid cx23885_subids[]; extern const unsigned int cx23885_idcount; -extern int cx23885_tuner_callback(void *i2c_bus, int command, int arg); +extern int cx23885_tuner_callback(void *priv, int command, int arg); extern void cx23885_card_list(struct cx23885_dev *dev); extern int cx23885_ir_init(struct cx23885_dev *dev); extern void cx23885_gpio_setup(struct cx23885_dev *dev); diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 3ba31572c657..254290975cdb 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c @@ -1885,10 +1885,10 @@ static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both * * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */ -int cx88_tuner_callback(void *i2c_algo, int command, int arg) +int cx88_tuner_callback(void *priv, int command, int arg) { - struct i2c_algo_bit_data *algo = i2c_algo; - struct cx88_core *core = algo->data; + struct i2c_algo_bit_data *i2c_algo = priv; + struct cx88_core *core = i2c_algo->data; switch(core->boardnr) { case CX88_BOARD_PINNACLE_PCTV_HD_800i: @@ -1898,7 +1898,6 @@ int cx88_tuner_callback(void *i2c_algo, int command, int arg) cx_clear(MO_GP0_IO, 0x00000004); mdelay(200); cx_set(MO_GP0_IO, 0x00000004); - printk(KERN_ERR "xc5000: in reset for xc5000\n"); mdelay(200); return 0; } diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index 0246f97a9987..c852efca1592 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c @@ -385,7 +385,6 @@ static struct s5h1409_config pinnacle_pctv_hd_800i_config = { static struct xc5000_config pinnacle_pctv_hd_800i_tuner_config = { .i2c_address = 0x64, .if_khz = 5380, - /* cannot set .video_dev here, do it right before attach */ .tuner_callback = cx88_tuner_callback, }; @@ -654,7 +653,7 @@ static int dvb_register(struct cx8802_dev *dev) /* tuner_config.video_dev must point to * i2c_adap.algo_data */ - pinnacle_pctv_hd_800i_tuner_config.video_dev = + pinnacle_pctv_hd_800i_tuner_config.priv = dev->core->i2c_adap.algo_data; dvb_attach(xc5000_attach, dev->dvb.frontend, &dev->core->i2c_adap, diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c index 16cdeeafeb6c..8e406b168d71 100644 --- a/drivers/media/video/tuner-core.c +++ b/drivers/media/video/tuner-core.c @@ -434,7 +434,7 @@ static void set_type(struct i2c_client *c, unsigned int type, case TUNER_XC5000: xc5000_cfg.i2c_address = t->i2c->addr; xc5000_cfg.if_khz = 5380; - xc5000_cfg.video_dev = c->adapter->algo_data; + xc5000_cfg.priv = c->adapter->algo_data; xc5000_cfg.tuner_callback = t->tuner_callback; if (!xc5000_attach(&t->fe, t->i2c->adapter, &xc5000_cfg)) { t->type = TUNER_ABSENT;