diff options
author | Devin Heitmueller <dheitmueller@kernellabs.com> | 2009-10-27 22:33:21 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-12-05 15:41:22 -0500 |
commit | af5c8e1523edf792f57ec938aef9423783af25e1 (patch) | |
tree | 7201a2e68340906dc2dc0dbe963332fbeac5eaf0 /drivers/media | |
parent | f57b17c3956f2e1e70f63dd2ed8088b582f3915e (diff) |
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>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/frontends/s5h1409.c | 15 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/s5h1409.h | 7 | ||||
-rw-r--r-- | drivers/media/video/cx18/cx18-dvb.c | 3 |
3 files changed, 24 insertions, 1 deletions
diff --git a/drivers/media/dvb/frontends/s5h1409.c b/drivers/media/dvb/frontends/s5h1409.c index fb3011518427..85fba581c5ab 100644 --- a/drivers/media/dvb/frontends/s5h1409.c +++ b/drivers/media/dvb/frontends/s5h1409.c | |||
@@ -614,6 +614,21 @@ static int s5h1409_init(struct dvb_frontend *fe) | |||
614 | /* The datasheet says that after initialisation, VSB is default */ | 614 | /* The datasheet says that after initialisation, VSB is default */ |
615 | state->current_modulation = VSB_8; | 615 | state->current_modulation = VSB_8; |
616 | 616 | ||
617 | /* Optimize for the HVR-1600 if appropriate. Note that some of these | ||
618 | may get folded into the generic case after testing with other | ||
619 | devices */ | ||
620 | if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { | ||
621 | /* VSB AGC REF */ | ||
622 | s5h1409_writereg(state, 0x09, 0x0050); | ||
623 | |||
624 | /* Unknown but Windows driver does it... */ | ||
625 | s5h1409_writereg(state, 0x21, 0x0001); | ||
626 | s5h1409_writereg(state, 0x50, 0x030e); | ||
627 | |||
628 | /* QAM AGC REF */ | ||
629 | s5h1409_writereg(state, 0x82, 0x0800); | ||
630 | } | ||
631 | |||
617 | if (state->config->output_mode == S5H1409_SERIAL_OUTPUT) | 632 | if (state->config->output_mode == S5H1409_SERIAL_OUTPUT) |
618 | s5h1409_writereg(state, 0xab, | 633 | s5h1409_writereg(state, 0xab, |
619 | s5h1409_readreg(state, 0xab) | 0x100); /* Serial */ | 634 | s5h1409_readreg(state, 0xab) | 0x100); /* Serial */ |
diff --git a/drivers/media/dvb/frontends/s5h1409.h b/drivers/media/dvb/frontends/s5h1409.h index 070d9743e330..91f2ebd1a534 100644 --- a/drivers/media/dvb/frontends/s5h1409.h +++ b/drivers/media/dvb/frontends/s5h1409.h | |||
@@ -57,6 +57,13 @@ struct s5h1409_config { | |||
57 | #define S5H1409_MPEGTIMING_NONCONTINOUS_INVERTING_CLOCK 2 | 57 | #define S5H1409_MPEGTIMING_NONCONTINOUS_INVERTING_CLOCK 2 |
58 | #define S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK 3 | 58 | #define S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK 3 |
59 | u16 mpeg_timing; | 59 | u16 mpeg_timing; |
60 | |||
61 | /* HVR-1600 optimizations (to better work with MXL5005s) | ||
62 | Note: some of these are likely to be folded into the generic driver | ||
63 | after being regression tested with other boards */ | ||
64 | #define S5H1409_HVR1600_NOOPTIMIZE 0 | ||
65 | #define S5H1409_HVR1600_OPTIMIZE 1 | ||
66 | u8 hvr1600_opt; | ||
60 | }; | 67 | }; |
61 | 68 | ||
62 | #if defined(CONFIG_DVB_S5H1409) || (defined(CONFIG_DVB_S5H1409_MODULE) \ | 69 | #if defined(CONFIG_DVB_S5H1409) || (defined(CONFIG_DVB_S5H1409_MODULE) \ |
diff --git a/drivers/media/video/cx18/cx18-dvb.c b/drivers/media/video/cx18/cx18-dvb.c index 51a0c33b25b7..f402e798e323 100644 --- a/drivers/media/video/cx18/cx18-dvb.c +++ b/drivers/media/video/cx18/cx18-dvb.c | |||
@@ -71,7 +71,8 @@ static struct s5h1409_config hauppauge_hvr1600_config = { | |||
71 | .qam_if = 44000, | 71 | .qam_if = 44000, |
72 | .inversion = S5H1409_INVERSION_OFF, | 72 | .inversion = S5H1409_INVERSION_OFF, |
73 | .status_mode = S5H1409_DEMODLOCKING, | 73 | .status_mode = S5H1409_DEMODLOCKING, |
74 | .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK | 74 | .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, |
75 | .hvr1600_opt = S5H1409_HVR1600_OPTIMIZE | ||
75 | }; | 76 | }; |
76 | 77 | ||
77 | /* | 78 | /* |