[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMi1Hd3v3KPVP15KLriDWsQFOuToee5F7JVDpMNrY-nnnXCnYQ@mail.gmail.com>
Date: Thu, 7 Apr 2022 20:33:15 +0530
From: Amit Pundir <amit.pundir@...aro.org>
To: Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
Cc: broonie@...nel.org, lgirdwood@...il.com, perex@...ex.cz,
tiwai@...e.com, pierre-louis.bossart@...ux.intel.com,
alsa-devel@...a-project.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] ASoC: codecs: wcd934x: do not switch off SIDO Buck when
codec is in use
On Thu, 7 Apr 2022 at 15:13, Srinivas Kandagatla
<srinivas.kandagatla@...aro.org> wrote:
>
> SIDO(Single-Inductor Dual-Ouput) Buck powers up both analog and digital
> circuits along with internal memory, powering off this is the last thing
> that codec should do when going to very low power.
>
> Current code was powering off this Buck if there are no users of sysclk,
> which is not correct. Powering off this buck will result in no register access.
> This code path was never tested until recently after adding pm support
> in SoundWire controller. Fix this by removing the buck poweroff when the
> codec is active and also the code that is not used.
>
> Without this patch all the read/write transactions will never complete and
> results in SLIMBus Errors like:
>
> qcom,slim-ngd qcom,slim-ngd.1: Tx:MT:0x0, MC:0x60, LA:0xcf failed:-110
> wcd934x-codec wcd934x-codec.1.auto: ASoC: error at soc_component_read_no_lock
> on wcd934x-codec.1.auto for register: [0x00000d05] -110
> qcom,slim-ngd-ctrl 171c0000.slim: Error Interrupt received 0x82000000
>
Thanks Srinivas. It fixes the above regression I see on DB845c and
Xiaomi Pocophone F1 running AOSP with v5.18-rc1.
Tested-by: Amit Pundir <amit.pundir@...aro.org>
> Reported-by: Amit Pundir <amit.pundir@...aro.org>
> Fixes: a61f3b4f476e ("ASoC: wcd934x: add support to wcd9340/wcd9341 codec")
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
> ---
> sound/soc/codecs/wcd934x.c | 26 +-------------------------
> 1 file changed, 1 insertion(+), 25 deletions(-)
>
> diff --git a/sound/soc/codecs/wcd934x.c b/sound/soc/codecs/wcd934x.c
> index 1e75e93cf28f..6298ebe96e94 100644
> --- a/sound/soc/codecs/wcd934x.c
> +++ b/sound/soc/codecs/wcd934x.c
> @@ -1274,29 +1274,7 @@ static int wcd934x_set_sido_input_src(struct wcd934x_codec *wcd, int sido_src)
> if (sido_src == wcd->sido_input_src)
> return 0;
>
> - if (sido_src == SIDO_SOURCE_INTERNAL) {
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
> - WCD934X_ANA_BUCK_HI_ACCU_EN_MASK, 0);
> - usleep_range(100, 110);
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
> - WCD934X_ANA_BUCK_HI_ACCU_PRE_ENX_MASK, 0x0);
> - usleep_range(100, 110);
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO,
> - WCD934X_ANA_RCO_BG_EN_MASK, 0);
> - usleep_range(100, 110);
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
> - WCD934X_ANA_BUCK_PRE_EN1_MASK,
> - WCD934X_ANA_BUCK_PRE_EN1_ENABLE);
> - usleep_range(100, 110);
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
> - WCD934X_ANA_BUCK_PRE_EN2_MASK,
> - WCD934X_ANA_BUCK_PRE_EN2_ENABLE);
> - usleep_range(100, 110);
> - regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
> - WCD934X_ANA_BUCK_HI_ACCU_EN_MASK,
> - WCD934X_ANA_BUCK_HI_ACCU_ENABLE);
> - usleep_range(100, 110);
> - } else if (sido_src == SIDO_SOURCE_RCO_BG) {
> + if (sido_src == SIDO_SOURCE_RCO_BG) {
> regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO,
> WCD934X_ANA_RCO_BG_EN_MASK,
> WCD934X_ANA_RCO_BG_ENABLE);
> @@ -1382,8 +1360,6 @@ static int wcd934x_disable_ana_bias_and_syclk(struct wcd934x_codec *wcd)
> regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG,
> WCD934X_EXT_CLK_BUF_EN_MASK |
> WCD934X_MCLK_EN_MASK, 0x0);
> - wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_INTERNAL);
> -
> regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS,
> WCD934X_ANA_BIAS_EN_MASK, 0);
> regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS,
> --
> 2.21.0
>
Powered by blists - more mailing lists