Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c58651c7 authored by jinjiawu's avatar jinjiawu Committed by ssizon
Browse files

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)
parent cfe89c27
Loading
Loading
Loading
Loading
+86 −3
Original line number Diff line number Diff line
@@ -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 @@ static struct snd_soc_dai_link msm8952_quin_dai_link[] = {
	},
};
//[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 *populate_snd_card_dailinks(struct device *dev)
	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 @@ struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
			msm8952_tasha_be_dai, sizeof(msm8952_tasha_be_dai));
		msm8952_dai_links = msm8952_tasha_dai_links;
	}
	if (of_property_read_bool(dev->of_node, "qcom,hdmi-dba-codec-rx")) {
		dev_dbg(dev, "%s(): hdmi dba audio support present\n",

	//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__);
		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));