aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx25840/cx25840-core.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2007-08-05 07:00:36 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-10-09 21:04:55 -0400
commit87410dab1238623e082e9a78a62f1bbeb6c475e3 (patch)
tree521977ac3c7c91b9d97616452047bcddfd066279 /drivers/media/video/cx25840/cx25840-core.c
parent372978055dd564d97ca1b4099c99296eaff1fe19 (diff)
V4L/DVB (5997): cx25840: fix audio mute handling and reporting
Audio muting for the tuner input was implemented by stopping the audio microcontroller and restarting it on unmute. However, it appears that this method can actually crash the audio firmware. It's rare and seems to happen with NTSC only. It has been reimplemented by setting to volume to 0. In addition, the reporting of the mute state has been improved as well: it used to be impossible to detect whether the audio was muted by the user or if it was muted due to the microcontroller trying to detect the audio standard. This is now clearly stated. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx25840/cx25840-core.c')
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 9f99007d389..65ad7943dd9 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -915,6 +915,7 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
915 state->audclk_freq = 48000; 915 state->audclk_freq = 48000;
916 state->pvr150_workaround = 0; 916 state->pvr150_workaround = 0;
917 state->audmode = V4L2_TUNER_MODE_LANG1; 917 state->audmode = V4L2_TUNER_MODE_LANG1;
918 state->unmute_volume = -1;
918 state->vbi_line_offset = 8; 919 state->vbi_line_offset = 8;
919 state->id = id; 920 state->id = id;
920 state->rev = device_id; 921 state->rev = device_id;
@@ -1066,9 +1067,10 @@ static void log_audio_status(struct i2c_client *client)
1066 } 1067 }
1067 v4l_info(client, "Detected audio standard: %s\n", p); 1068 v4l_info(client, "Detected audio standard: %s\n", p);
1068 v4l_info(client, "Audio muted: %s\n", 1069 v4l_info(client, "Audio muted: %s\n",
1069 (mute_ctl & 0x2) ? "yes" : "no"); 1070 (state->unmute_volume >= 0) ? "yes" : "no");
1070 v4l_info(client, "Audio microcontroller: %s\n", 1071 v4l_info(client, "Audio microcontroller: %s\n",
1071 (download_ctl & 0x10) ? "running" : "stopped"); 1072 (download_ctl & 0x10) ?
1073 ((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
1072 1074
1073 switch (audio_config >> 4) { 1075 switch (audio_config >> 4) {
1074 case 0x00: p = "undefined"; break; 1076 case 0x00: p = "undefined"; break;