V4L/DVB (3935): Add missing pll gate control calls
authorAndrew de Quincey <adq_dvb@lidskialf.net>
Mon, 22 May 2006 13:31:40 +0000 (10:31 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 25 Jun 2006 04:59:52 +0000 (01:59 -0300)
I'd missed some of these out, breaking the av7110 tuning. I then checked for
more and added them in where necessary. They may not actually be necessary
in all these locations, but if not, they'll simply have no effect.
Add small delay to stv0299 pll gate control to fix tuning problems.

Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/bsbe1.h
drivers/media/dvb/frontends/bsru6.h
drivers/media/dvb/frontends/lg_h06xf.h
drivers/media/dvb/frontends/stv0299.c
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
drivers/media/video/saa7134/saa7134-dvb.c

index 6b52d5abf19fc1042afb4a115b59bca82cbbf615..b2aeddb14e16aaf0db6166f4eb2c86076ac79909 100644 (file)
@@ -106,6 +106,8 @@ static int alps_bsbe1_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
        data[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
        data[3] = (params->frequency > 1530000) ? 0xE0 : 0xE4;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        ret = i2c_transfer(i2c, &msg, 1);
        return (ret != 1) ? -EIO : 0;
 }
index 5d13c5e4df64661b531a159728826fcd4d07132d..5533512b04c64a5ebde95b170a816f56223aeba9 100644 (file)
@@ -120,6 +120,8 @@ static int alps_bsru6_tuner_set_params(struct dvb_frontend *fe, struct dvb_front
        if (params->frequency > 1530000)
                buf[3] = 0xc0;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(i2c, &msg, 1) != 1)
                return -EIO;
        return 0;
index d8449f8cff719cddc2dd0cef6b9179b025873fb0..c59fe4180522c04719d85ee8ce18c4adcd8abfb7 100644 (file)
@@ -29,6 +29,8 @@ static int lg_h06xf_pll_set(struct dvb_frontend* fe, struct i2c_adapter* i2c_ada
        int err;
 
        dvb_pll_configure(&dvb_pll_lg_tdvs_h06xf, buf, params->frequency, 0);
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if ((err = i2c_transfer(i2c_adap, &msg, 1)) != 1) {
                printk(KERN_WARNING "lg_h06xf: %s error "
                        "(addr %02x <- %02x, err = %i)\n",
@@ -45,6 +47,8 @@ static int lg_h06xf_pll_set(struct dvb_frontend* fe, struct i2c_adapter* i2c_ada
        buf[0] |= 0x18;
        buf[1] = 0x50;
        msg.len = 2;
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if ((err = i2c_transfer(i2c_adap, &msg, 1)) != 1) {
                printk(KERN_WARNING "lg_h06xf: %s error "
                        "(addr %02x <- %02x, err = %i)\n",
index 5a81310235a43714d62848b2a468ef3bb10adc2c..e91bb5842dc416fabe8e0d342b626daa3431b54c 100644 (file)
@@ -604,10 +604,12 @@ static int stv0299_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
        struct stv0299_state* state = fe->demodulator_priv;
 
        if (enable) {
-               return stv0299_writeregI(state, 0x05, 0xb5);
+               stv0299_writeregI(state, 0x05, 0xb5);
        } else {
-               return stv0299_writeregI(state, 0x05, 0x35);
+               stv0299_writeregI(state, 0x05, 0x35);
        }
+       udelay(1);
+       return 0;
 }
 
 static int stv0299_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings)
index cf264512d36feecb95f59dc2726f875c83c99fcb..e540dacf5ce246ad95afaae2af32565fc57589d3 100644 (file)
@@ -1039,6 +1039,8 @@ static int alps_tdmb7_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
        data[2] = ((div >> 10) & 0x60) | 0x85;
        data[3] = params->frequency < 592000000 ? 0x40 : 0x80;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
        return 0;
 }
@@ -1059,6 +1061,8 @@ static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
        struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };
 
        // setup PLL configuration
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
        msleep(1);
 
@@ -1066,6 +1070,8 @@ static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
        tuner_msg.addr = 0x65;
        tuner_msg.buf = disable_mc44BC374c;
        tuner_msg.len = sizeof(disable_mc44BC374c);
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
                i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
        }
@@ -1133,6 +1139,8 @@ static int philips_tdm1316l_tuner_set_params(struct dvb_frontend* fe, struct dvb
        tuner_buf[2] = 0xca;
        tuner_buf[3] = (cp << 5) | (filter << 3) | band;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
                return -EIO;
 
@@ -1296,6 +1304,8 @@ static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe, struct dvb_
        if (ttusb->revision == TTUSB_REV_2_2)
                buf[3] |= 0x20;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
                return -EIO;
 
@@ -1328,6 +1338,8 @@ static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *f
        buf[2] = 0x8e;
        buf[3] = 0x00;
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
                return -EIO;
 
@@ -1353,6 +1365,8 @@ static int alps_tdbe2_tuner_set_params(struct dvb_frontend* fe, struct dvb_front
        data[2] = 0x85 | ((div >> 10) & 0x60);
        data[3] = (params->frequency < 174000000 ? 0x88 : params->frequency < 470000000 ? 0x84 : 0x81);
 
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
                return -EIO;
 
index a83db2abb44950a0accc9f02c46aace1b3edbe59..f2b155a2299d2c05a18a1ddbf7b57cdaa4e7dbde 100644 (file)
@@ -150,9 +150,13 @@ static int mt352_pinnacle_tuner_calc_regs(struct dvb_frontend* fe,
        f.tuner     = 0;
        f.type      = V4L2_TUNER_DIGITAL_TV;
        f.frequency = params->frequency / 1000 * 16 / 1000;
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        i2c_transfer(&dev->i2c_adap, &msg, 1);
        saa7134_i2c_call_clients(dev,VIDIOC_S_FREQUENCY,&f);
        msg.buf = on;
+       if (fe->ops->i2c_gate_ctrl)
+               fe->ops->i2c_gate_ctrl(fe, 1);
        i2c_transfer(&dev->i2c_adap, &msg, 1);
 
        pinnacle_antenna_pwr(dev, antenna_pwr);