[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <45iy6ksg25iqfnfezzsutmh7ihgbdy5wukul5bek2rmzm7jbbl@65rk4o6ednor>
Date: Thu, 20 Jun 2024 23:26:44 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
To: Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
Cc: Banajit Goswami <bgoswami@...cinc.com>,
Liam Girdwood <lgirdwood@...il.com>, Mark Brown <broonie@...nel.org>,
Jaroslav Kysela <perex@...ex.cz>, Takashi Iwai <tiwai@...e.com>,
Pierre-Louis Bossart <pierre-louis.bossart@...ux.intel.com>, alsa-devel@...a-project.org, linux-arm-msm@...r.kernel.org,
linux-sound@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 1/2] ASoC: codecs:lpass-wsa-macro: Fix vi feedback rate
On Wed, Jun 19, 2024 at 02:42:00PM GMT, Srinivas Kandagatla wrote:
> Currently the VI feedback rate is set to fixed 8K, fix this by getting
> the correct rate from params_rate.
What kind of issues are observed without this patch? What is the actual
issue that is getting fixed?
>
> Fixes: 2c4066e5d428 ("ASoC: codecs: lpass-wsa-macro: add dapm widgets and route")
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
> ---
> sound/soc/codecs/lpass-wsa-macro.c | 39 +++++++++++++++++++++++++++++++++++---
> 1 file changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
> index 6ce309980cd1..ec9f0b5d6778 100644
> --- a/sound/soc/codecs/lpass-wsa-macro.c
> +++ b/sound/soc/codecs/lpass-wsa-macro.c
> @@ -66,6 +66,10 @@
> #define CDC_WSA_TX_SPKR_PROT_CLK_DISABLE 0
> #define CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK GENMASK(3, 0)
> #define CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K 0
> +#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_16K 1
> +#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_24K 2
> +#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_32K 3
> +#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_48K 4
> #define CDC_WSA_TX0_SPKR_PROT_PATH_CFG0 (0x0248)
> #define CDC_WSA_TX1_SPKR_PROT_PATH_CTL (0x0264)
> #define CDC_WSA_TX1_SPKR_PROT_PATH_CFG0 (0x0268)
> @@ -347,6 +351,7 @@ struct wsa_macro {
> int ear_spkr_gain;
> int spkr_gain_offset;
> int spkr_mode;
> + u32 pcm_rate_vi;
> int is_softclip_on[WSA_MACRO_SOFTCLIP_MAX];
> int softclip_clk_users[WSA_MACRO_SOFTCLIP_MAX];
> struct regmap *regmap;
> @@ -974,6 +979,7 @@ static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
> struct snd_soc_dai *dai)
> {
> struct snd_soc_component *component = dai->component;
> + struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
> int ret;
>
> switch (substream->stream) {
> @@ -985,6 +991,11 @@ static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
> __func__, params_rate(params));
> return ret;
> }
> + break;
> + case SNDRV_PCM_STREAM_CAPTURE:
> + if (dai->id == WSA_MACRO_AIF_VI)
> + wsa->pcm_rate_vi = params_rate(params);
> +
> break;
> default:
> break;
> @@ -1159,6 +1170,28 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
> struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
> struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
> u32 tx_reg0, tx_reg1;
> + u32 rate_val;
> +
> + switch (wsa->pcm_rate_vi) {
> + case 8000:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K;
> + break;
> + case 16000:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_16K;
> + break;
> + case 24000:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_24K;
> + break;
> + case 32000:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_32K;
> + break;
> + case 48000:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_48K;
> + break;
> + default:
> + rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K;
> + break;
> + }
>
> if (test_bit(WSA_MACRO_TX0, &wsa->active_ch_mask[WSA_MACRO_AIF_VI])) {
> tx_reg0 = CDC_WSA_TX0_SPKR_PROT_PATH_CTL;
> @@ -1170,7 +1203,7 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
>
> switch (event) {
> case SND_SOC_DAPM_POST_PMU:
> - /* Enable V&I sensing */
> + /* Enable V&I sensing */
> snd_soc_component_update_bits(component, tx_reg0,
> CDC_WSA_TX_SPKR_PROT_RESET_MASK,
> CDC_WSA_TX_SPKR_PROT_RESET);
> @@ -1179,10 +1212,10 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
> CDC_WSA_TX_SPKR_PROT_RESET);
> snd_soc_component_update_bits(component, tx_reg0,
> CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK,
> - CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K);
> + rate_val);
> snd_soc_component_update_bits(component, tx_reg1,
> CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK,
> - CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K);
> + rate_val);
> snd_soc_component_update_bits(component, tx_reg0,
> CDC_WSA_TX_SPKR_PROT_CLK_EN_MASK,
> CDC_WSA_TX_SPKR_PROT_CLK_ENABLE);
>
> --
> 2.25.1
>
--
With best wishes
Dmitry
Powered by blists - more mailing lists