mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-19 11:43:40 +00:00
V4L/DVB (13329): s5h1409: provide HVR-1600 specific optimizations
Perform some optimization of the register configuration based on a trace of the HVR-1600 Windows i2c traffic (and consultation with Steven Toth). Note that some of these values may be able to be moved into the common driver, but I am holding off on that until they can be tested with other boards. This work was sponsored by ONELAN Limited. Cc: Steven Toth <stoth@kernellabs.com> Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
f57b17c395
commit
af5c8e1523
@ -614,6 +614,21 @@ static int s5h1409_init(struct dvb_frontend *fe)
|
|||||||
/* The datasheet says that after initialisation, VSB is default */
|
/* The datasheet says that after initialisation, VSB is default */
|
||||||
state->current_modulation = VSB_8;
|
state->current_modulation = VSB_8;
|
||||||
|
|
||||||
|
/* Optimize for the HVR-1600 if appropriate. Note that some of these
|
||||||
|
may get folded into the generic case after testing with other
|
||||||
|
devices */
|
||||||
|
if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) {
|
||||||
|
/* VSB AGC REF */
|
||||||
|
s5h1409_writereg(state, 0x09, 0x0050);
|
||||||
|
|
||||||
|
/* Unknown but Windows driver does it... */
|
||||||
|
s5h1409_writereg(state, 0x21, 0x0001);
|
||||||
|
s5h1409_writereg(state, 0x50, 0x030e);
|
||||||
|
|
||||||
|
/* QAM AGC REF */
|
||||||
|
s5h1409_writereg(state, 0x82, 0x0800);
|
||||||
|
}
|
||||||
|
|
||||||
if (state->config->output_mode == S5H1409_SERIAL_OUTPUT)
|
if (state->config->output_mode == S5H1409_SERIAL_OUTPUT)
|
||||||
s5h1409_writereg(state, 0xab,
|
s5h1409_writereg(state, 0xab,
|
||||||
s5h1409_readreg(state, 0xab) | 0x100); /* Serial */
|
s5h1409_readreg(state, 0xab) | 0x100); /* Serial */
|
||||||
|
@ -57,6 +57,13 @@ struct s5h1409_config {
|
|||||||
#define S5H1409_MPEGTIMING_NONCONTINOUS_INVERTING_CLOCK 2
|
#define S5H1409_MPEGTIMING_NONCONTINOUS_INVERTING_CLOCK 2
|
||||||
#define S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK 3
|
#define S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK 3
|
||||||
u16 mpeg_timing;
|
u16 mpeg_timing;
|
||||||
|
|
||||||
|
/* HVR-1600 optimizations (to better work with MXL5005s)
|
||||||
|
Note: some of these are likely to be folded into the generic driver
|
||||||
|
after being regression tested with other boards */
|
||||||
|
#define S5H1409_HVR1600_NOOPTIMIZE 0
|
||||||
|
#define S5H1409_HVR1600_OPTIMIZE 1
|
||||||
|
u8 hvr1600_opt;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_DVB_S5H1409) || (defined(CONFIG_DVB_S5H1409_MODULE) \
|
#if defined(CONFIG_DVB_S5H1409) || (defined(CONFIG_DVB_S5H1409_MODULE) \
|
||||||
|
@ -71,7 +71,8 @@ static struct s5h1409_config hauppauge_hvr1600_config = {
|
|||||||
.qam_if = 44000,
|
.qam_if = 44000,
|
||||||
.inversion = S5H1409_INVERSION_OFF,
|
.inversion = S5H1409_INVERSION_OFF,
|
||||||
.status_mode = S5H1409_DEMODLOCKING,
|
.status_mode = S5H1409_DEMODLOCKING,
|
||||||
.mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK
|
.mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,
|
||||||
|
.hvr1600_opt = S5H1409_HVR1600_OPTIMIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user