From: Stefan Ringel <linu...@stefanringel.de>

Signed-off-by: Stefan Ringel <linu...@stefanringel.de>
---
 drivers/media/common/tuners/mt2063.c |  111 ++++++++++++++--------------------
 1 files changed, 46 insertions(+), 65 deletions(-)

diff --git a/drivers/media/common/tuners/mt2063.c 
b/drivers/media/common/tuners/mt2063.c
index fb0a38b..0c5d472 100644
--- a/drivers/media/common/tuners/mt2063.c
+++ b/drivers/media/common/tuners/mt2063.c
@@ -320,20 +320,66 @@ err:
        return ret;
 }
 
+static int mt2063_set_params(struct dvb_frontend *fe)
 {
+       struct mt2063_state *state = fe->tuner_priv;
+       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+       u32 freq, bw;
+       int ret = 0;
 
+       dprintk(1, "\n");
 
+       mutex_lock(&state->lock);
 
+       /* open gate */
+       if (fe->ops.i2c_gate_ctrl)
+               fe->ops.i2c_gate_ctrl(fe, 1);
 
+       /* all calculation is in kHz */
+       freq = c->frequency / 1000;
 
+       switch (c->delivery_system) {
+       case SYS_DVBT:
+               if (c->bandwidth_hz == 0) {
+                       ret = -EINVAL;
+                       goto err;
                }
+               bw = c->bandwidth_hz / 1000;
+               state->mode = MT2063_OFFAIR_COFDM;
+               state->if2 = 36000;
+               break;
+       case SYS_DVBC_ANNEX_A:
+       case SYS_DVBC_ANNEX_C:
+               bw = c->bandwidth_hz / 1000;
+               state->mode = MT2063_CABLE_QAM;
+               state->if2 = 36000;
+               break;
+       case SYS_ATSC:
+               /* TODO */
+       default:
+               ret = -EINVAL;
+               goto err;
        }
 
+       state->frequency = freq;
+       /* for spurcheck */
+       state->bw = bw;
 
+       dprintk(2, "Set input frequency to %d kHz.\n", freq);
 
+       ret = mt2063_set_mode(state, state->mode);
+       if (ret < 0)
+               goto err;
 
+       ret = mt2063_tune(state);
 
+err:
+       /* close gate */
+       if (fe->ops.i2c_gate_ctrl)
+               fe->ops.i2c_gate_ctrl(fe, 0);
 
+       mutex_unlock(&state->lock);
+       return ret;
 }
 
 static int mt2063_init(struct dvb_frontend *fe)
@@ -570,79 +616,14 @@ static struct dvb_tuner_ops mt2063_ops = {
        .get_if_frequency = mt2063_get_if_frequency,
        /* TODO */
 };
-/*
- * As defined on EN 300 429, the DVB-C roll-off factor is 0.15.
- * So, the amount of the needed bandwith is given by:
- *     Bw = Symbol_rate * (1 + 0.15)
- * As such, the maximum symbol rate supported by 6 MHz is given by:
- *     max_symbol_rate = 6 MHz / 1.15 = 5217391 Bauds
- */
-#define MAX_SYMBOL_RATE_6MHz   5217391
 
-static int mt2063_set_params(struct dvb_frontend *fe)
 {
-       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-       struct mt2063_state *state = fe->tuner_priv;
-       int status;
-       s32 pict_car;
-       s32 pict2chanb_vsb;
-       s32 ch_bw;
-       s32 if_mid;
-       s32 rcvr_mode;
-
-       if (!state->init) {
-               status = mt2063_init(fe);
-               if (status < 0)
-                       return status;
-       }
 
-       dprintk(2, "\n");
 
-       if (c->bandwidth_hz == 0)
-               return -EINVAL;
-       if (c->bandwidth_hz <= 6000000)
-               ch_bw = 6000000;
-       else if (c->bandwidth_hz <= 7000000)
-               ch_bw = 7000000;
-       else
-               ch_bw = 8000000;
 
-       switch (c->delivery_system) {
-       case SYS_DVBT:
-               rcvr_mode = MT2063_OFFAIR_COFDM;
-               pict_car = 36125000;
-               pict2chanb_vsb = -(ch_bw / 2);
                break;
-       case SYS_DVBC_ANNEX_A:
-       case SYS_DVBC_ANNEX_C:
-               rcvr_mode = MT2063_CABLE_QAM;
-               pict_car = 36125000;
-               pict2chanb_vsb = -(ch_bw / 2);
                break;
        default:
-               return -EINVAL;
-       }
-       if_mid = pict_car - (pict2chanb_vsb + (ch_bw / 2));
-
-       state->AS_Data.f_LO2_Step = 125000;     /* FIXME: probably 5000 for FM 
*/
-       state->AS_Data.f_out = if_mid;
-       state->AS_Data.f_out_bw = ch_bw + 750000;
-       status = MT2063_SetReceiverMode(state, rcvr_mode);
-       if (status < 0)
-               return status;
-
-       dprintk(1, "Tuning to frequency: %d, bandwidth %d, foffset %d\n",
-               c->frequency, ch_bw, pict2chanb_vsb);
-
-       status = MT2063_Tune(state, (c->frequency + (pict2chanb_vsb + (ch_bw / 
2))));
-
-       if (status < 0)
-               return status;
-
-       state->frequency = c->frequency;
-       return 0;
-}
-
                return -ENODEV;
 
                return -ENODEV;
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to