Audio porting for smart amp TAS2557.

Root cause:
Configure dai_link for smart amp.
How to fix:
N/A

Change-Id: I4053051660b4943667e1300a10c52117f594dab8
RiskArea:speaker
(cherry picked from commit a0a2846ea9bf4aa6547dc26d20e7ab7a1668b3c5)
(cherry picked from commit b3071f313f1ddc9356b4ca9c49d3caf415d7c9e8)
diff --git a/asoc/msm8952-dai-links.c b/asoc/msm8952-dai-links.c
index feb52b0..c40c031 100755
--- a/asoc/msm8952-dai-links.c
+++ b/asoc/msm8952-dai-links.c
@@ -11,6 +11,9 @@
  */
 
 #include <linux/of.h>
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -s
+#include <linux/gpio.h>
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -e
 #include <sound/core.h>
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
@@ -21,6 +24,12 @@
 
 #define DEV_NAME_STR_LEN            32
 
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -s
+#define PSTAGE_0 97
+#define PSTAGE_1 98
+#define PSTAGE_2 99
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -e
+
 /* dummy definition of below deprecated FE DAI's*/
 enum {
 	MSM_FRONTEND_DAI_CS_VOICE = 39,
@@ -1281,6 +1290,26 @@
 	},
 };
 //[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -s
+static struct snd_soc_dai_link msm8952_quin_dai_link_tas2557[] = {
+	{
+		.name = LPASS_BE_QUIN_MI2S_RX,
+		.stream_name = "Quinary MI2S Playback",
+		.cpu_dai_name = "msm-dai-q6-mi2s.5",
+		.platform_name = "msm-pcm-routing",
+		.codec_dai_name = "tas2557 ASI1",
+		.codec_name = "tas2557.6-004c",
+		//.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
+		.no_pcm = 1,
+		.dpcm_playback = 1,
+		.id = MSM_BACKEND_DAI_QUINARY_MI2S_RX,
+		.be_hw_params_fixup = msm_quin_be_hw_params_fixup,
+		.ops = &msm8952_quin_mi2s_be_ops,
+		.ignore_pmdown_time = 1, /* dai link has playback support */
+		.ignore_suspend = 1,
+	},
+};
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -e
 
 static struct snd_soc_dai_link msm8952_tdm_be_dai_link[] = {
 	/* TDM be dai links */
@@ -1551,6 +1580,12 @@
 	struct snd_soc_card *card = &snd_soc_card_msm_card;
 	struct snd_soc_dai_link *msm8952_dai_links = NULL;
 	int num_links, ret, len1, len2, len3, len4, len5 = 0;
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -s
+	int pstage_0 = 0; //GPIO 97
+	int pstage_1 = 0; //GPIO 98
+	int pstage_2 = 0; //GPIO 99
+//[FairPhone][Audio][jinjia]=2020.05.19=2nd smart amp porting. -e
+
 	enum codec_variant codec_ver = 0;
 	const char *tasha_lite[NUM_OF_TASHA_LITE_DEVICE] = {
 		"msm8952-tashalite-snd-card",
@@ -1595,18 +1630,66 @@
 			msm8952_tasha_be_dai, sizeof(msm8952_tasha_be_dai));
 		msm8952_dai_links = msm8952_tasha_dai_links;
 	}
+
+	//PSTAGE_0
+	ret = gpio_request(PSTAGE_0,"PSTAGE_0 GPIO_97");
+
+	if(ret<0){
+		printk("PSTAGE_0 failed to request \n");
+	}else{
+		gpio_direction_input(PSTAGE_0);
+	}
+	pstage_0 = gpio_get_value(PSTAGE_0);
+	gpio_free(PSTAGE_0);
+
+	//PSTAGE_1
+	ret = 0;
+
+	ret = gpio_request(PSTAGE_1,"PSTAGE_1 GPIO_98");
+
+	if(ret<0){
+		printk("PSTAGE_1 failed to request \n");
+	}else{
+		gpio_direction_input(PSTAGE_1);
+	}
+	pstage_1 = gpio_get_value(PSTAGE_1);
+	gpio_free(PSTAGE_1);
+
+	//PSTAGE_2
+	ret = 0;
+
+	ret = gpio_request(PSTAGE_2,"PSTAGE_2 GPIO_99");
+
+	if(ret<0){
+		printk("PSTAGE_2 failed to request \n");
+	}else{
+		gpio_direction_input(PSTAGE_2);
+	}
+	pstage_2 = gpio_get_value(PSTAGE_2);
+	gpio_free(PSTAGE_2);
+
+	if (pstage_2 == 1 && ((pstage_1 || pstage_0) == 1)) {	//Remove hdmi-codec 	if (of_property_read_bool(dev->of_node, "qcom,hdmi-dba-codec-rx")) {
+		//PCB Variant : 8903MP and newer variants (PCB Variant = HLH,HHL,HHH)
+
+		dev_dbg(dev, "%s(): No aw8898 present, add quin dai for tas2257\n",
+				__func__);
+		memcpy(msm8952_dai_links + len5, msm8952_quin_dai_link_tas2557,
+			sizeof(msm8952_quin_dai_link_tas2557));
+		len5 += ARRAY_SIZE(msm8952_quin_dai_link_tas2557);
+//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
+		/*
 	if (of_property_read_bool(dev->of_node, "qcom,hdmi-dba-codec-rx")) {
 		dev_dbg(dev, "%s(): hdmi dba audio support present\n",
 				__func__);
-//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
-		/*
 		memcpy(msm8952_dai_links + len5, msm8952_hdmi_dba_dai_link,
 			sizeof(msm8952_hdmi_dba_dai_link));
 		len5 += ARRAY_SIZE(msm8952_hdmi_dba_dai_link);
 		*/
 //[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e
+
 	} else {
-		dev_dbg(dev, "%s(): No hdmi dba present, add quin dai\n",
+		//PCB Variant : EP0 ~ 8901MP
+		dev_dbg(dev, "%s(): No tas2257 present, add quin dai for aw8898\n",
 				__func__);
 		memcpy(msm8952_dai_links + len5, msm8952_quin_dai_link,
 			sizeof(msm8952_quin_dai_link));