Commit af5c8e15 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab
Browse files

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: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f57b17c3
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -614,6 +614,21 @@ static int s5h1409_init(struct dvb_frontend *fe)
	/* The datasheet says that after initialisation, VSB is default */
	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)
		s5h1409_writereg(state, 0xab,
			s5h1409_readreg(state, 0xab) | 0x100); /* Serial */
+7 −0
Original line number Diff line number Diff line
@@ -57,6 +57,13 @@ struct s5h1409_config {
#define S5H1409_MPEGTIMING_NONCONTINOUS_INVERTING_CLOCK    2
#define S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK 3
	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) \
+2 −1
Original line number Diff line number Diff line
@@ -71,7 +71,8 @@ static struct s5h1409_config hauppauge_hvr1600_config = {
	.qam_if        = 44000,
	.inversion     = S5H1409_INVERSION_OFF,
	.status_mode   = S5H1409_DEMODLOCKING,
	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK
	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,
	.hvr1600_opt   = S5H1409_HVR1600_OPTIMIZE
};

/*