summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2013-02-03 13:39:55 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-21 18:55:45 -0300
commitfe8eece1fdc7dd965ae2da5743730a261f022832 (patch)
treefecf1410d7e959cc4a89211887076e97803c489a
parentbc3c9e10fcf1bf344a5d6d7e83c429a7c2e730c5 (diff)
downloadlinux-fe8eece1fdc7dd965ae2da5743730a261f022832.tar.gz
linux-fe8eece1fdc7dd965ae2da5743730a261f022832.tar.bz2
linux-fe8eece1fdc7dd965ae2da5743730a261f022832.zip
[media] af9033: IT9135 v2 supported related changes
Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb-frontends/af9033.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index dece775836ac..f51022817fed 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -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;