aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2006-12-18 11:18:28 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-12-27 11:19:32 -0500
commitb331def2d382d7a51c379f336fe80ef87d6674e3 (patch)
tree5d0a5755688cdb1d73a1ce8fc657b9761303dd68 /drivers/media/video
parent315eb962d2e9438bc10da2488b604f04a1c0006f (diff)
V4L/DVB (4982): Fix broken audio mode handling for line-in in msp3400.
The wrong matrix was used when an external input was selected instead of the tuner input. The rxsubchans field was also not initialized to STEREO for an external input. And finally the msp34xxg_detect_stereo() should not try to detect stereo for an external input, that code is for the tuner input only. Together these bugs made it hit 'n miss whether you ever got stereo out of the msp3400 for an external input. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/msp3400-driver.c6
-rw-r--r--drivers/media/video/msp3400-kthreads.c11
2 files changed, 10 insertions, 7 deletions
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index e1b56dc13c3f..295cb994beb0 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -633,10 +633,8 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
633 if (((rt->input >> (4 + i * 4)) & 0xf) == 0) 633 if (((rt->input >> (4 + i * 4)) & 0xf) == 0)
634 extern_input = 0; 634 extern_input = 0;
635 } 635 }
636 if (extern_input) 636 state->mode = extern_input ? MSP_MODE_EXTERN : MSP_MODE_AM_DETECT;
637 state->mode = MSP_MODE_EXTERN; 637 state->rxsubchans = V4L2_TUNER_SUB_STEREO;
638 else
639 state->mode = MSP_MODE_AM_DETECT;
640 msp_set_scart(client, sc_in, 0); 638 msp_set_scart(client, sc_in, 0);
641 msp_set_scart(client, sc1_out, 1); 639 msp_set_scart(client, sc1_out, 1);
642 msp_set_scart(client, sc2_out, 2); 640 msp_set_scart(client, sc2_out, 2);
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index 4c7f85b566a0..e1821eb82fb5 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -483,7 +483,6 @@ int msp3400c_thread(void *data)
483 /* no carrier scan, just unmute */ 483 /* no carrier scan, just unmute */
484 v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n"); 484 v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n");
485 state->scan_in_progress = 0; 485 state->scan_in_progress = 0;
486 state->rxsubchans = V4L2_TUNER_SUB_STEREO;
487 msp_set_audio(client); 486 msp_set_audio(client);
488 continue; 487 continue;
489 } 488 }
@@ -851,12 +850,15 @@ static void msp34xxg_set_source(struct i2c_client *client, u16 reg, int in)
851 source = 1; /* stereo or A|B */ 850 source = 1; /* stereo or A|B */
852 matrix = 0x20; 851 matrix = 0x20;
853 break; 852 break;
854 case V4L2_TUNER_MODE_STEREO:
855 case V4L2_TUNER_MODE_LANG1: 853 case V4L2_TUNER_MODE_LANG1:
856 default:
857 source = 3; /* stereo or A */ 854 source = 3; /* stereo or A */
858 matrix = 0x00; 855 matrix = 0x00;
859 break; 856 break;
857 case V4L2_TUNER_MODE_STEREO:
858 default:
859 source = 3; /* stereo or A */
860 matrix = 0x20;
861 break;
860 } 862 }
861 863
862 if (in == MSP_DSP_IN_TUNER) 864 if (in == MSP_DSP_IN_TUNER)
@@ -1030,6 +1032,9 @@ static int msp34xxg_detect_stereo(struct i2c_client *client)
1030 int is_stereo = status & 0x40; 1032 int is_stereo = status & 0x40;
1031 int oldrx = state->rxsubchans; 1033 int oldrx = state->rxsubchans;
1032 1034
1035 if (state->mode == MSP_MODE_EXTERN)
1036 return 0;
1037
1033 state->rxsubchans = 0; 1038 state->rxsubchans = 0;
1034 if (is_stereo) 1039 if (is_stereo)
1035 state->rxsubchans = V4L2_TUNER_SUB_STEREO; 1040 state->rxsubchans = V4L2_TUNER_SUB_STEREO;