summaryrefslogtreecommitdiff
path: root/linux/drivers
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@kernellabs.com>2008-05-11 11:46:52 -0400
committerMichael Krufky <mkrufky@kernellabs.com>2008-05-11 11:46:52 -0400
commitc0d7564793091ee443a25335a54f0956a53e8815 (patch)
tree53bc62c596d9fbc64ae560bc9652fca141ba3e55 /linux/drivers
parent71911bc952f2394dede17c5713de0b0dfcb04fae (diff)
downloadmediapointer-dvb-s2-c0d7564793091ee443a25335a54f0956a53e8815.tar.gz
mediapointer-dvb-s2-c0d7564793091ee443a25335a54f0956a53e8815.tar.bz2
tda18271: add support for additional low-power standby modes
From: Michael Krufky <mkrufky@kernellabs.com> By default, the driver enters standby mode with slave tuner output loop thru enabled and xtal oscillator on. Not all designs require that slave tuner output loop thru and xtal oscillator remain active while in standby mode, so two additional standby modes have been added: - standby mode with xtal oscillator on (loop thru off) - total power off Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Diffstat (limited to 'linux/drivers')
-rw-r--r--linux/drivers/media/common/tuners/tda18271-fe.c16
-rw-r--r--linux/drivers/media/common/tuners/tda18271-priv.h1
-rw-r--r--linux/drivers/media/common/tuners/tda18271.h14
3 files changed, 28 insertions, 3 deletions
diff --git a/linux/drivers/media/common/tuners/tda18271-fe.c b/linux/drivers/media/common/tuners/tda18271-fe.c
index 6c71b0a16..d28454a7b 100644
--- a/linux/drivers/media/common/tuners/tda18271-fe.c
+++ b/linux/drivers/media/common/tuners/tda18271-fe.c
@@ -1018,9 +1018,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);
@@ -1200,6 +1208,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/linux/drivers/media/common/tuners/tda18271-priv.h b/linux/drivers/media/common/tuners/tda18271-priv.h
index e6aa1f47f..17cfad018 100644
--- a/linux/drivers/media/common/tuners/tda18271-priv.h
+++ b/linux/drivers/media/common/tuners/tda18271-priv.h
@@ -109,6 +109,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/linux/drivers/media/common/tuners/tda18271.h b/linux/drivers/media/common/tuners/tda18271.h
index 71bac9593..9ca716f6b 100644
--- a/linux/drivers/media/common/tuners/tda18271.h
+++ b/linux/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;