Commit 42f9a03e authored by Michael Krufky's avatar Michael Krufky Committed by Mauro Carvalho Chehab

V4L/DVB (13215): tda18271: add support for the set_config method

Add the set_config method to allow drivers to configure the
tda18271 driver options after attach.
Signed-off-by: default avatarMichael Krufky <mkrufky@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 1724c8fa
...@@ -1185,6 +1185,26 @@ static int tda18271_get_id(struct dvb_frontend *fe) ...@@ -1185,6 +1185,26 @@ static int tda18271_get_id(struct dvb_frontend *fe)
return ret; return ret;
} }
static int tda18271_set_config(struct dvb_frontend *fe, void *priv_cfg)
{
struct tda18271_priv *priv = fe->tuner_priv;
struct tda18271_config *cfg = (struct tda18271_config *) priv_cfg;
priv->gate = (cfg) ? cfg->gate : TDA18271_GATE_AUTO;
priv->role = (cfg) ? cfg->role : TDA18271_MASTER;
priv->config = (cfg) ? cfg->config : 0;
priv->small_i2c = (cfg) ?
cfg->small_i2c : TDA18271_39_BYTE_CHUNK_INIT;
priv->output_opt = (cfg) ?
cfg->output_opt : TDA18271_OUTPUT_LT_XT_ON;
/* override default std map with values in config struct */
if ((cfg) && (cfg->std_map))
tda18271_update_std_map(fe, cfg->std_map);
return 0;
}
static struct dvb_tuner_ops tda18271_tuner_ops = { static struct dvb_tuner_ops tda18271_tuner_ops = {
.info = { .info = {
.name = "NXP TDA18271HD", .name = "NXP TDA18271HD",
...@@ -1197,6 +1217,7 @@ static struct dvb_tuner_ops tda18271_tuner_ops = { ...@@ -1197,6 +1217,7 @@ static struct dvb_tuner_ops tda18271_tuner_ops = {
.set_params = tda18271_set_params, .set_params = tda18271_set_params,
.set_analog_params = tda18271_set_analog_params, .set_analog_params = tda18271_set_analog_params,
.release = tda18271_release, .release = tda18271_release,
.set_config = tda18271_set_config,
.get_frequency = tda18271_get_frequency, .get_frequency = tda18271_get_frequency,
.get_bandwidth = tda18271_get_bandwidth, .get_bandwidth = tda18271_get_bandwidth,
}; };
...@@ -1221,13 +1242,9 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, ...@@ -1221,13 +1242,9 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
/* new tuner instance */ /* new tuner instance */
int rf_cal_on_startup; int rf_cal_on_startup;
priv->gate = (cfg) ? cfg->gate : TDA18271_GATE_AUTO; fe->tuner_priv = priv;
priv->role = (cfg) ? cfg->role : TDA18271_MASTER;
priv->config = (cfg) ? cfg->config : 0; tda18271_set_config(fe, cfg);
priv->small_i2c = (cfg) ?
cfg->small_i2c : TDA18271_39_BYTE_CHUNK_INIT;
priv->output_opt = (cfg) ?
cfg->output_opt : TDA18271_OUTPUT_LT_XT_ON;
/* tda18271_cal_on_startup == -1 when cal /* tda18271_cal_on_startup == -1 when cal
* module option is unset */ * module option is unset */
...@@ -1243,8 +1260,6 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, ...@@ -1243,8 +1260,6 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
priv->cal_initialized = false; priv->cal_initialized = false;
mutex_init(&priv->lock); mutex_init(&priv->lock);
fe->tuner_priv = priv;
if (tda_fail(tda18271_get_id(fe))) if (tda_fail(tda18271_get_id(fe)))
goto fail; goto fail;
...@@ -1276,14 +1291,12 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, ...@@ -1276,14 +1291,12 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
priv->small_i2c = cfg->small_i2c; priv->small_i2c = cfg->small_i2c;
if (cfg->output_opt) if (cfg->output_opt)
priv->output_opt = cfg->output_opt; priv->output_opt = cfg->output_opt;
if (cfg->std_map)
tda18271_update_std_map(fe, cfg->std_map);
} }
break; break;
} }
/* override default std map with values in config struct */
if ((cfg) && (cfg->std_map))
tda18271_update_std_map(fe, cfg->std_map);
mutex_unlock(&tda18271_list_mutex); mutex_unlock(&tda18271_list_mutex);
memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops, memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment