diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2008-09-06 19:56:58 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-10-12 13:37:01 +0200 |
commit | 30650961907368b1077cade35455fe931b14da6b (patch) | |
tree | a27bbcb9319529b6d13da933adff4c069a12b853 /drivers/media/common/tuners/xc5000.c | |
parent | V4L/DVB (8950): xc5000: prevent an OOPS if analog driver is unloaded while di... (diff) | |
download | linux-30650961907368b1077cade35455fe931b14da6b.tar.xz linux-30650961907368b1077cade35455fe931b14da6b.zip |
V4L/DVB (8951): xc5000: dont pass devptr in xc5000_attach()
Dont pass devptr in xc5000_attach, dont store it in xc5000_priv.
This pointer is passed into the tuner_callback function, which always
expects a pointer to fe->dvb->priv or i2c_adapter->algo_data.
This prevents future possible bugs in new drivers, such as using a "devptr"
other that the standard fe->dvb->priv in a DVB driver.
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/common/tuners/xc5000.c')
-rw-r--r-- | drivers/media/common/tuners/xc5000.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/media/common/tuners/xc5000.c b/drivers/media/common/tuners/xc5000.c index 72efc656ad0d..ccc4dae4126a 100644 --- a/drivers/media/common/tuners/xc5000.c +++ b/drivers/media/common/tuners/xc5000.c @@ -59,7 +59,6 @@ struct xc5000_priv { u8 video_standard; u8 rf_mode; - void *devptr; int (*tuner_callback) (void *priv, int command, int arg); }; @@ -234,7 +233,10 @@ static void xc5000_TunerReset(struct dvb_frontend *fe) dprintk(1, "%s()\n", __func__); if (priv->tuner_callback) { - ret = priv->tuner_callback(priv->devptr, XC5000_TUNER_RESET, 0); + ret = priv->tuner_callback(((fe->dvb) && (fe->dvb->priv)) ? + fe->dvb->priv : + priv->i2c_props.adap->algo_data, + XC5000_TUNER_RESET, 0); if (ret) printk(KERN_ERR "xc5000: reset failed\n"); } else @@ -950,7 +952,7 @@ static const struct dvb_tuner_ops xc5000_tuner_ops = { struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, - struct xc5000_config *cfg, void *devptr) + struct xc5000_config *cfg) { struct xc5000_priv *priv = NULL; int instance; @@ -972,7 +974,6 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe, case 1: /* new tuner instance */ priv->bandwidth = BANDWIDTH_6_MHZ; - priv->devptr = devptr; priv->if_khz = cfg->if_khz; priv->tuner_callback = cfg->tuner_callback; |