V4L/DVB (5319): Set tda827x to sleep mode after attach
authorHartmut Hackmann <hartmut.hackmann@t-online.de>
Fri, 27 Apr 2007 15:31:15 +0000 (12:31 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 27 Apr 2007 18:43:36 +0000 (15:43 -0300)
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 <hartmut.hackmann@t-online.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/tda1004x.c
drivers/media/dvb/frontends/tda827x.c

index dbfc94a9c3f7f53be33ebeb9e8ec2875c28a8c10..3de729b3b4bf3705ab02b93d48598da11a95cd8c 100644 (file)
@@ -503,6 +503,7 @@ static int tda10046_fwupload(struct dvb_frontend* fe)
 
        /* 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_frontend* fe)
                        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;
        }
index cff2d1fa40945f13d8f5318a11646c37b018bc52..1fa58c5dac0f78799f29f606263185d493228188 100644 (file)
@@ -426,6 +426,7 @@ struct dvb_frontend *tda827x_attach(struct dvb_frontend *fe, int addr,
 {
        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(struct dvb_frontend *fe, int addr,
        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);