Skip to content

Commit

Permalink
[media] stb0899: fix inversion enum values to match usage with CFR
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Reinhard Nißl authored and Mauro Carvalho Chehab committed Jun 8, 2013
1 parent fa64cfd commit 069ebbf
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
4 changes: 2 additions & 2 deletions drivers/media/dvb-frontends/stb0899_algo.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/dvb-frontends/stb0899_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ struct stb0899_s2_reg {
};

enum stb0899_inversion {
IQ_SWAP_OFF = 0,
IQ_SWAP_ON,
IQ_SWAP_OFF = +1, /* inversion affects the sign of e. g. */
IQ_SWAP_ON = -1, /* the derotator frequency register */
};

#define STB0899_GPIO00 0xf140
Expand Down

0 comments on commit 069ebbf

Please sign in to comment.