aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/stb0899_algo.c
diff options
context:
space:
mode:
authorReinhard Nißl <rnissl@gmx.de>2013-06-02 14:52:43 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-06-08 20:13:29 -0300
commit069ebbfc9eb7bef5e9780c508d8bc378bfea3e94 (patch)
tree2b342a89226fa90e7c14568ac0d702e4afb61695 /drivers/media/dvb-frontends/stb0899_algo.c
parent[media] stb0899: enable auto inversion handling unconditionally (diff)
downloadlinux-dev-069ebbfc9eb7bef5e9780c508d8bc378bfea3e94.tar.xz
linux-dev-069ebbfc9eb7bef5e9780c508d8bc378bfea3e94.zip
[media] stb0899: fix inversion enum values to match usage with CFR
Throughout the zig-zag-implementations, inversion is taken into account when reading and writing the CFR register, which contains the derotator frequency. As swapping IQ signals changes the sign of that register for example, the idea is to compensate that sign change by multiplying the register value with the inversion enum value. The current enum values 0 and 1 for IQ_SWAP_OFF and IQ_SWAP_ON don't work in the case IQ_SWAP_OFF, due to the multiplication by zero (I've only found a single device which actually uses IQ_SWAP_OFF in it's config). I've changed the enum values to +1 and -1 to accommodate to the intended usage. Signed-off-by: Reinhard Nißl <rnissl@gmx.de> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb-frontends/stb0899_algo.c')
-rw-r--r--drivers/media/dvb-frontends/stb0899_algo.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/media/dvb-frontends/stb0899_algo.c b/drivers/media/dvb-frontends/stb0899_algo.c
index 14d720ba1207..e0d31a2ea578 100644
--- a/drivers/media/dvb-frontends/stb0899_algo.c
+++ b/drivers/media/dvb-frontends/stb0899_algo.c
@@ -444,7 +444,7 @@ static enum stb0899_status stb0899_check_range(struct stb0899_state *state)
int range_offst, tp_freq;
range_offst = internal->srch_range / 2000;
- tp_freq = internal->freq + (internal->derot_freq * internal->mclk) / 1000;
+ tp_freq = internal->freq - (internal->derot_freq * internal->mclk) / 1000;
if ((tp_freq >= params->freq - range_offst) && (tp_freq <= params->freq + range_offst)) {
internal->status = RANGEOK;
@@ -638,7 +638,7 @@ enum stb0899_status stb0899_dvbs_algo(struct stb0899_state *state)
"RANGE OK ! derot freq=%d, mclk=%d",
internal->derot_freq, internal->mclk);
- internal->freq = params->freq + ((internal->derot_freq * internal->mclk) / 1000);
+ internal->freq = params->freq - ((internal->derot_freq * internal->mclk) / 1000);
reg = stb0899_read_reg(state, STB0899_PLPARM);
internal->fecrate = STB0899_GETFIELD(VITCURPUN, reg);
dprintk(state->verbose, FE_DEBUG, 1,