专栏首页linux驱动个人学习ALSA声卡驱动的DAPM(一)-DPAM详解

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 软链接与硬链接的区别

    由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

    233333
  • 海思uboot启动流程详细分析(二)

    从start_armboot开始,在startup.c中有包含#include <config.h>

    233333
  • 深入理解 Android 中的各种 Context

    老实说,我不明白这个等式有什么意义,而且还是错的。首先多进程情况下,Application 对象就不止一个;其次,Activity、Service、Applic...

    233333
  • 作为程序员,有没有让你感到既无语又崩溃的程序命名?

    IT故事会
  • Android基础进阶之学习使用AIDL进行跨进程通信

    AIDL是什么 ---- AIDL (Android Interface Definition Language), 即接口定义语言,Android提供的IPC...

    用户1263308
  • 来玩Play框架01 简介

    说到网络框架,Ruby的Ruby on Rail和Python的Django都相当轻巧好用,但Java下的框架,则要沉重很多。有人因此质疑Java语言本身是否符...

    Vamei
  • 经典面试题-Collection和Collections有什么区别?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • JAVA面试锦囊(十一)

    Clob :字符数据 最大长度4G,可以存大字符串 varchar2和nvarchar2都具有一定的局限性,它们长度有限,但数据库中无论用varchar2或n...

    用户7386338
  • 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量;某些时候,我们的配置可能并不是在配置文件中,如存在 ...

    一灰灰blog
  • Spring常用注解大全,收藏一波!!!

    @Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)

    程序员追风

扫码关注云+社区

领取腾讯云代金券