ALSA声卡驱动的DAPM(一)-DPAM详解
最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么。所以百度了一下,百度结果是与DPAM有关。
一、DAPM简介:
DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被打开或关闭。
DAPM是基于kcontrol改进过后的相应框架,增加了相应的电源管理机制,其电源管理机制其实就是按照相应的音频路径,完美的对各种部件的电源进行控制,而且按照某种顺序进行。
kcontrol是什么?
http://blog.csdn.net/droidphone/article/details/12793293
二、DAPM的基本单位widget:
widget把kcontrol和动态电源管理进行了有机的结合,同时还具备音频路径的连结功能,一个widget可以与它相邻的widget有某种动态的连结关系。在DAPM框架中,widget用结构体snd_soc_dapm_widget来描述:
1 struct snd_soc_dapm_widget { 2 enum snd_soc_dapm_type id; //该widget的类型值,比如snd_soc_dapm_output,snd_soc_dapm_mixer等等。 3 const char *name; /* widget name */ 4 5 ...... 6 /* dapm control */ 7 int reg; /* negative reg = no direct dapm */ 8 unsigned char shift; /* bits to shift */ 9 unsigned int value; /* widget current value */ 10 unsigned int mask; /* non-shifted mask */ 11 ...... 12 13 int (*power_check)(struct snd_soc_dapm_widget *w); 14 15 int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int); 16 17 /* kcontrols that relate to this widget */ 18 int num_kcontrols; 19 const struct snd_kcontrol_new *kcontrol_news; 20 struct snd_kcontrol **kcontrols; 21 22 /* widget input and outputs */ 23 struct list_head sources; 24 struct list_head sinks; 25 ...... 26 };
2.1 widget的种类:
在DAPM框架中,把各种不同的widget划分为不同的种类,snd_soc_dapm_widget结构中的id字段用来表示该widget的种类,可选的种类都定义在一个枚举中:
1 enum snd_soc_dapm_type {......}
下面我们逐个解释一下这些widget的种类:
1 snd_soc_dapm_input 该widget对应一个输入引脚。 2 snd_soc_dapm_output 该widget对应一个输出引脚。 3 snd_soc_dapm_mux 该widget对应一个mux控件。 4 snd_soc_dapm_virt_mux 该widget对应一个虚拟的mux控件。 5 snd_soc_dapm_value_mux 该widget对应一个value类型的mux控件。 6 snd_soc_dapm_mixer 该widget对应一个mixer控件。 7 snd_soc_dapm_mixer_named_ctl 该widget对应一个mixer控件,但是对应的kcontrol的名字不会加入widget的名字作为前缀。 8 snd_soc_dapm_pga 该widget对应一个pga控件(可编程增益控件)。 9 snd_soc_dapm_out_drv 该widget对应一个输出驱动控件 10 snd_soc_dapm_adc 该widget对应一个ADC 11 snd_soc_dapm_dac 该widget对应一个DAC 12 snd_soc_dapm_micbias 该widget对应一个麦克风偏置电压控件 13 snd_soc_dapm_mic 该widget对应一个麦克风。 14 snd_soc_dapm_hp 该widget对应一个耳机。 15 snd_soc_dapm_spk 该widget对应一个扬声器。 16 snd_soc_dapm_line 该widget对应一个线路输入。 17 snd_soc_dapm_switch 该widget对应一个模拟开关。 18 snd_soc_dapm_vmid 该widget对应一个codec的vmid偏置电压。 19 snd_soc_dapm_pre machine级别的专用widget,会先于其它widget执行检查操作。 20 snd_soc_dapm_post machine级别的专用widget,会后于其它widget执行检查操作。 21 snd_soc_dapm_supply 对应一个电源或是时钟源。 22 snd_soc_dapm_regulator_supply 对应一个外部regulator稳压器。 23 snd_soc_dapm_clock_supply 对应一个外部时钟源。 24 snd_soc_dapm_aif_in 对应一个数字音频输入接口,比如I2S接口的输入端。 25 snd_soc_dapm_aif_out 对应一个数字音频输出接口,比如I2S接口的输出端。 26 snd_soc_dapm_siggen 对应一个信号发生器。 27 snd_soc_dapm_dai_in 对应一个platform或codec域的输入DAI结构。 28 snd_soc_dapm_dai_out 对应一个platform或codec域的输出DAI结构。 29 snd_soc_dapm_dai_link 用于链接一对输入/输出DAI结构。
2.2 widget之间的连接器path:
DAPM为我们提出了path这一概念,path相当于电路中的一根跳线,它把一个widget的输出端和另一个widget的输入端连接在一起,path用snd_soc_dapm_path结构来描述:
1 /* dapm audio path between two widgets */ 2 struct snd_soc_dapm_path { 3 const char *name; 4 const char *long_name; 5 6 /* source (input) and sink (output) widgets */ 7 struct snd_soc_dapm_widget *source; 8 struct snd_soc_dapm_widget *sink; 9 struct snd_kcontrol *kcontrol; 10 11 /* status */ 12 u32 connect:1; /* source and sink widgets are connected */ 13 u32 walked:1; /* path has been walked */ 14 u32 walking:1; /* path is in the process of being walked */ 15 u32 weak:1; /* path ignored for power management */ 16 17 int (*connected)(struct snd_soc_dapm_widget *source, 18 struct snd_soc_dapm_widget *sink); 19 20 struct list_head list_source; 21 struct list_head list_sink; 22 struct list_head list; 23 };
path与widget的关系如下图:
2.3 widget的连接关系route:
1 struct snd_soc_dapm_route { 2 const char *sink; 3 const char *control; 4 const char *source; 5 int (*connected)(struct snd_soc_dapm_widget *source, 6 struct snd_soc_dapm_widget *sink); 7 };
sink指向到达端widget的名字字符串,source指向起始端widget的名字字符串,control指向负责控制该连接所对应的kcontrol名字字符串,connected回调则定义了上一节所提到的自定义连接检查回调函数。该结构的意义很明显就是:source通过一个kcontrol,和sink连接在一起,现在是否处于连接状态,请调用connected回调函数检查。
2.4 如何定义各种widget:
和普通的kcontrol一样,DAPM框架为我们提供了大量的辅助宏用来定义各种各样的widget控件,这些宏定义根据widget的类型,按照它们的电源所在的域,被分为了几个域,他们分别是:
- codec域 比如VREF和VMID等提供参考电压的widget,这些widget通常在codec的probe/remove回调中进行控制,当然,在工作中如果没有音频流时,也可以适当地进行控制它们的开启与关闭。
- platform域 位于该域上的widget通常是针对平台或板子的一些需要物理连接的输入/输出接口,例如耳机、扬声器、麦克风,因为这些接口在每块板子上都可能不一样,所以通常它们是在machine驱动中进行定义和控制,并且也可以由用户空间的应用程序通过某种方式来控制它们的打开和关闭。
- 音频路径域 一般是指codec内部的mixer、mux等控制音频路径的widget,这些widget可以根据用户空间的设定连接关系,自动设定他们的电源状态。
- 音频数据流域 是指那些需要处理音频数据流的widget,例如ADC、DAC等等。
codec域widget的定义
目前,DAPM框架只提供了定义一个codec域widget的辅助宏:
1 #define SND_SOC_DAPM_VMID(wname) \ 2 { .id = snd_soc_dapm_vmid, .name = wname, .kcontrol_news = NULL, \ 3 .num_kcontrols = 0}
platform域widget的定义
DAPM框架为我们提供了多种platform域widget的辅助定义宏:
1 #define SND_SOC_DAPM_SIGGEN(wname) \ 2 { .id = snd_soc_dapm_siggen, .name = wname, .kcontrol_news = NULL, \ 3 .num_kcontrols = 0, .reg = SND_SOC_NOPM } 4 #define SND_SOC_DAPM_INPUT(wname) \ 5 { .id = snd_soc_dapm_input, .name = wname, .kcontrol_news = NULL, \ 6 .num_kcontrols = 0, .reg = SND_SOC_NOPM } 7 #define SND_SOC_DAPM_OUTPUT(wname) \ 8 { .id = snd_soc_dapm_output, .name = wname, .kcontrol_news = NULL, \ 9 .num_kcontrols = 0, .reg = SND_SOC_NOPM } 10 #define SND_SOC_DAPM_MIC(wname, wevent) \ 11 { .id = snd_soc_dapm_mic, .name = wname, .kcontrol_news = NULL, \ 12 .num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \ 13 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} 14 #define SND_SOC_DAPM_HP(wname, wevent) \ 15 { .id = snd_soc_dapm_hp, .name = wname, .kcontrol_news = NULL, \ 16 .num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \ 17 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD} 18 #define SND_SOC_DAPM_SPK(wname, wevent) \ 19 { .id = snd_soc_dapm_spk, .name = wname, .kcontrol_news = NULL, \ 20 .num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \ 21 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD} 22 #define SND_SOC_DAPM_LINE(wname, wevent) \ 23 { .id = snd_soc_dapm_line, .name = wname, .kcontrol_news = NULL, \ 24 .num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \ 25 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
音频路径(path)域widget的定义
这种widget通常是对普通kcontrols控件的再封装,增加音频路径和电源管理功能,所以这种widget会包含一个或多个kcontrol。
1 #define SND_SOC_DAPM_PGA(wname, wreg, wshift, winvert,\ 2 wcontrols, wncontrols) \ 3 { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ 4 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} 5 #define SND_SOC_DAPM_OUT_DRV(wname, wreg, wshift, winvert,\ 6 wcontrols, wncontrols) \ 7 { .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \ 8 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} 9 #define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \ 10 wcontrols, wncontrols)\ 11 { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ 12 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} 13 #define SND_SOC_DAPM_MIXER_NAMED_CTL(wname, wreg, wshift, winvert, \ 14 wcontrols, wncontrols)\ 15 { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \ 16 .shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \ 17 .num_kcontrols = wncontrols} 18 #define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \ 19 { .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ 20 .invert = winvert, .kcontrol_news = NULL, .num_kcontrols = 0} 21 #define SND_SOC_DAPM_SWITCH(wname, wreg, wshift, winvert, wcontrols) \ 22 { .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \ 23 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1} 24 #define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \ 25 { .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \ 26 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1} 27 #define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \ 28 { .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \ 29 .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1} 30 #define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \ 31 { .id = snd_soc_dapm_value_mux, .name = wname, .reg = wreg, \ 32 .shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \ 33 .num_kcontrols = 1}
音频数据流(stream)域widget的定义
这些widget主要包含音频输入/输出接口,ADC/DAC等等:
1 #define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \ 2 { .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \ 3 .reg = wreg, .shift = wshift, .invert = winvert } 4 #define SND_SOC_DAPM_AIF_IN_E(wname, stname, wslot, wreg, wshift, winvert, \ 5 wevent, wflags) \ 6 { .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \ 7 .reg = wreg, .shift = wshift, .invert = winvert, \ 8 .event = wevent, .event_flags = wflags } 9 #define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \ 10 { .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \ 11 .reg = wreg, .shift = wshift, .invert = winvert } 12 #define SND_SOC_DAPM_AIF_OUT_E(wname, stname, wslot, wreg, wshift, winvert, \ 13 wevent, wflags) \ 14 { .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \ 15 .reg = wreg, .shift = wshift, .invert = winvert, \ 16 .event = wevent, .event_flags = wflags } 17 #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ 18 { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ 19 .shift = wshift, .invert = winvert} 20 #define SND_SOC_DAPM_DAC_E(wname, stname, wreg, wshift, winvert, \ 21 wevent, wflags) \ 22 { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ 23 .shift = wshift, .invert = winvert, \ 24 .event = wevent, .event_flags = wflags} 25 #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ 26 { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ 27 .shift = wshift, .invert = winvert} 28 #define SND_SOC_DAPM_ADC_E(wname, stname, wreg, wshift, winvert, \ 29 wevent, wflags) \ 30 { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ 31 .shift = wshift, .invert = winvert, \ 32 .event = wevent, .event_flags = wflags} 33 #define SND_SOC_DAPM_CLOCK_SUPPLY(wname) \ 34 { .id = snd_soc_dapm_clock_supply, .name = wname, \ 35 .reg = SND_SOC_NOPM, .event = dapm_clock_event, \ 36 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
2.5 dapm kcontrol:
dapm kcontrol是widget的开关,info函数是显示widget的函数,put是设置,get是获取;
三、建立widget和route:
以我们打开音频tinymix ‘PRI_MI2S_RX Audio Mixer MultiMedia1’ 1 为例子来了解整个过程:
3.1 利用辅助宏定义widget所需要的dapm kcontrol:
1 static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = { 2 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_MI2S_RX , 3 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, 4 msm_routing_put_audio_mixer), 5 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_MI2S_RX, 6 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer, 7 msm_routing_put_audio_mixer), 8 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_MI2S_RX, 9 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer, 10 msm_routing_put_audio_mixer), 11 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_MI2S_RX, 12 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer, 13 msm_routing_put_audio_mixer), 14 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_MI2S_RX, 15 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer, 16 msm_routing_put_audio_mixer), 17 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_MI2S_RX, 18 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer, 19 msm_routing_put_audio_mixer), 20 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_MI2S_RX, 21 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer, 22 msm_routing_put_audio_mixer), 23 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_MI2S_RX, 24 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer, 25 msm_routing_put_audio_mixer), 26 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_MI2S_RX, 27 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer, 28 msm_routing_put_audio_mixer), 29 };
1 static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { 2 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, 3 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, 4 msm_routing_put_port_mixer), 5 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, 6 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, 7 msm_routing_put_port_mixer), 8 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, 9 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer, 10 msm_routing_put_port_mixer), 11 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, 12 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, 13 msm_routing_put_port_mixer), 14 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, 15 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer, 16 msm_routing_put_port_mixer), 17 };
以上我们定义了prior通道的控件和MultiMedia1数据流通道;
3.2 定义真正的widget,包含第一步定义好的dapm控件:
1 static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 2 /* Frontend AIF */ 3 /* Widget name equals to Front-End DAI name<Need confirmation>, 4 * Stream name must contains substring of front-end dai name 5 */ 6 SND_SOC_DAPM_AIF_IN("MM_DL1", "MultiMedia1 Playback", 0, 0, 0, 0), 7 SND_SOC_DAPM_AIF_IN("MM_DL2", "MultiMedia2 Playback", 0, 0, 0, 0), 8 SND_SOC_DAPM_AIF_IN("MM_DL3", "MultiMedia3 Playback", 0, 0, 0, 0), 9 SND_SOC_DAPM_AIF_IN("MM_DL4", "MultiMedia4 Playback", 0, 0, 0, 0), 10 SND_SOC_DAPM_AIF_IN("MM_DL5", "MultiMedia5 Playback", 0, 0, 0, 0), 11 SND_SOC_DAPM_AIF_IN("MM_DL6", "MultiMedia6 Playback", 0, 0, 0, 0), 12 SND_SOC_DAPM_AIF_IN("MM_DL7", "MultiMedia7 Playback", 0, 0, 0, 0), 13 SND_SOC_DAPM_AIF_IN("MM_DL8", "MultiMedia8 Playback", 0, 0, 0, 0), 14 SND_SOC_DAPM_AIF_IN("MM_DL9", "MultiMedia9 Playback", 0, 0, 0, 0), 15 SND_SOC_DAPM_AIF_IN("VOIP_DL", "VoIP Playback", 0, 0, 0, 0), 16 SND_SOC_DAPM_AIF_OUT("MM_UL1", "MultiMedia1 Capture", 0, 0, 0, 0), 17 SND_SOC_DAPM_AIF_OUT("MM_UL2", "MultiMedia2 Capture", 0, 0, 0, 0), 18 SND_SOC_DAPM_AIF_OUT("MM_UL4", "MultiMedia4 Capture", 0, 0, 0, 0), 19 SND_SOC_DAPM_AIF_OUT("MM_UL5", "MultiMedia5 Capture", 0, 0, 0, 0), 20 SND_SOC_DAPM_AIF_OUT("MM_UL6", "MultiMedia6 Capture", 0, 0, 0, 0), 21 SND_SOC_DAPM_AIF_OUT("MM_UL8", "MultiMedia8 Capture", 0, 0, 0, 0), 22 SND_SOC_DAPM_AIF_OUT("MM_UL9", "MultiMedia9 Capture", 0, 0, 0, 0), 23 SND_SOC_DAPM_AIF_IN("CS-VOICE_DL1", "CS-VOICE Playback", 0, 0, 0, 0), 24 SND_SOC_DAPM_AIF_OUT("CS-VOICE_UL1", "CS-VOICE Capture", 0, 0, 0, 0), 25 SND_SOC_DAPM_AIF_IN("VOICE2_DL", "Voice2 Playback", 0, 0, 0, 0), 26 SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0), 27 SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0), 28 SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0), 29 SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0), 30 SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0), 31 SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0), 32 SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback", 33 0, 0, 0, 0), 34 SND_SOC_DAPM_AIF_OUT("SLIM0_UL_HL", "SLIMBUS0_HOSTLESS Capture", 35 0, 0, 0, 0), 36 SND_SOC_DAPM_AIF_IN("SLIM1_DL_HL", "SLIMBUS1_HOSTLESS Playback", 37 0, 0, 0, 0), 38 SND_SOC_DAPM_AIF_OUT("SLIM1_UL_HL", "SLIMBUS1_HOSTLESS Capture", 39 0, 0, 0, 0), 40 SND_SOC_DAPM_AIF_IN("SLIM3_DL_HL", "SLIMBUS3_HOSTLESS Playback", 41 0, 0, 0, 0), 42 SND_SOC_DAPM_AIF_OUT("SLIM3_UL_HL", "SLIMBUS3_HOSTLESS Capture", 43 0, 0, 0, 0), 44 SND_SOC_DAPM_AIF_IN("SLIM4_DL_HL", "SLIMBUS4_HOSTLESS Playback", 45 0, 0, 0, 0), 46 SND_SOC_DAPM_AIF_OUT("SLIM4_UL_HL", "SLIMBUS4_HOSTLESS Capture", 47 0, 0, 0, 0), 48 SND_SOC_DAPM_AIF_IN("INTFM_DL_HL", "INT_FM_HOSTLESS Playback", 49 0, 0, 0, 0), 50 SND_SOC_DAPM_AIF_OUT("INTFM_UL_HL", "INT_FM_HOSTLESS Capture", 51 0, 0, 0, 0), 52 SND_SOC_DAPM_AIF_IN("INTHFP_DL_HL", "INT_HFP_BT_HOSTLESS Playback", 53 0, 0, 0, 0), 54 SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture", 55 0, 0, 0, 0), 56 SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0), 57 SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback", 58 0, 0, 0, 0), 59 SND_SOC_DAPM_AIF_IN("PRI_MI2S_DL_HL", 60 "Primary MI2S_RX Hostless Playback", 61 0, 0, 0, 0), 62 SND_SOC_DAPM_AIF_IN("SEC_MI2S_DL_HL", 63 "Secondary MI2S_RX Hostless Playback", 64 0, 0, 0, 0), 65 66 SND_SOC_DAPM_AIF_IN("AUXPCM_DL_HL", "AUXPCM_HOSTLESS Playback", 67 0, 0, 0, 0), 68 SND_SOC_DAPM_AIF_OUT("AUXPCM_UL_HL", "AUXPCM_HOSTLESS Capture", 69 0, 0, 0, 0), 70 SND_SOC_DAPM_AIF_OUT("MI2S_UL_HL", "MI2S_TX_HOSTLESS Capture", 71 0, 0, 0, 0), 72 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_UL_HL", 73 "Tertiary MI2S_TX Hostless Capture", 74 0, 0, 0, 0), 75 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_UL_HL", 76 "Primary MI2S_TX Hostless Capture", 77 0, 0, 0, 0), 78 SND_SOC_DAPM_AIF_OUT("MI2S_DL_HL", "MI2S_RX_HOSTLESS Playback", 79 0, 0, 0, 0), 80 SND_SOC_DAPM_AIF_IN("DTMF_DL_HL", "DTMF_RX_HOSTLESS Playback", 81 0, 0, 0, 0), 82 /* LSM */ 83 SND_SOC_DAPM_AIF_OUT("LSM1_UL_HL", "Listen 1 Audio Service Capture", 84 0, 0, 0, 0), 85 SND_SOC_DAPM_AIF_OUT("LSM2_UL_HL", "Listen 2 Audio Service Capture", 86 0, 0, 0, 0), 87 SND_SOC_DAPM_AIF_OUT("LSM3_UL_HL", "Listen 3 Audio Service Capture", 88 0, 0, 0, 0), 89 SND_SOC_DAPM_AIF_OUT("LSM4_UL_HL", "Listen 4 Audio Service Capture", 90 0, 0, 0, 0), 91 SND_SOC_DAPM_AIF_OUT("LSM5_UL_HL", "Listen 5 Audio Service Capture", 92 0, 0, 0, 0), 93 SND_SOC_DAPM_AIF_OUT("LSM6_UL_HL", "Listen 6 Audio Service Capture", 94 0, 0, 0, 0), 95 SND_SOC_DAPM_AIF_OUT("LSM7_UL_HL", "Listen 7 Audio Service Capture", 96 0, 0, 0, 0), 97 SND_SOC_DAPM_AIF_OUT("LSM8_UL_HL", "Listen 8 Audio Service Capture", 98 0, 0, 0, 0), 99 SND_SOC_DAPM_AIF_IN("QCHAT_DL", "QCHAT Playback", 0, 0, 0, 0), 100 SND_SOC_DAPM_AIF_OUT("QCHAT_UL", "QCHAT Capture", 0, 0, 0, 0), 101 /* Backend AIF */ 102 /* Stream name equals to backend dai link stream name 103 */ 104 SND_SOC_DAPM_AIF_OUT("PRI_I2S_RX", "Primary I2S Playback", 0, 0, 0, 0), 105 SND_SOC_DAPM_AIF_OUT("SEC_I2S_RX", "Secondary I2S Playback", 106 0, 0, 0 , 0), 107 SND_SOC_DAPM_AIF_OUT("SPDIF_RX", "SPDIF Playback", 0, 0, 0 , 0), 108 SND_SOC_DAPM_AIF_OUT("SLIMBUS_0_RX", "Slimbus Playback", 0, 0, 0, 0), 109 SND_SOC_DAPM_AIF_OUT("HDMI", "HDMI Playback", 0, 0, 0 , 0), 110 SND_SOC_DAPM_AIF_OUT("MI2S_RX", "MI2S Playback", 0, 0, 0, 0), 111 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_RX", "Quaternary MI2S Playback", 112 0, 0, 0, 0), 113 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_RX", "Tertiary MI2S Playback", 114 0, 0, 0, 0), 115 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX", "Secondary MI2S Playback", 116 0, 0, 0, 0), 117 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX_SD1", 118 "Secondary MI2S Playback SD1", 119 0, 0, 0, 0), 120 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback", 121 0, 0, 0, 0), 122 SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0), 123 SND_SOC_DAPM_AIF_IN("MI2S_TX", "MI2S Capture", 0, 0, 0, 0), 124 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_TX", "Quaternary MI2S Capture", 125 0, 0, 0, 0), 126 SND_SOC_DAPM_AIF_IN("PRI_MI2S_TX", "Primary MI2S Capture", 127 0, 0, 0, 0), 128 SND_SOC_DAPM_AIF_IN("TERT_MI2S_TX", "Tertiary MI2S Capture", 129 0, 0, 0, 0), 130 SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture", 131 0, 0, 0, 0), 132 SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0), 133 SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback", 134 0, 0, 0 , 0), 135 SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture", 136 0, 0, 0, 0), 137 SND_SOC_DAPM_AIF_OUT("INT_FM_RX", "Internal FM Playback", 138 0, 0, 0 , 0), 139 SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture", 140 0, 0, 0, 0), 141 SND_SOC_DAPM_AIF_OUT("PCM_RX", "AFE Playback", 142 0, 0, 0 , 0), 143 SND_SOC_DAPM_AIF_IN("PCM_TX", "AFE Capture", 144 0, 0, 0 , 0), 145 /* incall */ 146 SND_SOC_DAPM_AIF_OUT("VOICE_PLAYBACK_TX", "Voice Farend Playback", 147 0, 0, 0 , 0), 148 SND_SOC_DAPM_AIF_OUT("VOICE2_PLAYBACK_TX", "Voice2 Farend Playback", 149 0, 0, 0 , 0), 150 SND_SOC_DAPM_AIF_OUT("SLIMBUS_4_RX", "Slimbus4 Playback", 151 0, 0, 0 , 0), 152 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_TX", "Voice Uplink Capture", 153 0, 0, 0, 0), 154 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_RX", "Voice Downlink Capture", 155 0, 0, 0, 0), 156 SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture", 157 0, 0, 0, 0), 158 SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0), 159 160 SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0), 161 SND_SOC_DAPM_AIF_IN("AUX_PCM_TX", "AUX PCM Capture", 0, 0, 0, 0), 162 SND_SOC_DAPM_AIF_OUT("SEC_AUX_PCM_RX", "Sec AUX PCM Playback", 163 0, 0, 0, 0), 164 SND_SOC_DAPM_AIF_IN("SEC_AUX_PCM_TX", "Sec AUX PCM Capture", 165 0, 0, 0, 0), 166 SND_SOC_DAPM_AIF_IN("VOICE_STUB_DL", "VOICE_STUB Playback", 0, 0, 0, 0), 167 SND_SOC_DAPM_AIF_OUT("VOICE_STUB_UL", "VOICE_STUB Capture", 0, 0, 0, 0), 168 SND_SOC_DAPM_AIF_IN("VOICE2_STUB_DL", "VOICE2_STUB Playback", 169 0, 0, 0, 0), 170 SND_SOC_DAPM_AIF_OUT("VOICE2_STUB_UL", "VOICE2_STUB Capture", 171 0, 0, 0, 0), 172 SND_SOC_DAPM_AIF_IN("VOLTE_STUB_DL", "VOLTE_STUB Playback", 0, 0, 0, 0), 173 SND_SOC_DAPM_AIF_OUT("VOLTE_STUB_UL", "VOLTE_STUB Capture", 0, 0, 0, 0), 174 SND_SOC_DAPM_AIF_OUT("STUB_RX", "Stub Playback", 0, 0, 0, 0), 175 SND_SOC_DAPM_AIF_IN("STUB_TX", "Stub Capture", 0, 0, 0, 0), 176 SND_SOC_DAPM_AIF_OUT("SLIMBUS_1_RX", "Slimbus1 Playback", 0, 0, 0, 0), 177 SND_SOC_DAPM_AIF_IN("SLIMBUS_1_TX", "Slimbus1 Capture", 0, 0, 0, 0), 178 SND_SOC_DAPM_AIF_IN("STUB_1_TX", "Stub1 Capture", 0, 0, 0, 0), 179 SND_SOC_DAPM_AIF_OUT("SLIMBUS_3_RX", "Slimbus3 Playback", 0, 0, 0, 0), 180 SND_SOC_DAPM_AIF_IN("SLIMBUS_3_TX", "Slimbus3 Capture", 0, 0, 0, 0), 181 /* In- call recording */ 182 SND_SOC_DAPM_AIF_OUT("SLIMBUS_6_RX", "Slimbus6 Playback", 0, 0, 0 , 0), 183 SND_SOC_DAPM_AIF_IN("SLIMBUS_6_TX", "Slimbus6 Capture", 0, 0, 0, 0), 184 185 /* Switch Definitions */ 186 SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0, 187 &slim_fm_switch_mixer_controls), 188 SND_SOC_DAPM_SWITCH("SLIMBUS1_DL_HL", SND_SOC_NOPM, 0, 0, 189 &slim1_fm_switch_mixer_controls), 190 SND_SOC_DAPM_SWITCH("SLIMBUS3_DL_HL", SND_SOC_NOPM, 0, 0, 191 &slim3_fm_switch_mixer_controls), 192 SND_SOC_DAPM_SWITCH("SLIMBUS4_DL_HL", SND_SOC_NOPM, 0, 0, 193 &slim4_fm_switch_mixer_controls), 194 SND_SOC_DAPM_SWITCH("PCM_RX_DL_HL", SND_SOC_NOPM, 0, 0, 195 &pcm_rx_switch_mixer_controls), 196 SND_SOC_DAPM_SWITCH("PRI_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0, 197 &pri_mi2s_rx_switch_mixer_controls), 198 199 /* Mux Definitions */ 200 SND_SOC_DAPM_MUX("LSM1 MUX", SND_SOC_NOPM, 0, 0, &lsm1_mux), 201 SND_SOC_DAPM_MUX("LSM2 MUX", SND_SOC_NOPM, 0, 0, &lsm2_mux), 202 SND_SOC_DAPM_MUX("LSM3 MUX", SND_SOC_NOPM, 0, 0, &lsm3_mux), 203 SND_SOC_DAPM_MUX("LSM4 MUX", SND_SOC_NOPM, 0, 0, &lsm4_mux), 204 SND_SOC_DAPM_MUX("LSM5 MUX", SND_SOC_NOPM, 0, 0, &lsm5_mux), 205 SND_SOC_DAPM_MUX("LSM6 MUX", SND_SOC_NOPM, 0, 0, &lsm6_mux), 206 SND_SOC_DAPM_MUX("LSM7 MUX", SND_SOC_NOPM, 0, 0, &lsm7_mux), 207 SND_SOC_DAPM_MUX("LSM8 MUX", SND_SOC_NOPM, 0, 0, &lsm8_mux), 208 SND_SOC_DAPM_MUX("SLIM_0_RX AANC MUX", SND_SOC_NOPM, 0, 0, 209 aanc_slim_0_rx_mux), 210 211 /* Mixer definitions */ 212 SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 213 pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)), 214 SND_SOC_DAPM_MIXER("SEC_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 215 sec_i2s_rx_mixer_controls, ARRAY_SIZE(sec_i2s_rx_mixer_controls)), 216 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 217 slimbus_rx_mixer_controls, ARRAY_SIZE(slimbus_rx_mixer_controls)), 218 SND_SOC_DAPM_MIXER("HDMI Mixer", SND_SOC_NOPM, 0, 0, 219 hdmi_mixer_controls, ARRAY_SIZE(hdmi_mixer_controls)), 220 SND_SOC_DAPM_MIXER("SPDIF_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 221 spdif_rx_mixer_controls, ARRAY_SIZE(spdif_rx_mixer_controls)), 222 SND_SOC_DAPM_MIXER("MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 223 mi2s_rx_mixer_controls, ARRAY_SIZE(mi2s_rx_mixer_controls)), 224 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 225 quaternary_mi2s_rx_mixer_controls, 226 ARRAY_SIZE(quaternary_mi2s_rx_mixer_controls)), 227 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 228 tertiary_mi2s_rx_mixer_controls, 229 ARRAY_SIZE(tertiary_mi2s_rx_mixer_controls)), 230 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 231 secondary_mi2s_rx_mixer_controls, 232 ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)), 233 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_SD1 Audio Mixer", SND_SOC_NOPM, 0, 0, 234 secondary_mi2s_rx2_mixer_controls, 235 ARRAY_SIZE(secondary_mi2s_rx2_mixer_controls)), 236 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, 237 mi2s_hl_mixer_controls, 238 ARRAY_SIZE(mi2s_hl_mixer_controls)), 239 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 240 primary_mi2s_rx_mixer_controls, 241 ARRAY_SIZE(primary_mi2s_rx_mixer_controls)), 242 SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0, 243 mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)), 244 SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0, 245 mmul2_mixer_controls, ARRAY_SIZE(mmul2_mixer_controls)), 246 SND_SOC_DAPM_MIXER("MultiMedia4 Mixer", SND_SOC_NOPM, 0, 0, 247 mmul4_mixer_controls, ARRAY_SIZE(mmul4_mixer_controls)), 248 SND_SOC_DAPM_MIXER("MultiMedia5 Mixer", SND_SOC_NOPM, 0, 0, 249 mmul5_mixer_controls, ARRAY_SIZE(mmul5_mixer_controls)), 250 SND_SOC_DAPM_MIXER("MultiMedia6 Mixer", SND_SOC_NOPM, 0, 0, 251 mmul6_mixer_controls, ARRAY_SIZE(mmul6_mixer_controls)), 252 SND_SOC_DAPM_MIXER("MultiMedia8 Mixer", SND_SOC_NOPM, 0, 0, 253 mmul8_mixer_controls, ARRAY_SIZE(mmul8_mixer_controls)), 254 SND_SOC_DAPM_MIXER("AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 255 auxpcm_rx_mixer_controls, ARRAY_SIZE(auxpcm_rx_mixer_controls)), 256 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 257 sec_auxpcm_rx_mixer_controls, ARRAY_SIZE(sec_auxpcm_rx_mixer_controls)), 258 /* incall */ 259 SND_SOC_DAPM_MIXER("Incall_Music Audio Mixer", SND_SOC_NOPM, 0, 0, 260 incall_music_delivery_mixer_controls, 261 ARRAY_SIZE(incall_music_delivery_mixer_controls)), 262 SND_SOC_DAPM_MIXER("Incall_Music_2 Audio Mixer", SND_SOC_NOPM, 0, 0, 263 incall_music2_delivery_mixer_controls, 264 ARRAY_SIZE(incall_music2_delivery_mixer_controls)), 265 SND_SOC_DAPM_MIXER("SLIMBUS_4_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 266 slimbus_4_rx_mixer_controls, 267 ARRAY_SIZE(slimbus_4_rx_mixer_controls)), 268 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 269 slimbus_6_rx_mixer_controls, 270 ARRAY_SIZE(slimbus_6_rx_mixer_controls)), 271 /* Voice Mixer */ 272 SND_SOC_DAPM_MIXER("PRI_RX_Voice Mixer", 273 SND_SOC_NOPM, 0, 0, pri_rx_voice_mixer_controls, 274 ARRAY_SIZE(pri_rx_voice_mixer_controls)), 275 SND_SOC_DAPM_MIXER("SEC_RX_Voice Mixer", 276 SND_SOC_NOPM, 0, 0, 277 sec_i2s_rx_voice_mixer_controls, 278 ARRAY_SIZE(sec_i2s_rx_voice_mixer_controls)), 279 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_Voice Mixer", 280 SND_SOC_NOPM, 0, 0, 281 sec_mi2s_rx_voice_mixer_controls, 282 ARRAY_SIZE(sec_mi2s_rx_voice_mixer_controls)), 283 SND_SOC_DAPM_MIXER("SLIM_0_RX_Voice Mixer", 284 SND_SOC_NOPM, 0, 0, 285 slimbus_rx_voice_mixer_controls, 286 ARRAY_SIZE(slimbus_rx_voice_mixer_controls)), 287 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX_Voice Mixer", 288 SND_SOC_NOPM, 0, 0, 289 bt_sco_rx_voice_mixer_controls, 290 ARRAY_SIZE(bt_sco_rx_voice_mixer_controls)), 291 SND_SOC_DAPM_MIXER("AFE_PCM_RX_Voice Mixer", 292 SND_SOC_NOPM, 0, 0, 293 afe_pcm_rx_voice_mixer_controls, 294 ARRAY_SIZE(afe_pcm_rx_voice_mixer_controls)), 295 SND_SOC_DAPM_MIXER("AUX_PCM_RX_Voice Mixer", 296 SND_SOC_NOPM, 0, 0, 297 aux_pcm_rx_voice_mixer_controls, 298 ARRAY_SIZE(aux_pcm_rx_voice_mixer_controls)), 299 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX_Voice Mixer", 300 SND_SOC_NOPM, 0, 0, 301 sec_aux_pcm_rx_voice_mixer_controls, 302 ARRAY_SIZE(sec_aux_pcm_rx_voice_mixer_controls)), 303 SND_SOC_DAPM_MIXER("HDMI_RX_Voice Mixer", 304 SND_SOC_NOPM, 0, 0, 305 hdmi_rx_voice_mixer_controls, 306 ARRAY_SIZE(hdmi_rx_voice_mixer_controls)), 307 SND_SOC_DAPM_MIXER("MI2S_RX_Voice Mixer", 308 SND_SOC_NOPM, 0, 0, 309 mi2s_rx_voice_mixer_controls, 310 ARRAY_SIZE(mi2s_rx_voice_mixer_controls)), 311 SND_SOC_DAPM_MIXER("PRI_MI2S_RX_Voice Mixer", 312 SND_SOC_NOPM, 0, 0, 313 pri_mi2s_rx_voice_mixer_controls, 314 ARRAY_SIZE(pri_mi2s_rx_voice_mixer_controls)), 315 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX_Voice Mixer", 316 SND_SOC_NOPM, 0, 0, 317 quat_mi2s_rx_voice_mixer_controls, 318 ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)), 319 SND_SOC_DAPM_MIXER("Voice_Tx Mixer", 320 SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls, 321 ARRAY_SIZE(tx_voice_mixer_controls)), 322 SND_SOC_DAPM_MIXER("Voice2_Tx Mixer", 323 SND_SOC_NOPM, 0, 0, tx_voice2_mixer_controls, 324 ARRAY_SIZE(tx_voice2_mixer_controls)), 325 SND_SOC_DAPM_MIXER("Voip_Tx Mixer", 326 SND_SOC_NOPM, 0, 0, tx_voip_mixer_controls, 327 ARRAY_SIZE(tx_voip_mixer_controls)), 328 SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer", 329 SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls, 330 ARRAY_SIZE(tx_volte_mixer_controls)), 331 SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer", 332 SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls, 333 ARRAY_SIZE(tx_vowlan_mixer_controls)), 334 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 335 int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)), 336 SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 337 int_fm_rx_mixer_controls, ARRAY_SIZE(int_fm_rx_mixer_controls)), 338 SND_SOC_DAPM_MIXER("AFE_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, 339 afe_pcm_rx_mixer_controls, ARRAY_SIZE(afe_pcm_rx_mixer_controls)), 340 SND_SOC_DAPM_MIXER("Voice Stub Tx Mixer", SND_SOC_NOPM, 0, 0, 341 tx_voice_stub_mixer_controls, ARRAY_SIZE(tx_voice_stub_mixer_controls)), 342 SND_SOC_DAPM_MIXER("Voice2 Stub Tx Mixer", SND_SOC_NOPM, 0, 0, 343 tx_voice2_stub_mixer_controls, 344 ARRAY_SIZE(tx_voice2_stub_mixer_controls)), 345 SND_SOC_DAPM_MIXER("VoLTE Stub Tx Mixer", SND_SOC_NOPM, 0, 0, 346 tx_volte_stub_mixer_controls, ARRAY_SIZE(tx_volte_stub_mixer_controls)), 347 SND_SOC_DAPM_MIXER("STUB_RX Mixer", SND_SOC_NOPM, 0, 0, 348 stub_rx_mixer_controls, ARRAY_SIZE(stub_rx_mixer_controls)), 349 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Mixer", SND_SOC_NOPM, 0, 0, 350 slimbus_1_rx_mixer_controls, ARRAY_SIZE(slimbus_1_rx_mixer_controls)), 351 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX_Voice Mixer", SND_SOC_NOPM, 0, 0, 352 slimbus_3_rx_mixer_controls, ARRAY_SIZE(slimbus_3_rx_mixer_controls)), 353 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Port Mixer", 354 SND_SOC_NOPM, 0, 0, sbus_0_rx_port_mixer_controls, 355 ARRAY_SIZE(sbus_0_rx_port_mixer_controls)), 356 SND_SOC_DAPM_MIXER("AUX_PCM_RX Port Mixer", 357 SND_SOC_NOPM, 0, 0, aux_pcm_rx_port_mixer_controls, 358 ARRAY_SIZE(aux_pcm_rx_port_mixer_controls)), 359 SND_SOC_DAPM_MIXER("SEC_AUXPCM_RX Port Mixer", 360 SND_SOC_NOPM, 0, 0, sec_auxpcm_rx_port_mixer_controls, 361 ARRAY_SIZE(sec_auxpcm_rx_port_mixer_controls)), 362 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Port Mixer", SND_SOC_NOPM, 0, 0, 363 sbus_1_rx_port_mixer_controls, 364 ARRAY_SIZE(sbus_1_rx_port_mixer_controls)), 365 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Port Mixer", SND_SOC_NOPM, 0, 0, 366 bt_sco_rx_port_mixer_controls, 367 ARRAY_SIZE(bt_sco_rx_port_mixer_controls)), 368 SND_SOC_DAPM_MIXER("AFE_PCM_RX Port Mixer", 369 SND_SOC_NOPM, 0, 0, afe_pcm_rx_port_mixer_controls, 370 ARRAY_SIZE(afe_pcm_rx_port_mixer_controls)), 371 SND_SOC_DAPM_MIXER("HDMI_RX Port Mixer", 372 SND_SOC_NOPM, 0, 0, hdmi_rx_port_mixer_controls, 373 ARRAY_SIZE(hdmi_rx_port_mixer_controls)), 374 SND_SOC_DAPM_MIXER("SEC_I2S_RX Port Mixer", 375 SND_SOC_NOPM, 0, 0, sec_i2s_rx_port_mixer_controls, 376 ARRAY_SIZE(sec_i2s_rx_port_mixer_controls)), 377 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX Port Mixer", 378 SND_SOC_NOPM, 0, 0, sbus_3_rx_port_mixer_controls, 379 ARRAY_SIZE(sbus_3_rx_port_mixer_controls)), 380 SND_SOC_DAPM_MIXER("MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, 381 mi2s_rx_port_mixer_controls, ARRAY_SIZE(mi2s_rx_port_mixer_controls)), 382 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, 383 primary_mi2s_rx_port_mixer_controls, 384 ARRAY_SIZE(primary_mi2s_rx_port_mixer_controls)), 385 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, 386 quat_mi2s_rx_port_mixer_controls, 387 ARRAY_SIZE(quat_mi2s_rx_port_mixer_controls)), 388 SND_SOC_DAPM_MIXER("QCHAT_Tx Mixer", 389 SND_SOC_NOPM, 0, 0, tx_qchat_mixer_controls, 390 ARRAY_SIZE(tx_qchat_mixer_controls)), 391 /* Virtual Pins to force backends ON atm */ 392 SND_SOC_DAPM_OUTPUT("BE_OUT"), 393 SND_SOC_DAPM_INPUT("BE_IN"), 394 395 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_LCH_MUX", SND_SOC_NOPM, 0, 0, 396 &slim0_rx_vi_fb_lch_mux), 397 SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0, 398 &voc_ext_ec_mux), 399 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL1 MUX", SND_SOC_NOPM, 0, 0, 400 &ext_ec_ref_mux_ul1), 401 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL2 MUX", SND_SOC_NOPM, 0, 0, 402 &ext_ec_ref_mux_ul2), 403 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL4 MUX", SND_SOC_NOPM, 0, 0, 404 &ext_ec_ref_mux_ul4), 405 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL5 MUX", SND_SOC_NOPM, 0, 0, 406 &ext_ec_ref_mux_ul5), 407 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL6 MUX", SND_SOC_NOPM, 0, 0, 408 &ext_ec_ref_mux_ul6), 409 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL8 MUX", SND_SOC_NOPM, 0, 0, 410 &ext_ec_ref_mux_ul8), 411 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL9 MUX", SND_SOC_NOPM, 0, 0, 412 &ext_ec_ref_mux_ul9), 413 };
这一步定义了PRI_RX Audio Mixer,因为传入了SND_SOC_NOPM参数,pri_i2s_rx_mixer_controls则是宏定义传入kcontrol_news的参数,从而将kcontrol与widget连接起来;
3.3 定义这些widget的连接路径:
1 static const struct snd_soc_dapm_route intercon[] = { 2 {"PRI_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 3 {"PRI_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 4 {"PRI_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 5 {"PRI_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 6 {"PRI_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 7 {"PRI_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 8 {"PRI_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 9 {"PRI_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 10 {"PRI_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 11 {"PRI_I2S_RX", NULL, "PRI_RX Audio Mixer"}, 12 13 {"SEC_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 14 {"SEC_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 15 {"SEC_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 16 {"SEC_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 17 {"SEC_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 18 {"SEC_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 19 {"SEC_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 20 {"SEC_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 21 {"SEC_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 22 {"SEC_I2S_RX", NULL, "SEC_RX Audio Mixer"}, 23 24 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 25 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 26 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 27 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 28 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 29 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 30 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 31 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 32 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 33 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Audio Mixer"}, 34 35 {"HDMI Mixer", "MultiMedia1", "MM_DL1"}, 36 {"HDMI Mixer", "MultiMedia2", "MM_DL2"}, 37 {"HDMI Mixer", "MultiMedia3", "MM_DL3"}, 38 {"HDMI Mixer", "MultiMedia4", "MM_DL4"}, 39 {"HDMI Mixer", "MultiMedia5", "MM_DL5"}, 40 {"HDMI Mixer", "MultiMedia6", "MM_DL6"}, 41 {"HDMI Mixer", "MultiMedia7", "MM_DL7"}, 42 {"HDMI Mixer", "MultiMedia8", "MM_DL8"}, 43 {"HDMI Mixer", "MultiMedia9", "MM_DL9"}, 44 {"HDMI", NULL, "HDMI Mixer"}, 45 46 {"SPDIF_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 47 {"SPDIF_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 48 {"SPDIF_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 49 {"SPDIF_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 50 {"SPDIF_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 51 {"SPDIF_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 52 {"SPDIF_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 53 {"SPDIF_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 54 {"SPDIF_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 55 {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"}, 56 57 /* incall */ 58 {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"}, 59 {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"}, 60 {"Incall_Music Audio Mixer", "MultiMedia5", "MM_DL5"}, 61 {"Incall_Music Audio Mixer", "MultiMedia9", "MM_DL9"}, 62 {"VOICE_PLAYBACK_TX", NULL, "Incall_Music Audio Mixer"}, 63 {"Incall_Music_2 Audio Mixer", "MultiMedia1", "MM_DL1"}, 64 {"Incall_Music_2 Audio Mixer", "MultiMedia2", "MM_DL2"}, 65 {"Incall_Music_2 Audio Mixer", "MultiMedia5", "MM_DL5"}, 66 {"Incall_Music_2 Audio Mixer", "MultiMedia9", "MM_DL9"}, 67 {"VOICE2_PLAYBACK_TX", NULL, "Incall_Music_2 Audio Mixer"}, 68 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 69 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 70 {"SLIMBUS_4_RX", NULL, "SLIMBUS_4_RX Audio Mixer"}, 71 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 72 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 73 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Audio Mixer"}, 74 75 {"MultiMedia1 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"}, 76 {"MultiMedia4 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"}, 77 {"MultiMedia8 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"}, 78 {"MultiMedia1 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"}, 79 {"MultiMedia4 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"}, 80 {"MultiMedia8 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"}, 81 {"MultiMedia1 Mixer", "SLIM_4_TX", "SLIMBUS_4_TX"}, 82 {"MultiMedia1 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"}, 83 {"MultiMedia8 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"}, 84 {"MultiMedia4 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 85 {"MultiMedia8 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 86 {"MultiMedia4 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 87 {"MultiMedia8 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 88 {"MultiMedia5 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 89 {"MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 90 {"MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 91 {"MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 92 {"MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 93 {"MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 94 {"MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 95 {"MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 96 {"MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 97 {"MI2S_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 98 {"MI2S_RX", NULL, "MI2S_RX Audio Mixer"}, 99 100 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 101 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 102 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 103 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 104 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 105 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 106 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 107 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 108 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Audio Mixer"}, 109 110 {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 111 {"TERT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 112 {"TERT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 113 {"TERT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 114 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Audio Mixer"}, 115 116 {"SEC_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 117 {"SEC_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 118 {"SEC_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 119 {"SEC_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 120 {"SEC_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 121 {"SEC_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 122 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"}, 123 124 {"SEC_MI2S_RX_SD1 Audio Mixer", "MultiMedia6", "MM_DL6"}, 125 {"SEC_MI2S_RX_SD1", NULL, "SEC_MI2S_RX_SD1 Audio Mixer"}, 126 127 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 128 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 129 130 {"PRI_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 131 {"PRI_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 132 {"PRI_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 133 {"PRI_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 134 {"PRI_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 135 {"PRI_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 136 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"}, 137 138 {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"}, 139 {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"}, 140 {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"}, 141 {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"}, 142 {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, 143 {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 144 {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 145 {"MultiMedia1 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 146 {"MultiMedia5 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"}, 147 {"MultiMedia1 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"}, 148 {"MultiMedia5 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"}, 149 {"MultiMedia2 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 150 {"MultiMedia1 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"}, 151 {"MultiMedia1 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 152 {"MultiMedia6 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 153 {"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 154 155 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 156 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 157 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 158 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 159 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 160 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 161 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 162 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 163 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 164 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_UL6"}, 165 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Audio Mixer"}, 166 167 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 168 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 169 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 170 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 171 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 172 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 173 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 174 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 175 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 176 {"INT_FM_RX", NULL, "INTERNAL_FM_RX Audio Mixer"}, 177 178 {"AFE_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 179 {"AFE_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 180 {"AFE_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 181 {"AFE_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 182 {"AFE_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 183 {"AFE_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 184 {"AFE_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 185 {"AFE_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 186 {"AFE_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 187 {"PCM_RX", NULL, "AFE_PCM_RX Audio Mixer"}, 188 189 {"MultiMedia1 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 190 {"MultiMedia4 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 191 {"MultiMedia5 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 192 {"MultiMedia8 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 193 {"MultiMedia1 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 194 {"MultiMedia4 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 195 {"MultiMedia5 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 196 {"MultiMedia6 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 197 {"MultiMedia8 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 198 199 {"MultiMedia1 Mixer", "AFE_PCM_TX", "PCM_TX"}, 200 {"MultiMedia4 Mixer", "AFE_PCM_TX", "PCM_TX"}, 201 {"MultiMedia5 Mixer", "AFE_PCM_TX", "PCM_TX"}, 202 {"MultiMedia8 Mixer", "AFE_PCM_TX", "PCM_TX"}, 203 {"MM_UL1", NULL, "MultiMedia1 Mixer"}, 204 {"MultiMedia2 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 205 {"MM_UL2", NULL, "MultiMedia2 Mixer"}, 206 {"MM_UL4", NULL, "MultiMedia4 Mixer"}, 207 {"MM_UL5", NULL, "MultiMedia5 Mixer"}, 208 {"MM_UL6", NULL, "MultiMedia6 Mixer"}, 209 {"MM_UL8", NULL, "MultiMedia8 Mixer"}, 210 211 {"AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 212 {"AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 213 {"AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 214 {"AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 215 {"AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 216 {"AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 217 {"AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 218 {"AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 219 {"AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 220 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Audio Mixer"}, 221 222 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, 223 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, 224 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, 225 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, 226 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, 227 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, 228 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, 229 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, 230 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"}, 231 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX Audio Mixer"}, 232 233 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 234 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 235 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, 236 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 237 {"MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 238 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 239 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"}, 240 241 {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 242 {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 243 {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 244 {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 245 {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"}, 246 {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 247 {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 248 {"PRI_I2S_RX", NULL, "PRI_RX_Voice Mixer"}, 249 250 {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 251 {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 252 {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 253 {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 254 {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"}, 255 {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 256 {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 257 {"SEC_I2S_RX", NULL, "SEC_RX_Voice Mixer"}, 258 259 {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 260 {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 261 {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 262 {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 263 {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, 264 {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 265 {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 266 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_Voice Mixer"}, 267 268 {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 269 {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 270 {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 271 {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 272 {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"}, 273 {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 274 {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 275 {"SLIM_0_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 276 {"SLIM_0_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 277 {"SLIM_0_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 278 {"SLIMBUS_0_RX", NULL, "SLIM_0_RX_Voice Mixer"}, 279 280 {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 281 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 282 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 283 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 284 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"}, 285 {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 286 {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 287 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX_Voice Mixer"}, 288 289 {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 290 {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 291 {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 292 {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 293 {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, 294 {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 295 {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 296 {"PCM_RX", NULL, "AFE_PCM_RX_Voice Mixer"}, 297 298 {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 299 {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 300 {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 301 {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 302 {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, 303 {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 304 {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 305 {"AUX_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 306 {"AUX_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 307 {"AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 308 {"AUX_PCM_RX", NULL, "AUX_PCM_RX_Voice Mixer"}, 309 310 {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 311 {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 312 {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 313 {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, 314 {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 315 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 316 {"SEC_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 317 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX_Voice Mixer"}, 318 319 {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 320 {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 321 {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 322 {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 323 {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"}, 324 {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, 325 {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 326 {"HDMI", NULL, "HDMI_RX_Voice Mixer"}, 327 {"HDMI", NULL, "HDMI_DL_HL"}, 328 329 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 330 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 331 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, 332 {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 333 {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 334 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 335 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 336 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"}, 337 338 {"PRI_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 339 {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 340 {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, 341 {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 342 {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 343 {"PRI_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 344 {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 345 {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 346 {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 347 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_Voice Mixer"}, 348 349 {"QUAT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, 350 {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, 351 {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, 352 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, 353 {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, 354 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 355 {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 356 {"QUAT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 357 {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, 358 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"}, 359 360 {"VOC_EXT_EC MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 361 {"VOC_EXT_EC MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 362 {"VOC_EXT_EC MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 363 {"VOC_EXT_EC MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 364 {"CS-VOICE_UL1", NULL, "VOC_EXT_EC MUX"}, 365 {"VOIP_UL", NULL, "VOC_EXT_EC MUX"}, 366 {"VoLTE_UL", NULL, "VOC_EXT_EC MUX"}, 367 368 {"AUDIO_REF_EC_UL1 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 369 {"AUDIO_REF_EC_UL1 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 370 {"AUDIO_REF_EC_UL1 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 371 {"AUDIO_REF_EC_UL1 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 372 {"AUDIO_REF_EC_UL1 MUX", "I2S_RX" , "PRI_I2S_TX"}, 373 {"AUDIO_REF_EC_UL1 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 374 375 {"AUDIO_REF_EC_UL2 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 376 {"AUDIO_REF_EC_UL2 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 377 {"AUDIO_REF_EC_UL2 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 378 {"AUDIO_REF_EC_UL2 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 379 {"AUDIO_REF_EC_UL2 MUX", "I2S_RX" , "PRI_I2S_TX"}, 380 {"AUDIO_REF_EC_UL2 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 381 382 {"AUDIO_REF_EC_UL4 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 383 {"AUDIO_REF_EC_UL4 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 384 {"AUDIO_REF_EC_UL4 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 385 {"AUDIO_REF_EC_UL4 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 386 {"AUDIO_REF_EC_UL4 MUX", "I2S_RX" , "PRI_I2S_TX"}, 387 {"AUDIO_REF_EC_UL4 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 388 389 {"AUDIO_REF_EC_UL5 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 390 {"AUDIO_REF_EC_UL5 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 391 {"AUDIO_REF_EC_UL5 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 392 {"AUDIO_REF_EC_UL5 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 393 {"AUDIO_REF_EC_UL5 MUX", "I2S_RX" , "PRI_I2S_TX"}, 394 {"AUDIO_REF_EC_UL5 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 395 396 {"AUDIO_REF_EC_UL6 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 397 {"AUDIO_REF_EC_UL6 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 398 {"AUDIO_REF_EC_UL6 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 399 {"AUDIO_REF_EC_UL6 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 400 {"AUDIO_REF_EC_UL6 MUX", "I2S_RX" , "PRI_I2S_TX"}, 401 {"AUDIO_REF_EC_UL6 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 402 403 {"AUDIO_REF_EC_UL8 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 404 {"AUDIO_REF_EC_UL8 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 405 {"AUDIO_REF_EC_UL8 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 406 {"AUDIO_REF_EC_UL8 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 407 {"AUDIO_REF_EC_UL8 MUX", "I2S_RX" , "PRI_I2S_TX"}, 408 {"AUDIO_REF_EC_UL8 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 409 410 {"AUDIO_REF_EC_UL9 MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, 411 {"AUDIO_REF_EC_UL9 MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, 412 {"AUDIO_REF_EC_UL9 MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, 413 {"AUDIO_REF_EC_UL9 MUX", "QUAT_MI2S_TX" , "QUAT_MI2S_TX"}, 414 {"AUDIO_REF_EC_UL9 MUX", "I2S_RX" , "PRI_I2S_TX"}, 415 {"AUDIO_REF_EC_UL9 MUX", "SLIM_RX" , "SLIMBUS_0_TX"}, 416 417 {"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"}, 418 {"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"}, 419 {"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"}, 420 {"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"}, 421 {"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"}, 422 {"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"}, 423 {"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"}, 424 425 {"Voice_Tx Mixer", "PRI_TX_Voice", "PRI_I2S_TX"}, 426 {"Voice_Tx Mixer", "PRI_MI2S_TX_Voice", "PRI_MI2S_TX"}, 427 {"Voice_Tx Mixer", "MI2S_TX_Voice", "MI2S_TX"}, 428 {"Voice_Tx Mixer", "TERT_MI2S_TX_Voice", "TERT_MI2S_TX"}, 429 {"Voice_Tx Mixer", "SLIM_0_TX_Voice", "SLIMBUS_0_TX"}, 430 {"Voice_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice", "INT_BT_SCO_TX"}, 431 {"Voice_Tx Mixer", "AFE_PCM_TX_Voice", "PCM_TX"}, 432 {"Voice_Tx Mixer", "AUX_PCM_TX_Voice", "AUX_PCM_TX"}, 433 {"Voice_Tx Mixer", "SEC_AUX_PCM_TX_Voice", "SEC_AUX_PCM_TX"}, 434 {"CS-VOICE_UL1", NULL, "Voice_Tx Mixer"}, 435 436 {"Voice2_Tx Mixer", "PRI_TX_Voice2", "PRI_I2S_TX"}, 437 {"Voice2_Tx Mixer", "PRI_MI2S_TX_Voice2", "PRI_MI2S_TX"}, 438 {"Voice2_Tx Mixer", "MI2S_TX_Voice2", "MI2S_TX"}, 439 {"Voice2_Tx Mixer", "TERT_MI2S_TX_Voice2", "TERT_MI2S_TX"}, 440 {"Voice2_Tx Mixer", "SLIM_0_TX_Voice2", "SLIMBUS_0_TX"}, 441 {"Voice2_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice2", "INT_BT_SCO_TX"}, 442 {"Voice2_Tx Mixer", "AFE_PCM_TX_Voice2", "PCM_TX"}, 443 {"Voice2_Tx Mixer", "AUX_PCM_TX_Voice2", "AUX_PCM_TX"}, 444 {"VOICE2_UL", NULL, "Voice2_Tx Mixer"}, 445 446 {"VoLTE_Tx Mixer", "PRI_TX_VoLTE", "PRI_I2S_TX"}, 447 {"VoLTE_Tx Mixer", "SLIM_0_TX_VoLTE", "SLIMBUS_0_TX"}, 448 {"VoLTE_Tx Mixer", "INTERNAL_BT_SCO_TX_VoLTE", "INT_BT_SCO_TX"}, 449 {"VoLTE_Tx Mixer", "AFE_PCM_TX_VoLTE", "PCM_TX"}, 450 {"VoLTE_Tx Mixer", "AUX_PCM_TX_VoLTE", "AUX_PCM_TX"}, 451 {"VoLTE_Tx Mixer", "SEC_AUX_PCM_TX_VoLTE", "SEC_AUX_PCM_TX"}, 452 {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"}, 453 {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"}, 454 {"VoLTE_Tx Mixer", "TERT_MI2S_TX_VoLTE", "TERT_MI2S_TX"}, 455 {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"}, 456 457 {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"}, 458 {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"}, 459 {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"}, 460 {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"}, 461 {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"}, 462 {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"}, 463 {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"}, 464 {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"}, 465 {"VoWLAN_Tx Mixer", "TERT_MI2S_TX_VoWLAN", "TERT_MI2S_TX"}, 466 {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"}, 467 468 {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"}, 469 {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"}, 470 {"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"}, 471 {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"}, 472 {"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"}, 473 {"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"}, 474 {"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"}, 475 {"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"}, 476 {"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"}, 477 {"VOIP_UL", NULL, "Voip_Tx Mixer"}, 478 479 {"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"}, 480 {"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"}, 481 {"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"}, 482 {"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"}, 483 {"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"}, 484 {"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"}, 485 {"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"}, 486 {"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"}, 487 {"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"}, 488 {"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"}, 489 {"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"}, 490 {"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"}, 491 492 {"LSM1 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 493 {"LSM1 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 494 {"LSM1 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 495 {"LSM1 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 496 {"LSM1 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 497 {"LSM1 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 498 {"LSM1_UL_HL", NULL, "LSM1 MUX"}, 499 500 {"LSM2 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 501 {"LSM2 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 502 {"LSM2 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 503 {"LSM2 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 504 {"LSM2 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 505 {"LSM2 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 506 {"LSM2_UL_HL", NULL, "LSM2 MUX"}, 507 508 509 {"LSM3 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 510 {"LSM3 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 511 {"LSM3 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 512 {"LSM3 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 513 {"LSM3 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 514 {"LSM3 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 515 {"LSM3_UL_HL", NULL, "LSM3 MUX"}, 516 517 518 {"LSM4 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 519 {"LSM4 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 520 {"LSM4 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 521 {"LSM4 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 522 {"LSM4 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 523 {"LSM4 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 524 {"LSM4_UL_HL", NULL, "LSM4 MUX"}, 525 526 {"LSM5 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 527 {"LSM5 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 528 {"LSM5 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 529 {"LSM5 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 530 {"LSM5 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 531 {"LSM5 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 532 {"LSM5_UL_HL", NULL, "LSM5 MUX"}, 533 534 {"LSM6 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 535 {"LSM6 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 536 {"LSM6 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 537 {"LSM6 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 538 {"LSM6 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 539 {"LSM6_UL_HL", NULL, "LSM6 MUX"}, 540 541 542 {"LSM7 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 543 {"LSM7 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 544 {"LSM7 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 545 {"LSM7 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 546 {"LSM7 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 547 {"LSM7_UL_HL", NULL, "LSM7 MUX"}, 548 549 550 {"LSM8 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"}, 551 {"LSM8 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"}, 552 {"LSM8 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"}, 553 {"LSM8 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"}, 554 {"LSM8 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"}, 555 {"LSM8_UL_HL", NULL, "LSM8 MUX"}, 556 557 558 559 {"QCHAT_Tx Mixer", "PRI_TX_QCHAT", "PRI_I2S_TX"}, 560 {"QCHAT_Tx Mixer", "SLIM_0_TX_QCHAT", "SLIMBUS_0_TX"}, 561 {"QCHAT_Tx Mixer", "INTERNAL_BT_SCO_TX_QCHAT", "INT_BT_SCO_TX"}, 562 {"QCHAT_Tx Mixer", "AFE_PCM_TX_QCHAT", "PCM_TX"}, 563 {"QCHAT_Tx Mixer", "AUX_PCM_TX_QCHAT", "AUX_PCM_TX"}, 564 {"QCHAT_Tx Mixer", "SEC_AUX_PCM_TX_QCHAT", "SEC_AUX_PCM_TX"}, 565 {"QCHAT_Tx Mixer", "MI2S_TX_QCHAT", "MI2S_TX"}, 566 {"QCHAT_Tx Mixer", "PRI_MI2S_TX_QCHAT", "PRI_MI2S_TX"}, 567 {"QCHAT_Tx Mixer", "TERT_MI2S_TX_QCHAT", "TERT_MI2S_TX"}, 568 {"QCHAT_UL", NULL, "QCHAT_Tx Mixer"}, 569 570 {"INT_FM_RX", NULL, "INTFM_DL_HL"}, 571 {"INTFM_UL_HL", NULL, "INT_FM_TX"}, 572 {"INTHFP_UL_HL", NULL, "INT_BT_SCO_TX"}, 573 {"INT_BT_SCO_RX", NULL, "MM_DL6"}, 574 {"AUX_PCM_RX", NULL, "AUXPCM_DL_HL"}, 575 {"AUXPCM_UL_HL", NULL, "AUX_PCM_TX"}, 576 {"MI2S_RX", NULL, "MI2S_DL_HL"}, 577 {"MI2S_UL_HL", NULL, "MI2S_TX"}, 578 {"PCM_RX_DL_HL", "Switch", "SLIM0_DL_HL"}, 579 {"PCM_RX", NULL, "PCM_RX_DL_HL"}, 580 {"PRI_MI2S_RX_DL_HL", "Switch", "PRI_MI2S_DL_HL"}, 581 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_DL_HL"}, 582 {"MI2S_UL_HL", NULL, "TERT_MI2S_TX"}, 583 {"TERT_MI2S_UL_HL", NULL, "TERT_MI2S_TX"}, 584 {"SEC_I2S_RX", NULL, "SEC_I2S_DL_HL"}, 585 {"PRI_MI2S_UL_HL", NULL, "PRI_MI2S_TX"}, 586 {"SEC_MI2S_RX", NULL, "SEC_MI2S_DL_HL"}, 587 {"PRI_MI2S_RX", NULL, "PRI_MI2S_DL_HL"}, 588 589 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 590 {"SLIMBUS_0_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 591 {"SLIMBUS_0_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 592 {"SLIMBUS_0_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 593 {"SLIMBUS_0_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"}, 594 {"SLIMBUS_0_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, 595 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 596 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Port Mixer"}, 597 {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 598 {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 599 {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"}, 600 601 {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 602 {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 603 {"AUX_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 604 {"AUX_PCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"}, 605 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Port Mixer"}, 606 607 {"SEC_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 608 {"SEC_AUXPCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"}, 609 {"SEC_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 610 {"SEC_AUX_PCM_RX", NULL, "SEC_AUXPCM_RX Port Mixer"}, 611 612 {"Voice Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"}, 613 {"Voice Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 614 {"Voice Stub Tx Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 615 {"Voice Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"}, 616 {"Voice Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 617 {"Voice Stub Tx Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"}, 618 {"Voice Stub Tx Mixer", "MI2S_TX", "MI2S_TX"}, 619 {"Voice Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 620 {"Voice Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, 621 {"Voice Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 622 {"Voice Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"}, 623 {"Voice Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"}, 624 {"VOICE_STUB_UL", NULL, "Voice Stub Tx Mixer"}, 625 626 {"VoLTE Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"}, 627 {"VoLTE Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 628 {"VoLTE Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"}, 629 {"VoLTE Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 630 {"VoLTE Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 631 {"VoLTE Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"}, 632 {"VoLTE Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"}, 633 {"VoLTE Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 634 {"VoLTE Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, 635 {"VOLTE_STUB_UL", NULL, "VoLTE Stub Tx Mixer"}, 636 637 {"Voice2 Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"}, 638 {"Voice2 Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 639 {"Voice2 Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"}, 640 {"Voice2 Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 641 {"Voice2 Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 642 {"Voice2 Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"}, 643 {"Voice2 Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"}, 644 {"Voice2 Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 645 {"Voice2 Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, 646 {"VOICE2_STUB_UL", NULL, "Voice2 Stub Tx Mixer"}, 647 648 {"STUB_RX Mixer", "Voice Stub", "VOICE_STUB_DL"}, 649 {"STUB_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 650 {"STUB_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 651 {"STUB_RX", NULL, "STUB_RX Mixer"}, 652 {"SLIMBUS_1_RX Mixer", "Voice Stub", "VOICE_STUB_DL"}, 653 {"SLIMBUS_1_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 654 {"SLIMBUS_1_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 655 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Mixer"}, 656 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 657 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 658 {"AFE_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 659 {"AFE_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 660 {"AFE_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 661 {"SLIMBUS_3_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, 662 {"SLIMBUS_3_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, 663 {"SLIMBUS_3_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, 664 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX_Voice Mixer"}, 665 666 {"SLIMBUS_1_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 667 {"SLIMBUS_1_RX Port Mixer", "AFE_PCM_TX", "PCM_TX"}, 668 {"SLIMBUS_1_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, 669 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Port Mixer"}, 670 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 671 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, 672 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Port Mixer"}, 673 {"SLIMBUS_3_RX Port Mixer", "INTERNAL_BT_SCO_RX", "INT_BT_SCO_RX"}, 674 {"SLIMBUS_3_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, 675 {"SLIMBUS_3_RX Port Mixer", "AFE_PCM_RX", "PCM_RX"}, 676 {"SLIMBUS_3_RX Port Mixer", "AUX_PCM_RX", "AUX_PCM_RX"}, 677 {"SLIMBUS_3_RX Port Mixer", "SLIM_0_RX", "SLIMBUS_0_RX"}, 678 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX Port Mixer"}, 679 680 681 {"HDMI_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, 682 {"HDMI", NULL, "HDMI_RX Port Mixer"}, 683 684 {"SEC_I2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, 685 {"SEC_I2S_RX", NULL, "SEC_I2S_RX Port Mixer"}, 686 687 {"MI2S_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, 688 {"MI2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, 689 {"MI2S_RX", NULL, "MI2S_RX Port Mixer"}, 690 691 {"PRI_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"}, 692 {"PRI_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, 693 {"PRI_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, 694 {"PRI_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 695 {"PRI_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"}, 696 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Port Mixer"}, 697 698 {"QUAT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"}, 699 {"QUAT_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, 700 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Port Mixer"}, 701 702 /* Backend Enablement */ 703 704 {"BE_OUT", NULL, "PRI_I2S_RX"}, 705 {"BE_OUT", NULL, "SEC_I2S_RX"}, 706 {"BE_OUT", NULL, "SLIMBUS_0_RX"}, 707 {"BE_OUT", NULL, "SLIMBUS_1_RX"}, 708 {"BE_OUT", NULL, "SLIMBUS_3_RX"}, 709 {"BE_OUT", NULL, "SLIMBUS_4_RX"}, 710 {"BE_OUT", NULL, "SLIMBUS_6_RX"}, 711 {"BE_OUT", NULL, "HDMI"}, 712 {"BE_OUT", NULL, "SPDIF_RX"}, 713 {"BE_OUT", NULL, "MI2S_RX"}, 714 {"BE_OUT", NULL, "QUAT_MI2S_RX"}, 715 {"BE_OUT", NULL, "TERT_MI2S_RX"}, 716 {"BE_OUT", NULL, "SEC_MI2S_RX"}, 717 {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"}, 718 {"BE_OUT", NULL, "PRI_MI2S_RX"}, 719 {"BE_OUT", NULL, "INT_BT_SCO_RX"}, 720 {"BE_OUT", NULL, "INT_FM_RX"}, 721 {"BE_OUT", NULL, "PCM_RX"}, 722 {"BE_OUT", NULL, "SLIMBUS_3_RX"}, 723 {"BE_OUT", NULL, "AUX_PCM_RX"}, 724 {"BE_OUT", NULL, "SEC_AUX_PCM_RX"}, 725 {"BE_OUT", NULL, "INT_BT_SCO_RX"}, 726 {"BE_OUT", NULL, "INT_FM_RX"}, 727 {"BE_OUT", NULL, "PCM_RX"}, 728 {"BE_OUT", NULL, "SLIMBUS_3_RX"}, 729 {"BE_OUT", NULL, "AUX_PCM_RX"}, 730 {"BE_OUT", NULL, "SEC_AUX_PCM_RX"}, 731 {"BE_OUT", NULL, "VOICE_PLAYBACK_TX"}, 732 {"BE_OUT", NULL, "VOICE2_PLAYBACK_TX"}, 733 734 {"PRI_I2S_TX", NULL, "BE_IN"}, 735 {"MI2S_TX", NULL, "BE_IN"}, 736 {"QUAT_MI2S_TX", NULL, "BE_IN"}, 737 {"PRI_MI2S_TX", NULL, "BE_IN"}, 738 {"TERT_MI2S_TX", NULL, "BE_IN"}, 739 {"SEC_MI2S_TX", NULL, "BE_IN"}, 740 {"SLIMBUS_0_TX", NULL, "BE_IN" }, 741 {"SLIMBUS_1_TX", NULL, "BE_IN" }, 742 {"SLIMBUS_3_TX", NULL, "BE_IN" }, 743 {"SLIMBUS_4_TX", NULL, "BE_IN" }, 744 {"SLIMBUS_5_TX", NULL, "BE_IN" }, 745 {"SLIMBUS_6_TX", NULL, "BE_IN" }, 746 {"INT_BT_SCO_TX", NULL, "BE_IN"}, 747 {"INT_FM_TX", NULL, "BE_IN"}, 748 {"PCM_TX", NULL, "BE_IN"}, 749 {"BE_OUT", NULL, "SLIMBUS_3_RX"}, 750 {"BE_OUT", NULL, "STUB_RX"}, 751 {"STUB_TX", NULL, "BE_IN"}, 752 {"STUB_1_TX", NULL, "BE_IN"}, 753 {"BE_OUT", NULL, "AUX_PCM_RX"}, 754 {"AUX_PCM_TX", NULL, "BE_IN"}, 755 {"SEC_AUX_PCM_TX", NULL, "BE_IN"}, 756 {"INCALL_RECORD_TX", NULL, "BE_IN"}, 757 {"INCALL_RECORD_RX", NULL, "BE_IN"}, 758 {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"}, 759 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"}, 760 };
通过第一步的定义,我们知道PRI_RX Audio 的数据流通道为MultiMedia1;
很明显,我们可以知道:
MM_DL1连接到PRI_RX Audio Mixer的MultiMedia1
MM_DL2连接到PRI_RX Audio Mixer的MultiMedia2
。。。。
3.4 在msm_routing_probe函数中注册这些widget和路径:
1 snd_soc_dapm_new_controls(&platform->dapm, msm_qdsp6_widgets, 2 ARRAY_SIZE(msm_qdsp6_widgets)); 3 snd_soc_dapm_add_routes(&platform->dapm, intercon, 4 ARRAY_SIZE(intercon));