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

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

V4L/DVB (6978): tda18271: store frequency and bandwidth after successful tune



Store last tuned frequency & bandwidth after successful tune.

Clean up tune functions -- remove pointer to tune function in
state structure, instead call tune function based on priv->id.

Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 09f83c4f
Loading
Loading
Loading
Loading
+38 −8
Original line number Diff line number Diff line
@@ -770,6 +770,23 @@ static int tda18271c1_tune(struct dvb_frontend *fe,
	return 0;
}

static inline int tda18271_tune(struct dvb_frontend *fe,
				u32 ifc, u32 freq, u32 bw, u8 std)
{
	struct tda18271_priv *priv = fe->tuner_priv;
	int ret = -EINVAL;

	switch (priv->id) {
	case TDA18271HDC1:
		ret = tda18271c1_tune(fe, ifc, freq, bw, std);
		break;
	case TDA18271HDC2:
		ret = tda18271c2_tune(fe, ifc, freq, bw, std);
		break;
	}
	return ret;
}

/* ------------------------------------------------------------------ */

static int tda18271_set_params(struct dvb_frontend *fe,
@@ -777,12 +794,11 @@ static int tda18271_set_params(struct dvb_frontend *fe,
{
	struct tda18271_priv *priv = fe->tuner_priv;
	struct tda18271_std_map *std_map = &priv->std;
	int ret;
	u8 std;
	u16 sgIF;
	u32 bw, freq = params->frequency;

	BUG_ON(!priv->tune);

	priv->mode = TDA18271_DIGITAL;

	/* see table 22 */
@@ -833,7 +849,16 @@ static int tda18271_set_params(struct dvb_frontend *fe,
		return -EINVAL;
	}

	return priv->tune(fe, sgIF * 1000, freq, bw, std);
	ret = tda18271_tune(fe, sgIF * 1000, freq, bw, std);

	if (ret < 0)
		goto fail;

	priv->frequency = freq;
	priv->bandwidth = (fe->ops.info.type == FE_OFDM) ?
		params->u.ofdm.bandwidth : 0;
fail:
	return ret;
}

static int tda18271_set_analog_params(struct dvb_frontend *fe,
@@ -842,12 +867,11 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
	struct tda18271_priv *priv = fe->tuner_priv;
	struct tda18271_std_map *std_map = &priv->std;
	char *mode;
	int ret;
	u8 std;
	u16 sgIF;
	u32 freq = params->frequency * 62500;

	BUG_ON(!priv->tune);

	priv->mode = TDA18271_ANALOG;

	if (params->std & V4L2_STD_MN) {
@@ -886,7 +910,15 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,

	tda_dbg("setting tda18271 to system %s\n", mode);

	return priv->tune(fe, sgIF * 1000, freq, 0, std);
	ret = tda18271_tune(fe, sgIF * 1000, freq, 0, std);

	if (ret < 0)
		goto fail;

	priv->frequency = freq;
	priv->bandwidth = 0;
fail:
	return ret;
}

static int tda18271_release(struct dvb_frontend *fe)
@@ -986,12 +1018,10 @@ static int tda18271_get_id(struct dvb_frontend *fe)
	case 3:
		name = "TDA18271HD/C1";
		priv->id = TDA18271HDC1;
		priv->tune = tda18271c1_tune;
		break;
	case 4:
		name = "TDA18271HD/C2";
		priv->id = TDA18271HDC2;
		priv->tune = tda18271c2_tune;
		break;
	default:
		name = "Unknown device";
+0 −3
Original line number Diff line number Diff line
@@ -112,9 +112,6 @@ struct tda18271_priv {
	struct tda18271_std_map std;
	struct tda18271_rf_tracking_filter_cal rf_cal_state[8];

	int (*tune) (struct dvb_frontend *fe,
		     u32 ifc, u32 freq, u32 bw, u8 std);

	u32 frequency;
	u32 bandwidth;
};