[media] af9033: IT9135 v2 supported related changes
authorAntti Palosaari <crope@iki.fi>
Sun, 3 Feb 2013 16:39:55 +0000 (13:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Mar 2013 21:55:45 +0000 (18:55 -0300)
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb-frontends/af9033.c

index dece775836ac87c64cb6d4518ee7bad264608874..f51022817fed8fc53bc01886ed74a311462793f5 100644 (file)
@@ -285,10 +285,29 @@ static int af9033_init(struct dvb_frontend *fe)
                        goto err;
        }
 
+       /*
+        * FIXME: These inits are logically property of demodulator driver
+        * (that driver), but currently in case of IT9135 those are done by
+        * tuner driver.
+        */
+
        /* load OFSM settings */
        dev_dbg(&state->i2c->dev, "%s: load ofsm settings\n", __func__);
-       len = ARRAY_SIZE(ofsm_init);
-       init = ofsm_init;
+       switch (state->cfg.tuner) {
+       case AF9033_TUNER_IT9135_38:
+       case AF9033_TUNER_IT9135_51:
+       case AF9033_TUNER_IT9135_52:
+       case AF9033_TUNER_IT9135_60:
+       case AF9033_TUNER_IT9135_61:
+       case AF9033_TUNER_IT9135_62:
+               len = 0;
+               break;
+       default:
+               len = ARRAY_SIZE(ofsm_init);
+               init = ofsm_init;
+               break;
+       }
+
        for (i = 0; i < len; i++) {
                ret = af9033_wr_reg(state, init[i].reg, init[i].val);
                if (ret < 0)
@@ -424,7 +443,8 @@ err:
 static int af9033_get_tune_settings(struct dvb_frontend *fe,
                struct dvb_frontend_tune_settings *fesettings)
 {
-       fesettings->min_delay_ms = 800;
+       /* 800 => 2000 because IT9135 v2 is slow to gain lock */
+       fesettings->min_delay_ms = 2000;
        fesettings->step_size = 0;
        fesettings->max_drift = 0;
 
@@ -513,6 +533,11 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
                buf[0] = (freq_cw >>  0) & 0xff;
                buf[1] = (freq_cw >>  8) & 0xff;
                buf[2] = (freq_cw >> 16) & 0x7f;
+
+               /* FIXME: there seems to be calculation error here... */
+               if (if_frequency == 0)
+                       buf[2] = 0;
+
                ret = af9033_wr_regs(state, 0x800029, buf, 3);
                if (ret < 0)
                        goto err;