Skip to content

Commit

Permalink
V4L/DVB (12864): tda18271: change output feature configuration to a b…
Browse files Browse the repository at this point in the history
…itmask

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>
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Sep 19, 2009
1 parent 2dfca76 commit 4240b46
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 34 deletions.
47 changes: 26 additions & 21 deletions drivers/media/common/tuners/tda18271-fe.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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 */
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/common/tuners/tda18271-priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
21 changes: 9 additions & 12 deletions drivers/media/common/tuners/tda18271.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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;
Expand Down

0 comments on commit 4240b46

Please sign in to comment.