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

Commit 496e9057 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (13076): xc5000: make the definition of the FM input part of the xc5000 config struct



Remove hard-coded definition of the xc5000 FM radio input, making it a
parameter passed in when doing the attach call.

Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d7009cdc
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ struct xc5000_priv {
	u32 bandwidth;
	u8  video_standard;
	u8  rf_mode;
	u8  radio_input;
};

/* Misc Defines */
@@ -829,17 +830,32 @@ static int xc5000_set_radio_freq(struct dvb_frontend *fe,
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret = -EINVAL;
	u8 radio_input;

	dprintk(1, "%s() frequency=%d (in units of khz)\n",
		__func__, params->frequency);

	if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
		dprintk(1, "%s() radio input not configured\n", __func__);
		return -EINVAL;
	}

	if (priv->radio_input == XC5000_RADIO_FM1)
		radio_input = FM_Radio_INPUT1;
	else if  (priv->radio_input == XC5000_RADIO_FM2)
		radio_input = FM_Radio_INPUT2;
	else {
		dprintk(1, "%s() unknown radio input %d\n", __func__,
			priv->radio_input);
		return -EINVAL;
	}

	priv->freq_hz = params->frequency * 125 / 2;

	priv->rf_mode = XC_RF_MODE_AIR;

	ret = xc_SetTVStandard(priv,
		XC5000_Standard[FM_Radio_INPUT1].VideoMode,
		XC5000_Standard[FM_Radio_INPUT1].AudioMode);
	ret = xc_SetTVStandard(priv, XC5000_Standard[radio_input].VideoMode,
			       XC5000_Standard[radio_input].AudioMode);

	if (ret != XC_RESULT_SUCCESS) {
		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
@@ -1058,6 +1074,9 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
		priv->if_khz = cfg->if_khz;
	}

	if (priv->radio_input == 0)
		priv->radio_input = cfg->radio_input;

	/* Check if firmware has been loaded. It is possible that another
	   instance of the driver has loaded the firmware.
	 */
+6 −0
Original line number Diff line number Diff line
@@ -30,11 +30,17 @@ struct i2c_adapter;
struct xc5000_config {
	u8   i2c_address;
	u32  if_khz;
	u8   radio_input;
};

/* xc5000 callback command */
#define XC5000_TUNER_RESET		0

/* Possible Radio inputs */
#define XC5000_RADIO_NOT_CONFIGURED		0
#define XC5000_RADIO_FM1			1
#define XC5000_RADIO_FM2			2

/* 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.