[alsa-devel] [PATCH] ASoC: sgtl5000: fix power on/off of MIC bias
From: Lionel Xu Lionel.Xu@freescale.com
There is no sound in the recorded wav, to enable recording, the VAG should be powered up, and the mic bias resistor should be set up with proper value.
Signed-off-by: Lionel Xu lionel.xu@freescale.com Signed-off-by: Shawn Guo shawn.guo@linaro.org Cc: Zeng Zhaoming zengzm.kernel@gmail.com --- sound/soc/codecs/sgtl5000.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index d192626..a24299c 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -132,11 +132,18 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w, snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL, SGTL5000_BIAS_R_MASK, SGTL5000_BIAS_R_4k << SGTL5000_BIAS_R_SHIFT); + + snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER, + SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP); break;
case SND_SOC_DAPM_PRE_PMD: snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL, - SGTL5000_BIAS_R_MASK, 0); + SGTL5000_BIAS_R_MASK, + SGTL5000_BIAS_R_off << SGTL5000_BIAS_R_SHIFT); + + snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER, + SGTL5000_VAG_POWERUP, 0); break; } return 0; @@ -197,7 +204,7 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HP_OUT"), SND_SOC_DAPM_OUTPUT("LINE_OUT"),
- SND_SOC_DAPM_MICBIAS_E("Mic Bias", SGTL5000_CHIP_MIC_CTRL, 8, 0, + SND_SOC_DAPM_MICBIAS_E("Mic Bias", SND_SOC_NOPM, 0, 0, mic_bias_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
@@ -229,7 +236,8 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { /* routes for sgtl5000 */ static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = { {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */ - {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */ + {"Mic Bias", NULL, "MIC_IN"}, /* mic_in --> mic bias */ + {"Capture Mux", "MIC_IN", "Mic Bias"}, /* mic bias --> adc_mux */
{"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */ {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */
-----Original Message----- From: alsa-devel-bounces@alsa-project.org [mailto:alsa-devel- bounces@alsa-project.org] On Behalf Of Shawn Guo Sent: Wednesday, March 28, 2012 3:31 PM To: alsa-devel@alsa-project.org Cc: Xu Lionel-R63889; Mark Brown; Zeng@alsa-project.org; Zhaoming; Shawn Guo; Xu Lionel-R63889; linux-arm-kernel@lists.infradead.org Subject: [alsa-devel] [PATCH] ASoC: sgtl5000: fix power on/off of MIC bias
From: Lionel Xu Lionel.Xu@freescale.com
There is no sound in the recorded wav, to enable recording, the VAG should be powered up, and the mic bias resistor should be set up with proper value.
Signed-off-by: Lionel Xu lionel.xu@freescale.com Signed-off-by: Shawn Guo shawn.guo@linaro.org Cc: Zeng Zhaoming zengzm.kernel@gmail.com
sound/soc/codecs/sgtl5000.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index d192626..a24299c 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -132,11 +132,18 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w, snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL, SGTL5000_BIAS_R_MASK, SGTL5000_BIAS_R_4k << SGTL5000_BIAS_R_SHIFT);
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
Did you test line-in record? IIRC for line-in record, it may also need VAG_POWER up. Then only enable VAG_POWER for mic_bias_event may not be sufficient. Will verify it latter when I'm free.
Regards Dong Aisheng
break;
case SND_SOC_DAPM_PRE_PMD: snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
SGTL5000_BIAS_R_MASK, 0);
SGTL5000_BIAS_R_MASK,
SGTL5000_BIAS_R_off << SGTL5000_BIAS_R_SHIFT);
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
break; } return 0;SGTL5000_VAG_POWERUP, 0);
@@ -197,7 +204,7 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HP_OUT"), SND_SOC_DAPM_OUTPUT("LINE_OUT"),
- SND_SOC_DAPM_MICBIAS_E("Mic Bias", SGTL5000_CHIP_MIC_CTRL, 8, 0,
- SND_SOC_DAPM_MICBIAS_E("Mic Bias", SND_SOC_NOPM, 0, 0, mic_bias_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
@@ -229,7 +236,8 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { /* routes for sgtl5000 */ static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = { {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */
- {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */
- {"Mic Bias", NULL, "MIC_IN"}, /* mic_in --> mic bias */
- {"Capture Mux", "MIC_IN", "Mic Bias"}, /* mic bias --> adc_mux
*/
{"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */ {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */ -- 1.7.4.1
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Wed, Mar 28, 2012 at 09:52:15AM +0000, Dong Aisheng-B29396 wrote:
Did you test line-in record?
No, I did not. I'm playing imx51 babbage board which has no LINE-IN routed.
IIRC for line-in record, it may also need VAG_POWER up. Then only enable VAG_POWER for mic_bias_event may not be sufficient. Will verify it latter when I'm free.
This patch only fixes MIC. I think you can submit another patch after you confirm LINE-IN has the same issue.
On Wed, Mar 28, 2012 at 10:18:14PM +0800, Shawn Guo wrote:
On Wed, Mar 28, 2012 at 09:52:15AM +0000, Dong Aisheng-B29396 wrote:
IIRC for line-in record, it may also need VAG_POWER up. Then only enable VAG_POWER for mic_bias_event may not be sufficient. Will verify it latter when I'm free.
This patch only fixes MIC. I think you can submit another patch after you confirm LINE-IN has the same issue.
I think this is a sensible approach, two patches fixing two issues seems reasonable (and I'd not expect line input to need the mic bias itself).
On Wed, Mar 28, 2012 at 03:30:33PM +0800, Shawn Guo wrote:
From: Lionel Xu Lionel.Xu@freescale.com
There is no sound in the recorded wav, to enable recording, the VAG should be powered up, and the mic bias resistor should be set up with proper value.
Signed-off-by: Lionel Xu lionel.xu@freescale.com Signed-off-by: Shawn Guo shawn.guo@linaro.org Cc: Zeng Zhaoming zengzm.kernel@gmail.com
sound/soc/codecs/sgtl5000.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index d192626..a24299c 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -132,11 +132,18 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w, snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL, SGTL5000_BIAS_R_MASK, SGTL5000_BIAS_R_4k << SGTL5000_BIAS_R_SHIFT);
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
Only enable SGTL5000_VAG_POWERUP for mic bias_event may not be sufficient. IIRC for line-in record, we also need to enable VAG_POWER. Will verify it later when i'm free.
Regards Dong Aisheng
break;
case SND_SOC_DAPM_PRE_PMD: snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
SGTL5000_BIAS_R_MASK, 0);
SGTL5000_BIAS_R_MASK,
SGTL5000_BIAS_R_off << SGTL5000_BIAS_R_SHIFT);
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
break; } return 0;SGTL5000_VAG_POWERUP, 0);
@@ -197,7 +204,7 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HP_OUT"), SND_SOC_DAPM_OUTPUT("LINE_OUT"),
- SND_SOC_DAPM_MICBIAS_E("Mic Bias", SGTL5000_CHIP_MIC_CTRL, 8, 0,
- SND_SOC_DAPM_MICBIAS_E("Mic Bias", SND_SOC_NOPM, 0, 0, mic_bias_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
@@ -229,7 +236,8 @@ static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = { /* routes for sgtl5000 */ static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = { {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */
- {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */
{"Mic Bias", NULL, "MIC_IN"}, /* mic_in --> mic bias */
{"Capture Mux", "MIC_IN", "Mic Bias"}, /* mic bias --> adc_mux */
{"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */ {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */
-- 1.7.4.1
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Wed, Mar 28, 2012 at 03:30:33PM +0800, Shawn Guo wrote:
From: Lionel Xu Lionel.Xu@freescale.com
There is no sound in the recorded wav, to enable recording, the VAG should be powered up, and the mic bias resistor should be set up with proper value.
Signed-off-by: Lionel Xu lionel.xu@freescale.com Signed-off-by: Shawn Guo shawn.guo@linaro.org Cc: Zeng Zhaoming zengzm.kernel@gmail.com
Mark, I just send a patch authored by Zeng Zhaoming, which fixes the problem in a more sensible way. So please ignore this one.
participants (4)
-
Dong Aisheng
-
Dong Aisheng-B29396
-
Mark Brown
-
Shawn Guo