diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c index 87c9477ad1..53ad129d46 100644 --- a/asoc/codecs/bolero/rx-macro.c +++ b/asoc/codecs/bolero/rx-macro.c @@ -387,6 +387,7 @@ enum { RX_MACRO_AIF3_PB, RX_MACRO_AIF4_PB, RX_MACRO_AIF_ECHO, + RX_MACRO_AIF5_PB, RX_MACRO_AIF6_PB, RX_MACRO_MAX_DAIS, }; @@ -719,6 +720,20 @@ static struct snd_soc_dai_driver rx_macro_dai[] = { }, .ops = &rx_macro_dai_ops, }, + { + .name = "rx_macro_rx5", + .id = RX_MACRO_AIF5_PB, + .playback = { + .stream_name = "RX_MACRO_AIF5 Playback", + .rates = RX_MACRO_RATES | RX_MACRO_FRAC_RATES, + .formats = RX_MACRO_FORMATS, + .rate_max = 384000, + .rate_min = 8000, + .channels_min = 1, + .channels_max = 4, + }, + .ops = &rx_macro_dai_ops, + }, { .name = "rx_macro_rx6", .id = RX_MACRO_AIF6_PB, @@ -1138,6 +1153,13 @@ static int rx_macro_get_channel_map(struct snd_soc_dai *dai, "%s: dai->id:%d, ch_mask:0x%x, active_ch_cnt:%d active_mask: 0x%x\n", __func__, dai->id, *rx_slot, *rx_num, rx_priv->active_ch_mask[dai->id]); break; + case RX_MACRO_AIF5_PB: + *rx_slot = 0x1; + *rx_num = 0x01; + dev_dbg(rx_priv->dev, + "%s: dai->id:%d, ch_mask:0x%x, active_ch_cnt:%d\n", + __func__, dai->id, *rx_slot, *rx_num); + break; case RX_MACRO_AIF6_PB: *rx_slot = 0x1; *rx_num = 0x01; @@ -3191,6 +3213,9 @@ static const struct snd_soc_dapm_widget rx_macro_dapm_widgets[] = { SND_SOC_DAPM_AIF_OUT("RX AIF_ECHO", "RX_AIF_ECHO Capture", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX AIF5 PB", "RX_MACRO_AIF5 Playback", 0, + SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX AIF6 PB", "RX_MACRO_AIF6 Playback", 0, SND_SOC_NOPM, 0, 0), @@ -3861,6 +3886,7 @@ static int rx_macro_init(struct snd_soc_component *component) snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF2 Playback"); snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF3 Playback"); snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF4 Playback"); + snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF5 Playback"); snd_soc_dapm_ignore_suspend(dapm, "RX_MACRO_AIF6 Playback"); snd_soc_dapm_ignore_suspend(dapm, "HPHL_OUT"); snd_soc_dapm_ignore_suspend(dapm, "HPHR_OUT"); diff --git a/asoc/lahaina.c b/asoc/lahaina.c index 2dd1624797..0cd3d16cec 100644 --- a/asoc/lahaina.c +++ b/asoc/lahaina.c @@ -4569,6 +4569,7 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, case MSM_BACKEND_DAI_RX_CDC_DMA_RX_1: case MSM_BACKEND_DAI_RX_CDC_DMA_RX_2: case MSM_BACKEND_DAI_RX_CDC_DMA_RX_3: + case MSM_BACKEND_DAI_RX_CDC_DMA_RX_5: case MSM_BACKEND_DAI_RX_CDC_DMA_RX_6: idx = msm_cdc_dma_get_idx_from_beid(dai_link->id); param_set_mask(params, SNDRV_PCM_HW_PARAM_FORMAT, @@ -6892,6 +6893,21 @@ static struct snd_soc_dai_link msm_rx_tx_cdc_dma_be_dai_links[] = { .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx3), }, + { + .name = LPASS_BE_RX_CDC_DMA_RX_5, + .stream_name = "RX CDC DMA5 Playback", +#if IS_ENABLED(CONFIG_AUDIO_QGKI) + .dynamic_be = 1, +#endif /* CONFIG_AUDIO_QGKI */ + .no_pcm = 1, + .dpcm_playback = 1, + .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_5, + .be_hw_params_fixup = msm_be_hw_params_fixup, + .ignore_pmdown_time = 1, + .ignore_suspend = 1, + .ops = &msm_cdc_dma_be_ops, + SND_SOC_DAILINK_REG(rx_dma_rx5), + }, { .name = LPASS_BE_RX_CDC_DMA_RX_6, .stream_name = "RX CDC DMA6 Playback", diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 113a14e479..e0ae2fe323 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -528,6 +528,12 @@ SND_SOC_DAILINK_DEFS(rx_dma_rx3, COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); +SND_SOC_DAILINK_DEFS(rx_dma_rx5, + DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45114")), + DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx5"), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); + SND_SOC_DAILINK_DEFS(rx_dma_rx6, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45116")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx6"),