Commit 3ff9a81b authored by Hartmut Hackmann's avatar Hartmut Hackmann Committed by Mauro Carvalho Chehab

V4L/DVB (7656): tda826x: Calculate cut off fequency from symbol rate

This patch makes the tuner work with transonders providing higher
symbol rates.
It was contributed by Oliver Endriss.
Signed-off-by: default avatarHartmut Hackmann <hartmut.hackmann@t-online.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent b1c54fe2
...@@ -75,6 +75,8 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param ...@@ -75,6 +75,8 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param
struct tda826x_priv *priv = fe->tuner_priv; struct tda826x_priv *priv = fe->tuner_priv;
int ret; int ret;
u32 div; u32 div;
u32 ksyms;
u32 bandwidth;
u8 buf [11]; u8 buf [11];
struct i2c_msg msg = { .addr = priv->i2c_address, .flags = 0, .buf = buf, .len = 11 }; struct i2c_msg msg = { .addr = priv->i2c_address, .flags = 0, .buf = buf, .len = 11 };
...@@ -82,6 +84,15 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param ...@@ -82,6 +84,15 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param
div = (params->frequency + (1000-1)) / 1000; div = (params->frequency + (1000-1)) / 1000;
/* BW = ((1 + RO) * SR/2 + 5) * 1.3 [SR in MSPS, BW in MHz] */
/* with R0 = 0.35 and some transformations: */
ksyms = params->u.qpsk.symbol_rate / 1000;
bandwidth = (878 * ksyms + 6500000) / 1000000 + 1;
if (bandwidth < 5)
bandwidth = 5;
else if (bandwidth > 36)
bandwidth = 36;
buf[0] = 0x00; // subaddress buf[0] = 0x00; // subaddress
buf[1] = 0x09; // powerdown RSSI + the magic value 1 buf[1] = 0x09; // powerdown RSSI + the magic value 1
if (!priv->has_loopthrough) if (!priv->has_loopthrough)
...@@ -89,7 +100,7 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param ...@@ -89,7 +100,7 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param
buf[2] = (1<<5) | 0x0b; // 1Mhz + 0.45 VCO buf[2] = (1<<5) | 0x0b; // 1Mhz + 0.45 VCO
buf[3] = div >> 7; buf[3] = div >> 7;
buf[4] = div << 1; buf[4] = div << 1;
buf[5] = 0x77; // baseband cut-off 19 MHz buf[5] = ((bandwidth - 5) << 3) | 7; /* baseband cut-off */
buf[6] = 0xfe; // baseband gain 9 db + no RF attenuation buf[6] = 0xfe; // baseband gain 9 db + no RF attenuation
buf[7] = 0x83; // charge pumps at high, tests off buf[7] = 0x83; // charge pumps at high, tests off
buf[8] = 0x80; // recommended value 4 for AMPVCO + disable ports. buf[8] = 0x80; // recommended value 4 for AMPVCO + disable ports.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment