V4L/DVB (3859): Convert s5h1420 to refactored tuner code
authorAndrew de Quincey <adq_dvb@lidskialf.net>
Tue, 18 Apr 2006 20:47:10 +0000 (17:47 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 25 Jun 2006 04:58:45 +0000 (01:58 -0300)
Convert to tuner_ops calls.
Remove pll function pointers from structure.
Remove unneeded tuner calls.
Add i2c gate control function.

Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/s5h1420.c
drivers/media/dvb/frontends/s5h1420.h

index d69477596921909e38ab53fda4d236f979352eb8..5dee511544bf29c970fd6509753382d05b2d5e62 100644 (file)
@@ -584,7 +584,6 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe,
        struct s5h1420_state* state = fe->demodulator_priv;
        int frequency_delta;
        struct dvb_frontend_tune_settings fesettings;
-       u32 tmp;
 
        /* check if we should do a fast-tune */
        memcpy(&fesettings.parameters, p, sizeof(struct dvb_frontend_parameters));
@@ -596,10 +595,17 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe,
            (state->fec_inner == p->u.qpsk.fec_inner) &&
            (state->symbol_rate == p->u.qpsk.symbol_rate)) {
 
-               if (state->config->pll_set) {
-                       s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) | 1);
-                       state->config->pll_set(fe, p, &tmp);
+               if (fe->ops->tuner_ops.set_params) {
+                       fe->ops->tuner_ops.set_params(fe, p);
+                       if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0);
+               }
+               if (fe->ops->tuner_ops.get_frequency) {
+                       u32 tmp;
+                       fe->ops->tuner_ops.get_frequency(fe, &tmp);
+                       if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0);
                        s5h1420_setfreqoffset(state, p->frequency - tmp);
+               } else {
+                       s5h1420_setfreqoffset(state, 0);
                }
                return 0;
        }
@@ -646,9 +652,9 @@ static int s5h1420_set_frontend(struct dvb_frontend* fe,
        s5h1420_writereg(state, 0x05, s5h1420_readreg(state, 0x05) | 1);
 
        /* set tuner PLL */
-       if (state->config->pll_set) {
-               s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) | 1);
-               state->config->pll_set(fe, p, &tmp);
+       if (fe->ops->tuner_ops.set_params) {
+               fe->ops->tuner_ops.set_params(fe, p);
+               if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0);
                s5h1420_setfreqoffset(state, 0);
        }
 
@@ -708,6 +714,17 @@ static int s5h1420_get_tune_settings(struct dvb_frontend* fe,
        return 0;
 }
 
+static int s5h1420_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
+{
+       struct s5h1420_state* state = fe->demodulator_priv;
+
+       if (enable) {
+               return s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) | 1);
+       } else {
+               return s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) & 0xfe);
+       }
+}
+
 static int s5h1420_init (struct dvb_frontend* fe)
 {
        struct s5h1420_state* state = fe->demodulator_priv;
@@ -717,13 +734,6 @@ static int s5h1420_init (struct dvb_frontend* fe)
        msleep(10);
        s5h1420_reset(state);
 
-       /* init PLL */
-       if (state->config->pll_init) {
-               s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) | 1);
-               state->config->pll_init(fe);
-               s5h1420_writereg (state, 0x02, s5h1420_readreg(state,0x02) & 0xfe);
-       }
-
        return 0;
 }
 
@@ -800,6 +810,7 @@ static struct dvb_frontend_ops s5h1420_ops = {
 
        .init = s5h1420_init,
        .sleep = s5h1420_sleep,
+       .i2c_gate_ctrl = s5h1420_i2c_gate_ctrl,
 
        .set_frontend = s5h1420_set_frontend,
        .get_frontend = s5h1420_get_frontend,
index 73296f13c324b67910b8f55672395d7e63d3351a..4e39015fa67e38c17bf519e8f6b143ff81a2fb3f 100644 (file)
@@ -32,10 +32,6 @@ struct s5h1420_config
 
        /* does the inversion require inversion? */
        u8 invert:1;
-
-       /* PLL maintenance */
-       int (*pll_init)(struct dvb_frontend* fe);
-       int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u32* freqout);
 };
 
 extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config,