From 5c82f4497b46e9c3877618bc36661a4abbf9c646 Mon Sep 17 00:00:00 2001 From: Michael Krufky Date: Mon, 22 Oct 2007 01:10:39 -0300 Subject: [PATCH] V4L/DVB (6442): move std if setting from tda8290 to tda827x Signed-off-by: Michael Krufky Reviewed-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb/frontends/tda827x.c | 61 ++++++++++++++++++++++++++++++++--- drivers/media/dvb/frontends/tda827x.h | 3 -- drivers/media/video/tda8290.c | 20 +----------- 3 files changed, 57 insertions(+), 27 deletions(-) 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 @@ struct tda827x_priv { 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 @@ static int tda827xo_set_analog_params(struct dvb_frontend *fe, 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 @@ static int tda827xo_set_analog_params(struct dvb_frontend *fe, 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 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, .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 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, 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 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, 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; diff --git a/drivers/media/dvb/frontends/tda827x.h b/drivers/media/dvb/frontends/tda827x.h index 06626f7..92eb65b 100644 --- a/drivers/media/dvb/frontends/tda827x.h +++ b/drivers/media/dvb/frontends/tda827x.h @@ -35,9 +35,6 @@ struct tda827x_config int (*sleep) (struct dvb_frontend *fe); /* interface to tda829x driver */ - unsigned char tda827x_lpsel; - unsigned int sgIF; - unsigned int *config; int (*tuner_callback) (void *dev, int command, int arg); diff --git a/drivers/media/video/tda8290.c b/drivers/media/video/tda8290.c index 288865c..1b19b93 100644 --- a/drivers/media/video/tda8290.c +++ b/drivers/media/video/tda8290.c @@ -104,45 +104,32 @@ static void set_audio(struct dvb_frontend *fe) struct tuner *t = priv->t; char* mode; - priv->cfg.tda827x_lpsel = 0; if (t->std & V4L2_STD_MN) { - priv->cfg.sgIF = 92; priv->tda8290_easy_mode = 0x01; - priv->cfg.tda827x_lpsel = 1; mode = "MN"; } else if (t->std & V4L2_STD_B) { - priv->cfg.sgIF = 108; priv->tda8290_easy_mode = 0x02; mode = "B"; } else if (t->std & V4L2_STD_GH) { - priv->cfg.sgIF = 124; priv->tda8290_easy_mode = 0x04; mode = "GH"; } else if (t->std & V4L2_STD_PAL_I) { - priv->cfg.sgIF = 124; priv->tda8290_easy_mode = 0x08; mode = "I"; } else if (t->std & V4L2_STD_DK) { - priv->cfg.sgIF = 124; priv->tda8290_easy_mode = 0x10; mode = "DK"; } else if (t->std & V4L2_STD_SECAM_L) { - priv->cfg.sgIF = 124; priv->tda8290_easy_mode = 0x20; mode = "L"; } else if (t->std & V4L2_STD_SECAM_LC) { - priv->cfg.sgIF = 20; priv->tda8290_easy_mode = 0x40; mode = "LC"; } else { - priv->cfg.sgIF = 124; priv->tda8290_easy_mode = 0x10; mode = "xx"; } - if (t->mode == V4L2_TUNER_RADIO) - priv->cfg.sgIF = 88; /* if frequency is 5.5 MHz */ - tuner_dbg("setting tda8290 to system %s\n", mode); } @@ -368,7 +355,6 @@ static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq) { struct tda8290_priv *priv = fe->analog_demod_priv; struct tuner *t = priv->t; - u16 ifc; unsigned char blanking_mode[] = { 0x1d, 0x00 }; @@ -381,9 +367,7 @@ static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq) set_audio(fe); - ifc = priv->cfg.sgIF; /* FIXME */ - - tuner_dbg("%s: ifc = %u, freq = %d\n", __FUNCTION__, ifc, freq); + tuner_dbg("%s: freq = %d\n", __FUNCTION__, freq); tda8295_power(fe, 1); tda8295_agc1_out(fe, 1); @@ -625,7 +609,6 @@ int tda8290_attach(struct tuner *t) tuner_info("type set to %s\n", t->i2c.name); - priv->cfg.tda827x_lpsel = 0; t->mode = V4L2_TUNER_ANALOG_TV; tda8290_init_tuner(&t->fe); @@ -715,7 +698,6 @@ int tda8295_attach(struct tuner *t) t->fe.ops.analog_demod_ops = &tda8295_tuner_ops; - priv->cfg.tda827x_lpsel = 0; t->mode = V4L2_TUNER_ANALOG_TV; tda8295_init_if(&t->fe); -- 2.7.4