diff options
author | Andrew de Quincy <devnull@localhost> | 2004-03-11 18:40:44 +0000 |
---|---|---|
committer | Andrew de Quincy <devnull@localhost> | 2004-03-11 18:40:44 +0000 |
commit | 4881f248a09885725d1ad51ec35339ff4db2d81c (patch) | |
tree | f28e1ee6e7e472092c1a2a5e9ea55825c61f7c04 /linux/drivers/media/dvb/frontends/ves1x93.c | |
parent | 455c6bb685dcf96d46dc80361513fc6476d541e7 (diff) | |
download | mediapointer-dvb-s2-4881f248a09885725d1ad51ec35339ff4db2d81c.tar.gz mediapointer-dvb-s2-4881f248a09885725d1ad51ec35339ff4db2d81c.tar.bz2 |
Checked in experimental frontend patch
Also some minimal budget-ci CI support implemented (just detection+IRQs)
Diffstat (limited to 'linux/drivers/media/dvb/frontends/ves1x93.c')
-rw-r--r-- | linux/drivers/media/dvb/frontends/ves1x93.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/linux/drivers/media/dvb/frontends/ves1x93.c b/linux/drivers/media/dvb/frontends/ves1x93.c index e6e6ba3fb..e8c1f6ee7 100644 --- a/linux/drivers/media/dvb/frontends/ves1x93.c +++ b/linux/drivers/media/dvb/frontends/ves1x93.c @@ -30,7 +30,8 @@ #include <linux/slab.h> #include "dvb_frontend.h" - +#include "dvb_functions.h" + static int debug = 0; #define dprintk if (debug) printk @@ -67,10 +68,10 @@ static struct dvb_frontend_info ves1x93_info = { */ static u8 init_1893_tab [] = { - 0x01, 0xa4, 0x35, 0x81, 0x2a, 0x0d, 0x55, 0xc4, + 0x01, 0xa4, 0x35, 0x80, 0x2a, 0x0b, 0x55, 0xc4, 0x09, 0x69, 0x00, 0x86, 0x4c, 0x28, 0x7f, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xdc, 0x00, + 0x80, 0x00, 0x21, 0xb0, 0x14, 0x00, 0xdc, 0x00, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x7f, 0x00 @@ -247,8 +248,16 @@ static int ves1x93_clr_bit (struct dvb_i2c_bus *i2c) { ves1x93_writereg (i2c, 0, init_1x93_tab[0] & 0xfe); ves1x93_writereg (i2c, 0, init_1x93_tab[0]); + dvb_delay(5); + return 0; +} + +static int ves1x93_init_aquire (struct dvb_i2c_bus *i2c) +{ ves1x93_writereg (i2c, 3, 0x00); - return ves1x93_writereg (i2c, 3, init_1x93_tab[3]); + ves1x93_writereg (i2c, 3, init_1x93_tab[3]); + dvb_delay(5); + return 0; } @@ -403,6 +412,30 @@ static int ves1x93_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate) } +static int ves1x93_afc (struct dvb_i2c_bus *i2c, u32 freq, u32 srate) +{ + int afc; + + u8 sync = ves1x93_readreg (i2c, 0x0e); + + afc = ((int)((ves1x93_readreg (i2c, 0x0a) << 1) & 0xff))/2; + afc = (afc * (int)(srate/1000/8))/16; + + if (afc) { + + freq -= afc; + + tuner_set_tv_freq (i2c, freq, 0); + + ves1x93_init_aquire (i2c); + + afc = ((int)((ves1x93_readreg (i2c, 0x0a) << 1) & 0xff))/2; + afc = (afc * (int)(srate/1000/8))/16; + } + + return 0; +} + static int ves1x93_set_voltage (struct dvb_i2c_bus *i2c, fe_sec_voltage_t voltage) { switch (voltage) { @@ -497,6 +530,7 @@ static int ves1x93_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) ves1x93_set_inversion (i2c, p->inversion); ves1x93_set_fec (i2c, p->u.qpsk.fec_inner); ves1x93_set_symbolrate (i2c, p->u.qpsk.symbol_rate); + ves1x93_afc (i2c, p->frequency, p->u.qpsk.symbol_rate); break; } @@ -530,9 +564,6 @@ static int ves1x93_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) case FE_INIT: return ves1x93_init (i2c); - case FE_RESET: - return ves1x93_clr_bit (i2c); - case FE_SET_TONE: return -EOPNOTSUPP; /* the ves1893 can generate the 22k */ /* let's implement this when we have */ |