Skip to content

Commit

Permalink
V4L/DVB (9315): s5h1411: Skip reconfiguring demod modulation if alrea…
Browse files Browse the repository at this point in the history
…dy at the desired modulation

If we are already at the desired modulation, there is no need to reconfigure
the demod (at a tuning time cost)

Note that this change revealed that although the datasheet says the demod
starts out in VSB-8 mode, the first tuning was failing consistently unless
we went through the work of setting the registers.  So add a field to denote
this case so we always do the enable_frontend call, even if the first tuning
request is for VSB-8.

Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Reviewed-by: Michael Krufky <mkrufky@linuxtv.org>
Acked-by: Steven Toth <stoth@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
dheitmueller authored and Mauro Carvalho Chehab committed Oct 21, 2008
1 parent f0d041e commit 50eac6b
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/media/dvb/frontends/s5h1411.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ struct s5h1411_state {
struct dvb_frontend frontend;

fe_modulation_t current_modulation;
unsigned int first_tune:1;

u32 current_frequency;
int if_freq;
Expand Down Expand Up @@ -489,6 +490,12 @@ static int s5h1411_enable_modulation(struct dvb_frontend *fe,

dprintk("%s(0x%08x)\n", __func__, m);

if ((state->first_tune == 0) && (m == state->current_modulation)) {
dprintk("%s() Already at desired modulation. Skipping...\n",
__func__);
return 0;
}

switch (m) {
case VSB_8:
dprintk("%s() VSB_8\n", __func__);
Expand All @@ -513,6 +520,7 @@ static int s5h1411_enable_modulation(struct dvb_frontend *fe,
}

state->current_modulation = m;
state->first_tune = 0;
s5h1411_softreset(fe);

return 0;
Expand Down Expand Up @@ -622,6 +630,11 @@ static int s5h1411_init(struct dvb_frontend *fe)
/* The datasheet says that after initialisation, VSB is default */
state->current_modulation = VSB_8;

/* Although the datasheet says it's in VSB, empirical evidence
shows problems getting lock on the first tuning request. Make
sure we call enable_modulation the first time around */
state->first_tune = 1;

if (state->config->output_mode == S5H1411_SERIAL_OUTPUT)
/* Serial */
s5h1411_set_serialmode(fe, 1);
Expand Down

0 comments on commit 50eac6b

Please sign in to comment.