V4L/DVB (9315): s5h1411: Skip reconfiguring demod modulation if already 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>
This commit is contained in:
parent
f0d041e50b
commit
50eac6bc46
1 changed files with 13 additions and 0 deletions
|
@ -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;
|
||||
|
@ -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__);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue