| From f88afe82312246126db10654842fceab20bfda7a Mon Sep 17 00:00:00 2001 |
| From: Stephan Gerhold <stephan@gerhold.net> |
| Date: Sat, 11 Jan 2020 17:40:04 +0100 |
| Subject: [PATCH] ASoC: msm8916-wcd-analog: Fix MIC BIAS Internal1 |
| |
| commit 057efcf9faea4769cf1020677d93d040db9b23f3 upstream. |
| |
| MIC BIAS Internal1 is broken at the moment because we always |
| enable the internal rbias resistor to the TX2 line (connected to |
| the headset microphone), rather than enabling the resistor connected |
| to TX1. |
| |
| Move the RBIAS code to pm8916_wcd_analog_enable_micbias_int1/2() |
| to fix this. |
| |
| Fixes: 585e881e5b9e ("ASoC: codecs: Add msm8916-wcd analog codec") |
| Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
| Signed-off-by: Stephan Gerhold <stephan@gerhold.net> |
| Link: https://lore.kernel.org/r/20200111164006.43074-3-stephan@gerhold.net |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c |
| index fad3d24a13e4..c820d5a386f6 100644 |
| --- a/sound/soc/codecs/msm8916-wcd-analog.c |
| +++ b/sound/soc/codecs/msm8916-wcd-analog.c |
| @@ -391,9 +391,6 @@ static int pm8916_wcd_analog_enable_micbias_int(struct snd_soc_component |
| |
| switch (event) { |
| case SND_SOC_DAPM_PRE_PMU: |
| - snd_soc_component_update_bits(component, CDC_A_MICB_1_INT_RBIAS, |
| - MICB_1_INT_TX2_INT_RBIAS_EN_MASK, |
| - MICB_1_INT_TX2_INT_RBIAS_EN_ENABLE); |
| snd_soc_component_update_bits(component, reg, MICB_1_EN_PULL_DOWN_EN_MASK, 0); |
| snd_soc_component_update_bits(component, CDC_A_MICB_1_EN, |
| MICB_1_EN_OPA_STG2_TAIL_CURR_MASK, |
| @@ -443,6 +440,14 @@ static int pm8916_wcd_analog_enable_micbias_int1(struct |
| struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); |
| struct pm8916_wcd_analog_priv *wcd = snd_soc_component_get_drvdata(component); |
| |
| + switch (event) { |
| + case SND_SOC_DAPM_PRE_PMU: |
| + snd_soc_component_update_bits(component, CDC_A_MICB_1_INT_RBIAS, |
| + MICB_1_INT_TX1_INT_RBIAS_EN_MASK, |
| + MICB_1_INT_TX1_INT_RBIAS_EN_ENABLE); |
| + break; |
| + } |
| + |
| return pm8916_wcd_analog_enable_micbias_int(component, event, w->reg, |
| wcd->micbias1_cap_mode); |
| } |
| @@ -553,6 +558,11 @@ static int pm8916_wcd_analog_enable_micbias_int2(struct |
| struct pm8916_wcd_analog_priv *wcd = snd_soc_component_get_drvdata(component); |
| |
| switch (event) { |
| + case SND_SOC_DAPM_PRE_PMU: |
| + snd_soc_component_update_bits(component, CDC_A_MICB_1_INT_RBIAS, |
| + MICB_1_INT_TX2_INT_RBIAS_EN_MASK, |
| + MICB_1_INT_TX2_INT_RBIAS_EN_ENABLE); |
| + break; |
| case SND_SOC_DAPM_POST_PMU: |
| pm8916_mbhc_configure_bias(wcd, true); |
| break; |
| -- |
| 2.7.4 |
| |