V4L/DVB (12864): tda18271: change output feature configuration to a bitmask

For better readability, treat the low power standby mode configuration
as an output option feature configuration, and change it to a bitmask.

If left unconfigured, all features will remain enabled, just as the
default configuration was before these changes were introduced.

Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c
index 9dcbdb1..f6328bf 100644
--- a/drivers/media/common/tuners/tda18271-fe.c
+++ b/drivers/media/common/tuners/tda18271-fe.c
@@ -36,6 +36,27 @@
 
 /*---------------------------------------------------------------------*/
 
+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 @@
 
 	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 @@
 
 	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 @@
 		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 */