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);
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 */
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;
/* 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;