V4L/DVB (5319): Set tda827x to sleep mode after attach From: Hartmut Hackmann This change sets the tda827x to sleep mode right after attach in dvb mode. It is just to save power. For the same reason, the ADC of the tda10046 gets turned off in sleep mode. Signed-off-by: Hartmut Hackmann Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb/frontends/tda1004x.c | 2 ++ drivers/media/dvb/frontends/tda827x.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/drivers/media/dvb/frontends/tda1004x.c b/drivers/media/dvb/frontends/tda1004x.c index dbfc94a..3de729b 100644 --- a/drivers/media/dvb/frontends/tda1004x.c +++ b/drivers/media/dvb/frontends/tda1004x.c @@ -503,6 +503,7 @@ static int tda10046_fwupload(struct dvb_ /* The PLLs need to be reprogrammed after sleep */ tda10046_init_plls(fe); + tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0); /* don't re-upload unless necessary */ if (tda1004x_check_upload_ok(state) == 0) @@ -1170,6 +1171,7 @@ static int tda1004x_sleep(struct dvb_fro tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f, (gpio_conf & 0x0f) ^ 0x0a); + tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0xc0); tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1); break; } diff --git a/drivers/media/dvb/frontends/tda827x.c b/drivers/media/dvb/frontends/tda827x.c index cff2d1f..1fa58c5 100644 --- a/drivers/media/dvb/frontends/tda827x.c +++ b/drivers/media/dvb/frontends/tda827x.c @@ -426,6 +426,7 @@ struct dvb_frontend *tda827x_attach(stru { struct tda827x_priv *priv = NULL; u8 data; + u8 sb_msg[] = { 0x30, 0xd0 }; struct i2c_msg msg = { .addr = addr, .flags = I2C_M_RD, .buf = &data, .len = 1 }; dprintk("%s:\n", __FUNCTION__); @@ -446,15 +447,21 @@ struct dvb_frontend *tda827x_attach(stru priv->i2c_addr = addr; priv->i2c_adap = i2c; priv->cfg = cfg; + + msg.flags = 0; + msg.buf = sb_msg; + msg.len = sizeof(sb_msg); + if ((data & 0x3c) == 0) { dprintk("tda827x tuner found\n"); memcpy(&fe->ops.tuner_ops, &tda827xo_tuner_ops, sizeof(struct dvb_tuner_ops)); } else { dprintk("tda827xa tuner found\n"); memcpy(&fe->ops.tuner_ops, &tda827xa_tuner_ops, sizeof(struct dvb_tuner_ops)); + sb_msg[1] = 0x90; } fe->tuner_priv = priv; - + i2c_transfer(i2c, &msg, 1); return fe; } EXPORT_SYMBOL(tda827x_attach);