V4L/DVB (6978): tda18271: store frequency and bandwidth after successful tune
authorMichael Krufky <mkrufky@linuxtv.org>
Sun, 6 Jan 2008 03:55:21 +0000 (00:55 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:04:42 +0000 (19:04 -0200)
Store last tuned frequency & bandwidth after successful tune.

Clean up tune functions -- remove pointer to tune function in
state structure, instead call tune function based on priv->id.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/tda18271-fe.c
drivers/media/dvb/frontends/tda18271-priv.h

index 1a86c9f7a7e4feb1c7cf1cbc6f7fcd807280c3e1..c1da16ad07e7d785bb6434d6b70e03555cd2b49e 100644 (file)
@@ -770,6 +770,23 @@ static int tda18271c1_tune(struct dvb_frontend *fe,
        return 0;
 }
 
+static inline int tda18271_tune(struct dvb_frontend *fe,
+                               u32 ifc, u32 freq, u32 bw, u8 std)
+{
+       struct tda18271_priv *priv = fe->tuner_priv;
+       int ret = -EINVAL;
+
+       switch (priv->id) {
+       case TDA18271HDC1:
+               ret = tda18271c1_tune(fe, ifc, freq, bw, std);
+               break;
+       case TDA18271HDC2:
+               ret = tda18271c2_tune(fe, ifc, freq, bw, std);
+               break;
+       }
+       return ret;
+}
+
 /* ------------------------------------------------------------------ */
 
 static int tda18271_set_params(struct dvb_frontend *fe,
@@ -777,12 +794,11 @@ static int tda18271_set_params(struct dvb_frontend *fe,
 {
        struct tda18271_priv *priv = fe->tuner_priv;
        struct tda18271_std_map *std_map = &priv->std;
+       int ret;
        u8 std;
        u16 sgIF;
        u32 bw, freq = params->frequency;
 
-       BUG_ON(!priv->tune);
-
        priv->mode = TDA18271_DIGITAL;
 
        /* see table 22 */
@@ -833,7 +849,16 @@ static int tda18271_set_params(struct dvb_frontend *fe,
                return -EINVAL;
        }
 
-       return priv->tune(fe, sgIF * 1000, freq, bw, std);
+       ret = tda18271_tune(fe, sgIF * 1000, freq, bw, std);
+
+       if (ret < 0)
+               goto fail;
+
+       priv->frequency = freq;
+       priv->bandwidth = (fe->ops.info.type == FE_OFDM) ?
+               params->u.ofdm.bandwidth : 0;
+fail:
+       return ret;
 }
 
 static int tda18271_set_analog_params(struct dvb_frontend *fe,
@@ -842,12 +867,11 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
        struct tda18271_priv *priv = fe->tuner_priv;
        struct tda18271_std_map *std_map = &priv->std;
        char *mode;
+       int ret;
        u8 std;
        u16 sgIF;
        u32 freq = params->frequency * 62500;
 
-       BUG_ON(!priv->tune);
-
        priv->mode = TDA18271_ANALOG;
 
        if (params->std & V4L2_STD_MN) {
@@ -886,7 +910,15 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
 
        tda_dbg("setting tda18271 to system %s\n", mode);
 
-       return priv->tune(fe, sgIF * 1000, freq, 0, std);
+       ret = tda18271_tune(fe, sgIF * 1000, freq, 0, std);
+
+       if (ret < 0)
+               goto fail;
+
+       priv->frequency = freq;
+       priv->bandwidth = 0;
+fail:
+       return ret;
 }
 
 static int tda18271_release(struct dvb_frontend *fe)
@@ -986,12 +1018,10 @@ static int tda18271_get_id(struct dvb_frontend *fe)
        case 3:
                name = "TDA18271HD/C1";
                priv->id = TDA18271HDC1;
-               priv->tune = tda18271c1_tune;
                break;
        case 4:
                name = "TDA18271HD/C2";
                priv->id = TDA18271HDC2;
-               priv->tune = tda18271c2_tune;
                break;
        default:
                name = "Unknown device";
index 7b06e0599dc5f41515e1a572fe147b60340f417e..b4d1ab770ca20a5ff8e176f554838e4d1fb4cdfc 100644 (file)
@@ -112,9 +112,6 @@ struct tda18271_priv {
        struct tda18271_std_map std;
        struct tda18271_rf_tracking_filter_cal rf_cal_state[8];
 
-       int (*tune) (struct dvb_frontend *fe,
-                    u32 ifc, u32 freq, u32 bw, u8 std);
-
        u32 frequency;
        u32 bandwidth;
 };