• 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 };
    msm_qdsp6_widgets

     这一步定义了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 };
    snd_soc_dapm_route intercon

    通过第一步的定义,我们知道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));
  • 相关阅读:
    [macOS] git忽略所有的.DS_Store文件
    [macOS] finder变慢提速
    [React Native] change port when running react native
    转载: 我如何使用 Django + Vue.js 快速构建项目
    MySQL Connector/NET 使用小结(踩坑之路)
    C# 控制台程序(Console Application )启动后隐藏
    解决 pycharm can not save setting
    ubuntu 16.04 LTS 安装 teamviewer 13

    Python 编程规范梳理
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/8509899.html
Copyright © 2020-2023  润新知