Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de98cdaf authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (4688): Fix msp343xG handling (regression from 2.6.16)



The msp3430G and msp3435G models cannot do Automatic Standard Detection.
So these should be forced to BTSC. These chips are early production versions
for the msp34xxG series and are quite rare.
The workaround for kernel 2.6.18 is to use 'standard=32' as msp3400
module option. Due to broken handling of the 'standard' option in 2.6.17 there is
no workaround possible for that kernel.

Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 587c03d1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -904,6 +904,8 @@ static int msp_attach(struct i2c_adapter *adapter, int address, int kind)
	state->has_virtual_dolby_surround = msp_revision == 'G' && msp_prod_lo == 1;
	/* Has Virtual Dolby Surround & Dolby Pro Logic: only in msp34x2 */
	state->has_dolby_pro_logic = msp_revision == 'G' && msp_prod_lo == 2;
	/* The msp343xG supports BTSC only and cannot do Automatic Standard Detection. */
	state->force_btsc = msp_family == 3 && msp_revision == 'G' && msp_prod_hi == 3;

	state->opmode = opmode;
	if (state->opmode == OPMODE_AUTO) {
+1 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ struct msp_state {
	u8 has_sound_processing;
	u8 has_virtual_dolby_surround;
	u8 has_dolby_pro_logic;
	u8 force_btsc;

	int radio;
	int opmode;
+3 −2
Original line number Diff line number Diff line
@@ -960,9 +960,10 @@ int msp34xxg_thread(void *data)

		/* setup the chip*/
		msp34xxg_reset(client);
		state->std = state->radio ? 0x40 : msp_standard;
		/* start autodetect */
		state->std = state->radio ? 0x40 :
			(state->force_btsc && msp_standard == 1) ? 32 : msp_standard;
		msp_write_dem(client, 0x20, state->std);
		/* start autodetect */
		if (state->std != 1)
			goto unmute;