From 4a4b666ba0657fe071ff2eb389f2a2d7c1af71e2 Mon Sep 17 00:00:00 2001 From: Srijan Magapu Date: Wed, 16 Mar 2022 17:40:02 -0700 Subject: [PATCH] audio-kernel: I2S/TDM backend dai-links Add support for I2S/TDM backend dai-links for Kalama target Change-Id: I0504a030afc534207d2d40ba6fd7fcebb2bb40f1 --- asoc/kalama.c | 42 ++++++++++++++++++++++++++++++++++++++++++ asoc/msm-audio-defs.h | 5 ++++- asoc/msm_common.c | 14 +++++++++++--- asoc/msm_common.h | 1 + asoc/msm_dailink.h | 20 ++++++++++++++++++++ 5 files changed, 78 insertions(+), 4 deletions(-) diff --git a/asoc/kalama.c b/asoc/kalama.c index ad8d761cf2..5de5c4decb 100644 --- a/asoc/kalama.c +++ b/asoc/kalama.c @@ -933,6 +933,27 @@ static struct snd_soc_dai_link msm_mi2s_dai_links[] = { .ignore_suspend = 1, SND_SOC_DAILINK_REG(sen_mi2s_tx), }, + { + .name = LPASS_BE_SEP_MI2S_RX, + .stream_name = LPASS_BE_SEP_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(sep_mi2s_rx), + }, + { + .name = LPASS_BE_SEP_MI2S_TX, + .stream_name = LPASS_BE_SEP_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(sep_mi2s_tx), + }, }; static struct snd_soc_dai_link msm_tdm_dai_links[] = { @@ -1062,6 +1083,27 @@ static struct snd_soc_dai_link msm_tdm_dai_links[] = { .ignore_suspend = 1, SND_SOC_DAILINK_REG(sen_tdm_tx_0), }, + { + .name = LPASS_BE_SEP_TDM_RX_0, + .stream_name = LPASS_BE_SEP_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(sep_tdm_rx_0), + }, + { + .name = LPASS_BE_SEP_TDM_TX_0, + .stream_name = LPASS_BE_SEP_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(sep_tdm_tx_0), + }, }; static struct snd_soc_dai_link msm_kalama_dai_links[ diff --git a/asoc/msm-audio-defs.h b/asoc/msm-audio-defs.h index e79a8a0947..a3bbee07b5 100644 --- a/asoc/msm-audio-defs.h +++ b/asoc/msm-audio-defs.h @@ -45,6 +45,8 @@ #define LPASS_BE_QUIN_MI2S_TX "MI2S-LPAIF_VA-TX-PRIMARY" #define LPASS_BE_SEN_MI2S_RX "MI2S-LPAIF_WSA-RX-PRIMARY" #define LPASS_BE_SEN_MI2S_TX "MI2S-LPAIF_WSA-TX-PRIMARY" +#define LPASS_BE_SEP_MI2S_RX "MI2S-LPAIF_AUD-RX-PRIMARY" +#define LPASS_BE_SEP_MI2S_TX "MI2S-LPAIF_AUD-TX-PRIMARY" #define LPASS_BE_SLIMBUS_0_RX "SLIM-DEV1-RX-0" #define LPASS_BE_SLIMBUS_0_TX "SLIM-DEV1-TX-0" @@ -75,7 +77,8 @@ #define LPASS_BE_QUAT_TDM_TX_0 "TDM-LPAIF_RXTX-TX-PRIMARY" #define LPASS_BE_QUIN_TDM_RX_0 "TDM-LPAIF_VA-RX-PRIMARY" #define LPASS_BE_QUIN_TDM_TX_0 "TDM-LPAIF_VA-TX-PRIMARY" - +#define LPASS_BE_SEP_TDM_RX_0 "TDM-LPAIF_AUD-RX-PRIMARY" +#define LPASS_BE_SEP_TDM_TX_0 "TDM-LPAIF_AUD-TX-PRIMARY" #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 3d056d0746..84a8433919 100644 --- a/asoc/msm_common.c +++ b/asoc/msm_common.c @@ -257,7 +257,7 @@ static int get_mi2s_tdm_auxpcm_intf_index(const char *stream_name) else if (strnstr(stream_name, "LPAIF_VA", strlen(stream_name))) return QUIN_MI2S_TDM_AUXPCM; else if (strnstr(stream_name, "LPAIF_AUD", strlen(stream_name))) - return SEC_MI2S_TDM_AUXPCM; + return SEP_MI2S_TDM_AUXPCM; else if (strnstr(stream_name, "LPAIF", strlen(stream_name))) { if (strnstr(stream_name, "PRIMARY", strlen(stream_name))) return PRI_MI2S_TDM_AUXPCM; @@ -293,7 +293,7 @@ static int get_mi2s_clk_id(int index) clk_id = CLOCK_ID_PRI_MI2S_IBIT; break; case SEC_MI2S_TDM_AUXPCM: - clk_id = CLOCK_ID_SEP_MI2S_IBIT; + clk_id = CLOCK_ID_SEC_MI2S_IBIT; break; case TER_MI2S_TDM_AUXPCM: clk_id = CLOCK_ID_TER_MI2S_IBIT; @@ -307,6 +307,9 @@ static int get_mi2s_clk_id(int index) case SEN_MI2S_TDM_AUXPCM: clk_id = CLOCK_ID_SEN_MI2S_IBIT; break; + case SEP_MI2S_TDM_AUXPCM: + clk_id = CLOCK_ID_SEP_MI2S_IBIT; + break; default: pr_err("%s: Invalid interface index: %d\n", __func__, index); } @@ -323,7 +326,7 @@ static int get_tdm_clk_id(int index) clk_id = CLOCK_ID_PRI_TDM_IBIT; break; case SEC_MI2S_TDM_AUXPCM: - clk_id = CLOCK_ID_SEP_TDM_IBIT; + clk_id = CLOCK_ID_SEC_TDM_IBIT; break; case TER_MI2S_TDM_AUXPCM: clk_id = CLOCK_ID_TER_TDM_IBIT; @@ -337,6 +340,9 @@ static int get_tdm_clk_id(int index) case SEN_MI2S_TDM_AUXPCM: clk_id = CLOCK_ID_SEN_TDM_IBIT; break; + case SEP_MI2S_TDM_AUXPCM: + clk_id = CLOCK_ID_SEP_TDM_IBIT; + break; default: pr_err("%s: Invalid interface index: %d\n", __func__, index); } @@ -748,6 +754,8 @@ int msm_common_snd_init(struct platform_device *pdev, struct snd_soc_card *card) "qcom,quin-mi2s-gpios", 0); common_pdata->mi2s_gpio_p[SEN_MI2S_TDM_AUXPCM] = of_parse_phandle(pdev->dev.of_node, "qcom,sen-mi2s-gpios", 0); + common_pdata->mi2s_gpio_p[SEP_MI2S_TDM_AUXPCM] = of_parse_phandle(pdev->dev.of_node, + "qcom,sep-mi2s-gpios", 0); common_pdata->aud_dev_state = devm_kcalloc(&pdev->dev, card->num_links, sizeof(uint8_t), GFP_KERNEL); dev_info(&pdev->dev, "num_links %d \n", card->num_links); diff --git a/asoc/msm_common.h b/asoc/msm_common.h index 116756e9a1..64e87e3844 100644 --- a/asoc/msm_common.h +++ b/asoc/msm_common.h @@ -28,6 +28,7 @@ enum { QUAT_MI2S_TDM_AUXPCM, QUIN_MI2S_TDM_AUXPCM, SEN_MI2S_TDM_AUXPCM, + SEP_MI2S_TDM_AUXPCM, MI2S_TDM_AUXPCM_MAX, }; diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 8e846383eb..efed74a06d 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -260,6 +260,16 @@ SND_SOC_DAILINK_DEFS(sen_mi2s_tx, DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +SND_SOC_DAILINK_DEFS(sep_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(sep_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")), @@ -320,6 +330,16 @@ SND_SOC_DAILINK_DEFS(sen_tdm_tx_0, DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +SND_SOC_DAILINK_DEFS(sep_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(sep_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"))); + SND_SOC_DAILINK_DEFS(vi_feedback, DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), DAILINK_COMP_ARRAY(COMP_CODEC("lpass-cdc", "wsa_macro_vifeedback")),