diff options
author | Antti Palosaari <crope@iki.fi> | 2013-02-03 20:39:55 +0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-03-22 01:55:45 +0400 |
commit | fe8eece1fdc7dd965ae2da5743730a261f022832 (patch) | |
tree | fecf1410d7e959cc4a89211887076e97803c489a /drivers/media/dvb-frontends/af9033.c | |
parent | bc3c9e10fcf1bf344a5d6d7e83c429a7c2e730c5 (diff) | |
download | linux-fe8eece1fdc7dd965ae2da5743730a261f022832.tar.xz |
[media] af9033: IT9135 v2 supported related changes
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb-frontends/af9033.c')
-rw-r--r-- | drivers/media/dvb-frontends/af9033.c | 31 |
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; |