From 10bed4cd2325f72e9121f7034725afd6cf6ebc46 Mon Sep 17 00:00:00 2001 From: Phani Kumar Uppalapati Date: Tue, 15 Sep 2020 18:35:22 -0700 Subject: [PATCH] lahaina: add mi2s and tdm dai-links Change-Id: I3d541b110cc849b6e323f4df55be208e153d65eb Signed-off-by: Phani Kumar Uppalapati --- asoc/lahaina.c | 70 ++++++++++++++++++++++++++++++++++++++++- asoc/msm-audio-defs.h | 73 ++++++++++++++++++++++--------------------- asoc/msm_common.c | 16 +++++----- asoc/msm_dailink.h | 23 +++++++++++++- 4 files changed, 137 insertions(+), 45 deletions(-) diff --git a/asoc/lahaina.c b/asoc/lahaina.c index dcf428d136..e492ab1062 100644 --- a/asoc/lahaina.c +++ b/asoc/lahaina.c @@ -631,6 +631,54 @@ static struct snd_soc_dai_link msm_va_cdc_dma_be_dai_links[] = { }, }; +static struct snd_soc_dai_link msm_mi2s_dai_links[] = { + { + .name = LPASS_BE_QUAT_MI2S_RX, + .stream_name = LPASS_BE_QUAT_MI2S_RX, + .playback_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(quat_mi2s_rx), + }, + { + .name = LPASS_BE_QUAT_MI2S_TX, + .stream_name = LPASS_BE_QUAT_MI2S_TX, + .capture_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + SND_SOC_DAILINK_REG(quat_mi2s_tx), + }, +}; + +static struct snd_soc_dai_link msm_tdm_dai_links[] = { + { + .name = LPASS_BE_PRI_TDM_RX_0, + .stream_name = LPASS_BE_PRI_TDM_RX_0, + .playback_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(pri_tdm_rx_0), + }, + { + .name = LPASS_BE_PRI_TDM_TX_0, + .stream_name = LPASS_BE_PRI_TDM_TX_0, + .capture_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + SND_SOC_DAILINK_REG(pri_tdm_tx_0), + }, +}; + static struct snd_soc_dai_link msm_lahaina_dai_links[ ARRAY_SIZE(msm_wsa_cdc_dma_be_dai_links) + ARRAY_SIZE(msm_rx_tx_cdc_dma_be_dai_links) + @@ -639,7 +687,10 @@ static struct snd_soc_dai_link msm_lahaina_dai_links[ ARRAY_SIZE(ext_disp_be_dai_link) + #endif ARRAY_SIZE(msm_common_be_dai_links) + - ARRAY_SIZE(msm_wcn_be_dai_links)]; + ARRAY_SIZE(msm_wcn_be_dai_links) + + ARRAY_SIZE(msm_mi2s_dai_links) + + ARRAY_SIZE(msm_tdm_dai_links)]; + static int msm_populate_dai_link_component_of_node( struct snd_soc_card *card) @@ -870,6 +921,23 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) sizeof(msm_common_be_dai_links)); total_links += ARRAY_SIZE(msm_common_be_dai_links); + rc = of_property_read_u32(dev->of_node, + "qcom,mi2s-audio-intf", &val); + if (!rc && val) { + memcpy(msm_lahaina_dai_links + total_links, + msm_mi2s_dai_links, + sizeof(msm_mi2s_dai_links)); + total_links += ARRAY_SIZE(msm_mi2s_dai_links); + } + + rc = of_property_read_u32(dev->of_node, + "qcom,tdm-audio-intf", &val); + if (!rc && val) { + memcpy(msm_lahaina_dai_links + total_links, + msm_tdm_dai_links, + sizeof(msm_tdm_dai_links)); + total_links += ARRAY_SIZE(msm_tdm_dai_links); + } #if IS_ENABLED(CONFIG_AUDIO_QGKI) rc = of_property_read_u32(dev->of_node, diff --git a/asoc/msm-audio-defs.h b/asoc/msm-audio-defs.h index e5d6f4cdfe..d46ee47cc2 100644 --- a/asoc/msm-audio-defs.h +++ b/asoc/msm-audio-defs.h @@ -20,31 +20,31 @@ #define LPASS_BE_DISPLAY_PORT_RX "DISPLAY_PORT-RX" -#define LPASS_BE_PRI_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-PRIMARY" -#define LPASS_BE_PRI_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-PRIMARY" -#define LPASS_BE_SEC_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-SECONDARY" -#define LPASS_BE_SEC_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-SECONDARY" -#define LPASS_BE_TERT_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-TERTIARY" -#define LPASS_BE_TERT_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-TERTIARY" -#define LPASS_BE_QUAT_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-QUATERNARY" -#define LPASS_BE_QUAT_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-QUATERNARY" -#define LPASS_BE_QUIN_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-QUINARY" -#define LPASS_BE_QUIN_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-QUINARY" -#define LPASS_BE_SEN_AUXPCM_RX "AUXPCM-LPAIF_AXI-RX-SENARY" -#define LPASS_BE_SEN_AUXPCM_TX "AUXPCM-LPAIF_AXI-TX-SENARY" +#define LPASS_BE_PRI_AUXPCM_RX "AUXPCM-LPAIF-RX-PRIMARY" +#define LPASS_BE_PRI_AUXPCM_TX "AUXPCM-LPAIF-TX-PRIMARY" +#define LPASS_BE_SEC_AUXPCM_RX "AUXPCM-LPAIF-RX-SECONDARY" +#define LPASS_BE_SEC_AUXPCM_TX "AUXPCM-LPAIF-TX-SECONDARY" +#define LPASS_BE_TERT_AUXPCM_RX "AUXPCM-LPAIF-RX-TERTIARY" +#define LPASS_BE_TERT_AUXPCM_TX "AUXPCM-LPAIF-TX-TERTIARY" +#define LPASS_BE_QUAT_AUXPCM_RX "AUXPCM-LPAIF_RXTX-RX-QUATERNARY" +#define LPASS_BE_QUAT_AUXPCM_TX "AUXPCM-LPAIF_RXTX-TX-QUATERNARY" +#define LPASS_BE_QUIN_AUXPCM_RX "AUXPCM-LPAIF_VA-RX-QUINARY" +#define LPASS_BE_QUIN_AUXPCM_TX "AUXPCM-LPAIF_VA-TX-QUINARY" +#define LPASS_BE_SEN_AUXPCM_RX "AUXPCM-LPAIF_WSA-RX-SENARY" +#define LPASS_BE_SEN_AUXPCM_TX "AUXPCM-LPAIF_WSA-TX-SENARY" -#define LPASS_BE_PRI_MI2S_RX "MI2S-LPAIF_AXI-RX-PRIMARY" -#define LPASS_BE_PRI_MI2S_TX "MI2S-LPAIF_AXI-TX-PRIMARY" -#define LPASS_BE_SEC_MI2S_RX "MI2S-LPAIF_AXI-RX-SECONDARY" -#define LPASS_BE_SEC_MI2S_TX "MI2S-LPAIF_AXI-TX-SECONDARY" -#define LPASS_BE_TERT_MI2S_RX "MI2S-LPAIF_AXI-RX-TERTIARY" -#define LPASS_BE_TERT_MI2S_TX "MI2S-LPAIF_AXI-TX-TERTIARY" -#define LPASS_BE_QUAT_MI2S_RX "MI2S-LPAIF_AXI-RX-QUATERNARY" -#define LPASS_BE_QUAT_MI2S_TX "MI2S-LPAIF_AXI-TX-QUATERNARY" -#define LPASS_BE_QUIN_MI2S_RX "MI2S-LPAIF_AXI-RX-QUINARY" -#define LPASS_BE_QUIN_MI2S_TX "MI2S-LPAIF_AXI-TX-QUINARY" -#define LPASS_BE_SEN_MI2S_TX "MI2S-LPAIF_AXI-RX-SENARY" -#define LPASS_BE_SEN_MI2S_RX "MI2S-LPAIF_AXI-TX-SENARY" +#define LPASS_BE_PRI_MI2S_RX "MI2S-LPAIF-RX-PRIMARY" +#define LPASS_BE_PRI_MI2S_TX "MI2S-LPAIF-TX-PRIMARY" +#define LPASS_BE_SEC_MI2S_RX "MI2S-LPAIF-RX-SECONDARY" +#define LPASS_BE_SEC_MI2S_TX "MI2S-LPAIF-TX-SECONDARY" +#define LPASS_BE_TERT_MI2S_RX "MI2S-LPAIF-RX-TERTIARY" +#define LPASS_BE_TERT_MI2S_TX "MI2S-LPAIF-TX-TERTIARY" +#define LPASS_BE_QUAT_MI2S_RX "MI2S-LPAIF_RXTX-RX-QUATERNARY" +#define LPASS_BE_QUAT_MI2S_TX "MI2S-LPAIF_RXTX-TX-QUATERNARY" +#define LPASS_BE_QUIN_MI2S_RX "MI2S-LPAIF_VA-RX-QUINARY" +#define LPASS_BE_QUIN_MI2S_TX "MI2S-LPAIF_VA-TX-QUINARY" +#define LPASS_BE_SEN_MI2S_TX "MI2S-LPAIF_WSA-RX-SENARY" +#define LPASS_BE_SEN_MI2S_RX "MI2S-LPAIF_WSA-TX-SENARY" #define LPASS_BE_SLIMBUS_0_RX "SLIM-DEV1-RX-0" #define LPASS_BE_SLIMBUS_0_TX "SLIM-DEV1-TX-0" @@ -63,18 +63,19 @@ #define LPASS_BE_SLIMBUS_7_RX "SLIM-DEV1-RX-7" #define LPASS_BE_SLIMBUS_7_TX "SLIM-DEV1-TX-7" -#define LPASS_BE_PRI_TDM_RX_0 "TDM-LPAIF_AXI-RX-PRIMARY" -#define LPASS_BE_PRI_TDM_TX_0 "TDM-LPAIF_AXI-TX-PRIMARY" -#define LPASS_BE_SEC_TDM_RX_0 "TDM-LPAIF_AXI-RX-SECONDARY" -#define LPASS_BE_SEC_TDM_TX_0 "TDM-LPAIF_AXI-TX-SECONDARY" -#define LPASS_BE_TERT_TDM_RX_0 "TDM-LPAIF_AXI-RX-TERTIARY" -#define LPASS_BE_TERT_TDM_TX_0 "TDM-LPAIF_AXI-TX-TERTIARY" -#define LPASS_BE_QUAT_TDM_RX_0 "TDM-LPAIF_AXI-RX-QUATERNARY" -#define LPASS_BE_QUAT_TDM_TX_0 "TDM-LPAIF_AXI-TX-QUATERNARY" -#define LPASS_BE_QUIN_TDM_RX_0 "TDM-LPAIF_AXI-RX-QUINARY" -#define LPASS_BE_QUIN_TDM_TX_0 "TDM-LPAIF_AXI-TX-QUINARY" -#define LPASS_BE_SEN_TDM_RX_0 "TDM-LPAIF_AXI-RX-SENARY" -#define LPASS_BE_SEN_TDM_TX_0 "TDM-LPAIF_AXI-TX-SENARY" +#define LPASS_BE_PRI_TDM_RX_0 "TDM-LPAIF-RX-PRIMARY" +#define LPASS_BE_PRI_TDM_TX_0 "TDM-LPAIF-TX-PRIMARY" +#define LPASS_BE_SEC_TDM_RX_0 "TDM-LPAIF-RX-SECONDARY" +#define LPASS_BE_SEC_TDM_TX_0 "TDM-LPAIF-TX-SECONDARY" +#define LPASS_BE_TERT_TDM_RX_0 "TDM-LPAIF-RX-TERTIARY" +#define LPASS_BE_TERT_TDM_TX_0 "TDM-LPAIF-TX-TERTIARY" +#define LPASS_BE_SEN_TDM_RX_0 "TDM-LPAIF_WSA-RX-SENARY" +#define LPASS_BE_SEN_TDM_TX_0 "TDM-LPAIF_WSA-TX-SENARY" +#define LPASS_BE_QUAT_TDM_RX_0 "TDM-LPAIF_RXTX-RX-QUATERNARY" +#define LPASS_BE_QUAT_TDM_TX_0 "TDM-LPAIF_RXTX-TX-QUATERNARY" +#define LPASS_BE_QUIN_TDM_RX_0 "TDM-LPAIF_VA-RX-QUINARY" +#define LPASS_BE_QUIN_TDM_TX_0 "TDM-LPAIF_VA-TX-QUINARY" + #define LPASS_BE_USB_AUDIO_RX "USB_AUDIO-RX" #define LPASS_BE_USB_AUDIO_TX "USB_AUDIO-TX" diff --git a/asoc/msm_common.c b/asoc/msm_common.c index 5c802cc1a5..117a704e0e 100644 --- a/asoc/msm_common.c +++ b/asoc/msm_common.c @@ -147,20 +147,22 @@ static void check_userspace_service_state(struct snd_soc_pcm_runtime *rtd, static int get_intf_index(const char *stream_name) { - if (strnstr(stream_name, "PRIMARY", strlen("PRIMARY"))) + if (strnstr(stream_name, "PRIMARY", strlen(stream_name))) return PRI_MI2S_TDM_AUXPCM; - else if (strnstr(stream_name, "SECONDARY", strlen("SECONDARY"))) + else if (strnstr(stream_name, "SECONDARY", strlen(stream_name))) return SEC_MI2S_TDM_AUXPCM; - else if (strnstr(stream_name, "TERTIARY", strlen("TERTIARY"))) + else if (strnstr(stream_name, "TERTIARY", strlen(stream_name))) return TER_MI2S_TDM_AUXPCM; - else if (strnstr(stream_name, "QUATERNARY", strlen("QUATERNARY"))) + else if (strnstr(stream_name, "QUATERNARY", strlen(stream_name))) return QUAT_MI2S_TDM_AUXPCM; - else if (strnstr(stream_name, "QUINARY", strlen("QUINARY"))) + else if (strnstr(stream_name, "QUINARY", strlen(stream_name))) return QUIN_MI2S_TDM_AUXPCM; - else if (strnstr(stream_name, "SENARY", strlen("SENARY"))) + else if (strnstr(stream_name, "SENARY", strlen(stream_name))) return SEN_MI2S_TDM_AUXPCM; - else + else { + pr_err("%s: stream name %s does not match\n", __func__, stream_name); return -EINVAL; + } } int msm_common_snd_startup(struct snd_pcm_substream *substream) diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 1217e41022..f13966051c 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -146,4 +146,25 @@ SND_SOC_DAILINK_DEFS(proxy_tx, SND_SOC_DAILINK_DEFS(proxy_rx, DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), DAILINK_COMP_ARRAY(COMP_DUMMY()), - DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); \ No newline at end of file + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quat_mi2s_rx, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quat_mi2s_tx, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(pri_tdm_rx_0, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(pri_tdm_tx_0, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +