diff options
author | Andrew de Quincy <devnull@localhost> | 2005-07-26 22:38:49 +0000 |
---|---|---|
committer | Andrew de Quincy <devnull@localhost> | 2005-07-26 22:38:49 +0000 |
commit | 33c4e7b6dbe5c3e4487d297908c0192fc7c9f3da (patch) | |
tree | cfc0cd75f31b2e4e77646c4141fca906d6dec0e6 /linux/drivers/media/dvb/ttpci | |
parent | d57f358bcb3c68408bf1df0e373a07552d47004c (diff) | |
download | mediapointer-dvb-s2-33c4e7b6dbe5c3e4487d297908c0192fc7c9f3da.tar.gz mediapointer-dvb-s2-33c4e7b6dbe5c3e4487d297908c0192fc7c9f3da.tar.bz2 |
Update to new PLL code
Diffstat (limited to 'linux/drivers/media/dvb/ttpci')
-rw-r--r-- | linux/drivers/media/dvb/ttpci/budget-ci.c | 71 |
1 files changed, 54 insertions, 17 deletions
diff --git a/linux/drivers/media/dvb/ttpci/budget-ci.c b/linux/drivers/media/dvb/ttpci/budget-ci.c index c5b3a406a..496df3b8a 100644 --- a/linux/drivers/media/dvb/ttpci/budget-ci.c +++ b/linux/drivers/media/dvb/ttpci/budget-ci.c @@ -851,34 +851,71 @@ static struct tda1004x_config philips_tdm1316l_config = { static int dvbc_philips_tdm1316l_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) { struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv; - u8 tuner_buf[4]; - struct i2c_msg tuner_msg = {.addr = budget_ci->tuner_pll_address,.flags = 0,.buf = tuner_buf,.len = sizeof(tuner_buf) }; - u32 tuner_frequency = 0; + u8 tuner_buf[5]; + struct i2c_msg tuner_msg = {.addr = budget_ci->tuner_pll_address, + .flags = 0, + .buf = tuner_buf, + .len = sizeof(tuner_buf) }; + int tuner_frequency = 0; + u8 band, cp, filter; + + // determine charge pump + tuner_frequency = params->frequency + 36125000; + if (tuner_frequency < 87000000) + return -EINVAL; + else if (tuner_frequency < 130000000) { + cp = 3; + band = 1; + } else if (tuner_frequency < 160000000) { + cp = 5; + band = 1; + } else if (tuner_frequency < 200000000) { + cp = 6; + band = 1; + } else if (tuner_frequency < 290000000) { + cp = 3; + band = 2; + } else if (tuner_frequency < 420000000) { + cp = 5; + band = 2; + } else if (tuner_frequency < 480000000) { + cp = 6; + band = 2; + } else if (tuner_frequency < 620000000) { + cp = 3; + band = 4; + } else if (tuner_frequency < 830000000) { + cp = 8; // FIXME: shouldn't this be 5? + band = 4; + } else if (tuner_frequency < 895000000) { + cp = 7; + band = 4; + } else + return -EINVAL; + + // FIXME: setup PLL filter and TDA9889 + filter = 1; // calculate divisor - tuner_frequency = (params->frequency + 36130000 + 62499) / 62500; + tuner_frequency = (params->frequency + 36125000 + (62500/2)) / 62500; // setup tuner buffer tuner_buf[0] = tuner_frequency >> 8; tuner_buf[1] = tuner_frequency & 0xff; - tuner_buf[2] = 0xc6; + tuner_buf[2] = 0xc8; + tuner_buf[3] = (cp << 5) | (filter << 3) | band; + tuner_buf[4] = 0x80; - // determine band - if (params->frequency < 49000000) - return -EINVAL; - else if (params->frequency < 167000000) - tuner_buf[3] = 0x11; - else if (params->frequency < 454000000) - tuner_buf[3] = 0x12; - else if (params->frequency < 860000000) - tuner_buf[3] = 0x14; - else - return -EINVAL; + if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1) + return -EIO; + + msleep(50); if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1) return -EIO; msleep(1); + return 0; } @@ -912,7 +949,7 @@ static void frontend_init(struct budget_ci *budget_ci) break; case 0x1010: // TT DVB-C CI budget (stv0297/Philips tdm1316l(tda6651tt)) - budget_ci->tuner_pll_address = 0x63; + budget_ci->tuner_pll_address = 0x61; budget_ci->budget.dvb_frontend = stv0297_attach(&dvbc_philips_tdm1316l_config, &budget_ci->budget.i2c_adap, 0x7b); if (budget_ci->budget.dvb_frontend) { |