Commit 38670189 authored by Joerg Riechardt's avatar Joerg Riechardt Committed by Mauro Carvalho Chehab

[media] stv090x: use lookup tables for carrier/noise ratio

The stv090x driver uses the lookup table for signal strength already,
with this patch we use the lookup tables for carrier/noise ratio as well.
This has the advantage, that values for DVB-S and DVB-S2 are now
corresponding, while before they were way off. The values are now
proportional to real carrier/noise ratio, while before they were
corresponding to register values. So now applications are able to give
the user real carrier/noise ratio.

Because the output has to be within 0x0000...0xFFFF the three negative
values for DVB-S2 are omitted. This is no significant loss, because
reception is lost at 7.5 dB already (TT S2-1600, Cine S2), so the
negative values are not really important, and also for DVB-S they don´t
exist.
Signed-off-by: default avatarJoerg Riechardt <j.riechardt@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 8ccd22db
...@@ -3692,9 +3692,12 @@ static int stv090x_read_cnr(struct dvb_frontend *fe, u16 *cnr) ...@@ -3692,9 +3692,12 @@ static int stv090x_read_cnr(struct dvb_frontend *fe, u16 *cnr)
} }
val /= 16; val /= 16;
last = ARRAY_SIZE(stv090x_s2cn_tab) - 1; last = ARRAY_SIZE(stv090x_s2cn_tab) - 1;
div = stv090x_s2cn_tab[0].read - div = stv090x_s2cn_tab[last].real -
stv090x_s2cn_tab[last].read; stv090x_s2cn_tab[3].real;
*cnr = 0xFFFF - ((val * 0xFFFF) / div); val = stv090x_table_lookup(stv090x_s2cn_tab, last, val);
if (val < 0)
val = 0;
*cnr = val * 0xFFFF / div;
} }
break; break;
...@@ -3714,9 +3717,10 @@ static int stv090x_read_cnr(struct dvb_frontend *fe, u16 *cnr) ...@@ -3714,9 +3717,10 @@ static int stv090x_read_cnr(struct dvb_frontend *fe, u16 *cnr)
} }
val /= 16; val /= 16;
last = ARRAY_SIZE(stv090x_s1cn_tab) - 1; last = ARRAY_SIZE(stv090x_s1cn_tab) - 1;
div = stv090x_s1cn_tab[0].read - div = stv090x_s1cn_tab[last].real -
stv090x_s1cn_tab[last].read; stv090x_s1cn_tab[0].real;
*cnr = 0xFFFF - ((val * 0xFFFF) / div); val = stv090x_table_lookup(stv090x_s1cn_tab, last, val);
*cnr = val * 0xFFFF / div;
} }
break; break;
default: default:
......
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