aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-10-27 22:33:21 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 15:41:22 -0500
commitaf5c8e1523edf792f57ec938aef9423783af25e1 (patch)
tree7201a2e68340906dc2dc0dbe963332fbeac5eaf0 /drivers
parentf57b17c3956f2e1e70f63dd2ed8088b582f3915e (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')
-rw-r--r--drivers/media/dvb/frontends/s5h1409.c15
-rw-r--r--drivers/media/dvb/frontends/s5h1409.h7
-rw-r--r--drivers/media/video/cx18/cx18-dvb.c3
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/*