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

Commit 8edeb6eb authored by istvan_v@mailbox.hu's avatar istvan_v@mailbox.hu Committed by Mauro Carvalho Chehab
Browse files

[media] xc4000: removed card_type



Removed the use of 'card_type' from the tuner configuration structure, and
replaced it with separate parameters to set board-specific configuration.

Signed-off-by: default avatarIstvan Varga <istvan_v@mailbox.hu>
Cc: Patrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 09f46342
Loading
Loading
Loading
Loading
+36 −39
Original line number Diff line number Diff line
@@ -92,14 +92,16 @@ struct xc4000_priv {
	struct list_head hybrid_tuner_instance_list;
	struct firmware_description *firm;
	int	firm_size;
	__u16	firm_version;
	u32	if_khz;
	u32	freq_hz;
	u32	bandwidth;
	u8	video_standard;
	u8	rf_mode;
	u8	card_type;
	u8	default_pm;
	u8	dvb_amplitude;
	u8	set_smoothedcvbs;
	u8	ignore_i2c_write_errors;
	__u16	firm_version;
	struct firmware_properties cur_fw;
	__u16	hwmodel;
	__u16	hwvers;
@@ -1226,20 +1228,23 @@ static int xc4000_set_params(struct dvb_frontend *fe,
		}
	}

	if (priv->card_type == XC4000_CARD_WINFAST_CX88) {
	if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
		ret = 0;
	if (priv->dvb_amplitude != 0) {
		if (xc_write_reg(priv, XREG_AMPLITUDE,
				 (priv->firm_version == 0x0102 ? 132 : 134))
		    != 0)
				 (priv->firm_version != 0x0102 ||
				  priv->dvb_amplitude != 134 ?
				  priv->dvb_amplitude : 132)) != 0)
			ret = -EREMOTEIO;
	}
	if (priv->set_smoothedcvbs != 0) {
		if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
			ret = -EREMOTEIO;
	}
	if (ret != 0) {
		printk(KERN_ERR "xc4000: setting registers failed\n");
		/* goto fail; */
	}
	}

	xc_tune_channel(priv, priv->freq_hz);

@@ -1412,8 +1417,7 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
			if (type & NOGD)
				video_mode &= 0xFF7F;
		} else if (priv->video_standard < XC4000_I_PAL_NICAM) {
			if (priv->card_type == XC4000_CARD_WINFAST_CX88 &&
			    priv->firm_version == 0x0102)
			if (priv->firm_version == 0x0102)
				video_mode &= 0xFEFF;
			if (audio_std & XC4000_AUDIO_STD_B)
				video_mode |= 0x0080;
@@ -1425,18 +1429,18 @@ static int xc4000_set_analog_params(struct dvb_frontend *fe,
		}
	}

	if (priv->card_type == XC4000_CARD_WINFAST_CX88) {
	if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
		ret = 0;
	if (xc_write_reg(priv, XREG_AMPLITUDE, 1) != 0)
		ret = -EREMOTEIO;
	if (priv->set_smoothedcvbs != 0) {
		if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
			ret = -EREMOTEIO;
	}
	if (ret != 0) {
		printk(KERN_ERR "xc4000: setting registers failed\n");
		goto fail;
	}
	}

	xc_tune_channel(priv, priv->freq_hz);

