aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/common/tuners/tda18271-fe.c16
-rw-r--r--drivers/media/common/tuners/tda18271-priv.h1
-rw-r--r--drivers/media/common/tuners/tda18271.h14
3 files changed, 28 insertions, 3 deletions
diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c
index bc4b004ba7d..64b935f9157 100644
--- a/drivers/media/common/tuners/tda18271-fe.c
+++ b/drivers/media/common/tuners/tda18271-fe.c
@@ -1017,9 +1017,17 @@ static int tda18271_sleep(struct dvb_frontend *fe)
mutex_lock(&priv->lock);
- /* standby mode w/ slave tuner output
- * & loop thru & xtal oscillator on */
- ret = tda18271_set_standby_mode(fe, 1, 0, 0);
+ switch (priv->standby_mode) {
+ case TDA18271_STANDBY_POWER_OFF:
+ ret = tda18271_set_standby_mode(fe, 1, 1, 1);
+ break;
+ case TDA18271_STANDBY_XT_ON:
+ ret = tda18271_set_standby_mode(fe, 1, 1, 0);
+ break;
+ case TDA18271_STANDBY_LT_XT_ON:
+ default:
+ ret = tda18271_set_standby_mode(fe, 1, 0, 0);
+ }
mutex_unlock(&priv->lock);
@@ -1199,6 +1207,8 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr,
priv->gate = (cfg) ? cfg->gate : TDA18271_GATE_AUTO;
priv->role = (cfg) ? cfg->role : TDA18271_MASTER;
priv->config = (cfg) ? cfg->config : 0;
+ priv->standby_mode = (cfg) ?
+ cfg->standby_mode : TDA18271_STANDBY_LT_XT_ON;
/* tda18271_cal_on_startup == -1 when cal
* module option is unset */
diff --git a/drivers/media/common/tuners/tda18271-priv.h b/drivers/media/common/tuners/tda18271-priv.h
index e6a80ad0935..8c5fabcf5a2 100644
--- a/drivers/media/common/tuners/tda18271-priv.h
+++ b/drivers/media/common/tuners/tda18271-priv.h
@@ -108,6 +108,7 @@ struct tda18271_priv {
enum tda18271_role role;
enum tda18271_i2c_gate gate;
enum tda18271_ver id;
+ enum tda18271_standby_mode standby_mode;
unsigned int config; /* interface to saa713x / tda829x */
unsigned int tm_rfcal;
diff --git a/drivers/media/common/tuners/tda18271.h b/drivers/media/common/tuners/tda18271.h
index 71bac9593f1..9ca716f6b1f 100644
--- a/drivers/media/common/tuners/tda18271.h
+++ b/drivers/media/common/tuners/tda18271.h
@@ -67,6 +67,17 @@ enum tda18271_i2c_gate {
TDA18271_GATE_DIGITAL,
};
+enum tda18271_standby_mode {
+ /* slave tuner output & loop thru & xtal oscillator on */
+ TDA18271_STANDBY_LT_XT_ON = 0,
+
+ /* xtal oscillator on */
+ TDA18271_STANDBY_XT_ON,
+
+ /* power off */
+ TDA18271_STANDBY_POWER_OFF,
+};
+
struct tda18271_config {
/* override default if freq / std settings (optional) */
struct tda18271_std_map *std_map;
@@ -77,6 +88,9 @@ struct tda18271_config {
/* use i2c gate provided by analog or digital demod */
enum tda18271_i2c_gate gate;
+ /* allow lower power standby modes */
+ enum tda18271_standby_mode standby_mode;
+
/* force rf tracking filter calibration on startup */
unsigned int rf_cal_on_startup:1;