Currently the VI feedback rate is set to fixed 8K, fix this by getting
the correct rate from params_rate.
Fixes: 2c4066e5d428 ("ASoC: codecs: lpass-wsa-macro: add dapm widgets and route")
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
sound/soc/codecs/lpass-wsa-macro.c | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index 6ce309980cd1..7b6d495ef596 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) {
@@ -986,6 +992,10 @@ static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
return ret;
}
break;
+ case SNDRV_PCM_STREAM_CAPTURE:
+ if (dai->id == WSA_MACRO_AIF_VI)
+ wsa->pcm_rate_vi = params_rate(params);
+
default:
break;
}
@@ -1159,6 +1169,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;
@@ -1179,10 +1211,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
Hi Srinivas,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0]
url: https://github.com/intel-lab-lkp/linux/commits/Srinivas-Kandagatla/ASoC-codecs-lpass-wsa-macro-Fix-vi-feedback-rate/20240618-221030
base: 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0
patch link: https://lore.kernel.org/r/20240618-lpass-wsa-vi-v1-1-416a6f162c81%40linaro.org
patch subject: [PATCH 1/2] ASoC: codecs:lpass-wsa-macro: Fix vi feedback rate
config: i386-buildonly-randconfig-002-20240619 (https://download.01.org/0day-ci/archive/20240619/202406190857.mozJxHDO-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240619/202406190857.mozJxHDO-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406190857.mozJxHDO-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> sound/soc/codecs/lpass-wsa-macro.c:999:2: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
999 | default:
| ^
sound/soc/codecs/lpass-wsa-macro.c:999:2: note: insert 'break;' to avoid fall-through
999 | default:
| ^
| break;
1 warning generated.
vim +999 sound/soc/codecs/lpass-wsa-macro.c
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 976
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 977 static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 978 struct snd_pcm_hw_params *params,
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 979 struct snd_soc_dai *dai)
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 980 {
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 981 struct snd_soc_component *component = dai->component;
2881dae5fbb091 Srinivas Kandagatla 2024-06-18 982 struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 983 int ret;
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 984
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 985 switch (substream->stream) {
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 986 case SNDRV_PCM_STREAM_PLAYBACK:
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 987 ret = wsa_macro_set_interpolator_rate(dai, params_rate(params));
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 988 if (ret) {
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 989 dev_err(component->dev,
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 990 "%s: cannot set sample rate: %u\n",
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 991 __func__, params_rate(params));
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 992 return ret;
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 993 }
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 994 break;
2881dae5fbb091 Srinivas Kandagatla 2024-06-18 995 case SNDRV_PCM_STREAM_CAPTURE:
2881dae5fbb091 Srinivas Kandagatla 2024-06-18 996 if (dai->id == WSA_MACRO_AIF_VI)
2881dae5fbb091 Srinivas Kandagatla 2024-06-18 997 wsa->pcm_rate_vi = params_rate(params);
2881dae5fbb091 Srinivas Kandagatla 2024-06-18 998
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 @999 default:
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 1000 break;
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 1001 }
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 1002 return 0;
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 1003 }
809bcbcecebff8 Srinivas Kandagatla 2020-11-05 1004
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.