aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/common/tuners/tda18271-fe.c47
-rw-r--r--drivers/media/common/tuners/tda18271-priv.h2
-rw-r--r--drivers/media/common/tuners/tda18271.h21
3 files changed, 36 insertions, 34 deletions
diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c
index 9dcbdb17f74..f6328bf3121 100644
--- a/drivers/media/common/tuners/tda18271-fe.c
+++ b/drivers/media/common/tuners/tda18271-fe.c
@@ -36,6 +36,27 @@ static LIST_HEAD(hybrid_tuner_instance_list);
/*---------------------------------------------------------------------*/
+static int tda18271_toggle_output(struct dvb_frontend *fe, int standby)
+{
+ struct tda18271_priv *priv = fe->tuner_priv;
+
+ int ret = tda18271_set_standby_mode(fe, standby ? 1 : 0,
+ priv->output_opt & TDA18271_OUTPUT_LT_OFF ? 1 : 0,
+ priv->output_opt & TDA18271_OUTPUT_XT_OFF ? 1 : 0);
+
+ if (tda_fail(ret))
+ goto fail;
+
+ tda_dbg("%s mode: xtal oscillator %s, slave tuner loop thru %s\n",
+ standby ? "standby" : "active",
+ priv->output_opt & TDA18271_OUTPUT_XT_OFF ? "off" : "on",
+ priv->output_opt & TDA18271_OUTPUT_LT_OFF ? "off" : "on");
+fail:
+ return ret;
+}
+
+/*---------------------------------------------------------------------*/
+
static inline int charge_pump_source(struct dvb_frontend *fe, int force)
{
struct tda18271_priv *priv = fe->tuner_priv;
@@ -800,7 +821,7 @@ static int tda18271_init(struct dvb_frontend *fe)
mutex_lock(&priv->lock);
- /* power up */
+ /* full power up */
ret = tda18271_set_standby_mode(fe, 0, 0, 0);
if (tda_fail(ret))
goto fail;
@@ -1017,24 +1038,8 @@ static int tda18271_sleep(struct dvb_frontend *fe)
mutex_lock(&priv->lock);
- switch (priv->standby_mode) {
- case TDA18271_STANDBY_POWER_OFF:
- tda_dbg("standby mode: power off\n");
- ret = tda18271_set_standby_mode(fe, 1, 1, 1);
- break;
- case TDA18271_STANDBY_XT_ON:
- tda_dbg("standby mode: xtal oscillator on\n");
- ret = tda18271_set_standby_mode(fe, 1, 1, 0);
- break;
- case TDA18271_STANDBY_LT_ON:
- tda_dbg("standby mode: slave tuner output / loop thru on\n");
- ret = tda18271_set_standby_mode(fe, 1, 0, 1);
- break;
- case TDA18271_STANDBY_LT_XT_ON:
- default:
- tda_dbg("standby mode: loop thru & xtal oscillator on\n");
- ret = tda18271_set_standby_mode(fe, 1, 0, 0);
- }
+ /* enter standby mode, with required output features enabled */
+ ret = tda18271_toggle_output(fe, 1);
mutex_unlock(&priv->lock);
@@ -1214,8 +1219,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;
+ priv->output_opt = (cfg) ?
+ cfg->output_opt : TDA18271_OUTPUT_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 8c5fabcf5a2..2bee229acd9 100644
--- a/drivers/media/common/tuners/tda18271-priv.h
+++ b/drivers/media/common/tuners/tda18271-priv.h
@@ -108,7 +108,7 @@ struct tda18271_priv {
enum tda18271_role role;
enum tda18271_i2c_gate gate;
enum tda18271_ver id;
- enum tda18271_standby_mode standby_mode;
+ enum tda18271_output_options output_opt;
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 bf6ba099a6b..323f2912128 100644
--- a/drivers/media/common/tuners/tda18271.h
+++ b/drivers/media/common/tuners/tda18271.h
@@ -67,18 +67,15 @@ 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,
+enum tda18271_output_options {
+ /* slave tuner output & loop thru & xtal oscillator always on */
+ TDA18271_OUTPUT_LT_XT_ON = 0,
- /* xtal oscillator on */
- TDA18271_STANDBY_XT_ON,
+ /* slave tuner output loop thru off */
+ TDA18271_OUTPUT_LT_OFF = 1,
- /* slave tuner output / loop thru on */
- TDA18271_STANDBY_LT_ON,
-
- /* power off */
- TDA18271_STANDBY_POWER_OFF,
+ /* xtal oscillator off */
+ TDA18271_OUTPUT_XT_OFF = 2,
};
struct tda18271_config {
@@ -91,8 +88,8 @@ 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;
+ /* output options that can be disabled */
+ enum tda18271_output_options output_opt;
/* force rf tracking filter calibration on startup */
unsigned int rf_cal_on_startup:1;