aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2006-10-01 17:56:32 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-10-03 15:14:55 -0300
commitde98cdaf7ead419fe8b0a0a636ffb175489958fe (patch)
treec804e9f787230c76ee14847309d0d1e3f5b713a1
parent587c03d104c418a7958f24a03ac6239ac3f2e608 (diff)
downloadkernel_samsung_aries-de98cdaf7ead419fe8b0a0a636ffb175489958fe.zip
kernel_samsung_aries-de98cdaf7ead419fe8b0a0a636ffb175489958fe.tar.gz
kernel_samsung_aries-de98cdaf7ead419fe8b0a0a636ffb175489958fe.tar.bz2
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: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r--drivers/media/video/msp3400-driver.c2
-rw-r--r--drivers/media/video/msp3400-driver.h1
-rw-r--r--drivers/media/video/msp3400-kthreads.c5
3 files changed, 6 insertions, 2 deletions
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index 56246b8..cf43df3 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -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) {
diff --git a/drivers/media/video/msp3400-driver.h b/drivers/media/video/msp3400-driver.h
index 545e4ac..7531efa 100644
--- a/drivers/media/video/msp3400-driver.h
+++ b/drivers/media/video/msp3400-driver.h
@@ -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;
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index ed02ff8..4c7f85b 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -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;