Browse Source

audio-kernel: I2S/TDM backend dai-links
Add support for I2S/TDM backend dai-links for Kalama target

Change-Id: I0504a030afc534207d2d40ba6fd7fcebb2bb40f1

Srijan Magapu 3 years ago
parent
commit
4a4b666ba0
5 changed files with 78 additions and 4 deletions
  1. 42 0
      asoc/kalama.c
  2. 4 1
      asoc/msm-audio-defs.h
  3. 11 3
      asoc/msm_common.c
  4. 1 0
      asoc/msm_common.h
  5. 20 0
      asoc/msm_dailink.h

+ 42 - 0
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[

+ 4 - 1
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"

+ 11 - 3
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);

+ 1 - 0
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,
 };
 

+ 20 - 0
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")),