Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30650961 authored by Michael Krufky's avatar Michael Krufky Committed by Mauro Carvalho Chehab
Browse files

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: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 2a6003c2
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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;

+2 −4
Original line number Diff line number Diff line
@@ -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;
+2 −3
Original line number Diff line number Diff line
@@ -358,9 +358,8 @@ int au0828_dvb_register(struct au0828_dev *dev)
				&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,
+4 −4
Original line number Diff line number Diff line
@@ -391,7 +391,7 @@ static int dvb_register(struct cx23885_tsport *port)
		if (port->dvb.frontend != NULL)
			dvb_attach(xc5000_attach, port->dvb.frontend,
				   &i2c_bus->i2c_adap,
				&hauppauge_hvr1500q_tunerconfig, port);
				   &hauppauge_hvr1500q_tunerconfig);
		break;
	case CX23885_BOARD_HAUPPAUGE_HVR1500:
		i2c_bus = &dev->i2c_bus[1];
@@ -472,7 +472,7 @@ static int dvb_register(struct cx23885_tsport *port)
		if (port->dvb.frontend != NULL)
			dvb_attach(xc5000_attach, port->dvb.frontend,
				   &i2c_bus->i2c_adap,
				&dvico_xc5000_tunerconfig, port);
				   &dvico_xc5000_tunerconfig);
		break;
	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: {
		i2c_bus = &dev->i2c_bus[port->nr - 1];
+2 −10
Original line number Diff line number Diff line
@@ -813,13 +813,9 @@ static int dvb_register(struct cx8802_dev *dev)
					       &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;
@@ -874,13 +870,9 @@ static int dvb_register(struct cx8802_dev *dev)
					       &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;
Loading