V4L/DVB (6821): s5h1409: fix IF frequency configuration
On the s5h1409 demod, the IF frequency for VSB is limited to 44 / 5.38 MHz. Hardcode VSB IF frequency within the driver to 44 / 5.38 MHz. QAM IF frequency remains configurable via attach-time configuration. Acked-by: Steven Toth <stoth@hauppauge.com> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
18ff605a18
commit
2b03238a79
@ -42,6 +42,7 @@ struct s5h1409_state {
|
|||||||
fe_modulation_t current_modulation;
|
fe_modulation_t current_modulation;
|
||||||
|
|
||||||
u32 current_frequency;
|
u32 current_frequency;
|
||||||
|
int if_freq;
|
||||||
|
|
||||||
u32 is_qam_locked;
|
u32 is_qam_locked;
|
||||||
u32 qam_state;
|
u32 qam_state;
|
||||||
@ -348,6 +349,9 @@ static int s5h1409_softreset(struct dvb_frontend* fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S5H1409_VSB_IF_FREQ 5380
|
||||||
|
#define S5H1409_QAM_IF_FREQ state->config->qam_if
|
||||||
|
|
||||||
static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz)
|
static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz)
|
||||||
{
|
{
|
||||||
struct s5h1409_state* state = fe->demodulator_priv;
|
struct s5h1409_state* state = fe->demodulator_priv;
|
||||||
@ -369,6 +373,9 @@ static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 == ret)
|
||||||
|
state->if_freq = KHz;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,11 +401,15 @@ static int s5h1409_enable_modulation(struct dvb_frontend* fe,
|
|||||||
switch(m) {
|
switch(m) {
|
||||||
case VSB_8:
|
case VSB_8:
|
||||||
dprintk("%s() VSB_8\n", __FUNCTION__);
|
dprintk("%s() VSB_8\n", __FUNCTION__);
|
||||||
|
if (state->if_freq != S5H1409_VSB_IF_FREQ)
|
||||||
|
s5h1409_set_if_freq(fe, S5H1409_VSB_IF_FREQ);
|
||||||
s5h1409_writereg(state, 0xf4, 0);
|
s5h1409_writereg(state, 0xf4, 0);
|
||||||
break;
|
break;
|
||||||
case QAM_64:
|
case QAM_64:
|
||||||
case QAM_256:
|
case QAM_256:
|
||||||
dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__);
|
dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__);
|
||||||
|
if (state->if_freq != S5H1409_QAM_IF_FREQ)
|
||||||
|
s5h1409_set_if_freq(fe, S5H1409_QAM_IF_FREQ);
|
||||||
s5h1409_writereg(state, 0xf4, 1);
|
s5h1409_writereg(state, 0xf4, 1);
|
||||||
s5h1409_writereg(state, 0x85, 0x110);
|
s5h1409_writereg(state, 0x85, 0x110);
|
||||||
break;
|
break;
|
||||||
@ -571,7 +582,7 @@ static int s5h1409_init (struct dvb_frontend* fe)
|
|||||||
s5h1409_writereg(state, 0xab, 0x0); /* Parallel */
|
s5h1409_writereg(state, 0xab, 0x0); /* Parallel */
|
||||||
|
|
||||||
s5h1409_set_spectralinversion(fe, state->config->inversion);
|
s5h1409_set_spectralinversion(fe, state->config->inversion);
|
||||||
s5h1409_set_if_freq(fe, state->config->if_freq);
|
s5h1409_set_if_freq(fe, state->if_freq);
|
||||||
s5h1409_set_gpio(fe, state->config->gpio);
|
s5h1409_set_gpio(fe, state->config->gpio);
|
||||||
s5h1409_softreset(fe);
|
s5h1409_softreset(fe);
|
||||||
|
|
||||||
@ -751,6 +762,7 @@ struct dvb_frontend* s5h1409_attach(const struct s5h1409_config* config,
|
|||||||
state->config = config;
|
state->config = config;
|
||||||
state->i2c = i2c;
|
state->i2c = i2c;
|
||||||
state->current_modulation = 0;
|
state->current_modulation = 0;
|
||||||
|
state->if_freq = S5H1409_VSB_IF_FREQ;
|
||||||
|
|
||||||
/* check if the demod exists */
|
/* check if the demod exists */
|
||||||
if (s5h1409_readreg(state, 0x04) != 0x0066)
|
if (s5h1409_readreg(state, 0x04) != 0x0066)
|
||||||
|
@ -39,8 +39,8 @@ struct s5h1409_config
|
|||||||
#define S5H1409_GPIO_ON 1
|
#define S5H1409_GPIO_ON 1
|
||||||
u8 gpio;
|
u8 gpio;
|
||||||
|
|
||||||
/* IF Freq in KHz */
|
/* IF Freq for QAM in KHz, VSB is hardcoded to 5380 */
|
||||||
u16 if_freq;
|
u16 qam_if;
|
||||||
|
|
||||||
/* Spectral Inversion */
|
/* Spectral Inversion */
|
||||||
#define S5H1409_INVERSION_OFF 0
|
#define S5H1409_INVERSION_OFF 0
|
||||||
|
@ -85,7 +85,7 @@ static struct s5h1409_config hauppauge_generic_config = {
|
|||||||
.demod_address = 0x32 >> 1,
|
.demod_address = 0x32 >> 1,
|
||||||
.output_mode = S5H1409_SERIAL_OUTPUT,
|
.output_mode = S5H1409_SERIAL_OUTPUT,
|
||||||
.gpio = S5H1409_GPIO_ON,
|
.gpio = S5H1409_GPIO_ON,
|
||||||
.if_freq = 44000,
|
.qam_if = 44000,
|
||||||
.inversion = S5H1409_INVERSION_OFF,
|
.inversion = S5H1409_INVERSION_OFF,
|
||||||
.status_mode = S5H1409_DEMODLOCKING
|
.status_mode = S5H1409_DEMODLOCKING
|
||||||
};
|
};
|
||||||
@ -94,7 +94,7 @@ static struct s5h1409_config hauppauge_hvr1800lp_config = {
|
|||||||
.demod_address = 0x32 >> 1,
|
.demod_address = 0x32 >> 1,
|
||||||
.output_mode = S5H1409_SERIAL_OUTPUT,
|
.output_mode = S5H1409_SERIAL_OUTPUT,
|
||||||
.gpio = S5H1409_GPIO_OFF,
|
.gpio = S5H1409_GPIO_OFF,
|
||||||
.if_freq = 44000,
|
.qam_if = 44000,
|
||||||
.inversion = S5H1409_INVERSION_OFF,
|
.inversion = S5H1409_INVERSION_OFF,
|
||||||
.status_mode = S5H1409_DEMODLOCKING
|
.status_mode = S5H1409_DEMODLOCKING
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user