This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320AIC3104 driver porting on Qualcomm mdm9615

Other Parts Discussed in Thread: TLV320AIC3104

Hello,

I'm currently attempting to get TLV320AIC3104 audio working on our board (Qualcomm mdm9615).  

hardware: mdm9615 + TLV320AIC3104

software:   yocto 1.6 (linux kernel 3.4.91)

I want to add both platform info and codec info into machine file (linux/sound/soc/msm/mdm9615.c) in linux way. but there are too many snd_soc_dai_link structure . I don't know which one to choose for adding codec info or  every one should been changed.  hope for your advice , Tks!

specific code as follow.

/* Digital audio interface glue - connects codec <---> CPU */
	static struct snd_soc_dai_link mdm9615_dai_ar7[] = {
		/* FrontEnd DAI Links */
		{
			.name = "MDM9615 Media1",
			.stream_name = "MultiMedia1",
			.cpu_dai_name	= "MultiMedia1",
			.platform_name  = "msm-pcm-dsp",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.ignore_suspend = 1,
			.be_id = MSM_FRONTEND_DAI_MULTIMEDIA1
		},
		{
			.name = "MDM9615 Media2",
			.stream_name = "MultiMedia2",
			.cpu_dai_name	= "MultiMedia2",
			.platform_name  = "msm-pcm-dsp",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.ignore_suspend = 1,
			.be_id = MSM_FRONTEND_DAI_MULTIMEDIA2,
		},
		{
			.name = "Circuit-Switch Voice",
			.stream_name = "CS-Voice",
			.cpu_dai_name   = "CS-VOICE",
			.platform_name  = "msm-pcm-voice",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.ignore_suspend = 1,
			.be_id = MSM_FRONTEND_DAI_CS_VOICE,
			.no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
			.ignore_suspend = 1,
		},
		{
			.name = "MSM VoIP",
			.stream_name = "VoIP",
			.cpu_dai_name	= "VoIP",
			.platform_name  = "msm-voip-dsp",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.ignore_suspend = 1,
			.be_id = MSM_FRONTEND_DAI_VOIP,
		},
		{
			.name = "MSM AFE-PCM RX",
			.stream_name = "AFE-PROXY RX",
			.cpu_dai_name = "msm-dai-q6.241",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.platform_name  = "msm-pcm-afe",
			.ignore_suspend = 1,
		},
		{
			.name = "MSM AFE-PCM TX",
			.stream_name = "AFE-PROXY TX",
			.cpu_dai_name = "msm-dai-q6.240",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.platform_name  = "msm-pcm-afe",
			.ignore_suspend = 1,
		},
		{
			.name = "SLIMBUS_0 Hostless",
			.stream_name = "SLIMBUS_0 Hostless",
			.cpu_dai_name	= "SLIMBUS0_HOSTLESS",
			.platform_name  = "msm-pcm-hostless",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
			.ignore_suspend = 1,
			/* .be_id = do not care */
		},
		{
			.name = "AUXPCM Hostless",
			.stream_name = "AUXPCM Hostless",
			.cpu_dai_name	= "AUXPCM_HOSTLESS",
			.platform_name  = "msm-pcm-hostless",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
			.ignore_suspend = 1,
		},
		{
			.name = "VoLTE",
			.stream_name = "VoLTE",
			.cpu_dai_name   = "VoLTE",
			.platform_name  = "msm-pcm-voice",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
			.be_id = MSM_FRONTEND_DAI_VOLTE,
			.no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
			.ignore_suspend = 1,
		},
		{
			.name = "DTMF RX Hostless",
			.stream_name = "DTMF RX Hostless",
			.cpu_dai_name	= "DTMF_RX_HOSTLESS",
			.platform_name  = "msm-pcm-dtmf",
			.dynamic = 1,
			.codec_dai_name = "snd-soc-dummy-dai",
			.codec_name = "snd-soc-dummy",
			.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				    SND_SOC_DPCM_TRIGGER_POST},
			.ignore_suspend = 1,
			.be_id = MSM_FRONTEND_DAI_DTMF_RX,
			.no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
			.ignore_suspend = 1,
		},
		{
			.name = "DTMF TX",
			.stream_name = "DTMF TX",
			.cpu_dai_name = "msm-dai-stub",
			.platform_name  = "msm-pcm-dtmf",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.ignore_suspend = 1,
		},
		{
			.name = "CS-VOICE HOST RX CAPTURE",
			.stream_name = "CS-VOICE HOST RX CAPTURE",
			.cpu_dai_name = "msm-dai-stub",
			.platform_name  = "msm-host-pcm-voice",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.ignore_suspend = 1,
			.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				    SND_SOC_DPCM_TRIGGER_POST},
		},
		{
			.name = "CS-VOICE HOST RX PLAYBACK",
			.stream_name = "CS-VOICE HOST RX PLAYBACK",
			.cpu_dai_name = "msm-dai-stub",
			.platform_name  = "msm-host-pcm-voice",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.ignore_suspend = 1,
		},
		{
			.name = "CS-VOICE HOST TX CAPTURE",
			.stream_name = "CS-VOICE HOST TX CAPTURE",
			.cpu_dai_name = "msm-dai-stub",
			.platform_name  = "msm-host-pcm-voice",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.ignore_suspend = 1,
			.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				    SND_SOC_DPCM_TRIGGER_POST},
		},
		{
			.name = "CS-VOICE HOST TX PLAYBACK",
			.stream_name = "CS-VOICE HOST TX PLAYBACK",
			.cpu_dai_name = "msm-dai-stub",
			.platform_name  = "msm-host-pcm-voice",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.ignore_suspend = 1,
		},

		/* Backend AFE DAI Links */
		{
			.name = LPASS_BE_AFE_PCM_RX,
			.stream_name = "AFE Playback",
			.cpu_dai_name = "msm-dai-q6.224",
			.platform_name = "msm-pcm-routing",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_AFE_PCM_RX,
		},
		{
			.name = LPASS_BE_AFE_PCM_TX,
			.stream_name = "AFE Capture",
			.cpu_dai_name = "msm-dai-q6.225",
			.platform_name = "msm-pcm-routing",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_AFE_PCM_TX,
		},
		/* Incall Music BACK END DAI Link */
		{
			.name = LPASS_BE_VOICE_PLAYBACK_TX,
			.stream_name = "Voice Farend Playback",
			.cpu_dai_name = "msm-dai-q6.32773",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
			.be_hw_params_fixup = mdm9615_be_hw_params_fixup,
		},
		/* Incall Record Uplink BACK END DAI Link */
		{
			.name = LPASS_BE_INCALL_RECORD_TX,
			.stream_name = "Voice Uplink Capture",
			.cpu_dai_name = "msm-dai-q6.32772",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.no_pcm = 1,
		.be_id = MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
			.be_id = MSM_BACKEND_DAI_INCALL_RECORD_TX,
			.be_hw_params_fixup = mdm9615_be_hw_params_fixup,
		},
		/* Incall Record Downlink BACK END DAI Link */
		{
			.name = LPASS_BE_INCALL_RECORD_RX,
			.stream_name = "Voice Downlink Capture",
			.cpu_dai_name = "msm-dai-q6.32771",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_INCALL_RECORD_RX,
			.be_hw_params_fixup = mdm9615_be_hw_params_fixup,
			.ignore_pmdown_time = 1, /* this dailink has playback support */
		},
		/* SECONDARY AUX PCM Backend DAI Links */
		{
			.name = LPASS_BE_SEC_AUXPCM_RX,
			.stream_name = "SEC AUX PCM Playback",
			.cpu_dai_name = "msm-dai-q6.12",
			.platform_name = "msm-pcm-routing",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.init = &mdm9615_ar7_sec_auxpcm_init,
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SEC_AUXPCM_RX,
			.be_hw_params_fixup = mdm9615_ar7_sec_auxpcm_be_params_fixup,
			.ops = &mdm9615_ar7_sec_auxpcm_be_ops,
		},
		{
			.name = LPASS_BE_SEC_AUXPCM_TX,
			.stream_name = "SEC AUX PCM Capture",
			.cpu_dai_name = "msm-dai-q6.13",
			.platform_name = "msm-pcm-routing",
			.codec_name = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SEC_AUXPCM_TX,
			.be_hw_params_fixup = mdm9615_ar7_sec_auxpcm_be_params_fixup,
			.ops = &mdm9615_ar7_sec_auxpcm_be_ops,
		},
		{
			.name = LPASS_BE_SEC_I2S_RX,
			.stream_name = "Secondary I2S Playback",
			.cpu_dai_name = "msm-dai-q6.4",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-rx",
			.init = &mdm9615_ar7_sec_i2s_audrx_init,
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SEC_I2S_RX,
			.be_hw_params_fixup = msm9615_i2s_rx_be_hw_params_fixup,
			.ops = &msm9615_i2s_be_ops,
		},
		{
			.name = LPASS_BE_SEC_I2S_TX,
			.stream_name = "Secondary I2S Capture",
			.cpu_dai_name = "msm-dai-q6.5",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "msm-stub-codec.1",
			.codec_dai_name = "msm-stub-tx",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SEC_I2S_TX,
			.be_hw_params_fixup = msm9615_i2s_tx_be_hw_params_fixup,
			.ops = &msm9615_i2s_be_ops,
		},

		/* Backend SlimBus DAI Links */
	/* SWISTART */
	#if !defined(CONFIG_SIERRA_INTERNAL_CODEC) && !defined(CONFIG_SIERRA_EXTERNAL_CODEC)
	{
			.name = LPASS_BE_SLIMBUS_0_RX,
			.stream_name = "Slimbus Playback",
			.cpu_dai_name = "msm-dai-q6.16384",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "tabla_codec",
			.codec_dai_name	= "tabla_rx1",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SLIMBUS_0_RX,
			.init = &mdm9615_audrx_init,
			.be_hw_params_fixup = mdm9615_slim_0_rx_be_hw_params_fixup,
			.ops = &mdm9615_be_ops,
		},
		{
			.name = LPASS_BE_SLIMBUS_0_TX,
			.stream_name = "Slimbus Capture",
			.cpu_dai_name = "msm-dai-q6.16385",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "tabla_codec",
			.codec_dai_name	= "tabla_tx1",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SLIMBUS_0_TX,
			.be_hw_params_fixup = mdm9615_slim_0_tx_be_hw_params_fixup,
			.ops = &mdm9615_be_ops,
		},
	#else
	#ifdef CONFIG_WCD9310_CODEC
	{
	       .name = LPASS_BE_SLIMBUS_0_RX,
	       .stream_name = "Slimbus Playback",
	       .cpu_dai_name = "msm-dai-q6.16384",
	       .platform_name = "msm-pcm-routing",
	       .codec_name     = "tabla_codec",
	       .codec_dai_name = "tabla_rx1",
	       .no_pcm = 1,
	       .be_id = MSM_BACKEND_DAI_SLIMBUS_0_RX,
	       .init = &mdm9615_audrx_init,
	       .be_hw_params_fixup = mdm9615_slim_0_rx_be_hw_params_fixup,
	       .ops = &mdm9615_be_ops,
	   },
	   {
	       .name = LPASS_BE_SLIMBUS_0_TX,
	       .stream_name = "Slimbus Capture",
	       .cpu_dai_name = "msm-dai-q6.16385",
	       .platform_name = "msm-pcm-routing",
	       .codec_name     = "tabla_codec",
	       .codec_dai_name = "tabla_tx1",
	       .no_pcm = 1,
	       .be_id = MSM_BACKEND_DAI_SLIMBUS_0_TX,
	       .be_hw_params_fixup = mdm9615_slim_0_tx_be_hw_params_fixup,
	       .ops = &mdm9615_be_ops,
	   },
	#elif defined(CONFIG_WCD9304_CODEC)
		{
			.name = LPASS_BE_SLIMBUS_0_RX,
			.stream_name = "Slimbus Playback",
			.cpu_dai_name = "msm-dai-q6.16384",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "sitar_codec",
			.codec_dai_name	= "sitar_rx1",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SLIMBUS_0_RX,
			.init = &mdm9615_audrx_init,
			.be_hw_params_fixup = mdm9615_slim_0_rx_be_hw_params_fixup,
			.ops = &mdm9615_be_ops,
		},
		{
			.name = LPASS_BE_SLIMBUS_0_TX,
			.stream_name = "Slimbus Capture",
			.cpu_dai_name = "msm-dai-q6.16385",
			.platform_name = "msm-pcm-routing",
			.codec_name     = "sitar_codec",
			.codec_dai_name	= "sitar_tx1",
			.no_pcm = 1,
			.be_id = MSM_BACKEND_DAI_SLIMBUS_0_TX,
			.be_hw_params_fixup = mdm9615_slim_0_tx_be_hw_params_fixup,
			.ops = &mdm9615_be_ops,
		},
	#endif
	#endif
	/* SWISTOP */
	};