diff options
author | Chris Pascoe <c.pascoe@itee.uq.edu.au> | 2007-11-19 16:32:06 +1000 |
---|---|---|
committer | Chris Pascoe <c.pascoe@itee.uq.edu.au> | 2007-11-19 16:32:06 +1000 |
commit | 883e560d8b5620809c38a8030883c9e9047ae362 (patch) | |
tree | 692adf47377cc2c4772f07221a0824d3ad3c0b2e | |
parent | 37c99905ce7751549616ab2d3f2498631ae0872c (diff) | |
download | mediapointer-dvb-s2-883e560d8b5620809c38a8030883c9e9047ae362.tar.gz mediapointer-dvb-s2-883e560d8b5620809c38a8030883c9e9047ae362.tar.bz2 |
zl10353: Improve support for boards without a tuner on secondary i2c
From: Chris Pascoe <c.pascoe@itee.uq.edu.au>
Issue FSM_GO instead of TUNER_GO if there is no tuner attached to the
secondary i2c bus.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | linux/drivers/media/dvb/frontends/zl10353.c | 34 | ||||
-rw-r--r-- | linux/drivers/media/dvb/frontends/zl10353_priv.h | 2 |
2 files changed, 17 insertions, 19 deletions
diff --git a/linux/drivers/media/dvb/frontends/zl10353.c b/linux/drivers/media/dvb/frontends/zl10353.c index 6340c6858..8bdfbe628 100644 --- a/linux/drivers/media/dvb/frontends/zl10353.c +++ b/linux/drivers/media/dvb/frontends/zl10353.c @@ -188,35 +188,31 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); - // if there is no attached secondary tuner, we call set_params to program - // a potential tuner attached somewhere else + /* + * If there is no tuner attached to the secondary I2C bus, we call + * set_params to program a potential tuner attached somewhere else. + * Otherwise, we update the PLL registers via calc_regs. + */ if (state->config.no_tuner) { if (fe->ops.tuner_ops.set_params) { fe->ops.tuner_ops.set_params(fe, param); if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); } - } - - // if pllbuf is defined, retrieve the settings - if (fe->ops.tuner_ops.calc_regs) { - fe->ops.tuner_ops.calc_regs(fe, param, pllbuf+1, 5); + } else if (fe->ops.tuner_ops.calc_regs) { + fe->ops.tuner_ops.calc_regs(fe, param, pllbuf + 1, 5); pllbuf[1] <<= 1; - } else { - // fake pllbuf settings - pllbuf[1] = 0x61 << 1; - pllbuf[2] = 0; - pllbuf[3] = 0; - pllbuf[3] = 0; - pllbuf[4] = 0; + zl10353_write(fe, pllbuf, sizeof(pllbuf)); } - // there is no call to _just_ start decoding, so we send the pllbuf anyway - // even if there isn't a PLL attached to the secondary bus - zl10353_write(fe, pllbuf, sizeof(pllbuf)); - zl10353_single_write(fe, 0x5F, 0x13); - zl10353_single_write(fe, 0x70, 0x01); + + /* If no attached tuner or invalid PLL registers, just start the FSM. */ + if (state->config.no_tuner || fe->ops.tuner_ops.calc_regs == NULL) + zl10353_single_write(fe, FSM_GO, 0x01); + else + zl10353_single_write(fe, TUNER_GO, 0x01); + udelay(250); zl10353_single_write(fe, 0xE4, 0x00); zl10353_single_write(fe, 0xE5, 0x2A); diff --git a/linux/drivers/media/dvb/frontends/zl10353_priv.h b/linux/drivers/media/dvb/frontends/zl10353_priv.h index 4962434b3..42855dfe3 100644 --- a/linux/drivers/media/dvb/frontends/zl10353_priv.h +++ b/linux/drivers/media/dvb/frontends/zl10353_priv.h @@ -48,6 +48,8 @@ enum zl10353_reg_addr { RS_UBC_0 = 0x15, TRL_NOMINAL_RATE_1 = 0x65, TRL_NOMINAL_RATE_0 = 0x66, + TUNER_GO = 0x70, + FSM_GO = 0x71, CHIP_ID = 0x7F, }; |