summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2007-12-08 15:06:30 -0500
committerMichael Krufky <mkrufky@linuxtv.org>2007-12-08 15:06:30 -0500
commit017775baf90cbd3c43a14e4d10e00e1aca9f98f2 (patch)
treefbf6c16cc47c1ef61a50941a0d99d9606b3952ab
parent9cb13d03db18063f6095559ae6578d2c264f3499 (diff)
downloadmediapointer-dvb-s2-017775baf90cbd3c43a14e4d10e00e1aca9f98f2.tar.gz
mediapointer-dvb-s2-017775baf90cbd3c43a14e4d10e00e1aca9f98f2.tar.bz2
tuner: combine set_tv_freq and set_radio_freq into a single set_params method
From: Michael Krufky <mkrufky@linuxtv.org> We can tell whether we are tuning television or radio by testing for struct analog_parameters *params->mode == V4L2_TUNER_RADIO There is no longer any need for separate set_tv_freq and set_radio_freq functions in the analog tuner demodulator modules. Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
-rw-r--r--linux/drivers/media/video/tda8290.c53
-rw-r--r--linux/drivers/media/video/tda9887.c6
-rw-r--r--linux/drivers/media/video/tuner-core.c41
-rw-r--r--linux/drivers/media/video/tuner-driver.h4
4 files changed, 49 insertions, 55 deletions
diff --git a/linux/drivers/media/video/tda8290.c b/linux/drivers/media/video/tda8290.c
index 86b9fa451..2d019b765 100644
--- a/linux/drivers/media/video/tda8290.c
+++ b/linux/drivers/media/video/tda8290.c
@@ -141,31 +141,32 @@ static int tda8295_i2c_bridge(struct dvb_frontend *fe, int close)
/*---------------------------------------------------------------------*/
-static void set_audio(struct dvb_frontend *fe)
+static void set_audio(struct dvb_frontend *fe,
+ struct analog_parameters *params)
{
struct tda8290_priv *priv = fe->analog_demod_priv;
struct tuner *t = priv->t;
char* mode;
- if (t->std & V4L2_STD_MN) {
+ if (params->std & V4L2_STD_MN) {
priv->tda8290_easy_mode = 0x01;
mode = "MN";
- } else if (t->std & V4L2_STD_B) {
+ } else if (params->std & V4L2_STD_B) {
priv->tda8290_easy_mode = 0x02;
mode = "B";
- } else if (t->std & V4L2_STD_GH) {
+ } else if (params->std & V4L2_STD_GH) {
priv->tda8290_easy_mode = 0x04;
mode = "GH";
- } else if (t->std & V4L2_STD_PAL_I) {
+ } else if (params->std & V4L2_STD_PAL_I) {
priv->tda8290_easy_mode = 0x08;
mode = "I";
- } else if (t->std & V4L2_STD_DK) {
+ } else if (params->std & V4L2_STD_DK) {
priv->tda8290_easy_mode = 0x10;
mode = "DK";
- } else if (t->std & V4L2_STD_SECAM_L) {
+ } else if (params->std & V4L2_STD_SECAM_L) {
priv->tda8290_easy_mode = 0x20;
mode = "L";
- } else if (t->std & V4L2_STD_SECAM_LC) {
+ } else if (params->std & V4L2_STD_SECAM_LC) {
priv->tda8290_easy_mode = 0x40;
mode = "LC";
} else {
@@ -176,7 +177,8 @@ static void set_audio(struct dvb_frontend *fe)
tuner_dbg("setting tda829x to system %s\n", mode);
}
-static void tda8290_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void tda8290_set_params(struct dvb_frontend *fe,
+ struct analog_parameters *params)
{
struct tda8290_priv *priv = fe->analog_demod_priv;
struct tuner *t = priv->t;
@@ -203,14 +205,7 @@ static void tda8290_set_freq(struct dvb_frontend *fe, unsigned int freq)
pll_stat;
int i;
- struct analog_parameters params = {
- .frequency = freq,
- .mode = t->mode,
- .audmode = t->audmode,
- .std = t->std
- };
-
- set_audio(fe);
+ set_audio(fe, params);
tuner_dbg("tda827xa config is 0x%02x\n", t->config);
tuner_i2c_xfer_send(&priv->i2c_props, easy_mode, 2);
@@ -231,7 +226,7 @@ static void tda8290_set_freq(struct dvb_frontend *fe, unsigned int freq)
tda8290_i2c_bridge(fe, 1);
if (fe->ops.tuner_ops.set_analog_params)
- fe->ops.tuner_ops.set_analog_params(fe, &params);
+ fe->ops.tuner_ops.set_analog_params(fe, params);
for (i = 0; i < 3; i++) {
tuner_i2c_xfer_send(&priv->i2c_props, &addr_pll_stat, 1);
@@ -394,23 +389,17 @@ static int tda8295_has_signal(struct dvb_frontend *fe)
/*---------------------------------------------------------------------*/
-static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void tda8295_set_params(struct dvb_frontend *fe,
+ struct analog_parameters *params)
{
struct tda8290_priv *priv = fe->analog_demod_priv;
struct tuner *t = priv->t;
unsigned char blanking_mode[] = { 0x1d, 0x00 };
- struct analog_parameters params = {
- .frequency = freq,
- .mode = t->mode,
- .audmode = t->audmode,
- .std = t->std
- };
-
- set_audio(fe);
+ set_audio(fe, params);
- tuner_dbg("%s: freq = %d\n", __FUNCTION__, freq);
+ tuner_dbg("%s: freq = %d\n", __FUNCTION__, params->frequency);
tda8295_power(fe, 1);
tda8295_agc1_out(fe, 1);
@@ -427,7 +416,7 @@ static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq)
tda8295_i2c_bridge(fe, 1);
if (fe->ops.tuner_ops.set_analog_params)
- fe->ops.tuner_ops.set_analog_params(fe, &params);
+ fe->ops.tuner_ops.set_analog_params(fe, params);
if (priv->cfg.agcf)
priv->cfg.agcf(fe);
@@ -704,8 +693,7 @@ static int tda8295_probe(struct tuner_i2c_props *i2c_props)
}
static struct analog_tuner_ops tda8290_tuner_ops = {
- .set_tv_freq = tda8290_set_freq,
- .set_radio_freq = tda8290_set_freq,
+ .set_params = tda8290_set_params,
.has_signal = tda8290_has_signal,
.standby = tda8290_standby,
.release = tda829x_release,
@@ -713,8 +701,7 @@ static struct analog_tuner_ops tda8290_tuner_ops = {
};
static struct analog_tuner_ops tda8295_tuner_ops = {
- .set_tv_freq = tda8295_set_freq,
- .set_radio_freq = tda8295_set_freq,
+ .set_params = tda8295_set_params,
.has_signal = tda8295_has_signal,
.standby = tda8295_standby,
.release = tda829x_release,
diff --git a/linux/drivers/media/video/tda9887.c b/linux/drivers/media/video/tda9887.c
index cefba2a14..12f8ca279 100644
--- a/linux/drivers/media/video/tda9887.c
+++ b/linux/drivers/media/video/tda9887.c
@@ -633,7 +633,8 @@ static void tda9887_standby(struct dvb_frontend *fe)
tda9887_configure(fe);
}
-static void tda9887_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void tda9887_set_params(struct dvb_frontend *fe,
+ struct analog_parameters *params)
{
tda9887_configure(fe);
}
@@ -645,8 +646,7 @@ static void tda9887_release(struct dvb_frontend *fe)
}
static struct analog_tuner_ops tda9887_tuner_ops = {
- .set_tv_freq = tda9887_set_freq,
- .set_radio_freq = tda9887_set_freq,
+ .set_params = tda9887_set_params,
.standby = tda9887_standby,
.tuner_status = tda9887_tuner_status,
.get_afc = tda9887_get_afc,
diff --git a/linux/drivers/media/video/tuner-core.c b/linux/drivers/media/video/tuner-core.c
index 0b3bc1c91..df65efd46 100644
--- a/linux/drivers/media/video/tuner-core.c
+++ b/linux/drivers/media/video/tuner-core.c
@@ -107,23 +107,17 @@ MODULE_LICENSE("GPL");
/* ---------------------------------------------------------------------- */
-static void fe_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void fe_set_params(struct dvb_frontend *fe,
+ struct analog_parameters *params)
{
struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
struct tuner *t = fe->analog_demod_priv;
- struct analog_parameters params = {
- .frequency = freq,
- .mode = t->mode,
- .audmode = t->audmode,
- .std = t->std
- };
-
if (NULL == fe_tuner_ops->set_analog_params) {
tuner_warn("Tuner frontend module has no way to set freq\n");
return;
}
- fe_tuner_ops->set_analog_params(fe, &params);
+ fe_tuner_ops->set_analog_params(fe, params);
}
static void fe_release(struct dvb_frontend *fe)
@@ -165,8 +159,7 @@ static int fe_has_signal(struct dvb_frontend *fe)
static void tuner_status(struct dvb_frontend *fe);
static struct analog_tuner_ops tuner_core_ops = {
- .set_tv_freq = fe_set_freq,
- .set_radio_freq = fe_set_freq,
+ .set_params = fe_set_params,
.standby = fe_standby,
.release = fe_release,
.has_signal = fe_has_signal,
@@ -179,11 +172,17 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq)
struct tuner *t = i2c_get_clientdata(c);
struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+ struct analog_parameters params = {
+ .mode = t->mode,
+ .audmode = t->audmode,
+ .std = t->std
+ };
+
if (t->type == UNSET) {
tuner_warn ("tuner type not set\n");
return;
}
- if ((NULL == ops) || (NULL == ops->set_tv_freq)) {
+ if ((NULL == ops) || (NULL == ops->set_params)) {
tuner_warn ("Tuner has no way to set tv freq\n");
return;
}
@@ -198,7 +197,9 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq)
else
freq = tv_range[1] * 16;
}
- ops->set_tv_freq(&t->fe, freq);
+ params.frequency = freq;
+
+ ops->set_params(&t->fe, &params);
}
static void set_radio_freq(struct i2c_client *c, unsigned int freq)
@@ -206,11 +207,17 @@ static void set_radio_freq(struct i2c_client *c, unsigned int freq)
struct tuner *t = i2c_get_clientdata(c);
struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+ struct analog_parameters params = {
+ .mode = t->mode,
+ .audmode = t->audmode,
+ .std = t->std
+ };
+
if (t->type == UNSET) {
tuner_warn ("tuner type not set\n");
return;
}
- if ((NULL == ops) || (NULL == ops->set_radio_freq)) {
+ if ((NULL == ops) || (NULL == ops->set_params)) {
tuner_warn ("tuner has no way to set radio frequency\n");
return;
}
@@ -225,8 +232,9 @@ static void set_radio_freq(struct i2c_client *c, unsigned int freq)
else
freq = radio_range[1] * 16000;
}
+ params.frequency = freq;
- ops->set_radio_freq(&t->fe, freq);
+ ops->set_params(&t->fe, &params);
}
static void set_freq(struct i2c_client *c, unsigned long freq)
@@ -388,8 +396,7 @@ static void set_type(struct i2c_client *c, unsigned int type,
ops = t->fe.ops.analog_demod_ops;
- if (((NULL == ops) ||
- ((NULL == ops->set_tv_freq) && (NULL == ops->set_radio_freq))) &&
+ if (((NULL == ops) || (NULL == ops->set_params)) &&
(fe_tuner_ops->set_analog_params)) {
strlcpy(t->i2c->name, fe_tuner_ops->info.name,
sizeof(t->i2c->name));
diff --git a/linux/drivers/media/video/tuner-driver.h b/linux/drivers/media/video/tuner-driver.h
index a4db32d97..91913ee08 100644
--- a/linux/drivers/media/video/tuner-driver.h
+++ b/linux/drivers/media/video/tuner-driver.h
@@ -32,8 +32,8 @@ extern unsigned const int tuner_count;
struct tuner;
struct analog_tuner_ops {
- void (*set_tv_freq)(struct dvb_frontend *fe, unsigned int freq);
- void (*set_radio_freq)(struct dvb_frontend *fe, unsigned int freq);
+ void (*set_params)(struct dvb_frontend *fe,
+ struct analog_parameters *params);
int (*has_signal)(struct dvb_frontend *fe);
int (*is_stereo)(struct dvb_frontend *fe);
int (*get_afc)(struct dvb_frontend *fe);