diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2007-08-05 07:00:36 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-10-09 21:04:55 -0400 |
commit | 87410dab1238623e082e9a78a62f1bbeb6c475e3 (patch) | |
tree | 521977ac3c7c91b9d97616452047bcddfd066279 /drivers/media/video/cx25840/cx25840-core.c | |
parent | 372978055dd564d97ca1b4099c99296eaff1fe19 (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.c | 6 |
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; |