The patch number 8951 was added via Michael Krufky <[EMAIL PROTECTED]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        [EMAIL PROTECTED]

------

From: Michael Krufky  <[EMAIL PROTECTED]>
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.

Priority: normal

Signed-off-by: Michael Krufky <[EMAIL PROTECTED]>


---

 linux/drivers/media/common/tuners/xc5000.c      |    9 +++++----
 linux/drivers/media/common/tuners/xc5000.h      |    6 ++----
 linux/drivers/media/video/au0828/au0828-dvb.c   |    5 ++---
 linux/drivers/media/video/cx23885/cx23885-dvb.c |    8 ++++----
 linux/drivers/media/video/cx88/cx88-dvb.c       |   12 ++----------
 linux/drivers/media/video/tuner-core.c          |    3 +--
 6 files changed, 16 insertions(+), 27 deletions(-)

diff -r 924f7bd058d0 -r 6826627a24cf linux/drivers/media/common/tuners/xc5000.c
--- a/linux/drivers/media/common/tuners/xc5000.c        Sat Sep 06 12:54:45 
2008 -0400
+++ b/linux/drivers/media/common/tuners/xc5000.c        Sat Sep 06 13:56:58 
2008 -0400
@@ -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
        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
@@ -969,7 +971,7 @@ static const struct dvb_tuner_ops xc5000
 
 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;
@@ -991,7 +993,6 @@ struct dvb_frontend *xc5000_attach(struc
        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;
 
diff -r 924f7bd058d0 -r 6826627a24cf linux/drivers/media/common/tuners/xc5000.h
--- a/linux/drivers/media/common/tuners/xc5000.h        Sat Sep 06 12:54:45 
2008 -0400
+++ b/linux/drivers/media/common/tuners/xc5000.h        Sat Sep 06 13:56:58 
2008 -0400
@@ -49,13 +49,11 @@ struct xc5000_config {
     (defined(CONFIG_MEDIA_TUNER_XC5000_MODULE) && defined(MODULE))
 extern struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe,
                                          struct i2c_adapter *i2c,
-                                         struct xc5000_config *cfg,
-                                         void *devptr);
+                                         struct xc5000_config *cfg);
 #else
 static inline struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe,
                                                 struct i2c_adapter *i2c,
-                                                struct xc5000_config *cfg,
-                                                void *devptr)
+                                                struct xc5000_config *cfg)
 {
        printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
        return NULL;
diff -r 924f7bd058d0 -r 6826627a24cf 
linux/drivers/media/video/au0828/au0828-dvb.c
--- a/linux/drivers/media/video/au0828/au0828-dvb.c     Sat Sep 06 12:54:45 
2008 -0400
+++ b/linux/drivers/media/video/au0828/au0828-dvb.c     Sat Sep 06 13:56:58 
2008 -0400
@@ -363,9 +363,8 @@ int au0828_dvb_register(struct au0828_de
                                &hauppauge_hvr950q_config,
                                &dev->i2c_adap);
                if (dvb->frontend != NULL)
-                       dvb_attach(xc5000_attach, dvb->frontend,
-                               &dev->i2c_adap,
-                               &hauppauge_hvr950q_tunerconfig, dev);
+                       dvb_attach(xc5000_attach, dvb->frontend, &dev->i2c_adap,
+                                  &hauppauge_hvr950q_tunerconfig);
                break;
        case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL:
                dvb->frontend = dvb_attach(au8522_attach,
diff -r 924f7bd058d0 -r 6826627a24cf 
linux/drivers/media/video/cx23885/cx23885-dvb.c
--- a/linux/drivers/media/video/cx23885/cx23885-dvb.c   Sat Sep 06 12:54:45 
2008 -0400
+++ b/linux/drivers/media/video/cx23885/cx23885-dvb.c   Sat Sep 06 13:56:58 
2008 -0400
@@ -391,8 +391,8 @@ static int dvb_register(struct cx23885_t
                                                &dev->i2c_bus[0].i2c_adap);
                if (port->dvb.frontend != NULL)
                        dvb_attach(xc5000_attach, port->dvb.frontend,
-                               &i2c_bus->i2c_adap,
-                               &hauppauge_hvr1500q_tunerconfig, port);
+                                  &i2c_bus->i2c_adap,
+                                  &hauppauge_hvr1500q_tunerconfig);
                break;
        case CX23885_BOARD_HAUPPAUGE_HVR1500:
                i2c_bus = &dev->i2c_bus[1];
@@ -472,8 +472,8 @@ static int dvb_register(struct cx23885_t
                                                        &i2c_bus->i2c_adap);
                if (port->dvb.frontend != NULL)
                        dvb_attach(xc5000_attach, port->dvb.frontend,
-                               &i2c_bus->i2c_adap,
-                               &dvico_xc5000_tunerconfig, port);
+                                  &i2c_bus->i2c_adap,
+                                  &dvico_xc5000_tunerconfig);
                break;
        case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: {
                i2c_bus = &dev->i2c_bus[port->nr - 1];
diff -r 924f7bd058d0 -r 6826627a24cf linux/drivers/media/video/cx88/cx88-dvb.c
--- a/linux/drivers/media/video/cx88/cx88-dvb.c Sat Sep 06 12:54:45 2008 -0400
+++ b/linux/drivers/media/video/cx88/cx88-dvb.c Sat Sep 06 13:56:58 2008 -0400
@@ -820,13 +820,9 @@ static int dvb_register(struct cx8802_de
                                               &pinnacle_pctv_hd_800i_config,
                                               &core->i2c_adap);
                if (dev->dvb.frontend != NULL) {
-                       /* tuner_config.video_dev must point to
-                        * i2c_adap.algo_data
-                        */
                        if (!dvb_attach(xc5000_attach, dev->dvb.frontend,
                                        &core->i2c_adap,
-                                       &pinnacle_pctv_hd_800i_tuner_config,
-                                       core->i2c_adap.algo_data))
+                                       &pinnacle_pctv_hd_800i_tuner_config))
                                goto frontend_detach;
                }
                break;
@@ -881,13 +877,9 @@ static int dvb_register(struct cx8802_de
                                               &dvico_fusionhdtv7_config,
                                               &core->i2c_adap);
                if (dev->dvb.frontend != NULL) {
-                       /* tuner_config.video_dev must point to
-                        * i2c_adap.algo_data
-                        */
                        if (!dvb_attach(xc5000_attach, dev->dvb.frontend,
                                        &core->i2c_adap,
-                                       &dvico_fusionhdtv7_tuner_config,
-                                       core->i2c_adap.algo_data))
+                                       &dvico_fusionhdtv7_tuner_config))
                                goto frontend_detach;
                }
                break;
diff -r 924f7bd058d0 -r 6826627a24cf linux/drivers/media/video/tuner-core.c
--- a/linux/drivers/media/video/tuner-core.c    Sat Sep 06 12:54:45 2008 -0400
+++ b/linux/drivers/media/video/tuner-core.c    Sat Sep 06 13:56:58 2008 -0400
@@ -453,8 +453,7 @@ static void set_type(struct i2c_client *
                xc5000_cfg.if_khz         = 5380;
                xc5000_cfg.tuner_callback = t->tuner_callback;
                if (!dvb_attach(xc5000_attach,
-                               &t->fe, t->i2c->adapter, &xc5000_cfg,
-                               c->adapter->algo_data))
+                               &t->fe, t->i2c->adapter, &xc5000_cfg))
                        goto attach_failed;
 
                xc_tuner_ops = &t->fe.ops.tuner_ops;


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/6826627a24cf3a851def6ea83f2207b86edc2d64

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to