From b6502fe339070267a98c4a1e44907be05df216f0 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Thu, 22 Nov 2012 15:34:11 +0800 Subject: [PATCH] rk2928:codec: codec_set_spk() can not mute completely, fix it. --- sound/soc/codecs/rk2928_codec.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/sound/soc/codecs/rk2928_codec.c b/sound/soc/codecs/rk2928_codec.c index 966474c07bc2..d450b320918d 100755 --- a/sound/soc/codecs/rk2928_codec.c +++ b/sound/soc/codecs/rk2928_codec.c @@ -135,14 +135,22 @@ void codec_set_spk(bool on) if(on == 0) { DBG("%s speaker is disabled\n", __FUNCTION__); rk2928_data.hdmi_enable = 1; - if(rk2928_data.mute == 0) + if(rk2928_data.mute == 0) { rk2928_write(NULL, CODEC_REG_DAC_MUTE, v_MUTE_DAC(1)); + if(rk2928_data.spkctl != INVALID_GPIO) { + gpio_direction_output(rk2928_data.spkctl, GPIO_LOW); + } + } } else { DBG("%s speaker is enabled\n", __FUNCTION__); rk2928_data.hdmi_enable = 0; - if(rk2928_data.mute == 0) + if(rk2928_data.mute == 0) { rk2928_write(NULL, CODEC_REG_DAC_MUTE, v_MUTE_DAC(0)); + if(rk2928_data.spkctl != INVALID_GPIO && rk2928_data.headset_status == HP_OUT) { + gpio_direction_output(rk2928_data.spkctl, GPIO_HIGH); + } + } } } #ifdef CONFIG_MODEM_SOUND @@ -266,11 +274,11 @@ static int rk2928_audio_trigger(struct snd_pcm_substream *substream, int cmd, } rk2928_write(codec, CODEC_REG_DAC_MUTE, v_MUTE_DAC(0)); + if(rk2928_data.spkctl != INVALID_GPIO && rk2928_data.headset_status == HP_OUT) { + gpio_direction_output(rk2928_data.spkctl, GPIO_HIGH); + } } rk2928_data.mute = 0; - if(rk2928_data.spkctl != INVALID_GPIO && rk2928_data.headset_status == HP_OUT) { - gpio_direction_output(rk2928_data.spkctl, GPIO_HIGH); - } } else { rk2928_write(codec, CODEC_REG_ADC_PGA_GAIN, 0xFF); -- 2.34.1