@@ -1516,8 +1520,7 @@ static int xc4000_sleep(struct dvb_frontend *fe)

	/* Avoid firmware reload on slow devices */
	if ((no_poweroff == 2 ||
	     (no_poweroff == 0 &&
	      priv->card_type != XC4000_CARD_WINFAST_CX88)) &&
	     (no_poweroff == 0 && priv->default_pm != 0)) &&
	    (priv->cur_fw.type & BASE) != 0) {
		/* force reset and firmware reload */
		priv->cur_fw.type = XC_POWERED_DOWN;
@@ -1588,16 +1591,6 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
	int	instance;
	u16	id = 0;

	if (cfg->card_type != XC4000_CARD_GENERIC) {
		if (cfg->card_type == XC4000_CARD_WINFAST_CX88) {
			cfg->i2c_address = 0x61;
			cfg->if_khz = 4560;
		} else {			/* default to PCTV 340E */
			cfg->i2c_address = 0x61;
			cfg->if_khz = 5400;
		}
	}

	dprintk(1, "%s(%d-%04x)\n", __func__,
		i2c ? i2c_adapter_id(i2c) : -1,
		cfg ? cfg->i2c_address : -1);
@@ -1607,8 +1600,6 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
	instance = hybrid_tuner_request_state(struct xc4000_priv, priv,
					      hybrid_tuner_instance_list,
					      i2c, cfg->i2c_address, "xc4000");
	if (cfg->card_type != XC4000_CARD_GENERIC)
		priv->card_type = cfg->card_type;
	switch (instance) {
	case 0:
		goto fail;
@@ -1616,6 +1607,11 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
	case 1:
		/* new tuner instance */
		priv->bandwidth = BANDWIDTH_6_MHZ;
		/* set default configuration */
		priv->if_khz = 4560;
		priv->default_pm = 0;
		priv->dvb_amplitude = 134;
		priv->set_smoothedcvbs = 1;
		mutex_init(&priv->lock);
		fe->tuner_priv = priv;
		break;
@@ -1626,10 +1622,11 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
	}

	if (cfg->if_khz != 0) {
		/* If the IF hasn't been set yet, use the value provided by
		   the caller (occurs in hybrid devices where the analog
		   call to xc4000_attach occurs before the digital side) */
		/* copy configuration if provided by the caller */
		priv->if_khz = cfg->if_khz;
		priv->default_pm = cfg->default_pm;
		priv->dvb_amplitude = cfg->dvb_amplitude;
		priv->set_smoothedcvbs = cfg->set_smoothedcvbs;
	}

	/* Check if firmware has been loaded. It is possible that another
+8 −6
Original line number Diff line number Diff line
@@ -27,13 +27,15 @@
struct dvb_frontend;
struct i2c_adapter;

#define XC4000_CARD_GENERIC		0
#define XC4000_CARD_PCTV_340E		1
#define XC4000_CARD_WINFAST_CX88	2

struct xc4000_config {
	u8	card_type;	/* if card type is not generic, all other */
	u8	i2c_address;	/* parameters are automatically set */
	u8	i2c_address;
	/* if non-zero, power management is enabled by default */
	u8	default_pm;
	/* value to be written to XREG_AMPLITUDE in DVB-T mode (0: no write) */
	u8	dvb_amplitude;
	/* if non-zero, register 0x0E is set to filter analog TV video output */
	u8	set_smoothedcvbs;
	/* IF for DVB-T */
	u32	if_khz;
};

+5 −3
Original line number Diff line number Diff line
@@ -2778,10 +2778,12 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)
	return adap->fe == NULL ? -ENODEV : 0;
}


static struct xc4000_config dib7000p_xc4000_tunerconfig = {
	.i2c_address	  = 0x61,
	.if_khz           = 5400,
	.default_pm	  = 1,
	.dvb_amplitude	  = 0,
	.set_smoothedcvbs = 0,
	.if_khz		  = 5400
};

static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
+6 −2
Original line number Diff line number Diff line
@@ -396,8 +396,12 @@ static void set_type(struct i2c_client *c, unsigned int type,
	{
		struct xc4000_config xc4000_cfg = {
			.i2c_address	  = t->i2c->addr,
			/* if_khz will be set when the digital dvb_attach() occurs */
			.if_khz	  = 0,
			/* FIXME: the correct parameters will be set */
			/* only when the digital dvb_attach() occurs */
			.default_pm	  = 0,
			.dvb_amplitude	  = 0,
			.set_smoothedcvbs = 0,
			.if_khz		  = 0
		};
		if (!dvb_attach(xc4000_attach,
				&t->fe, t->i2c->adapter, &xc4000_cfg))