Browse Source

lahaina: add mi2s and tdm dai-links

Change-Id: I3d541b110cc849b6e323f4df55be208e153d65eb
Signed-off-by: Phani Kumar Uppalapati <[email protected]>
Phani Kumar Uppalapati 4 years ago
parent
commit
10bed4cd23
4 changed files with 137 additions and 45 deletions
  1. 69 1
      asoc/lahaina.c
  2. 37 36
      asoc/msm-audio-defs.h
  3. 9 7
      asoc/msm_common.c
  4. 22 1
      asoc/msm_dailink.h

+ 69 - 1
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,

+ 37 - 36
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"

+ 9 - 7
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)

+ 22 - 1
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")));
+	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")));
+