summaryrefslogtreecommitdiffstats
path: root/drivers/media/common/tuners
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@kernellabs.com>2009-10-24 18:18:03 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 18:40:56 -0200
commit188ea058ff2e671270273a1f5d13f46ca75b8a35 (patch)
tree62939d3ea54575e6eafb23ce37c01355bf2bff0c /drivers/media/common/tuners
parentc54e1dde586ea0e930d6c443ca60a9b9d0310de3 (diff)
V4L/DVB (13217): tda18271: handle rf_cal_on_startup properly during attach
If rf_cal_on_startup is enabled in the structure passed into tda18271_attach, and the cal module option isn't disabled, then we should run the initialization and calibration procedures during the tda18271_attach function call, regardless of how many instances of the driver have been attached. If the device is already calibrated, the driver will detect that and will only calibrate again if necessary. Signed-off-by: Michael Krufky <mkrufky@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/common/tuners')
-rw-r--r--drivers/media/common/tuners/tda18271-fe.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c
index 24f1d38081e..8b934f48b6f 100644
--- a/drivers/media/common/tuners/tda18271-fe.c
+++ b/drivers/media/common/tuners/tda18271-fe.c
@@ -1249,7 +1249,7 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
struct tda18271_config *cfg)
{
struct tda18271_priv *priv = NULL;
- int instance;
+ int instance, rf_cal_on_startup = 0;
mutex_lock(&tda18271_list_mutex);
@@ -1262,8 +1262,6 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
case 1:
{
/* new tuner instance */
- int rf_cal_on_startup;
-
fe->tuner_priv = priv;
tda18271_setup_configuration(fe, cfg);
@@ -1315,7 +1313,20 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
priv->output_opt = cfg->output_opt;
if (cfg->std_map)
tda18271_update_std_map(fe, cfg->std_map);
+
+ /* tda18271_cal_on_startup == -1 when cal
+ * module option is unset */
+ if (tda18271_cal_on_startup == -1) {
+ /* honor attach-time configuration */
+ rf_cal_on_startup =
+ (cfg->rf_cal_on_startup) ? 1 : 0;
+ } else {
+ /* module option overrides attach config */
+ rf_cal_on_startup = tda18271_cal_on_startup;
+ }
}
+ if (rf_cal_on_startup)
+ tda18271_init(fe);
break;
}