From e74b2a8eb5bb62f562062e171108cc665caf7fad Mon Sep 17 00:00:00 2001 From: Ganapathiraju Sarath Varma Date: Tue, 28 Jun 2022 19:35:05 +0530 Subject: [PATCH] asoc : codec : update audio path and ch_msk for VI. Update ch_msk and audio path for VI feedback path in lpass_wsa2 macro. Change-Id: Ibc96fc1ad82e2e996b11af20522f35e47b94d8f0 Signed-off-by: Ganapathiraju Sarath Varma --- asoc/codecs/lpass-cdc/lpass-cdc-wsa-macro.c | 12 ++++++++++ asoc/codecs/lpass-cdc/lpass-cdc-wsa2-macro.c | 24 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/asoc/codecs/lpass-cdc/lpass-cdc-wsa-macro.c b/asoc/codecs/lpass-cdc/lpass-cdc-wsa-macro.c index e6127aee37..f1e435463f 100644 --- a/asoc/codecs/lpass-cdc/lpass-cdc-wsa-macro.c +++ b/asoc/codecs/lpass-cdc/lpass-cdc-wsa-macro.c @@ -821,6 +821,18 @@ static int lpass_cdc_wsa_macro_get_channel_map(struct snd_soc_dai *dai, switch (dai->id) { case LPASS_CDC_WSA_MACRO_AIF_VI: + for_each_set_bit(temp, &wsa_priv->active_ch_mask[dai->id], + LPASS_CDC_WSA_MACRO_TX_MAX) { + mask |= (1 << temp); + if (++cnt == LPASS_CDC_WSA_MACRO_MAX_DMA_CH_PER_PORT) + break; + } + if (mask & 0x0C) + mask = mask >> 0x2; + + *tx_slot = mask; + *tx_num = cnt; + break; case LPASS_CDC_WSA_MACRO_AIF_CPS: *tx_slot = wsa_priv->active_ch_mask[dai->id]; *tx_num = wsa_priv->active_ch_cnt[dai->id]; diff --git a/asoc/codecs/lpass-cdc/lpass-cdc-wsa2-macro.c b/asoc/codecs/lpass-cdc/lpass-cdc-wsa2-macro.c index 615db4ef40..38e30aa661 100644 --- a/asoc/codecs/lpass-cdc/lpass-cdc-wsa2-macro.c +++ b/asoc/codecs/lpass-cdc/lpass-cdc-wsa2-macro.c @@ -789,6 +789,9 @@ static int lpass_cdc_wsa2_macro_hw_params(struct snd_pcm_substream *substream, case 24: wsa2_priv->bit_width[dai->id] = 24; break; + case 32: + wsa2_priv->bit_width[dai->id] = 32; + break; default: dev_err_ratelimited(component->dev, "%s: Invalid format 0x%x\n", __func__, params_width(params)); @@ -818,6 +821,20 @@ static int lpass_cdc_wsa2_macro_get_channel_map(struct snd_soc_dai *dai, switch (dai->id) { case LPASS_CDC_WSA2_MACRO_AIF_VI: + for_each_set_bit(temp, &wsa2_priv->active_ch_mask[dai->id], + LPASS_CDC_WSA2_MACRO_TX_MAX) { + mask |= (1 << temp); + if (++cnt == LPASS_CDC_WSA2_MACRO_MAX_DMA_CH_PER_PORT) + break; + } + if (mask & 0x30) + mask = mask >> 0x4; + if (mask & 0x03) + mask = mask << 0x2; + + *tx_slot = mask; + *tx_num = cnt; + break; case LPASS_CDC_WSA2_MACRO_AIF_CPS: *tx_slot = wsa2_priv->active_ch_mask[dai->id]; *tx_num = wsa2_priv->active_ch_cnt[dai->id]; @@ -2840,6 +2857,13 @@ static const struct snd_soc_dapm_widget lpass_cdc_wsa2_macro_dapm_widgets[] = { SND_SOC_DAPM_AIF_OUT("WSA2 AIF_ECHO", "WSA2_AIF_ECHO Capture", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("WSA2 AIF_CPS", "WSA2_AIF_CPS Capture", 0, + SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_AIF_OUT("WSA2 AIF_CPS", "WSA2_AIF_CPS Capture", 0, + SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_MIXER("WSA2_AIF_VI Mixer", SND_SOC_NOPM, LPASS_CDC_WSA2_MACRO_AIF_VI, 0, aif_vi_mixer, ARRAY_SIZE(aif_vi_mixer)), SND_SOC_DAPM_MIXER("WSA2_AIF_CPS Mixer", SND_SOC_NOPM, LPASS_CDC_WSA2_MACRO_AIF_CPS,