V4L/DVB (6442): move std if setting from tda8290 to tda827x

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
diff --git a/drivers/media/dvb/frontends/tda827x.c b/drivers/media/dvb/frontends/tda827x.c
index 6de1aea..8329d33 100644
--- a/drivers/media/dvb/frontends/tda827x.c
+++ b/drivers/media/dvb/frontends/tda827x.c
@@ -38,10 +38,57 @@
 	int i2c_addr;
 	struct i2c_adapter *i2c_adap;
 	struct tda827x_config *cfg;
+
+	unsigned int sgIF;
+	unsigned char lpsel;
+
 	u32 frequency;
 	u32 bandwidth;
 };
 
+static void tda827x_set_std(struct dvb_frontend *fe,
+			    struct analog_parameters *params)
+{
+	struct tda827x_priv *priv = fe->tuner_priv;
+	char *mode;
+
+	priv->lpsel = 0;
+	if (params->std & V4L2_STD_MN) {
+		priv->sgIF = 92;
+		priv->lpsel = 1;
+		mode = "MN";
+	} else if (params->std & V4L2_STD_B) {
+		priv->sgIF = 108;
+		mode = "B";
+	} else if (params->std & V4L2_STD_GH) {
+		priv->sgIF = 124;
+		mode = "GH";
+	} else if (params->std & V4L2_STD_PAL_I) {
+		priv->sgIF = 124;
+		mode = "I";
+	} else if (params->std & V4L2_STD_DK) {
+		priv->sgIF = 124;
+		mode = "DK";
+	} else if (params->std & V4L2_STD_SECAM_L) {
+		priv->sgIF = 124;
+		mode = "L";
+	} else if (params->std & V4L2_STD_SECAM_LC) {
+		priv->sgIF = 20;
+		mode = "LC";
+	} else {
+		priv->sgIF = 124;
+		mode = "xx";
+	}
+
+	if (params->mode == V4L2_TUNER_RADIO)
+		priv->sgIF = 88; /* if frequency is 5.5 MHz */
+
+	dprintk("setting tda827x to system %s\n", mode);
+}
+
+
+/* ------------------------------------------------------------------ */
+
 struct tda827x_data {
 	u32 lomax;
 	u8  spd;
@@ -189,10 +236,12 @@
 	struct i2c_msg msg = { .addr = priv->i2c_addr, .flags = 0 };
 	unsigned int freq = params->frequency;
 
+	tda827x_set_std(fe, params);
+
 	if (params->mode == V4L2_TUNER_RADIO)
 		freq = freq / 1000;
 
-	N = freq + priv->cfg->sgIF;
+	N = freq + priv->sgIF;
 
 	i = 0;
 	while (tda827x_table[i].lomax < N * 62500) {
@@ -207,7 +256,7 @@
 	tuner_reg[1] = (unsigned char)(N>>8);
 	tuner_reg[2] = (unsigned char) N;
 	tuner_reg[3] = 0x40;
-	tuner_reg[4] = 0x52 + (priv->cfg->tda827x_lpsel << 5);
+	tuner_reg[4] = 0x52 + (priv->lpsel << 5);
 	tuner_reg[5] = (tda827x_table[i].spd    << 6) +
 		       (tda827x_table[i].div1p5 << 5) +
 		       (tda827x_table[i].bs     << 3) + tda827x_table[i].bp;
@@ -550,13 +599,15 @@
 			       .buf = tuner_reg, .len = sizeof(tuner_reg) };
 	unsigned int freq = params->frequency;
 
+	tda827x_set_std(fe, params);
+
 	tda827xa_lna_gain(fe, 1, params);
 	msleep(10);
 
 	if (params->mode == V4L2_TUNER_RADIO)
 		freq = freq / 1000;
 
-	N = freq + priv->cfg->sgIF;
+	N = freq + priv->sgIF;
 
 	i = 0;
 	while (tda827xa_analog[i].lomax < N * 62500) {
@@ -587,7 +638,7 @@
 	tuner_reg[1] = 0xff;
 	tuner_reg[2] = 0xe0;
 	tuner_reg[3] = 0;
-	tuner_reg[4] = 0x99 + (priv->cfg->tda827x_lpsel << 1);
+	tuner_reg[4] = 0x99 + (priv->lpsel << 1);
 	msg.len = 5;
 	i2c_transfer(priv->i2c_adap, &msg, 1);
 
@@ -627,7 +678,7 @@
 	i2c_transfer(priv->i2c_adap, &msg, 1);
 
 	tuner_reg[0] = 0xc0;
-	tuner_reg[1] = 0x19 + (priv->cfg->tda827x_lpsel << 1);
+	tuner_reg[1] = 0x19 + (priv->lpsel << 1);
 	i2c_transfer(priv->i2c_adap, &msg, 1);
 
 	priv->frequency = freq * 62500;