最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么。所以百度了一下,百度结果是与DPAM有关。
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
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 };
在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结构。
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的关系如下图:
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回调函数检查。
和普通的kcontrol一样,DAPM框架为我们提供了大量的辅助宏用来定义各种各样的widget控件,这些宏定义根据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}
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}
这种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}
这些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 }
dapm kcontrol是widget的开关,info函数是显示widget的函数,put是设置,get是获取;
以我们打开音频tinymix ‘PRI_MI2S_RX Audio Mixer MultiMedia1’ 1 为例子来了解整个过程:
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数据流通道;
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连接起来;
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
。。。。
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));