From 55ccba52ed03b5457ab2977d8622ce4adc9421de Mon Sep 17 00:00:00 2001 From: "Igor M. Liplianin" Date: Tue, 27 Oct 2009 14:59:53 -0300 Subject: [PATCH] --- yaml --- r: 174071 b: refs/heads/master c: 502cd96d5b0714e0ab022766014f58b0684699a8 h: refs/heads/master i: 174069: c0a90d451061d71841ec29cfe75f8d2e2d9d76d1 174067: a20e11593867528b28c2f394e8826ef08e0b0f09 174063: c693ccae3d2e417321388998a4388333de29bebd v: v3 --- [refs] | 2 +- .../media/dvb/frontends/stv0900_core.c | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index d11ad6b1ca1c..b9d0b46bf4c5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 29372a8daec4c1dca83e294006488b1d47dd965c +refs/heads/master: 502cd96d5b0714e0ab022766014f58b0684699a8 diff --git a/trunk/drivers/media/dvb/frontends/stv0900_core.c b/trunk/drivers/media/dvb/frontends/stv0900_core.c index c8c72f56fdd9..11dbe942aa41 100644 --- a/trunk/drivers/media/dvb/frontends/stv0900_core.c +++ b/trunk/drivers/media/dvb/frontends/stv0900_core.c @@ -599,6 +599,8 @@ static s32 stv0900_get_rf_level(struct stv0900_internal *i_params, break; } + dprintk("%s: AGC Gain = 0x%x\n", __func__, agc_gain); + imin = 0; imax = lookup->size - 1; if (INRANGE(lookup->table[imin].regval, agc_gain, lookup->table[imax].regval)) { @@ -634,7 +636,14 @@ static int stv0900_read_signal_strength(struct dvb_frontend *fe, u16 *strength) s32 rflevel = stv0900_get_rf_level(internal, &stv0900_rf, state->demod); - *strength = (rflevel + 100) * (16383 / 105); + rflevel = (rflevel + 100) * (65535 / 70); + if (rflevel < 0) + rflevel = 0; + + if (rflevel > 65535) + rflevel = 65535; + + *strength = rflevel; return 0; } @@ -709,6 +718,8 @@ static s32 stv0900_carr_get_quality(struct dvb_frontend *fe, } } + dprintk("%s: Quality = %d\n", __func__, c_n); + return c_n; } @@ -752,10 +763,16 @@ static int stv0900_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) static int stv0900_read_snr(struct dvb_frontend *fe, u16 *snr) { - *snr = stv0900_carr_get_quality(fe, + s32 snrlcl = stv0900_carr_get_quality(fe, (const struct stv0900_table *)&stv0900_s2_cn); - *snr += 30; - *snr *= (16383 / 1030); + snrlcl = (snrlcl + 30) * 384; + if (snrlcl < 0) + snrlcl = 0; + + if (snrlcl > 65535) + snrlcl = 65535; + + *snr = snrlcl; return 0; }