V4L/DVB (7656): tda826x: Calculate cut off fequency from symbol rate
authorHartmut Hackmann <hartmut.hackmann@t-online.de>
Mon, 14 Apr 2008 01:41:19 +0000 (22:41 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 24 Apr 2008 17:09:44 +0000 (14:09 -0300)
This patch makes the tuner work with transonders providing higher
symbol rates.
It was contributed by Oliver Endriss.

Signed-off-by: Hartmut Hackmann <hartmut.hackmann@t-online.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/tda826x.c

index 5a15bb4263fb0b88fe81de7b7a59024d3b1492a5..a051554b5e2589aeb32060ebb0a41c1c38b65e84 100644 (file)
@@ -75,6 +75,8 @@ static int tda826x_set_params(struct dvb_frontend *fe, struct dvb_frontend_param
        struct tda826x_priv *priv = fe->tuner_priv;
        int ret;
        u32 div;
+       u32 ksyms;
+       u32 bandwidth;
        u8 buf [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
 
        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[1] = 0x09; // powerdown RSSI + the magic value 1
        if (!priv->has_loopthrough)
@@ -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[3] = div >> 7;
        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[7] = 0x83; // charge pumps at high, tests off
        buf[8] = 0x80; // recommended value 4 for AMPVCO + disable ports.