blob: d67296f238f051a3006484cc74202e37e4978b89 [file] [log] [blame]
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/init.h>
14#include <linux/err.h>
15#include <linux/module.h>
16#include <linux/moduleparam.h>
17#include <linux/platform_device.h>
18#include <linux/bitops.h>
19#include <linux/mutex.h>
20#include <linux/of_device.h>
21#include <linux/slab.h>
22#include <sound/core.h>
23#include <sound/soc.h>
24#include <sound/soc-dapm.h>
25#include <sound/pcm.h>
26#include <sound/initval.h>
27#include <sound/control.h>
28#include <sound/q6adm-v2.h>
29#include <sound/q6asm-v2.h>
30#include <sound/q6afe-v2.h>
31#include <sound/tlv.h>
32#include <sound/asound.h>
33#include <sound/pcm_params.h>
34#include <sound/q6core.h>
35#include <sound/audio_cal_utils.h>
36#include <sound/audio_effects.h>
37#include <sound/hwdep.h>
38
39#include "msm-pcm-routing-v2.h"
40#include "msm-pcm-routing-devdep.h"
41#include "msm-qti-pp-config.h"
42#include "msm-dts-srs-tm-config.h"
43#include "msm-dolby-dap-config.h"
44#include "msm-ds2-dap-config.h"
45#include "q6voice.h"
46#include "sound/q6lsm.h"
47
48#ifndef CONFIG_DOLBY_DAP
49#undef DOLBY_ADM_COPP_TOPOLOGY_ID
50#define DOLBY_ADM_COPP_TOPOLOGY_ID 0xFFFFFFFE
51#endif
52
53#ifndef CONFIG_DOLBY_DS2
54#undef DS2_ADM_COPP_TOPOLOGY_ID
55#define DS2_ADM_COPP_TOPOLOGY_ID 0xFFFFFFFF
56#endif
57
58static struct mutex routing_lock;
59
60static struct cal_type_data *cal_data;
61
62static int fm_switch_enable;
63static int hfp_switch_enable;
64static int int0_mi2s_switch_enable;
65static int int4_mi2s_switch_enable;
66static int pri_mi2s_switch_enable;
67static int sec_mi2s_switch_enable;
68static int tert_mi2s_switch_enable;
69static int quat_mi2s_switch_enable;
70static int fm_pcmrx_switch_enable;
71static int usb_switch_enable;
72static int lsm_port_index;
73static int slim0_rx_aanc_fb_port;
74static int msm_route_ec_ref_rx;
75static int msm_ec_ref_ch = 4;
76static int msm_ec_ref_bit_format = SNDRV_PCM_FORMAT_S16_LE;
77static int msm_ec_ref_sampling_rate = 48000;
78static uint32_t voc_session_id = ALL_SESSION_VSID;
79static int msm_route_ext_ec_ref;
80static bool is_custom_stereo_on;
81static bool is_ds2_on;
82static bool swap_ch;
83
84#define WEIGHT_0_DB 0x4000
85/* all the FEs which can support channel mixer */
86static struct msm_pcm_channel_mixer channel_mixer[MSM_FRONTEND_DAI_MM_SIZE];
87/* input BE for each FE */
88static int channel_input[MSM_FRONTEND_DAI_MM_SIZE][ADM_MAX_CHANNELS];
89
90enum {
91 MADNONE,
92 MADAUDIO,
93 MADBEACON,
94 MADULTRASOUND,
95 MADSWAUDIO,
96};
97
98#define ADM_LSM_PORT_INDEX 9
99
100#define SLIMBUS_0_TX_TEXT "SLIMBUS_0_TX"
101#define SLIMBUS_1_TX_TEXT "SLIMBUS_1_TX"
102#define SLIMBUS_2_TX_TEXT "SLIMBUS_2_TX"
103#define SLIMBUS_3_TX_TEXT "SLIMBUS_3_TX"
104#define SLIMBUS_4_TX_TEXT "SLIMBUS_4_TX"
105#define SLIMBUS_5_TX_TEXT "SLIMBUS_5_TX"
106#define TERT_MI2S_TX_TEXT "TERT_MI2S_TX"
107#define QUAT_MI2S_TX_TEXT "QUAT_MI2S_TX"
108#define ADM_LSM_TX_TEXT "ADM_LSM_TX"
109#define INT3_MI2S_TX_TEXT "INT3_MI2S_TX"
110
111#define LSM_FUNCTION_TEXT "LSM Function"
112static const char * const lsm_port_text[] = {
113 "None",
114 SLIMBUS_0_TX_TEXT, SLIMBUS_1_TX_TEXT, SLIMBUS_2_TX_TEXT,
115 SLIMBUS_3_TX_TEXT, SLIMBUS_4_TX_TEXT, SLIMBUS_5_TX_TEXT,
116 TERT_MI2S_TX_TEXT, QUAT_MI2S_TX_TEXT, ADM_LSM_TX_TEXT,
117 INT3_MI2S_TX_TEXT
118};
119
120struct msm_pcm_route_bdai_pp_params {
121 u16 port_id; /* AFE port ID */
122 unsigned long pp_params_config;
123 bool mute_on;
124 int latency;
125};
126
127static struct msm_pcm_route_bdai_pp_params
128 msm_bedais_pp_params[MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX] = {
129 {HDMI_RX, 0, 0, 0},
130 {DISPLAY_PORT_RX, 0, 0, 0},
131};
132
133/*
134 * The be_dai_name_table is passed to HAL so that it can specify the
135 * BE ID for the BE it wants to enable based on the name. Thus there
136 * is a matching table and structure in HAL that need to be updated
137 * if any changes to these are made.
138 */
139struct msm_pcm_route_bdai_name {
140 unsigned int be_id;
141 char be_name[LPASS_BE_NAME_MAX_LENGTH];
142};
143static struct msm_pcm_route_bdai_name be_dai_name_table[MSM_BACKEND_DAI_MAX];
144
145static int msm_routing_send_device_pp_params(int port_id, int copp_idx,
146 int fe_id);
147
148static int msm_routing_get_bit_width(unsigned int format)
149{
150 int bit_width;
151
152 switch (format) {
153 case SNDRV_PCM_FORMAT_S32_LE:
154 bit_width = 32;
155 break;
156 case SNDRV_PCM_FORMAT_S24_LE:
157 case SNDRV_PCM_FORMAT_S24_3LE:
158 bit_width = 24;
159 break;
160 case SNDRV_PCM_FORMAT_S16_LE:
161 default:
162 bit_width = 16;
163 }
164 return bit_width;
165}
166
167static bool msm_is_resample_needed(int input_sr, int output_sr)
168{
169 bool rc = false;
170
171 if (input_sr != output_sr)
172 rc = true;
173
174 pr_debug("perform resampling (%s) for copp rate (%d)afe rate (%d)",
175 (rc ? "oh yes" : "not really"),
176 input_sr, output_sr);
177
178 return rc;
179}
180
181static void msm_pcm_routing_cfg_pp(int port_id, int copp_idx, int topology,
182 int channels)
183{
184 int rc = 0;
185
186 switch (topology) {
187 case SRS_TRUMEDIA_TOPOLOGY_ID:
188 pr_debug("%s: SRS_TRUMEDIA_TOPOLOGY_ID\n", __func__);
189 msm_dts_srs_tm_init(port_id, copp_idx);
190 break;
191 case DS2_ADM_COPP_TOPOLOGY_ID:
192 pr_debug("%s: DS2_ADM_COPP_TOPOLOGY %d\n",
193 __func__, DS2_ADM_COPP_TOPOLOGY_ID);
194 rc = msm_ds2_dap_init(port_id, copp_idx, channels,
195 is_custom_stereo_on);
196 if (rc < 0)
197 pr_err("%s: DS2 topo_id 0x%x, port %d, CS %d rc %d\n",
198 __func__, topology, port_id,
199 is_custom_stereo_on, rc);
200 break;
201 case DOLBY_ADM_COPP_TOPOLOGY_ID:
202 if (is_ds2_on) {
203 pr_debug("%s: DS2_ADM_COPP_TOPOLOGY\n", __func__);
204 rc = msm_ds2_dap_init(port_id, copp_idx, channels,
205 is_custom_stereo_on);
206 if (rc < 0)
207 pr_err("%s:DS2 topo_id 0x%x, port %d, rc %d\n",
208 __func__, topology, port_id, rc);
209 } else {
210 pr_debug("%s: DOLBY_ADM_COPP_TOPOLOGY_ID\n", __func__);
211 rc = msm_dolby_dap_init(port_id, copp_idx, channels,
212 is_custom_stereo_on);
213 if (rc < 0)
214 pr_err("%s: DS1 topo_id 0x%x, port %d, rc %d\n",
215 __func__, topology, port_id, rc);
216 }
217 break;
218 case ADM_CMD_COPP_OPEN_TOPOLOGY_ID_AUDIOSPHERE:
219 pr_debug("%s: TOPOLOGY_ID_AUDIOSPHERE\n", __func__);
220 rc = msm_qti_pp_asphere_init(port_id, copp_idx);
221 if (rc < 0)
222 pr_err("%s: topo_id 0x%x, port %d, copp %d, rc %d\n",
223 __func__, topology, port_id, copp_idx, rc);
224 break;
225 default:
226 /* custom topology specific feature param handlers */
227 break;
228 }
229}
230
231static void msm_pcm_routing_deinit_pp(int port_id, int topology)
232{
233 switch (topology) {
234 case SRS_TRUMEDIA_TOPOLOGY_ID:
235 pr_debug("%s: SRS_TRUMEDIA_TOPOLOGY_ID\n", __func__);
236 msm_dts_srs_tm_deinit(port_id);
237 break;
238 case DS2_ADM_COPP_TOPOLOGY_ID:
239 pr_debug("%s: DS2_ADM_COPP_TOPOLOGY_ID %d\n",
240 __func__, DS2_ADM_COPP_TOPOLOGY_ID);
241 msm_ds2_dap_deinit(port_id);
242 break;
243 case DOLBY_ADM_COPP_TOPOLOGY_ID:
244 if (is_ds2_on) {
245 pr_debug("%s: DS2_ADM_COPP_TOPOLOGY_ID\n", __func__);
246 msm_ds2_dap_deinit(port_id);
247 } else {
248 pr_debug("%s: DOLBY_ADM_COPP_TOPOLOGY_ID\n", __func__);
249 msm_dolby_dap_deinit(port_id);
250 }
251 break;
252 case ADM_CMD_COPP_OPEN_TOPOLOGY_ID_AUDIOSPHERE:
253 pr_debug("%s: TOPOLOGY_ID_AUDIOSPHERE\n", __func__);
254 msm_qti_pp_asphere_deinit(port_id);
255 break;
256 default:
257 /* custom topology specific feature deinit handlers */
258 break;
259 }
260}
261
262static void msm_pcm_routng_cfg_matrix_map_pp(struct route_payload payload,
263 int path_type, int perf_mode)
264{
265 int itr = 0, rc = 0;
266
267 if ((path_type == ADM_PATH_PLAYBACK) &&
268 (perf_mode == LEGACY_PCM_MODE) &&
269 is_custom_stereo_on) {
270 for (itr = 0; itr < payload.num_copps; itr++) {
271 if ((payload.port_id[itr] != SLIMBUS_0_RX) &&
272 (payload.port_id[itr] != RT_PROXY_PORT_001_RX)) {
273 continue;
274 }
275
276 rc = msm_qti_pp_send_stereo_to_custom_stereo_cmd(
277 payload.port_id[itr],
278 payload.copp_idx[itr],
279 payload.session_id,
280 Q14_GAIN_ZERO_POINT_FIVE,
281 Q14_GAIN_ZERO_POINT_FIVE,
282 Q14_GAIN_ZERO_POINT_FIVE,
283 Q14_GAIN_ZERO_POINT_FIVE);
284 if (rc < 0)
285 pr_err("%s: err setting custom stereo\n",
286 __func__);
287 }
288 }
289}
290
291#define SLIMBUS_EXTPROC_RX AFE_PORT_INVALID
292struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = {
293 { PRIMARY_I2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_PRI_I2S_RX},
294 { PRIMARY_I2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_PRI_I2S_TX},
295 { SLIMBUS_0_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_0_RX},
296 { SLIMBUS_0_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_0_TX},
297 { HDMI_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_HDMI},
298 { INT_BT_SCO_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_INT_BT_SCO_RX},
299 { INT_BT_SCO_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_INT_BT_SCO_TX},
300 { INT_FM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_INT_FM_RX},
301 { INT_FM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_INT_FM_TX},
302 { RT_PROXY_PORT_001_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
303 LPASS_BE_AFE_PCM_RX},
304 { RT_PROXY_PORT_001_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
305 LPASS_BE_AFE_PCM_TX},
306 { AFE_PORT_ID_PRIMARY_PCM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
307 LPASS_BE_AUXPCM_RX},
308 { AFE_PORT_ID_PRIMARY_PCM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
309 LPASS_BE_AUXPCM_TX},
310 { VOICE_PLAYBACK_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
311 LPASS_BE_VOICE_PLAYBACK_TX},
312 { VOICE2_PLAYBACK_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
313 LPASS_BE_VOICE2_PLAYBACK_TX},
314 { VOICE_RECORD_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
315 LPASS_BE_INCALL_RECORD_RX},
316 { VOICE_RECORD_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
317 LPASS_BE_INCALL_RECORD_TX},
318 { MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_MI2S_RX},
319 { MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_MI2S_TX},
320 { SECONDARY_I2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SEC_I2S_RX},
321 { SLIMBUS_1_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_1_RX},
322 { SLIMBUS_1_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_1_TX},
323 { SLIMBUS_2_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_2_RX},
324 { SLIMBUS_2_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_2_TX},
325 { SLIMBUS_3_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_3_RX},
326 { SLIMBUS_3_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_3_TX},
327 { SLIMBUS_4_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_4_RX},
328 { SLIMBUS_4_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_4_TX},
329 { SLIMBUS_5_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_5_RX},
330 { SLIMBUS_5_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_5_TX},
331 { SLIMBUS_6_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_6_RX},
332 { SLIMBUS_6_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_6_TX},
333 { SLIMBUS_7_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_7_RX},
334 { SLIMBUS_7_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_7_TX},
335 { SLIMBUS_8_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_8_RX},
336 { SLIMBUS_8_TX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_SLIMBUS_8_TX},
337 { SLIMBUS_EXTPROC_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_STUB_RX},
338 { SLIMBUS_EXTPROC_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_STUB_TX},
339 { SLIMBUS_EXTPROC_RX, 0, {0}, {0}, 0, 0, 0, 0, {0}, LPASS_BE_STUB_1_TX},
340 { AFE_PORT_ID_QUATERNARY_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
341 LPASS_BE_QUAT_MI2S_RX},
342 { AFE_PORT_ID_QUATERNARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
343 LPASS_BE_QUAT_MI2S_TX},
344 { AFE_PORT_ID_SECONDARY_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
345 LPASS_BE_SEC_MI2S_RX},
346 { AFE_PORT_ID_SECONDARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
347 LPASS_BE_SEC_MI2S_TX},
348 { AFE_PORT_ID_PRIMARY_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
349 LPASS_BE_PRI_MI2S_RX},
350 { AFE_PORT_ID_PRIMARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
351 LPASS_BE_PRI_MI2S_TX},
352 { AFE_PORT_ID_TERTIARY_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
353 LPASS_BE_TERT_MI2S_RX},
354 { AFE_PORT_ID_TERTIARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
355 LPASS_BE_TERT_MI2S_TX},
356 { AUDIO_PORT_ID_I2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
357 LPASS_BE_AUDIO_I2S_RX},
358 { AFE_PORT_ID_SECONDARY_PCM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
359 LPASS_BE_SEC_AUXPCM_RX},
360 { AFE_PORT_ID_SECONDARY_PCM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
361 LPASS_BE_SEC_AUXPCM_TX},
362 { AFE_PORT_ID_SPDIF_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
363 LPASS_BE_SPDIF_RX},
364 { AFE_PORT_ID_SECONDARY_MI2S_RX_SD1, 0, {0}, {0}, 0, 0, 0, 0, {0},
365 LPASS_BE_SEC_MI2S_RX_SD1},
366 { AFE_PORT_ID_QUINARY_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
367 LPASS_BE_QUIN_MI2S_RX},
368 { AFE_PORT_ID_QUINARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
369 LPASS_BE_QUIN_MI2S_TX},
370 { AFE_PORT_ID_SENARY_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
371 LPASS_BE_SENARY_MI2S_TX},
372 { AFE_PORT_ID_PRIMARY_TDM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
373 LPASS_BE_PRI_TDM_RX_0},
374 { AFE_PORT_ID_PRIMARY_TDM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
375 LPASS_BE_PRI_TDM_TX_0},
376 { AFE_PORT_ID_PRIMARY_TDM_RX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
377 LPASS_BE_PRI_TDM_RX_1},
378 { AFE_PORT_ID_PRIMARY_TDM_TX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
379 LPASS_BE_PRI_TDM_TX_1},
380 { AFE_PORT_ID_PRIMARY_TDM_RX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
381 LPASS_BE_PRI_TDM_RX_2},
382 { AFE_PORT_ID_PRIMARY_TDM_TX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
383 LPASS_BE_PRI_TDM_TX_2},
384 { AFE_PORT_ID_PRIMARY_TDM_RX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
385 LPASS_BE_PRI_TDM_RX_3},
386 { AFE_PORT_ID_PRIMARY_TDM_TX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
387 LPASS_BE_PRI_TDM_TX_3},
388 { AFE_PORT_ID_PRIMARY_TDM_RX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
389 LPASS_BE_PRI_TDM_RX_4},
390 { AFE_PORT_ID_PRIMARY_TDM_TX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
391 LPASS_BE_PRI_TDM_TX_4},
392 { AFE_PORT_ID_PRIMARY_TDM_RX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
393 LPASS_BE_PRI_TDM_RX_5},
394 { AFE_PORT_ID_PRIMARY_TDM_TX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
395 LPASS_BE_PRI_TDM_TX_5},
396 { AFE_PORT_ID_PRIMARY_TDM_RX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
397 LPASS_BE_PRI_TDM_RX_6},
398 { AFE_PORT_ID_PRIMARY_TDM_TX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
399 LPASS_BE_PRI_TDM_TX_6},
400 { AFE_PORT_ID_PRIMARY_TDM_RX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
401 LPASS_BE_PRI_TDM_RX_7},
402 { AFE_PORT_ID_PRIMARY_TDM_TX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
403 LPASS_BE_PRI_TDM_TX_7},
404 { AFE_PORT_ID_SECONDARY_TDM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
405 LPASS_BE_SEC_TDM_RX_0},
406 { AFE_PORT_ID_SECONDARY_TDM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
407 LPASS_BE_SEC_TDM_TX_0},
408 { AFE_PORT_ID_SECONDARY_TDM_RX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
409 LPASS_BE_SEC_TDM_RX_1},
410 { AFE_PORT_ID_SECONDARY_TDM_TX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
411 LPASS_BE_SEC_TDM_TX_1},
412 { AFE_PORT_ID_SECONDARY_TDM_RX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
413 LPASS_BE_SEC_TDM_RX_2},
414 { AFE_PORT_ID_SECONDARY_TDM_TX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
415 LPASS_BE_SEC_TDM_TX_2},
416 { AFE_PORT_ID_SECONDARY_TDM_RX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
417 LPASS_BE_SEC_TDM_RX_3},
418 { AFE_PORT_ID_SECONDARY_TDM_TX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
419 LPASS_BE_SEC_TDM_TX_3},
420 { AFE_PORT_ID_SECONDARY_TDM_RX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
421 LPASS_BE_SEC_TDM_RX_4},
422 { AFE_PORT_ID_SECONDARY_TDM_TX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
423 LPASS_BE_SEC_TDM_TX_4},
424 { AFE_PORT_ID_SECONDARY_TDM_RX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
425 LPASS_BE_SEC_TDM_RX_5},
426 { AFE_PORT_ID_SECONDARY_TDM_TX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
427 LPASS_BE_SEC_TDM_TX_5},
428 { AFE_PORT_ID_SECONDARY_TDM_RX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
429 LPASS_BE_SEC_TDM_RX_6},
430 { AFE_PORT_ID_SECONDARY_TDM_TX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
431 LPASS_BE_SEC_TDM_TX_6},
432 { AFE_PORT_ID_SECONDARY_TDM_RX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
433 LPASS_BE_SEC_TDM_RX_7},
434 { AFE_PORT_ID_SECONDARY_TDM_TX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
435 LPASS_BE_SEC_TDM_TX_7},
436 { AFE_PORT_ID_TERTIARY_TDM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
437 LPASS_BE_TERT_TDM_RX_0},
438 { AFE_PORT_ID_TERTIARY_TDM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
439 LPASS_BE_TERT_TDM_TX_0},
440 { AFE_PORT_ID_TERTIARY_TDM_RX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
441 LPASS_BE_TERT_TDM_RX_1},
442 { AFE_PORT_ID_TERTIARY_TDM_TX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
443 LPASS_BE_TERT_TDM_TX_1},
444 { AFE_PORT_ID_TERTIARY_TDM_RX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
445 LPASS_BE_TERT_TDM_RX_2},
446 { AFE_PORT_ID_TERTIARY_TDM_TX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
447 LPASS_BE_TERT_TDM_TX_2},
448 { AFE_PORT_ID_TERTIARY_TDM_RX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
449 LPASS_BE_TERT_TDM_RX_3},
450 { AFE_PORT_ID_TERTIARY_TDM_TX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
451 LPASS_BE_TERT_TDM_TX_3},
452 { AFE_PORT_ID_TERTIARY_TDM_RX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
453 LPASS_BE_TERT_TDM_RX_4},
454 { AFE_PORT_ID_TERTIARY_TDM_TX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
455 LPASS_BE_TERT_TDM_TX_4},
456 { AFE_PORT_ID_TERTIARY_TDM_RX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
457 LPASS_BE_TERT_TDM_RX_5},
458 { AFE_PORT_ID_TERTIARY_TDM_TX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
459 LPASS_BE_TERT_TDM_TX_5},
460 { AFE_PORT_ID_TERTIARY_TDM_RX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
461 LPASS_BE_TERT_TDM_RX_6},
462 { AFE_PORT_ID_TERTIARY_TDM_TX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
463 LPASS_BE_TERT_TDM_TX_6},
464 { AFE_PORT_ID_TERTIARY_TDM_RX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
465 LPASS_BE_TERT_TDM_RX_7},
466 { AFE_PORT_ID_TERTIARY_TDM_TX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
467 LPASS_BE_TERT_TDM_TX_7},
468 { AFE_PORT_ID_QUATERNARY_TDM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
469 LPASS_BE_QUAT_TDM_RX_0},
470 { AFE_PORT_ID_QUATERNARY_TDM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
471 LPASS_BE_QUAT_TDM_TX_0},
472 { AFE_PORT_ID_QUATERNARY_TDM_RX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
473 LPASS_BE_QUAT_TDM_RX_1},
474 { AFE_PORT_ID_QUATERNARY_TDM_TX_1, 0, {0}, {0}, 0, 0, 0, 0, {0},
475 LPASS_BE_QUAT_TDM_TX_1},
476 { AFE_PORT_ID_QUATERNARY_TDM_RX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
477 LPASS_BE_QUAT_TDM_RX_2},
478 { AFE_PORT_ID_QUATERNARY_TDM_TX_2, 0, {0}, {0}, 0, 0, 0, 0, {0},
479 LPASS_BE_QUAT_TDM_TX_2},
480 { AFE_PORT_ID_QUATERNARY_TDM_RX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
481 LPASS_BE_QUAT_TDM_RX_3},
482 { AFE_PORT_ID_QUATERNARY_TDM_TX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
483 LPASS_BE_QUAT_TDM_TX_3},
484 { AFE_PORT_ID_QUATERNARY_TDM_RX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
485 LPASS_BE_QUAT_TDM_RX_4},
486 { AFE_PORT_ID_QUATERNARY_TDM_TX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
487 LPASS_BE_QUAT_TDM_TX_4},
488 { AFE_PORT_ID_QUATERNARY_TDM_RX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
489 LPASS_BE_QUAT_TDM_RX_5},
490 { AFE_PORT_ID_QUATERNARY_TDM_TX_5, 0, {0}, {0}, 0, 0, 0, 0, {0},
491 LPASS_BE_QUAT_TDM_TX_5},
492 { AFE_PORT_ID_QUATERNARY_TDM_RX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
493 LPASS_BE_QUAT_TDM_RX_6},
494 { AFE_PORT_ID_QUATERNARY_TDM_TX_6, 0, {0}, {0}, 0, 0, 0, 0, {0},
495 LPASS_BE_QUAT_TDM_TX_6},
496 { AFE_PORT_ID_QUATERNARY_TDM_RX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
497 LPASS_BE_QUAT_TDM_RX_7},
498 { AFE_PORT_ID_QUATERNARY_TDM_TX_7, 0, {0}, {0}, 0, 0, 0, 0, {0},
499 LPASS_BE_QUAT_TDM_TX_7},
500 { INT_BT_A2DP_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
501 LPASS_BE_INT_BT_A2DP_RX},
502 { AFE_PORT_ID_USB_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
503 LPASS_BE_USB_AUDIO_RX},
504 { AFE_PORT_ID_USB_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
505 LPASS_BE_USB_AUDIO_TX},
506 { DISPLAY_PORT_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
507 LPASS_BE_DISPLAY_PORT},
508 { AFE_PORT_ID_TERTIARY_PCM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
509 LPASS_BE_TERT_AUXPCM_RX},
510 { AFE_PORT_ID_TERTIARY_PCM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
511 LPASS_BE_TERT_AUXPCM_TX},
512 { AFE_PORT_ID_QUATERNARY_PCM_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
513 LPASS_BE_QUAT_AUXPCM_RX},
514 { AFE_PORT_ID_QUATERNARY_PCM_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
515 LPASS_BE_QUAT_AUXPCM_TX},
516 { AFE_PORT_ID_INT0_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
517 LPASS_BE_INT0_MI2S_RX},
518 { AFE_PORT_ID_INT0_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
519 LPASS_BE_INT0_MI2S_TX},
520 { AFE_PORT_ID_INT1_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
521 LPASS_BE_INT1_MI2S_RX},
522 { AFE_PORT_ID_INT1_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
523 LPASS_BE_INT1_MI2S_TX},
524 { AFE_PORT_ID_INT2_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
525 LPASS_BE_INT2_MI2S_RX},
526 { AFE_PORT_ID_INT2_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
527 LPASS_BE_INT2_MI2S_TX},
528 { AFE_PORT_ID_INT3_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
529 LPASS_BE_INT3_MI2S_RX},
530 { AFE_PORT_ID_INT3_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
531 LPASS_BE_INT3_MI2S_TX},
532 { AFE_PORT_ID_INT4_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
533 LPASS_BE_INT4_MI2S_RX},
534 { AFE_PORT_ID_INT4_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
535 LPASS_BE_INT4_MI2S_TX},
536 { AFE_PORT_ID_INT5_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
537 LPASS_BE_INT5_MI2S_RX},
538 { AFE_PORT_ID_INT5_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
539 LPASS_BE_INT5_MI2S_TX},
540 { AFE_PORT_ID_INT6_MI2S_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
541 LPASS_BE_INT6_MI2S_RX},
542 { AFE_PORT_ID_INT6_MI2S_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
543 LPASS_BE_INT6_MI2S_TX},
544};
545
546/* Track ASM playback & capture sessions of DAI
547 * Track LSM listen sessions
548 */
549static struct msm_pcm_routing_fdai_data
550 fe_dai_map[MSM_FRONTEND_DAI_MAX][2] = {
551 /* MULTIMEDIA1 */
552 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
553 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
554 /* MULTIMEDIA2 */
555 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
556 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
557 /* MULTIMEDIA3 */
558 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
559 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
560 /* MULTIMEDIA4 */
561 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
562 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
563 /* MULTIMEDIA5 */
564 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
565 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
566 /* MULTIMEDIA6 */
567 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
568 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
569 /* MULTIMEDIA7*/
570 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
571 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
572 /* MULTIMEDIA8 */
573 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
574 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
575 /* MULTIMEDIA9 */
576 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
577 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
578 /* MULTIMEDIA10 */
579 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
580 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
581 /* MULTIMEDIA11 */
582 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
583 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
584 /* MULTIMEDIA12 */
585 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
586 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
587 /* MULTIMEDIA13 */
588 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
589 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
590 /* MULTIMEDIA14 */
591 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
592 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
593 /* MULTIMEDIA15 */
594 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
595 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
596 /* MULTIMEDIA16 */
597 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
598 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
599 /* MULTIMEDIA17 */
600 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
601 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
602 /* MULTIMEDIA18 */
603 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
604 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
605 /* MULTIMEDIA19 */
606 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
607 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
608 /* MULTIMEDIA20 */
609 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
610 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
611 /* CS_VOICE */
612 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
613 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
614 /* VOIP */
615 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
616 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
617 /* AFE_RX */
618 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
619 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
620 /* AFE_TX */
621 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
622 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
623 /* VOICE_STUB */
624 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
625 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
626 /* VOLTE */
627 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
628 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
629 /* DTMF_RX */
630 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
631 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
632 /* VOICE2 */
633 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
634 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
635 /* QCHAT */
636 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
637 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
638 /* VOLTE_STUB */
639 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
640 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
641 /* LSM1 */
642 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
643 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
644 /* LSM2 */
645 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
646 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
647 /* LSM3 */
648 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
649 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
650 /* LSM4 */
651 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
652 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
653 /* LSM5 */
654 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
655 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
656 /* LSM6 */
657 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
658 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
659 /* LSM7 */
660 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
661 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
662 /* LSM8 */
663 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
664 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
665 /* VOICE2_STUB */
666 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
667 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
668 /* VOWLAN */
669 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
670 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
671 /* VOICEMMODE1 */
672 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
673 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
674 /* VOICEMMODE2 */
675 {{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
676 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
677};
678
679static unsigned long session_copp_map[MSM_FRONTEND_DAI_MAX][2]
680 [MSM_BACKEND_DAI_MAX];
681static struct msm_pcm_routing_app_type_data app_type_cfg[MAX_APP_TYPES];
682static struct msm_pcm_routing_app_type_data lsm_app_type_cfg[MAX_APP_TYPES];
683static struct msm_pcm_stream_app_type_cfg
684 fe_dai_app_type_cfg[MSM_FRONTEND_DAI_MAX][2][MSM_BACKEND_DAI_MAX];
685
686static int last_be_id_configured[MSM_FRONTEND_DAI_MAX][MAX_SESSION_TYPES];
687
688/* The caller of this should aqcuire routing lock */
689void msm_pcm_routing_get_bedai_info(int be_idx,
690 struct msm_pcm_routing_bdai_data *be_dai)
691{
692 if (be_idx >= 0 && be_idx < MSM_BACKEND_DAI_MAX)
693 memcpy(be_dai, &msm_bedais[be_idx],
694 sizeof(struct msm_pcm_routing_bdai_data));
695}
696
697/* The caller of this should aqcuire routing lock */
698void msm_pcm_routing_get_fedai_info(int fe_idx, int sess_type,
699 struct msm_pcm_routing_fdai_data *fe_dai)
700{
701 if ((sess_type == SESSION_TYPE_TX) || (sess_type == SESSION_TYPE_RX))
702 memcpy(fe_dai, &fe_dai_map[fe_idx][sess_type],
703 sizeof(struct msm_pcm_routing_fdai_data));
704}
705
706void msm_pcm_routing_acquire_lock(void)
707{
708 mutex_lock(&routing_lock);
709}
710
711void msm_pcm_routing_release_lock(void)
712{
713 mutex_unlock(&routing_lock);
714}
715
716static int msm_pcm_routing_get_app_type_idx(int app_type)
717{
718 int idx;
719
720 pr_debug("%s: app_type: %d\n", __func__, app_type);
721 for (idx = 0; idx < MAX_APP_TYPES; idx++) {
722 if (app_type_cfg[idx].app_type == app_type)
723 return idx;
724 }
725 pr_info("%s: App type not available, fallback to default\n", __func__);
726 return 0;
727}
728
729static int msm_pcm_routing_get_lsm_app_type_idx(int app_type)
730{
731 int idx;
732
733 pr_debug("%s: app_type: %d\n", __func__, app_type);
734 for (idx = 0; idx < MAX_APP_TYPES; idx++) {
735 if (lsm_app_type_cfg[idx].app_type == app_type)
736 return idx;
737 }
738 pr_debug("%s: App type not available, fallback to default\n", __func__);
739 return 0;
740}
741
742static bool is_mm_lsm_fe_id(int fe_id)
743{
744 bool rc = true;
745
746 if (fe_id > MSM_FRONTEND_DAI_MM_MAX_ID &&
747 ((fe_id < MSM_FRONTEND_DAI_LSM1) ||
748 (fe_id > MSM_FRONTEND_DAI_LSM8))) {
749 rc = false;
750 }
751 return rc;
752}
753
754int msm_pcm_routing_reg_stream_app_type_cfg(
755 int fedai_id, int session_type, int be_id,
756 struct msm_pcm_stream_app_type_cfg *cfg_data)
757{
758 int ret = 0;
759
760 if (cfg_data == NULL) {
761 pr_err("%s: Received NULL pointer for cfg_data\n", __func__);
762 ret = -EINVAL;
763 goto done;
764 }
765
766 pr_debug("%s: fedai_id %d, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n",
767 __func__, fedai_id, session_type, be_id,
768 cfg_data->app_type, cfg_data->acdb_dev_id,
769 cfg_data->sample_rate);
770
771 if (!is_mm_lsm_fe_id(fedai_id)) {
772 pr_err("%s: Invalid machine driver ID %d\n",
773 __func__, fedai_id);
774 ret = -EINVAL;
775 goto done;
776 }
777 if (session_type != SESSION_TYPE_RX &&
778 session_type != SESSION_TYPE_TX) {
779 pr_err("%s: Invalid session type %d\n",
780 __func__, session_type);
781 ret = -EINVAL;
782 goto done;
783 }
784 if (be_id < 0 || be_id >= MSM_BACKEND_DAI_MAX) {
785 pr_err("%s: Received out of bounds be_id %d\n",
786 __func__, be_id);
787 ret = -EINVAL;
788 goto done;
789 }
790
791 fe_dai_app_type_cfg[fedai_id][session_type][be_id] = *cfg_data;
792
793 /*
794 * Store the BE ID of the configuration information set as the latest so
795 * the get mixer control knows what to return.
796 */
797 last_be_id_configured[fedai_id][session_type] = be_id;
798
799done:
800 return ret;
801}
802EXPORT_SYMBOL(msm_pcm_routing_reg_stream_app_type_cfg);
803
804/**
805 * msm_pcm_routing_get_stream_app_type_cfg
806 *
807 * Receives fedai_id, session_type, be_id, and populates app_type,
808 * acdb_dev_id, & sample rate. Returns 0 on success. On failure returns
809 * -EINVAL and does not alter passed values.
810 *
811 * fedai_id - Passed value, front end ID for which app type config is wanted
812 * session_type - Passed value, session type for which app type config
813 * is wanted
814 * be_id - Returned value, back end device id the app type config data is for
815 * cfg_data - Returned value, configuration data used by app type config
816 */
817int msm_pcm_routing_get_stream_app_type_cfg(
818 int fedai_id, int session_type, int *bedai_id,
819 struct msm_pcm_stream_app_type_cfg *cfg_data)
820{
821 int be_id;
822 int ret = 0;
823
824 if (bedai_id == NULL) {
825 pr_err("%s: Received NULL pointer for backend ID\n", __func__);
826 ret = -EINVAL;
827 goto done;
828 } else if (cfg_data == NULL) {
829 pr_err("%s: NULL pointer sent for cfg_data\n", __func__);
830 ret = -EINVAL;
831 goto done;
832 } else if (!is_mm_lsm_fe_id(fedai_id)) {
833 pr_err("%s: Invalid FE ID %d\n", __func__, fedai_id);
834 ret = -EINVAL;
835 goto done;
836 } else if (session_type != SESSION_TYPE_RX &&
837 session_type != SESSION_TYPE_TX) {
838 pr_err("%s: Invalid session type %d\n", __func__, session_type);
839 ret = -EINVAL;
840 goto done;
841 }
842
843 be_id = last_be_id_configured[fedai_id][session_type];
844 if (be_id < 0 || be_id >= MSM_BACKEND_DAI_MAX) {
845 pr_err("%s: Invalid BE ID %d\n", __func__, be_id);
846 ret = -EINVAL;
847 goto done;
848 }
849
850 *bedai_id = be_id;
851 *cfg_data = fe_dai_app_type_cfg[fedai_id][session_type][be_id];
852 pr_debug("%s: fedai_id %d, session_type %d, be_id %d, app_type %d, acdb_dev_id %d, sample_rate %d\n",
853 __func__, fedai_id, session_type, *bedai_id,
854 cfg_data->app_type, cfg_data->acdb_dev_id,
855 cfg_data->sample_rate);
856done:
857 return ret;
858}
859EXPORT_SYMBOL(msm_pcm_routing_get_stream_app_type_cfg);
860
861static struct cal_block_data *msm_routing_find_topology_by_path(int path)
862{
863 struct list_head *ptr, *next;
864 struct cal_block_data *cal_block = NULL;
865
866 pr_debug("%s\n", __func__);
867
868 list_for_each_safe(ptr, next,
869 &cal_data->cal_blocks) {
870
871 cal_block = list_entry(ptr,
872 struct cal_block_data, list);
873
874 if (((struct audio_cal_info_adm_top *)cal_block->cal_info)
875 ->path == path) {
876 return cal_block;
877 }
878 }
879 pr_debug("%s: Can't find topology for path %d\n", __func__, path);
880 return NULL;
881}
882
883static struct cal_block_data *msm_routing_find_topology(int path,
884 int app_type,
885 int acdb_id)
886{
887 struct list_head *ptr, *next;
888 struct cal_block_data *cal_block = NULL;
889 struct audio_cal_info_adm_top *cal_info;
890
891 pr_debug("%s\n", __func__);
892
893 list_for_each_safe(ptr, next,
894 &cal_data->cal_blocks) {
895
896 cal_block = list_entry(ptr,
897 struct cal_block_data, list);
898
899 cal_info = (struct audio_cal_info_adm_top *)
900 cal_block->cal_info;
901 if ((cal_info->path == path) &&
902 (cal_info->app_type == app_type) &&
903 (cal_info->acdb_id == acdb_id)) {
904 return cal_block;
905 }
906 }
907 pr_debug("%s: Can't find topology for path %d, app %d, acdb_id %d defaulting to search by path\n",
908 __func__, path, app_type, acdb_id);
909 return msm_routing_find_topology_by_path(path);
910}
911
912static int msm_routing_get_adm_topology(int fedai_id, int session_type,
913 int be_id)
914{
915 int topology = NULL_COPP_TOPOLOGY;
916 struct cal_block_data *cal_block = NULL;
917 int app_type = 0, acdb_dev_id = 0;
918
919
920 pr_debug("%s: fedai_id %d, session_type %d, be_id %d\n",
921 __func__, fedai_id, session_type, be_id);
922
923 if (cal_data == NULL)
924 goto done;
925
926 mutex_lock(&cal_data->lock);
927
928 app_type = fe_dai_app_type_cfg[fedai_id][session_type][be_id].app_type;
929 acdb_dev_id =
930 fe_dai_app_type_cfg[fedai_id][session_type][be_id].acdb_dev_id;
931
932 cal_block = msm_routing_find_topology(session_type, app_type,
933 acdb_dev_id);
934 if (cal_block == NULL)
935 goto unlock;
936
937 topology = ((struct audio_cal_info_adm_top *)
938 cal_block->cal_info)->topology;
939unlock:
940 mutex_unlock(&cal_data->lock);
941done:
942 pr_debug("%s: Using topology %d\n", __func__, topology);
943 return topology;
944}
945
946static uint8_t is_be_dai_extproc(int be_dai)
947{
948 if (be_dai == MSM_BACKEND_DAI_EXTPROC_RX ||
949 be_dai == MSM_BACKEND_DAI_EXTPROC_TX ||
950 be_dai == MSM_BACKEND_DAI_EXTPROC_EC_TX)
951 return 1;
952 else
953 return 0;
954}
955
956static void msm_pcm_routing_build_matrix(int fedai_id, int sess_type,
957 int path_type, int perf_mode,
958 uint32_t passthr_mode)
959{
960 int i, port_type, j, num_copps = 0;
961 struct route_payload payload;
962
963 port_type = ((path_type == ADM_PATH_PLAYBACK ||
964 path_type == ADM_PATH_COMPRESSED_RX) ?
965 MSM_AFE_PORT_TYPE_RX : MSM_AFE_PORT_TYPE_TX);
966
967 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
968 if (!is_be_dai_extproc(i) &&
969 (afe_get_port_type(msm_bedais[i].port_id) == port_type) &&
970 (msm_bedais[i].active) &&
971 (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))) {
972 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
973 unsigned long copp =
974 session_copp_map[fedai_id][sess_type][i];
975 if (test_bit(j, &copp)) {
976 payload.port_id[num_copps] =
977 msm_bedais[i].port_id;
978 payload.copp_idx[num_copps] = j;
979 payload.app_type[num_copps] =
980 fe_dai_app_type_cfg
981 [fedai_id][sess_type][i]
982 .app_type;
983 payload.acdb_dev_id[num_copps] =
984 fe_dai_app_type_cfg
985 [fedai_id][sess_type][i]
986 .acdb_dev_id;
987 payload.sample_rate[num_copps] =
988 fe_dai_app_type_cfg
989 [fedai_id][sess_type][i]
990 .sample_rate;
991 num_copps++;
992 }
993 }
994 }
995 }
996
997 if (num_copps) {
998 payload.num_copps = num_copps;
999 payload.session_id = fe_dai_map[fedai_id][sess_type].strm_id;
1000 adm_matrix_map(path_type, payload, perf_mode, passthr_mode);
1001 msm_pcm_routng_cfg_matrix_map_pp(payload, path_type, perf_mode);
1002 }
1003}
1004
1005void msm_pcm_routing_reg_psthr_stream(int fedai_id, int dspst_id,
1006 int stream_type)
1007{
1008 int i, session_type, path_type, port_type;
1009 u32 mode = 0;
1010
1011 if (fedai_id > MSM_FRONTEND_DAI_MM_MAX_ID) {
1012 /* bad ID assigned in machine driver */
1013 pr_err("%s: bad MM ID\n", __func__);
1014 return;
1015 }
1016
1017 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK) {
1018 session_type = SESSION_TYPE_RX;
1019 path_type = ADM_PATH_PLAYBACK;
1020 port_type = MSM_AFE_PORT_TYPE_RX;
1021 } else {
1022 session_type = SESSION_TYPE_TX;
1023 path_type = ADM_PATH_LIVE_REC;
1024 port_type = MSM_AFE_PORT_TYPE_TX;
1025 }
1026
1027 mutex_lock(&routing_lock);
1028
1029 fe_dai_map[fedai_id][session_type].strm_id = dspst_id;
1030 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
1031 if (!is_be_dai_extproc(i) &&
1032 (afe_get_port_type(msm_bedais[i].port_id) == port_type) &&
1033 (msm_bedais[i].active) &&
1034 (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))) {
1035 mode = afe_get_port_type(msm_bedais[i].port_id);
1036 adm_connect_afe_port(mode, dspst_id,
1037 msm_bedais[i].port_id);
1038 break;
1039 }
1040 }
1041 mutex_unlock(&routing_lock);
1042}
1043
1044static bool route_check_fe_id_adm_support(int fe_id)
1045{
1046 bool rc = true;
1047
1048 if ((fe_id >= MSM_FRONTEND_DAI_LSM1) &&
1049 (fe_id <= MSM_FRONTEND_DAI_LSM8)) {
1050 /* fe id is listen while port is set to afe */
1051 if (lsm_port_index != ADM_LSM_PORT_INDEX) {
1052 pr_debug("%s: fe_id %d, lsm mux slim port %d\n",
1053 __func__, fe_id, lsm_port_index);
1054 rc = false;
1055 }
1056 }
1057
1058 return rc;
1059}
1060
1061int msm_pcm_routing_reg_phy_compr_stream(int fe_id, int perf_mode,
1062 int dspst_id, int stream_type,
1063 uint32_t passthr_mode)
1064{
1065 int i, j, session_type, path_type, port_type, topology;
1066 int num_copps = 0;
1067 struct route_payload payload;
1068 u32 channels, sample_rate;
1069 u16 bit_width = 16;
1070 bool is_lsm;
1071
1072 pr_debug("%s:fe_id[%d] perf_mode[%d] id[%d] stream_type[%d] passt[%d]",
1073 __func__, fe_id, perf_mode, dspst_id,
1074 stream_type, passthr_mode);
1075 if (!is_mm_lsm_fe_id(fe_id)) {
1076 /* bad ID assigned in machine driver */
1077 pr_err("%s: bad MM ID %d\n", __func__, fe_id);
1078 return -EINVAL;
1079 }
1080
1081 if (!route_check_fe_id_adm_support(fe_id)) {
1082 /* ignore adm open if not supported for fe_id */
1083 pr_debug("%s: No ADM support for fe id %d\n", __func__, fe_id);
1084 return 0;
1085 }
1086
1087 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK) {
1088 session_type = SESSION_TYPE_RX;
1089 if (passthr_mode != LEGACY_PCM)
1090 path_type = ADM_PATH_COMPRESSED_RX;
1091 else
1092 path_type = ADM_PATH_PLAYBACK;
1093 port_type = MSM_AFE_PORT_TYPE_RX;
1094 } else if (stream_type == SNDRV_PCM_STREAM_CAPTURE) {
1095 session_type = SESSION_TYPE_TX;
1096 if (passthr_mode != LEGACY_PCM)
1097 path_type = ADM_PATH_COMPRESSED_TX;
1098 else
1099 path_type = ADM_PATH_LIVE_REC;
1100 port_type = MSM_AFE_PORT_TYPE_TX;
1101 } else {
1102 pr_err("%s: invalid stream type %d\n", __func__, stream_type);
1103 return -EINVAL;
1104 }
1105
1106 is_lsm = (fe_id >= MSM_FRONTEND_DAI_LSM1) &&
1107 (fe_id <= MSM_FRONTEND_DAI_LSM8);
1108 mutex_lock(&routing_lock);
1109
1110 payload.num_copps = 0; /* only RX needs to use payload */
1111 fe_dai_map[fe_id][session_type].strm_id = dspst_id;
1112 /* re-enable EQ if active */
1113 msm_qti_pp_send_eq_values(fe_id);
1114 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
1115 if (test_bit(fe_id, &msm_bedais[i].fe_sessions[0]))
1116 msm_bedais[i].passthr_mode[fe_id] = passthr_mode;
1117
1118 if (!is_be_dai_extproc(i) &&
1119 (afe_get_port_type(msm_bedais[i].port_id) ==
1120 port_type) &&
1121 (msm_bedais[i].active) &&
1122 (test_bit(fe_id, &msm_bedais[i].fe_sessions[0]))) {
1123 int app_type, app_type_idx, copp_idx, acdb_dev_id;
1124
1125 /*
1126 * check if ADM needs to be configured with different
1127 * channel mapping than backend
1128 */
1129 if (!msm_bedais[i].adm_override_ch)
1130 channels = msm_bedais[i].channel;
1131 else
1132 channels = msm_bedais[i].adm_override_ch;
1133
1134 bit_width = msm_routing_get_bit_width(
1135 msm_bedais[i].format);
1136 app_type =
1137 fe_dai_app_type_cfg[fe_id][session_type][i].app_type;
1138 if (app_type && is_lsm) {
1139 app_type_idx =
1140 msm_pcm_routing_get_lsm_app_type_idx(app_type);
1141 sample_rate =
1142 fe_dai_app_type_cfg[fe_id][session_type][i]
1143 .sample_rate;
1144 bit_width =
1145 lsm_app_type_cfg[app_type_idx].bit_width;
1146 } else if (app_type) {
1147 app_type_idx =
1148 msm_pcm_routing_get_app_type_idx(
1149 app_type);
1150 sample_rate =
1151 fe_dai_app_type_cfg[fe_id][session_type][i].sample_rate;
1152 bit_width =
1153 app_type_cfg[app_type_idx].bit_width;
1154 } else {
1155 sample_rate = msm_bedais[i].sample_rate;
1156 }
1157 acdb_dev_id =
1158 fe_dai_app_type_cfg[fe_id][session_type][i].acdb_dev_id;
1159 topology = msm_routing_get_adm_topology(fe_id,
1160 session_type,
1161 i);
1162 if ((passthr_mode == COMPRESSED_PASSTHROUGH_DSD)
1163 || (passthr_mode ==
1164 COMPRESSED_PASSTHROUGH_GEN))
1165 topology = COMPRESSED_PASSTHROUGH_NONE_TOPOLOGY;
1166 pr_debug("%s: Before adm open topology %d\n", __func__,
1167 topology);
1168
1169 copp_idx =
1170 adm_open(msm_bedais[i].port_id,
1171 path_type, sample_rate, channels,
1172 topology, perf_mode, bit_width,
1173 app_type, acdb_dev_id);
1174 if ((copp_idx < 0) ||
1175 (copp_idx >= MAX_COPPS_PER_PORT)) {
1176 pr_err("%s:adm open failed coppid:%d\n",
1177 __func__, copp_idx);
1178 mutex_unlock(&routing_lock);
1179 return -EINVAL;
1180 }
1181 pr_debug("%s: set idx bit of fe:%d, type: %d, be:%d\n",
1182 __func__, fe_id, session_type, i);
1183 set_bit(copp_idx,
1184 &session_copp_map[fe_id][session_type][i]);
1185
1186 if (msm_is_resample_needed(
1187 sample_rate,
1188 msm_bedais[i].sample_rate))
1189 adm_copp_mfc_cfg(
1190 msm_bedais[i].port_id, copp_idx,
1191 msm_bedais[i].sample_rate);
1192
1193 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
1194 unsigned long copp =
1195 session_copp_map[fe_id][session_type][i];
1196 if (test_bit(j, &copp)) {
1197 payload.port_id[num_copps] =
1198 msm_bedais[i].port_id;
1199 payload.copp_idx[num_copps] = j;
1200 payload.app_type[num_copps] =
1201 fe_dai_app_type_cfg
1202 [fe_id][session_type][i]
1203 .app_type;
1204 payload.acdb_dev_id[num_copps] =
1205 fe_dai_app_type_cfg
1206 [fe_id][session_type][i]
1207 .acdb_dev_id;
1208 payload.sample_rate[num_copps] =
1209 fe_dai_app_type_cfg
1210 [fe_id][session_type][i]
1211 .sample_rate;
1212 num_copps++;
1213 }
1214 }
1215 if (passthr_mode != COMPRESSED_PASSTHROUGH_DSD
1216 && passthr_mode !=
1217 COMPRESSED_PASSTHROUGH_GEN) {
1218 msm_routing_send_device_pp_params(
1219 msm_bedais[i].port_id,
1220 copp_idx, fe_id);
1221 }
1222 }
1223 }
1224 if (num_copps) {
1225 payload.num_copps = num_copps;
1226 payload.session_id = fe_dai_map[fe_id][session_type].strm_id;
1227 adm_matrix_map(path_type, payload, perf_mode, passthr_mode);
1228 msm_pcm_routng_cfg_matrix_map_pp(payload, path_type, perf_mode);
1229 }
1230 mutex_unlock(&routing_lock);
1231 return 0;
1232}
1233
1234static u32 msm_pcm_routing_get_voc_sessionid(u16 val)
1235{
1236 u32 session_id;
1237
1238 switch (val) {
1239 case MSM_FRONTEND_DAI_CS_VOICE:
1240 session_id = voc_get_session_id(VOICE_SESSION_NAME);
1241 break;
1242 case MSM_FRONTEND_DAI_VOLTE:
1243 session_id = voc_get_session_id(VOLTE_SESSION_NAME);
1244 break;
1245 case MSM_FRONTEND_DAI_VOWLAN:
1246 session_id = voc_get_session_id(VOWLAN_SESSION_NAME);
1247 break;
1248 case MSM_FRONTEND_DAI_VOICE2:
1249 session_id = voc_get_session_id(VOICE2_SESSION_NAME);
1250 break;
1251 case MSM_FRONTEND_DAI_QCHAT:
1252 session_id = voc_get_session_id(QCHAT_SESSION_NAME);
1253 break;
1254 case MSM_FRONTEND_DAI_VOIP:
1255 session_id = voc_get_session_id(VOIP_SESSION_NAME);
1256 break;
1257 case MSM_FRONTEND_DAI_VOICEMMODE1:
1258 session_id = voc_get_session_id(VOICEMMODE1_NAME);
1259 break;
1260 case MSM_FRONTEND_DAI_VOICEMMODE2:
1261 session_id = voc_get_session_id(VOICEMMODE2_NAME);
1262 break;
1263 default:
1264 session_id = 0;
1265 }
1266
1267 pr_debug("%s session_id 0x%x", __func__, session_id);
1268 return session_id;
1269}
1270
1271static int msm_pcm_routing_channel_mixer(int fe_id, bool perf_mode,
1272 int dspst_id, int stream_type)
1273{
1274 int copp_idx = 0;
1275 int sess_type = 0;
1276 int i = 0, j = 0, be_id;
1277 int ret = 0;
1278
1279 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
1280 pr_err("%s: invalid FE %d\n", __func__, fe_id);
1281 return 0;
1282 }
1283
1284 if (!(channel_mixer[fe_id].enable)) {
1285 pr_debug("%s: channel mixer not enabled for FE %d\n",
1286 __func__, fe_id);
1287 return 0;
1288 }
1289
1290 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK)
1291 sess_type = SESSION_TYPE_RX;
1292 else
1293 sess_type = SESSION_TYPE_TX;
1294
1295 for (i = 0; i < ADM_MAX_CHANNELS && channel_input[fe_id][i] > 0;
1296 ++i) {
1297 be_id = channel_input[fe_id][i] - 1;
1298 channel_mixer[fe_id].input_channels[i] =
1299 msm_bedais[be_id].channel;
1300
1301 if ((msm_bedais[be_id].active) &&
1302 test_bit(fe_id,
1303 &msm_bedais[be_id].fe_sessions[0])) {
1304 unsigned long copp =
1305 session_copp_map[fe_id][sess_type][be_id];
1306 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
1307 if (test_bit(j, &copp)) {
1308 copp_idx = j;
1309 break;
1310 }
1311 }
1312
1313 pr_debug("%s: fe %d, be %d, channel %d, copp %d\n",
1314 __func__,
1315 fe_id, be_id, msm_bedais[be_id].channel,
1316 copp_idx);
1317 ret = adm_programable_channel_mixer(
1318 msm_bedais[be_id].port_id,
1319 copp_idx, dspst_id, sess_type,
1320 channel_mixer + fe_id, i);
1321 }
1322 }
1323
1324 return ret;
1325}
1326
1327int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode,
1328 int dspst_id, int stream_type)
1329{
1330 int i, j, session_type, path_type, port_type, topology, num_copps = 0;
1331 struct route_payload payload;
1332 u32 channels, sample_rate;
1333 uint16_t bits_per_sample = 16;
1334 uint32_t passthr_mode = LEGACY_PCM;
1335 int ret = 0;
1336
1337 if (fedai_id > MSM_FRONTEND_DAI_MM_MAX_ID) {
1338 /* bad ID assigned in machine driver */
1339 pr_err("%s: bad MM ID %d\n", __func__, fedai_id);
1340 return -EINVAL;
1341 }
1342
1343 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK) {
1344 session_type = SESSION_TYPE_RX;
1345 path_type = ADM_PATH_PLAYBACK;
1346 port_type = MSM_AFE_PORT_TYPE_RX;
1347 } else {
1348 session_type = SESSION_TYPE_TX;
1349 path_type = ADM_PATH_LIVE_REC;
1350 port_type = MSM_AFE_PORT_TYPE_TX;
1351 }
1352
1353 mutex_lock(&routing_lock);
1354
1355 payload.num_copps = 0; /* only RX needs to use payload */
1356 fe_dai_map[fedai_id][session_type].strm_id = dspst_id;
1357 fe_dai_map[fedai_id][session_type].perf_mode = perf_mode;
1358
1359 /* re-enable EQ if active */
1360 msm_qti_pp_send_eq_values(fedai_id);
1361 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
1362 if (!is_be_dai_extproc(i) &&
1363 (afe_get_port_type(msm_bedais[i].port_id) == port_type) &&
1364 (msm_bedais[i].active) &&
1365 (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))) {
1366 int app_type, app_type_idx, copp_idx, acdb_dev_id;
1367 /*
1368 * check if ADM needs to be configured with different
1369 * channel mapping than backend
1370 */
1371 if (!msm_bedais[i].adm_override_ch)
1372 channels = msm_bedais[i].channel;
1373 else
1374 channels = msm_bedais[i].adm_override_ch;
1375 msm_bedais[i].passthr_mode[fedai_id] =
1376 LEGACY_PCM;
1377
1378 bits_per_sample = msm_routing_get_bit_width(
1379 msm_bedais[i].format);
1380
1381 app_type =
1382 fe_dai_app_type_cfg[fedai_id][session_type][i].app_type;
1383 if (app_type) {
1384 app_type_idx =
1385 msm_pcm_routing_get_app_type_idx(app_type);
1386 sample_rate =
1387 fe_dai_app_type_cfg[fedai_id][session_type][i]
1388 .sample_rate;
1389 bits_per_sample =
1390 app_type_cfg[app_type_idx].bit_width;
1391 } else
1392 sample_rate = msm_bedais[i].sample_rate;
1393
1394 acdb_dev_id =
1395 fe_dai_app_type_cfg[fedai_id][session_type][i]
1396 .acdb_dev_id;
1397 topology = msm_routing_get_adm_topology(fedai_id,
1398 session_type,
1399 i);
1400 copp_idx = adm_open(msm_bedais[i].port_id, path_type,
1401 sample_rate, channels, topology,
1402 perf_mode, bits_per_sample,
1403 app_type, acdb_dev_id);
1404 if ((copp_idx < 0) ||
1405 (copp_idx >= MAX_COPPS_PER_PORT)) {
1406 pr_err("%s: adm open failed copp_idx:%d\n",
1407 __func__, copp_idx);
1408 mutex_unlock(&routing_lock);
1409 return -EINVAL;
1410 }
1411 pr_debug("%s: setting idx bit of fe:%d, type: %d, be:%d\n",
1412 __func__, fedai_id, session_type, i);
1413 set_bit(copp_idx,
1414 &session_copp_map[fedai_id][session_type][i]);
1415
1416 if (msm_is_resample_needed(
1417 sample_rate,
1418 msm_bedais[i].sample_rate))
1419 adm_copp_mfc_cfg(
1420 msm_bedais[i].port_id, copp_idx,
1421 msm_bedais[i].sample_rate);
1422
1423 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
1424 unsigned long copp =
1425 session_copp_map[fedai_id][session_type][i];
1426 if (test_bit(j, &copp)) {
1427 payload.port_id[num_copps] =
1428 msm_bedais[i].port_id;
1429 payload.copp_idx[num_copps] = j;
1430 payload.app_type[num_copps] =
1431 fe_dai_app_type_cfg
1432 [fedai_id][session_type]
1433 [i].app_type;
1434 payload.acdb_dev_id[num_copps] =
1435 fe_dai_app_type_cfg
1436 [fedai_id][session_type]
1437 [i].acdb_dev_id;
1438 payload.sample_rate[num_copps] =
1439 fe_dai_app_type_cfg
1440 [fedai_id][session_type]
1441 [i].sample_rate;
1442 num_copps++;
1443 }
1444 }
1445 if ((perf_mode == LEGACY_PCM_MODE) &&
1446 (msm_bedais[i].passthr_mode[fedai_id] ==
1447 LEGACY_PCM))
1448 msm_pcm_routing_cfg_pp(msm_bedais[i].port_id,
1449 copp_idx, topology,
1450 channels);
1451 }
1452 }
1453 if (num_copps) {
1454 payload.num_copps = num_copps;
1455 payload.session_id = fe_dai_map[fedai_id][session_type].strm_id;
1456 adm_matrix_map(path_type, payload, perf_mode, passthr_mode);
1457 msm_pcm_routng_cfg_matrix_map_pp(payload, path_type, perf_mode);
1458 }
1459
1460 ret = msm_pcm_routing_channel_mixer(fedai_id, perf_mode,
1461 dspst_id, stream_type);
1462 mutex_unlock(&routing_lock);
1463 return ret;
1464}
1465
1466int msm_pcm_routing_reg_phy_stream_v2(int fedai_id, int perf_mode,
1467 int dspst_id, int stream_type,
1468 struct msm_pcm_routing_evt event_info)
1469{
1470 if (msm_pcm_routing_reg_phy_stream(fedai_id, perf_mode, dspst_id,
1471 stream_type)) {
1472 pr_err("%s: failed to reg phy stream\n", __func__);
1473 return -EINVAL;
1474 }
1475
1476 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK)
1477 fe_dai_map[fedai_id][SESSION_TYPE_RX].event_info = event_info;
1478 else
1479 fe_dai_map[fedai_id][SESSION_TYPE_TX].event_info = event_info;
1480 return 0;
1481}
1482
1483void msm_pcm_routing_dereg_phy_stream(int fedai_id, int stream_type)
1484{
1485 int i, port_type, session_type, path_type, topology;
1486 struct msm_pcm_routing_fdai_data *fdai;
1487
1488 if (!is_mm_lsm_fe_id(fedai_id)) {
1489 /* bad ID assigned in machine driver */
1490 pr_err("%s: bad MM ID\n", __func__);
1491 return;
1492 }
1493
1494 if (stream_type == SNDRV_PCM_STREAM_PLAYBACK) {
1495 port_type = MSM_AFE_PORT_TYPE_RX;
1496 session_type = SESSION_TYPE_RX;
1497 path_type = ADM_PATH_PLAYBACK;
1498 } else {
1499 port_type = MSM_AFE_PORT_TYPE_TX;
1500 session_type = SESSION_TYPE_TX;
1501 path_type = ADM_PATH_LIVE_REC;
1502 }
1503
1504 mutex_lock(&routing_lock);
1505 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
1506 if (!is_be_dai_extproc(i) &&
1507 (afe_get_port_type(msm_bedais[i].port_id) == port_type) &&
1508 (msm_bedais[i].active) &&
1509 (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))) {
1510 int idx;
1511 unsigned long copp =
1512 session_copp_map[fedai_id][session_type][i];
1513 fdai = &fe_dai_map[fedai_id][session_type];
1514
1515 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++)
1516 if (test_bit(idx, &copp))
1517 break;
1518
1519 if (idx >= MAX_COPPS_PER_PORT || idx < 0) {
1520 pr_debug("%s: copp idx is invalid, exiting\n",
1521 __func__);
1522 continue;
1523 }
1524 topology = adm_get_topology_for_port_copp_idx(
1525 msm_bedais[i].port_id, idx);
1526 adm_close(msm_bedais[i].port_id, fdai->perf_mode, idx);
1527 pr_debug("%s:copp:%ld,idx bit fe:%d,type:%d,be:%d\n",
1528 __func__, copp, fedai_id, session_type, i);
1529 clear_bit(idx,
1530 &session_copp_map[fedai_id][session_type][i]);
1531 if ((topology == DOLBY_ADM_COPP_TOPOLOGY_ID ||
1532 topology == DS2_ADM_COPP_TOPOLOGY_ID) &&
1533 (fdai->perf_mode == LEGACY_PCM_MODE) &&
1534 (msm_bedais[i].passthr_mode[fedai_id] ==
1535 LEGACY_PCM))
1536 msm_pcm_routing_deinit_pp(msm_bedais[i].port_id,
1537 topology);
1538 }
1539 }
1540
1541 fe_dai_map[fedai_id][session_type].strm_id = INVALID_SESSION;
1542 fe_dai_map[fedai_id][session_type].be_srate = 0;
1543 mutex_unlock(&routing_lock);
1544}
1545
1546/* Check if FE/BE route is set */
1547static bool msm_pcm_routing_route_is_set(u16 be_id, u16 fe_id)
1548{
1549 bool rc = false;
1550
1551 if (!is_mm_lsm_fe_id(fe_id)) {
1552 /* recheck FE ID in the mixer control defined in this file */
1553 pr_err("%s: bad MM ID\n", __func__);
1554 return rc;
1555 }
1556
1557 if (test_bit(fe_id, &msm_bedais[be_id].fe_sessions[0]))
1558 rc = true;
1559
1560 return rc;
1561}
1562
1563static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
1564{
1565 int session_type, path_type, topology;
1566 u32 channels, sample_rate;
1567 uint16_t bits_per_sample = 16;
1568 struct msm_pcm_routing_fdai_data *fdai;
1569 uint32_t passthr_mode;
1570 bool is_lsm;
1571
1572 pr_debug("%s: reg %x val %x set %x\n", __func__, reg, val, set);
1573
1574 if (!is_mm_lsm_fe_id(val)) {
1575 /* recheck FE ID in the mixer control defined in this file */
1576 pr_err("%s: bad MM ID\n", __func__);
1577 return;
1578 }
1579
1580 if (!route_check_fe_id_adm_support(val)) {
1581 /* ignore adm open if not supported for fe_id */
1582 pr_debug("%s: No ADM support for fe id %d\n", __func__, val);
1583 return;
1584 }
1585
1586 passthr_mode = msm_bedais[reg].passthr_mode[val];
1587 if (afe_get_port_type(msm_bedais[reg].port_id) ==
1588 MSM_AFE_PORT_TYPE_RX) {
1589 session_type = SESSION_TYPE_RX;
1590 if (passthr_mode != LEGACY_PCM)
1591 path_type = ADM_PATH_COMPRESSED_RX;
1592 else
1593 path_type = ADM_PATH_PLAYBACK;
1594 } else {
1595 session_type = SESSION_TYPE_TX;
1596 if (passthr_mode != LEGACY_PCM)
1597 path_type = ADM_PATH_COMPRESSED_TX;
1598 else
1599 path_type = ADM_PATH_LIVE_REC;
1600 }
1601 is_lsm = (val >= MSM_FRONTEND_DAI_LSM1) &&
1602 (val <= MSM_FRONTEND_DAI_LSM8);
1603
1604 mutex_lock(&routing_lock);
1605 if (set) {
1606 if (!test_bit(val, &msm_bedais[reg].fe_sessions[0]) &&
1607 ((msm_bedais[reg].port_id == VOICE_PLAYBACK_TX) ||
1608 (msm_bedais[reg].port_id == VOICE2_PLAYBACK_TX)))
1609 voc_start_playback(set, msm_bedais[reg].port_id);
1610
1611 set_bit(val, &msm_bedais[reg].fe_sessions[0]);
1612 fdai = &fe_dai_map[val][session_type];
1613 if (msm_bedais[reg].active && fdai->strm_id !=
1614 INVALID_SESSION) {
1615 int app_type, app_type_idx, copp_idx, acdb_dev_id;
1616 /*
1617 * check if ADM needs to be configured with different
1618 * channel mapping than backend
1619 */
1620 if (!msm_bedais[reg].adm_override_ch)
1621 channels = msm_bedais[reg].channel;
1622 else
1623 channels = msm_bedais[reg].adm_override_ch;
1624 if (session_type == SESSION_TYPE_TX &&
1625 fdai->be_srate &&
1626 (fdai->be_srate != msm_bedais[reg].sample_rate)) {
1627 pr_debug("%s: flush strm %d diff BE rates\n",
1628 __func__, fdai->strm_id);
1629
1630 if (fdai->event_info.event_func)
1631 fdai->event_info.event_func(
1632 MSM_PCM_RT_EVT_BUF_RECFG,
1633 fdai->event_info.priv_data);
1634 fdai->be_srate = 0; /* might not need it */
1635 }
1636
1637 bits_per_sample = msm_routing_get_bit_width(
1638 msm_bedais[reg].format);
1639
1640 app_type =
1641 fe_dai_app_type_cfg[val][session_type][reg].app_type;
1642 if (app_type && is_lsm) {
1643 app_type_idx =
1644 msm_pcm_routing_get_lsm_app_type_idx(app_type);
1645 sample_rate =
1646 fe_dai_app_type_cfg[val][session_type][reg]
1647 .sample_rate;
1648 bits_per_sample =
1649 lsm_app_type_cfg[app_type_idx].bit_width;
1650 } else if (app_type) {
1651 app_type_idx =
1652 msm_pcm_routing_get_app_type_idx(app_type);
1653 sample_rate =
1654 fe_dai_app_type_cfg[val][session_type][reg]
1655 .sample_rate;
1656 bits_per_sample =
1657 app_type_cfg[app_type_idx].bit_width;
1658 } else
1659 sample_rate = msm_bedais[reg].sample_rate;
1660
1661 topology = msm_routing_get_adm_topology(val,
1662 session_type,
1663 reg);
1664 acdb_dev_id =
1665 fe_dai_app_type_cfg[val][session_type][reg].acdb_dev_id;
1666 copp_idx = adm_open(msm_bedais[reg].port_id, path_type,
1667 sample_rate, channels, topology,
1668 fdai->perf_mode, bits_per_sample,
1669 app_type, acdb_dev_id);
1670 if ((copp_idx < 0) ||
1671 (copp_idx >= MAX_COPPS_PER_PORT)) {
1672 pr_err("%s: adm open failed\n", __func__);
1673 mutex_unlock(&routing_lock);
1674 return;
1675 }
1676 pr_debug("%s: setting idx bit of fe:%d, type: %d, be:%d\n",
1677 __func__, val, session_type, reg);
1678 set_bit(copp_idx,
1679 &session_copp_map[val][session_type][reg]);
1680
1681 if (msm_is_resample_needed(
1682 sample_rate,
1683 msm_bedais[reg].sample_rate))
1684 adm_copp_mfc_cfg(
1685 msm_bedais[reg].port_id, copp_idx,
1686 msm_bedais[reg].sample_rate);
1687
1688 if (session_type == SESSION_TYPE_RX &&
1689 fdai->event_info.event_func)
1690 fdai->event_info.event_func(
1691 MSM_PCM_RT_EVT_DEVSWITCH,
1692 fdai->event_info.priv_data);
1693
1694 msm_pcm_routing_build_matrix(val, session_type,
1695 path_type,
1696 fdai->perf_mode,
1697 passthr_mode);
1698 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
1699 (passthr_mode == LEGACY_PCM))
1700 msm_pcm_routing_cfg_pp(msm_bedais[reg].port_id,
1701 copp_idx, topology,
1702 channels);
1703 }
1704 } else {
1705 if (test_bit(val, &msm_bedais[reg].fe_sessions[0]) &&
1706 ((msm_bedais[reg].port_id == VOICE_PLAYBACK_TX) ||
1707 (msm_bedais[reg].port_id == VOICE2_PLAYBACK_TX)))
1708 voc_start_playback(set, msm_bedais[reg].port_id);
1709 clear_bit(val, &msm_bedais[reg].fe_sessions[0]);
1710 fdai = &fe_dai_map[val][session_type];
1711 if (msm_bedais[reg].active && fdai->strm_id !=
1712 INVALID_SESSION) {
1713 int idx;
1714 int port_id;
1715 unsigned long copp =
1716 session_copp_map[val][session_type][reg];
1717 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++)
1718 if (test_bit(idx, &copp))
1719 break;
1720
1721 port_id = msm_bedais[reg].port_id;
1722 topology = adm_get_topology_for_port_copp_idx(port_id,
1723 idx);
1724 adm_close(msm_bedais[reg].port_id, fdai->perf_mode,
1725 idx);
1726 pr_debug("%s: copp: %ld, reset idx bit fe:%d, type: %d, be:%d topology=0x%x\n",
1727 __func__, copp, val, session_type, reg,
1728 topology);
1729 clear_bit(idx,
1730 &session_copp_map[val][session_type][reg]);
1731 if ((topology == DOLBY_ADM_COPP_TOPOLOGY_ID ||
1732 topology == DS2_ADM_COPP_TOPOLOGY_ID) &&
1733 (fdai->perf_mode == LEGACY_PCM_MODE) &&
1734 (passthr_mode == LEGACY_PCM))
1735 msm_pcm_routing_deinit_pp(
1736 msm_bedais[reg].port_id,
1737 topology);
1738 msm_pcm_routing_build_matrix(val, session_type,
1739 path_type,
1740 fdai->perf_mode,
1741 passthr_mode);
1742 }
1743 }
1744 if ((msm_bedais[reg].port_id == VOICE_RECORD_RX)
1745 || (msm_bedais[reg].port_id == VOICE_RECORD_TX))
1746 voc_start_record(msm_bedais[reg].port_id, set, voc_session_id);
1747
1748 mutex_unlock(&routing_lock);
1749}
1750
1751static int msm_routing_get_audio_mixer(struct snd_kcontrol *kcontrol,
1752 struct snd_ctl_elem_value *ucontrol)
1753{
1754 struct soc_mixer_control *mc =
1755 (struct soc_mixer_control *)kcontrol->private_value;
1756
1757 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1758 ucontrol->value.integer.value[0] = 1;
1759 else
1760 ucontrol->value.integer.value[0] = 0;
1761
1762 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1763 ucontrol->value.integer.value[0]);
1764
1765 return 0;
1766}
1767
1768static int msm_routing_put_audio_mixer(struct snd_kcontrol *kcontrol,
1769 struct snd_ctl_elem_value *ucontrol)
1770{
1771 struct snd_soc_dapm_widget_list *wlist =
1772 dapm_kcontrol_get_wlist(kcontrol);
1773 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
1774 struct soc_mixer_control *mc =
1775 (struct soc_mixer_control *)kcontrol->private_value;
1776 struct snd_soc_dapm_update *update = NULL;
1777
1778 if (ucontrol->value.integer.value[0] &&
1779 msm_pcm_routing_route_is_set(mc->reg, mc->shift) == false) {
1780 msm_pcm_routing_process_audio(mc->reg, mc->shift, 1);
1781 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1782 update);
1783 } else if (!ucontrol->value.integer.value[0] &&
1784 msm_pcm_routing_route_is_set(mc->reg, mc->shift) == true) {
1785 msm_pcm_routing_process_audio(mc->reg, mc->shift, 0);
1786 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1787 update);
1788 }
1789
1790 return 1;
1791}
1792
1793static int msm_routing_get_listen_mixer(struct snd_kcontrol *kcontrol,
1794 struct snd_ctl_elem_value *ucontrol)
1795{
1796 struct soc_mixer_control *mc =
1797 (struct soc_mixer_control *)kcontrol->private_value;
1798
1799 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1800 ucontrol->value.integer.value[0] = 1;
1801 else
1802 ucontrol->value.integer.value[0] = 0;
1803
1804 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1805 ucontrol->value.integer.value[0]);
1806
1807 return 0;
1808}
1809
1810static int msm_routing_put_listen_mixer(struct snd_kcontrol *kcontrol,
1811 struct snd_ctl_elem_value *ucontrol)
1812{
1813 struct snd_soc_dapm_widget_list *wlist =
1814 dapm_kcontrol_get_wlist(kcontrol);
1815 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
1816 struct soc_mixer_control *mc =
1817 (struct soc_mixer_control *)kcontrol->private_value;
1818 struct snd_soc_dapm_update *update = NULL;
1819
1820 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1821 ucontrol->value.integer.value[0]);
1822
1823 if (ucontrol->value.integer.value[0]) {
1824 if (msm_pcm_routing_route_is_set(mc->reg, mc->shift) == false)
1825 msm_pcm_routing_process_audio(mc->reg, mc->shift, 1);
1826 snd_soc_dapm_mixer_update_power(widget->dapm,
1827 kcontrol, 1, update);
1828 } else if (!ucontrol->value.integer.value[0]) {
1829 if (msm_pcm_routing_route_is_set(mc->reg, mc->shift) == true)
1830 msm_pcm_routing_process_audio(mc->reg, mc->shift, 0);
1831 snd_soc_dapm_mixer_update_power(widget->dapm,
1832 kcontrol, 0, update);
1833 }
1834
1835 return 1;
1836}
1837
1838static void msm_pcm_routing_process_voice(u16 reg, u16 val, int set)
1839{
1840 u32 session_id = 0;
1841 u16 path_type;
1842 struct media_format_info voc_be_media_format;
1843
1844 pr_debug("%s: reg %x val %x set %x\n", __func__, reg, val, set);
1845
1846 session_id = msm_pcm_routing_get_voc_sessionid(val);
1847
1848 pr_debug("%s: FE DAI 0x%x session_id 0x%x\n",
1849 __func__, val, session_id);
1850
1851 mutex_lock(&routing_lock);
1852
1853 if (set)
1854 set_bit(val, &msm_bedais[reg].fe_sessions[0]);
1855 else
1856 clear_bit(val, &msm_bedais[reg].fe_sessions[0]);
1857
1858 if (val == MSM_FRONTEND_DAI_DTMF_RX &&
1859 afe_get_port_type(msm_bedais[reg].port_id) ==
1860 MSM_AFE_PORT_TYPE_RX) {
1861 pr_debug("%s(): set=%d port id=0x%x for dtmf generation\n",
1862 __func__, set, msm_bedais[reg].port_id);
1863 afe_set_dtmf_gen_rx_portid(msm_bedais[reg].port_id, set);
1864 }
1865
1866 if (afe_get_port_type(msm_bedais[reg].port_id) ==
1867 MSM_AFE_PORT_TYPE_RX)
1868 path_type = RX_PATH;
1869 else
1870 path_type = TX_PATH;
1871
1872 if (set) {
1873 if (msm_bedais[reg].active) {
1874 voc_set_route_flag(session_id, path_type, 1);
1875
1876 memset(&voc_be_media_format, 0,
1877 sizeof(struct media_format_info));
1878
1879 voc_be_media_format.port_id = msm_bedais[reg].port_id;
1880 voc_be_media_format.num_channels =
1881 msm_bedais[reg].channel;
1882 voc_be_media_format.sample_rate =
1883 msm_bedais[reg].sample_rate;
1884 voc_be_media_format.bits_per_sample =
1885 msm_bedais[reg].format;
1886 /* Defaulting this to 1 for voice call usecases */
1887 voc_be_media_format.channel_mapping[0] = 1;
1888
1889 voc_set_device_config(session_id, path_type,
1890 &voc_be_media_format);
1891
1892 if (voc_get_route_flag(session_id, TX_PATH) &&
1893 voc_get_route_flag(session_id, RX_PATH))
1894 voc_enable_device(session_id);
1895 } else {
1896 pr_debug("%s BE is not active\n", __func__);
1897 }
1898 } else {
1899 voc_set_route_flag(session_id, path_type, 0);
1900 voc_disable_device(session_id);
1901 }
1902
1903 mutex_unlock(&routing_lock);
1904
1905}
1906
1907static int msm_routing_get_voice_mixer(struct snd_kcontrol *kcontrol,
1908 struct snd_ctl_elem_value *ucontrol)
1909{
1910 struct soc_mixer_control *mc =
1911 (struct soc_mixer_control *)kcontrol->private_value;
1912
1913 mutex_lock(&routing_lock);
1914
1915 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1916 ucontrol->value.integer.value[0] = 1;
1917 else
1918 ucontrol->value.integer.value[0] = 0;
1919
1920 mutex_unlock(&routing_lock);
1921
1922 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1923 ucontrol->value.integer.value[0]);
1924
1925 return 0;
1926}
1927
1928static int msm_routing_put_voice_mixer(struct snd_kcontrol *kcontrol,
1929 struct snd_ctl_elem_value *ucontrol)
1930{
1931 struct snd_soc_dapm_widget_list *wlist =
1932 dapm_kcontrol_get_wlist(kcontrol);
1933 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
1934 struct soc_mixer_control *mc =
1935 (struct soc_mixer_control *)kcontrol->private_value;
1936 struct snd_soc_dapm_update *update = NULL;
1937
1938 if (ucontrol->value.integer.value[0]) {
1939 msm_pcm_routing_process_voice(mc->reg, mc->shift, 1);
1940 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1941 update);
1942 } else {
1943 msm_pcm_routing_process_voice(mc->reg, mc->shift, 0);
1944 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1945 update);
1946 }
1947
1948 return 1;
1949}
1950
1951static int msm_routing_get_voice_stub_mixer(struct snd_kcontrol *kcontrol,
1952 struct snd_ctl_elem_value *ucontrol)
1953{
1954 struct soc_mixer_control *mc =
1955 (struct soc_mixer_control *)kcontrol->private_value;
1956
1957 mutex_lock(&routing_lock);
1958
1959 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1960 ucontrol->value.integer.value[0] = 1;
1961 else
1962 ucontrol->value.integer.value[0] = 0;
1963
1964 mutex_unlock(&routing_lock);
1965
1966 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1967 ucontrol->value.integer.value[0]);
1968
1969 return 0;
1970}
1971
1972static int msm_routing_put_voice_stub_mixer(struct snd_kcontrol *kcontrol,
1973 struct snd_ctl_elem_value *ucontrol)
1974{
1975 struct snd_soc_dapm_widget_list *wlist =
1976 dapm_kcontrol_get_wlist(kcontrol);
1977 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
1978 struct soc_mixer_control *mc =
1979 (struct soc_mixer_control *)kcontrol->private_value;
1980 struct snd_soc_dapm_update *update = NULL;
1981
1982 if (ucontrol->value.integer.value[0]) {
1983 mutex_lock(&routing_lock);
1984 set_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]);
1985 mutex_unlock(&routing_lock);
1986
1987 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1988 update);
1989 } else {
1990 mutex_lock(&routing_lock);
1991 clear_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]);
1992 mutex_unlock(&routing_lock);
1993
1994 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1995 update);
1996 }
1997
1998 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1999 ucontrol->value.integer.value[0]);
2000
2001 return 1;
2002}
2003
2004/*
2005 * Return the mapping between port ID and backend ID to enable the AFE callback
2006 * to determine the acdb_dev_id from the port id
2007 */
2008int msm_pcm_get_be_id_from_port_id(int port_id)
2009{
2010 int i;
2011 int be_id = -EINVAL;
2012
2013 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
2014 if (msm_bedais[i].port_id == port_id) {
2015 be_id = i;
2016 break;
2017 }
2018 }
2019
2020 return be_id;
2021}
2022
2023/*
2024 * Return the registered dev_acdb_id given a port ID to enable identifying the
2025 * correct AFE calibration information by comparing the header information.
2026 */
2027static int msm_pcm_get_dev_acdb_id_by_port_id(int port_id)
2028{
2029 int acdb_id = -EINVAL;
2030 int i = 0;
2031 int session;
2032 int port_type = afe_get_port_type(port_id);
2033 int be_id = msm_pcm_get_be_id_from_port_id(port_id);
2034
2035 pr_debug("%s:port_id %d be_id %d, port_type 0x%x\n",
2036 __func__, port_id, be_id, port_type);
2037
2038 if (port_type == MSM_AFE_PORT_TYPE_TX) {
2039 session = SESSION_TYPE_TX;
2040 } else if (port_type == MSM_AFE_PORT_TYPE_RX) {
2041 session = SESSION_TYPE_RX;
2042 } else {
2043 pr_err("%s: Invalid port type %d\n", __func__, port_type);
2044 acdb_id = -EINVAL;
2045 goto exit;
2046 }
2047
2048 if (be_id < 0) {
2049 pr_err("%s: Error getting backend id %d\n", __func__, be_id);
2050 goto exit;
2051 }
2052
2053 mutex_lock(&routing_lock);
2054 i = find_first_bit(&msm_bedais[be_id].fe_sessions[0],
2055 MSM_FRONTEND_DAI_MAX);
2056 if (i < MSM_FRONTEND_DAI_MAX)
2057 acdb_id = fe_dai_app_type_cfg[i][session][be_id].acdb_dev_id;
2058
2059 pr_debug("%s: FE[%d] session[%d] BE[%d] acdb_id(%d)\n",
2060 __func__, i, session, be_id, acdb_id);
2061 mutex_unlock(&routing_lock);
2062exit:
2063 return acdb_id;
2064}
2065
2066static int msm_routing_get_switch_mixer(struct snd_kcontrol *kcontrol,
2067 struct snd_ctl_elem_value *ucontrol)
2068{
2069 ucontrol->value.integer.value[0] = fm_switch_enable;
2070 pr_debug("%s: FM Switch enable %ld\n", __func__,
2071 ucontrol->value.integer.value[0]);
2072 return 0;
2073}
2074
2075static int msm_routing_put_switch_mixer(struct snd_kcontrol *kcontrol,
2076 struct snd_ctl_elem_value *ucontrol)
2077{
2078 struct snd_soc_dapm_widget_list *wlist =
2079 dapm_kcontrol_get_wlist(kcontrol);
2080 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2081 struct snd_soc_dapm_update *update = NULL;
2082
2083 pr_debug("%s: FM Switch enable %ld\n", __func__,
2084 ucontrol->value.integer.value[0]);
2085 if (ucontrol->value.integer.value[0])
2086 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2087 update);
2088 else
2089 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2090 update);
2091 fm_switch_enable = ucontrol->value.integer.value[0];
2092 return 1;
2093}
2094
2095static int msm_routing_get_hfp_switch_mixer(struct snd_kcontrol *kcontrol,
2096 struct snd_ctl_elem_value *ucontrol)
2097{
2098 ucontrol->value.integer.value[0] = hfp_switch_enable;
2099 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2100 ucontrol->value.integer.value[0]);
2101 return 0;
2102}
2103
2104static int msm_routing_put_hfp_switch_mixer(struct snd_kcontrol *kcontrol,
2105 struct snd_ctl_elem_value *ucontrol)
2106{
2107 struct snd_soc_dapm_widget_list *wlist =
2108 dapm_kcontrol_get_wlist(kcontrol);
2109 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2110 struct snd_soc_dapm_update *update = NULL;
2111
2112 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2113 ucontrol->value.integer.value[0]);
2114 if (ucontrol->value.integer.value[0])
2115 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2116 1, update);
2117 else
2118 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2119 0, update);
2120 hfp_switch_enable = ucontrol->value.integer.value[0];
2121 return 1;
2122}
2123
2124static int msm_routing_get_int0_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2125 struct snd_ctl_elem_value *ucontrol)
2126{
2127 ucontrol->value.integer.value[0] = int0_mi2s_switch_enable;
2128 pr_debug("%s: INT0 MI2S Switch enable %ld\n", __func__,
2129 ucontrol->value.integer.value[0]);
2130 return 0;
2131}
2132
2133static int msm_routing_put_int0_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2134 struct snd_ctl_elem_value *ucontrol)
2135{
2136 struct snd_soc_dapm_widget_list *wlist =
2137 dapm_kcontrol_get_wlist(kcontrol);
2138 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2139 struct snd_soc_dapm_update *update = NULL;
2140
2141 pr_debug("%s: INT0 MI2S Switch enable %ld\n", __func__,
2142 ucontrol->value.integer.value[0]);
2143 if (ucontrol->value.integer.value[0])
2144 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2145 update);
2146 else
2147 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2148 update);
2149 int0_mi2s_switch_enable = ucontrol->value.integer.value[0];
2150 return 1;
2151}
2152
2153static int msm_routing_get_int4_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2154 struct snd_ctl_elem_value *ucontrol)
2155{
2156 ucontrol->value.integer.value[0] = int4_mi2s_switch_enable;
2157 pr_debug("%s: INT4 MI2S Switch enable %ld\n", __func__,
2158 ucontrol->value.integer.value[0]);
2159 return 0;
2160}
2161
2162static int msm_routing_put_int4_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2163 struct snd_ctl_elem_value *ucontrol)
2164{
2165 struct snd_soc_dapm_widget_list *wlist =
2166 dapm_kcontrol_get_wlist(kcontrol);
2167 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2168 struct snd_soc_dapm_update *update = NULL;
2169
2170 pr_debug("%s: INT4 MI2S Switch enable %ld\n", __func__,
2171 ucontrol->value.integer.value[0]);
2172 if (ucontrol->value.integer.value[0])
2173 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2174 update);
2175 else
2176 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2177 update);
2178 int4_mi2s_switch_enable = ucontrol->value.integer.value[0];
2179 return 1;
2180}
2181
2182static int msm_routing_get_usb_switch_mixer(struct snd_kcontrol *kcontrol,
2183 struct snd_ctl_elem_value *ucontrol)
2184{
2185 ucontrol->value.integer.value[0] = usb_switch_enable;
2186 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2187 ucontrol->value.integer.value[0]);
2188 return 0;
2189}
2190
2191static int msm_routing_put_usb_switch_mixer(struct snd_kcontrol *kcontrol,
2192 struct snd_ctl_elem_value *ucontrol)
2193{
2194 struct snd_soc_dapm_widget_list *wlist =
2195 dapm_kcontrol_get_wlist(kcontrol);
2196 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2197 struct snd_soc_dapm_update *update = NULL;
2198
2199 pr_debug("%s: USB Switch enable %ld\n", __func__,
2200 ucontrol->value.integer.value[0]);
2201 if (ucontrol->value.integer.value[0])
2202 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2203 1, update);
2204 else
2205 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2206 0, update);
2207 usb_switch_enable = ucontrol->value.integer.value[0];
2208 return 1;
2209}
2210
2211static int msm_routing_get_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2212 struct snd_ctl_elem_value *ucontrol)
2213{
2214 ucontrol->value.integer.value[0] = pri_mi2s_switch_enable;
2215 pr_debug("%s: PRI MI2S Switch enable %ld\n", __func__,
2216 ucontrol->value.integer.value[0]);
2217 return 0;
2218}
2219
2220static int msm_routing_put_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2221 struct snd_ctl_elem_value *ucontrol)
2222{
2223 struct snd_soc_dapm_widget_list *wlist =
2224 dapm_kcontrol_get_wlist(kcontrol);
2225 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2226 struct snd_soc_dapm_update *update = NULL;
2227
2228 pr_debug("%s: PRI MI2S Switch enable %ld\n", __func__,
2229 ucontrol->value.integer.value[0]);
2230 if (ucontrol->value.integer.value[0])
2231 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2232 update);
2233 else
2234 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2235 update);
2236 pri_mi2s_switch_enable = ucontrol->value.integer.value[0];
2237 return 1;
2238}
2239
2240static int msm_routing_get_sec_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2241 struct snd_ctl_elem_value *ucontrol)
2242{
2243 ucontrol->value.integer.value[0] = sec_mi2s_switch_enable;
2244 pr_debug("%s: SEC MI2S Switch enable %ld\n", __func__,
2245 ucontrol->value.integer.value[0]);
2246 return 0;
2247}
2248
2249static int msm_routing_put_sec_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2250 struct snd_ctl_elem_value *ucontrol)
2251{
2252 struct snd_soc_dapm_widget_list *wlist =
2253 dapm_kcontrol_get_wlist(kcontrol);
2254 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2255 struct snd_soc_dapm_update *update = NULL;
2256
2257 pr_debug("%s: SEC MI2S Switch enable %ld\n", __func__,
2258 ucontrol->value.integer.value[0]);
2259 if (ucontrol->value.integer.value[0])
2260 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2261 update);
2262 else
2263 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2264 update);
2265 sec_mi2s_switch_enable = ucontrol->value.integer.value[0];
2266 return 1;
2267}
2268
2269static int msm_routing_get_tert_mi2s_switch_mixer(
2270 struct snd_kcontrol *kcontrol,
2271 struct snd_ctl_elem_value *ucontrol)
2272{
2273 ucontrol->value.integer.value[0] = tert_mi2s_switch_enable;
2274 pr_debug("%s: TERT MI2S Switch enable %ld\n", __func__,
2275 ucontrol->value.integer.value[0]);
2276 return 0;
2277}
2278
2279static int msm_routing_put_tert_mi2s_switch_mixer(
2280 struct snd_kcontrol *kcontrol,
2281 struct snd_ctl_elem_value *ucontrol)
2282{
2283 struct snd_soc_dapm_widget_list *wlist =
2284 dapm_kcontrol_get_wlist(kcontrol);
2285 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2286 struct snd_soc_dapm_update *update = NULL;
2287
2288 pr_debug("%s: TERT MI2S Switch enable %ld\n", __func__,
2289 ucontrol->value.integer.value[0]);
2290 if (ucontrol->value.integer.value[0])
2291 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2292 update);
2293 else
2294 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2295 update);
2296 tert_mi2s_switch_enable = ucontrol->value.integer.value[0];
2297 return 1;
2298}
2299
2300static int msm_routing_get_quat_mi2s_switch_mixer(
2301 struct snd_kcontrol *kcontrol,
2302 struct snd_ctl_elem_value *ucontrol)
2303{
2304 ucontrol->value.integer.value[0] = quat_mi2s_switch_enable;
2305 pr_debug("%s: QUAT MI2S Switch enable %ld\n", __func__,
2306 ucontrol->value.integer.value[0]);
2307 return 0;
2308}
2309
2310static int msm_routing_put_quat_mi2s_switch_mixer(
2311 struct snd_kcontrol *kcontrol,
2312 struct snd_ctl_elem_value *ucontrol)
2313{
2314 struct snd_soc_dapm_widget_list *wlist =
2315 dapm_kcontrol_get_wlist(kcontrol);
2316 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2317 struct snd_soc_dapm_update *update = NULL;
2318
2319 pr_debug("%s: QUAT MI2S Switch enable %ld\n", __func__,
2320 ucontrol->value.integer.value[0]);
2321 if (ucontrol->value.integer.value[0])
2322 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2323 update);
2324 else
2325 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2326 update);
2327 quat_mi2s_switch_enable = ucontrol->value.integer.value[0];
2328 return 1;
2329}
2330
2331static int msm_routing_get_fm_pcmrx_switch_mixer(struct snd_kcontrol *kcontrol,
2332 struct snd_ctl_elem_value *ucontrol)
2333{
2334 ucontrol->value.integer.value[0] = fm_pcmrx_switch_enable;
2335 pr_debug("%s: FM Switch enable %ld\n", __func__,
2336 ucontrol->value.integer.value[0]);
2337 return 0;
2338}
2339
2340static int msm_routing_put_fm_pcmrx_switch_mixer(struct snd_kcontrol *kcontrol,
2341 struct snd_ctl_elem_value *ucontrol)
2342{
2343 struct snd_soc_dapm_widget_list *wlist =
2344 dapm_kcontrol_get_wlist(kcontrol);
2345 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
2346 struct snd_soc_dapm_update *update = NULL;
2347
2348 pr_debug("%s: FM Switch enable %ld\n", __func__,
2349 ucontrol->value.integer.value[0]);
2350 if (ucontrol->value.integer.value[0])
2351 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2352 update);
2353 else
2354 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2355 update);
2356 fm_pcmrx_switch_enable = ucontrol->value.integer.value[0];
2357 return 1;
2358}
2359
2360static int msm_routing_lsm_port_get(struct snd_kcontrol *kcontrol,
2361 struct snd_ctl_elem_value *ucontrol)
2362{
2363 ucontrol->value.integer.value[0] = lsm_port_index;
2364 return 0;
2365}
2366
2367static int msm_routing_lsm_port_put(struct snd_kcontrol *kcontrol,
2368 struct snd_ctl_elem_value *ucontrol)
2369{
2370 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2371 int mux = ucontrol->value.enumerated.item[0];
2372 int lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
2373
2374 if (mux >= e->items) {
2375 pr_err("%s: Invalid mux value %d\n", __func__, mux);
2376 return -EINVAL;
2377 }
2378
2379 pr_debug("%s: LSM enable %ld\n", __func__,
2380 ucontrol->value.integer.value[0]);
2381 switch (ucontrol->value.integer.value[0]) {
2382 case 1:
2383 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_0_TX;
2384 break;
2385 case 2:
2386 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_1_TX;
2387 break;
2388 case 3:
2389 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_2_TX;
2390 break;
2391 case 4:
2392 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_TX;
2393 break;
2394 case 5:
2395 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
2396 break;
2397 case 6:
2398 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
2399 break;
2400 case 7:
2401 lsm_port = AFE_PORT_ID_TERTIARY_MI2S_TX;
2402 break;
2403 case 8:
2404 lsm_port = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2405 break;
2406 case 9:
2407 lsm_port = ADM_LSM_PORT_ID;
2408 break;
2409 case 10:
2410 lsm_port = AFE_PORT_ID_INT3_MI2S_TX;
2411 break;
2412 default:
2413 pr_err("Default lsm port");
2414 break;
2415 }
2416 set_lsm_port(lsm_port);
2417 lsm_port_index = ucontrol->value.integer.value[0];
2418
2419 return 0;
2420}
2421
2422static int msm_routing_lsm_func_get(struct snd_kcontrol *kcontrol,
2423 struct snd_ctl_elem_value *ucontrol)
2424{
2425 int i;
2426 u16 port_id;
2427 enum afe_mad_type mad_type;
2428
2429 pr_debug("%s: enter\n", __func__);
2430 for (i = 0; i < ARRAY_SIZE(lsm_port_text); i++)
2431 if (!strnstr(kcontrol->id.name, lsm_port_text[i],
2432 strlen(lsm_port_text[i])))
2433 break;
2434
2435 if (i-- == ARRAY_SIZE(lsm_port_text)) {
2436 WARN(1, "Invalid id name %s\n", kcontrol->id.name);
2437 return -EINVAL;
2438 }
2439
2440 port_id = i * 2 + 1 + SLIMBUS_0_RX;
2441
2442 /*Check for Tertiary/Quaternary/INT3 TX port*/
2443 if (strnstr(kcontrol->id.name, lsm_port_text[7],
2444 strlen(lsm_port_text[7])))
2445 port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
2446
2447 if (strnstr(kcontrol->id.name, lsm_port_text[8],
2448 strlen(lsm_port_text[8])))
2449 port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2450
2451 if (strnstr(kcontrol->id.name, lsm_port_text[10],
2452 strlen(lsm_port_text[10])))
2453 port_id = AFE_PORT_ID_INT3_MI2S_TX;
2454
2455 mad_type = afe_port_get_mad_type(port_id);
2456 pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
2457 mad_type);
2458 switch (mad_type) {
2459 case MAD_HW_NONE:
2460 ucontrol->value.integer.value[0] = MADNONE;
2461 break;
2462 case MAD_HW_AUDIO:
2463 ucontrol->value.integer.value[0] = MADAUDIO;
2464 break;
2465 case MAD_HW_BEACON:
2466 ucontrol->value.integer.value[0] = MADBEACON;
2467 break;
2468 case MAD_HW_ULTRASOUND:
2469 ucontrol->value.integer.value[0] = MADULTRASOUND;
2470 break;
2471 case MAD_SW_AUDIO:
2472 ucontrol->value.integer.value[0] = MADSWAUDIO;
2473 break;
2474 default:
2475 WARN(1, "Unknown\n");
2476 return -EINVAL;
2477 }
2478 return 0;
2479}
2480
2481static int msm_routing_lsm_func_put(struct snd_kcontrol *kcontrol,
2482 struct snd_ctl_elem_value *ucontrol)
2483{
2484 int i;
2485 u16 port_id;
2486 enum afe_mad_type mad_type;
2487
2488 pr_debug("%s: enter\n", __func__);
2489 for (i = 0; i < ARRAY_SIZE(lsm_port_text); i++)
2490 if (strnstr(kcontrol->id.name, lsm_port_text[i],
2491 strlen(lsm_port_text[i])))
2492 break;
2493
2494 if (i-- == ARRAY_SIZE(lsm_port_text)) {
2495 WARN(1, "Invalid id name %s\n", kcontrol->id.name);
2496 return -EINVAL;
2497 }
2498
2499 port_id = i * 2 + 1 + SLIMBUS_0_RX;
2500 switch (ucontrol->value.integer.value[0]) {
2501 case MADNONE:
2502 mad_type = MAD_HW_NONE;
2503 break;
2504 case MADAUDIO:
2505 mad_type = MAD_HW_AUDIO;
2506 break;
2507 case MADBEACON:
2508 mad_type = MAD_HW_BEACON;
2509 break;
2510 case MADULTRASOUND:
2511 mad_type = MAD_HW_ULTRASOUND;
2512 break;
2513 case MADSWAUDIO:
2514 mad_type = MAD_SW_AUDIO;
2515 break;
2516 default:
2517 WARN(1, "Unknown\n");
2518 return -EINVAL;
2519 }
2520
2521 /*Check for Tertiary/Quaternary/INT3 TX port*/
2522 if (strnstr(kcontrol->id.name, lsm_port_text[7],
2523 strlen(lsm_port_text[7])))
2524 port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
2525
2526 if (strnstr(kcontrol->id.name, lsm_port_text[8],
2527 strlen(lsm_port_text[8])))
2528 port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2529
2530 if (strnstr(kcontrol->id.name, lsm_port_text[10],
2531 strlen(lsm_port_text[10])))
2532 port_id = AFE_PORT_ID_INT3_MI2S_TX;
2533
2534 pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
2535 mad_type);
2536 return afe_port_set_mad_type(port_id, mad_type);
2537}
2538
2539static const char *const adm_override_chs_text[] = {"Zero", "One", "Two"};
2540
2541static SOC_ENUM_SINGLE_EXT_DECL(slim_7_rx_adm_override_chs,
2542 adm_override_chs_text);
2543
2544static int msm_routing_adm_get_backend_idx(struct snd_kcontrol *kcontrol)
2545{
2546 int backend_id;
2547
2548 if (strnstr(kcontrol->id.name, "SLIM7_RX", sizeof("SLIM7_RX"))) {
2549 backend_id = MSM_BACKEND_DAI_SLIMBUS_7_RX;
2550 } else {
2551 pr_err("%s: unsupported backend id: %s",
2552 __func__, kcontrol->id.name);
2553 return -EINVAL;
2554 }
2555
2556 return backend_id;
2557}
2558static int msm_routing_adm_channel_config_get(
2559 struct snd_kcontrol *kcontrol,
2560 struct snd_ctl_elem_value *ucontrol)
2561{
2562 int backend_id = msm_routing_adm_get_backend_idx(kcontrol);
2563
2564 if (backend_id >= 0) {
2565 mutex_lock(&routing_lock);
2566 ucontrol->value.integer.value[0] =
2567 msm_bedais[backend_id].adm_override_ch;
2568 pr_debug("%s: adm channel count %ld for BE:%d\n", __func__,
2569 ucontrol->value.integer.value[0], backend_id);
2570 mutex_unlock(&routing_lock);
2571 }
2572
2573 return 0;
2574}
2575
2576static int msm_routing_adm_channel_config_put(
2577 struct snd_kcontrol *kcontrol,
2578 struct snd_ctl_elem_value *ucontrol)
2579{
2580 int backend_id = msm_routing_adm_get_backend_idx(kcontrol);
2581
2582 if (backend_id >= 0) {
2583 mutex_lock(&routing_lock);
2584 msm_bedais[backend_id].adm_override_ch =
2585 ucontrol->value.integer.value[0];
2586 pr_debug("%s:updating BE :%d adm channels: %d\n",
2587 __func__, backend_id,
2588 msm_bedais[backend_id].adm_override_ch);
2589 mutex_unlock(&routing_lock);
2590 }
2591
2592 return 0;
2593}
2594
2595static const struct snd_kcontrol_new adm_channel_config_controls[] = {
2596 SOC_ENUM_EXT("SLIM7_RX ADM Channels", slim_7_rx_adm_override_chs,
2597 msm_routing_adm_channel_config_get,
2598 msm_routing_adm_channel_config_put),
2599};
2600
2601static int msm_routing_slim_0_rx_aanc_mux_get(struct snd_kcontrol *kcontrol,
2602 struct snd_ctl_elem_value *ucontrol)
2603{
2604
2605 mutex_lock(&routing_lock);
2606 ucontrol->value.integer.value[0] = slim0_rx_aanc_fb_port;
2607 mutex_unlock(&routing_lock);
2608 pr_debug("%s: AANC Mux Port %ld\n", __func__,
2609 ucontrol->value.integer.value[0]);
2610 return 0;
2611};
2612
2613static int msm_routing_slim_0_rx_aanc_mux_put(struct snd_kcontrol *kcontrol,
2614 struct snd_ctl_elem_value *ucontrol)
2615{
2616 struct aanc_data aanc_info;
2617
2618 mutex_lock(&routing_lock);
2619 memset(&aanc_info, 0x00, sizeof(aanc_info));
2620 pr_debug("%s: AANC Mux Port %ld\n", __func__,
2621 ucontrol->value.integer.value[0]);
2622 slim0_rx_aanc_fb_port = ucontrol->value.integer.value[0];
2623 if (ucontrol->value.integer.value[0] == 0) {
2624 aanc_info.aanc_active = false;
2625 aanc_info.aanc_tx_port = 0;
2626 aanc_info.aanc_rx_port = 0;
2627 } else {
2628 aanc_info.aanc_active = true;
2629 aanc_info.aanc_rx_port = SLIMBUS_0_RX;
2630 aanc_info.aanc_tx_port =
2631 (SLIMBUS_0_RX - 1 + (slim0_rx_aanc_fb_port * 2));
2632 }
2633 afe_set_aanc_info(&aanc_info);
2634 mutex_unlock(&routing_lock);
2635 return 0;
2636};
2637static int msm_routing_get_port_mixer(struct snd_kcontrol *kcontrol,
2638 struct snd_ctl_elem_value *ucontrol)
2639{
2640 int idx = 0, shift = 0;
2641 struct soc_mixer_control *mc =
2642 (struct soc_mixer_control *)kcontrol->private_value;
2643
2644 idx = mc->shift/(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2645 shift = mc->shift%(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2646
2647 if (idx >= BE_DAI_PORT_SESSIONS_IDX_MAX) {
2648 pr_err("%s: Invalid idx = %d\n", __func__, idx);
2649 return -EINVAL;
2650 }
2651
2652 if (test_bit(shift,
2653 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]))
2654 ucontrol->value.integer.value[0] = 1;
2655 else
2656 ucontrol->value.integer.value[0] = 0;
2657
2658 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
2659 ucontrol->value.integer.value[0]);
2660
2661 return 0;
2662}
2663
2664static int msm_routing_put_port_mixer(struct snd_kcontrol *kcontrol,
2665 struct snd_ctl_elem_value *ucontrol)
2666{
2667 int idx = 0, shift = 0;
2668 struct soc_mixer_control *mc =
2669 (struct soc_mixer_control *)kcontrol->private_value;
2670
2671 idx = mc->shift/(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2672 shift = mc->shift%(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2673
2674 if (idx >= BE_DAI_PORT_SESSIONS_IDX_MAX) {
2675 pr_err("%s: Invalid idx = %d\n", __func__, idx);
2676 return -EINVAL;
2677 }
2678
2679 pr_debug("%s: reg 0x%x shift 0x%x val %ld idx %d reminder shift %d\n",
2680 __func__, mc->reg, mc->shift,
2681 ucontrol->value.integer.value[0], idx, shift);
2682
2683 if (ucontrol->value.integer.value[0]) {
2684 afe_loopback(1, msm_bedais[mc->reg].port_id,
2685 msm_bedais[mc->shift].port_id);
2686 set_bit(shift,
2687 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]);
2688 } else {
2689 afe_loopback(0, msm_bedais[mc->reg].port_id,
2690 msm_bedais[mc->shift].port_id);
2691 clear_bit(shift,
2692 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]);
2693 }
2694
2695 return 1;
2696}
2697
2698static int msm_pcm_get_channel_rule_index(struct snd_kcontrol *kcontrol,
2699 struct snd_ctl_elem_value *ucontrol)
2700{
2701 u16 fe_id = 0;
2702
2703 fe_id = ((struct soc_mixer_control *)
2704 kcontrol->private_value)->shift;
2705 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2706 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2707 return -EINVAL;
2708 }
2709
2710 ucontrol->value.integer.value[0] = channel_mixer[fe_id].rule;
2711
2712 return 0;
2713}
2714
2715static int msm_pcm_put_channel_rule_index(struct snd_kcontrol *kcontrol,
2716 struct snd_ctl_elem_value *ucontrol)
2717{
2718 u16 fe_id = 0;
2719
2720 fe_id = ((struct soc_mixer_control *)
2721 kcontrol->private_value)->shift;
2722 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2723 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2724 return -EINVAL;
2725 }
2726
2727 channel_mixer[fe_id].rule = ucontrol->value.integer.value[0];
2728
2729 return 1;
2730}
2731
2732static int msm_pcm_get_out_chs(struct snd_kcontrol *kcontrol,
2733 struct snd_ctl_elem_value *ucontrol)
2734{
2735 u16 fe_id = 0;
2736
2737 fe_id = ((struct soc_multi_mixer_control *)
2738 kcontrol->private_value)->shift;
2739 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2740 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2741 return -EINVAL;
2742 }
2743
2744 ucontrol->value.integer.value[0] =
2745 channel_mixer[fe_id].output_channel;
2746 return 0;
2747}
2748
2749static int msm_pcm_put_out_chs(struct snd_kcontrol *kcontrol,
2750 struct snd_ctl_elem_value *ucontrol)
2751{
2752 u16 fe_id = 0;
2753
2754 fe_id = ((struct soc_multi_mixer_control *)
2755 kcontrol->private_value)->shift;
2756 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2757 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2758 return -EINVAL;
2759 }
2760
2761 pr_debug("%s: fe_id is %d, output channels = %d\n", __func__,
2762 fe_id,
2763 (unsigned int)(ucontrol->value.integer.value[0]));
2764 channel_mixer[fe_id].output_channel =
2765 (unsigned int)(ucontrol->value.integer.value[0]);
2766
2767 return 1;
2768}
2769
2770static const char *const ch_mixer[] = {"Disable", "Enable"};
2771
2772/* If new backend is added, need update this array */
2773static const char *const be_name[] = {
2774"ZERO", "PRI_I2S_RX", "PRI_I2S_TX", "SLIM_0_RX",
2775"SLIM_0_TX", "HDMI_RX", "INT_BT_SCO_RX", "INT_BT_SCO_TX",
2776"INT_FM_RX", "INT_FM_TX", "AFE_PCM_RX", "AFE_PCM_TX",
2777"AUXPCM_RX", "AUXPCM_TX", "VOICE_PLAYBACK_TX", "VOICE2_PLAYBACK_TX",
2778"INCALL_RECORD_RX", "INCALL_RECORD_TX", "MI2S_RX", "MI2S_TX",
2779"SEC_I2S_RX", "SLIM_1_RX", "SLIM_1_TX", "SLIM_2_RX",
2780"SLIM_2_TX", "SLIM_3_RX", "SLIM_3_TX", "SLIM_4_RX",
2781"SLIM_4_TX", "SLIM_5_RX", "SLIM_5_TX", "SLIM_6_RX",
2782"SLIM_6_TX", "SLIM_7_RX", "SLIM_7_TX", "SLIM_8_RX",
2783"SLIM_8_TX", "EXTPROC_RX", "EXTPROC_TX", "EXPROC_EC_TX",
2784"QUAT_MI2S_RX", "QUAT_MI2S_TX", "SECOND_MI2S_RX", "SECOND_MI2S_TX",
2785"PRI_MI2S_RX", "PRI_MI2S_TX", "TERT_MI2S_RX", "TERT_MI2S_TX",
2786"AUDIO_I2S_RX", "SEC_AUXPCM_RX", "SEC_AUXPCM_TX", "SPDIF_RX",
2787"SECOND_MI2S_RX_SD1", "QUIN_MI2S_RX", "QUIN_MI2S_TX", "SENARY_MI2S_TX",
2788"PRI_TDM_RX_0", "PRI_TDM_TX_0", "PRI_TDM_RX_1", "PRI_TDM_TX_1",
2789"PRI_TDM_RX_2", "PRI_TDM_TX_2", "PRI_TDM_RX_3", "PRI_TDM_TX_3",
2790"PRI_TDM_RX_4", "PRI_TDM_TX_4", "PRI_TDM_RX_5", "PRI_TDM_TX_5",
2791"PRI_TDM_RX_6", "PRI_TDM_TX_6", "PRI_TDM_RX_7", "PRI_TDM_TX_7",
2792"SEC_TDM_RX_0", "SEC_TDM_TX_0", "SEC_TDM_RX_1", "SEC_TDM_TX_1",
2793"SEC_TDM_RX_2", "SEC_TDM_TX_2", "SEC_TDM_RX_3", "SEC_TDM_TX_3",
2794"SEC_TDM_RX_4", "SEC_TDM_TX_4", "SEC_TDM_RX_5", "SEC_TDM_TX_5",
2795"SEC_TDM_RX_6", "SEC_TDM_TX_6", "SEC_TDM_RX_7", "SEC_TDM_TX_7",
2796"TERT_TDM_RX_0", "TERT_TDM_TX_0", "TERT_TDM_RX_1", "TERT_TDM_TX_1",
2797"TERT_TDM_RX_2", "TERT_TDM_TX_2", "TERT_TDM_RX_3", "TERT_TDM_TX_3",
2798"TERT_TDM_RX_4", "TERT_TDM_TX_4", "TERT_TDM_RX_5", "TERT_TDM_TX_5",
2799"TERT_TDM_RX_6", "TERT_TDM_TX_6", "TERT_TDM_RX_7", "TERT_TDM_TX_7",
2800"QUAT_TDM_RX_0", "QUAT_TDM_TX_0", "QUAT_TDM_RX_1", "QUAT_TDM_TX_1",
2801"QUAT_TDM_RX_2", "QUAT_TDM_TX_2", "QUAT_TDM_RX_3", "QUAT_TDM_TX_3",
2802"QUAT_TDM_RX_4", "QUAT_TDM_TX_4", "QUAT_TDM_RX_5", "QUAT_TDM_TX_5",
2803"QUAT_TDM_RX_6", "QUAT_TDM_TX_6", "QUAT_TDM_RX_7", "QUAT_TDM_TX_7",
2804"INT_BT_A2DP_RX", "USB_RX", "USB_TX", "DISPLAY_PORT_RX",
2805"TERT_AUXPCM_RX", "TERT_AUXPCM_TX", "QUAT_AUXPCM_RX", "QUAT_AUXPCM_TX",
2806"INT0_MI2S_RX", "INT0_MI2S_TX", "INT1_MI2S_RX", "INT1_MI2S_TX",
2807"INT2_MI2S_RX", "INT2_MI2S_TX", "INT3_MI2S_RX", "INT3_MI2S_TX",
2808"INT4_MI2S_RX", "INT4_MI2S_TX", "INT5_MI2S_RX", "INT5_MI2S_TX",
2809"INT6_MI2S_RX", "INT6_MI2S_TX"
2810};
2811
2812static SOC_ENUM_SINGLE_DECL(mm1_channel_mux,
2813 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, ch_mixer);
2814static SOC_ENUM_SINGLE_DECL(mm2_channel_mux,
2815 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA2, ch_mixer);
2816static SOC_ENUM_SINGLE_DECL(mm3_channel_mux,
2817 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA3, ch_mixer);
2818static SOC_ENUM_SINGLE_DECL(mm4_channel_mux,
2819 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA4, ch_mixer);
2820
2821static SOC_ENUM_DOUBLE_DECL(mm1_ch1_enum,
2822 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 0, be_name);
2823static SOC_ENUM_DOUBLE_DECL(mm1_ch2_enum,
2824 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, be_name);
2825static SOC_ENUM_DOUBLE_DECL(mm1_ch3_enum,
2826 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 2, be_name);
2827static SOC_ENUM_DOUBLE_DECL(mm1_ch4_enum,
2828 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 3, be_name);
2829static SOC_ENUM_DOUBLE_DECL(mm1_ch5_enum,
2830 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 4, be_name);
2831static SOC_ENUM_DOUBLE_DECL(mm1_ch6_enum,
2832 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 5, be_name);
2833static SOC_ENUM_DOUBLE_DECL(mm1_ch7_enum,
2834 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 6, be_name);
2835static SOC_ENUM_DOUBLE_DECL(mm1_ch8_enum,
2836 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 7, be_name);
2837
2838static int msm_pcm_get_ctl_enum_info(struct snd_ctl_elem_info *uinfo,
2839 unsigned int channels,
2840 unsigned int items, const char *const names[])
2841{
2842 if (uinfo->value.enumerated.item >= items)
2843 uinfo->value.enumerated.item = items - 1;
2844
2845 WARN(strlen(names[uinfo->value.enumerated.item]) >=
2846 sizeof(uinfo->value.enumerated.name),
2847 "ALSA: too long item name '%s'\n",
2848 names[uinfo->value.enumerated.item]);
2849 strlcpy(uinfo->value.enumerated.name,
2850 names[uinfo->value.enumerated.item],
2851 sizeof(uinfo->value.enumerated.name));
2852 return 0;
2853}
2854
2855static int msm_pcm_channel_mixer_info(struct snd_kcontrol *kcontrol,
2856 struct snd_ctl_elem_info *uinfo)
2857{
2858 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2859
2860 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2861 uinfo->count = 1;
2862
2863 uinfo->value.enumerated.items = ARRAY_SIZE(ch_mixer);
2864 msm_pcm_get_ctl_enum_info(uinfo, 1, e->items, e->texts);
2865
2866 return 0;
2867}
2868static int msm_pcm_channel_mixer_get(struct snd_kcontrol *kcontrol,
2869 struct snd_ctl_elem_value *ucontrol)
2870{
2871 u16 fe_id = 0;
2872
2873 fe_id = ((struct soc_enum *)
2874 kcontrol->private_value)->shift_l;
2875 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2876 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2877 return -EINVAL;
2878 }
2879
2880 pr_debug("%s: FE %d %s\n", __func__,
2881 fe_id,
2882 channel_mixer[fe_id].enable ? "Enabled" : "Disabled");
2883 ucontrol->value.enumerated.item[0] = channel_mixer[fe_id].enable;
2884 return 0;
2885}
2886
2887static int msm_pcm_channel_mixer_put(struct snd_kcontrol *kcontrol,
2888 struct snd_ctl_elem_value *ucontrol)
2889{
2890 u16 fe_id = 0;
2891
2892 fe_id = ((struct soc_enum *)
2893 kcontrol->private_value)->shift_l;
2894 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2895 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2896 return -EINVAL;
2897 }
2898
2899 channel_mixer[fe_id].enable = ucontrol->value.enumerated.item[0];
2900 pr_debug("%s: %s FE %d\n", __func__,
2901 channel_mixer[fe_id].enable ? "Enable" : "Disable",
2902 fe_id);
2903 return 0;
2904}
2905
2906static int msm_pcm_channel_input_be_info(struct snd_kcontrol *kcontrol,
2907 struct snd_ctl_elem_info *uinfo)
2908{
2909 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2910
2911 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2912 uinfo->count = 1;
2913
2914 uinfo->value.enumerated.items = ARRAY_SIZE(be_name);
2915 msm_pcm_get_ctl_enum_info(uinfo, 1, e->items, e->texts);
2916
2917 return 0;
2918}
2919
2920static int msm_pcm_channel_input_be_put(struct snd_kcontrol *kcontrol,
2921 struct snd_ctl_elem_value *ucontrol)
2922{
2923 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2924 u16 fe_id = 0, in_ch = 0;
2925
2926 fe_id = e->shift_l;
2927 in_ch = e->shift_r;
2928 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2929 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2930 return -EINVAL;
2931 }
2932 if (in_ch >= ADM_MAX_CHANNELS) {
2933 pr_err("%s: invalid input channel %d\n", __func__, in_ch);
2934 return -EINVAL;
2935 }
2936
2937 channel_input[fe_id][in_ch] = ucontrol->value.enumerated.item[0];
2938 return 1;
2939}
2940
2941static int msm_pcm_channel_input_be_get(struct snd_kcontrol *kcontrol,
2942 struct snd_ctl_elem_value *ucontrol)
2943{
2944 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2945 u16 fe_id = 0, in_ch = 0;
2946
2947 fe_id = e->shift_l;
2948 in_ch = e->shift_r;
2949 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2950 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2951 return -EINVAL;
2952 }
2953 if (in_ch >= ADM_MAX_CHANNELS) {
2954 pr_err("%s: invalid input channel %d\n", __func__, in_ch);
2955 return -EINVAL;
2956 }
2957
2958 ucontrol->value.enumerated.item[0] = channel_input[fe_id][in_ch];
2959 return 1;
2960}
2961
2962
2963static int msm_pcm_channel_weight_info(struct snd_kcontrol *kcontrol,
2964 struct snd_ctl_elem_info *uinfo)
2965{
2966 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2967 uinfo->count = ADM_MAX_CHANNELS;
2968 uinfo->value.integer.min = 0;
2969 uinfo->value.integer.max = WEIGHT_0_DB;
2970
2971 return 0;
2972}
2973
2974static int msm_pcm_channel_weight_put(struct snd_kcontrol *kcontrol,
2975 struct snd_ctl_elem_value *ucontrol)
2976{
2977 u16 fe_id = 0, out_ch = 0;
2978 int i, weight;
2979
2980 fe_id = ((struct soc_multi_mixer_control *)
2981 kcontrol->private_value)->shift;
2982 out_ch = ((struct soc_multi_mixer_control *)
2983 kcontrol->private_value)->rshift;
2984 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2985 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2986 return -EINVAL;
2987 }
2988 if (out_ch >= ADM_MAX_CHANNELS) {
2989 pr_err("%s: invalid input channel %d\n", __func__, out_ch);
2990 return -EINVAL;
2991 }
2992
2993 pr_debug("%s: FE_ID: %d, channel weight %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld\n",
2994 __func__, fe_id,
2995 ucontrol->value.integer.value[0],
2996 ucontrol->value.integer.value[1],
2997 ucontrol->value.integer.value[2],
2998 ucontrol->value.integer.value[3],
2999 ucontrol->value.integer.value[4],
3000 ucontrol->value.integer.value[5],
3001 ucontrol->value.integer.value[6],
3002 ucontrol->value.integer.value[7]);
3003
3004 for (i = 0; i < ADM_MAX_CHANNELS; ++i) {
3005 weight = ucontrol->value.integer.value[i];
3006 channel_mixer[fe_id].channel_weight[out_ch][i] = weight;
3007 pr_debug("%s: FE_ID %d, output %d input %d weight %d\n",
3008 __func__, fe_id, out_ch, i,
3009 channel_mixer[fe_id].channel_weight[out_ch][i]);
3010 }
3011
3012 return 0;
3013}
3014
3015static int msm_pcm_channel_weight_get(struct snd_kcontrol *kcontrol,
3016 struct snd_ctl_elem_value *ucontrol)
3017{
3018 u16 fe_id = 0, out_ch = 0;
3019 int i;
3020
3021 fe_id = ((struct soc_multi_mixer_control *)
3022 kcontrol->private_value)->shift;
3023 out_ch = ((struct soc_multi_mixer_control *)
3024 kcontrol->private_value)->rshift;
3025 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
3026 pr_err("%s: invalid FE %d\n", __func__, fe_id);
3027 return -EINVAL;
3028 }
3029 if (out_ch >= ADM_MAX_CHANNELS) {
3030 pr_err("%s: invalid input channel %d\n", __func__, out_ch);
3031 return -EINVAL;
3032 }
3033
3034 for (i = 0; i < ADM_MAX_CHANNELS; ++i)
3035 ucontrol->value.integer.value[i] =
3036 channel_mixer[fe_id].channel_weight[out_ch][i];
3037
3038 pr_debug("%s: FE_ID: %d, weight %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld",
3039 __func__, fe_id,
3040 ucontrol->value.integer.value[0],
3041 ucontrol->value.integer.value[1],
3042 ucontrol->value.integer.value[2],
3043 ucontrol->value.integer.value[3],
3044 ucontrol->value.integer.value[4],
3045 ucontrol->value.integer.value[5],
3046 ucontrol->value.integer.value[6],
3047 ucontrol->value.integer.value[7]);
3048
3049 return 0;
3050}
3051
3052static const struct snd_kcontrol_new channel_mixer_controls[] = {
3053 SOC_SINGLE_EXT("MultiMedia1 Channel Rule", SND_SOC_NOPM,
3054 MSM_FRONTEND_DAI_MULTIMEDIA1, 8, 0,
3055 msm_pcm_get_channel_rule_index,
3056 msm_pcm_put_channel_rule_index),
3057 SOC_SINGLE_EXT("MultiMedia2 Channel Rule", SND_SOC_NOPM,
3058 MSM_FRONTEND_DAI_MULTIMEDIA2, 8, 0,
3059 msm_pcm_get_channel_rule_index,
3060 msm_pcm_put_channel_rule_index),
3061 SOC_SINGLE_EXT("MultiMedia3 Channel Rule", SND_SOC_NOPM,
3062 MSM_FRONTEND_DAI_MULTIMEDIA3, 8, 0,
3063 msm_pcm_get_channel_rule_index,
3064 msm_pcm_put_channel_rule_index),
3065 SOC_SINGLE_EXT("MultiMedia4 Channel Rule", SND_SOC_NOPM,
3066 MSM_FRONTEND_DAI_MULTIMEDIA4, 8, 0,
3067 msm_pcm_get_channel_rule_index,
3068 msm_pcm_put_channel_rule_index),
3069 SOC_SINGLE_EXT("MultiMedia5 Channel Rule", SND_SOC_NOPM,
3070 MSM_FRONTEND_DAI_MULTIMEDIA5, 8, 0,
3071 msm_pcm_get_channel_rule_index,
3072 msm_pcm_put_channel_rule_index),
3073 SOC_SINGLE_EXT("MultiMedia6 Channel Rule", SND_SOC_NOPM,
3074 MSM_FRONTEND_DAI_MULTIMEDIA6, 8, 0,
3075 msm_pcm_get_channel_rule_index,
3076 msm_pcm_put_channel_rule_index),
3077
3078 SOC_SINGLE_EXT("MultiMedia1 Channels", SND_SOC_NOPM,
3079 MSM_FRONTEND_DAI_MULTIMEDIA1, 8, 0,
3080 msm_pcm_get_out_chs,
3081 msm_pcm_put_out_chs),
3082 SOC_SINGLE_EXT("MultiMedia2 Channels", SND_SOC_NOPM,
3083 MSM_FRONTEND_DAI_MULTIMEDIA2, 8, 0,
3084 msm_pcm_get_out_chs,
3085 msm_pcm_put_out_chs),
3086 SOC_SINGLE_EXT("MultiMedia3 Channels", SND_SOC_NOPM,
3087 MSM_FRONTEND_DAI_MULTIMEDIA3, 8, 0,
3088 msm_pcm_get_out_chs,
3089 msm_pcm_put_out_chs),
3090 SOC_SINGLE_EXT("MultiMedia4 Channels", SND_SOC_NOPM,
3091 MSM_FRONTEND_DAI_MULTIMEDIA4, 8, 0,
3092 msm_pcm_get_out_chs,
3093 msm_pcm_put_out_chs),
3094 SOC_SINGLE_EXT("MultiMedia5 Channels", SND_SOC_NOPM,
3095 MSM_FRONTEND_DAI_MULTIMEDIA5, 8, 0,
3096 msm_pcm_get_out_chs,
3097 msm_pcm_put_out_chs),
3098 SOC_SINGLE_EXT("MultiMedia6 Channels", SND_SOC_NOPM,
3099 MSM_FRONTEND_DAI_MULTIMEDIA6, 8, 0,
3100 msm_pcm_get_out_chs,
3101 msm_pcm_put_out_chs),
3102 {
3103 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3104 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3105 .name = "MultiMedia1 Channel Mixer",
3106 .info = msm_pcm_channel_mixer_info,
3107 .get = msm_pcm_channel_mixer_get,
3108 .put = msm_pcm_channel_mixer_put,
3109 .private_value = (unsigned long)&(mm1_channel_mux)
3110 },
3111 {
3112 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3113 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3114 .name = "MultiMedia2 Channel Mixer",
3115 .info = msm_pcm_channel_mixer_info,
3116 .get = msm_pcm_channel_mixer_get,
3117 .put = msm_pcm_channel_mixer_put,
3118 .private_value = (unsigned long)&(mm2_channel_mux)
3119 },
3120 {
3121 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3122 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3123 .name = "MultiMedia3 Channel Mixer",
3124 .info = msm_pcm_channel_mixer_info,
3125 .get = msm_pcm_channel_mixer_get,
3126 .put = msm_pcm_channel_mixer_put,
3127 .private_value = (unsigned long)&(mm3_channel_mux)
3128 },
3129 {
3130 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3131 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3132 .name = "MultiMedia4 Channel Mixer",
3133 .info = msm_pcm_channel_mixer_info,
3134 .get = msm_pcm_channel_mixer_get,
3135 .put = msm_pcm_channel_mixer_put,
3136 .private_value = (unsigned long)&(mm4_channel_mux)
3137 },
3138 {
3139 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3140 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3141 .name = "MultiMedia1 Output Channel1",
3142 .info = msm_pcm_channel_weight_info,
3143 .get = msm_pcm_channel_weight_get,
3144 .put = msm_pcm_channel_weight_put,
3145 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3146 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 0,}
3147 },
3148 {
3149 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3150 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3151 .name = "MultiMedia1 Output Channel2",
3152 .info = msm_pcm_channel_weight_info,
3153 .get = msm_pcm_channel_weight_get,
3154 .put = msm_pcm_channel_weight_put,
3155 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3156 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 1, }
3157 },
3158 {
3159 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3160 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3161 .name = "MultiMedia1 Output Channel3",
3162 .info = msm_pcm_channel_weight_info,
3163 .get = msm_pcm_channel_weight_get,
3164 .put = msm_pcm_channel_weight_put,
3165 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3166 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 2,}
3167 },
3168 {
3169 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3170 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3171 .name = "MultiMedia1 Output Channel4",
3172 .info = msm_pcm_channel_weight_info,
3173 .get = msm_pcm_channel_weight_get,
3174 .put = msm_pcm_channel_weight_put,
3175 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3176 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 3,}
3177 },
3178 {
3179 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3180 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3181 .name = "MultiMedia1 Output Channel5",
3182 .info = msm_pcm_channel_weight_info,
3183 .get = msm_pcm_channel_weight_get,
3184 .put = msm_pcm_channel_weight_put,
3185 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3186 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 4,}
3187 },
3188 {
3189 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3190 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3191 .name = "MultiMedia1 Output Channel6",
3192 .info = msm_pcm_channel_weight_info,
3193 .get = msm_pcm_channel_weight_get,
3194 .put = msm_pcm_channel_weight_put,
3195 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3196 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 5,}
3197 },
3198 {
3199 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3200 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3201 .name = "MultiMedia1 Output Channel7",
3202 .info = msm_pcm_channel_weight_info,
3203 .get = msm_pcm_channel_weight_get,
3204 .put = msm_pcm_channel_weight_put,
3205 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3206 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 6,}
3207 },
3208 {
3209 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3210 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3211 .name = "MultiMedia1 Output Channel8",
3212 .info = msm_pcm_channel_weight_info,
3213 .get = msm_pcm_channel_weight_get,
3214 .put = msm_pcm_channel_weight_put,
3215 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3216 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 7,}
3217 },
3218 {
3219 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3220 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3221 .name = "MultiMedia2 Output Channel1",
3222 .info = msm_pcm_channel_weight_info,
3223 .get = msm_pcm_channel_weight_get,
3224 .put = msm_pcm_channel_weight_put,
3225 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3226 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 0,}
3227 },
3228 {
3229 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3230 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3231 .name = "MultiMedia2 Output Channel2",
3232 .info = msm_pcm_channel_weight_info,
3233 .get = msm_pcm_channel_weight_get,
3234 .put = msm_pcm_channel_weight_put,
3235 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3236 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 1,}
3237 },
3238 {
3239 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3240 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3241 .name = "MultiMedia2 Output Channel3",
3242 .info = msm_pcm_channel_weight_info,
3243 .get = msm_pcm_channel_weight_get,
3244 .put = msm_pcm_channel_weight_put,
3245 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3246 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 2,}
3247 },
3248 {
3249 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3250 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3251 .name = "MultiMedia3 Output Channel1",
3252 .info = msm_pcm_channel_weight_info,
3253 .get = msm_pcm_channel_weight_get,
3254 .put = msm_pcm_channel_weight_put,
3255 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3256 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA3, .rshift = 0,}
3257 },
3258 {
3259 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3260 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3261 .name = "MultiMedia3 Output Channel2",
3262 .info = msm_pcm_channel_weight_info,
3263 .get = msm_pcm_channel_weight_get,
3264 .put = msm_pcm_channel_weight_put,
3265 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3266 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA3, .rshift = 1,}
3267 },
3268 {
3269 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3270 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3271 .name = "MultiMedia1 Channel1",
3272 .info = msm_pcm_channel_input_be_info,
3273 .get = msm_pcm_channel_input_be_get,
3274 .put = msm_pcm_channel_input_be_put,
3275 .private_value = (unsigned long)&(mm1_ch1_enum)
3276 },
3277 {
3278 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3279 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3280 .name = "MultiMedia1 Channel2",
3281 .info = msm_pcm_channel_input_be_info,
3282 .get = msm_pcm_channel_input_be_get,
3283 .put = msm_pcm_channel_input_be_put,
3284 .private_value = (unsigned long)&(mm1_ch2_enum)
3285 },
3286 {
3287 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3288 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3289 .name = "MultiMedia1 Channel3",
3290 .info = msm_pcm_channel_input_be_info,
3291 .get = msm_pcm_channel_input_be_get,
3292 .put = msm_pcm_channel_input_be_put,
3293 .private_value = (unsigned long)&(mm1_ch3_enum)
3294 },
3295 {
3296 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3297 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3298 .name = "MultiMedia1 Channel4",
3299 .info = msm_pcm_channel_input_be_info,
3300 .get = msm_pcm_channel_input_be_get,
3301 .put = msm_pcm_channel_input_be_put,
3302 .private_value = (unsigned long)&(mm1_ch4_enum)
3303 },
3304 {
3305 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3306 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3307 .name = "MultiMedia1 Channel5",
3308 .info = msm_pcm_channel_input_be_info,
3309 .get = msm_pcm_channel_input_be_get,
3310 .put = msm_pcm_channel_input_be_put,
3311 .private_value = (unsigned long)&(mm1_ch5_enum)
3312 },
3313 {
3314 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3315 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3316 .name = "MultiMedia1 Channel6",
3317 .info = msm_pcm_channel_input_be_info,
3318 .get = msm_pcm_channel_input_be_get,
3319 .put = msm_pcm_channel_input_be_put,
3320 .private_value = (unsigned long)&(mm1_ch6_enum)
3321 },
3322 {
3323 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3324 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3325 .name = "MultiMedia1 Channel7",
3326 .info = msm_pcm_channel_input_be_info,
3327 .get = msm_pcm_channel_input_be_get,
3328 .put = msm_pcm_channel_input_be_put,
3329 .private_value = (unsigned long)&(mm1_ch7_enum)
3330 },
3331 {
3332 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3333 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3334 .name = "MultiMedia1 Channel8",
3335 .info = msm_pcm_channel_input_be_info,
3336 .get = msm_pcm_channel_input_be_get,
3337 .put = msm_pcm_channel_input_be_put,
3338 .private_value = (unsigned long)&(mm1_ch8_enum)
3339 },
3340};
3341static int msm_ec_ref_ch_get(struct snd_kcontrol *kcontrol,
3342 struct snd_ctl_elem_value *ucontrol)
3343{
3344 ucontrol->value.integer.value[0] = msm_ec_ref_ch;
3345 pr_debug("%s: msm_ec_ref_ch = %ld\n", __func__,
3346 ucontrol->value.integer.value[0]);
3347 return 0;
3348}
3349
3350static int msm_ec_ref_ch_put(struct snd_kcontrol *kcontrol,
3351 struct snd_ctl_elem_value *ucontrol)
3352{
3353 msm_ec_ref_ch = ucontrol->value.integer.value[0];
3354 pr_debug("%s: msm_ec_ref_ch = %d\n", __func__, msm_ec_ref_ch);
3355 adm_num_ec_ref_rx_chans(msm_ec_ref_ch);
3356 return 0;
3357}
3358
3359static const char *const ec_ref_ch_text[] = {"Zero", "One", "Two", "Three",
3360 "Four", "Five", "Six", "Seven", "Eight"};
3361
3362static int msm_ec_ref_bit_format_get(struct snd_kcontrol *kcontrol,
3363 struct snd_ctl_elem_value *ucontrol)
3364{
3365 switch (msm_ec_ref_bit_format) {
3366 case SNDRV_PCM_FORMAT_S24_LE:
3367 ucontrol->value.integer.value[0] = 2;
3368 break;
3369 case SNDRV_PCM_FORMAT_S16_LE:
3370 ucontrol->value.integer.value[0] = 1;
3371 break;
3372 default:
3373 ucontrol->value.integer.value[0] = 0;
3374 break;
3375 }
3376 pr_debug("%s: msm_ec_ref_bit_format = %ld\n",
3377 __func__, ucontrol->value.integer.value[0]);
3378 return 0;
3379}
3380
3381static int msm_ec_ref_bit_format_put(struct snd_kcontrol *kcontrol,
3382 struct snd_ctl_elem_value *ucontrol)
3383{
3384 u16 bit_width = 0;
3385
3386 switch (ucontrol->value.integer.value[0]) {
3387 case 2:
3388 msm_ec_ref_bit_format = SNDRV_PCM_FORMAT_S24_LE;
3389 break;
3390 case 1:
3391 msm_ec_ref_bit_format = SNDRV_PCM_FORMAT_S16_LE;
3392 break;
3393 default:
3394 msm_ec_ref_bit_format = 0;
3395 break;
3396 }
3397
3398 if (msm_ec_ref_bit_format == SNDRV_PCM_FORMAT_S16_LE)
3399 bit_width = 16;
3400 else if (msm_ec_ref_bit_format == SNDRV_PCM_FORMAT_S24_LE)
3401 bit_width = 24;
3402
3403 pr_debug("%s: msm_ec_ref_bit_format = %d\n",
3404 __func__, msm_ec_ref_bit_format);
3405 adm_ec_ref_rx_bit_width(bit_width);
3406 return 0;
3407}
3408
3409static char const *ec_ref_bit_format_text[] = {"0", "S16_LE", "S24_LE"};
3410
3411static int msm_ec_ref_rate_get(struct snd_kcontrol *kcontrol,
3412 struct snd_ctl_elem_value *ucontrol)
3413{
3414 ucontrol->value.integer.value[0] = msm_ec_ref_sampling_rate;
3415 pr_debug("%s: msm_ec_ref_sampling_rate = %ld\n",
3416 __func__, ucontrol->value.integer.value[0]);
3417 return 0;
3418}
3419
3420static int msm_ec_ref_rate_put(struct snd_kcontrol *kcontrol,
3421 struct snd_ctl_elem_value *ucontrol)
3422{
3423 switch (ucontrol->value.integer.value[0]) {
3424 case 0:
3425 msm_ec_ref_sampling_rate = 0;
3426 break;
3427 case 1:
3428 msm_ec_ref_sampling_rate = 8000;
3429 break;
3430 case 2:
3431 msm_ec_ref_sampling_rate = 16000;
3432 break;
3433 case 3:
3434 msm_ec_ref_sampling_rate = 32000;
3435 break;
3436 case 4:
3437 msm_ec_ref_sampling_rate = 44100;
3438 break;
3439 case 5:
3440 msm_ec_ref_sampling_rate = 48000;
3441 break;
3442 case 6:
3443 msm_ec_ref_sampling_rate = 96000;
3444 break;
3445 case 7:
3446 msm_ec_ref_sampling_rate = 192000;
3447 break;
3448 case 8:
3449 msm_ec_ref_sampling_rate = 384000;
3450 break;
3451 default:
3452 msm_ec_ref_sampling_rate = 48000;
3453 break;
3454 }
3455 pr_debug("%s: msm_ec_ref_sampling_rate = %d\n",
3456 __func__, msm_ec_ref_sampling_rate);
3457 adm_ec_ref_rx_sampling_rate(msm_ec_ref_sampling_rate);
3458 return 0;
3459}
3460
3461static const char *const ec_ref_rate_text[] = {"0", "8000", "16000",
3462 "32000", "44100", "48000", "96000", "192000", "384000"};
3463
3464static const struct soc_enum msm_route_ec_ref_params_enum[] = {
3465 SOC_ENUM_SINGLE_EXT(9, ec_ref_ch_text),
3466 SOC_ENUM_SINGLE_EXT(3, ec_ref_bit_format_text),
3467 SOC_ENUM_SINGLE_EXT(9, ec_ref_rate_text),
3468};
3469
3470static const struct snd_kcontrol_new ec_ref_param_controls[] = {
3471 SOC_ENUM_EXT("EC Reference Channels", msm_route_ec_ref_params_enum[0],
3472 msm_ec_ref_ch_get, msm_ec_ref_ch_put),
3473 SOC_ENUM_EXT("EC Reference Bit Format", msm_route_ec_ref_params_enum[1],
3474 msm_ec_ref_bit_format_get, msm_ec_ref_bit_format_put),
3475 SOC_ENUM_EXT("EC Reference SampleRate", msm_route_ec_ref_params_enum[2],
3476 msm_ec_ref_rate_get, msm_ec_ref_rate_put),
3477};
3478
3479static int msm_routing_ec_ref_rx_get(struct snd_kcontrol *kcontrol,
3480 struct snd_ctl_elem_value *ucontrol)
3481{
3482 pr_debug("%s: ec_ref_rx = %d", __func__, msm_route_ec_ref_rx);
3483 mutex_lock(&routing_lock);
3484 ucontrol->value.integer.value[0] = msm_route_ec_ref_rx;
3485 mutex_unlock(&routing_lock);
3486 return 0;
3487}
3488
3489static int msm_routing_ec_ref_rx_put(struct snd_kcontrol *kcontrol,
3490 struct snd_ctl_elem_value *ucontrol)
3491{
3492 int ec_ref_port_id;
3493 struct snd_soc_dapm_widget_list *wlist =
3494 dapm_kcontrol_get_wlist(kcontrol);
3495 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
3496 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3497 struct snd_soc_dapm_update *update = NULL;
3498
3499
3500 mutex_lock(&routing_lock);
3501 switch (ucontrol->value.integer.value[0]) {
3502 case 0:
3503 msm_route_ec_ref_rx = 0;
3504 ec_ref_port_id = AFE_PORT_INVALID;
3505 break;
3506 case 1:
3507 msm_route_ec_ref_rx = 1;
3508 ec_ref_port_id = SLIMBUS_0_RX;
3509 break;
3510 case 2:
3511 msm_route_ec_ref_rx = 2;
3512 ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_RX;
3513 break;
3514 case 3:
3515 msm_route_ec_ref_rx = 3;
3516 ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_TX;
3517 break;
3518 case 4:
3519 msm_route_ec_ref_rx = 4;
3520 ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_TX;
3521 break;
3522 case 5:
3523 msm_route_ec_ref_rx = 5;
3524 ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
3525 break;
3526 case 6:
3527 msm_route_ec_ref_rx = 6;
3528 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
3529 break;
3530 case 7:
3531 msm_route_ec_ref_rx = 7;
3532 ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_RX;
3533 break;
3534 case 9:
3535 msm_route_ec_ref_rx = 9;
3536 ec_ref_port_id = SLIMBUS_5_RX;
3537 break;
3538 case 10:
3539 msm_route_ec_ref_rx = 10;
3540 ec_ref_port_id = SLIMBUS_1_TX;
3541 break;
3542 case 11:
3543 msm_route_ec_ref_rx = 11;
3544 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_TX_1;
3545 break;
3546 case 12:
3547 msm_route_ec_ref_rx = 12;
3548 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX;
3549 break;
3550 case 13:
3551 msm_route_ec_ref_rx = 13;
3552 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX_1;
3553 break;
3554 case 14:
3555 msm_route_ec_ref_rx = 14;
3556 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX_2;
3557 break;
3558 case 15:
3559 msm_route_ec_ref_rx = 15;
3560 ec_ref_port_id = SLIMBUS_6_RX;
3561 break;
3562 case 16:
3563 msm_route_ec_ref_rx = 16;
3564 ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_RX;
3565 break;
3566 case 17:
3567 msm_route_ec_ref_rx = 17;
3568 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_RX;
3569 break;
3570 case 18:
3571 msm_route_ec_ref_rx = 18;
3572 ec_ref_port_id = AFE_PORT_ID_TERTIARY_TDM_TX;
3573 break;
3574 case 19:
3575 msm_route_ec_ref_rx = 19;
3576 ec_ref_port_id = AFE_PORT_ID_USB_RX;
3577 break;
3578 case 20:
3579 msm_route_ec_ref_rx = 20;
3580 ec_ref_port_id = AFE_PORT_ID_INT0_MI2S_RX;
3581 break;
3582 case 21:
3583 msm_route_ec_ref_rx = 21;
3584 ec_ref_port_id = AFE_PORT_ID_INT4_MI2S_RX;
3585 break;
3586 case 22:
3587 msm_route_ec_ref_rx = 22;
3588 ec_ref_port_id = AFE_PORT_ID_INT3_MI2S_TX;
3589 break;
3590 default:
3591 msm_route_ec_ref_rx = 0; /* NONE */
3592 pr_err("%s EC ref rx %ld not valid\n",
3593 __func__, ucontrol->value.integer.value[0]);
3594 ec_ref_port_id = AFE_PORT_INVALID;
3595 break;
3596 }
3597 adm_ec_ref_rx_id(ec_ref_port_id);
3598 pr_debug("%s: msm_route_ec_ref_rx = %d\n",
3599 __func__, msm_route_ec_ref_rx);
3600 mutex_unlock(&routing_lock);
3601 snd_soc_dapm_mux_update_power(widget->dapm, kcontrol,
3602 msm_route_ec_ref_rx, e, update);
3603 return 0;
3604}
3605
3606static const char *const ec_ref_rx[] = { "None", "SLIM_RX", "I2S_RX",
3607 "PRI_MI2S_TX", "SEC_MI2S_TX",
3608 "TERT_MI2S_TX", "QUAT_MI2S_TX", "SEC_I2S_RX", "PROXY_RX",
3609 "SLIM_5_RX", "SLIM_1_TX", "QUAT_TDM_TX_1",
3610 "QUAT_TDM_RX_0", "QUAT_TDM_RX_1", "QUAT_TDM_RX_2", "SLIM_6_RX",
3611 "TERT_MI2S_RX", "QUAT_MI2S_RX", "TERT_TDM_TX_0", "USB_AUDIO_RX",
3612 "INT0_MI2S_RX", "INT4_MI2S_RX", "INT3_MI2S_TX"};
3613
3614static const struct soc_enum msm_route_ec_ref_rx_enum[] = {
3615 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ec_ref_rx), ec_ref_rx),
3616};
3617
3618static const struct snd_kcontrol_new ext_ec_ref_mux_ul1 =
3619 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL1 MUX Mux",
3620 msm_route_ec_ref_rx_enum[0],
3621 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3622
3623static const struct snd_kcontrol_new ext_ec_ref_mux_ul2 =
3624 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL2 MUX Mux",
3625 msm_route_ec_ref_rx_enum[0],
3626 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3627
3628static const struct snd_kcontrol_new ext_ec_ref_mux_ul3 =
3629 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL3 MUX Mux",
3630 msm_route_ec_ref_rx_enum[0],
3631 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3632
3633static const struct snd_kcontrol_new ext_ec_ref_mux_ul4 =
3634 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL4 MUX Mux",
3635 msm_route_ec_ref_rx_enum[0],
3636 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3637
3638static const struct snd_kcontrol_new ext_ec_ref_mux_ul5 =
3639 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL5 MUX Mux",
3640 msm_route_ec_ref_rx_enum[0],
3641 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3642
3643static const struct snd_kcontrol_new ext_ec_ref_mux_ul6 =
3644 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL6 MUX Mux",
3645 msm_route_ec_ref_rx_enum[0],
3646 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3647
3648static const struct snd_kcontrol_new ext_ec_ref_mux_ul8 =
3649 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL8 MUX Mux",
3650 msm_route_ec_ref_rx_enum[0],
3651 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3652
3653static const struct snd_kcontrol_new ext_ec_ref_mux_ul9 =
3654 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL9 MUX Mux",
3655 msm_route_ec_ref_rx_enum[0],
3656 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3657
3658static const struct snd_kcontrol_new ext_ec_ref_mux_ul17 =
3659 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL17 MUX Mux",
3660 msm_route_ec_ref_rx_enum[0],
3661 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3662
3663static const struct snd_kcontrol_new ext_ec_ref_mux_ul18 =
3664 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL18 MUX Mux",
3665 msm_route_ec_ref_rx_enum[0],
3666 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3667
3668static const struct snd_kcontrol_new ext_ec_ref_mux_ul19 =
3669 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL19 MUX Mux",
3670 msm_route_ec_ref_rx_enum[0],
3671 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3672
3673static int msm_routing_ext_ec_get(struct snd_kcontrol *kcontrol,
3674 struct snd_ctl_elem_value *ucontrol)
3675{
3676 pr_debug("%s: ext_ec_ref_rx = %x\n", __func__, msm_route_ext_ec_ref);
3677
3678 mutex_lock(&routing_lock);
3679 ucontrol->value.integer.value[0] = msm_route_ext_ec_ref;
3680 mutex_unlock(&routing_lock);
3681 return 0;
3682}
3683
3684static int msm_routing_ext_ec_put(struct snd_kcontrol *kcontrol,
3685 struct snd_ctl_elem_value *ucontrol)
3686{
3687 struct snd_soc_dapm_widget_list *wlist =
3688 dapm_kcontrol_get_wlist(kcontrol);
3689 struct snd_soc_dapm_widget *widget = wlist->widgets[0];
3690 int mux = ucontrol->value.enumerated.item[0];
3691 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3692 int ret = 1;
3693 bool state = true;
3694 uint16_t ext_ec_ref_port_id;
3695 struct snd_soc_dapm_update *update = NULL;
3696
3697 if (mux >= e->items) {
3698 pr_err("%s: Invalid mux value %d\n", __func__, mux);
3699 return -EINVAL;
3700 }
3701
3702 mutex_lock(&routing_lock);
3703 msm_route_ext_ec_ref = ucontrol->value.integer.value[0];
3704
3705 switch (msm_route_ext_ec_ref) {
3706 case EXT_EC_REF_PRI_MI2S_TX:
3707 ext_ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_TX;
3708 break;
3709 case EXT_EC_REF_SEC_MI2S_TX:
3710 ext_ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_TX;
3711 break;
3712 case EXT_EC_REF_TERT_MI2S_TX:
3713 ext_ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
3714 break;
3715 case EXT_EC_REF_QUAT_MI2S_TX:
3716 ext_ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
3717 break;
3718 case EXT_EC_REF_QUIN_MI2S_TX:
3719 ext_ec_ref_port_id = AFE_PORT_ID_QUINARY_MI2S_TX;
3720 break;
3721 case EXT_EC_REF_SLIM_1_TX:
3722 ext_ec_ref_port_id = SLIMBUS_1_TX;
3723 break;
3724 case EXT_EC_REF_NONE:
3725 default:
3726 ext_ec_ref_port_id = AFE_PORT_INVALID;
3727 state = false;
3728 break;
3729 }
3730
3731 pr_debug("%s: val = %d ext_ec_ref_port_id = 0x%0x state = %d\n",
3732 __func__, msm_route_ext_ec_ref, ext_ec_ref_port_id, state);
3733
3734 if (!voc_set_ext_ec_ref_port_id(ext_ec_ref_port_id, state)) {
3735 mutex_unlock(&routing_lock);
3736 snd_soc_dapm_mux_update_power(widget->dapm, kcontrol, mux, e,
3737 update);
3738 } else {
3739 ret = -EINVAL;
3740 mutex_unlock(&routing_lock);
3741 }
3742 return ret;
3743}
3744
3745static const char * const ext_ec_ref_rx[] = {"NONE", "PRI_MI2S_TX",
3746 "SEC_MI2S_TX", "TERT_MI2S_TX",
3747 "QUAT_MI2S_TX", "QUIN_MI2S_TX",
3748 "SLIM_1_TX"};
3749
3750static const struct soc_enum msm_route_ext_ec_ref_rx_enum[] = {
3751 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ext_ec_ref_rx), ext_ec_ref_rx),
3752};
3753
3754static const struct snd_kcontrol_new voc_ext_ec_mux =
3755 SOC_DAPM_ENUM_EXT("VOC_EXT_EC MUX Mux", msm_route_ext_ec_ref_rx_enum[0],
3756 msm_routing_ext_ec_get, msm_routing_ext_ec_put);
3757
3758
3759static const struct snd_kcontrol_new pri_i2s_rx_mixer_controls[] = {
3760 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_I2S_RX,
3761 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3762 msm_routing_put_audio_mixer),
3763 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_I2S_RX,
3764 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3765 msm_routing_put_audio_mixer),
3766 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_I2S_RX,
3767 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3768 msm_routing_put_audio_mixer),
3769 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_I2S_RX,
3770 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3771 msm_routing_put_audio_mixer),
3772 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_I2S_RX,
3773 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3774 msm_routing_put_audio_mixer),
3775 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_I2S_RX,
3776 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3777 msm_routing_put_audio_mixer),
3778 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_I2S_RX,
3779 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3780 msm_routing_put_audio_mixer),
3781 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_I2S_RX,
3782 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3783 msm_routing_put_audio_mixer),
3784 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_I2S_RX,
3785 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3786 msm_routing_put_audio_mixer),
3787 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_I2S_RX,
3788 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3789 msm_routing_put_audio_mixer),
3790 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_I2S_RX,
3791 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3792 msm_routing_put_audio_mixer),
3793 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_I2S_RX,
3794 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3795 msm_routing_put_audio_mixer),
3796 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_I2S_RX,
3797 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3798 msm_routing_put_audio_mixer),
3799 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_I2S_RX,
3800 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3801 msm_routing_put_audio_mixer),
3802 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_I2S_RX,
3803 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3804 msm_routing_put_audio_mixer),
3805 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_I2S_RX,
3806 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3807 msm_routing_put_audio_mixer),
3808 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_PRI_I2S_RX,
3809 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3810 msm_routing_put_audio_mixer),
3811 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_PRI_I2S_RX,
3812 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3813 msm_routing_put_audio_mixer),
3814 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_PRI_I2S_RX,
3815 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3816 msm_routing_put_audio_mixer),
3817};
3818
3819static const struct snd_kcontrol_new sec_i2s_rx_mixer_controls[] = {
3820 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_I2S_RX,
3821 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3822 msm_routing_put_audio_mixer),
3823 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_I2S_RX,
3824 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3825 msm_routing_put_audio_mixer),
3826 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_I2S_RX,
3827 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3828 msm_routing_put_audio_mixer),
3829 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_I2S_RX,
3830 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3831 msm_routing_put_audio_mixer),
3832 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_I2S_RX,
3833 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3834 msm_routing_put_audio_mixer),
3835 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_I2S_RX,
3836 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3837 msm_routing_put_audio_mixer),
3838 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_I2S_RX,
3839 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3840 msm_routing_put_audio_mixer),
3841 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_I2S_RX,
3842 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3843 msm_routing_put_audio_mixer),
3844 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_I2S_RX,
3845 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3846 msm_routing_put_audio_mixer),
3847 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_I2S_RX,
3848 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3849 msm_routing_put_audio_mixer),
3850 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_I2S_RX,
3851 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3852 msm_routing_put_audio_mixer),
3853 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_I2S_RX,
3854 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3855 msm_routing_put_audio_mixer),
3856 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_I2S_RX,
3857 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3858 msm_routing_put_audio_mixer),
3859 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_I2S_RX,
3860 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3861 msm_routing_put_audio_mixer),
3862 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_I2S_RX,
3863 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3864 msm_routing_put_audio_mixer),
3865 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_I2S_RX,
3866 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3867 msm_routing_put_audio_mixer),
3868 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SEC_I2S_RX,
3869 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3870 msm_routing_put_audio_mixer),
3871 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SEC_I2S_RX,
3872 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3873 msm_routing_put_audio_mixer),
3874 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SEC_I2S_RX,
3875 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3876 msm_routing_put_audio_mixer),
3877};
3878
3879static const struct snd_kcontrol_new spdif_rx_mixer_controls[] = {
3880 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SPDIF_RX,
3881 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3882 msm_routing_put_audio_mixer),
3883 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SPDIF_RX,
3884 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3885 msm_routing_put_audio_mixer),
3886 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SPDIF_RX,
3887 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3888 msm_routing_put_audio_mixer),
3889 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SPDIF_RX,
3890 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3891 msm_routing_put_audio_mixer),
3892 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SPDIF_RX,
3893 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3894 msm_routing_put_audio_mixer),
3895 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SPDIF_RX,
3896 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3897 msm_routing_put_audio_mixer),
3898 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SPDIF_RX,
3899 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3900 msm_routing_put_audio_mixer),
3901 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SPDIF_RX,
3902 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3903 msm_routing_put_audio_mixer),
3904 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SPDIF_RX,
3905 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3906 msm_routing_put_audio_mixer),
3907 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SPDIF_RX,
3908 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3909 msm_routing_put_audio_mixer),
3910 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SPDIF_RX,
3911 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3912 msm_routing_put_audio_mixer),
3913 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SPDIF_RX,
3914 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3915 msm_routing_put_audio_mixer),
3916 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SPDIF_RX,
3917 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3918 msm_routing_put_audio_mixer),
3919 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SPDIF_RX,
3920 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3921 msm_routing_put_audio_mixer),
3922 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SPDIF_RX,
3923 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3924 msm_routing_put_audio_mixer),
3925 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SPDIF_RX,
3926 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3927 msm_routing_put_audio_mixer),
3928 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SPDIF_RX,
3929 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3930 msm_routing_put_audio_mixer),
3931 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SPDIF_RX,
3932 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3933 msm_routing_put_audio_mixer),
3934 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SPDIF_RX,
3935 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3936 msm_routing_put_audio_mixer),
3937
3938};
3939
3940static const struct snd_kcontrol_new slimbus_2_rx_mixer_controls[] = {
3941 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3942 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3943 msm_routing_put_audio_mixer),
3944 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3945 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3946 msm_routing_put_audio_mixer),
3947 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3948 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3949 msm_routing_put_audio_mixer),
3950 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3951 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3952 msm_routing_put_audio_mixer),
3953 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3954 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3955 msm_routing_put_audio_mixer),
3956 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3957 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3958 msm_routing_put_audio_mixer),
3959 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3960 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3961 msm_routing_put_audio_mixer),
3962 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3963 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3964 msm_routing_put_audio_mixer),
3965 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3966 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3967 msm_routing_put_audio_mixer),
3968 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3969 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3970 msm_routing_put_audio_mixer),
3971 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3972 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3973 msm_routing_put_audio_mixer),
3974 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3975 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3976 msm_routing_put_audio_mixer),
3977 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3978 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3979 msm_routing_put_audio_mixer),
3980 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3981 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3982 msm_routing_put_audio_mixer),
3983 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3984 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3985 msm_routing_put_audio_mixer),
3986 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3987 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3988 msm_routing_put_audio_mixer),
3989};
3990
3991static const struct snd_kcontrol_new slimbus_5_rx_mixer_controls[] = {
3992 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3993 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3994 msm_routing_put_audio_mixer),
3995 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3996 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3997 msm_routing_put_audio_mixer),
3998 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3999 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4000 msm_routing_put_audio_mixer),
4001 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4002 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4003 msm_routing_put_audio_mixer),
4004 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4005 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4006 msm_routing_put_audio_mixer),
4007 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4008 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4009 msm_routing_put_audio_mixer),
4010 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4011 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4012 msm_routing_put_audio_mixer),
4013 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4014 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4015 msm_routing_put_audio_mixer),
4016 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4017 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4018 msm_routing_put_audio_mixer),
4019 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4020 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4021 msm_routing_put_audio_mixer),
4022 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4023 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4024 msm_routing_put_audio_mixer),
4025 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4026 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4027 msm_routing_put_audio_mixer),
4028 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4029 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4030 msm_routing_put_audio_mixer),
4031 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4032 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4033 msm_routing_put_audio_mixer),
4034 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4035 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4036 msm_routing_put_audio_mixer),
4037 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4038 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4039 msm_routing_put_audio_mixer),
4040 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4041 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4042 msm_routing_put_audio_mixer),
4043 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4044 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4045 msm_routing_put_audio_mixer),
4046 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4047 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4048 msm_routing_put_audio_mixer),
4049};
4050
4051static const struct snd_kcontrol_new slimbus_rx_mixer_controls[] = {
4052 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4053 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4054 msm_routing_put_audio_mixer),
4055 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4056 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4057 msm_routing_put_audio_mixer),
4058 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4059 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4060 msm_routing_put_audio_mixer),
4061 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4062 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4063 msm_routing_put_audio_mixer),
4064 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4065 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4066 msm_routing_put_audio_mixer),
4067 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4068 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4069 msm_routing_put_audio_mixer),
4070 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4071 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4072 msm_routing_put_audio_mixer),
4073 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4074 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4075 msm_routing_put_audio_mixer),
4076 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4077 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4078 msm_routing_put_audio_mixer),
4079 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4080 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4081 msm_routing_put_audio_mixer),
4082 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4083 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4084 msm_routing_put_audio_mixer),
4085 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4086 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4087 msm_routing_put_audio_mixer),
4088 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4089 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4090 msm_routing_put_audio_mixer),
4091 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4092 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4093 msm_routing_put_audio_mixer),
4094 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4095 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4096 msm_routing_put_audio_mixer),
4097 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4098 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4099 msm_routing_put_audio_mixer),
4100 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4101 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4102 msm_routing_put_audio_mixer),
4103 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4104 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4105 msm_routing_put_audio_mixer),
4106 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4107 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4108 msm_routing_put_audio_mixer),
4109};
4110
4111static const struct snd_kcontrol_new mi2s_rx_mixer_controls[] = {
4112 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_MI2S_RX,
4113 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4114 msm_routing_put_audio_mixer),
4115 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_MI2S_RX,
4116 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4117 msm_routing_put_audio_mixer),
4118 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_MI2S_RX,
4119 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4120 msm_routing_put_audio_mixer),
4121 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_MI2S_RX,
4122 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4123 msm_routing_put_audio_mixer),
4124 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_MI2S_RX,
4125 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4126 msm_routing_put_audio_mixer),
4127 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_MI2S_RX,
4128 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4129 msm_routing_put_audio_mixer),
4130 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_MI2S_RX,
4131 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4132 msm_routing_put_audio_mixer),
4133 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_MI2S_RX,
4134 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4135 msm_routing_put_audio_mixer),
4136 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_MI2S_RX,
4137 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4138 msm_routing_put_audio_mixer),
4139 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_MI2S_RX,
4140 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4141 msm_routing_put_audio_mixer),
4142 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_MI2S_RX,
4143 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4144 msm_routing_put_audio_mixer),
4145 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_MI2S_RX,
4146 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4147 msm_routing_put_audio_mixer),
4148 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_MI2S_RX,
4149 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4150 msm_routing_put_audio_mixer),
4151 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_MI2S_RX,
4152 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4153 msm_routing_put_audio_mixer),
4154 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_MI2S_RX,
4155 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4156 msm_routing_put_audio_mixer),
4157 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_MI2S_RX,
4158 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4159 msm_routing_put_audio_mixer),
4160 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_MI2S_RX,
4161 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4162 msm_routing_put_audio_mixer),
4163 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_MI2S_RX,
4164 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4165 msm_routing_put_audio_mixer),
4166 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_MI2S_RX,
4167 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4168 msm_routing_put_audio_mixer),
4169};
4170
4171static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = {
4172 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4173 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4174 msm_routing_put_audio_mixer),
4175 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4176 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4177 msm_routing_put_audio_mixer),
4178 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4179 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4180 msm_routing_put_audio_mixer),
4181 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4182 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4183 msm_routing_put_audio_mixer),
4184 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4185 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4186 msm_routing_put_audio_mixer),
4187 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4188 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4189 msm_routing_put_audio_mixer),
4190 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4191 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4192 msm_routing_put_audio_mixer),
4193 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4194 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4195 msm_routing_put_audio_mixer),
4196 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4197 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4198 msm_routing_put_audio_mixer),
4199 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4200 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4201 msm_routing_put_audio_mixer),
4202 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4203 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4204 msm_routing_put_audio_mixer),
4205 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4206 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4207 msm_routing_put_audio_mixer),
4208 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4209 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4210 msm_routing_put_audio_mixer),
4211 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4212 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4213 msm_routing_put_audio_mixer),
4214 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4215 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4216 msm_routing_put_audio_mixer),
4217 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4218 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4219 msm_routing_put_audio_mixer),
4220 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4221 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4222 msm_routing_put_audio_mixer),
4223 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4224 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4225 msm_routing_put_audio_mixer),
4226 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4227 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4228 msm_routing_put_audio_mixer),
4229};
4230
4231static const struct snd_kcontrol_new quinary_mi2s_rx_mixer_controls[] = {
4232 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4233 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4234 msm_routing_put_audio_mixer),
4235 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4236 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4237 msm_routing_put_audio_mixer),
4238 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4239 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4240 msm_routing_put_audio_mixer),
4241 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4242 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4243 msm_routing_put_audio_mixer),
4244 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4245 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4246 msm_routing_put_audio_mixer),
4247 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4248 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4249 msm_routing_put_audio_mixer),
4250 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4251 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4252 msm_routing_put_audio_mixer),
4253 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4254 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4255 msm_routing_put_audio_mixer),
4256 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4257 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4258 msm_routing_put_audio_mixer),
4259 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4260 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4261 msm_routing_put_audio_mixer),
4262 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4263 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4264 msm_routing_put_audio_mixer),
4265 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4266 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4267 msm_routing_put_audio_mixer),
4268 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4269 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4270 msm_routing_put_audio_mixer),
4271 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4272 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4273 msm_routing_put_audio_mixer),
4274 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4275 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4276 msm_routing_put_audio_mixer),
4277 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4278 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4279 msm_routing_put_audio_mixer),
4280 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4281 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4282 msm_routing_put_audio_mixer),
4283 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4284 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4285 msm_routing_put_audio_mixer),
4286 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4287 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4288 msm_routing_put_audio_mixer),
4289};
4290
4291static const struct snd_kcontrol_new tertiary_mi2s_rx_mixer_controls[] = {
4292 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4293 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4294 msm_routing_put_audio_mixer),
4295 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4296 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4297 msm_routing_put_audio_mixer),
4298 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4299 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4300 msm_routing_put_audio_mixer),
4301 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4302 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4303 msm_routing_put_audio_mixer),
4304 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4305 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4306 msm_routing_put_audio_mixer),
4307 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4308 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4309 msm_routing_put_audio_mixer),
4310 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4311 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4312 msm_routing_put_audio_mixer),
4313 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4314 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4315 msm_routing_put_audio_mixer),
4316 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4317 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4318 msm_routing_put_audio_mixer),
4319 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4320 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4321 msm_routing_put_audio_mixer),
4322 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4323 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4324 msm_routing_put_audio_mixer),
4325 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4326 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4327 msm_routing_put_audio_mixer),
4328 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4329 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4330 msm_routing_put_audio_mixer),
4331 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4332 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4333 msm_routing_put_audio_mixer),
4334 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4335 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4336 msm_routing_put_audio_mixer),
4337 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4338 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4339 msm_routing_put_audio_mixer),
4340 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4341 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4342 msm_routing_put_audio_mixer),
4343};
4344
4345static const struct snd_kcontrol_new secondary_mi2s_rx2_mixer_controls[] = {
4346 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SECONDARY_MI2S_RX_SD1,
4347 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4348 msm_routing_put_audio_mixer),
4349};
4350
4351static const struct snd_kcontrol_new secondary_mi2s_rx_mixer_controls[] = {
4352 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4353 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4354 msm_routing_put_audio_mixer),
4355 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4356 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4357 msm_routing_put_audio_mixer),
4358 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4359 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4360 msm_routing_put_audio_mixer),
4361 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4362 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4363 msm_routing_put_audio_mixer),
4364 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4365 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4366 msm_routing_put_audio_mixer),
4367 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4368 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4369 msm_routing_put_audio_mixer),
4370 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4371 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4372 msm_routing_put_audio_mixer),
4373 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4374 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4375 msm_routing_put_audio_mixer),
4376 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4377 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4378 msm_routing_put_audio_mixer),
4379 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4380 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4381 msm_routing_put_audio_mixer),
4382 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4383 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4384 msm_routing_put_audio_mixer),
4385 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4386 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4387 msm_routing_put_audio_mixer),
4388 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4389 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4390 msm_routing_put_audio_mixer),
4391 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4392 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4393 msm_routing_put_audio_mixer),
4394 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4395 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4396 msm_routing_put_audio_mixer),
4397 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4398 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4399 msm_routing_put_audio_mixer),
4400 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4401 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4402 msm_routing_put_audio_mixer),
4403 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4404 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4405 msm_routing_put_audio_mixer),
4406 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4407 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4408 msm_routing_put_audio_mixer),
4409};
4410
4411static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
4412 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_MI2S_RX,
4413 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4414 msm_routing_put_audio_mixer),
4415 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_MI2S_RX,
4416 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4417 msm_routing_put_audio_mixer),
4418 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_MI2S_RX,
4419 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4420 msm_routing_put_audio_mixer),
4421 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_MI2S_RX,
4422 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4423 msm_routing_put_audio_mixer),
4424 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_MI2S_RX,
4425 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4426 msm_routing_put_audio_mixer),
4427 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_MI2S_RX,
4428 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4429 msm_routing_put_audio_mixer),
4430 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_MI2S_RX,
4431 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4432 msm_routing_put_audio_mixer),
4433 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_MI2S_RX,
4434 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4435 msm_routing_put_audio_mixer),
4436 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_MI2S_RX,
4437 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4438 msm_routing_put_audio_mixer),
4439 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_MI2S_RX,
4440 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4441 msm_routing_put_audio_mixer),
4442 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_MI2S_RX,
4443 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4444 msm_routing_put_audio_mixer),
4445 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_MI2S_RX,
4446 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4447 msm_routing_put_audio_mixer),
4448 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_MI2S_RX,
4449 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4450 msm_routing_put_audio_mixer),
4451 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_MI2S_RX,
4452 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4453 msm_routing_put_audio_mixer),
4454 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_MI2S_RX,
4455 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4456 msm_routing_put_audio_mixer),
4457 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_MI2S_RX,
4458 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4459 msm_routing_put_audio_mixer),
4460 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_PRI_MI2S_RX,
4461 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4462 msm_routing_put_audio_mixer),
4463 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_PRI_MI2S_RX,
4464 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4465 msm_routing_put_audio_mixer),
4466 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_PRI_MI2S_RX,
4467 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4468 msm_routing_put_audio_mixer),
4469};
4470
4471static const struct snd_kcontrol_new int0_mi2s_rx_mixer_controls[] = {
4472 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT0_MI2S_RX,
4473 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4474 msm_routing_put_audio_mixer),
4475 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT0_MI2S_RX,
4476 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4477 msm_routing_put_audio_mixer),
4478 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT0_MI2S_RX,
4479 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4480 msm_routing_put_audio_mixer),
4481 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT0_MI2S_RX,
4482 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4483 msm_routing_put_audio_mixer),
4484 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT0_MI2S_RX,
4485 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4486 msm_routing_put_audio_mixer),
4487 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT0_MI2S_RX,
4488 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4489 msm_routing_put_audio_mixer),
4490 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT0_MI2S_RX,
4491 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4492 msm_routing_put_audio_mixer),
4493 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT0_MI2S_RX,
4494 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4495 msm_routing_put_audio_mixer),
4496 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT0_MI2S_RX,
4497 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4498 msm_routing_put_audio_mixer),
4499 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT0_MI2S_RX,
4500 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4501 msm_routing_put_audio_mixer),
4502 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT0_MI2S_RX,
4503 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4504 msm_routing_put_audio_mixer),
4505 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT0_MI2S_RX,
4506 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4507 msm_routing_put_audio_mixer),
4508 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT0_MI2S_RX,
4509 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4510 msm_routing_put_audio_mixer),
4511 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT0_MI2S_RX,
4512 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4513 msm_routing_put_audio_mixer),
4514 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT0_MI2S_RX,
4515 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4516 msm_routing_put_audio_mixer),
4517 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT0_MI2S_RX,
4518 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4519 msm_routing_put_audio_mixer),
4520};
4521
4522static const struct snd_kcontrol_new int4_mi2s_rx_mixer_controls[] = {
4523 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT4_MI2S_RX,
4524 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4525 msm_routing_put_audio_mixer),
4526 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT4_MI2S_RX,
4527 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4528 msm_routing_put_audio_mixer),
4529 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT4_MI2S_RX,
4530 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4531 msm_routing_put_audio_mixer),
4532 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT4_MI2S_RX,
4533 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4534 msm_routing_put_audio_mixer),
4535 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT4_MI2S_RX,
4536 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4537 msm_routing_put_audio_mixer),
4538 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT4_MI2S_RX,
4539 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4540 msm_routing_put_audio_mixer),
4541 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT4_MI2S_RX,
4542 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4543 msm_routing_put_audio_mixer),
4544 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT4_MI2S_RX,
4545 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4546 msm_routing_put_audio_mixer),
4547 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT4_MI2S_RX,
4548 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4549 msm_routing_put_audio_mixer),
4550 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT4_MI2S_RX,
4551 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4552 msm_routing_put_audio_mixer),
4553 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT4_MI2S_RX,
4554 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4555 msm_routing_put_audio_mixer),
4556 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT4_MI2S_RX,
4557 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4558 msm_routing_put_audio_mixer),
4559 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT4_MI2S_RX,
4560 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4561 msm_routing_put_audio_mixer),
4562 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT4_MI2S_RX,
4563 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4564 msm_routing_put_audio_mixer),
4565 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT4_MI2S_RX,
4566 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4567 msm_routing_put_audio_mixer),
4568 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT4_MI2S_RX,
4569 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4570 msm_routing_put_audio_mixer),
4571};
4572
4573static const struct snd_kcontrol_new hdmi_mixer_controls[] = {
4574 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_HDMI_RX,
4575 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4576 msm_routing_put_audio_mixer),
4577 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_HDMI_RX,
4578 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4579 msm_routing_put_audio_mixer),
4580 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_HDMI_RX,
4581 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4582 msm_routing_put_audio_mixer),
4583 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_HDMI_RX,
4584 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4585 msm_routing_put_audio_mixer),
4586 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_HDMI_RX,
4587 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4588 msm_routing_put_audio_mixer),
4589 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_HDMI_RX,
4590 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4591 msm_routing_put_audio_mixer),
4592 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_HDMI_RX,
4593 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4594 msm_routing_put_audio_mixer),
4595 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_HDMI_RX,
4596 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4597 msm_routing_put_audio_mixer),
4598 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_HDMI_RX,
4599 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4600 msm_routing_put_audio_mixer),
4601 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_HDMI_RX,
4602 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4603 msm_routing_put_audio_mixer),
4604 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_HDMI_RX,
4605 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4606 msm_routing_put_audio_mixer),
4607 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_HDMI_RX,
4608 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4609 msm_routing_put_audio_mixer),
4610 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_HDMI_RX,
4611 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4612 msm_routing_put_audio_mixer),
4613 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_HDMI_RX,
4614 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4615 msm_routing_put_audio_mixer),
4616 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_HDMI_RX,
4617 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4618 msm_routing_put_audio_mixer),
4619 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_HDMI_RX,
4620 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4621 msm_routing_put_audio_mixer),
4622 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_HDMI_RX,
4623 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4624 msm_routing_put_audio_mixer),
4625 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_HDMI_RX,
4626 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4627 msm_routing_put_audio_mixer),
4628 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_HDMI_RX,
4629 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4630 msm_routing_put_audio_mixer),
4631};
4632
4633static const struct snd_kcontrol_new display_port_mixer_controls[] = {
4634 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4635 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4636 msm_routing_put_audio_mixer),
4637 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4638 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4639 msm_routing_put_audio_mixer),
4640 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4641 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4642 msm_routing_put_audio_mixer),
4643 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4644 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4645 msm_routing_put_audio_mixer),
4646 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4647 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4648 msm_routing_put_audio_mixer),
4649 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4650 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4651 msm_routing_put_audio_mixer),
4652 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4653 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4654 msm_routing_put_audio_mixer),
4655 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4656 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4657 msm_routing_put_audio_mixer),
4658 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4659 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4660 msm_routing_put_audio_mixer),
4661 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4662 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4663 msm_routing_put_audio_mixer),
4664 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4665 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4666 msm_routing_put_audio_mixer),
4667 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4668 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4669 msm_routing_put_audio_mixer),
4670 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4671 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4672 msm_routing_put_audio_mixer),
4673 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4674 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4675 msm_routing_put_audio_mixer),
4676 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4677 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4678 msm_routing_put_audio_mixer),
4679 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4680 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4681 msm_routing_put_audio_mixer),
4682};
4683
4684 /* incall music delivery mixer */
4685static const struct snd_kcontrol_new incall_music_delivery_mixer_controls[] = {
4686 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4687 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4688 msm_routing_put_audio_mixer),
4689 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4690 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4691 msm_routing_put_audio_mixer),
4692 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4693 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4694 msm_routing_put_audio_mixer),
4695 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4696 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4697 msm_routing_put_audio_mixer),
4698};
4699
4700static const struct snd_kcontrol_new incall_music2_delivery_mixer_controls[] = {
4701 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4702 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4703 msm_routing_put_audio_mixer),
4704 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4705 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4706 msm_routing_put_audio_mixer),
4707 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4708 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4709 msm_routing_put_audio_mixer),
4710 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4711 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4712 msm_routing_put_audio_mixer),
4713};
4714
4715static const struct snd_kcontrol_new slimbus_4_rx_mixer_controls[] = {
4716 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4717 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4718 msm_routing_put_audio_mixer),
4719 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4720 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4721 msm_routing_put_audio_mixer),
4722 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4723 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4724 msm_routing_put_audio_mixer),
4725 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4726 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4727 msm_routing_put_audio_mixer),
4728};
4729
4730static const struct snd_kcontrol_new slimbus_6_rx_mixer_controls[] = {
4731 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4732 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4733 msm_routing_put_audio_mixer),
4734 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4735 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4736 msm_routing_put_audio_mixer),
4737 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4738 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4739 msm_routing_put_audio_mixer),
4740 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4741 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4742 msm_routing_put_audio_mixer),
4743 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4744 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4745 msm_routing_put_audio_mixer),
4746 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4747 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4748 msm_routing_put_audio_mixer),
4749 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4750 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4751 msm_routing_put_audio_mixer),
4752 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4753 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4754 msm_routing_put_audio_mixer),
4755 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4756 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4757 msm_routing_put_audio_mixer),
4758 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4759 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4760 msm_routing_put_audio_mixer),
4761 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4762 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4763 msm_routing_put_audio_mixer),
4764 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4765 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4766 msm_routing_put_audio_mixer),
4767 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4768 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4769 msm_routing_put_audio_mixer),
4770 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4771 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4772 msm_routing_put_audio_mixer),
4773 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4774 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4775 msm_routing_put_audio_mixer),
4776 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4777 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4778 msm_routing_put_audio_mixer),
4779};
4780
4781static const struct snd_kcontrol_new slimbus_7_rx_mixer_controls[] = {
4782 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4783 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4784 msm_routing_put_audio_mixer),
4785 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4786 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4787 msm_routing_put_audio_mixer),
4788 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4789 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4790 msm_routing_put_audio_mixer),
4791 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4792 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4793 msm_routing_put_audio_mixer),
4794 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4795 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4796 msm_routing_put_audio_mixer),
4797 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4798 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4799 msm_routing_put_audio_mixer),
4800 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4801 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4802 msm_routing_put_audio_mixer),
4803 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4804 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4805 msm_routing_put_audio_mixer),
4806 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4807 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4808 msm_routing_put_audio_mixer),
4809 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4810 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4811 msm_routing_put_audio_mixer),
4812 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4813 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4814 msm_routing_put_audio_mixer),
4815 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4816 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4817 msm_routing_put_audio_mixer),
4818 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4819 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4820 msm_routing_put_audio_mixer),
4821 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4822 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4823 msm_routing_put_audio_mixer),
4824 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4825 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4826 msm_routing_put_audio_mixer),
4827 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4828 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4829 msm_routing_put_audio_mixer),
4830};
4831
4832static const struct snd_kcontrol_new usb_audio_rx_mixer_controls[] = {
4833 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_USB_RX,
4834 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4835 msm_routing_put_audio_mixer),
4836 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_USB_RX,
4837 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4838 msm_routing_put_audio_mixer),
4839 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_USB_RX,
4840 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4841 msm_routing_put_audio_mixer),
4842 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_USB_RX,
4843 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4844 msm_routing_put_audio_mixer),
4845 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_USB_RX,
4846 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4847 msm_routing_put_audio_mixer),
4848 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_USB_RX,
4849 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4850 msm_routing_put_audio_mixer),
4851 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_USB_RX,
4852 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4853 msm_routing_put_audio_mixer),
4854 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_USB_RX,
4855 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4856 msm_routing_put_audio_mixer),
4857 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_USB_RX,
4858 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4859 msm_routing_put_audio_mixer),
4860 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_USB_RX,
4861 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4862 msm_routing_put_audio_mixer),
4863 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_USB_RX,
4864 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4865 msm_routing_put_audio_mixer),
4866 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_USB_RX,
4867 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4868 msm_routing_put_audio_mixer),
4869 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_USB_RX,
4870 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4871 msm_routing_put_audio_mixer),
4872 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_USB_RX,
4873 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4874 msm_routing_put_audio_mixer),
4875 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_USB_RX,
4876 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4877 msm_routing_put_audio_mixer),
4878 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_USB_RX,
4879 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4880 msm_routing_put_audio_mixer),
4881};
4882
4883static const struct snd_kcontrol_new int_bt_sco_rx_mixer_controls[] = {
4884 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4885 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4886 msm_routing_put_audio_mixer),
4887 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4888 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4889 msm_routing_put_audio_mixer),
4890 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4891 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4892 msm_routing_put_audio_mixer),
4893 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4894 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4895 msm_routing_put_audio_mixer),
4896 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4897 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4898 msm_routing_put_audio_mixer),
4899 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4900 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4901 msm_routing_put_audio_mixer),
4902 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4903 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4904 msm_routing_put_audio_mixer),
4905 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4906 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4907 msm_routing_put_audio_mixer),
4908 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4909 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4910 msm_routing_put_audio_mixer),
4911 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4912 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4913 msm_routing_put_audio_mixer),
4914 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4915 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4916 msm_routing_put_audio_mixer),
4917 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4918 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4919 msm_routing_put_audio_mixer),
4920 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4921 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4922 msm_routing_put_audio_mixer),
4923 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4924 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4925 msm_routing_put_audio_mixer),
4926 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4927 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4928 msm_routing_put_audio_mixer),
4929 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4930 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4931 msm_routing_put_audio_mixer),
4932 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4933 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4934 msm_routing_put_audio_mixer),
4935 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4936 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4937 msm_routing_put_audio_mixer),
4938 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4939 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4940 msm_routing_put_audio_mixer),
4941};
4942
4943static const struct snd_kcontrol_new int_bt_a2dp_rx_mixer_controls[] = {
4944 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4945 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4946 msm_routing_put_audio_mixer),
4947 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4948 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4949 msm_routing_put_audio_mixer),
4950 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4951 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4952 msm_routing_put_audio_mixer),
4953 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4954 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4955 msm_routing_put_audio_mixer),
4956 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4957 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4958 msm_routing_put_audio_mixer),
4959 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4960 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4961 msm_routing_put_audio_mixer),
4962 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4963 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4964 msm_routing_put_audio_mixer),
4965 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4966 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4967 msm_routing_put_audio_mixer),
4968 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4969 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4970 msm_routing_put_audio_mixer),
4971 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4972 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4973 msm_routing_put_audio_mixer),
4974 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4975 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4976 msm_routing_put_audio_mixer),
4977 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4978 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4979 msm_routing_put_audio_mixer),
4980 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4981 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4982 msm_routing_put_audio_mixer),
4983 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4984 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4985 msm_routing_put_audio_mixer),
4986 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4987 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4988 msm_routing_put_audio_mixer),
4989 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4990 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4991 msm_routing_put_audio_mixer),
4992};
4993
4994static const struct snd_kcontrol_new int_fm_rx_mixer_controls[] = {
4995 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_FM_RX,
4996 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4997 msm_routing_put_audio_mixer),
4998 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_FM_RX,
4999 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5000 msm_routing_put_audio_mixer),
5001 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_FM_RX,
5002 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5003 msm_routing_put_audio_mixer),
5004 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_FM_RX,
5005 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5006 msm_routing_put_audio_mixer),
5007 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_FM_RX,
5008 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5009 msm_routing_put_audio_mixer),
5010 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_FM_RX,
5011 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5012 msm_routing_put_audio_mixer),
5013 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_FM_RX,
5014 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5015 msm_routing_put_audio_mixer),
5016 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_FM_RX,
5017 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5018 msm_routing_put_audio_mixer),
5019 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_FM_RX,
5020 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5021 msm_routing_put_audio_mixer),
5022 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_FM_RX,
5023 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5024 msm_routing_put_audio_mixer),
5025 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_FM_RX,
5026 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5027 msm_routing_put_audio_mixer),
5028 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_FM_RX,
5029 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5030 msm_routing_put_audio_mixer),
5031 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_FM_RX,
5032 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5033 msm_routing_put_audio_mixer),
5034 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_FM_RX,
5035 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5036 msm_routing_put_audio_mixer),
5037 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_FM_RX,
5038 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5039 msm_routing_put_audio_mixer),
5040 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_FM_RX,
5041 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5042 msm_routing_put_audio_mixer),
5043 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_INT_FM_RX,
5044 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5045 msm_routing_put_audio_mixer),
5046 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_INT_FM_RX,
5047 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5048 msm_routing_put_audio_mixer),
5049 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_INT_FM_RX,
5050 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5051 msm_routing_put_audio_mixer),
5052};
5053
5054static const struct snd_kcontrol_new afe_pcm_rx_mixer_controls[] = {
5055 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_AFE_PCM_RX,
5056 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5057 msm_routing_put_audio_mixer),
5058 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_AFE_PCM_RX,
5059 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5060 msm_routing_put_audio_mixer),
5061 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_AFE_PCM_RX,
5062 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5063 msm_routing_put_audio_mixer),
5064 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_AFE_PCM_RX,
5065 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5066 msm_routing_put_audio_mixer),
5067 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_AFE_PCM_RX,
5068 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5069 msm_routing_put_audio_mixer),
5070 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_AFE_PCM_RX,
5071 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5072 msm_routing_put_audio_mixer),
5073 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_AFE_PCM_RX,
5074 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5075 msm_routing_put_audio_mixer),
5076 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_AFE_PCM_RX,
5077 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5078 msm_routing_put_audio_mixer),
5079 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_AFE_PCM_RX,
5080 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5081 msm_routing_put_audio_mixer),
5082 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_AFE_PCM_RX,
5083 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5084 msm_routing_put_audio_mixer),
5085 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_AFE_PCM_RX,
5086 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5087 msm_routing_put_audio_mixer),
5088 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_AFE_PCM_RX,
5089 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5090 msm_routing_put_audio_mixer),
5091 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_AFE_PCM_RX,
5092 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5093 msm_routing_put_audio_mixer),
5094 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_AFE_PCM_RX,
5095 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5096 msm_routing_put_audio_mixer),
5097 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_AFE_PCM_RX,
5098 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5099 msm_routing_put_audio_mixer),
5100 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_AFE_PCM_RX,
5101 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5102 msm_routing_put_audio_mixer),
5103 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_AFE_PCM_RX,
5104 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5105 msm_routing_put_audio_mixer),
5106 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_AFE_PCM_RX,
5107 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5108 msm_routing_put_audio_mixer),
5109 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_AFE_PCM_RX,
5110 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5111 msm_routing_put_audio_mixer),
5112};
5113
5114static const struct snd_kcontrol_new auxpcm_rx_mixer_controls[] = {
5115 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_AUXPCM_RX,
5116 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5117 msm_routing_put_audio_mixer),
5118 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_AUXPCM_RX,
5119 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5120 msm_routing_put_audio_mixer),
5121 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_AUXPCM_RX,
5122 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5123 msm_routing_put_audio_mixer),
5124 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_AUXPCM_RX,
5125 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5126 msm_routing_put_audio_mixer),
5127 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_AUXPCM_RX,
5128 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5129 msm_routing_put_audio_mixer),
5130 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_AUXPCM_RX,
5131 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5132 msm_routing_put_audio_mixer),
5133 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_AUXPCM_RX,
5134 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5135 msm_routing_put_audio_mixer),
5136 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_AUXPCM_RX,
5137 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5138 msm_routing_put_audio_mixer),
5139 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_AUXPCM_RX,
5140 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5141 msm_routing_put_audio_mixer),
5142 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_AUXPCM_RX,
5143 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5144 msm_routing_put_audio_mixer),
5145 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_AUXPCM_RX,
5146 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5147 msm_routing_put_audio_mixer),
5148 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_AUXPCM_RX,
5149 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5150 msm_routing_put_audio_mixer),
5151 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_AUXPCM_RX,
5152 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5153 msm_routing_put_audio_mixer),
5154 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_AUXPCM_RX,
5155 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5156 msm_routing_put_audio_mixer),
5157 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_AUXPCM_RX,
5158 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5159 msm_routing_put_audio_mixer),
5160 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_AUXPCM_RX,
5161 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5162 msm_routing_put_audio_mixer),
5163 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_AUXPCM_RX,
5164 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5165 msm_routing_put_audio_mixer),
5166 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_AUXPCM_RX,
5167 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5168 msm_routing_put_audio_mixer),
5169 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_AUXPCM_RX,
5170 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5171 msm_routing_put_audio_mixer),
5172};
5173
5174static const struct snd_kcontrol_new sec_auxpcm_rx_mixer_controls[] = {
5175 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5176 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5177 msm_routing_put_audio_mixer),
5178 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5179 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5180 msm_routing_put_audio_mixer),
5181 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5182 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5183 msm_routing_put_audio_mixer),
5184 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5185 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5186 msm_routing_put_audio_mixer),
5187 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5188 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5189 msm_routing_put_audio_mixer),
5190 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5191 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5192 msm_routing_put_audio_mixer),
5193 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5194 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5195 msm_routing_put_audio_mixer),
5196 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5197 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5198 msm_routing_put_audio_mixer),
5199 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5200 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5201 msm_routing_put_audio_mixer),
5202 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5203 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5204 msm_routing_put_audio_mixer),
5205 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5206 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5207 msm_routing_put_audio_mixer),
5208 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5209 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5210 msm_routing_put_audio_mixer),
5211 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5212 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5213 msm_routing_put_audio_mixer),
5214 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5215 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5216 msm_routing_put_audio_mixer),
5217 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5218 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5219 msm_routing_put_audio_mixer),
5220 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5221 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5222 msm_routing_put_audio_mixer),
5223 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5224 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5225 msm_routing_put_audio_mixer),
5226 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5227 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5228 msm_routing_put_audio_mixer),
5229 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5230 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5231 msm_routing_put_audio_mixer),
5232};
5233
5234static const struct snd_kcontrol_new tert_auxpcm_rx_mixer_controls[] = {
5235 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5236 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5237 msm_routing_put_audio_mixer),
5238 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5239 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5240 msm_routing_put_audio_mixer),
5241 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5242 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5243 msm_routing_put_audio_mixer),
5244 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5245 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5246 msm_routing_put_audio_mixer),
5247 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5248 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5249 msm_routing_put_audio_mixer),
5250 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5251 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5252 msm_routing_put_audio_mixer),
5253 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5254 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5255 msm_routing_put_audio_mixer),
5256 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5257 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5258 msm_routing_put_audio_mixer),
5259 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5260 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5261 msm_routing_put_audio_mixer),
5262 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5263 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5264 msm_routing_put_audio_mixer),
5265 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5266 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5267 msm_routing_put_audio_mixer),
5268 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5269 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5270 msm_routing_put_audio_mixer),
5271 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5272 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5273 msm_routing_put_audio_mixer),
5274 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5275 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5276 msm_routing_put_audio_mixer),
5277 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5278 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5279 msm_routing_put_audio_mixer),
5280 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5281 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5282 msm_routing_put_audio_mixer),
5283};
5284
5285static const struct snd_kcontrol_new quat_auxpcm_rx_mixer_controls[] = {
5286 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5287 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5288 msm_routing_put_audio_mixer),
5289 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5290 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5291 msm_routing_put_audio_mixer),
5292 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5293 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5294 msm_routing_put_audio_mixer),
5295 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5296 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5297 msm_routing_put_audio_mixer),
5298 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5299 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5300 msm_routing_put_audio_mixer),
5301 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5302 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5303 msm_routing_put_audio_mixer),
5304 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5305 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5306 msm_routing_put_audio_mixer),
5307 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5308 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5309 msm_routing_put_audio_mixer),
5310 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5311 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5312 msm_routing_put_audio_mixer),
5313 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5314 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5315 msm_routing_put_audio_mixer),
5316 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5317 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5318 msm_routing_put_audio_mixer),
5319 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5320 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5321 msm_routing_put_audio_mixer),
5322 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5323 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5324 msm_routing_put_audio_mixer),
5325 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5326 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5327 msm_routing_put_audio_mixer),
5328 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5329 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5330 msm_routing_put_audio_mixer),
5331 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5332 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5333 msm_routing_put_audio_mixer),
5334};
5335
5336static const struct snd_kcontrol_new pri_tdm_rx_0_mixer_controls[] = {
5337 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5338 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5339 msm_routing_put_audio_mixer),
5340 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5341 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5342 msm_routing_put_audio_mixer),
5343 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5344 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5345 msm_routing_put_audio_mixer),
5346 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5347 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5348 msm_routing_put_audio_mixer),
5349 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5350 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5351 msm_routing_put_audio_mixer),
5352 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5353 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5354 msm_routing_put_audio_mixer),
5355 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5356 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5357 msm_routing_put_audio_mixer),
5358 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5359 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5360 msm_routing_put_audio_mixer),
5361 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5362 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5363 msm_routing_put_audio_mixer),
5364 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5365 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5366 msm_routing_put_audio_mixer),
5367 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5368 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5369 msm_routing_put_audio_mixer),
5370 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5371 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5372 msm_routing_put_audio_mixer),
5373 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5374 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5375 msm_routing_put_audio_mixer),
5376 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5377 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5378 msm_routing_put_audio_mixer),
5379 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5380 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5381 msm_routing_put_audio_mixer),
5382 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5383 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5384 msm_routing_put_audio_mixer),
5385};
5386
5387static const struct snd_kcontrol_new pri_tdm_rx_1_mixer_controls[] = {
5388 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5389 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5390 msm_routing_put_audio_mixer),
5391 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5392 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5393 msm_routing_put_audio_mixer),
5394 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5395 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5396 msm_routing_put_audio_mixer),
5397 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5398 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5399 msm_routing_put_audio_mixer),
5400 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5401 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5402 msm_routing_put_audio_mixer),
5403 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5404 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5405 msm_routing_put_audio_mixer),
5406 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5407 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5408 msm_routing_put_audio_mixer),
5409 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5410 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5411 msm_routing_put_audio_mixer),
5412 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5413 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5414 msm_routing_put_audio_mixer),
5415 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5416 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5417 msm_routing_put_audio_mixer),
5418 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5419 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5420 msm_routing_put_audio_mixer),
5421 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5422 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5423 msm_routing_put_audio_mixer),
5424 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5425 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5426 msm_routing_put_audio_mixer),
5427 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5428 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5429 msm_routing_put_audio_mixer),
5430 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5431 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5432 msm_routing_put_audio_mixer),
5433 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5434 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5435 msm_routing_put_audio_mixer),
5436};
5437
5438static const struct snd_kcontrol_new pri_tdm_rx_2_mixer_controls[] = {
5439 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5440 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5441 msm_routing_put_audio_mixer),
5442 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5443 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5444 msm_routing_put_audio_mixer),
5445 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5446 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5447 msm_routing_put_audio_mixer),
5448 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5449 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5450 msm_routing_put_audio_mixer),
5451 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5452 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5453 msm_routing_put_audio_mixer),
5454 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5455 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5456 msm_routing_put_audio_mixer),
5457 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5458 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5459 msm_routing_put_audio_mixer),
5460 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5461 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5462 msm_routing_put_audio_mixer),
5463 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5464 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5465 msm_routing_put_audio_mixer),
5466 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5467 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5468 msm_routing_put_audio_mixer),
5469 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5470 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5471 msm_routing_put_audio_mixer),
5472 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5473 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5474 msm_routing_put_audio_mixer),
5475 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5476 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5477 msm_routing_put_audio_mixer),
5478 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5479 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5480 msm_routing_put_audio_mixer),
5481 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5482 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5483 msm_routing_put_audio_mixer),
5484 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5485 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5486 msm_routing_put_audio_mixer),
5487};
5488
5489static const struct snd_kcontrol_new pri_tdm_rx_3_mixer_controls[] = {
5490 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5491 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5492 msm_routing_put_audio_mixer),
5493 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5494 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5495 msm_routing_put_audio_mixer),
5496 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5497 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5498 msm_routing_put_audio_mixer),
5499 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5500 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5501 msm_routing_put_audio_mixer),
5502 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5503 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5504 msm_routing_put_audio_mixer),
5505 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5506 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5507 msm_routing_put_audio_mixer),
5508 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5509 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5510 msm_routing_put_audio_mixer),
5511 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5512 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5513 msm_routing_put_audio_mixer),
5514 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5515 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5516 msm_routing_put_audio_mixer),
5517 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5518 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5519 msm_routing_put_audio_mixer),
5520 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5521 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5522 msm_routing_put_audio_mixer),
5523 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5524 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5525 msm_routing_put_audio_mixer),
5526 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5527 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5528 msm_routing_put_audio_mixer),
5529 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5530 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5531 msm_routing_put_audio_mixer),
5532 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5533 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5534 msm_routing_put_audio_mixer),
5535 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5536 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5537 msm_routing_put_audio_mixer),
5538};
5539
5540static const struct snd_kcontrol_new pri_tdm_tx_0_mixer_controls[] = {
5541 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5542 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5543 msm_routing_put_audio_mixer),
5544 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5545 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5546 msm_routing_put_audio_mixer),
5547 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5548 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5549 msm_routing_put_audio_mixer),
5550 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5551 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5552 msm_routing_put_audio_mixer),
5553 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5554 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5555 msm_routing_put_audio_mixer),
5556 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5557 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5558 msm_routing_put_audio_mixer),
5559 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5560 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5561 msm_routing_put_audio_mixer),
5562 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5563 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5564 msm_routing_put_audio_mixer),
5565 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5566 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5567 msm_routing_put_audio_mixer),
5568 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5569 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5570 msm_routing_put_audio_mixer),
5571 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5572 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5573 msm_routing_put_audio_mixer),
5574 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5575 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5576 msm_routing_put_audio_mixer),
5577 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5578 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5579 msm_routing_put_audio_mixer),
5580 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5581 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5582 msm_routing_put_audio_mixer),
5583 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5584 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5585 msm_routing_put_audio_mixer),
5586 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5587 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5588 msm_routing_put_audio_mixer),
5589};
5590
5591static const struct snd_kcontrol_new sec_tdm_rx_0_mixer_controls[] = {
5592 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5593 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5594 msm_routing_put_audio_mixer),
5595 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5596 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5597 msm_routing_put_audio_mixer),
5598 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5599 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5600 msm_routing_put_audio_mixer),
5601 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5602 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5603 msm_routing_put_audio_mixer),
5604 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5605 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5606 msm_routing_put_audio_mixer),
5607 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5608 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5609 msm_routing_put_audio_mixer),
5610 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5611 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5612 msm_routing_put_audio_mixer),
5613 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5614 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5615 msm_routing_put_audio_mixer),
5616 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5617 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5618 msm_routing_put_audio_mixer),
5619 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5620 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5621 msm_routing_put_audio_mixer),
5622 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5623 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5624 msm_routing_put_audio_mixer),
5625 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5626 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5627 msm_routing_put_audio_mixer),
5628 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5629 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5630 msm_routing_put_audio_mixer),
5631 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5632 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5633 msm_routing_put_audio_mixer),
5634 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5635 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5636 msm_routing_put_audio_mixer),
5637 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5638 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5639 msm_routing_put_audio_mixer),
5640};
5641
5642static const struct snd_kcontrol_new sec_tdm_rx_1_mixer_controls[] = {
5643 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5644 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5645 msm_routing_put_audio_mixer),
5646 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5647 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5648 msm_routing_put_audio_mixer),
5649 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5650 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5651 msm_routing_put_audio_mixer),
5652 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5653 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5654 msm_routing_put_audio_mixer),
5655 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5656 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5657 msm_routing_put_audio_mixer),
5658 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5659 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5660 msm_routing_put_audio_mixer),
5661 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5662 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5663 msm_routing_put_audio_mixer),
5664 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5665 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5666 msm_routing_put_audio_mixer),
5667 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5668 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5669 msm_routing_put_audio_mixer),
5670 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5671 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5672 msm_routing_put_audio_mixer),
5673 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5674 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5675 msm_routing_put_audio_mixer),
5676 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5677 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5678 msm_routing_put_audio_mixer),
5679 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5680 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5681 msm_routing_put_audio_mixer),
5682 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5683 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5684 msm_routing_put_audio_mixer),
5685 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5686 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5687 msm_routing_put_audio_mixer),
5688 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5689 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5690 msm_routing_put_audio_mixer),
5691};
5692
5693static const struct snd_kcontrol_new sec_tdm_rx_2_mixer_controls[] = {
5694 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5695 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5696 msm_routing_put_audio_mixer),
5697 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5698 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5699 msm_routing_put_audio_mixer),
5700 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5701 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5702 msm_routing_put_audio_mixer),
5703 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5704 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5705 msm_routing_put_audio_mixer),
5706 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5707 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5708 msm_routing_put_audio_mixer),
5709 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5710 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5711 msm_routing_put_audio_mixer),
5712 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5713 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5714 msm_routing_put_audio_mixer),
5715 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5716 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5717 msm_routing_put_audio_mixer),
5718 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5719 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5720 msm_routing_put_audio_mixer),
5721 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5722 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5723 msm_routing_put_audio_mixer),
5724 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5725 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5726 msm_routing_put_audio_mixer),
5727 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5728 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5729 msm_routing_put_audio_mixer),
5730 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5731 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5732 msm_routing_put_audio_mixer),
5733 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5734 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5735 msm_routing_put_audio_mixer),
5736 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5737 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5738 msm_routing_put_audio_mixer),
5739 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5740 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5741 msm_routing_put_audio_mixer),
5742};
5743
5744static const struct snd_kcontrol_new sec_tdm_rx_3_mixer_controls[] = {
5745 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5746 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5747 msm_routing_put_audio_mixer),
5748 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5749 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5750 msm_routing_put_audio_mixer),
5751 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5752 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5753 msm_routing_put_audio_mixer),
5754 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5755 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5756 msm_routing_put_audio_mixer),
5757 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5758 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5759 msm_routing_put_audio_mixer),
5760 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5761 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5762 msm_routing_put_audio_mixer),
5763 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5764 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5765 msm_routing_put_audio_mixer),
5766 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5767 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5768 msm_routing_put_audio_mixer),
5769 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5770 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5771 msm_routing_put_audio_mixer),
5772 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5773 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5774 msm_routing_put_audio_mixer),
5775 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5776 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5777 msm_routing_put_audio_mixer),
5778 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5779 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5780 msm_routing_put_audio_mixer),
5781 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5782 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5783 msm_routing_put_audio_mixer),
5784 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5785 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5786 msm_routing_put_audio_mixer),
5787 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5788 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5789 msm_routing_put_audio_mixer),
5790 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5791 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5792 msm_routing_put_audio_mixer),
5793};
5794
5795static const struct snd_kcontrol_new sec_tdm_tx_0_mixer_controls[] = {
5796 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5797 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5798 msm_routing_put_audio_mixer),
5799 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5800 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5801 msm_routing_put_audio_mixer),
5802 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5803 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5804 msm_routing_put_audio_mixer),
5805 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5806 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5807 msm_routing_put_audio_mixer),
5808 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5809 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5810 msm_routing_put_audio_mixer),
5811 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5812 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5813 msm_routing_put_audio_mixer),
5814 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5815 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5816 msm_routing_put_audio_mixer),
5817 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5818 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5819 msm_routing_put_audio_mixer),
5820 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5821 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5822 msm_routing_put_audio_mixer),
5823 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5824 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5825 msm_routing_put_audio_mixer),
5826 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5827 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5828 msm_routing_put_audio_mixer),
5829 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5830 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5831 msm_routing_put_audio_mixer),
5832 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5833 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5834 msm_routing_put_audio_mixer),
5835 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5836 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5837 msm_routing_put_audio_mixer),
5838 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5839 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5840 msm_routing_put_audio_mixer),
5841 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5842 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5843 msm_routing_put_audio_mixer),
5844};
5845
5846static const struct snd_kcontrol_new tert_tdm_rx_0_mixer_controls[] = {
5847 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5848 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5849 msm_routing_put_audio_mixer),
5850 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5851 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5852 msm_routing_put_audio_mixer),
5853 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5854 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5855 msm_routing_put_audio_mixer),
5856 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5857 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5858 msm_routing_put_audio_mixer),
5859 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5860 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5861 msm_routing_put_audio_mixer),
5862 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5863 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5864 msm_routing_put_audio_mixer),
5865 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5866 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5867 msm_routing_put_audio_mixer),
5868 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5869 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5870 msm_routing_put_audio_mixer),
5871 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5872 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5873 msm_routing_put_audio_mixer),
5874 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5875 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5876 msm_routing_put_audio_mixer),
5877 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5878 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5879 msm_routing_put_audio_mixer),
5880 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5881 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5882 msm_routing_put_audio_mixer),
5883 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5884 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5885 msm_routing_put_audio_mixer),
5886 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5887 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5888 msm_routing_put_audio_mixer),
5889 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5890 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5891 msm_routing_put_audio_mixer),
5892 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5893 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5894 msm_routing_put_audio_mixer),
5895};
5896
5897static const struct snd_kcontrol_new tert_tdm_tx_0_mixer_controls[] = {
5898 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5899 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5900 msm_routing_put_audio_mixer),
5901 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5902 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5903 msm_routing_put_audio_mixer),
5904 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5905 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5906 msm_routing_put_audio_mixer),
5907 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5908 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5909 msm_routing_put_audio_mixer),
5910 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5911 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5912 msm_routing_put_audio_mixer),
5913 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5914 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5915 msm_routing_put_audio_mixer),
5916 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5917 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5918 msm_routing_put_audio_mixer),
5919 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5920 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5921 msm_routing_put_audio_mixer),
5922 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5923 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5924 msm_routing_put_audio_mixer),
5925 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5926 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5927 msm_routing_put_audio_mixer),
5928 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5929 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5930 msm_routing_put_audio_mixer),
5931 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5932 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5933 msm_routing_put_audio_mixer),
5934 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5935 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5936 msm_routing_put_audio_mixer),
5937 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5938 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5939 msm_routing_put_audio_mixer),
5940 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5941 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5942 msm_routing_put_audio_mixer),
5943 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5944 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5945 msm_routing_put_audio_mixer),
5946};
5947
5948static const struct snd_kcontrol_new tert_tdm_rx_1_mixer_controls[] = {
5949 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5950 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5951 msm_routing_put_audio_mixer),
5952 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5953 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5954 msm_routing_put_audio_mixer),
5955 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5956 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5957 msm_routing_put_audio_mixer),
5958 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5959 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5960 msm_routing_put_audio_mixer),
5961 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5962 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5963 msm_routing_put_audio_mixer),
5964 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5965 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5966 msm_routing_put_audio_mixer),
5967 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5968 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5969 msm_routing_put_audio_mixer),
5970 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5971 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5972 msm_routing_put_audio_mixer),
5973 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5974 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5975 msm_routing_put_audio_mixer),
5976 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5977 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5978 msm_routing_put_audio_mixer),
5979 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5980 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5981 msm_routing_put_audio_mixer),
5982 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5983 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5984 msm_routing_put_audio_mixer),
5985 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5986 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5987 msm_routing_put_audio_mixer),
5988 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5989 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5990 msm_routing_put_audio_mixer),
5991 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5992 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5993 msm_routing_put_audio_mixer),
5994 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5995 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5996 msm_routing_put_audio_mixer),
5997};
5998
5999static const struct snd_kcontrol_new tert_tdm_rx_2_mixer_controls[] = {
6000 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6001 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6002 msm_routing_put_audio_mixer),
6003 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6004 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6005 msm_routing_put_audio_mixer),
6006 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6007 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6008 msm_routing_put_audio_mixer),
6009 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6010 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6011 msm_routing_put_audio_mixer),
6012 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6013 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6014 msm_routing_put_audio_mixer),
6015 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6016 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6017 msm_routing_put_audio_mixer),
6018 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6019 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6020 msm_routing_put_audio_mixer),
6021 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6022 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6023 msm_routing_put_audio_mixer),
6024 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6025 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6026 msm_routing_put_audio_mixer),
6027 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6028 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6029 msm_routing_put_audio_mixer),
6030 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6031 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6032 msm_routing_put_audio_mixer),
6033 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6034 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6035 msm_routing_put_audio_mixer),
6036 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6037 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6038 msm_routing_put_audio_mixer),
6039 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6040 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6041 msm_routing_put_audio_mixer),
6042 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6043 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6044 msm_routing_put_audio_mixer),
6045 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6046 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6047 msm_routing_put_audio_mixer),
6048};
6049
6050static const struct snd_kcontrol_new tert_tdm_rx_3_mixer_controls[] = {
6051 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6052 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6053 msm_routing_put_audio_mixer),
6054 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6055 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6056 msm_routing_put_audio_mixer),
6057 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6058 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6059 msm_routing_put_audio_mixer),
6060 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6061 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6062 msm_routing_put_audio_mixer),
6063 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6064 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6065 msm_routing_put_audio_mixer),
6066 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6067 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6068 msm_routing_put_audio_mixer),
6069 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6070 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6071 msm_routing_put_audio_mixer),
6072 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6073 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6074 msm_routing_put_audio_mixer),
6075 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6076 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6077 msm_routing_put_audio_mixer),
6078 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6079 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6080 msm_routing_put_audio_mixer),
6081 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6082 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6083 msm_routing_put_audio_mixer),
6084 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6085 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6086 msm_routing_put_audio_mixer),
6087 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6088 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6089 msm_routing_put_audio_mixer),
6090 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6091 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6092 msm_routing_put_audio_mixer),
6093 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6094 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6095 msm_routing_put_audio_mixer),
6096 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6097 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6098 msm_routing_put_audio_mixer),
6099};
6100
6101static const struct snd_kcontrol_new tert_tdm_rx_4_mixer_controls[] = {
6102 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6103 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6104 msm_routing_put_audio_mixer),
6105 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6106 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6107 msm_routing_put_audio_mixer),
6108 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6109 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6110 msm_routing_put_audio_mixer),
6111 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6112 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6113 msm_routing_put_audio_mixer),
6114 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6115 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6116 msm_routing_put_audio_mixer),
6117 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6118 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6119 msm_routing_put_audio_mixer),
6120 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6121 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6122 msm_routing_put_audio_mixer),
6123 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6124 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6125 msm_routing_put_audio_mixer),
6126 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6127 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6128 msm_routing_put_audio_mixer),
6129 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6130 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6131 msm_routing_put_audio_mixer),
6132 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6133 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6134 msm_routing_put_audio_mixer),
6135 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6136 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6137 msm_routing_put_audio_mixer),
6138 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6139 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6140 msm_routing_put_audio_mixer),
6141 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6142 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6143 msm_routing_put_audio_mixer),
6144 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6145 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6146 msm_routing_put_audio_mixer),
6147 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6148 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6149 msm_routing_put_audio_mixer),
6150};
6151
6152static const struct snd_kcontrol_new quat_tdm_rx_0_mixer_controls[] = {
6153 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6154 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6155 msm_routing_put_audio_mixer),
6156 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6157 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6158 msm_routing_put_audio_mixer),
6159 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6160 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6161 msm_routing_put_audio_mixer),
6162 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6163 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6164 msm_routing_put_audio_mixer),
6165 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6166 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6167 msm_routing_put_audio_mixer),
6168 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6169 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6170 msm_routing_put_audio_mixer),
6171 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6172 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6173 msm_routing_put_audio_mixer),
6174 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6175 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6176 msm_routing_put_audio_mixer),
6177 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6178 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6179 msm_routing_put_audio_mixer),
6180 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6181 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6182 msm_routing_put_audio_mixer),
6183 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6184 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6185 msm_routing_put_audio_mixer),
6186 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6187 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6188 msm_routing_put_audio_mixer),
6189 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6190 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6191 msm_routing_put_audio_mixer),
6192 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6193 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6194 msm_routing_put_audio_mixer),
6195 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6196 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6197 msm_routing_put_audio_mixer),
6198 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6199 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6200 msm_routing_put_audio_mixer),
6201 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6202 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6203 msm_routing_put_audio_mixer),
6204};
6205
6206static const struct snd_kcontrol_new quat_tdm_tx_0_mixer_controls[] = {
6207 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6208 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6209 msm_routing_put_audio_mixer),
6210 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6211 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6212 msm_routing_put_audio_mixer),
6213 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6214 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6215 msm_routing_put_audio_mixer),
6216 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6217 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6218 msm_routing_put_audio_mixer),
6219 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6220 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6221 msm_routing_put_audio_mixer),
6222 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6223 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6224 msm_routing_put_audio_mixer),
6225 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6226 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6227 msm_routing_put_audio_mixer),
6228 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6229 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6230 msm_routing_put_audio_mixer),
6231 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6232 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6233 msm_routing_put_audio_mixer),
6234 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6235 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6236 msm_routing_put_audio_mixer),
6237 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6238 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6239 msm_routing_put_audio_mixer),
6240 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6241 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6242 msm_routing_put_audio_mixer),
6243 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6244 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6245 msm_routing_put_audio_mixer),
6246 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6247 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6248 msm_routing_put_audio_mixer),
6249 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6250 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6251 msm_routing_put_audio_mixer),
6252 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6253 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6254 msm_routing_put_audio_mixer),
6255};
6256
6257static const struct snd_kcontrol_new quat_tdm_rx_1_mixer_controls[] = {
6258 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6259 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6260 msm_routing_put_audio_mixer),
6261 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6262 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6263 msm_routing_put_audio_mixer),
6264 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6265 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6266 msm_routing_put_audio_mixer),
6267 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6268 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6269 msm_routing_put_audio_mixer),
6270 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6271 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6272 msm_routing_put_audio_mixer),
6273 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6274 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6275 msm_routing_put_audio_mixer),
6276 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6277 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6278 msm_routing_put_audio_mixer),
6279 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6280 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6281 msm_routing_put_audio_mixer),
6282 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6283 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6284 msm_routing_put_audio_mixer),
6285 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6286 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6287 msm_routing_put_audio_mixer),
6288 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6289 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6290 msm_routing_put_audio_mixer),
6291 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6292 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6293 msm_routing_put_audio_mixer),
6294 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6295 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6296 msm_routing_put_audio_mixer),
6297 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6298 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6299 msm_routing_put_audio_mixer),
6300 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6301 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6302 msm_routing_put_audio_mixer),
6303 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6304 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6305 msm_routing_put_audio_mixer),
6306 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6307 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6308 msm_routing_put_audio_mixer),
6309};
6310
6311static const struct snd_kcontrol_new quat_tdm_rx_2_mixer_controls[] = {
6312 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6313 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6314 msm_routing_put_audio_mixer),
6315 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6316 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6317 msm_routing_put_audio_mixer),
6318 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6319 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6320 msm_routing_put_audio_mixer),
6321 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6322 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6323 msm_routing_put_audio_mixer),
6324 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6325 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6326 msm_routing_put_audio_mixer),
6327 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6328 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6329 msm_routing_put_audio_mixer),
6330 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6331 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6332 msm_routing_put_audio_mixer),
6333 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6334 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6335 msm_routing_put_audio_mixer),
6336 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6337 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6338 msm_routing_put_audio_mixer),
6339 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6340 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6341 msm_routing_put_audio_mixer),
6342 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6343 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6344 msm_routing_put_audio_mixer),
6345 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6346 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6347 msm_routing_put_audio_mixer),
6348 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6349 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6350 msm_routing_put_audio_mixer),
6351 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6352 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6353 msm_routing_put_audio_mixer),
6354 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6355 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6356 msm_routing_put_audio_mixer),
6357 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6358 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6359 msm_routing_put_audio_mixer),
6360 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6361 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6362 msm_routing_put_audio_mixer),
6363};
6364
6365static const struct snd_kcontrol_new quat_tdm_rx_3_mixer_controls[] = {
6366 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6367 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6368 msm_routing_put_audio_mixer),
6369 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6370 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6371 msm_routing_put_audio_mixer),
6372 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6373 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6374 msm_routing_put_audio_mixer),
6375 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6376 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6377 msm_routing_put_audio_mixer),
6378 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6379 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6380 msm_routing_put_audio_mixer),
6381 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6382 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6383 msm_routing_put_audio_mixer),
6384 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6385 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6386 msm_routing_put_audio_mixer),
6387 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6388 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6389 msm_routing_put_audio_mixer),
6390 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6391 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6392 msm_routing_put_audio_mixer),
6393 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6394 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6395 msm_routing_put_audio_mixer),
6396 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6397 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6398 msm_routing_put_audio_mixer),
6399 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6400 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6401 msm_routing_put_audio_mixer),
6402 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6403 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6404 msm_routing_put_audio_mixer),
6405 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6406 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6407 msm_routing_put_audio_mixer),
6408 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6409 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6410 msm_routing_put_audio_mixer),
6411 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6412 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6413 msm_routing_put_audio_mixer),
6414 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6415 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6416 msm_routing_put_audio_mixer),
6417};
6418
6419static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
6420 SOC_SINGLE_EXT("PRI_TX", MSM_BACKEND_DAI_PRI_I2S_TX,
6421 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6422 msm_routing_put_audio_mixer),
6423 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6424 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6425 msm_routing_put_audio_mixer),
6426 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6427 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6428 msm_routing_put_audio_mixer),
6429 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6430 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6431 msm_routing_put_audio_mixer),
6432 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6433 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6434 msm_routing_put_audio_mixer),
6435 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6436 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6437 msm_routing_put_audio_mixer),
6438 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6439 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6440 msm_routing_put_audio_mixer),
6441 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6442 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6443 msm_routing_put_audio_mixer),
6444 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6445 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6446 msm_routing_put_audio_mixer),
6447 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6448 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6449 msm_routing_put_audio_mixer),
6450 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6451 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6452 msm_routing_put_audio_mixer),
6453 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6454 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6455 msm_routing_put_audio_mixer),
6456 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6457 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6458 msm_routing_put_audio_mixer),
6459 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6460 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6461 msm_routing_put_audio_mixer),
6462 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6463 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6464 msm_routing_put_audio_mixer),
6465 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6466 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6467 msm_routing_put_audio_mixer),
6468 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
6469 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6470 msm_routing_put_audio_mixer),
6471 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
6472 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6473 msm_routing_put_audio_mixer),
6474 SOC_SINGLE_EXT("SLIM_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
6475 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6476 msm_routing_put_audio_mixer),
6477 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
6478 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6479 msm_routing_put_audio_mixer),
6480 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX,
6481 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6482 msm_routing_put_audio_mixer),
6483 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6484 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6485 msm_routing_put_audio_mixer),
6486 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6487 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6488 msm_routing_put_audio_mixer),
6489 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6490 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6491 msm_routing_put_audio_mixer),
6492 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6493 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6494 msm_routing_put_audio_mixer),
6495 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6496 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6497 msm_routing_put_audio_mixer),
6498 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6499 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6500 msm_routing_put_audio_mixer),
6501 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6502 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6503 msm_routing_put_audio_mixer),
6504 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6505 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6506 msm_routing_put_audio_mixer),
6507 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6508 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6509 msm_routing_put_audio_mixer),
6510 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6511 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6512 msm_routing_put_audio_mixer),
6513 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6514 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6515 msm_routing_put_audio_mixer),
6516 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6517 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6518 msm_routing_put_audio_mixer),
6519 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6520 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6521 msm_routing_put_audio_mixer),
6522 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6523 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6524 msm_routing_put_audio_mixer),
6525 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
6526 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6527 msm_routing_put_audio_mixer),
6528 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6529 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6530 msm_routing_put_audio_mixer),
6531 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
6532 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6533 msm_routing_put_audio_mixer),
6534 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6535 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6536 msm_routing_put_audio_mixer),
6537 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6538 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6539 msm_routing_put_audio_mixer),
6540};
6541
6542static const struct snd_kcontrol_new mmul2_mixer_controls[] = {
6543 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6544 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6545 msm_routing_put_audio_mixer),
6546 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6547 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6548 msm_routing_put_audio_mixer),
6549 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6550 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6551 msm_routing_put_audio_mixer),
6552 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6553 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6554 msm_routing_put_audio_mixer),
6555 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6556 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6557 msm_routing_put_audio_mixer),
6558 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6559 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6560 msm_routing_put_audio_mixer),
6561 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6562 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6563 msm_routing_put_audio_mixer),
6564 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6565 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6566 msm_routing_put_audio_mixer),
6567 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6568 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6569 msm_routing_put_audio_mixer),
6570 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
6571 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6572 msm_routing_put_audio_mixer),
6573 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
6574 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6575 msm_routing_put_audio_mixer),
6576 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX,
6577 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6578 msm_routing_put_audio_mixer),
6579 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6580 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6581 msm_routing_put_audio_mixer),
6582 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6583 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6584 msm_routing_put_audio_mixer),
6585 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6586 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6587 msm_routing_put_audio_mixer),
6588 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6589 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6590 msm_routing_put_audio_mixer),
6591 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6592 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6593 msm_routing_put_audio_mixer),
6594 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6595 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6596 msm_routing_put_audio_mixer),
6597 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6598 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6599 msm_routing_put_audio_mixer),
6600 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6601 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6602 msm_routing_put_audio_mixer),
6603 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6604 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6605 msm_routing_put_audio_mixer),
6606 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6607 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6608 msm_routing_put_audio_mixer),
6609 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6610 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6611 msm_routing_put_audio_mixer),
6612 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6613 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6614 msm_routing_put_audio_mixer),
6615 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6616 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6617 msm_routing_put_audio_mixer),
6618 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6619 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6620 msm_routing_put_audio_mixer),
6621 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
6622 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6623 msm_routing_put_audio_mixer),
6624 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6625 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6626 msm_routing_put_audio_mixer),
6627 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6628 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6629 msm_routing_put_audio_mixer),
6630 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6631 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6632 msm_routing_put_audio_mixer),
6633};
6634
6635static const struct snd_kcontrol_new mmul3_mixer_controls[] = {
6636 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6637 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6638 msm_routing_put_audio_mixer),
6639 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6640 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6641 msm_routing_put_audio_mixer),
6642 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6643 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6644 msm_routing_put_audio_mixer),
6645 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6646 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6647 msm_routing_put_audio_mixer),
6648 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6649 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6650 msm_routing_put_audio_mixer),
6651 SOC_SINGLE_EXT("AUX_PCM_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6652 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6653 msm_routing_put_audio_mixer),
6654 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6655 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6656 msm_routing_put_audio_mixer),
6657 SOC_SINGLE_EXT("TERT_AUX_PCM_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6658 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6659 msm_routing_put_audio_mixer),
6660 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6661 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6662 msm_routing_put_audio_mixer),
6663 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6664 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6665 msm_routing_put_audio_mixer),
6666 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6667 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6668 msm_routing_put_audio_mixer),
6669 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6670 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6671 msm_routing_put_audio_mixer),
6672 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6673 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6674 msm_routing_put_audio_mixer),
6675 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6676 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6677 msm_routing_put_audio_mixer),
6678 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6679 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6680 msm_routing_put_audio_mixer),
6681 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6682 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6683 msm_routing_put_audio_mixer),
6684 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6685 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6686 msm_routing_put_audio_mixer),
6687 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6688 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6689 msm_routing_put_audio_mixer),
6690 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6691 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6692 msm_routing_put_audio_mixer),
6693 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6694 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6695 msm_routing_put_audio_mixer),
6696 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6697 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6698 msm_routing_put_audio_mixer),
6699 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6700 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6701 msm_routing_put_audio_mixer),
6702 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6703 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6704 msm_routing_put_audio_mixer),
6705 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6706 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6707 msm_routing_put_audio_mixer),
6708 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6709 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6710 msm_routing_put_audio_mixer),
6711 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6712 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6713 msm_routing_put_audio_mixer),
6714 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6715 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6716 msm_routing_put_audio_mixer),
6717 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
6718 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6719 msm_routing_put_audio_mixer),
6720 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6721 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6722 msm_routing_put_audio_mixer),
6723};
6724
6725static const struct snd_kcontrol_new mmul4_mixer_controls[] = {
6726 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6727 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6728 msm_routing_put_audio_mixer),
6729 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6730 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6731 msm_routing_put_audio_mixer),
6732 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6733 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6734 msm_routing_put_audio_mixer),
6735 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6736 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6737 msm_routing_put_audio_mixer),
6738 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6739 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6740 msm_routing_put_audio_mixer),
6741 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
6742 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6743 msm_routing_put_audio_mixer),
6744 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
6745 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6746 msm_routing_put_audio_mixer),
6747 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6748 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6749 msm_routing_put_audio_mixer),
6750 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6751 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6752 msm_routing_put_audio_mixer),
6753 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6754 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6755 msm_routing_put_audio_mixer),
6756 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6757 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6758 msm_routing_put_audio_mixer),
6759 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6760 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6761 msm_routing_put_audio_mixer),
6762 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6763 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6764 msm_routing_put_audio_mixer),
6765 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6766 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6767 msm_routing_put_audio_mixer),
6768 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6769 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6770 msm_routing_put_audio_mixer),
6771 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6772 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6773 msm_routing_put_audio_mixer),
6774 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6775 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6776 msm_routing_put_audio_mixer),
6777 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6778 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6779 msm_routing_put_audio_mixer),
6780 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6781 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6782 msm_routing_put_audio_mixer),
6783 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6784 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6785 msm_routing_put_audio_mixer),
6786 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6787 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6788 msm_routing_put_audio_mixer),
6789 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
6790 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6791 msm_routing_put_audio_mixer),
6792 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6793 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6794 msm_routing_put_audio_mixer),
6795 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6796 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6797 msm_routing_put_audio_mixer),
6798 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6799 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6800 msm_routing_put_audio_mixer),
6801 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6802 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6803 msm_routing_put_audio_mixer),
6804 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6805 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6806 msm_routing_put_audio_mixer),
6807 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6808 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6809 msm_routing_put_audio_mixer),
6810 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6811 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6812 msm_routing_put_audio_mixer),
6813};
6814
6815static const struct snd_kcontrol_new mmul5_mixer_controls[] = {
6816 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6817 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6818 msm_routing_put_audio_mixer),
6819 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6820 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6821 msm_routing_put_audio_mixer),
6822 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6823 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6824 msm_routing_put_audio_mixer),
6825 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6826 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6827 msm_routing_put_audio_mixer),
6828 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6829 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6830 msm_routing_put_audio_mixer),
6831 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6832 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6833 msm_routing_put_audio_mixer),
6834 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6835 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6836 msm_routing_put_audio_mixer),
6837 SOC_SINGLE_EXT("TERT_AUX_PCM_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6838 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6839 msm_routing_put_audio_mixer),
6840 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6841 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6842 msm_routing_put_audio_mixer),
6843 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6844 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6845 msm_routing_put_audio_mixer),
6846 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6847 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6848 msm_routing_put_audio_mixer),
6849 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6850 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6851 msm_routing_put_audio_mixer),
6852 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6853 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6854 msm_routing_put_audio_mixer),
6855 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6856 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6857 msm_routing_put_audio_mixer),
6858 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6859 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6860 msm_routing_put_audio_mixer),
6861 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6862 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6863 msm_routing_put_audio_mixer),
6864 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6865 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6866 msm_routing_put_audio_mixer),
6867 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6868 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6869 msm_routing_put_audio_mixer),
6870 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6871 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6872 msm_routing_put_audio_mixer),
6873 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6874 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6875 msm_routing_put_audio_mixer),
6876 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6877 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6878 msm_routing_put_audio_mixer),
6879 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6880 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6881 msm_routing_put_audio_mixer),
6882 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6883 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6884 msm_routing_put_audio_mixer),
6885 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6886 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6887 msm_routing_put_audio_mixer),
6888 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6889 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6890 msm_routing_put_audio_mixer),
6891 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6892 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6893 msm_routing_put_audio_mixer),
6894 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6895 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6896 msm_routing_put_audio_mixer),
6897 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
6898 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6899 msm_routing_put_audio_mixer),
6900 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6901 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6902 msm_routing_put_audio_mixer),
6903 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6904 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6905 msm_routing_put_audio_mixer),
6906 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6907 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6908 msm_routing_put_audio_mixer),
6909 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
6910 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6911 msm_routing_put_audio_mixer),
6912 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6913 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6914 msm_routing_put_audio_mixer),
6915 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6916 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6917 msm_routing_put_audio_mixer),
6918};
6919
6920static const struct snd_kcontrol_new mmul6_mixer_controls[] = {
6921 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6922 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6923 msm_routing_put_audio_mixer),
6924 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6925 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6926 msm_routing_put_audio_mixer),
6927 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6928 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6929 msm_routing_put_audio_mixer),
6930 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6931 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6932 msm_routing_put_audio_mixer),
6933 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6934 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6935 msm_routing_put_audio_mixer),
6936 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6937 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6938 msm_routing_put_audio_mixer),
6939 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6940 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6941 msm_routing_put_audio_mixer),
6942 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6943 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6944 msm_routing_put_audio_mixer),
6945 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6946 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6947 msm_routing_put_audio_mixer),
6948 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6949 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6950 msm_routing_put_audio_mixer),
6951 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6952 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6953 msm_routing_put_audio_mixer),
6954 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6955 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6956 msm_routing_put_audio_mixer),
6957 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6958 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6959 msm_routing_put_audio_mixer),
6960 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
6961 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6962 msm_routing_put_audio_mixer),
6963 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
6964 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6965 msm_routing_put_audio_mixer),
6966 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6967 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6968 msm_routing_put_audio_mixer),
6969 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6970 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6971 msm_routing_put_audio_mixer),
6972 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
6973 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6974 msm_routing_put_audio_mixer),
6975 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
6976 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6977 msm_routing_put_audio_mixer),
6978 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6979 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6980 msm_routing_put_audio_mixer),
6981 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6982 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6983 msm_routing_put_audio_mixer),
6984 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6985 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6986 msm_routing_put_audio_mixer),
6987 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
6988 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6989 msm_routing_put_audio_mixer),
6990 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6991 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6992 msm_routing_put_audio_mixer),
6993 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6994 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6995 msm_routing_put_audio_mixer),
6996 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
6997 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6998 msm_routing_put_audio_mixer),
6999 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7000 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
7001 msm_routing_put_audio_mixer),
7002 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7003 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
7004 msm_routing_put_audio_mixer),
7005 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7006 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
7007 msm_routing_put_audio_mixer),
7008};
7009
7010static const struct snd_kcontrol_new mmul8_mixer_controls[] = {
7011 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7012 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7013 msm_routing_put_audio_mixer),
7014 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7015 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7016 msm_routing_put_audio_mixer),
7017 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7018 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7019 msm_routing_put_audio_mixer),
7020 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7021 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7022 msm_routing_put_audio_mixer),
7023 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
7024 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7025 msm_routing_put_audio_mixer),
7026 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
7027 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7028 msm_routing_put_audio_mixer),
7029 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7030 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7031 msm_routing_put_audio_mixer),
7032 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7033 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7034 msm_routing_put_audio_mixer),
7035 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7036 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7037 msm_routing_put_audio_mixer),
7038 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7039 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7040 msm_routing_put_audio_mixer),
7041 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7042 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7043 msm_routing_put_audio_mixer),
7044 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7045 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7046 msm_routing_put_audio_mixer),
7047 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7048 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7049 msm_routing_put_audio_mixer),
7050 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7051 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7052 msm_routing_put_audio_mixer),
7053 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
7054 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7055 msm_routing_put_audio_mixer),
7056 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
7057 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7058 msm_routing_put_audio_mixer),
7059 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7060 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7061 msm_routing_put_audio_mixer),
7062 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7063 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7064 msm_routing_put_audio_mixer),
7065 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
7066 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7067 msm_routing_put_audio_mixer),
7068 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
7069 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7070 msm_routing_put_audio_mixer),
7071 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7072 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7073 msm_routing_put_audio_mixer),
7074 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7075 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7076 msm_routing_put_audio_mixer),
7077 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7078 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7079 msm_routing_put_audio_mixer),
7080 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7081 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7082 msm_routing_put_audio_mixer),
7083 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7084 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7085 msm_routing_put_audio_mixer),
7086 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7087 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7088 msm_routing_put_audio_mixer),
7089 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7090 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7091 msm_routing_put_audio_mixer),
7092 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7093 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7094 msm_routing_put_audio_mixer),
7095 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7096 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7097 msm_routing_put_audio_mixer),
7098 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
7099 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7100 msm_routing_put_audio_mixer),
7101 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7102 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7103 msm_routing_put_audio_mixer),
7104};
7105
7106static const struct snd_kcontrol_new mmul9_mixer_controls[] = {
7107 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7108 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7109 msm_routing_put_audio_mixer),
7110 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7111 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7112 msm_routing_put_audio_mixer),
7113 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7114 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7115 msm_routing_put_audio_mixer),
7116 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7117 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7118 msm_routing_put_audio_mixer),
7119 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7120 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7121 msm_routing_put_audio_mixer),
7122 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7123 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7124 msm_routing_put_audio_mixer),
7125 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7126 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7127 msm_routing_put_audio_mixer),
7128 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7129 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7130 msm_routing_put_audio_mixer),
7131 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7132 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7133 msm_routing_put_audio_mixer),
7134 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7135 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7136 msm_routing_put_audio_mixer),
7137 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7138 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7139 msm_routing_put_audio_mixer),
7140 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7141 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7142 msm_routing_put_audio_mixer),
7143 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7144 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7145 msm_routing_put_audio_mixer),
7146 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7147 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7148 msm_routing_put_audio_mixer),
7149 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7150 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7151 msm_routing_put_audio_mixer),
7152 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7153 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7154 msm_routing_put_audio_mixer),
7155};
7156
7157static const struct snd_kcontrol_new mmul17_mixer_controls[] = {
7158 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7159 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7160 msm_routing_put_audio_mixer),
7161 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7162 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7163 msm_routing_put_audio_mixer),
7164 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7165 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7166 msm_routing_put_audio_mixer),
7167 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7168 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7169 msm_routing_put_audio_mixer),
7170 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7171 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7172 msm_routing_put_audio_mixer),
7173 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7174 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7175 msm_routing_put_audio_mixer),
7176 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7177 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7178 msm_routing_put_audio_mixer),
7179};
7180
7181static const struct snd_kcontrol_new mmul18_mixer_controls[] = {
7182 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7183 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7184 msm_routing_put_audio_mixer),
7185 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7186 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7187 msm_routing_put_audio_mixer),
7188 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7189 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7190 msm_routing_put_audio_mixer),
7191 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7192 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7193 msm_routing_put_audio_mixer),
7194 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7195 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7196 msm_routing_put_audio_mixer),
7197 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7198 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7199 msm_routing_put_audio_mixer),
7200 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7201 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7202 msm_routing_put_audio_mixer),
7203 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7204 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7205 msm_routing_put_audio_mixer),
7206};
7207
7208static const struct snd_kcontrol_new mmul19_mixer_controls[] = {
7209 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7210 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7211 msm_routing_put_audio_mixer),
7212 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7213 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7214 msm_routing_put_audio_mixer),
7215 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7216 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7217 msm_routing_put_audio_mixer),
7218 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7219 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7220 msm_routing_put_audio_mixer),
7221 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7222 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7223 msm_routing_put_audio_mixer),
7224 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7225 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7226 msm_routing_put_audio_mixer),
7227 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7228 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7229 msm_routing_put_audio_mixer),
7230};
7231
7232static const struct snd_kcontrol_new mmul20_mixer_controls[] = {
7233 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7234 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7235 msm_routing_put_audio_mixer),
7236 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7237 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7238 msm_routing_put_audio_mixer),
7239 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7240 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7241 msm_routing_put_audio_mixer),
7242 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7243 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7244 msm_routing_put_audio_mixer),
7245 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7246 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7247 msm_routing_put_audio_mixer),
7248 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
7249 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7250 msm_routing_put_audio_mixer),
7251 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
7252 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7253 msm_routing_put_audio_mixer),
7254 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7255 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7256 msm_routing_put_audio_mixer),
7257 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7258 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7259 msm_routing_put_audio_mixer),
7260 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
7261 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7262 msm_routing_put_audio_mixer),
7263 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
7264 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7265 msm_routing_put_audio_mixer),
7266 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7267 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7268 msm_routing_put_audio_mixer),
7269 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7270 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7271 msm_routing_put_audio_mixer),
7272 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7273 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7274 msm_routing_put_audio_mixer),
7275 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7276 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7277 msm_routing_put_audio_mixer),
7278 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7279 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7280 msm_routing_put_audio_mixer),
7281 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7282 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7283 msm_routing_put_audio_mixer),
7284 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7285 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7286 msm_routing_put_audio_mixer),
7287 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7288 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7289 msm_routing_put_audio_mixer),
7290 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7291 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7292 msm_routing_put_audio_mixer),
7293};
7294
7295static const struct snd_kcontrol_new pri_rx_voice_mixer_controls[] = {
7296 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_I2S_RX,
7297 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7298 msm_routing_put_voice_mixer),
7299 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_I2S_RX,
7300 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7301 msm_routing_put_voice_mixer),
7302 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_I2S_RX,
7303 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7304 msm_routing_put_voice_mixer),
7305 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_I2S_RX,
7306 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7307 msm_routing_put_voice_mixer),
7308 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_I2S_RX,
7309 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7310 msm_routing_put_voice_mixer),
7311 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_I2S_RX,
7312 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7313 msm_routing_put_voice_mixer),
7314 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_I2S_RX,
7315 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7316 msm_routing_put_voice_mixer),
7317 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_I2S_RX,
7318 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7319 msm_routing_put_voice_mixer),
7320 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_I2S_RX,
7321 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7322 msm_routing_put_voice_mixer),
7323};
7324
7325static const struct snd_kcontrol_new sec_i2s_rx_voice_mixer_controls[] = {
7326 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_I2S_RX,
7327 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7328 msm_routing_put_voice_mixer),
7329 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_I2S_RX,
7330 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7331 msm_routing_put_voice_mixer),
7332 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_I2S_RX,
7333 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7334 msm_routing_put_voice_mixer),
7335 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_I2S_RX,
7336 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7337 msm_routing_put_voice_mixer),
7338 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_I2S_RX,
7339 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7340 msm_routing_put_voice_mixer),
7341 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_I2S_RX,
7342 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7343 msm_routing_put_voice_mixer),
7344 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_I2S_RX,
7345 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7346 msm_routing_put_voice_mixer),
7347};
7348
7349static const struct snd_kcontrol_new sec_mi2s_rx_voice_mixer_controls[] = {
7350 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7351 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7352 msm_routing_put_voice_mixer),
7353 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7354 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7355 msm_routing_put_voice_mixer),
7356 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7357 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7358 msm_routing_put_voice_mixer),
7359 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7360 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7361 msm_routing_put_voice_mixer),
7362 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7363 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7364 msm_routing_put_voice_mixer),
7365 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7366 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7367 msm_routing_put_voice_mixer),
7368 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7369 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7370 msm_routing_put_voice_mixer),
7371 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7372 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7373 msm_routing_put_voice_mixer),
7374 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7375 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7376 msm_routing_put_voice_mixer),
7377};
7378
7379static const struct snd_kcontrol_new slimbus_rx_voice_mixer_controls[] = {
7380 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7381 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7382 msm_routing_put_voice_mixer),
7383 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7384 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7385 msm_routing_put_voice_mixer),
7386 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7387 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7388 msm_routing_put_voice_mixer),
7389 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7390 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7391 msm_routing_put_voice_stub_mixer),
7392 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7393 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7394 msm_routing_put_voice_stub_mixer),
7395 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7396 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7397 msm_routing_put_voice_mixer),
7398 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7399 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7400 msm_routing_put_voice_stub_mixer),
7401 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7402 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7403 msm_routing_put_voice_mixer),
7404 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7405 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7406 msm_routing_put_voice_mixer),
7407 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7408 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7409 msm_routing_put_voice_mixer),
7410 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7411 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7412 msm_routing_put_voice_mixer),
7413 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7414 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7415 msm_routing_put_voice_mixer),
7416};
7417
7418static const struct snd_kcontrol_new slimbus_6_rx_voice_mixer_controls[] = {
7419 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7420 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7421 msm_routing_put_voice_mixer),
7422 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7423 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7424 msm_routing_put_voice_mixer),
7425 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7426 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7427 msm_routing_put_voice_mixer),
7428 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7429 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7430 msm_routing_put_voice_stub_mixer),
7431 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7432 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7433 msm_routing_put_voice_stub_mixer),
7434 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7435 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7436 msm_routing_put_voice_mixer),
7437 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7438 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7439 msm_routing_put_voice_stub_mixer),
7440 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7441 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7442 msm_routing_put_voice_mixer),
7443 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7444 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7445 msm_routing_put_voice_mixer),
7446 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7447 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7448 msm_routing_put_voice_mixer),
7449 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7450 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7451 msm_routing_put_voice_mixer),
7452 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7453 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7454 msm_routing_put_voice_mixer),
7455};
7456
7457static const struct snd_kcontrol_new usb_audio_rx_voice_mixer_controls[] = {
7458 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_USB_RX,
7459 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7460 msm_routing_put_voice_mixer),
7461 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_USB_RX,
7462 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7463 msm_routing_put_voice_mixer),
7464 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_USB_RX,
7465 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7466 msm_routing_put_voice_mixer),
7467 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_USB_RX,
7468 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7469 msm_routing_put_voice_stub_mixer),
7470 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_USB_RX,
7471 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7472 msm_routing_put_voice_stub_mixer),
7473 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_USB_RX,
7474 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7475 msm_routing_put_voice_mixer),
7476 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_USB_RX,
7477 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7478 msm_routing_put_voice_stub_mixer),
7479 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_USB_RX,
7480 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7481 msm_routing_put_voice_mixer),
7482 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_USB_RX,
7483 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7484 msm_routing_put_voice_mixer),
7485 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_USB_RX,
7486 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7487 msm_routing_put_voice_mixer),
7488 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_USB_RX,
7489 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7490 msm_routing_put_voice_mixer),
7491 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_USB_RX,
7492 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7493 msm_routing_put_voice_mixer),
7494};
7495
7496static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = {
7497 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7498 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7499 msm_routing_put_voice_mixer),
7500 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7501 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7502 msm_routing_put_voice_mixer),
7503 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7504 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7505 msm_routing_put_voice_mixer),
7506 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7507 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7508 msm_routing_put_voice_stub_mixer),
7509 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7510 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7511 msm_routing_put_voice_stub_mixer),
7512 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7513 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7514 msm_routing_put_voice_mixer),
7515 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7516 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7517 msm_routing_put_voice_mixer),
7518 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7519 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7520 msm_routing_put_voice_mixer),
7521 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7522 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7523 msm_routing_put_voice_mixer),
7524 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7525 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7526 msm_routing_put_voice_mixer),
7527 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7528 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7529 msm_routing_put_voice_mixer),
7530};
7531
7532static const struct snd_kcontrol_new mi2s_rx_voice_mixer_controls[] = {
7533 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_MI2S_RX,
7534 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7535 msm_routing_put_voice_mixer),
7536 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_MI2S_RX,
7537 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7538 msm_routing_put_voice_mixer),
7539 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_MI2S_RX,
7540 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7541 msm_routing_put_voice_mixer),
7542 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_MI2S_RX,
7543 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7544 msm_routing_put_voice_stub_mixer),
7545 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_MI2S_RX,
7546 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7547 msm_routing_put_voice_mixer),
7548 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_MI2S_RX,
7549 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7550 msm_routing_put_voice_mixer),
7551 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX,
7552 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7553 msm_routing_put_voice_mixer),
7554 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_MI2S_RX,
7555 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7556 msm_routing_put_voice_mixer),
7557 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_MI2S_RX,
7558 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7559 msm_routing_put_voice_mixer),
7560 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_MI2S_RX,
7561 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7562 msm_routing_put_voice_mixer),
7563};
7564
7565static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = {
7566 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_MI2S_RX,
7567 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7568 msm_routing_put_voice_mixer),
7569 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7570 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7571 msm_routing_put_voice_mixer),
7572 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_MI2S_RX,
7573 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7574 msm_routing_put_voice_mixer),
7575 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7576 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7577 msm_routing_put_voice_stub_mixer),
7578 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7579 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7580 msm_routing_put_voice_stub_mixer),
7581 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_MI2S_RX,
7582 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7583 msm_routing_put_voice_mixer),
7584 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7585 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7586 msm_routing_put_voice_mixer),
7587 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_RX,
7588 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7589 msm_routing_put_voice_mixer),
7590 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX,
7591 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7592 msm_routing_put_voice_mixer),
7593 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_MI2S_RX,
7594 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7595 msm_routing_put_voice_mixer),
7596 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_MI2S_RX,
7597 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7598 msm_routing_put_voice_mixer),
7599 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7600 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7601 msm_routing_put_voice_mixer),
7602};
7603
7604static const struct snd_kcontrol_new int0_mi2s_rx_voice_mixer_controls[] = {
7605 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT0_MI2S_RX,
7606 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7607 msm_routing_put_voice_mixer),
7608 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT0_MI2S_RX,
7609 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7610 msm_routing_put_voice_mixer),
7611 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT0_MI2S_RX,
7612 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7613 msm_routing_put_voice_mixer),
7614 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT0_MI2S_RX,
7615 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7616 msm_routing_put_voice_mixer),
7617 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT0_MI2S_RX,
7618 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7619 msm_routing_put_voice_mixer),
7620};
7621
7622static const struct snd_kcontrol_new int4_mi2s_rx_voice_mixer_controls[] = {
7623 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT4_MI2S_RX,
7624 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7625 msm_routing_put_voice_mixer),
7626 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT4_MI2S_RX,
7627 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7628 msm_routing_put_voice_mixer),
7629 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT4_MI2S_RX,
7630 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7631 msm_routing_put_voice_mixer),
7632 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT4_MI2S_RX,
7633 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7634 msm_routing_put_voice_mixer),
7635 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT4_MI2S_RX,
7636 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7637 msm_routing_put_voice_mixer),
7638};
7639
7640static const struct snd_kcontrol_new tert_mi2s_rx_voice_mixer_controls[] = {
7641 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7642 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7643 msm_routing_put_voice_mixer),
7644 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7645 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7646 msm_routing_put_voice_mixer),
7647 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7648 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7649 msm_routing_put_voice_mixer),
7650 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7651 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7652 msm_routing_put_voice_stub_mixer),
7653 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7654 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7655 msm_routing_put_voice_stub_mixer),
7656 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7657 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7658 msm_routing_put_voice_mixer),
7659 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7660 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7661 msm_routing_put_voice_mixer),
7662 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7663 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7664 msm_routing_put_voice_mixer),
7665 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7666 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7667 msm_routing_put_voice_mixer),
7668 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7669 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7670 msm_routing_put_voice_mixer),
7671 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7672 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7673 msm_routing_put_voice_mixer),
7674 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7675 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7676 msm_routing_put_voice_mixer),
7677};
7678
7679static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = {
7680 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7681 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7682 msm_routing_put_voice_mixer),
7683 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7684 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7685 msm_routing_put_voice_mixer),
7686 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7687 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7688 msm_routing_put_voice_mixer),
7689 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7690 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7691 msm_routing_put_voice_stub_mixer),
7692 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7693 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7694 msm_routing_put_voice_stub_mixer),
7695 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7696 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7697 msm_routing_put_voice_mixer),
7698 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7699 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7700 msm_routing_put_voice_mixer),
7701 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7702 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7703 msm_routing_put_voice_mixer),
7704 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7705 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7706 msm_routing_put_voice_mixer),
7707 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7708 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7709 msm_routing_put_voice_mixer),
7710 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7711 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7712 msm_routing_put_voice_mixer),
7713 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7714 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7715 msm_routing_put_voice_mixer),
7716};
7717
7718static const struct snd_kcontrol_new quin_mi2s_rx_voice_mixer_controls[] = {
7719 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7720 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7721 msm_routing_put_voice_mixer),
7722 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7723 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7724 msm_routing_put_voice_mixer),
7725 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7726 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7727 msm_routing_put_voice_mixer),
7728 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7729 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7730 msm_routing_put_voice_stub_mixer),
7731 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7732 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7733 msm_routing_put_voice_stub_mixer),
7734 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7735 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7736 msm_routing_put_voice_mixer),
7737 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7738 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7739 msm_routing_put_voice_mixer),
7740 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7741 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7742 msm_routing_put_voice_mixer),
7743 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7744 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7745 msm_routing_put_voice_mixer),
7746 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7747 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7748 msm_routing_put_voice_mixer),
7749 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7750 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7751 msm_routing_put_voice_mixer),
7752 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7753 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7754 msm_routing_put_voice_mixer),
7755};
7756
7757static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = {
7758 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AFE_PCM_RX,
7759 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7760 msm_routing_put_voice_mixer),
7761 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AFE_PCM_RX,
7762 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7763 msm_routing_put_voice_mixer),
7764 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AFE_PCM_RX,
7765 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7766 msm_routing_put_voice_mixer),
7767 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7768 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7769 msm_routing_put_voice_stub_mixer),
7770 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7771 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7772 msm_routing_put_voice_stub_mixer),
7773 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AFE_PCM_RX,
7774 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7775 msm_routing_put_voice_mixer),
7776 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7777 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7778 msm_routing_put_voice_stub_mixer),
7779 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AFE_PCM_RX,
7780 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7781 msm_routing_put_voice_mixer),
7782 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX,
7783 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7784 msm_routing_put_voice_mixer),
7785 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AFE_PCM_RX,
7786 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7787 msm_routing_put_voice_mixer),
7788 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AFE_PCM_RX,
7789 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7790 msm_routing_put_voice_mixer),
7791 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AFE_PCM_RX,
7792 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7793 msm_routing_put_voice_mixer),
7794};
7795
7796static const struct snd_kcontrol_new aux_pcm_rx_voice_mixer_controls[] = {
7797 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AUXPCM_RX,
7798 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7799 msm_routing_put_voice_mixer),
7800 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AUXPCM_RX,
7801 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7802 msm_routing_put_voice_mixer),
7803 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AUXPCM_RX,
7804 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7805 msm_routing_put_voice_mixer),
7806 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7807 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7808 msm_routing_put_voice_stub_mixer),
7809 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7810 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7811 msm_routing_put_voice_stub_mixer),
7812 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AUXPCM_RX,
7813 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7814 msm_routing_put_voice_mixer),
7815 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7816 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7817 msm_routing_put_voice_stub_mixer),
7818 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AUXPCM_RX,
7819 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7820 msm_routing_put_voice_mixer),
7821 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX,
7822 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7823 msm_routing_put_voice_mixer),
7824 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AUXPCM_RX,
7825 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7826 msm_routing_put_voice_mixer),
7827 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AUXPCM_RX,
7828 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7829 msm_routing_put_voice_mixer),
7830 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AUXPCM_RX,
7831 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7832 msm_routing_put_voice_mixer),
7833};
7834
7835static const struct snd_kcontrol_new sec_aux_pcm_rx_voice_mixer_controls[] = {
7836 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7837 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7838 msm_routing_put_voice_mixer),
7839 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7840 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7841 msm_routing_put_voice_mixer),
7842 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7843 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7844 msm_routing_put_voice_mixer),
7845 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7846 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7847 msm_routing_put_voice_stub_mixer),
7848 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7849 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7850 msm_routing_put_voice_mixer),
7851 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7852 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7853 msm_routing_put_voice_mixer),
7854 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7855 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7856 msm_routing_put_voice_mixer),
7857 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7858 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7859 msm_routing_put_voice_mixer),
7860 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7861 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7862 msm_routing_put_voice_mixer),
7863 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7864 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7865 msm_routing_put_voice_mixer),
7866};
7867
7868static const struct snd_kcontrol_new tert_aux_pcm_rx_voice_mixer_controls[] = {
7869 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7870 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7871 msm_routing_put_voice_mixer),
7872 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7873 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7874 msm_routing_put_voice_mixer),
7875 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7876 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7877 msm_routing_put_voice_mixer),
7878 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7879 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7880 msm_routing_put_voice_stub_mixer),
7881 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7882 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7883 msm_routing_put_voice_mixer),
7884 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7885 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7886 msm_routing_put_voice_mixer),
7887 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7888 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7889 msm_routing_put_voice_mixer),
7890 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7891 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7892 msm_routing_put_voice_mixer),
7893 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7894 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7895 msm_routing_put_voice_mixer),
7896 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
7897 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7898 msm_routing_put_voice_mixer),
7899};
7900
7901static const struct snd_kcontrol_new quat_aux_pcm_rx_voice_mixer_controls[] = {
7902 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7903 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7904 msm_routing_put_voice_mixer),
7905 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7906 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7907 msm_routing_put_voice_mixer),
7908 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7909 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7910 msm_routing_put_voice_mixer),
7911 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7912 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7913 msm_routing_put_voice_stub_mixer),
7914 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7915 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7916 msm_routing_put_voice_mixer),
7917 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7918 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7919 msm_routing_put_voice_mixer),
7920 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7921 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7922 msm_routing_put_voice_mixer),
7923 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7924 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7925 msm_routing_put_voice_mixer),
7926 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7927 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7928 msm_routing_put_voice_mixer),
7929 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
7930 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7931 msm_routing_put_voice_mixer),
7932};
7933
7934static const struct snd_kcontrol_new hdmi_rx_voice_mixer_controls[] = {
7935 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_HDMI_RX,
7936 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7937 msm_routing_put_voice_mixer),
7938 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_HDMI_RX,
7939 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7940 msm_routing_put_voice_mixer),
7941 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_HDMI_RX,
7942 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7943 msm_routing_put_voice_mixer),
7944 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_HDMI_RX,
7945 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7946 msm_routing_put_voice_mixer),
7947 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_HDMI_RX,
7948 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7949 msm_routing_put_voice_mixer),
7950 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX,
7951 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7952 msm_routing_put_voice_stub_mixer),
7953 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_HDMI_RX,
7954 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7955 msm_routing_put_voice_stub_mixer),
7956 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_HDMI_RX,
7957 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7958 msm_routing_put_voice_stub_mixer),
7959 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_HDMI_RX,
7960 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7961 msm_routing_put_voice_mixer),
7962 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_HDMI_RX,
7963 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7964 msm_routing_put_voice_mixer),
7965 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_HDMI_RX,
7966 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7967 msm_routing_put_voice_mixer),
7968 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_HDMI_RX,
7969 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7970 msm_routing_put_voice_mixer),
7971};
7972
7973static const struct snd_kcontrol_new slimbus_7_rx_voice_mixer_controls[] = {
7974 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7975 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7976 msm_routing_put_voice_mixer),
7977 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7978 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7979 msm_routing_put_voice_mixer),
7980 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7981 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7982 msm_routing_put_voice_mixer),
7983 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7984 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7985 msm_routing_put_voice_stub_mixer),
7986 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7987 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7988 msm_routing_put_voice_stub_mixer),
7989 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7990 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7991 msm_routing_put_voice_mixer),
7992 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7993 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7994 msm_routing_put_voice_stub_mixer),
7995 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7996 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7997 msm_routing_put_voice_mixer),
7998 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_7_RX,
7999 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8000 msm_routing_put_voice_mixer),
8001 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8002 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8003 msm_routing_put_voice_mixer),
8004 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8005 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8006 msm_routing_put_voice_mixer),
8007 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8008 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8009 msm_routing_put_voice_mixer),
8010};
8011
8012static const struct snd_kcontrol_new slimbus_8_rx_voice_mixer_controls[] = {
8013 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8014 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8015 msm_routing_put_voice_mixer),
8016 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8017 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8018 msm_routing_put_voice_mixer),
8019 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8020 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8021 msm_routing_put_voice_mixer),
8022 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8023 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8024 msm_routing_put_voice_stub_mixer),
8025 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8026 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8027 msm_routing_put_voice_stub_mixer),
8028 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8029 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8030 msm_routing_put_voice_mixer),
8031 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8032 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8033 msm_routing_put_voice_stub_mixer),
8034 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8035 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8036 msm_routing_put_voice_mixer),
8037 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8038 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8039 msm_routing_put_voice_mixer),
8040 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8041 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8042 msm_routing_put_voice_mixer),
8043 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8044 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8045 msm_routing_put_voice_mixer),
8046 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8047 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8048 msm_routing_put_voice_mixer),
8049};
8050
8051static const struct snd_kcontrol_new quat_tdm_rx_2_voice_mixer_controls[] = {
8052 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
8053 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8054 msm_routing_put_voice_mixer),
8055};
8056
8057static const struct snd_kcontrol_new stub_rx_mixer_controls[] = {
8058 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8059 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8060 msm_routing_put_voice_stub_mixer),
8061 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8062 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8063 msm_routing_put_voice_stub_mixer),
8064 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8065 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8066 msm_routing_put_voice_stub_mixer),
8067};
8068
8069static const struct snd_kcontrol_new slimbus_1_rx_mixer_controls[] = {
8070 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8071 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8072 msm_routing_put_voice_stub_mixer),
8073 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8074 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8075 msm_routing_put_voice_stub_mixer),
8076 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8077 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8078 msm_routing_put_voice_stub_mixer),
8079};
8080
8081static const struct snd_kcontrol_new slimbus_3_rx_mixer_controls[] = {
8082 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8083 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8084 msm_routing_put_voice_stub_mixer),
8085 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8086 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8087 msm_routing_put_voice_stub_mixer),
8088 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8089 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8090 msm_routing_put_voice_stub_mixer),
8091};
8092
8093static const struct snd_kcontrol_new tx_voice_mixer_controls[] = {
8094 SOC_SINGLE_EXT("PRI_TX_Voice", MSM_BACKEND_DAI_PRI_I2S_TX,
8095 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8096 msm_routing_put_voice_mixer),
8097 SOC_SINGLE_EXT("MI2S_TX_Voice", MSM_BACKEND_DAI_MI2S_TX,
8098 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8099 msm_routing_put_voice_mixer),
8100 SOC_SINGLE_EXT("SLIM_0_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8101 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8102 msm_routing_put_voice_mixer),
8103 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice",
8104 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0,
8105 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8106 SOC_SINGLE_EXT("AFE_PCM_TX_Voice", MSM_BACKEND_DAI_AFE_PCM_TX,
8107 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8108 msm_routing_put_voice_mixer),
8109 SOC_SINGLE_EXT("AUX_PCM_TX_Voice", MSM_BACKEND_DAI_AUXPCM_TX,
8110 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8111 msm_routing_put_voice_mixer),
8112 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8113 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8114 msm_routing_put_voice_mixer),
8115 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8116 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8117 msm_routing_put_voice_mixer),
8118 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8119 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8120 msm_routing_put_voice_mixer),
8121 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice", MSM_BACKEND_DAI_PRI_MI2S_TX,
8122 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8123 msm_routing_put_voice_mixer),
8124 SOC_SINGLE_EXT("SEC_MI2S_TX_Voice", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
8125 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8126 msm_routing_put_voice_mixer),
8127 SOC_SINGLE_EXT("TERT_MI2S_TX_Voice", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8128 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8129 msm_routing_put_voice_mixer),
8130 SOC_SINGLE_EXT("SLIM_7_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8131 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8132 msm_routing_put_voice_mixer),
8133 SOC_SINGLE_EXT("SLIM_8_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8134 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8135 msm_routing_put_voice_mixer),
8136 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice", MSM_BACKEND_DAI_USB_TX,
8137 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8138 msm_routing_put_voice_mixer),
8139};
8140
8141static const struct snd_kcontrol_new tx_voice2_mixer_controls[] = {
8142 SOC_SINGLE_EXT("PRI_TX_Voice2", MSM_BACKEND_DAI_PRI_I2S_TX,
8143 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8144 msm_routing_put_voice_mixer),
8145 SOC_SINGLE_EXT("MI2S_TX_Voice2", MSM_BACKEND_DAI_MI2S_TX,
8146 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8147 msm_routing_put_voice_mixer),
8148 SOC_SINGLE_EXT("SLIM_0_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8149 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8150 msm_routing_put_voice_mixer),
8151 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice2",
8152 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICE2, 1, 0,
8153 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8154 SOC_SINGLE_EXT("AFE_PCM_TX_Voice2", MSM_BACKEND_DAI_AFE_PCM_TX,
8155 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8156 msm_routing_put_voice_mixer),
8157 SOC_SINGLE_EXT("AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_AUXPCM_TX,
8158 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8159 msm_routing_put_voice_mixer),
8160 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8161 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8162 msm_routing_put_voice_mixer),
8163 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8164 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8165 msm_routing_put_voice_mixer),
8166 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8167 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8168 msm_routing_put_voice_mixer),
8169 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice2", MSM_BACKEND_DAI_PRI_MI2S_TX,
8170 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8171 msm_routing_put_voice_mixer),
8172 SOC_SINGLE_EXT("TERT_MI2S_TX_Voice2", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8173 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8174 msm_routing_put_voice_mixer),
8175 SOC_SINGLE_EXT("SLIM_7_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8176 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8177 msm_routing_put_voice_mixer),
8178 SOC_SINGLE_EXT("SLIM_8_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8179 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8180 msm_routing_put_voice_mixer),
8181 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice2", MSM_BACKEND_DAI_USB_TX,
8182 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8183 msm_routing_put_voice_mixer),
8184};
8185
8186static const struct snd_kcontrol_new tx_volte_mixer_controls[] = {
8187 SOC_SINGLE_EXT("PRI_TX_VoLTE", MSM_BACKEND_DAI_PRI_I2S_TX,
8188 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8189 msm_routing_put_voice_mixer),
8190 SOC_SINGLE_EXT("SLIM_0_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8191 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8192 msm_routing_put_voice_mixer),
8193 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoLTE",
8194 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOLTE, 1, 0,
8195 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8196 SOC_SINGLE_EXT("AFE_PCM_TX_VoLTE", MSM_BACKEND_DAI_AFE_PCM_TX,
8197 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8198 msm_routing_put_voice_mixer),
8199 SOC_SINGLE_EXT("AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_AUXPCM_TX,
8200 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8201 msm_routing_put_voice_mixer),
8202 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8203 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8204 msm_routing_put_voice_mixer),
8205 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8206 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8207 msm_routing_put_voice_mixer),
8208 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8209 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8210 msm_routing_put_voice_mixer),
8211 SOC_SINGLE_EXT("MI2S_TX_VoLTE", MSM_BACKEND_DAI_MI2S_TX,
8212 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8213 msm_routing_put_voice_mixer),
8214 SOC_SINGLE_EXT("PRI_MI2S_TX_VoLTE", MSM_BACKEND_DAI_PRI_MI2S_TX,
8215 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8216 msm_routing_put_voice_mixer),
8217 SOC_SINGLE_EXT("TERT_MI2S_TX_VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8218 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8219 msm_routing_put_voice_mixer),
8220 SOC_SINGLE_EXT("SLIM_7_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8221 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8222 msm_routing_put_voice_mixer),
8223 SOC_SINGLE_EXT("SLIM_8_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8224 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8225 msm_routing_put_voice_mixer),
8226 SOC_SINGLE_EXT("USB_AUDIO_TX_VoLTE", MSM_BACKEND_DAI_USB_TX,
8227 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8228 msm_routing_put_voice_mixer),
8229};
8230
8231static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = {
8232 SOC_SINGLE_EXT("PRI_TX_VoWLAN", MSM_BACKEND_DAI_PRI_I2S_TX,
8233 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8234 msm_routing_put_voice_mixer),
8235 SOC_SINGLE_EXT("SLIM_0_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8236 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8237 msm_routing_put_voice_mixer),
8238 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoWLAN",
8239 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0,
8240 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8241 SOC_SINGLE_EXT("AFE_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AFE_PCM_TX,
8242 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8243 msm_routing_put_voice_mixer),
8244 SOC_SINGLE_EXT("AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AUXPCM_TX,
8245 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8246 msm_routing_put_voice_mixer),
8247 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8248 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8249 msm_routing_put_voice_mixer),
8250 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8251 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8252 msm_routing_put_voice_mixer),
8253 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8254 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8255 msm_routing_put_voice_mixer),
8256 SOC_SINGLE_EXT("MI2S_TX_VoWLAN", MSM_BACKEND_DAI_MI2S_TX,
8257 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8258 msm_routing_put_voice_mixer),
8259 SOC_SINGLE_EXT("PRI_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_TX,
8260 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8261 msm_routing_put_voice_mixer),
8262 SOC_SINGLE_EXT("TERT_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8263 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8264 msm_routing_put_voice_mixer),
8265 SOC_SINGLE_EXT("SLIM_7_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8266 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8267 msm_routing_put_voice_mixer),
8268 SOC_SINGLE_EXT("SLIM_8_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8269 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8270 msm_routing_put_voice_mixer),
8271 SOC_SINGLE_EXT("USB_AUDIO_TX_VoWLAN", MSM_BACKEND_DAI_USB_TX,
8272 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8273 msm_routing_put_voice_mixer),
8274};
8275
8276static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
8277 SOC_SINGLE_EXT("PRI_TX_MMode1", MSM_BACKEND_DAI_PRI_I2S_TX,
8278 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8279 msm_routing_put_voice_mixer),
8280 SOC_SINGLE_EXT("MI2S_TX_MMode1", MSM_BACKEND_DAI_MI2S_TX,
8281 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8282 msm_routing_put_voice_mixer),
8283 SOC_SINGLE_EXT("SLIM_0_TX_MMode1",
8284 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8285 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8286 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode1",
8287 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8288 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8289 SOC_SINGLE_EXT("AFE_PCM_TX_MMode1",
8290 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8291 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8292 SOC_SINGLE_EXT("AUX_PCM_TX_MMode1",
8293 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8294 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8295 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode1",
8296 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8297 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8298 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode1",
8299 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8300 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8301 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode1",
8302 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8303 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8304 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode1",
8305 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8306 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8307 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode1",
8308 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8309 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8310 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode1",
8311 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8312 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8313 SOC_SINGLE_EXT("SLIM_7_TX_MMode1",
8314 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8315 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8316 SOC_SINGLE_EXT("SLIM_8_TX_MMode1",
8317 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8318 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8319 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode1", MSM_BACKEND_DAI_USB_TX,
8320 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8321 msm_routing_put_voice_mixer),
8322 SOC_SINGLE_EXT("QUAT_TDM_TX_0_MMode1",
8323 MSM_BACKEND_DAI_QUAT_TDM_TX_0, MSM_FRONTEND_DAI_VOICEMMODE1,
8324 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8325};
8326
8327static const struct snd_kcontrol_new tx_voicemmode2_mixer_controls[] = {
8328 SOC_SINGLE_EXT("PRI_TX_MMode2", MSM_BACKEND_DAI_PRI_I2S_TX,
8329 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8330 msm_routing_put_voice_mixer),
8331 SOC_SINGLE_EXT("MI2S_TX_MMode2", MSM_BACKEND_DAI_MI2S_TX,
8332 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8333 msm_routing_put_voice_mixer),
8334 SOC_SINGLE_EXT("SLIM_0_TX_MMode2",
8335 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8336 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8337 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode2",
8338 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8339 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8340 SOC_SINGLE_EXT("AFE_PCM_TX_MMode2",
8341 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8342 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8343 SOC_SINGLE_EXT("AUX_PCM_TX_MMode2",
8344 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8345 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8346 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode2",
8347 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8348 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8349 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode2",
8350 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8351 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8352 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode2",
8353 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8354 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8355 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode2",
8356 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8357 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8358 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode2",
8359 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8360 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8361 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode2",
8362 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8363 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8364 SOC_SINGLE_EXT("SLIM_7_TX_MMode2",
8365 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8366 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8367 SOC_SINGLE_EXT("SLIM_8_TX_MMode2",
8368 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8369 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8370 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode2",
8371 MSM_BACKEND_DAI_USB_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8372 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8373};
8374
8375static const struct snd_kcontrol_new tx_voip_mixer_controls[] = {
8376 SOC_SINGLE_EXT("PRI_TX_Voip", MSM_BACKEND_DAI_PRI_I2S_TX,
8377 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8378 msm_routing_put_voice_mixer),
8379 SOC_SINGLE_EXT("MI2S_TX_Voip", MSM_BACKEND_DAI_MI2S_TX,
8380 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8381 msm_routing_put_voice_mixer),
8382 SOC_SINGLE_EXT("SLIM_0_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8383 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8384 msm_routing_put_voice_mixer),
8385 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voip", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8386 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8387 msm_routing_put_voice_mixer),
8388 SOC_SINGLE_EXT("AFE_PCM_TX_Voip", MSM_BACKEND_DAI_AFE_PCM_TX,
8389 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8390 msm_routing_put_voice_mixer),
8391 SOC_SINGLE_EXT("AUX_PCM_TX_Voip", MSM_BACKEND_DAI_AUXPCM_TX,
8392 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8393 msm_routing_put_voice_mixer),
8394 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8395 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8396 msm_routing_put_voice_mixer),
8397 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8398 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8399 msm_routing_put_voice_mixer),
8400 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8401 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8402 msm_routing_put_voice_mixer),
8403 SOC_SINGLE_EXT("PRI_MI2S_TX_Voip", MSM_BACKEND_DAI_PRI_MI2S_TX,
8404 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8405 msm_routing_put_voice_mixer),
8406 SOC_SINGLE_EXT("TERT_MI2S_TX_Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8407 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8408 msm_routing_put_voice_mixer),
8409 SOC_SINGLE_EXT("INT3_MI2S_TX_Voip", MSM_BACKEND_DAI_INT3_MI2S_TX,
8410 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8411 msm_routing_put_voice_mixer),
8412 SOC_SINGLE_EXT("SLIM_7_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8413 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8414 msm_routing_put_voice_mixer),
8415 SOC_SINGLE_EXT("SLIM_8_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8416 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8417 msm_routing_put_voice_mixer),
8418 SOC_SINGLE_EXT("USB_AUDIO_TX_Voip", MSM_BACKEND_DAI_USB_TX,
8419 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8420 msm_routing_put_voice_mixer),
8421};
8422
8423static const struct snd_kcontrol_new tx_voice_stub_mixer_controls[] = {
8424 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8425 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8426 msm_routing_put_voice_stub_mixer),
8427 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8428 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8429 msm_routing_put_voice_stub_mixer),
8430 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8431 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8432 msm_routing_put_voice_stub_mixer),
8433 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8434 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8435 msm_routing_put_voice_stub_mixer),
8436 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
8437 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8438 msm_routing_put_voice_stub_mixer),
8439 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8440 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8441 msm_routing_put_voice_stub_mixer),
8442 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8443 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8444 msm_routing_put_voice_stub_mixer),
8445 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
8446 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8447 msm_routing_put_voice_stub_mixer),
8448 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8449 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8450 msm_routing_put_voice_stub_mixer),
8451 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8452 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8453 msm_routing_put_voice_stub_mixer),
8454 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8455 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8456 msm_routing_put_voice_stub_mixer),
8457 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8458 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8459 msm_routing_put_voice_stub_mixer),
8460 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8461 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8462 msm_routing_put_voice_stub_mixer),
8463 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8464 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8465 msm_routing_put_voice_stub_mixer),
8466 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8467 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8468 msm_routing_put_voice_stub_mixer),
8469 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8470 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8471 msm_routing_put_voice_stub_mixer),
8472 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8473 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8474 msm_routing_put_voice_stub_mixer),
8475 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8476 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8477 msm_routing_put_voice_stub_mixer),
8478};
8479
8480static const struct snd_kcontrol_new tx_voice2_stub_mixer_controls[] = {
8481 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8482 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8483 msm_routing_put_voice_stub_mixer),
8484 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8485 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8486 msm_routing_put_voice_stub_mixer),
8487 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8488 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8489 msm_routing_put_voice_stub_mixer),
8490 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8491 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8492 msm_routing_put_voice_stub_mixer),
8493 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8494 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8495 msm_routing_put_voice_stub_mixer),
8496 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8497 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8498 msm_routing_put_voice_stub_mixer),
8499 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8500 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8501 msm_routing_put_voice_stub_mixer),
8502 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8503 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8504 msm_routing_put_voice_stub_mixer),
8505 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8506 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8507 msm_routing_put_voice_stub_mixer),
8508 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8509 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8510 msm_routing_put_voice_stub_mixer),
8511 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8512 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8513 msm_routing_put_voice_stub_mixer),
8514 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8515 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8516 msm_routing_put_voice_stub_mixer),
8517 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8518 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8519 msm_routing_put_voice_stub_mixer),
8520 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8521 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8522 msm_routing_put_voice_stub_mixer),
8523};
8524
8525static const struct snd_kcontrol_new tx_volte_stub_mixer_controls[] = {
8526 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8527 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8528 msm_routing_put_voice_stub_mixer),
8529 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8530 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8531 msm_routing_put_voice_stub_mixer),
8532 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8533 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8534 msm_routing_put_voice_stub_mixer),
8535 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8536 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8537 msm_routing_put_voice_stub_mixer),
8538 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8539 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8540 msm_routing_put_voice_stub_mixer),
8541 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8542 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8543 msm_routing_put_voice_stub_mixer),
8544 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8545 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8546 msm_routing_put_voice_stub_mixer),
8547 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8548 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8549 msm_routing_put_voice_stub_mixer),
8550 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8551 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8552 msm_routing_put_voice_stub_mixer),
8553 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8554 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8555 msm_routing_put_voice_stub_mixer),
8556 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8557 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8558 msm_routing_put_voice_stub_mixer),
8559 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8560 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8561 msm_routing_put_voice_stub_mixer),
8562 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8563 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8564 msm_routing_put_voice_stub_mixer),
8565 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8566 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8567 msm_routing_put_voice_stub_mixer),
8568};
8569
8570static const struct snd_kcontrol_new tx_qchat_mixer_controls[] = {
8571 SOC_SINGLE_EXT("PRI_TX_QCHAT", MSM_BACKEND_DAI_PRI_I2S_TX,
8572 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8573 msm_routing_put_voice_mixer),
8574 SOC_SINGLE_EXT("SLIM_0_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8575 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8576 msm_routing_put_voice_mixer),
8577 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_QCHAT",
8578 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_QCHAT, 1, 0,
8579 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8580 SOC_SINGLE_EXT("AFE_PCM_TX_QCHAT", MSM_BACKEND_DAI_AFE_PCM_TX,
8581 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8582 msm_routing_put_voice_mixer),
8583 SOC_SINGLE_EXT("AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_AUXPCM_TX,
8584 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8585 msm_routing_put_voice_mixer),
8586 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8587 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8588 msm_routing_put_voice_mixer),
8589 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8590 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8591 msm_routing_put_voice_mixer),
8592 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8593 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8594 msm_routing_put_voice_mixer),
8595 SOC_SINGLE_EXT("MI2S_TX_QCHAT", MSM_BACKEND_DAI_MI2S_TX,
8596 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8597 msm_routing_put_voice_mixer),
8598 SOC_SINGLE_EXT("PRI_MI2S_TX_QCHAT", MSM_BACKEND_DAI_PRI_MI2S_TX,
8599 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8600 msm_routing_put_voice_mixer),
8601 SOC_SINGLE_EXT("TERT_MI2S_TX_QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8602 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8603 msm_routing_put_voice_mixer),
8604 SOC_SINGLE_EXT("INT3_MI2S_TX_QCHAT", MSM_BACKEND_DAI_INT3_MI2S_TX,
8605 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8606 msm_routing_put_voice_mixer),
8607 SOC_SINGLE_EXT("SLIM_7_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8608 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8609 msm_routing_put_voice_mixer),
8610 SOC_SINGLE_EXT("SLIM_8_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8611 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8612 msm_routing_put_voice_mixer),
8613 SOC_SINGLE_EXT("USB_AUDIO_TX_QCHAT", MSM_BACKEND_DAI_USB_TX,
8614 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8615 msm_routing_put_voice_mixer),
8616};
8617
8618static const struct snd_kcontrol_new int0_mi2s_rx_port_mixer_controls[] = {
8619 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8620 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8621 msm_routing_put_port_mixer),
8622 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8623 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8624 msm_routing_put_port_mixer),
8625 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8626 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8627 msm_routing_put_port_mixer),
8628 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8629 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8630 msm_routing_put_port_mixer),
8631 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8632 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8633 msm_routing_put_port_mixer),
8634 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8635 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8636 msm_routing_put_port_mixer),
8637 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8638 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8639 msm_routing_put_port_mixer),
8640 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8641 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8642 msm_routing_put_port_mixer),
8643 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8644 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8645 msm_routing_put_port_mixer),
8646};
8647
8648static const struct snd_kcontrol_new int4_mi2s_rx_port_mixer_controls[] = {
8649 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8650 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8651 msm_routing_put_port_mixer),
8652 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8653 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8654 msm_routing_put_port_mixer),
8655 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8656 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8657 msm_routing_put_port_mixer),
8658 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8659 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8660 msm_routing_put_port_mixer),
8661 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8662 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8663 msm_routing_put_port_mixer),
8664 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8665 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8666 msm_routing_put_port_mixer),
8667 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8668 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8669 msm_routing_put_port_mixer),
8670 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8671 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8672 msm_routing_put_port_mixer),
8673 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8674 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8675 msm_routing_put_port_mixer),
8676};
8677
8678static const struct snd_kcontrol_new sbus_0_rx_port_mixer_controls[] = {
8679 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8680 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8681 msm_routing_put_port_mixer),
8682 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8683 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8684 msm_routing_put_port_mixer),
8685 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8686 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8687 msm_routing_put_port_mixer),
8688 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8689 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8690 msm_routing_put_port_mixer),
8691 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8692 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8693 msm_routing_put_port_mixer),
8694 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8695 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8696 msm_routing_put_port_mixer),
8697 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8698 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8699 msm_routing_put_port_mixer),
8700 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8701 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8702 msm_routing_put_port_mixer),
8703 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8704 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8705 msm_routing_put_port_mixer),
8706 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8707 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8708 msm_routing_put_port_mixer),
8709 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8710 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8711 msm_routing_put_port_mixer),
8712 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8713 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8714 msm_routing_put_port_mixer),
8715 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8716 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8717 msm_routing_put_port_mixer),
8718 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8719 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8720 msm_routing_put_port_mixer),
8721 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8722 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8723 msm_routing_put_port_mixer),
8724 SOC_SINGLE_EXT("PRI_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8725 MSM_BACKEND_DAI_PRI_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8726 msm_routing_put_port_mixer),
8727 SOC_SINGLE_EXT("SEC_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8728 MSM_BACKEND_DAI_SECONDARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8729 msm_routing_put_port_mixer),
8730 SOC_SINGLE_EXT("TERT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8731 MSM_BACKEND_DAI_TERTIARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8732 msm_routing_put_port_mixer),
8733 SOC_SINGLE_EXT("QUAT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8734 MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8735 msm_routing_put_port_mixer),
8736};
8737
8738static const struct snd_kcontrol_new aux_pcm_rx_port_mixer_controls[] = {
8739 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8740 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8741 msm_routing_put_port_mixer),
8742 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8743 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8744 msm_routing_put_port_mixer),
8745 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8746 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8747 msm_routing_put_port_mixer),
8748 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8749 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8750 msm_routing_put_port_mixer),
8751 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_AUXPCM_RX,
8752 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0, msm_routing_get_port_mixer,
8753 msm_routing_put_port_mixer),
8754};
8755
8756static const struct snd_kcontrol_new sec_auxpcm_rx_port_mixer_controls[] = {
8757 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8758 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8759 msm_routing_put_port_mixer),
8760 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8761 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8762 msm_routing_put_port_mixer),
8763 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8764 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8765 msm_routing_put_port_mixer),
8766};
8767
8768static const struct snd_kcontrol_new tert_auxpcm_rx_port_mixer_controls[] = {
8769 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8770 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8771 msm_routing_put_port_mixer),
8772 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8773 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8774 msm_routing_put_port_mixer),
8775 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8776 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8777 msm_routing_put_port_mixer),
8778};
8779
8780static const struct snd_kcontrol_new quat_auxpcm_rx_port_mixer_controls[] = {
8781 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8782 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8783 msm_routing_put_port_mixer),
8784 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8785 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8786 msm_routing_put_port_mixer),
8787 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8788 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8789 msm_routing_put_port_mixer),
8790};
8791
8792static const struct snd_kcontrol_new sbus_1_rx_port_mixer_controls[] = {
8793 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8794 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8795 msm_routing_put_port_mixer),
8796 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8797 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0, msm_routing_get_port_mixer,
8798 msm_routing_put_port_mixer),
8799 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8800 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8801 msm_routing_put_port_mixer),
8802 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8803 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8804 msm_routing_put_port_mixer),
8805 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8806 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8807 msm_routing_put_port_mixer),
8808 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8809 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8810 msm_routing_put_port_mixer),
8811};
8812
8813static const struct snd_kcontrol_new sbus_3_rx_port_mixer_controls[] = {
8814 SOC_SINGLE_EXT("INTERNAL_BT_SCO_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8815 MSM_BACKEND_DAI_INT_BT_SCO_RX, 1, 0, msm_routing_get_port_mixer,
8816 msm_routing_put_port_mixer),
8817 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8818 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8819 msm_routing_put_port_mixer),
8820 SOC_SINGLE_EXT("AFE_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8821 MSM_BACKEND_DAI_AFE_PCM_RX, 1, 0, msm_routing_get_port_mixer,
8822 msm_routing_put_port_mixer),
8823 SOC_SINGLE_EXT("AUX_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8824 MSM_BACKEND_DAI_AUXPCM_RX, 1, 0, msm_routing_get_port_mixer,
8825 msm_routing_put_port_mixer),
8826 SOC_SINGLE_EXT("SLIM_0_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8827 MSM_BACKEND_DAI_SLIMBUS_0_RX, 1, 0, msm_routing_get_port_mixer,
8828 msm_routing_put_port_mixer),
8829};
8830
8831static const struct snd_kcontrol_new sbus_6_rx_port_mixer_controls[] = {
8832 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8833 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8834 msm_routing_put_port_mixer),
8835 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8836 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8837 msm_routing_put_port_mixer),
8838 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8839 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8840 msm_routing_put_port_mixer),
8841 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8842 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8843 msm_routing_put_port_mixer),
8844 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8845 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8846 msm_routing_put_port_mixer),
8847 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8848 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8849 msm_routing_put_port_mixer),
8850 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8851 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8852 msm_routing_put_port_mixer),
8853 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8854 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8855 msm_routing_put_port_mixer),
8856 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8857 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8858 msm_routing_put_port_mixer),
8859 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8860 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8861 msm_routing_put_port_mixer),
8862 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8863 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8864 msm_routing_put_port_mixer),
8865 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8866 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8867 msm_routing_put_port_mixer),
8868};
8869
8870static const struct snd_kcontrol_new bt_sco_rx_port_mixer_controls[] = {
8871 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
8872 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8873 msm_routing_put_port_mixer),
8874 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
8875 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8876 msm_routing_put_port_mixer),
8877};
8878
8879static const struct snd_kcontrol_new afe_pcm_rx_port_mixer_controls[] = {
8880 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
8881 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8882 msm_routing_put_port_mixer),
8883 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
8884 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8885 msm_routing_put_port_mixer),
8886};
8887
8888
8889static const struct snd_kcontrol_new hdmi_rx_port_mixer_controls[] = {
8890 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_HDMI_RX,
8891 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8892 msm_routing_put_port_mixer),
8893};
8894
8895static const struct snd_kcontrol_new display_port_rx_port_mixer_controls[] = {
8896 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
8897 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8898 msm_routing_put_port_mixer),
8899};
8900
8901static const struct snd_kcontrol_new sec_i2s_rx_port_mixer_controls[] = {
8902 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SEC_I2S_RX,
8903 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8904 msm_routing_put_port_mixer),
8905};
8906
8907static const struct snd_kcontrol_new mi2s_rx_port_mixer_controls[] = {
8908 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_MI2S_RX,
8909 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8910 msm_routing_put_port_mixer),
8911 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_RX,
8912 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8913 msm_routing_put_port_mixer),
8914};
8915
8916static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = {
8917 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8918 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8919 msm_routing_put_port_mixer),
8920 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8921 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8922 msm_routing_put_port_mixer),
8923 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8924 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8925 msm_routing_put_port_mixer),
8926 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8927 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8928 msm_routing_put_port_mixer),
8929 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8930 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8931 msm_routing_put_port_mixer),
8932 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8933 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8934 msm_routing_put_port_mixer),
8935 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8936 MSM_BACKEND_DAI_QUINARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8937 msm_routing_put_port_mixer),
8938 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8939 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8940 msm_routing_put_port_mixer),
8941 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
8942 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8943 msm_routing_put_port_mixer),
8944};
8945
8946static const struct snd_kcontrol_new usb_rx_port_mixer_controls[] = {
8947 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_RX,
8948 MSM_BACKEND_DAI_USB_TX, 1, 0, msm_routing_get_port_mixer,
8949 msm_routing_put_port_mixer),
8950};
8951
8952static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = {
8953 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8954 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8955 msm_routing_put_port_mixer),
8956 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8957 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8958 msm_routing_put_port_mixer),
8959 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8960 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8961 msm_routing_put_port_mixer),
8962 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8963 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8964 msm_routing_put_port_mixer),
8965 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8966 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8967 msm_routing_put_port_mixer),
8968 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8969 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8970 msm_routing_put_port_mixer),
8971 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8972 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8973 msm_routing_put_port_mixer),
8974 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
8975 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8976 msm_routing_put_port_mixer),
8977};
8978
8979static const struct snd_kcontrol_new pri_tdm_rx_0_port_mixer_controls[] = {
8980 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
8981 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
8982 msm_routing_get_port_mixer,
8983 msm_routing_put_port_mixer),
8984 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
8985 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
8986 msm_routing_get_port_mixer,
8987 msm_routing_put_port_mixer),
8988 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
8989 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
8990 msm_routing_get_port_mixer,
8991 msm_routing_put_port_mixer),
8992 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
8993 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
8994 msm_routing_get_port_mixer,
8995 msm_routing_put_port_mixer),
8996 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
8997 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
8998 msm_routing_get_port_mixer,
8999 msm_routing_put_port_mixer),
9000 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9001 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9002 msm_routing_get_port_mixer,
9003 msm_routing_put_port_mixer),
9004 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9005 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9006 msm_routing_get_port_mixer,
9007 msm_routing_put_port_mixer),
9008 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9009 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9010 msm_routing_get_port_mixer,
9011 msm_routing_put_port_mixer),
9012 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9013 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9014 msm_routing_get_port_mixer,
9015 msm_routing_put_port_mixer),
9016 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9017 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9018 msm_routing_get_port_mixer,
9019 msm_routing_put_port_mixer),
9020 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9021 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9022 msm_routing_get_port_mixer,
9023 msm_routing_put_port_mixer),
9024 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9025 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9026 msm_routing_get_port_mixer,
9027 msm_routing_put_port_mixer),
9028 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9029 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9030 msm_routing_get_port_mixer,
9031 msm_routing_put_port_mixer),
9032 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9033 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9034 msm_routing_get_port_mixer,
9035 msm_routing_put_port_mixer),
9036 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9037 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9038 msm_routing_get_port_mixer,
9039 msm_routing_put_port_mixer),
9040 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9041 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9042 msm_routing_get_port_mixer,
9043 msm_routing_put_port_mixer),
9044};
9045
9046static const struct snd_kcontrol_new pri_tdm_rx_1_port_mixer_controls[] = {
9047 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9048 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9049 msm_routing_get_port_mixer,
9050 msm_routing_put_port_mixer),
9051 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9052 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9053 msm_routing_get_port_mixer,
9054 msm_routing_put_port_mixer),
9055 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9056 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9057 msm_routing_get_port_mixer,
9058 msm_routing_put_port_mixer),
9059 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9060 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9061 msm_routing_get_port_mixer,
9062 msm_routing_put_port_mixer),
9063 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9064 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9065 msm_routing_get_port_mixer,
9066 msm_routing_put_port_mixer),
9067 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9068 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9069 msm_routing_get_port_mixer,
9070 msm_routing_put_port_mixer),
9071 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9072 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9073 msm_routing_get_port_mixer,
9074 msm_routing_put_port_mixer),
9075 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9076 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9077 msm_routing_get_port_mixer,
9078 msm_routing_put_port_mixer),
9079 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9080 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9081 msm_routing_get_port_mixer,
9082 msm_routing_put_port_mixer),
9083 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9084 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9085 msm_routing_get_port_mixer,
9086 msm_routing_put_port_mixer),
9087 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9088 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9089 msm_routing_get_port_mixer,
9090 msm_routing_put_port_mixer),
9091 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9092 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9093 msm_routing_get_port_mixer,
9094 msm_routing_put_port_mixer),
9095 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9096 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9097 msm_routing_get_port_mixer,
9098 msm_routing_put_port_mixer),
9099 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9100 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9101 msm_routing_get_port_mixer,
9102 msm_routing_put_port_mixer),
9103 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9104 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9105 msm_routing_get_port_mixer,
9106 msm_routing_put_port_mixer),
9107 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9108 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9109 msm_routing_get_port_mixer,
9110 msm_routing_put_port_mixer),
9111};
9112
9113static const struct snd_kcontrol_new pri_tdm_rx_2_port_mixer_controls[] = {
9114 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9115 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9116 msm_routing_get_port_mixer,
9117 msm_routing_put_port_mixer),
9118 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9119 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9120 msm_routing_get_port_mixer,
9121 msm_routing_put_port_mixer),
9122 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9123 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9124 msm_routing_get_port_mixer,
9125 msm_routing_put_port_mixer),
9126 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9127 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9128 msm_routing_get_port_mixer,
9129 msm_routing_put_port_mixer),
9130 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9131 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9132 msm_routing_get_port_mixer,
9133 msm_routing_put_port_mixer),
9134 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9135 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9136 msm_routing_get_port_mixer,
9137 msm_routing_put_port_mixer),
9138 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9139 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9140 msm_routing_get_port_mixer,
9141 msm_routing_put_port_mixer),
9142 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9143 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9144 msm_routing_get_port_mixer,
9145 msm_routing_put_port_mixer),
9146 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9147 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9148 msm_routing_get_port_mixer,
9149 msm_routing_put_port_mixer),
9150 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9151 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9152 msm_routing_get_port_mixer,
9153 msm_routing_put_port_mixer),
9154 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9155 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9156 msm_routing_get_port_mixer,
9157 msm_routing_put_port_mixer),
9158 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9159 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9160 msm_routing_get_port_mixer,
9161 msm_routing_put_port_mixer),
9162 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9163 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9164 msm_routing_get_port_mixer,
9165 msm_routing_put_port_mixer),
9166 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9167 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9168 msm_routing_get_port_mixer,
9169 msm_routing_put_port_mixer),
9170 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9171 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9172 msm_routing_get_port_mixer,
9173 msm_routing_put_port_mixer),
9174 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9175 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9176 msm_routing_get_port_mixer,
9177 msm_routing_put_port_mixer),
9178};
9179
9180static const struct snd_kcontrol_new pri_tdm_rx_3_port_mixer_controls[] = {
9181 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9182 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9183 msm_routing_get_port_mixer,
9184 msm_routing_put_port_mixer),
9185 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9186 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9187 msm_routing_get_port_mixer,
9188 msm_routing_put_port_mixer),
9189 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9190 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9191 msm_routing_get_port_mixer,
9192 msm_routing_put_port_mixer),
9193 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9194 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9195 msm_routing_get_port_mixer,
9196 msm_routing_put_port_mixer),
9197 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9198 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9199 msm_routing_get_port_mixer,
9200 msm_routing_put_port_mixer),
9201 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9202 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9203 msm_routing_get_port_mixer,
9204 msm_routing_put_port_mixer),
9205 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9206 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9207 msm_routing_get_port_mixer,
9208 msm_routing_put_port_mixer),
9209 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9210 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9211 msm_routing_get_port_mixer,
9212 msm_routing_put_port_mixer),
9213 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9214 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9215 msm_routing_get_port_mixer,
9216 msm_routing_put_port_mixer),
9217 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9218 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9219 msm_routing_get_port_mixer,
9220 msm_routing_put_port_mixer),
9221 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9222 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9223 msm_routing_get_port_mixer,
9224 msm_routing_put_port_mixer),
9225 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9226 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9227 msm_routing_get_port_mixer,
9228 msm_routing_put_port_mixer),
9229 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9230 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9231 msm_routing_get_port_mixer,
9232 msm_routing_put_port_mixer),
9233 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9234 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9235 msm_routing_get_port_mixer,
9236 msm_routing_put_port_mixer),
9237 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9238 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9239 msm_routing_get_port_mixer,
9240 msm_routing_put_port_mixer),
9241 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9242 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9243 msm_routing_get_port_mixer,
9244 msm_routing_put_port_mixer),
9245};
9246
9247static const struct snd_kcontrol_new sec_tdm_rx_0_port_mixer_controls[] = {
9248 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9249 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9250 msm_routing_get_port_mixer,
9251 msm_routing_put_port_mixer),
9252 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9253 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9254 msm_routing_get_port_mixer,
9255 msm_routing_put_port_mixer),
9256 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9257 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9258 msm_routing_get_port_mixer,
9259 msm_routing_put_port_mixer),
9260 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9261 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9262 msm_routing_get_port_mixer,
9263 msm_routing_put_port_mixer),
9264 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9265 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9266 msm_routing_get_port_mixer,
9267 msm_routing_put_port_mixer),
9268 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9269 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9270 msm_routing_get_port_mixer,
9271 msm_routing_put_port_mixer),
9272 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9273 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9274 msm_routing_get_port_mixer,
9275 msm_routing_put_port_mixer),
9276 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9277 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9278 msm_routing_get_port_mixer,
9279 msm_routing_put_port_mixer),
9280 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9281 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9282 msm_routing_get_port_mixer,
9283 msm_routing_put_port_mixer),
9284 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9285 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9286 msm_routing_get_port_mixer,
9287 msm_routing_put_port_mixer),
9288 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9289 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9290 msm_routing_get_port_mixer,
9291 msm_routing_put_port_mixer),
9292 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9293 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9294 msm_routing_get_port_mixer,
9295 msm_routing_put_port_mixer),
9296 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9297 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9298 msm_routing_get_port_mixer,
9299 msm_routing_put_port_mixer),
9300 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9301 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9302 msm_routing_get_port_mixer,
9303 msm_routing_put_port_mixer),
9304 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9305 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9306 msm_routing_get_port_mixer,
9307 msm_routing_put_port_mixer),
9308 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9309 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9310 msm_routing_get_port_mixer,
9311 msm_routing_put_port_mixer),
9312};
9313
9314static const struct snd_kcontrol_new sec_tdm_rx_1_port_mixer_controls[] = {
9315 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9316 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9317 msm_routing_get_port_mixer,
9318 msm_routing_put_port_mixer),
9319 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9320 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9321 msm_routing_get_port_mixer,
9322 msm_routing_put_port_mixer),
9323 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9324 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9325 msm_routing_get_port_mixer,
9326 msm_routing_put_port_mixer),
9327 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9328 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9329 msm_routing_get_port_mixer,
9330 msm_routing_put_port_mixer),
9331 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9332 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9333 msm_routing_get_port_mixer,
9334 msm_routing_put_port_mixer),
9335 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9336 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9337 msm_routing_get_port_mixer,
9338 msm_routing_put_port_mixer),
9339 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9340 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9341 msm_routing_get_port_mixer,
9342 msm_routing_put_port_mixer),
9343 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9344 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9345 msm_routing_get_port_mixer,
9346 msm_routing_put_port_mixer),
9347 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9348 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9349 msm_routing_get_port_mixer,
9350 msm_routing_put_port_mixer),
9351 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9352 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9353 msm_routing_get_port_mixer,
9354 msm_routing_put_port_mixer),
9355 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9356 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9357 msm_routing_get_port_mixer,
9358 msm_routing_put_port_mixer),
9359 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9360 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9361 msm_routing_get_port_mixer,
9362 msm_routing_put_port_mixer),
9363 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9364 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9365 msm_routing_get_port_mixer,
9366 msm_routing_put_port_mixer),
9367 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9368 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9369 msm_routing_get_port_mixer,
9370 msm_routing_put_port_mixer),
9371 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9372 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9373 msm_routing_get_port_mixer,
9374 msm_routing_put_port_mixer),
9375 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9376 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9377 msm_routing_get_port_mixer,
9378 msm_routing_put_port_mixer),
9379};
9380
9381static const struct snd_kcontrol_new sec_tdm_rx_2_port_mixer_controls[] = {
9382 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9383 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9384 msm_routing_get_port_mixer,
9385 msm_routing_put_port_mixer),
9386 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9387 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9388 msm_routing_get_port_mixer,
9389 msm_routing_put_port_mixer),
9390 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9391 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9392 msm_routing_get_port_mixer,
9393 msm_routing_put_port_mixer),
9394 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9395 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9396 msm_routing_get_port_mixer,
9397 msm_routing_put_port_mixer),
9398 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9399 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9400 msm_routing_get_port_mixer,
9401 msm_routing_put_port_mixer),
9402 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9403 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9404 msm_routing_get_port_mixer,
9405 msm_routing_put_port_mixer),
9406 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9407 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9408 msm_routing_get_port_mixer,
9409 msm_routing_put_port_mixer),
9410 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9411 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9412 msm_routing_get_port_mixer,
9413 msm_routing_put_port_mixer),
9414 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9415 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9416 msm_routing_get_port_mixer,
9417 msm_routing_put_port_mixer),
9418 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9419 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9420 msm_routing_get_port_mixer,
9421 msm_routing_put_port_mixer),
9422 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9423 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9424 msm_routing_get_port_mixer,
9425 msm_routing_put_port_mixer),
9426 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9427 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9428 msm_routing_get_port_mixer,
9429 msm_routing_put_port_mixer),
9430 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9431 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9432 msm_routing_get_port_mixer,
9433 msm_routing_put_port_mixer),
9434 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9435 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9436 msm_routing_get_port_mixer,
9437 msm_routing_put_port_mixer),
9438 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9439 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9440 msm_routing_get_port_mixer,
9441 msm_routing_put_port_mixer),
9442 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9443 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9444 msm_routing_get_port_mixer,
9445 msm_routing_put_port_mixer),
9446};
9447
9448static const struct snd_kcontrol_new sec_tdm_rx_3_port_mixer_controls[] = {
9449 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9450 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9451 msm_routing_get_port_mixer,
9452 msm_routing_put_port_mixer),
9453 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9454 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9455 msm_routing_get_port_mixer,
9456 msm_routing_put_port_mixer),
9457 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9458 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9459 msm_routing_get_port_mixer,
9460 msm_routing_put_port_mixer),
9461 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9462 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9463 msm_routing_get_port_mixer,
9464 msm_routing_put_port_mixer),
9465 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9466 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9467 msm_routing_get_port_mixer,
9468 msm_routing_put_port_mixer),
9469 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9470 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9471 msm_routing_get_port_mixer,
9472 msm_routing_put_port_mixer),
9473 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9474 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9475 msm_routing_get_port_mixer,
9476 msm_routing_put_port_mixer),
9477 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9478 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9479 msm_routing_get_port_mixer,
9480 msm_routing_put_port_mixer),
9481 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9482 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9483 msm_routing_get_port_mixer,
9484 msm_routing_put_port_mixer),
9485 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9486 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9487 msm_routing_get_port_mixer,
9488 msm_routing_put_port_mixer),
9489 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9490 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9491 msm_routing_get_port_mixer,
9492 msm_routing_put_port_mixer),
9493 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9494 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9495 msm_routing_get_port_mixer,
9496 msm_routing_put_port_mixer),
9497 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9498 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9499 msm_routing_get_port_mixer,
9500 msm_routing_put_port_mixer),
9501 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9502 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9503 msm_routing_get_port_mixer,
9504 msm_routing_put_port_mixer),
9505 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9506 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9507 msm_routing_get_port_mixer,
9508 msm_routing_put_port_mixer),
9509 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9510 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9511 msm_routing_get_port_mixer,
9512 msm_routing_put_port_mixer),
9513};
9514
9515static const struct snd_kcontrol_new tert_tdm_rx_0_port_mixer_controls[] = {
9516 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9517 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9518 msm_routing_get_port_mixer,
9519 msm_routing_put_port_mixer),
9520 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9521 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9522 msm_routing_get_port_mixer,
9523 msm_routing_put_port_mixer),
9524 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9525 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9526 msm_routing_get_port_mixer,
9527 msm_routing_put_port_mixer),
9528 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9529 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9530 msm_routing_get_port_mixer,
9531 msm_routing_put_port_mixer),
9532 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9533 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9534 msm_routing_get_port_mixer,
9535 msm_routing_put_port_mixer),
9536 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9537 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9538 msm_routing_get_port_mixer,
9539 msm_routing_put_port_mixer),
9540 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9541 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9542 msm_routing_get_port_mixer,
9543 msm_routing_put_port_mixer),
9544 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9545 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9546 msm_routing_get_port_mixer,
9547 msm_routing_put_port_mixer),
9548 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9549 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9550 msm_routing_get_port_mixer,
9551 msm_routing_put_port_mixer),
9552 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9553 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9554 msm_routing_get_port_mixer,
9555 msm_routing_put_port_mixer),
9556 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9557 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9558 msm_routing_get_port_mixer,
9559 msm_routing_put_port_mixer),
9560 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9561 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9562 msm_routing_get_port_mixer,
9563 msm_routing_put_port_mixer),
9564 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9565 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9566 msm_routing_get_port_mixer,
9567 msm_routing_put_port_mixer),
9568 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9569 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9570 msm_routing_get_port_mixer,
9571 msm_routing_put_port_mixer),
9572 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9573 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9574 msm_routing_get_port_mixer,
9575 msm_routing_put_port_mixer),
9576 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9577 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9578 msm_routing_get_port_mixer,
9579 msm_routing_put_port_mixer),
9580};
9581
9582static const struct snd_kcontrol_new tert_tdm_rx_1_port_mixer_controls[] = {
9583 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9584 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9585 msm_routing_get_port_mixer,
9586 msm_routing_put_port_mixer),
9587 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9588 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9589 msm_routing_get_port_mixer,
9590 msm_routing_put_port_mixer),
9591 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9592 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9593 msm_routing_get_port_mixer,
9594 msm_routing_put_port_mixer),
9595 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9596 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9597 msm_routing_get_port_mixer,
9598 msm_routing_put_port_mixer),
9599 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9600 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9601 msm_routing_get_port_mixer,
9602 msm_routing_put_port_mixer),
9603 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9604 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9605 msm_routing_get_port_mixer,
9606 msm_routing_put_port_mixer),
9607 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9608 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9609 msm_routing_get_port_mixer,
9610 msm_routing_put_port_mixer),
9611 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9612 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9613 msm_routing_get_port_mixer,
9614 msm_routing_put_port_mixer),
9615 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9616 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9617 msm_routing_get_port_mixer,
9618 msm_routing_put_port_mixer),
9619 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9620 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9621 msm_routing_get_port_mixer,
9622 msm_routing_put_port_mixer),
9623 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9624 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9625 msm_routing_get_port_mixer,
9626 msm_routing_put_port_mixer),
9627 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9628 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9629 msm_routing_get_port_mixer,
9630 msm_routing_put_port_mixer),
9631 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9632 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9633 msm_routing_get_port_mixer,
9634 msm_routing_put_port_mixer),
9635 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9636 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9637 msm_routing_get_port_mixer,
9638 msm_routing_put_port_mixer),
9639 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9640 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9641 msm_routing_get_port_mixer,
9642 msm_routing_put_port_mixer),
9643 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9644 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9645 msm_routing_get_port_mixer,
9646 msm_routing_put_port_mixer),
9647};
9648
9649static const struct snd_kcontrol_new tert_tdm_rx_2_port_mixer_controls[] = {
9650 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9651 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9652 msm_routing_get_port_mixer,
9653 msm_routing_put_port_mixer),
9654 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9655 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9656 msm_routing_get_port_mixer,
9657 msm_routing_put_port_mixer),
9658 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9659 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9660 msm_routing_get_port_mixer,
9661 msm_routing_put_port_mixer),
9662 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9663 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9664 msm_routing_get_port_mixer,
9665 msm_routing_put_port_mixer),
9666 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9667 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9668 msm_routing_get_port_mixer,
9669 msm_routing_put_port_mixer),
9670 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9671 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9672 msm_routing_get_port_mixer,
9673 msm_routing_put_port_mixer),
9674 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9675 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9676 msm_routing_get_port_mixer,
9677 msm_routing_put_port_mixer),
9678 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9679 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9680 msm_routing_get_port_mixer,
9681 msm_routing_put_port_mixer),
9682 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9683 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9684 msm_routing_get_port_mixer,
9685 msm_routing_put_port_mixer),
9686 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9687 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9688 msm_routing_get_port_mixer,
9689 msm_routing_put_port_mixer),
9690 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9691 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9692 msm_routing_get_port_mixer,
9693 msm_routing_put_port_mixer),
9694 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9695 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9696 msm_routing_get_port_mixer,
9697 msm_routing_put_port_mixer),
9698 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9699 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9700 msm_routing_get_port_mixer,
9701 msm_routing_put_port_mixer),
9702 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9703 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9704 msm_routing_get_port_mixer,
9705 msm_routing_put_port_mixer),
9706 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9707 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9708 msm_routing_get_port_mixer,
9709 msm_routing_put_port_mixer),
9710 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9711 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9712 msm_routing_get_port_mixer,
9713 msm_routing_put_port_mixer),
9714};
9715
9716static const struct snd_kcontrol_new tert_tdm_rx_3_port_mixer_controls[] = {
9717 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9718 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9719 msm_routing_get_port_mixer,
9720 msm_routing_put_port_mixer),
9721 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9722 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9723 msm_routing_get_port_mixer,
9724 msm_routing_put_port_mixer),
9725 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9726 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9727 msm_routing_get_port_mixer,
9728 msm_routing_put_port_mixer),
9729 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9730 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9731 msm_routing_get_port_mixer,
9732 msm_routing_put_port_mixer),
9733 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9734 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9735 msm_routing_get_port_mixer,
9736 msm_routing_put_port_mixer),
9737 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9738 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9739 msm_routing_get_port_mixer,
9740 msm_routing_put_port_mixer),
9741 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9742 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9743 msm_routing_get_port_mixer,
9744 msm_routing_put_port_mixer),
9745 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9746 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9747 msm_routing_get_port_mixer,
9748 msm_routing_put_port_mixer),
9749 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9750 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9751 msm_routing_get_port_mixer,
9752 msm_routing_put_port_mixer),
9753 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9754 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9755 msm_routing_get_port_mixer,
9756 msm_routing_put_port_mixer),
9757 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9758 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9759 msm_routing_get_port_mixer,
9760 msm_routing_put_port_mixer),
9761 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9762 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9763 msm_routing_get_port_mixer,
9764 msm_routing_put_port_mixer),
9765 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9766 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9767 msm_routing_get_port_mixer,
9768 msm_routing_put_port_mixer),
9769 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9770 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9771 msm_routing_get_port_mixer,
9772 msm_routing_put_port_mixer),
9773 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9774 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9775 msm_routing_get_port_mixer,
9776 msm_routing_put_port_mixer),
9777 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9778 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9779 msm_routing_get_port_mixer,
9780 msm_routing_put_port_mixer),
9781};
9782
9783static const struct snd_kcontrol_new quat_tdm_rx_0_port_mixer_controls[] = {
9784 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9785 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9786 msm_routing_get_port_mixer,
9787 msm_routing_put_port_mixer),
9788 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9789 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9790 msm_routing_get_port_mixer,
9791 msm_routing_put_port_mixer),
9792 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9793 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9794 msm_routing_get_port_mixer,
9795 msm_routing_put_port_mixer),
9796 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9797 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9798 msm_routing_get_port_mixer,
9799 msm_routing_put_port_mixer),
9800 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9801 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9802 msm_routing_get_port_mixer,
9803 msm_routing_put_port_mixer),
9804 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9805 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9806 msm_routing_get_port_mixer,
9807 msm_routing_put_port_mixer),
9808 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9809 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9810 msm_routing_get_port_mixer,
9811 msm_routing_put_port_mixer),
9812 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9813 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9814 msm_routing_get_port_mixer,
9815 msm_routing_put_port_mixer),
9816 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9817 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9818 msm_routing_get_port_mixer,
9819 msm_routing_put_port_mixer),
9820 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9821 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9822 msm_routing_get_port_mixer,
9823 msm_routing_put_port_mixer),
9824 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9825 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9826 msm_routing_get_port_mixer,
9827 msm_routing_put_port_mixer),
9828 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9829 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9830 msm_routing_get_port_mixer,
9831 msm_routing_put_port_mixer),
9832 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9833 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9834 msm_routing_get_port_mixer,
9835 msm_routing_put_port_mixer),
9836 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9837 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9838 msm_routing_get_port_mixer,
9839 msm_routing_put_port_mixer),
9840 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9841 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9842 msm_routing_get_port_mixer,
9843 msm_routing_put_port_mixer),
9844 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9845 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9846 msm_routing_get_port_mixer,
9847 msm_routing_put_port_mixer),
9848};
9849
9850static const struct snd_kcontrol_new quat_tdm_rx_1_port_mixer_controls[] = {
9851 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9852 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9853 msm_routing_get_port_mixer,
9854 msm_routing_put_port_mixer),
9855 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9856 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9857 msm_routing_get_port_mixer,
9858 msm_routing_put_port_mixer),
9859 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9860 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9861 msm_routing_get_port_mixer,
9862 msm_routing_put_port_mixer),
9863 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9864 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9865 msm_routing_get_port_mixer,
9866 msm_routing_put_port_mixer),
9867 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9868 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9869 msm_routing_get_port_mixer,
9870 msm_routing_put_port_mixer),
9871 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9872 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9873 msm_routing_get_port_mixer,
9874 msm_routing_put_port_mixer),
9875 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9876 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9877 msm_routing_get_port_mixer,
9878 msm_routing_put_port_mixer),
9879 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9880 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9881 msm_routing_get_port_mixer,
9882 msm_routing_put_port_mixer),
9883 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9884 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9885 msm_routing_get_port_mixer,
9886 msm_routing_put_port_mixer),
9887 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9888 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9889 msm_routing_get_port_mixer,
9890 msm_routing_put_port_mixer),
9891 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9892 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9893 msm_routing_get_port_mixer,
9894 msm_routing_put_port_mixer),
9895 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9896 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9897 msm_routing_get_port_mixer,
9898 msm_routing_put_port_mixer),
9899 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9900 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9901 msm_routing_get_port_mixer,
9902 msm_routing_put_port_mixer),
9903 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9904 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9905 msm_routing_get_port_mixer,
9906 msm_routing_put_port_mixer),
9907 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9908 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9909 msm_routing_get_port_mixer,
9910 msm_routing_put_port_mixer),
9911 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
9912 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9913 msm_routing_get_port_mixer,
9914 msm_routing_put_port_mixer),
9915};
9916
9917static const struct snd_kcontrol_new quat_tdm_rx_2_port_mixer_controls[] = {
9918 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9919 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9920 msm_routing_get_port_mixer,
9921 msm_routing_put_port_mixer),
9922 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9923 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9924 msm_routing_get_port_mixer,
9925 msm_routing_put_port_mixer),
9926 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9927 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9928 msm_routing_get_port_mixer,
9929 msm_routing_put_port_mixer),
9930 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9931 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9932 msm_routing_get_port_mixer,
9933 msm_routing_put_port_mixer),
9934 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9935 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9936 msm_routing_get_port_mixer,
9937 msm_routing_put_port_mixer),
9938 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9939 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9940 msm_routing_get_port_mixer,
9941 msm_routing_put_port_mixer),
9942 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9943 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9944 msm_routing_get_port_mixer,
9945 msm_routing_put_port_mixer),
9946 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9947 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9948 msm_routing_get_port_mixer,
9949 msm_routing_put_port_mixer),
9950 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9951 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9952 msm_routing_get_port_mixer,
9953 msm_routing_put_port_mixer),
9954 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9955 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9956 msm_routing_get_port_mixer,
9957 msm_routing_put_port_mixer),
9958 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9959 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9960 msm_routing_get_port_mixer,
9961 msm_routing_put_port_mixer),
9962 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9963 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9964 msm_routing_get_port_mixer,
9965 msm_routing_put_port_mixer),
9966 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9967 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9968 msm_routing_get_port_mixer,
9969 msm_routing_put_port_mixer),
9970 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9971 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9972 msm_routing_get_port_mixer,
9973 msm_routing_put_port_mixer),
9974 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9975 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9976 msm_routing_get_port_mixer,
9977 msm_routing_put_port_mixer),
9978 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
9979 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9980 msm_routing_get_port_mixer,
9981 msm_routing_put_port_mixer),
9982};
9983
9984static const struct snd_kcontrol_new quat_tdm_rx_3_port_mixer_controls[] = {
9985 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
9986 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9987 msm_routing_get_port_mixer,
9988 msm_routing_put_port_mixer),
9989 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
9990 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9991 msm_routing_get_port_mixer,
9992 msm_routing_put_port_mixer),
9993 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
9994 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9995 msm_routing_get_port_mixer,
9996 msm_routing_put_port_mixer),
9997 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
9998 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9999 msm_routing_get_port_mixer,
10000 msm_routing_put_port_mixer),
10001 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10002 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10003 msm_routing_get_port_mixer,
10004 msm_routing_put_port_mixer),
10005 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10006 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10007 msm_routing_get_port_mixer,
10008 msm_routing_put_port_mixer),
10009 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10010 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10011 msm_routing_get_port_mixer,
10012 msm_routing_put_port_mixer),
10013 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10014 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10015 msm_routing_get_port_mixer,
10016 msm_routing_put_port_mixer),
10017 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10018 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10019 msm_routing_get_port_mixer,
10020 msm_routing_put_port_mixer),
10021 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10022 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10023 msm_routing_get_port_mixer,
10024 msm_routing_put_port_mixer),
10025 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10026 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10027 msm_routing_get_port_mixer,
10028 msm_routing_put_port_mixer),
10029 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10030 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10031 msm_routing_get_port_mixer,
10032 msm_routing_put_port_mixer),
10033 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10034 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10035 msm_routing_get_port_mixer,
10036 msm_routing_put_port_mixer),
10037 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10038 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10039 msm_routing_get_port_mixer,
10040 msm_routing_put_port_mixer),
10041 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10042 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10043 msm_routing_get_port_mixer,
10044 msm_routing_put_port_mixer),
10045 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10046 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10047 msm_routing_get_port_mixer,
10048 msm_routing_put_port_mixer),
10049};
10050
10051static const struct snd_kcontrol_new tert_mi2s_rx_port_mixer_controls[] = {
10052 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10053 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10054 msm_routing_put_port_mixer),
10055 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10056 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10057 msm_routing_put_port_mixer),
10058 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10059 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
10060 msm_routing_put_port_mixer),
10061 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10062 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10063 msm_routing_put_port_mixer),
10064 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10065 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10066 msm_routing_put_port_mixer),
10067 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10068 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10069 msm_routing_put_port_mixer),
10070};
10071
10072static const struct snd_kcontrol_new sec_mi2s_rx_port_mixer_controls[] = {
10073 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10074 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10075 msm_routing_put_port_mixer),
10076 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10077 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10078 msm_routing_put_port_mixer),
10079 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10080 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10081 msm_routing_put_port_mixer),
10082 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10083 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10084 msm_routing_put_port_mixer),
10085 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10086 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
10087 msm_routing_put_port_mixer),
10088 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10089 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
10090 msm_routing_put_port_mixer),
10091 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10092 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10093 msm_routing_put_port_mixer),
10094};
10095
10096static const struct snd_kcontrol_new lsm1_mixer_controls[] = {
10097 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10098 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10099 msm_routing_put_listen_mixer),
10100 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10101 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10102 msm_routing_put_listen_mixer),
10103 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10104 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10105 msm_routing_put_listen_mixer),
10106 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10107 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10108 msm_routing_put_listen_mixer),
10109 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10110 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10111 msm_routing_put_listen_mixer),
10112 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10113 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10114 msm_routing_put_listen_mixer),
10115 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10116 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10117 msm_routing_put_listen_mixer),
10118 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10119 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10120 msm_routing_put_listen_mixer),
10121};
10122
10123static const struct snd_kcontrol_new lsm2_mixer_controls[] = {
10124 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10125 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10126 msm_routing_put_listen_mixer),
10127 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10128 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10129 msm_routing_put_listen_mixer),
10130 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10131 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10132 msm_routing_put_listen_mixer),
10133 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10134 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10135 msm_routing_put_listen_mixer),
10136 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10137 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10138 msm_routing_put_listen_mixer),
10139 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10140 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10141 msm_routing_put_listen_mixer),
10142 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10143 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10144 msm_routing_put_listen_mixer),
10145 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10146 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10147 msm_routing_put_listen_mixer),
10148};
10149
10150static const struct snd_kcontrol_new lsm3_mixer_controls[] = {
10151 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10152 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10153 msm_routing_put_listen_mixer),
10154 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10155 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10156 msm_routing_put_listen_mixer),
10157 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10158 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10159 msm_routing_put_listen_mixer),
10160 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10161 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10162 msm_routing_put_listen_mixer),
10163 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10164 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10165 msm_routing_put_listen_mixer),
10166 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10167 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10168 msm_routing_put_listen_mixer),
10169 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10170 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10171 msm_routing_put_listen_mixer),
10172 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10173 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10174 msm_routing_put_listen_mixer),
10175};
10176
10177static const struct snd_kcontrol_new lsm4_mixer_controls[] = {
10178 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10179 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10180 msm_routing_put_listen_mixer),
10181 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10182 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10183 msm_routing_put_listen_mixer),
10184 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10185 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10186 msm_routing_put_listen_mixer),
10187 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10188 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10189 msm_routing_put_listen_mixer),
10190 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10191 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10192 msm_routing_put_listen_mixer),
10193 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10194 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10195 msm_routing_put_listen_mixer),
10196 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10197 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10198 msm_routing_put_listen_mixer),
10199 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10200 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10201 msm_routing_put_listen_mixer),
10202};
10203
10204static const struct snd_kcontrol_new lsm5_mixer_controls[] = {
10205 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10206 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10207 msm_routing_put_listen_mixer),
10208 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10209 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10210 msm_routing_put_listen_mixer),
10211 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10212 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10213 msm_routing_put_listen_mixer),
10214 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10215 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10216 msm_routing_put_listen_mixer),
10217 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10218 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10219 msm_routing_put_listen_mixer),
10220 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10221 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10222 msm_routing_put_listen_mixer),
10223 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10224 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10225 msm_routing_put_listen_mixer),
10226 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10227 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10228 msm_routing_put_listen_mixer),
10229};
10230
10231static const struct snd_kcontrol_new lsm6_mixer_controls[] = {
10232 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10233 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10234 msm_routing_put_listen_mixer),
10235 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10236 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10237 msm_routing_put_listen_mixer),
10238 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10239 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10240 msm_routing_put_listen_mixer),
10241 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10242 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10243 msm_routing_put_listen_mixer),
10244 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10245 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10246 msm_routing_put_listen_mixer),
10247 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10248 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10249 msm_routing_put_listen_mixer),
10250 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10251 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10252 msm_routing_put_listen_mixer),
10253 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10254 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10255 msm_routing_put_listen_mixer),
10256};
10257
10258static const struct snd_kcontrol_new lsm7_mixer_controls[] = {
10259 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10260 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10261 msm_routing_put_listen_mixer),
10262 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10263 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10264 msm_routing_put_listen_mixer),
10265 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10266 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10267 msm_routing_put_listen_mixer),
10268 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10269 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10270 msm_routing_put_listen_mixer),
10271 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10272 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10273 msm_routing_put_listen_mixer),
10274 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10275 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10276 msm_routing_put_listen_mixer),
10277 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10278 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10279 msm_routing_put_listen_mixer),
10280 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10281 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10282 msm_routing_put_listen_mixer),
10283};
10284
10285static const struct snd_kcontrol_new lsm8_mixer_controls[] = {
10286 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10287 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10288 msm_routing_put_listen_mixer),
10289 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10290 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10291 msm_routing_put_listen_mixer),
10292 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10293 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10294 msm_routing_put_listen_mixer),
10295 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10296 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10297 msm_routing_put_listen_mixer),
10298 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10299 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10300 msm_routing_put_listen_mixer),
10301 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10302 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10303 msm_routing_put_listen_mixer),
10304 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10305 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10306 msm_routing_put_listen_mixer),
10307 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10308 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10309 msm_routing_put_listen_mixer),
10310};
10311
10312static const struct snd_kcontrol_new slim_fm_switch_mixer_controls =
10313 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10314 0, 1, 0, msm_routing_get_switch_mixer,
10315 msm_routing_put_switch_mixer);
10316
10317static const struct snd_kcontrol_new slim1_fm_switch_mixer_controls =
10318 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10319 0, 1, 0, msm_routing_get_switch_mixer,
10320 msm_routing_put_switch_mixer);
10321
10322static const struct snd_kcontrol_new slim3_fm_switch_mixer_controls =
10323 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10324 0, 1, 0, msm_routing_get_switch_mixer,
10325 msm_routing_put_switch_mixer);
10326
10327static const struct snd_kcontrol_new slim4_fm_switch_mixer_controls =
10328 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10329 0, 1, 0, msm_routing_get_switch_mixer,
10330 msm_routing_put_switch_mixer);
10331
10332static const struct snd_kcontrol_new slim6_fm_switch_mixer_controls =
10333 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10334 0, 1, 0, msm_routing_get_switch_mixer,
10335 msm_routing_put_switch_mixer);
10336
10337static const struct snd_kcontrol_new pcm_rx_switch_mixer_controls =
10338 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10339 0, 1, 0, msm_routing_get_fm_pcmrx_switch_mixer,
10340 msm_routing_put_fm_pcmrx_switch_mixer);
10341
10342static const struct snd_kcontrol_new int0_mi2s_rx_switch_mixer_controls =
10343 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10344 0, 1, 0, msm_routing_get_int0_mi2s_switch_mixer,
10345 msm_routing_put_int0_mi2s_switch_mixer);
10346
10347static const struct snd_kcontrol_new int4_mi2s_rx_switch_mixer_controls =
10348 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10349 0, 1, 0, msm_routing_get_int4_mi2s_switch_mixer,
10350 msm_routing_put_int4_mi2s_switch_mixer);
10351
10352static const struct snd_kcontrol_new pri_mi2s_rx_switch_mixer_controls =
10353 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10354 0, 1, 0, msm_routing_get_pri_mi2s_switch_mixer,
10355 msm_routing_put_pri_mi2s_switch_mixer);
10356
10357static const struct snd_kcontrol_new sec_mi2s_rx_switch_mixer_controls =
10358 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10359 0, 1, 0, msm_routing_get_sec_mi2s_switch_mixer,
10360 msm_routing_put_sec_mi2s_switch_mixer);
10361
10362static const struct snd_kcontrol_new tert_mi2s_rx_switch_mixer_controls =
10363 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10364 0, 1, 0, msm_routing_get_tert_mi2s_switch_mixer,
10365 msm_routing_put_tert_mi2s_switch_mixer);
10366
10367static const struct snd_kcontrol_new quat_mi2s_rx_switch_mixer_controls =
10368 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10369 0, 1, 0, msm_routing_get_quat_mi2s_switch_mixer,
10370 msm_routing_put_quat_mi2s_switch_mixer);
10371
10372static const struct snd_kcontrol_new hfp_pri_aux_switch_mixer_controls =
10373 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10374 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10375 msm_routing_put_hfp_switch_mixer);
10376
10377static const struct snd_kcontrol_new hfp_aux_switch_mixer_controls =
10378 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10379 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10380 msm_routing_put_hfp_switch_mixer);
10381
10382static const struct snd_kcontrol_new hfp_int_switch_mixer_controls =
10383 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10384 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10385 msm_routing_put_hfp_switch_mixer);
10386
10387static const struct snd_kcontrol_new hfp_slim7_switch_mixer_controls =
10388 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10389 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10390 msm_routing_put_hfp_switch_mixer);
10391
10392static const struct snd_kcontrol_new usb_switch_mixer_controls =
10393 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10394 0, 1, 0, msm_routing_get_usb_switch_mixer,
10395 msm_routing_put_usb_switch_mixer);
10396
10397static const struct soc_enum lsm_port_enum =
10398 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_port_text), lsm_port_text);
10399
10400static const char * const lsm_func_text[] = {
10401 "None", "AUDIO", "BEACON", "ULTRASOUND", "SWAUDIO",
10402};
10403static const struct soc_enum lsm_func_enum =
10404 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_func_text), lsm_func_text);
10405
10406static const struct snd_kcontrol_new lsm_controls[] = {
10407 /* kcontrol of lsm_function */
10408 SOC_ENUM_EXT(SLIMBUS_0_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10409 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10410 SOC_ENUM_EXT(SLIMBUS_1_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10411 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10412 SOC_ENUM_EXT(SLIMBUS_2_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10413 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10414 SOC_ENUM_EXT(SLIMBUS_3_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10415 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10416 SOC_ENUM_EXT(SLIMBUS_4_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10417 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10418 SOC_ENUM_EXT(SLIMBUS_5_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10419 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10420 SOC_ENUM_EXT(TERT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10421 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10422 SOC_ENUM_EXT(QUAT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10423 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10424 SOC_ENUM_EXT(INT3_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10425 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10426 /* kcontrol of lsm_port */
10427 SOC_ENUM_EXT("LSM1 Port", lsm_port_enum,
10428 msm_routing_lsm_port_get,
10429 msm_routing_lsm_port_put),
10430 SOC_ENUM_EXT("LSM2 Port", lsm_port_enum,
10431 msm_routing_lsm_port_get,
10432 msm_routing_lsm_port_put),
10433 SOC_ENUM_EXT("LSM3 Port", lsm_port_enum,
10434 msm_routing_lsm_port_get,
10435 msm_routing_lsm_port_put),
10436 SOC_ENUM_EXT("LSM4 Port", lsm_port_enum,
10437 msm_routing_lsm_port_get,
10438 msm_routing_lsm_port_put),
10439 SOC_ENUM_EXT("LSM5 Port", lsm_port_enum,
10440 msm_routing_lsm_port_get,
10441 msm_routing_lsm_port_put),
10442 SOC_ENUM_EXT("LSM6 Port", lsm_port_enum,
10443 msm_routing_lsm_port_get,
10444 msm_routing_lsm_port_put),
10445 SOC_ENUM_EXT("LSM7 Port", lsm_port_enum,
10446 msm_routing_lsm_port_get,
10447 msm_routing_lsm_port_put),
10448 SOC_ENUM_EXT("LSM8 Port", lsm_port_enum,
10449 msm_routing_lsm_port_get,
10450 msm_routing_lsm_port_put),
10451};
10452
10453static const char * const aanc_slim_0_rx_text[] = {
10454 "ZERO", "SLIMBUS_0_TX", "SLIMBUS_1_TX", "SLIMBUS_2_TX", "SLIMBUS_3_TX",
10455 "SLIMBUS_4_TX", "SLIMBUS_5_TX", "SLIMBUS_6_TX"
10456};
10457
10458static const struct soc_enum aanc_slim_0_rx_enum =
10459 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(aanc_slim_0_rx_text),
10460 aanc_slim_0_rx_text);
10461
10462static const struct snd_kcontrol_new aanc_slim_0_rx_mux[] = {
10463 SOC_ENUM_EXT("AANC_SLIM_0_RX MUX", aanc_slim_0_rx_enum,
10464 msm_routing_slim_0_rx_aanc_mux_get,
10465 msm_routing_slim_0_rx_aanc_mux_put)
10466};
10467
10468static int msm_routing_get_stereo_to_custom_stereo_control(
10469 struct snd_kcontrol *kcontrol,
10470 struct snd_ctl_elem_value *ucontrol)
10471{
10472 ucontrol->value.integer.value[0] = is_custom_stereo_on;
10473 return 0;
10474}
10475
10476static int msm_routing_put_stereo_to_custom_stereo_control(
10477 struct snd_kcontrol *kcontrol,
10478 struct snd_ctl_elem_value *ucontrol)
10479{
10480 int flag = 0, i = 0, rc = 0, idx = 0;
10481 int be_index = 0, port_id, topo_id;
10482 unsigned int session_id = 0;
10483 uint16_t op_FL_ip_FL_weight = 0;
10484 uint16_t op_FL_ip_FR_weight = 0;
10485 uint16_t op_FR_ip_FL_weight = 0;
10486 uint16_t op_FR_ip_FR_weight = 0;
10487
10488 flag = ucontrol->value.integer.value[0];
10489 pr_debug("%s E flag %d\n", __func__, flag);
10490
10491 if ((is_custom_stereo_on && flag) || (!is_custom_stereo_on && !flag)) {
10492 pr_err("%s: is_custom_stereo_on %d, flag %d\n",
10493 __func__, is_custom_stereo_on, flag);
10494 return 0;
10495 }
10496 is_custom_stereo_on = flag ? true : false;
10497 pr_debug("%s:is_custom_stereo_on %d\n", __func__, is_custom_stereo_on);
10498 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
10499 port_id = msm_bedais[be_index].port_id;
10500 if (!msm_bedais[be_index].active)
10501 continue;
10502 if ((port_id != SLIMBUS_0_RX) &&
10503 (port_id != RT_PROXY_PORT_001_RX) &&
10504 (port_id != AFE_PORT_ID_PRIMARY_MI2S_RX) &&
10505 (port_id != AFE_PORT_ID_INT4_MI2S_RX))
10506 continue;
10507
10508 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
10509 MSM_FRONTEND_DAI_MM_SIZE) {
10510 if (fe_dai_map[i][SESSION_TYPE_RX].perf_mode !=
10511 LEGACY_PCM_MODE)
10512 goto skip_send_custom_stereo;
10513 session_id =
10514 fe_dai_map[i][SESSION_TYPE_RX].strm_id;
10515 if (is_custom_stereo_on) {
10516 op_FL_ip_FL_weight =
10517 Q14_GAIN_ZERO_POINT_FIVE;
10518 op_FL_ip_FR_weight =
10519 Q14_GAIN_ZERO_POINT_FIVE;
10520 op_FR_ip_FL_weight =
10521 Q14_GAIN_ZERO_POINT_FIVE;
10522 op_FR_ip_FR_weight =
10523 Q14_GAIN_ZERO_POINT_FIVE;
10524 } else {
10525 op_FL_ip_FL_weight = Q14_GAIN_UNITY;
10526 op_FL_ip_FR_weight = 0;
10527 op_FR_ip_FL_weight = 0;
10528 op_FR_ip_FR_weight = Q14_GAIN_UNITY;
10529 }
10530 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
10531 unsigned long copp =
10532 session_copp_map[i]
10533 [SESSION_TYPE_RX][be_index];
10534 if (!test_bit(idx, &copp))
10535 goto skip_send_custom_stereo;
10536 topo_id = adm_get_topology_for_port_copp_idx(
10537 msm_bedais[be_index].port_id, idx);
10538 if (topo_id < 0)
10539 pr_debug("%s:Err:custom stereo topo %d",
10540 __func__, topo_id);
10541 pr_debug("idx %d\n", idx);
10542 if (topo_id == DS2_ADM_COPP_TOPOLOGY_ID)
10543 rc = msm_ds2_dap_set_custom_stereo_onoff
10544 (msm_bedais[be_index].port_id,
10545 idx, is_custom_stereo_on);
10546 else if (topo_id == DOLBY_ADM_COPP_TOPOLOGY_ID)
10547 rc = dolby_dap_set_custom_stereo_onoff(
10548 msm_bedais[be_index].port_id,
10549 idx, is_custom_stereo_on);
10550 else
10551 rc = msm_qti_pp_send_stereo_to_custom_stereo_cmd
10552 (msm_bedais[be_index].port_id,
10553 idx, session_id,
10554 op_FL_ip_FL_weight,
10555 op_FL_ip_FR_weight,
10556 op_FR_ip_FL_weight,
10557 op_FR_ip_FR_weight);
10558 if (rc < 0)
10559skip_send_custom_stereo:
10560 pr_err("%s: err setting custom stereo\n",
10561 __func__);
10562 }
10563
10564 }
10565 }
10566 return 0;
10567}
10568
10569static const struct snd_kcontrol_new stereo_to_custom_stereo_controls[] = {
10570 SOC_SINGLE_EXT("Set Custom Stereo OnOff", SND_SOC_NOPM, 0,
10571 1, 0, msm_routing_get_stereo_to_custom_stereo_control,
10572 msm_routing_put_stereo_to_custom_stereo_control),
10573};
10574
10575static int msm_routing_get_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10576 struct snd_ctl_elem_value *ucontrol)
10577{
10578 return 0;
10579}
10580
10581static int msm_routing_put_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10582 struct snd_ctl_elem_value *ucontrol)
10583{
10584 int i = 0, j;
10585 int num_app_types = ucontrol->value.integer.value[i++];
10586
10587 pr_debug("%s\n", __func__);
10588
10589 memset(app_type_cfg, 0, MAX_APP_TYPES*
10590 sizeof(struct msm_pcm_routing_app_type_data));
10591 if (num_app_types > MAX_APP_TYPES) {
10592 pr_err("%s: number of app types exceed the max supported\n",
10593 __func__);
10594 return -EINVAL;
10595 }
10596 for (j = 0; j < num_app_types; j++) {
10597 app_type_cfg[j].app_type =
10598 ucontrol->value.integer.value[i++];
10599 app_type_cfg[j].sample_rate =
10600 ucontrol->value.integer.value[i++];
10601 app_type_cfg[j].bit_width =
10602 ucontrol->value.integer.value[i++];
10603 }
10604
10605 return 0;
10606}
10607
10608static int msm_routing_put_app_type_gain_control(struct snd_kcontrol *kcontrol,
10609 struct snd_ctl_elem_value *ucontrol)
10610{
10611 int j, fe_id, be_id, port_type;
10612 int ret = 0;
10613 unsigned long copp;
10614 struct msm_pcm_routing_bdai_data *bedai;
10615 int dir = ucontrol->value.integer.value[0] ? SESSION_TYPE_TX :
10616 SESSION_TYPE_RX;
10617 int app_type = ucontrol->value.integer.value[1];
10618 int gain = (ucontrol->value.integer.value[2] +
10619 ucontrol->value.integer.value[3])/2;
10620
10621 port_type = (dir == SESSION_TYPE_RX) ? MSM_AFE_PORT_TYPE_RX :
10622 MSM_AFE_PORT_TYPE_TX;
10623
10624 mutex_lock(&routing_lock);
10625 for (be_id = 0; be_id < MSM_BACKEND_DAI_MAX; be_id++) {
10626 if (is_be_dai_extproc(be_id))
10627 continue;
10628
10629 bedai = &msm_bedais[be_id];
10630 if (afe_get_port_type(bedai->port_id) != port_type)
10631 continue;
10632
10633 if (!bedai->active)
10634 continue;
10635
10636 for (fe_id = 0; fe_id < MSM_FRONTEND_DAI_MAX; fe_id++) {
10637 if (!test_bit(fe_id, &bedai->fe_sessions[0]))
10638 continue;
10639
10640 if (app_type !=
10641 fe_dai_app_type_cfg[fe_id][dir][be_id].app_type)
10642 continue;
10643
10644 copp = session_copp_map[fe_id][dir][be_id];
10645 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
10646 if (!test_bit(j, &copp))
10647 continue;
10648 ret |= adm_set_volume(bedai->port_id, j, gain);
10649 }
10650 }
10651 }
10652 mutex_unlock(&routing_lock);
10653 return ret ? -EINVAL : 0;
10654}
10655
10656static const struct snd_kcontrol_new app_type_cfg_controls[] = {
10657 SOC_SINGLE_MULTI_EXT("App Type Config", SND_SOC_NOPM, 0,
10658 0xFFFFFFFF, 0, 128, msm_routing_get_app_type_cfg_control,
10659 msm_routing_put_app_type_cfg_control),
10660 SOC_SINGLE_MULTI_EXT("App Type Gain", SND_SOC_NOPM, 0,
10661 0x2000, 0, 4, NULL, msm_routing_put_app_type_gain_control)
10662};
10663
10664static int msm_routing_get_lsm_app_type_cfg_control(
10665 struct snd_kcontrol *kcontrol,
10666 struct snd_ctl_elem_value *ucontrol)
10667{
10668 return 0;
10669}
10670
10671static int msm_routing_put_lsm_app_type_cfg_control(
10672 struct snd_kcontrol *kcontrol,
10673 struct snd_ctl_elem_value *ucontrol)
10674{
10675 int i = 0, j;
10676 int num_app_types = ucontrol->value.integer.value[i++];
10677
10678 memset(lsm_app_type_cfg, 0, MAX_APP_TYPES*
10679 sizeof(struct msm_pcm_routing_app_type_data));
10680 if (num_app_types > MAX_APP_TYPES) {
10681 pr_err("%s: number of app types exceed the max supported\n",
10682 __func__);
10683 return -EINVAL;
10684 }
10685 for (j = 0; j < num_app_types; j++) {
10686 lsm_app_type_cfg[j].app_type =
10687 ucontrol->value.integer.value[i++];
10688 lsm_app_type_cfg[j].sample_rate =
10689 ucontrol->value.integer.value[i++];
10690 lsm_app_type_cfg[j].bit_width =
10691 ucontrol->value.integer.value[i++];
10692 }
10693
10694 return 0;
10695}
10696
10697static const struct snd_kcontrol_new lsm_app_type_cfg_controls[] = {
10698 SOC_SINGLE_MULTI_EXT("Listen App Type Config", SND_SOC_NOPM, 0,
10699 0xFFFFFFFF, 0, 128, msm_routing_get_lsm_app_type_cfg_control,
10700 msm_routing_put_lsm_app_type_cfg_control),
10701};
10702
10703static int msm_routing_get_use_ds1_or_ds2_control(
10704 struct snd_kcontrol *kcontrol,
10705 struct snd_ctl_elem_value *ucontrol)
10706{
10707 ucontrol->value.integer.value[0] = is_ds2_on;
10708 return 0;
10709}
10710
10711static int msm_routing_put_use_ds1_or_ds2_control(
10712 struct snd_kcontrol *kcontrol,
10713 struct snd_ctl_elem_value *ucontrol)
10714{
10715 is_ds2_on = ucontrol->value.integer.value[0];
10716 return 0;
10717}
10718
10719static const struct snd_kcontrol_new use_ds1_or_ds2_controls[] = {
10720 SOC_SINGLE_EXT("DS2 OnOff", SND_SOC_NOPM, 0,
10721 1, 0, msm_routing_get_use_ds1_or_ds2_control,
10722 msm_routing_put_use_ds1_or_ds2_control),
10723};
10724
10725int msm_routing_get_rms_value_control(struct snd_kcontrol *kcontrol,
10726 struct snd_ctl_elem_value *ucontrol) {
10727 int rc = 0;
10728 int be_idx = 0;
10729 char *param_value;
10730 int *update_param_value;
10731 uint32_t param_length = sizeof(uint32_t);
10732 uint32_t param_payload_len = RMS_PAYLOAD_LEN * sizeof(uint32_t);
10733
10734 param_value = kzalloc(param_length + param_payload_len, GFP_KERNEL);
10735 if (!param_value)
10736 return -ENOMEM;
10737
10738 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++)
10739 if (msm_bedais[be_idx].port_id == SLIMBUS_0_TX)
10740 break;
10741 if ((be_idx < MSM_BACKEND_DAI_MAX) && msm_bedais[be_idx].active) {
10742 rc = adm_get_params(SLIMBUS_0_TX, 0,
10743 RMS_MODULEID_APPI_PASSTHRU,
10744 RMS_PARAM_FIRST_SAMPLE,
10745 param_length + param_payload_len,
10746 param_value);
10747 if (rc) {
10748 pr_err("%s: get parameters failed:%d\n", __func__, rc);
10749 kfree(param_value);
10750 return -EINVAL;
10751 }
10752 update_param_value = (int *)param_value;
10753 ucontrol->value.integer.value[0] = update_param_value[0];
10754
10755 pr_debug("%s: FROM DSP value[0] 0x%x\n",
10756 __func__, update_param_value[0]);
10757 }
10758 kfree(param_value);
10759 return 0;
10760}
10761
10762static int msm_voc_session_id_put(struct snd_kcontrol *kcontrol,
10763 struct snd_ctl_elem_value *ucontrol)
10764{
10765 voc_session_id = ucontrol->value.integer.value[0];
10766
10767 pr_debug("%s: voc_session_id=%u\n", __func__, voc_session_id);
10768
10769 return 0;
10770}
10771
10772static int msm_voc_session_id_get(struct snd_kcontrol *kcontrol,
10773 struct snd_ctl_elem_value *ucontrol)
10774{
10775 ucontrol->value.integer.value[0] = voc_session_id;
10776
10777 return 0;
10778}
10779
10780static struct snd_kcontrol_new msm_voc_session_controls[] = {
10781 SOC_SINGLE_MULTI_EXT("Voc VSID", SND_SOC_NOPM, 0,
10782 0xFFFFFFFF, 0, 1, msm_voc_session_id_get,
10783 msm_voc_session_id_put),
10784};
10785
10786static int msm_sound_focus_info(struct snd_kcontrol *kcontrol,
10787 struct snd_ctl_elem_info *uinfo)
10788{
10789 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
10790 uinfo->count = sizeof(struct sound_focus_param);
10791
10792 return 0;
10793}
10794
10795static int msm_voice_sound_focus_put(struct snd_kcontrol *kcontrol,
10796 struct snd_ctl_elem_value *ucontrol)
10797{
10798 int ret = 0;
10799 struct sound_focus_param soundFocusData;
10800
10801 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
10802 sizeof(struct sound_focus_param));
10803 ret = voc_set_sound_focus(soundFocusData);
10804 if (ret) {
10805 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
10806 __func__, ret);
10807
10808 ret = -EINVAL;
10809 }
10810
10811 return ret;
10812}
10813
10814static int msm_voice_sound_focus_get(struct snd_kcontrol *kcontrol,
10815 struct snd_ctl_elem_value *ucontrol)
10816{
10817 int ret = 0;
10818 struct sound_focus_param soundFocusData;
10819
10820 memset(&soundFocusData, 0, sizeof(struct sound_focus_param));
10821
10822 ret = voc_get_sound_focus(&soundFocusData);
10823 if (ret) {
10824 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
10825 __func__, ret);
10826
10827 ret = -EINVAL;
10828 goto done;
10829 }
10830 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
10831 sizeof(struct sound_focus_param));
10832
10833done:
10834 return ret;
10835}
10836
10837static int msm_source_tracking_info(struct snd_kcontrol *kcontrol,
10838 struct snd_ctl_elem_info *uinfo)
10839{
10840 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
10841 uinfo->count = sizeof(struct source_tracking_param);
10842
10843 return 0;
10844}
10845
10846static int msm_voice_source_tracking_get(struct snd_kcontrol *kcontrol,
10847 struct snd_ctl_elem_value *ucontrol)
10848{
10849 int ret = 0;
10850 struct source_tracking_param sourceTrackingData;
10851
10852 memset(&sourceTrackingData, 0, sizeof(struct source_tracking_param));
10853
10854 ret = voc_get_source_tracking(&sourceTrackingData);
10855 if (ret) {
10856 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
10857 __func__, ret);
10858
10859 ret = -EINVAL;
10860 goto done;
10861 }
10862 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
10863 sizeof(struct source_tracking_param));
10864
10865done:
10866 return ret;
10867}
10868
10869static int msm_audio_get_copp_idx_from_port_id(int port_id, int session_type,
10870 int *copp_idx)
10871{
10872 int i, idx, be_idx;
10873 int ret = 0;
10874 unsigned long copp;
10875
10876 pr_debug("%s: Enter, port_id=%d\n", __func__, port_id);
10877
10878 ret = q6audio_validate_port(port_id);
10879 if (ret < 0) {
10880 pr_err("%s: port validation failed id 0x%x ret %d\n",
10881 __func__, port_id, ret);
10882
10883 ret = -EINVAL;
10884 goto done;
10885 }
10886
10887 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
10888 if (msm_bedais[be_idx].port_id == port_id)
10889 break;
10890 }
10891 if (be_idx >= MSM_BACKEND_DAI_MAX) {
10892 pr_err("%s: Invalid be id %d\n", __func__, be_idx);
10893
10894 ret = -EINVAL;
10895 goto done;
10896 }
10897
10898 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
10899 MSM_FRONTEND_DAI_MM_SIZE) {
10900 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
10901 copp = session_copp_map[i]
10902 [session_type][be_idx];
10903 if (test_bit(idx, &copp))
10904 break;
10905 }
10906 if (idx >= MAX_COPPS_PER_PORT)
10907 continue;
10908 else
10909 break;
10910 }
10911 if (i >= MSM_FRONTEND_DAI_MM_SIZE) {
10912 pr_err("%s: Invalid FE, exiting\n", __func__);
10913
10914 ret = -EINVAL;
10915 goto done;
10916 }
10917 *copp_idx = idx;
10918 pr_debug("%s: copp_idx=%d\n", __func__, *copp_idx);
10919
10920done:
10921 return ret;
10922}
10923
10924static int msm_audio_sound_focus_derive_port_id(struct snd_kcontrol *kcontrol,
10925 const char *prefix, int *port_id)
10926{
10927 int ret = 0;
10928
10929 pr_debug("%s: Enter, prefix:%s\n", __func__, prefix);
10930
10931 /*
10932 * Mixer control name will be like "Sound Focus Audio Tx SLIMBUS_0"
10933 * where the prefix is "Sound Focus Audio Tx ". Skip the prefix
10934 * and compare the string with the backend name to derive the port id.
10935 */
10936 if (!strcmp(kcontrol->id.name + strlen(prefix),
10937 "SLIMBUS_0")) {
10938 *port_id = SLIMBUS_0_TX;
10939 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
10940 "TERT_MI2S")) {
10941 *port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
10942 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
10943 "INT3_MI2S")) {
10944 *port_id = AFE_PORT_ID_INT3_MI2S_TX;
10945 } else {
10946 pr_err("%s: mixer ctl name=%s, could not derive valid port id\n",
10947 __func__, kcontrol->id.name);
10948
10949 ret = -EINVAL;
10950 goto done;
10951 }
10952 pr_debug("%s: mixer ctl name=%s, derived port_id=%d\n",
10953 __func__, kcontrol->id.name, *port_id);
10954
10955done:
10956 return ret;
10957}
10958
10959static int msm_audio_sound_focus_put(struct snd_kcontrol *kcontrol,
10960 struct snd_ctl_elem_value *ucontrol)
10961{
10962 int ret = 0;
10963 struct sound_focus_param soundFocusData;
10964 int port_id, copp_idx;
10965
10966 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
10967 "Sound Focus Audio Tx ", &port_id);
10968 if (ret != 0) {
10969 pr_err("%s: Error in deriving port id, err=%d\n",
10970 __func__, ret);
10971
10972 ret = -EINVAL;
10973 goto done;
10974 }
10975
10976 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
10977 &copp_idx);
10978 if (ret) {
10979 pr_err("%s: Could not get copp idx for port_id=%d\n",
10980 __func__, port_id);
10981
10982 ret = -EINVAL;
10983 goto done;
10984 }
10985
10986 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
10987 sizeof(struct sound_focus_param));
10988
10989 ret = adm_set_sound_focus(port_id, copp_idx, soundFocusData);
10990 if (ret) {
10991 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
10992 __func__, ret);
10993
10994 ret = -EINVAL;
10995 goto done;
10996 }
10997
10998done:
10999 return ret;
11000}
11001
11002static int msm_audio_sound_focus_get(struct snd_kcontrol *kcontrol,
11003 struct snd_ctl_elem_value *ucontrol)
11004{
11005 int ret = 0;
11006 struct sound_focus_param soundFocusData;
11007 int port_id, copp_idx;
11008
11009 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11010 "Sound Focus Audio Tx ", &port_id);
11011 if (ret) {
11012 pr_err("%s: Error in deriving port id, err=%d\n",
11013 __func__, ret);
11014
11015 ret = -EINVAL;
11016 goto done;
11017 }
11018
11019 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11020 &copp_idx);
11021 if (ret) {
11022 pr_err("%s: Could not get copp idx for port_id=%d\n",
11023 __func__, port_id);
11024
11025 ret = -EINVAL;
11026 goto done;
11027 }
11028
11029 ret = adm_get_sound_focus(port_id, copp_idx, &soundFocusData);
11030 if (ret) {
11031 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
11032 __func__, ret);
11033
11034 ret = -EINVAL;
11035 goto done;
11036 }
11037
11038 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
11039 sizeof(struct sound_focus_param));
11040
11041done:
11042 return ret;
11043}
11044
11045static int msm_audio_source_tracking_get(struct snd_kcontrol *kcontrol,
11046 struct snd_ctl_elem_value *ucontrol)
11047{
11048 int ret = 0;
11049 struct source_tracking_param sourceTrackingData;
11050 int port_id, copp_idx;
11051
11052 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11053 "Source Tracking Audio Tx ", &port_id);
11054 if (ret) {
11055 pr_err("%s: Error in deriving port id, err=%d\n",
11056 __func__, ret);
11057
11058 ret = -EINVAL;
11059 goto done;
11060 }
11061
11062 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11063 &copp_idx);
11064 if (ret) {
11065 pr_err("%s: Could not get copp idx for port_id=%d\n",
11066 __func__, port_id);
11067
11068 ret = -EINVAL;
11069 goto done;
11070 }
11071
11072 ret = adm_get_source_tracking(port_id, copp_idx, &sourceTrackingData);
11073 if (ret) {
11074 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
11075 __func__, ret);
11076
11077 ret = -EINVAL;
11078 goto done;
11079 }
11080
11081 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
11082 sizeof(struct source_tracking_param));
11083
11084done:
11085 return ret;
11086}
11087
11088static const struct snd_kcontrol_new msm_source_tracking_controls[] = {
11089 {
11090 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11091 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11092 .name = "Sound Focus Voice Tx SLIMBUS_0",
11093 .info = msm_sound_focus_info,
11094 .get = msm_voice_sound_focus_get,
11095 .put = msm_voice_sound_focus_put,
11096 },
11097 {
11098 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11099 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11100 .name = "Source Tracking Voice Tx SLIMBUS_0",
11101 .info = msm_source_tracking_info,
11102 .get = msm_voice_source_tracking_get,
11103 },
11104 {
11105 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11106 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11107 .name = "Sound Focus Audio Tx SLIMBUS_0",
11108 .info = msm_sound_focus_info,
11109 .get = msm_audio_sound_focus_get,
11110 .put = msm_audio_sound_focus_put,
11111 },
11112 {
11113 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11114 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11115 .name = "Source Tracking Audio Tx SLIMBUS_0",
11116 .info = msm_source_tracking_info,
11117 .get = msm_audio_source_tracking_get,
11118 },
11119 {
11120 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11121 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11122 .name = "Sound Focus Voice Tx TERT_MI2S",
11123 .info = msm_sound_focus_info,
11124 .get = msm_voice_sound_focus_get,
11125 .put = msm_voice_sound_focus_put,
11126 },
11127 {
11128 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11129 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11130 .name = "Source Tracking Voice Tx TERT_MI2S",
11131 .info = msm_source_tracking_info,
11132 .get = msm_voice_source_tracking_get,
11133 },
11134 {
11135 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11136 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11137 .name = "Sound Focus Audio Tx TERT_MI2S",
11138 .info = msm_sound_focus_info,
11139 .get = msm_audio_sound_focus_get,
11140 .put = msm_audio_sound_focus_put,
11141 },
11142 {
11143 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11144 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11145 .name = "Source Tracking Audio Tx TERT_MI2S",
11146 .info = msm_source_tracking_info,
11147 .get = msm_audio_source_tracking_get,
11148 },
11149 {
11150 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11151 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11152 .name = "Sound Focus Voice Tx INT3_MI2S",
11153 .info = msm_sound_focus_info,
11154 .get = msm_voice_sound_focus_get,
11155 .put = msm_voice_sound_focus_put,
11156 },
11157 {
11158 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11159 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11160 .name = "Source Tracking Voice Tx INT3_MI2S",
11161 .info = msm_source_tracking_info,
11162 .get = msm_voice_source_tracking_get,
11163 },
11164 {
11165 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11166 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11167 .name = "Sound Focus Audio Tx INT3_MI2S",
11168 .info = msm_sound_focus_info,
11169 .get = msm_audio_sound_focus_get,
11170 .put = msm_audio_sound_focus_put,
11171 },
11172 {
11173 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11174 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11175 .name = "Source Tracking Audio Tx INT3_MI2S",
11176 .info = msm_source_tracking_info,
11177 .get = msm_audio_source_tracking_get,
11178 },
11179};
11180
11181static int spkr_prot_put_vi_lch_port(struct snd_kcontrol *kcontrol,
11182 struct snd_ctl_elem_value *ucontrol)
11183{
11184 int ret = 0;
11185 int item;
11186 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11187
11188 pr_debug("%s item is %d\n", __func__,
11189 ucontrol->value.enumerated.item[0]);
11190 mutex_lock(&routing_lock);
11191 item = ucontrol->value.enumerated.item[0];
11192 if (item < e->items) {
11193 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11194 __func__, e->shift_l, e->values[item]);
11195 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11196 e->values[item] < MSM_BACKEND_DAI_MAX)
11197 /* Enable feedback TX path */
11198 ret = afe_spk_prot_feed_back_cfg(
11199 msm_bedais[e->values[item]].port_id,
11200 msm_bedais[e->shift_l].port_id, 1, 0, 1);
11201 else {
11202 pr_debug("%s values are out of range item %d\n",
11203 __func__, e->values[item]);
11204 /* Disable feedback TX path */
11205 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11206 ret = afe_spk_prot_feed_back_cfg(0, 0, 0, 0, 0);
11207 else
11208 ret = -EINVAL;
11209 }
11210 } else {
11211 pr_err("%s item value is out of range item\n", __func__);
11212 ret = -EINVAL;
11213 }
11214 mutex_unlock(&routing_lock);
11215 return ret;
11216}
11217
11218static int spkr_prot_put_vi_rch_port(struct snd_kcontrol *kcontrol,
11219 struct snd_ctl_elem_value *ucontrol)
11220{
11221 int ret = 0;
11222 int item;
11223 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11224
11225 pr_debug("%s item is %d\n", __func__,
11226 ucontrol->value.enumerated.item[0]);
11227 mutex_lock(&routing_lock);
11228 item = ucontrol->value.enumerated.item[0];
11229 if (item < e->items) {
11230 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11231 __func__, e->shift_l, e->values[item]);
11232 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11233 e->values[item] < MSM_BACKEND_DAI_MAX)
11234 /* Enable feedback TX path */
11235 ret = afe_spk_prot_feed_back_cfg(
11236 msm_bedais[e->values[item]].port_id,
11237 msm_bedais[e->shift_l].port_id,
11238 1, 1, 1);
11239 else {
11240 pr_debug("%s values are out of range item %d\n",
11241 __func__, e->values[item]);
11242 /* Disable feedback TX path */
11243 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11244 ret = afe_spk_prot_feed_back_cfg(0,
11245 0, 0, 0, 0);
11246 else
11247 ret = -EINVAL;
11248 }
11249 } else {
11250 pr_err("%s item value is out of range item\n", __func__);
11251 ret = -EINVAL;
11252 }
11253 mutex_unlock(&routing_lock);
11254 return ret;
11255}
11256
11257static int spkr_prot_get_vi_lch_port(struct snd_kcontrol *kcontrol,
11258 struct snd_ctl_elem_value *ucontrol)
11259{
11260 pr_debug("%s\n", __func__);
11261 return 0;
11262}
11263
11264static int spkr_prot_get_vi_rch_port(struct snd_kcontrol *kcontrol,
11265 struct snd_ctl_elem_value *ucontrol)
11266{
11267 pr_debug("%s\n", __func__);
11268 ucontrol->value.enumerated.item[0] = 0;
11269 return 0;
11270}
11271
11272static const char * const slim0_rx_vi_fb_tx_lch_mux_text[] = {
11273 "ZERO", "SLIM4_TX"
11274};
11275
11276static const char * const slim0_rx_vi_fb_tx_rch_mux_text[] = {
11277 "ZERO", "SLIM4_TX"
11278};
11279
11280static const char * const mi2s_rx_vi_fb_tx_mux_text[] = {
11281 "ZERO", "SENARY_TX"
11282};
11283
11284static const char * const int4_mi2s_rx_vi_fb_tx_mono_mux_text[] = {
11285 "ZERO", "INT5_MI2S_TX"
11286};
11287
11288static const char * const int4_mi2s_rx_vi_fb_tx_stereo_mux_text[] = {
11289 "ZERO", "INT5_MI2S_TX"
11290};
11291
11292static const int const slim0_rx_vi_fb_tx_lch_value[] = {
11293 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11294};
11295
11296static const int const slim0_rx_vi_fb_tx_rch_value[] = {
11297 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11298};
11299
11300static const int const mi2s_rx_vi_fb_tx_value[] = {
11301 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SENARY_MI2S_TX
11302};
11303
11304static const int const int4_mi2s_rx_vi_fb_tx_mono_ch_value[] = {
11305 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11306};
11307
11308static const int const int4_mi2s_rx_vi_fb_tx_stereo_ch_value[] = {
11309 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11310};
11311
11312static const struct soc_enum slim0_rx_vi_fb_lch_mux_enum =
11313 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11314 ARRAY_SIZE(slim0_rx_vi_fb_tx_lch_mux_text),
11315 slim0_rx_vi_fb_tx_lch_mux_text, slim0_rx_vi_fb_tx_lch_value);
11316
11317static const struct soc_enum slim0_rx_vi_fb_rch_mux_enum =
11318 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11319 ARRAY_SIZE(slim0_rx_vi_fb_tx_rch_mux_text),
11320 slim0_rx_vi_fb_tx_rch_mux_text, slim0_rx_vi_fb_tx_rch_value);
11321
11322static const struct soc_enum mi2s_rx_vi_fb_mux_enum =
11323 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0,
11324 ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text),
11325 mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value);
11326
11327static const struct soc_enum int4_mi2s_rx_vi_fb_mono_ch_mux_enum =
11328 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11329 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_mono_mux_text),
11330 int4_mi2s_rx_vi_fb_tx_mono_mux_text,
11331 int4_mi2s_rx_vi_fb_tx_mono_ch_value);
11332
11333static const struct soc_enum int4_mi2s_rx_vi_fb_stereo_ch_mux_enum =
11334 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11335 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_stereo_mux_text),
11336 int4_mi2s_rx_vi_fb_tx_stereo_mux_text,
11337 int4_mi2s_rx_vi_fb_tx_stereo_ch_value);
11338
11339static const struct snd_kcontrol_new slim0_rx_vi_fb_lch_mux =
11340 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_LCH_MUX",
11341 slim0_rx_vi_fb_lch_mux_enum, spkr_prot_get_vi_lch_port,
11342 spkr_prot_put_vi_lch_port);
11343
11344static const struct snd_kcontrol_new slim0_rx_vi_fb_rch_mux =
11345 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_RCH_MUX",
11346 slim0_rx_vi_fb_rch_mux_enum, spkr_prot_get_vi_rch_port,
11347 spkr_prot_put_vi_rch_port);
11348
11349static const struct snd_kcontrol_new mi2s_rx_vi_fb_mux =
11350 SOC_DAPM_ENUM_EXT("PRI_MI2S_RX_VI_FB_MUX",
11351 mi2s_rx_vi_fb_mux_enum, spkr_prot_get_vi_lch_port,
11352 spkr_prot_put_vi_lch_port);
11353
11354static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_mono_ch_mux =
11355 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_MONO_CH_MUX",
11356 int4_mi2s_rx_vi_fb_mono_ch_mux_enum, spkr_prot_get_vi_lch_port,
11357 spkr_prot_put_vi_lch_port);
11358
11359static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_stereo_ch_mux =
11360 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX",
11361 int4_mi2s_rx_vi_fb_stereo_ch_mux_enum, spkr_prot_get_vi_rch_port,
11362 spkr_prot_put_vi_rch_port);
11363
11364static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
11365 /* Frontend AIF */
11366 /* Widget name equals to Front-End DAI name<Need confirmation>,
11367 * Stream name must contains substring of front-end dai name
11368 */
11369 SND_SOC_DAPM_AIF_IN("MM_DL1", "MultiMedia1 Playback", 0, 0, 0, 0),
11370 SND_SOC_DAPM_AIF_IN("MM_DL2", "MultiMedia2 Playback", 0, 0, 0, 0),
11371 SND_SOC_DAPM_AIF_IN("MM_DL3", "MultiMedia3 Playback", 0, 0, 0, 0),
11372 SND_SOC_DAPM_AIF_IN("MM_DL4", "MultiMedia4 Playback", 0, 0, 0, 0),
11373 SND_SOC_DAPM_AIF_IN("MM_DL5", "MultiMedia5 Playback", 0, 0, 0, 0),
11374 SND_SOC_DAPM_AIF_IN("MM_DL6", "MultiMedia6 Playback", 0, 0, 0, 0),
11375 SND_SOC_DAPM_AIF_IN("MM_DL7", "MultiMedia7 Playback", 0, 0, 0, 0),
11376 SND_SOC_DAPM_AIF_IN("MM_DL8", "MultiMedia8 Playback", 0, 0, 0, 0),
11377 SND_SOC_DAPM_AIF_IN("MM_DL9", "MultiMedia9 Playback", 0, 0, 0, 0),
11378 SND_SOC_DAPM_AIF_IN("MM_DL10", "MultiMedia10 Playback", 0, 0, 0, 0),
11379 SND_SOC_DAPM_AIF_IN("MM_DL11", "MultiMedia11 Playback", 0, 0, 0, 0),
11380 SND_SOC_DAPM_AIF_IN("MM_DL12", "MultiMedia12 Playback", 0, 0, 0, 0),
11381 SND_SOC_DAPM_AIF_IN("MM_DL13", "MultiMedia13 Playback", 0, 0, 0, 0),
11382 SND_SOC_DAPM_AIF_IN("MM_DL14", "MultiMedia14 Playback", 0, 0, 0, 0),
11383 SND_SOC_DAPM_AIF_IN("MM_DL15", "MultiMedia15 Playback", 0, 0, 0, 0),
11384 SND_SOC_DAPM_AIF_IN("MM_DL16", "MultiMedia16 Playback", 0, 0, 0, 0),
11385 SND_SOC_DAPM_AIF_IN("MM_DL20", "MultiMedia20 Playback", 0, 0, 0, 0),
11386 SND_SOC_DAPM_AIF_IN("VOIP_DL", "VoIP Playback", 0, 0, 0, 0),
11387 SND_SOC_DAPM_AIF_OUT("MM_UL1", "MultiMedia1 Capture", 0, 0, 0, 0),
11388 SND_SOC_DAPM_AIF_OUT("MM_UL2", "MultiMedia2 Capture", 0, 0, 0, 0),
11389 SND_SOC_DAPM_AIF_OUT("MM_UL3", "MultiMedia3 Capture", 0, 0, 0, 0),
11390 SND_SOC_DAPM_AIF_OUT("MM_UL4", "MultiMedia4 Capture", 0, 0, 0, 0),
11391 SND_SOC_DAPM_AIF_OUT("MM_UL5", "MultiMedia5 Capture", 0, 0, 0, 0),
11392 SND_SOC_DAPM_AIF_OUT("MM_UL6", "MultiMedia6 Capture", 0, 0, 0, 0),
11393 SND_SOC_DAPM_AIF_OUT("MM_UL8", "MultiMedia8 Capture", 0, 0, 0, 0),
11394 SND_SOC_DAPM_AIF_OUT("MM_UL9", "MultiMedia9 Capture", 0, 0, 0, 0),
11395 SND_SOC_DAPM_AIF_OUT("MM_UL17", "MultiMedia17 Capture", 0, 0, 0, 0),
11396 SND_SOC_DAPM_AIF_OUT("MM_UL18", "MultiMedia18 Capture", 0, 0, 0, 0),
11397 SND_SOC_DAPM_AIF_OUT("MM_UL19", "MultiMedia19 Capture", 0, 0, 0, 0),
11398 SND_SOC_DAPM_AIF_OUT("MM_UL20", "MultiMedia20 Capture", 0, 0, 0, 0),
11399 SND_SOC_DAPM_AIF_IN("CS-VOICE_DL1", "CS-VOICE Playback", 0, 0, 0, 0),
11400 SND_SOC_DAPM_AIF_OUT("CS-VOICE_UL1", "CS-VOICE Capture", 0, 0, 0, 0),
11401 SND_SOC_DAPM_AIF_IN("VOICE2_DL", "Voice2 Playback", 0, 0, 0, 0),
11402 SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0),
11403 SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0),
11404 SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0),
11405 SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0),
11406 SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0),
11407 SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0),
11408 SND_SOC_DAPM_AIF_IN("VOICEMMODE1_DL",
11409 "VoiceMMode1 Playback", 0, 0, 0, 0),
11410 SND_SOC_DAPM_AIF_OUT("VOICEMMODE1_UL",
11411 "VoiceMMode1 Capture", 0, 0, 0, 0),
11412 SND_SOC_DAPM_AIF_IN("VOICEMMODE2_DL",
11413 "VoiceMMode2 Playback", 0, 0, 0, 0),
11414 SND_SOC_DAPM_AIF_OUT("VOICEMMODE2_UL",
11415 "VoiceMMode2 Capture", 0, 0, 0, 0),
11416 SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback",
11417 0, 0, 0, 0),
11418 SND_SOC_DAPM_AIF_OUT("SLIM0_UL_HL", "SLIMBUS0_HOSTLESS Capture",
11419 0, 0, 0, 0),
11420 SND_SOC_DAPM_AIF_OUT("CPE_LSM_UL_HL", "CPE LSM capture",
11421 0, 0, 0, 0),
11422 SND_SOC_DAPM_AIF_IN("SLIM1_DL_HL", "SLIMBUS1_HOSTLESS Playback",
11423 0, 0, 0, 0),
11424 SND_SOC_DAPM_AIF_OUT("SLIM1_UL_HL", "SLIMBUS1_HOSTLESS Capture",
11425 0, 0, 0, 0),
11426 SND_SOC_DAPM_AIF_IN("SLIM3_DL_HL", "SLIMBUS3_HOSTLESS Playback",
11427 0, 0, 0, 0),
11428 SND_SOC_DAPM_AIF_OUT("SLIM3_UL_HL", "SLIMBUS3_HOSTLESS Capture",
11429 0, 0, 0, 0),
11430 SND_SOC_DAPM_AIF_IN("SLIM4_DL_HL", "SLIMBUS4_HOSTLESS Playback",
11431 0, 0, 0, 0),
11432 SND_SOC_DAPM_AIF_OUT("SLIM4_UL_HL", "SLIMBUS4_HOSTLESS Capture",
11433 0, 0, 0, 0),
11434 SND_SOC_DAPM_AIF_IN("SLIM6_DL_HL", "SLIMBUS6_HOSTLESS Playback",
11435 0, 0, 0, 0),
11436 SND_SOC_DAPM_AIF_OUT("SLIM6_UL_HL", "SLIMBUS6_HOSTLESS Capture",
11437 0, 0, 0, 0),
11438 SND_SOC_DAPM_AIF_IN("SLIM7_DL_HL", "SLIMBUS7_HOSTLESS Playback",
11439 0, 0, 0, 0),
11440 SND_SOC_DAPM_AIF_OUT("SLIM7_UL_HL", "SLIMBUS7_HOSTLESS Capture",
11441 0, 0, 0, 0),
11442 SND_SOC_DAPM_AIF_IN("SLIM8_DL_HL", "SLIMBUS8_HOSTLESS Playback",
11443 0, 0, 0, 0),
11444 SND_SOC_DAPM_AIF_OUT("SLIM8_UL_HL", "SLIMBUS8_HOSTLESS Capture",
11445 0, 0, 0, 0),
11446 SND_SOC_DAPM_AIF_IN("INTFM_DL_HL", "INT_FM_HOSTLESS Playback",
11447 0, 0, 0, 0),
11448 SND_SOC_DAPM_AIF_OUT("INTFM_UL_HL", "INT_FM_HOSTLESS Capture",
11449 0, 0, 0, 0),
11450 SND_SOC_DAPM_AIF_IN("INTHFP_DL_HL", "INT_HFP_BT_HOSTLESS Playback",
11451 0, 0, 0, 0),
11452 SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture",
11453 0, 0, 0, 0),
11454 SND_SOC_DAPM_AIF_IN("USBAUDIO_DL_HL", "USBAUDIO_HOSTLESS Playback",
11455 0, 0, 0, 0),
11456 SND_SOC_DAPM_AIF_OUT("USBAUDIO_UL_HL", "USBAUDIO_HOSTLESS Capture",
11457 0, 0, 0, 0),
11458 SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0),
11459 SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback",
11460 0, 0, 0, 0),
11461 SND_SOC_DAPM_AIF_IN("INT0_MI2S_DL_HL",
11462 "INT0 MI2S_RX Hostless Playback",
11463 0, 0, 0, 0),
11464 SND_SOC_DAPM_AIF_IN("INT4_MI2S_DL_HL",
11465 "INT4 MI2S_RX Hostless Playback",
11466 0, 0, 0, 0),
11467 SND_SOC_DAPM_AIF_IN("PRI_MI2S_DL_HL",
11468 "Primary MI2S_RX Hostless Playback",
11469 0, 0, 0, 0),
11470 SND_SOC_DAPM_AIF_IN("SEC_MI2S_DL_HL",
11471 "Secondary MI2S_RX Hostless Playback",
11472 0, 0, 0, 0),
11473 SND_SOC_DAPM_AIF_IN("TERT_MI2S_DL_HL",
11474 "Tertiary MI2S_RX Hostless Playback",
11475 0, 0, 0, 0),
11476 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_DL_HL",
11477 "Quaternary MI2S_RX Hostless Playback",
11478 0, 0, 0, 0),
11479
11480 SND_SOC_DAPM_AIF_IN("AUXPCM_DL_HL", "AUXPCM_HOSTLESS Playback",
11481 0, 0, 0, 0),
11482 SND_SOC_DAPM_AIF_OUT("AUXPCM_UL_HL", "AUXPCM_HOSTLESS Capture",
11483 0, 0, 0, 0),
11484 SND_SOC_DAPM_AIF_OUT("MI2S_UL_HL", "MI2S_TX_HOSTLESS Capture",
11485 0, 0, 0, 0),
11486 SND_SOC_DAPM_AIF_OUT("INT3_MI2S_UL_HL",
11487 "INT3 MI2S_TX Hostless Capture",
11488 0, 0, 0, 0),
11489 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_UL_HL",
11490 "Tertiary MI2S_TX Hostless Capture",
11491 0, 0, 0, 0),
11492 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_UL_HL",
11493 "Secondary MI2S_TX Hostless Capture",
11494 0, 0, 0, 0),
11495 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_UL_HL",
11496 "Primary MI2S_TX Hostless Capture",
11497 0, 0, 0, 0),
11498 SND_SOC_DAPM_AIF_OUT("MI2S_DL_HL", "MI2S_RX_HOSTLESS Playback",
11499 0, 0, 0, 0),
11500 SND_SOC_DAPM_AIF_IN("DTMF_DL_HL", "DTMF_RX_HOSTLESS Playback",
11501 0, 0, 0, 0),
11502 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_UL_HL",
11503 "Quaternary MI2S_TX Hostless Capture",
11504 0, 0, 0, 0),
11505
11506 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_0_DL_HL",
11507 "Primary TDM0 Hostless Playback",
11508 0, 0, 0, 0),
11509 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_0_UL_HL",
11510 "Primary TDM0 Hostless Capture",
11511 0, 0, 0, 0),
11512 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_1_DL_HL",
11513 "Primary TDM1 Hostless Playback",
11514 0, 0, 0, 0),
11515 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_1_UL_HL",
11516 "Primary TDM1 Hostless Capture",
11517 0, 0, 0, 0),
11518 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_2_DL_HL",
11519 "Primary TDM2 Hostless Playback",
11520 0, 0, 0, 0),
11521 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_2_UL_HL",
11522 "Primary TDM2 Hostless Capture",
11523 0, 0, 0, 0),
11524 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_3_DL_HL",
11525 "Primary TDM3 Hostless Playback",
11526 0, 0, 0, 0),
11527 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_3_UL_HL",
11528 "Primary TDM3 Hostless Capture",
11529 0, 0, 0, 0),
11530 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_4_DL_HL",
11531 "Primary TDM4 Hostless Playback",
11532 0, 0, 0, 0),
11533 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_4_UL_HL",
11534 "Primary TDM4 Hostless Capture",
11535 0, 0, 0, 0),
11536 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_5_DL_HL",
11537 "Primary TDM5 Hostless Playback",
11538 0, 0, 0, 0),
11539 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_5_UL_HL",
11540 "Primary TDM5 Hostless Capture",
11541 0, 0, 0, 0),
11542 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_6_DL_HL",
11543 "Primary TDM6 Hostless Playback",
11544 0, 0, 0, 0),
11545 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_6_UL_HL",
11546 "Primary TDM6 Hostless Capture",
11547 0, 0, 0, 0),
11548 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_7_DL_HL",
11549 "Primary TDM7 Hostless Playback",
11550 0, 0, 0, 0),
11551 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_7_UL_HL",
11552 "Primary TDM7 Hostless Capture",
11553 0, 0, 0, 0),
11554 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_0_DL_HL",
11555 "Secondary TDM0 Hostless Playback",
11556 0, 0, 0, 0),
11557 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_0_UL_HL",
11558 "Secondary TDM0 Hostless Capture",
11559 0, 0, 0, 0),
11560 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_1_DL_HL",
11561 "Secondary TDM1 Hostless Playback",
11562 0, 0, 0, 0),
11563 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_1_UL_HL",
11564 "Secondary TDM1 Hostless Capture",
11565 0, 0, 0, 0),
11566 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_2_DL_HL",
11567 "Secondary TDM2 Hostless Playback",
11568 0, 0, 0, 0),
11569 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_2_UL_HL",
11570 "Secondary TDM2 Hostless Capture",
11571 0, 0, 0, 0),
11572 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_3_DL_HL",
11573 "Secondary TDM3 Hostless Playback",
11574 0, 0, 0, 0),
11575 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_3_UL_HL",
11576 "Secondary TDM3 Hostless Capture",
11577 0, 0, 0, 0),
11578 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_4_DL_HL",
11579 "Secondary TDM4 Hostless Playback",
11580 0, 0, 0, 0),
11581 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_4_UL_HL",
11582 "Secondary TDM4 Hostless Capture",
11583 0, 0, 0, 0),
11584 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_5_DL_HL",
11585 "Secondary TDM5 Hostless Playback",
11586 0, 0, 0, 0),
11587 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_5_UL_HL",
11588 "Secondary TDM5 Hostless Capture",
11589 0, 0, 0, 0),
11590 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_6_DL_HL",
11591 "Secondary TDM6 Hostless Playback",
11592 0, 0, 0, 0),
11593 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_6_UL_HL",
11594 "Secondary TDM6 Hostless Capture",
11595 0, 0, 0, 0),
11596 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_7_DL_HL",
11597 "Secondary TDM7 Hostless Playback",
11598 0, 0, 0, 0),
11599 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_7_UL_HL",
11600 "Secondary TDM7 Hostless Capture",
11601 0, 0, 0, 0),
11602 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_0_DL_HL",
11603 "Tertiary TDM0 Hostless Playback",
11604 0, 0, 0, 0),
11605 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_0_UL_HL",
11606 "Tertiary TDM0 Hostless Capture",
11607 0, 0, 0, 0),
11608 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_1_DL_HL",
11609 "Tertiary TDM1 Hostless Playback",
11610 0, 0, 0, 0),
11611 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_1_UL_HL",
11612 "Tertiary TDM1 Hostless Capture",
11613 0, 0, 0, 0),
11614 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_2_DL_HL",
11615 "Tertiary TDM2 Hostless Playback",
11616 0, 0, 0, 0),
11617 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_2_UL_HL",
11618 "Tertiary TDM2 Hostless Capture",
11619 0, 0, 0, 0),
11620 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_3_DL_HL",
11621 "Tertiary TDM3 Hostless Playback",
11622 0, 0, 0, 0),
11623 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_3_UL_HL",
11624 "Tertiary TDM3 Hostless Capture",
11625 0, 0, 0, 0),
11626 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_4_DL_HL",
11627 "Tertiary TDM4 Hostless Playback",
11628 0, 0, 0, 0),
11629 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_4_UL_HL",
11630 "Tertiary TDM4 Hostless Capture",
11631 0, 0, 0, 0),
11632 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_5_DL_HL",
11633 "Tertiary TDM5 Hostless Playback",
11634 0, 0, 0, 0),
11635 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_5_UL_HL",
11636 "Tertiary TDM5 Hostless Capture",
11637 0, 0, 0, 0),
11638 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_6_DL_HL",
11639 "Tertiary TDM6 Hostless Playback",
11640 0, 0, 0, 0),
11641 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_6_UL_HL",
11642 "Tertiary TDM6 Hostless Capture",
11643 0, 0, 0, 0),
11644 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_7_DL_HL",
11645 "Tertiary TDM7 Hostless Playback",
11646 0, 0, 0, 0),
11647 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_7_UL_HL",
11648 "Tertiary TDM7 Hostless Capture",
11649 0, 0, 0, 0),
11650 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_0_DL_HL",
11651 "Quaternary TDM0 Hostless Playback",
11652 0, 0, 0, 0),
11653 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_0_UL_HL",
11654 "Quaternary TDM0 Hostless Capture",
11655 0, 0, 0, 0),
11656 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_1_DL_HL",
11657 "Quaternary TDM1 Hostless Playback",
11658 0, 0, 0, 0),
11659 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_1_UL_HL",
11660 "Quaternary TDM1 Hostless Capture",
11661 0, 0, 0, 0),
11662 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_2_DL_HL",
11663 "Quaternary TDM2 Hostless Playback",
11664 0, 0, 0, 0),
11665 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_2_UL_HL",
11666 "Quaternary TDM2 Hostless Capture",
11667 0, 0, 0, 0),
11668 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_3_DL_HL",
11669 "Quaternary TDM3 Hostless Playback",
11670 0, 0, 0, 0),
11671 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_3_UL_HL",
11672 "Quaternary TDM3 Hostless Capture",
11673 0, 0, 0, 0),
11674 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_4_DL_HL",
11675 "Quaternary TDM4 Hostless Playback",
11676 0, 0, 0, 0),
11677 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_4_UL_HL",
11678 "Quaternary TDM4 Hostless Capture",
11679 0, 0, 0, 0),
11680 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_5_DL_HL",
11681 "Quaternary TDM5 Hostless Playback",
11682 0, 0, 0, 0),
11683 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_5_UL_HL",
11684 "Quaternary TDM5 Hostless Capture",
11685 0, 0, 0, 0),
11686 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_6_DL_HL",
11687 "Quaternary TDM6 Hostless Playback",
11688 0, 0, 0, 0),
11689 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_6_UL_HL",
11690 "Quaternary TDM6 Hostless Capture",
11691 0, 0, 0, 0),
11692 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_7_DL_HL",
11693 "Quaternary TDM7 Hostless Playback",
11694 0, 0, 0, 0),
11695 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_7_UL_HL",
11696 "Quaternary TDM7 Hostless Capture",
11697 0, 0, 0, 0),
11698
11699 /* LSM */
11700 SND_SOC_DAPM_AIF_OUT("LSM1_UL_HL", "Listen 1 Audio Service Capture",
11701 0, 0, 0, 0),
11702 SND_SOC_DAPM_AIF_OUT("LSM2_UL_HL", "Listen 2 Audio Service Capture",
11703 0, 0, 0, 0),
11704 SND_SOC_DAPM_AIF_OUT("LSM3_UL_HL", "Listen 3 Audio Service Capture",
11705 0, 0, 0, 0),
11706 SND_SOC_DAPM_AIF_OUT("LSM4_UL_HL", "Listen 4 Audio Service Capture",
11707 0, 0, 0, 0),
11708 SND_SOC_DAPM_AIF_OUT("LSM5_UL_HL", "Listen 5 Audio Service Capture",
11709 0, 0, 0, 0),
11710 SND_SOC_DAPM_AIF_OUT("LSM6_UL_HL", "Listen 6 Audio Service Capture",
11711 0, 0, 0, 0),
11712 SND_SOC_DAPM_AIF_OUT("LSM7_UL_HL", "Listen 7 Audio Service Capture",
11713 0, 0, 0, 0),
11714 SND_SOC_DAPM_AIF_OUT("LSM8_UL_HL", "Listen 8 Audio Service Capture",
11715 0, 0, 0, 0),
11716 SND_SOC_DAPM_AIF_IN("QCHAT_DL", "QCHAT Playback", 0, 0, 0, 0),
11717 SND_SOC_DAPM_AIF_OUT("QCHAT_UL", "QCHAT Capture", 0, 0, 0, 0),
11718 /* Backend AIF */
11719 /* Stream name equals to backend dai link stream name */
11720 SND_SOC_DAPM_AIF_OUT("PRI_I2S_RX", "Primary I2S Playback", 0, 0, 0, 0),
11721 SND_SOC_DAPM_AIF_OUT("SEC_I2S_RX", "Secondary I2S Playback",
11722 0, 0, 0, 0),
11723 SND_SOC_DAPM_AIF_OUT("SPDIF_RX", "SPDIF Playback", 0, 0, 0, 0),
11724 SND_SOC_DAPM_AIF_OUT("SLIMBUS_0_RX", "Slimbus Playback", 0, 0, 0, 0),
11725 SND_SOC_DAPM_AIF_OUT("SLIMBUS_2_RX", "Slimbus2 Playback", 0, 0, 0, 0),
11726 SND_SOC_DAPM_AIF_OUT("SLIMBUS_5_RX", "Slimbus5 Playback", 0, 0, 0, 0),
11727 SND_SOC_DAPM_AIF_OUT("HDMI", "HDMI Playback", 0, 0, 0, 0),
11728 SND_SOC_DAPM_AIF_OUT("DISPLAY_PORT", "Display Port Playback",
11729 0, 0, 0, 0),
11730 SND_SOC_DAPM_AIF_OUT("MI2S_RX", "MI2S Playback", 0, 0, 0, 0),
11731 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_RX", "Quaternary MI2S Playback",
11732 0, 0, 0, 0),
11733 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_RX", "Tertiary MI2S Playback",
11734 0, 0, 0, 0),
11735 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX", "Secondary MI2S Playback",
11736 0, 0, 0, 0),
11737 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX_SD1",
11738 "Secondary MI2S Playback SD1",
11739 0, 0, 0, 0),
11740 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback",
11741 0, 0, 0, 0),
11742 SND_SOC_DAPM_AIF_OUT("INT0_MI2S_RX", "INT0 MI2S Playback",
11743 0, 0, 0, 0),
11744 SND_SOC_DAPM_AIF_OUT("INT4_MI2S_RX", "INT4 MI2S Playback",
11745 0, 0, 0, 0),
11746 SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary MI2S Playback",
11747 0, 0, 0, 0),
11748 SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0),
11749 SND_SOC_DAPM_AIF_IN("MI2S_TX", "MI2S Capture", 0, 0, 0, 0),
11750 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_TX", "Quaternary MI2S Capture",
11751 0, 0, 0, 0),
11752 SND_SOC_DAPM_AIF_IN("PRI_MI2S_TX", "Primary MI2S Capture",
11753 0, 0, 0, 0),
11754 SND_SOC_DAPM_AIF_IN("TERT_MI2S_TX", "Tertiary MI2S Capture",
11755 0, 0, 0, 0),
11756 SND_SOC_DAPM_AIF_IN("INT2_MI2S_TX", "INT2 MI2S Capture",
11757 0, 0, 0, 0),
11758 SND_SOC_DAPM_AIF_IN("INT3_MI2S_TX", "INT3 MI2S Capture",
11759 0, 0, 0, 0),
11760 SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture",
11761 0, 0, 0, 0),
11762 SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0),
11763 SND_SOC_DAPM_AIF_IN("SLIMBUS_2_TX", "Slimbus2 Capture", 0, 0, 0, 0),
11764 SND_SOC_DAPM_AIF_IN("QUIN_MI2S_TX", "Quinary MI2S Capture",
11765 0, 0, 0, 0),
11766 SND_SOC_DAPM_AIF_IN("SENARY_MI2S_TX", "Senary MI2S Capture",
11767 0, 0, 0, 0),
11768 SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback",
11769 0, 0, 0, 0),
11770 SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture",
11771 0, 0, 0, 0),
11772 SND_SOC_DAPM_AIF_OUT("INT_BT_A2DP_RX", "Internal BT-A2DP Playback",
11773 0, 0, 0, 0),
11774 SND_SOC_DAPM_AIF_OUT("INT_FM_RX", "Internal FM Playback",
11775 0, 0, 0, 0),
11776 SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture",
11777 0, 0, 0, 0),
11778 SND_SOC_DAPM_AIF_OUT("PCM_RX", "AFE Playback",
11779 0, 0, 0, 0),
11780 SND_SOC_DAPM_AIF_IN("PCM_TX", "AFE Capture",
11781 0, 0, 0, 0),
11782 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_0", "Primary TDM0 Playback",
11783 0, 0, 0, 0),
11784 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_0", "Primary TDM0 Capture",
11785 0, 0, 0, 0),
11786 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_1", "Primary TDM1 Playback",
11787 0, 0, 0, 0),
11788 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_1", "Primary TDM1 Capture",
11789 0, 0, 0, 0),
11790 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_2", "Primary TDM2 Playback",
11791 0, 0, 0, 0),
11792 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_2", "Primary TDM2 Capture",
11793 0, 0, 0, 0),
11794 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_3", "Primary TDM3 Playback",
11795 0, 0, 0, 0),
11796 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_3", "Primary TDM3 Capture",
11797 0, 0, 0, 0),
11798 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_4", "Primary TDM4 Playback",
11799 0, 0, 0, 0),
11800 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_4", "Primary TDM4 Capture",
11801 0, 0, 0, 0),
11802 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_5", "Primary TDM5 Playback",
11803 0, 0, 0, 0),
11804 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_5", "Primary TDM5 Capture",
11805 0, 0, 0, 0),
11806 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_6", "Primary TDM6 Playback",
11807 0, 0, 0, 0),
11808 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_6", "Primary TDM6 Capture",
11809 0, 0, 0, 0),
11810 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_7", "Primary TDM7 Playback",
11811 0, 0, 0, 0),
11812 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_7", "Primary TDM7 Capture",
11813 0, 0, 0, 0),
11814 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_0", "Secondary TDM0 Playback",
11815 0, 0, 0, 0),
11816 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_0", "Secondary TDM0 Capture",
11817 0, 0, 0, 0),
11818 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_1", "Secondary TDM1 Playback",
11819 0, 0, 0, 0),
11820 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_1", "Secondary TDM1 Capture",
11821 0, 0, 0, 0),
11822 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_2", "Secondary TDM2 Playback",
11823 0, 0, 0, 0),
11824 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_2", "Secondary TDM2 Capture",
11825 0, 0, 0, 0),
11826 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_3", "Secondary TDM3 Playback",
11827 0, 0, 0, 0),
11828 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_3", "Secondary TDM3 Capture",
11829 0, 0, 0, 0),
11830 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_4", "Secondary TDM4 Playback",
11831 0, 0, 0, 0),
11832 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_4", "Secondary TDM4 Capture",
11833 0, 0, 0, 0),
11834 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_5", "Secondary TDM5 Playback",
11835 0, 0, 0, 0),
11836 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_5", "Secondary TDM5 Capture",
11837 0, 0, 0, 0),
11838 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_6", "Secondary TDM6 Playback",
11839 0, 0, 0, 0),
11840 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_6", "Secondary TDM6 Capture",
11841 0, 0, 0, 0),
11842 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_7", "Secondary TDM7 Playback",
11843 0, 0, 0, 0),
11844 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_7", "Secondary TDM7 Capture",
11845 0, 0, 0, 0),
11846 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_0", "Tertiary TDM0 Playback",
11847 0, 0, 0, 0),
11848 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_0", "Tertiary TDM0 Capture",
11849 0, 0, 0, 0),
11850 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_1", "Tertiary TDM1 Playback",
11851 0, 0, 0, 0),
11852 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_1", "Tertiary TDM1 Capture",
11853 0, 0, 0, 0),
11854 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_2", "Tertiary TDM2 Playback",
11855 0, 0, 0, 0),
11856 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_2", "Tertiary TDM2 Capture",
11857 0, 0, 0, 0),
11858 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_3", "Tertiary TDM3 Playback",
11859 0, 0, 0, 0),
11860 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_3", "Tertiary TDM3 Capture",
11861 0, 0, 0, 0),
11862 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_4", "Tertiary TDM4 Playback",
11863 0, 0, 0, 0),
11864 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_4", "Tertiary TDM4 Capture",
11865 0, 0, 0, 0),
11866 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_5", "Tertiary TDM5 Playback",
11867 0, 0, 0, 0),
11868 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_5", "Tertiary TDM5 Capture",
11869 0, 0, 0, 0),
11870 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_6", "Tertiary TDM6 Playback",
11871 0, 0, 0, 0),
11872 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_6", "Tertiary TDM6 Capture",
11873 0, 0, 0, 0),
11874 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_7", "Tertiary TDM7 Playback",
11875 0, 0, 0, 0),
11876 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_7", "Tertiary TDM7 Capture",
11877 0, 0, 0, 0),
11878 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_0", "Quaternary TDM0 Playback",
11879 0, 0, 0, 0),
11880 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_0", "Quaternary TDM0 Capture",
11881 0, 0, 0, 0),
11882 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_1", "Quaternary TDM1 Playback",
11883 0, 0, 0, 0),
11884 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_1", "Quaternary TDM1 Capture",
11885 0, 0, 0, 0),
11886 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_2", "Quaternary TDM2 Playback",
11887 0, 0, 0, 0),
11888 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_2", "Quaternary TDM2 Capture",
11889 0, 0, 0, 0),
11890 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_3", "Quaternary TDM3 Playback",
11891 0, 0, 0, 0),
11892 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_3", "Quaternary TDM3 Capture",
11893 0, 0, 0, 0),
11894 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_4", "Quaternary TDM4 Playback",
11895 0, 0, 0, 0),
11896 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_4", "Quaternary TDM4 Capture",
11897 0, 0, 0, 0),
11898 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_5", "Quaternary TDM5 Playback",
11899 0, 0, 0, 0),
11900 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_5", "Quaternary TDM5 Capture",
11901 0, 0, 0, 0),
11902 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_6", "Quaternary TDM6 Playback",
11903 0, 0, 0, 0),
11904 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_6", "Quaternary TDM6 Capture",
11905 0, 0, 0, 0),
11906 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_7", "Quaternary TDM7 Playback",
11907 0, 0, 0, 0),
11908 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_7", "Quaternary TDM7 Capture",
11909 0, 0, 0, 0),
11910 /* incall */
11911 SND_SOC_DAPM_AIF_OUT("VOICE_PLAYBACK_TX", "Voice Farend Playback",
11912 0, 0, 0, 0),
11913 SND_SOC_DAPM_AIF_OUT("VOICE2_PLAYBACK_TX", "Voice2 Farend Playback",
11914 0, 0, 0, 0),
11915 SND_SOC_DAPM_AIF_OUT("SLIMBUS_4_RX", "Slimbus4 Playback",
11916 0, 0, 0, 0),
11917 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_TX", "Voice Uplink Capture",
11918 0, 0, 0, 0),
11919 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_RX", "Voice Downlink Capture",
11920 0, 0, 0, 0),
11921 SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture",
11922 0, 0, 0, 0),
11923 SND_SOC_DAPM_AIF_IN("SENARY_TX", "Senary_mi2s Capture",
11924 0, 0, 0, 0),
11925 SND_SOC_DAPM_AIF_IN("INT5_MI2S_TX", "INT5 MI2S Capture",
11926 0, 0, 0, 0),
11927 SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0),
11928
11929 SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0),
11930 SND_SOC_DAPM_AIF_IN("AUX_PCM_TX", "AUX PCM Capture", 0, 0, 0, 0),
11931 SND_SOC_DAPM_AIF_OUT("SEC_AUX_PCM_RX", "Sec AUX PCM Playback",
11932 0, 0, 0, 0),
11933 SND_SOC_DAPM_AIF_IN("SEC_AUX_PCM_TX", "Sec AUX PCM Capture",
11934 0, 0, 0, 0),
11935 SND_SOC_DAPM_AIF_OUT("TERT_AUX_PCM_RX", "Tert AUX PCM Playback",
11936 0, 0, 0, 0),
11937 SND_SOC_DAPM_AIF_IN("TERT_AUX_PCM_TX", "Tert AUX PCM Capture",
11938 0, 0, 0, 0),
11939 SND_SOC_DAPM_AIF_OUT("QUAT_AUX_PCM_RX", "Quat AUX PCM Playback",
11940 0, 0, 0, 0),
11941 SND_SOC_DAPM_AIF_IN("QUAT_AUX_PCM_TX", "Quat AUX PCM Capture",
11942 0, 0, 0, 0),
11943 SND_SOC_DAPM_AIF_IN("VOICE_STUB_DL", "VOICE_STUB Playback", 0, 0, 0, 0),
11944 SND_SOC_DAPM_AIF_OUT("VOICE_STUB_UL", "VOICE_STUB Capture", 0, 0, 0, 0),
11945 SND_SOC_DAPM_AIF_IN("VOICE2_STUB_DL", "VOICE2_STUB Playback",
11946 0, 0, 0, 0),
11947 SND_SOC_DAPM_AIF_OUT("VOICE2_STUB_UL", "VOICE2_STUB Capture",
11948 0, 0, 0, 0),
11949 SND_SOC_DAPM_AIF_IN("VOLTE_STUB_DL", "VOLTE_STUB Playback", 0, 0, 0, 0),
11950 SND_SOC_DAPM_AIF_OUT("VOLTE_STUB_UL", "VOLTE_STUB Capture", 0, 0, 0, 0),
11951 SND_SOC_DAPM_AIF_OUT("STUB_RX", "Stub Playback", 0, 0, 0, 0),
11952 SND_SOC_DAPM_AIF_IN("STUB_TX", "Stub Capture", 0, 0, 0, 0),
11953 SND_SOC_DAPM_AIF_OUT("SLIMBUS_1_RX", "Slimbus1 Playback", 0, 0, 0, 0),
11954 SND_SOC_DAPM_AIF_IN("SLIMBUS_1_TX", "Slimbus1 Capture", 0, 0, 0, 0),
11955 SND_SOC_DAPM_AIF_IN("STUB_1_TX", "Stub1 Capture", 0, 0, 0, 0),
11956 SND_SOC_DAPM_AIF_OUT("SLIMBUS_3_RX", "Slimbus3 Playback", 0, 0, 0, 0),
11957 SND_SOC_DAPM_AIF_IN("SLIMBUS_3_TX", "Slimbus3 Capture", 0, 0, 0, 0),
11958 /* In- call recording */
11959 SND_SOC_DAPM_AIF_OUT("SLIMBUS_6_RX", "Slimbus6 Playback", 0, 0, 0, 0),
11960 SND_SOC_DAPM_AIF_IN("SLIMBUS_6_TX", "Slimbus6 Capture", 0, 0, 0, 0),
11961
11962 SND_SOC_DAPM_AIF_OUT("SLIMBUS_7_RX", "Slimbus7 Playback", 0, 0, 0, 0),
11963 SND_SOC_DAPM_AIF_IN("SLIMBUS_7_TX", "Slimbus7 Capture", 0, 0, 0, 0),
11964
11965 SND_SOC_DAPM_AIF_OUT("SLIMBUS_8_RX", "Slimbus8 Playback", 0, 0, 0, 0),
11966 SND_SOC_DAPM_AIF_IN("SLIMBUS_8_TX", "Slimbus8 Capture", 0, 0, 0, 0),
11967 SND_SOC_DAPM_AIF_OUT("USB_AUDIO_RX", "USB Audio Playback", 0, 0, 0, 0),
11968 SND_SOC_DAPM_AIF_IN("USB_AUDIO_TX", "USB Audio Capture", 0, 0, 0, 0),
11969
11970 /* Switch Definitions */
11971 SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0,
11972 &slim_fm_switch_mixer_controls),
11973 SND_SOC_DAPM_SWITCH("SLIMBUS1_DL_HL", SND_SOC_NOPM, 0, 0,
11974 &slim1_fm_switch_mixer_controls),
11975 SND_SOC_DAPM_SWITCH("SLIMBUS3_DL_HL", SND_SOC_NOPM, 0, 0,
11976 &slim3_fm_switch_mixer_controls),
11977 SND_SOC_DAPM_SWITCH("SLIMBUS4_DL_HL", SND_SOC_NOPM, 0, 0,
11978 &slim4_fm_switch_mixer_controls),
11979 SND_SOC_DAPM_SWITCH("SLIMBUS6_DL_HL", SND_SOC_NOPM, 0, 0,
11980 &slim6_fm_switch_mixer_controls),
11981 SND_SOC_DAPM_SWITCH("PCM_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11982 &pcm_rx_switch_mixer_controls),
11983 SND_SOC_DAPM_SWITCH("INT0_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11984 &int0_mi2s_rx_switch_mixer_controls),
11985 SND_SOC_DAPM_SWITCH("INT4_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11986 &int4_mi2s_rx_switch_mixer_controls),
11987 SND_SOC_DAPM_SWITCH("PRI_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11988 &pri_mi2s_rx_switch_mixer_controls),
11989 SND_SOC_DAPM_SWITCH("SEC_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11990 &sec_mi2s_rx_switch_mixer_controls),
11991 SND_SOC_DAPM_SWITCH("TERT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11992 &tert_mi2s_rx_switch_mixer_controls),
11993 SND_SOC_DAPM_SWITCH("QUAT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
11994 &quat_mi2s_rx_switch_mixer_controls),
11995 SND_SOC_DAPM_SWITCH("HFP_PRI_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
11996 &hfp_pri_aux_switch_mixer_controls),
11997 SND_SOC_DAPM_SWITCH("HFP_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
11998 &hfp_aux_switch_mixer_controls),
11999 SND_SOC_DAPM_SWITCH("HFP_INT_UL_HL", SND_SOC_NOPM, 0, 0,
12000 &hfp_int_switch_mixer_controls),
12001 SND_SOC_DAPM_SWITCH("HFP_SLIM7_UL_HL", SND_SOC_NOPM, 0, 0,
12002 &hfp_slim7_switch_mixer_controls),
12003 SND_SOC_DAPM_SWITCH("USB_DL_HL", SND_SOC_NOPM, 0, 0,
12004 &usb_switch_mixer_controls),
12005
12006 /* Mixer definitions */
12007 SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12008 pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)),
12009 SND_SOC_DAPM_MIXER("SEC_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12010 sec_i2s_rx_mixer_controls, ARRAY_SIZE(sec_i2s_rx_mixer_controls)),
12011 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12012 slimbus_rx_mixer_controls, ARRAY_SIZE(slimbus_rx_mixer_controls)),
12013 SND_SOC_DAPM_MIXER("SLIMBUS_2_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12014 slimbus_2_rx_mixer_controls, ARRAY_SIZE(slimbus_2_rx_mixer_controls)),
12015 SND_SOC_DAPM_MIXER("SLIMBUS_5_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12016 slimbus_5_rx_mixer_controls, ARRAY_SIZE(slimbus_5_rx_mixer_controls)),
12017 SND_SOC_DAPM_MIXER("SLIMBUS_7_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12018 slimbus_7_rx_mixer_controls, ARRAY_SIZE(slimbus_7_rx_mixer_controls)),
12019 SND_SOC_DAPM_MIXER("HDMI Mixer", SND_SOC_NOPM, 0, 0,
12020 hdmi_mixer_controls, ARRAY_SIZE(hdmi_mixer_controls)),
12021 SND_SOC_DAPM_MIXER("DISPLAY_PORT Mixer", SND_SOC_NOPM, 0, 0,
12022 display_port_mixer_controls, ARRAY_SIZE(display_port_mixer_controls)),
12023 SND_SOC_DAPM_MIXER("SPDIF_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12024 spdif_rx_mixer_controls, ARRAY_SIZE(spdif_rx_mixer_controls)),
12025 SND_SOC_DAPM_MIXER("MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12026 mi2s_rx_mixer_controls, ARRAY_SIZE(mi2s_rx_mixer_controls)),
12027 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12028 quaternary_mi2s_rx_mixer_controls,
12029 ARRAY_SIZE(quaternary_mi2s_rx_mixer_controls)),
12030 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12031 tertiary_mi2s_rx_mixer_controls,
12032 ARRAY_SIZE(tertiary_mi2s_rx_mixer_controls)),
12033 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12034 secondary_mi2s_rx_mixer_controls,
12035 ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)),
12036 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_SD1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12037 secondary_mi2s_rx2_mixer_controls,
12038 ARRAY_SIZE(secondary_mi2s_rx2_mixer_controls)),
12039 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12040 primary_mi2s_rx_mixer_controls,
12041 ARRAY_SIZE(primary_mi2s_rx_mixer_controls)),
12042 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12043 int0_mi2s_rx_mixer_controls,
12044 ARRAY_SIZE(int0_mi2s_rx_mixer_controls)),
12045 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12046 int4_mi2s_rx_mixer_controls,
12047 ARRAY_SIZE(int4_mi2s_rx_mixer_controls)),
12048 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12049 quinary_mi2s_rx_mixer_controls,
12050 ARRAY_SIZE(quinary_mi2s_rx_mixer_controls)),
12051 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12052 pri_tdm_rx_0_mixer_controls,
12053 ARRAY_SIZE(pri_tdm_rx_0_mixer_controls)),
12054 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12055 pri_tdm_rx_1_mixer_controls,
12056 ARRAY_SIZE(pri_tdm_rx_1_mixer_controls)),
12057 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12058 pri_tdm_rx_2_mixer_controls,
12059 ARRAY_SIZE(pri_tdm_rx_2_mixer_controls)),
12060 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12061 pri_tdm_rx_3_mixer_controls,
12062 ARRAY_SIZE(pri_tdm_rx_3_mixer_controls)),
12063 SND_SOC_DAPM_MIXER("PRI_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12064 pri_tdm_tx_0_mixer_controls,
12065 ARRAY_SIZE(pri_tdm_tx_0_mixer_controls)),
12066 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12067 sec_tdm_rx_0_mixer_controls,
12068 ARRAY_SIZE(sec_tdm_rx_0_mixer_controls)),
12069 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12070 sec_tdm_rx_1_mixer_controls,
12071 ARRAY_SIZE(sec_tdm_rx_1_mixer_controls)),
12072 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12073 sec_tdm_rx_2_mixer_controls,
12074 ARRAY_SIZE(sec_tdm_rx_2_mixer_controls)),
12075 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12076 sec_tdm_rx_3_mixer_controls,
12077 ARRAY_SIZE(sec_tdm_rx_3_mixer_controls)),
12078 SND_SOC_DAPM_MIXER("SEC_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12079 sec_tdm_tx_0_mixer_controls,
12080 ARRAY_SIZE(sec_tdm_tx_0_mixer_controls)),
12081 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12082 tert_tdm_rx_0_mixer_controls,
12083 ARRAY_SIZE(tert_tdm_rx_0_mixer_controls)),
12084 SND_SOC_DAPM_MIXER("TERT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12085 tert_tdm_tx_0_mixer_controls,
12086 ARRAY_SIZE(tert_tdm_tx_0_mixer_controls)),
12087 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12088 tert_tdm_rx_1_mixer_controls,
12089 ARRAY_SIZE(tert_tdm_rx_1_mixer_controls)),
12090 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12091 tert_tdm_rx_2_mixer_controls,
12092 ARRAY_SIZE(tert_tdm_rx_2_mixer_controls)),
12093 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12094 tert_tdm_rx_3_mixer_controls,
12095 ARRAY_SIZE(tert_tdm_rx_3_mixer_controls)),
12096 SND_SOC_DAPM_MIXER("TERT_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
12097 tert_tdm_rx_4_mixer_controls,
12098 ARRAY_SIZE(tert_tdm_rx_4_mixer_controls)),
12099 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12100 quat_tdm_rx_0_mixer_controls,
12101 ARRAY_SIZE(quat_tdm_rx_0_mixer_controls)),
12102 SND_SOC_DAPM_MIXER("QUAT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12103 quat_tdm_tx_0_mixer_controls,
12104 ARRAY_SIZE(quat_tdm_tx_0_mixer_controls)),
12105 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12106 quat_tdm_rx_1_mixer_controls,
12107 ARRAY_SIZE(quat_tdm_rx_1_mixer_controls)),
12108 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12109 quat_tdm_rx_2_mixer_controls,
12110 ARRAY_SIZE(quat_tdm_rx_2_mixer_controls)),
12111 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12112 quat_tdm_rx_3_mixer_controls,
12113 ARRAY_SIZE(quat_tdm_rx_3_mixer_controls)),
12114 SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
12115 mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
12116 SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
12117 mmul2_mixer_controls, ARRAY_SIZE(mmul2_mixer_controls)),
12118 SND_SOC_DAPM_MIXER("MultiMedia3 Mixer", SND_SOC_NOPM, 0, 0,
12119 mmul3_mixer_controls, ARRAY_SIZE(mmul3_mixer_controls)),
12120 SND_SOC_DAPM_MIXER("MultiMedia4 Mixer", SND_SOC_NOPM, 0, 0,
12121 mmul4_mixer_controls, ARRAY_SIZE(mmul4_mixer_controls)),
12122 SND_SOC_DAPM_MIXER("MultiMedia5 Mixer", SND_SOC_NOPM, 0, 0,
12123 mmul5_mixer_controls, ARRAY_SIZE(mmul5_mixer_controls)),
12124 SND_SOC_DAPM_MIXER("MultiMedia6 Mixer", SND_SOC_NOPM, 0, 0,
12125 mmul6_mixer_controls, ARRAY_SIZE(mmul6_mixer_controls)),
12126 SND_SOC_DAPM_MIXER("MultiMedia8 Mixer", SND_SOC_NOPM, 0, 0,
12127 mmul8_mixer_controls, ARRAY_SIZE(mmul8_mixer_controls)),
12128 SND_SOC_DAPM_MIXER("MultiMedia9 Mixer", SND_SOC_NOPM, 0, 0,
12129 mmul9_mixer_controls, ARRAY_SIZE(mmul9_mixer_controls)),
12130 SND_SOC_DAPM_MIXER("MultiMedia17 Mixer", SND_SOC_NOPM, 0, 0,
12131 mmul17_mixer_controls, ARRAY_SIZE(mmul17_mixer_controls)),
12132 SND_SOC_DAPM_MIXER("MultiMedia18 Mixer", SND_SOC_NOPM, 0, 0,
12133 mmul18_mixer_controls, ARRAY_SIZE(mmul18_mixer_controls)),
12134 SND_SOC_DAPM_MIXER("MultiMedia19 Mixer", SND_SOC_NOPM, 0, 0,
12135 mmul19_mixer_controls, ARRAY_SIZE(mmul19_mixer_controls)),
12136 SND_SOC_DAPM_MIXER("MultiMedia20 Mixer", SND_SOC_NOPM, 0, 0,
12137 mmul20_mixer_controls, ARRAY_SIZE(mmul20_mixer_controls)),
12138 SND_SOC_DAPM_MIXER("AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12139 auxpcm_rx_mixer_controls, ARRAY_SIZE(auxpcm_rx_mixer_controls)),
12140 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12141 sec_auxpcm_rx_mixer_controls, ARRAY_SIZE(sec_auxpcm_rx_mixer_controls)),
12142 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12143 tert_auxpcm_rx_mixer_controls,
12144 ARRAY_SIZE(tert_auxpcm_rx_mixer_controls)),
12145 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12146 quat_auxpcm_rx_mixer_controls,
12147 ARRAY_SIZE(quat_auxpcm_rx_mixer_controls)),
12148 /* incall */
12149 SND_SOC_DAPM_MIXER("Incall_Music Audio Mixer", SND_SOC_NOPM, 0, 0,
12150 incall_music_delivery_mixer_controls,
12151 ARRAY_SIZE(incall_music_delivery_mixer_controls)),
12152 SND_SOC_DAPM_MIXER("Incall_Music_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12153 incall_music2_delivery_mixer_controls,
12154 ARRAY_SIZE(incall_music2_delivery_mixer_controls)),
12155 SND_SOC_DAPM_MIXER("SLIMBUS_4_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12156 slimbus_4_rx_mixer_controls,
12157 ARRAY_SIZE(slimbus_4_rx_mixer_controls)),
12158 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12159 slimbus_6_rx_mixer_controls,
12160 ARRAY_SIZE(slimbus_6_rx_mixer_controls)),
12161 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12162 usb_audio_rx_mixer_controls,
12163 ARRAY_SIZE(usb_audio_rx_mixer_controls)),
12164 /* Voice Mixer */
12165 SND_SOC_DAPM_MIXER("PRI_RX_Voice Mixer",
12166 SND_SOC_NOPM, 0, 0, pri_rx_voice_mixer_controls,
12167 ARRAY_SIZE(pri_rx_voice_mixer_controls)),
12168 SND_SOC_DAPM_MIXER("SEC_RX_Voice Mixer",
12169 SND_SOC_NOPM, 0, 0,
12170 sec_i2s_rx_voice_mixer_controls,
12171 ARRAY_SIZE(sec_i2s_rx_voice_mixer_controls)),
12172 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_Voice Mixer",
12173 SND_SOC_NOPM, 0, 0,
12174 sec_mi2s_rx_voice_mixer_controls,
12175 ARRAY_SIZE(sec_mi2s_rx_voice_mixer_controls)),
12176 SND_SOC_DAPM_MIXER("SLIM_0_RX_Voice Mixer",
12177 SND_SOC_NOPM, 0, 0,
12178 slimbus_rx_voice_mixer_controls,
12179 ARRAY_SIZE(slimbus_rx_voice_mixer_controls)),
12180 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX_Voice Mixer",
12181 SND_SOC_NOPM, 0, 0,
12182 bt_sco_rx_voice_mixer_controls,
12183 ARRAY_SIZE(bt_sco_rx_voice_mixer_controls)),
12184 SND_SOC_DAPM_MIXER("AFE_PCM_RX_Voice Mixer",
12185 SND_SOC_NOPM, 0, 0,
12186 afe_pcm_rx_voice_mixer_controls,
12187 ARRAY_SIZE(afe_pcm_rx_voice_mixer_controls)),
12188 SND_SOC_DAPM_MIXER("AUX_PCM_RX_Voice Mixer",
12189 SND_SOC_NOPM, 0, 0,
12190 aux_pcm_rx_voice_mixer_controls,
12191 ARRAY_SIZE(aux_pcm_rx_voice_mixer_controls)),
12192 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX_Voice Mixer",
12193 SND_SOC_NOPM, 0, 0,
12194 sec_aux_pcm_rx_voice_mixer_controls,
12195 ARRAY_SIZE(sec_aux_pcm_rx_voice_mixer_controls)),
12196 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX_Voice Mixer",
12197 SND_SOC_NOPM, 0, 0,
12198 tert_aux_pcm_rx_voice_mixer_controls,
12199 ARRAY_SIZE(tert_aux_pcm_rx_voice_mixer_controls)),
12200 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX_Voice Mixer",
12201 SND_SOC_NOPM, 0, 0,
12202 quat_aux_pcm_rx_voice_mixer_controls,
12203 ARRAY_SIZE(quat_aux_pcm_rx_voice_mixer_controls)),
12204 SND_SOC_DAPM_MIXER("HDMI_RX_Voice Mixer",
12205 SND_SOC_NOPM, 0, 0,
12206 hdmi_rx_voice_mixer_controls,
12207 ARRAY_SIZE(hdmi_rx_voice_mixer_controls)),
12208 SND_SOC_DAPM_MIXER("MI2S_RX_Voice Mixer",
12209 SND_SOC_NOPM, 0, 0,
12210 mi2s_rx_voice_mixer_controls,
12211 ARRAY_SIZE(mi2s_rx_voice_mixer_controls)),
12212 SND_SOC_DAPM_MIXER("PRI_MI2S_RX_Voice Mixer",
12213 SND_SOC_NOPM, 0, 0,
12214 pri_mi2s_rx_voice_mixer_controls,
12215 ARRAY_SIZE(pri_mi2s_rx_voice_mixer_controls)),
12216 SND_SOC_DAPM_MIXER("INT0_MI2S_RX_Voice Mixer",
12217 SND_SOC_NOPM, 0, 0,
12218 int0_mi2s_rx_voice_mixer_controls,
12219 ARRAY_SIZE(int0_mi2s_rx_voice_mixer_controls)),
12220 SND_SOC_DAPM_MIXER("INT4_MI2S_RX_Voice Mixer",
12221 SND_SOC_NOPM, 0, 0,
12222 int4_mi2s_rx_voice_mixer_controls,
12223 ARRAY_SIZE(int4_mi2s_rx_voice_mixer_controls)),
12224 SND_SOC_DAPM_MIXER("TERT_MI2S_RX_Voice Mixer",
12225 SND_SOC_NOPM, 0, 0,
12226 tert_mi2s_rx_voice_mixer_controls,
12227 ARRAY_SIZE(tert_mi2s_rx_voice_mixer_controls)),
12228 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX_Voice Mixer",
12229 SND_SOC_NOPM, 0, 0,
12230 quat_mi2s_rx_voice_mixer_controls,
12231 ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)),
12232 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX_Voice Mixer",
12233 SND_SOC_NOPM, 0, 0,
12234 quin_mi2s_rx_voice_mixer_controls,
12235 ARRAY_SIZE(quin_mi2s_rx_voice_mixer_controls)),
12236 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2_Voice Mixer",
12237 SND_SOC_NOPM, 0, 0,
12238 quat_tdm_rx_2_voice_mixer_controls,
12239 ARRAY_SIZE(quat_tdm_rx_2_voice_mixer_controls)),
12240 SND_SOC_DAPM_MIXER("Voice_Tx Mixer",
12241 SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls,
12242 ARRAY_SIZE(tx_voice_mixer_controls)),
12243 SND_SOC_DAPM_MIXER("Voice2_Tx Mixer",
12244 SND_SOC_NOPM, 0, 0, tx_voice2_mixer_controls,
12245 ARRAY_SIZE(tx_voice2_mixer_controls)),
12246 SND_SOC_DAPM_MIXER("Voip_Tx Mixer",
12247 SND_SOC_NOPM, 0, 0, tx_voip_mixer_controls,
12248 ARRAY_SIZE(tx_voip_mixer_controls)),
12249 SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer",
12250 SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls,
12251 ARRAY_SIZE(tx_volte_mixer_controls)),
12252 SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer",
12253 SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls,
12254 ARRAY_SIZE(tx_vowlan_mixer_controls)),
12255 SND_SOC_DAPM_MIXER("VoiceMMode1_Tx Mixer",
12256 SND_SOC_NOPM, 0, 0, tx_voicemmode1_mixer_controls,
12257 ARRAY_SIZE(tx_voicemmode1_mixer_controls)),
12258 SND_SOC_DAPM_MIXER("VoiceMMode2_Tx Mixer",
12259 SND_SOC_NOPM, 0, 0, tx_voicemmode2_mixer_controls,
12260 ARRAY_SIZE(tx_voicemmode2_mixer_controls)),
12261 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12262 int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)),
12263 SND_SOC_DAPM_MIXER("INTERNAL_A2DP_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12264 int_bt_a2dp_rx_mixer_controls,
12265 ARRAY_SIZE(int_bt_a2dp_rx_mixer_controls)),
12266 SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12267 int_fm_rx_mixer_controls, ARRAY_SIZE(int_fm_rx_mixer_controls)),
12268 SND_SOC_DAPM_MIXER("AFE_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12269 afe_pcm_rx_mixer_controls, ARRAY_SIZE(afe_pcm_rx_mixer_controls)),
12270 SND_SOC_DAPM_MIXER("Voice Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12271 tx_voice_stub_mixer_controls, ARRAY_SIZE(tx_voice_stub_mixer_controls)),
12272 SND_SOC_DAPM_MIXER("Voice2 Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12273 tx_voice2_stub_mixer_controls,
12274 ARRAY_SIZE(tx_voice2_stub_mixer_controls)),
12275 SND_SOC_DAPM_MIXER("VoLTE Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12276 tx_volte_stub_mixer_controls, ARRAY_SIZE(tx_volte_stub_mixer_controls)),
12277 SND_SOC_DAPM_MIXER("STUB_RX Mixer", SND_SOC_NOPM, 0, 0,
12278 stub_rx_mixer_controls, ARRAY_SIZE(stub_rx_mixer_controls)),
12279 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Mixer", SND_SOC_NOPM, 0, 0,
12280 slimbus_1_rx_mixer_controls, ARRAY_SIZE(slimbus_1_rx_mixer_controls)),
12281 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12282 slimbus_3_rx_mixer_controls, ARRAY_SIZE(slimbus_3_rx_mixer_controls)),
12283 SND_SOC_DAPM_MIXER("SLIM_6_RX_Voice Mixer",
12284 SND_SOC_NOPM, 0, 0,
12285 slimbus_6_rx_voice_mixer_controls,
12286 ARRAY_SIZE(slimbus_6_rx_voice_mixer_controls)),
12287 SND_SOC_DAPM_MIXER("SLIM_7_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12288 slimbus_7_rx_voice_mixer_controls,
12289 ARRAY_SIZE(slimbus_7_rx_voice_mixer_controls)),
12290 SND_SOC_DAPM_MIXER("SLIM_8_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12291 slimbus_8_rx_voice_mixer_controls,
12292 ARRAY_SIZE(slimbus_8_rx_voice_mixer_controls)),
12293 /* port mixer */
12294 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Port Mixer",
12295 SND_SOC_NOPM, 0, 0, sbus_0_rx_port_mixer_controls,
12296 ARRAY_SIZE(sbus_0_rx_port_mixer_controls)),
12297 SND_SOC_DAPM_MIXER("AUX_PCM_RX Port Mixer",
12298 SND_SOC_NOPM, 0, 0, aux_pcm_rx_port_mixer_controls,
12299 ARRAY_SIZE(aux_pcm_rx_port_mixer_controls)),
12300 SND_SOC_DAPM_MIXER("SEC_AUXPCM_RX Port Mixer",
12301 SND_SOC_NOPM, 0, 0, sec_auxpcm_rx_port_mixer_controls,
12302 ARRAY_SIZE(sec_auxpcm_rx_port_mixer_controls)),
12303 SND_SOC_DAPM_MIXER("TERT_AUXPCM_RX Port Mixer",
12304 SND_SOC_NOPM, 0, 0, tert_auxpcm_rx_port_mixer_controls,
12305 ARRAY_SIZE(tert_auxpcm_rx_port_mixer_controls)),
12306 SND_SOC_DAPM_MIXER("QUAT_AUXPCM_RX Port Mixer",
12307 SND_SOC_NOPM, 0, 0, quat_auxpcm_rx_port_mixer_controls,
12308 ARRAY_SIZE(quat_auxpcm_rx_port_mixer_controls)),
12309 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12310 sbus_1_rx_port_mixer_controls,
12311 ARRAY_SIZE(sbus_1_rx_port_mixer_controls)),
12312 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12313 bt_sco_rx_port_mixer_controls,
12314 ARRAY_SIZE(bt_sco_rx_port_mixer_controls)),
12315 SND_SOC_DAPM_MIXER("AFE_PCM_RX Port Mixer",
12316 SND_SOC_NOPM, 0, 0, afe_pcm_rx_port_mixer_controls,
12317 ARRAY_SIZE(afe_pcm_rx_port_mixer_controls)),
12318 SND_SOC_DAPM_MIXER("HDMI_RX Port Mixer",
12319 SND_SOC_NOPM, 0, 0, hdmi_rx_port_mixer_controls,
12320 ARRAY_SIZE(hdmi_rx_port_mixer_controls)),
12321 SND_SOC_DAPM_MIXER("DISPLAY_PORT_RX Port Mixer",
12322 SND_SOC_NOPM, 0, 0, display_port_rx_port_mixer_controls,
12323 ARRAY_SIZE(display_port_rx_port_mixer_controls)),
12324 SND_SOC_DAPM_MIXER("SEC_I2S_RX Port Mixer",
12325 SND_SOC_NOPM, 0, 0, sec_i2s_rx_port_mixer_controls,
12326 ARRAY_SIZE(sec_i2s_rx_port_mixer_controls)),
12327 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX Port Mixer",
12328 SND_SOC_NOPM, 0, 0, sbus_3_rx_port_mixer_controls,
12329 ARRAY_SIZE(sbus_3_rx_port_mixer_controls)),
12330 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Port Mixer",
12331 SND_SOC_NOPM, 0, 0, sbus_6_rx_port_mixer_controls,
12332 ARRAY_SIZE(sbus_6_rx_port_mixer_controls)),
12333 SND_SOC_DAPM_MIXER("MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12334 mi2s_rx_port_mixer_controls, ARRAY_SIZE(mi2s_rx_port_mixer_controls)),
12335 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12336 primary_mi2s_rx_port_mixer_controls,
12337 ARRAY_SIZE(primary_mi2s_rx_port_mixer_controls)),
12338 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12339 sec_mi2s_rx_port_mixer_controls,
12340 ARRAY_SIZE(sec_mi2s_rx_port_mixer_controls)),
12341 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12342 tert_mi2s_rx_port_mixer_controls,
12343 ARRAY_SIZE(tert_mi2s_rx_port_mixer_controls)),
12344 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12345 quat_mi2s_rx_port_mixer_controls,
12346 ARRAY_SIZE(quat_mi2s_rx_port_mixer_controls)),
12347 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12348 pri_tdm_rx_0_port_mixer_controls,
12349 ARRAY_SIZE(pri_tdm_rx_0_port_mixer_controls)),
12350 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12351 pri_tdm_rx_1_port_mixer_controls,
12352 ARRAY_SIZE(pri_tdm_rx_1_port_mixer_controls)),
12353 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12354 pri_tdm_rx_2_port_mixer_controls,
12355 ARRAY_SIZE(pri_tdm_rx_2_port_mixer_controls)),
12356 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12357 pri_tdm_rx_3_port_mixer_controls,
12358 ARRAY_SIZE(pri_tdm_rx_3_port_mixer_controls)),
12359 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12360 sec_tdm_rx_0_port_mixer_controls,
12361 ARRAY_SIZE(sec_tdm_rx_0_port_mixer_controls)),
12362 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12363 sec_tdm_rx_1_port_mixer_controls,
12364 ARRAY_SIZE(sec_tdm_rx_1_port_mixer_controls)),
12365 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12366 sec_tdm_rx_2_port_mixer_controls,
12367 ARRAY_SIZE(sec_tdm_rx_2_port_mixer_controls)),
12368 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12369 sec_tdm_rx_3_port_mixer_controls,
12370 ARRAY_SIZE(sec_tdm_rx_3_port_mixer_controls)),
12371 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12372 tert_tdm_rx_0_port_mixer_controls,
12373 ARRAY_SIZE(tert_tdm_rx_0_port_mixer_controls)),
12374 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12375 tert_tdm_rx_1_port_mixer_controls,
12376 ARRAY_SIZE(tert_tdm_rx_1_port_mixer_controls)),
12377 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12378 tert_tdm_rx_2_port_mixer_controls,
12379 ARRAY_SIZE(tert_tdm_rx_2_port_mixer_controls)),
12380 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12381 tert_tdm_rx_3_port_mixer_controls,
12382 ARRAY_SIZE(tert_tdm_rx_3_port_mixer_controls)),
12383 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12384 quat_tdm_rx_0_port_mixer_controls,
12385 ARRAY_SIZE(quat_tdm_rx_0_port_mixer_controls)),
12386 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12387 quat_tdm_rx_1_port_mixer_controls,
12388 ARRAY_SIZE(quat_tdm_rx_1_port_mixer_controls)),
12389 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12390 quat_tdm_rx_2_port_mixer_controls,
12391 ARRAY_SIZE(quat_tdm_rx_2_port_mixer_controls)),
12392 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12393 quat_tdm_rx_3_port_mixer_controls,
12394 ARRAY_SIZE(quat_tdm_rx_3_port_mixer_controls)),
12395 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12396 int0_mi2s_rx_port_mixer_controls,
12397 ARRAY_SIZE(int0_mi2s_rx_port_mixer_controls)),
12398 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12399 int4_mi2s_rx_port_mixer_controls,
12400 ARRAY_SIZE(int4_mi2s_rx_port_mixer_controls)),
12401 SND_SOC_DAPM_MIXER("QCHAT_Tx Mixer",
12402 SND_SOC_NOPM, 0, 0, tx_qchat_mixer_controls,
12403 ARRAY_SIZE(tx_qchat_mixer_controls)),
12404 SND_SOC_DAPM_MIXER("USB_AUDIO_RX_Voice Mixer",
12405 SND_SOC_NOPM, 0, 0, usb_audio_rx_voice_mixer_controls,
12406 ARRAY_SIZE(usb_audio_rx_voice_mixer_controls)),
12407 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer",
12408 SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls,
12409 ARRAY_SIZE(usb_rx_port_mixer_controls)),
12410 /* lsm mixer definitions */
12411 SND_SOC_DAPM_MIXER("LSM1 Mixer", SND_SOC_NOPM, 0, 0,
12412 lsm1_mixer_controls, ARRAY_SIZE(lsm1_mixer_controls)),
12413 SND_SOC_DAPM_MIXER("LSM2 Mixer", SND_SOC_NOPM, 0, 0,
12414 lsm2_mixer_controls, ARRAY_SIZE(lsm2_mixer_controls)),
12415 SND_SOC_DAPM_MIXER("LSM3 Mixer", SND_SOC_NOPM, 0, 0,
12416 lsm3_mixer_controls, ARRAY_SIZE(lsm3_mixer_controls)),
12417 SND_SOC_DAPM_MIXER("LSM4 Mixer", SND_SOC_NOPM, 0, 0,
12418 lsm4_mixer_controls, ARRAY_SIZE(lsm4_mixer_controls)),
12419 SND_SOC_DAPM_MIXER("LSM5 Mixer", SND_SOC_NOPM, 0, 0,
12420 lsm5_mixer_controls, ARRAY_SIZE(lsm5_mixer_controls)),
12421 SND_SOC_DAPM_MIXER("LSM6 Mixer", SND_SOC_NOPM, 0, 0,
12422 lsm6_mixer_controls, ARRAY_SIZE(lsm6_mixer_controls)),
12423 SND_SOC_DAPM_MIXER("LSM7 Mixer", SND_SOC_NOPM, 0, 0,
12424 lsm7_mixer_controls, ARRAY_SIZE(lsm7_mixer_controls)),
12425 SND_SOC_DAPM_MIXER("LSM8 Mixer", SND_SOC_NOPM, 0, 0,
12426 lsm8_mixer_controls, ARRAY_SIZE(lsm8_mixer_controls)),
12427 /* Virtual Pins to force backends ON atm */
12428 SND_SOC_DAPM_OUTPUT("BE_OUT"),
12429 SND_SOC_DAPM_INPUT("BE_IN"),
12430
12431 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_LCH_MUX", SND_SOC_NOPM, 0, 0,
12432 &slim0_rx_vi_fb_lch_mux),
12433 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_RCH_MUX", SND_SOC_NOPM, 0, 0,
12434 &slim0_rx_vi_fb_rch_mux),
12435 SND_SOC_DAPM_MUX("PRI_MI2S_RX_VI_FB_MUX", SND_SOC_NOPM, 0, 0,
12436 &mi2s_rx_vi_fb_mux),
12437 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_MONO_CH_MUX", SND_SOC_NOPM, 0, 0,
12438 &int4_mi2s_rx_vi_fb_mono_ch_mux),
12439 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", SND_SOC_NOPM, 0, 0,
12440 &int4_mi2s_rx_vi_fb_stereo_ch_mux),
12441
12442 SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0,
12443 &voc_ext_ec_mux),
12444 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL1 MUX", SND_SOC_NOPM, 0, 0,
12445 &ext_ec_ref_mux_ul1),
12446 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL2 MUX", SND_SOC_NOPM, 0, 0,
12447 &ext_ec_ref_mux_ul2),
12448 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL3 MUX", SND_SOC_NOPM, 0, 0,
12449 &ext_ec_ref_mux_ul3),
12450 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL4 MUX", SND_SOC_NOPM, 0, 0,
12451 &ext_ec_ref_mux_ul4),
12452 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL5 MUX", SND_SOC_NOPM, 0, 0,
12453 &ext_ec_ref_mux_ul5),
12454 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL6 MUX", SND_SOC_NOPM, 0, 0,
12455 &ext_ec_ref_mux_ul6),
12456 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL8 MUX", SND_SOC_NOPM, 0, 0,
12457 &ext_ec_ref_mux_ul8),
12458 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL9 MUX", SND_SOC_NOPM, 0, 0,
12459 &ext_ec_ref_mux_ul9),
12460 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL17 MUX", SND_SOC_NOPM, 0, 0,
12461 &ext_ec_ref_mux_ul17),
12462 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL18 MUX", SND_SOC_NOPM, 0, 0,
12463 &ext_ec_ref_mux_ul18),
12464 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL19 MUX", SND_SOC_NOPM, 0, 0,
12465 &ext_ec_ref_mux_ul19),
12466};
12467
12468static const struct snd_soc_dapm_route intercon[] = {
12469 {"PRI_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12470 {"PRI_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12471 {"PRI_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12472 {"PRI_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12473 {"PRI_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12474 {"PRI_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12475 {"PRI_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12476 {"PRI_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12477 {"PRI_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12478 {"PRI_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12479 {"PRI_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12480 {"PRI_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12481 {"PRI_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12482 {"PRI_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12483 {"PRI_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12484 {"PRI_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12485 {"PRI_I2S_RX", NULL, "PRI_RX Audio Mixer"},
12486
12487 {"SEC_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12488 {"SEC_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12489 {"SEC_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12490 {"SEC_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12491 {"SEC_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12492 {"SEC_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12493 {"SEC_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12494 {"SEC_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12495 {"SEC_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12496 {"SEC_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12497 {"SEC_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12498 {"SEC_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12499 {"SEC_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12500 {"SEC_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12501 {"SEC_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12502 {"SEC_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12503 {"SEC_I2S_RX", NULL, "SEC_RX Audio Mixer"},
12504
12505 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12506 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12507 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12508 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12509 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12510 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12511 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12512 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12513 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12514 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12515 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12516 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12517 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12518 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12519 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12520 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12521 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Audio Mixer"},
12522
12523 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12524 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12525 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12526 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12527 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12528 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12529 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12530 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12531 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12532 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12533 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12534 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12535 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12536 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12537 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12538 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12539 {"SLIMBUS_2_RX", NULL, "SLIMBUS_2_RX Audio Mixer"},
12540
12541 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12542 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12543 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12544 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12545 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12546 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12547 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12548 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12549 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12550 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12551 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12552 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12553 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12554 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12555 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12556 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12557 {"SLIMBUS_5_RX", NULL, "SLIMBUS_5_RX Audio Mixer"},
12558
12559 {"HDMI Mixer", "MultiMedia1", "MM_DL1"},
12560 {"HDMI Mixer", "MultiMedia2", "MM_DL2"},
12561 {"HDMI Mixer", "MultiMedia3", "MM_DL3"},
12562 {"HDMI Mixer", "MultiMedia4", "MM_DL4"},
12563 {"HDMI Mixer", "MultiMedia5", "MM_DL5"},
12564 {"HDMI Mixer", "MultiMedia6", "MM_DL6"},
12565 {"HDMI Mixer", "MultiMedia7", "MM_DL7"},
12566 {"HDMI Mixer", "MultiMedia8", "MM_DL8"},
12567 {"HDMI Mixer", "MultiMedia9", "MM_DL9"},
12568 {"HDMI Mixer", "MultiMedia10", "MM_DL10"},
12569 {"HDMI Mixer", "MultiMedia11", "MM_DL11"},
12570 {"HDMI Mixer", "MultiMedia12", "MM_DL12"},
12571 {"HDMI Mixer", "MultiMedia13", "MM_DL13"},
12572 {"HDMI Mixer", "MultiMedia14", "MM_DL14"},
12573 {"HDMI Mixer", "MultiMedia15", "MM_DL15"},
12574 {"HDMI Mixer", "MultiMedia16", "MM_DL16"},
12575 {"HDMI", NULL, "HDMI Mixer"},
12576
12577 {"DISPLAY_PORT Mixer", "MultiMedia1", "MM_DL1"},
12578 {"DISPLAY_PORT Mixer", "MultiMedia2", "MM_DL2"},
12579 {"DISPLAY_PORT Mixer", "MultiMedia3", "MM_DL3"},
12580 {"DISPLAY_PORT Mixer", "MultiMedia4", "MM_DL4"},
12581 {"DISPLAY_PORT Mixer", "MultiMedia5", "MM_DL5"},
12582 {"DISPLAY_PORT Mixer", "MultiMedia6", "MM_DL6"},
12583 {"DISPLAY_PORT Mixer", "MultiMedia7", "MM_DL7"},
12584 {"DISPLAY_PORT Mixer", "MultiMedia8", "MM_DL8"},
12585 {"DISPLAY_PORT Mixer", "MultiMedia9", "MM_DL9"},
12586 {"DISPLAY_PORT Mixer", "MultiMedia10", "MM_DL10"},
12587 {"DISPLAY_PORT Mixer", "MultiMedia11", "MM_DL11"},
12588 {"DISPLAY_PORT Mixer", "MultiMedia12", "MM_DL12"},
12589 {"DISPLAY_PORT Mixer", "MultiMedia13", "MM_DL13"},
12590 {"DISPLAY_PORT Mixer", "MultiMedia14", "MM_DL14"},
12591 {"DISPLAY_PORT Mixer", "MultiMedia15", "MM_DL15"},
12592 {"DISPLAY_PORT Mixer", "MultiMedia16", "MM_DL16"},
12593 {"DISPLAY_PORT", NULL, "DISPLAY_PORT Mixer"},
12594
12595 {"SPDIF_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12596 {"SPDIF_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12597 {"SPDIF_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12598 {"SPDIF_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12599 {"SPDIF_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12600 {"SPDIF_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12601 {"SPDIF_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12602 {"SPDIF_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12603 {"SPDIF_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12604 {"SPDIF_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12605 {"SPDIF_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12606 {"SPDIF_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12607 {"SPDIF_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12608 {"SPDIF_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12609 {"SPDIF_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12610 {"SPDIF_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12611 {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"},
12612
12613 /* incall */
12614 {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"},
12615 {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"},
12616 {"Incall_Music Audio Mixer", "MultiMedia5", "MM_DL5"},
12617 {"Incall_Music Audio Mixer", "MultiMedia9", "MM_DL9"},
12618 {"VOICE_PLAYBACK_TX", NULL, "Incall_Music Audio Mixer"},
12619 {"Incall_Music_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
12620 {"Incall_Music_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
12621 {"Incall_Music_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
12622 {"Incall_Music_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
12623 {"VOICE2_PLAYBACK_TX", NULL, "Incall_Music_2 Audio Mixer"},
12624 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12625 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12626 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12627 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12628 {"SLIMBUS_4_RX", NULL, "SLIMBUS_4_RX Audio Mixer"},
12629
12630 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12631 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12632 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12633 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12634 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12635 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12636 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12637 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12638 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12639 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12640 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12641 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12642 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12643 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12644 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12645 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12646 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Audio Mixer"},
12647
12648 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12649 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12650 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12651 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12652 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12653 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12654 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12655 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12656 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12657 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12658 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12659 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12660 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12661 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12662 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12663 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12664 {"SLIMBUS_7_RX", NULL, "SLIMBUS_7_RX Audio Mixer"},
12665
12666 {"USB_AUDIO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12667 {"USB_AUDIO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12668 {"USB_AUDIO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12669 {"USB_AUDIO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12670 {"USB_AUDIO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12671 {"USB_AUDIO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12672 {"USB_AUDIO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12673 {"USB_AUDIO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12674 {"USB_AUDIO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12675 {"USB_AUDIO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12676 {"USB_AUDIO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12677 {"USB_AUDIO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12678 {"USB_AUDIO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12679 {"USB_AUDIO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12680 {"USB_AUDIO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12681 {"USB_AUDIO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12682 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Audio Mixer"},
12683
12684 {"MultiMedia1 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12685 {"MultiMedia4 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12686 {"MultiMedia8 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12687 {"MultiMedia1 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12688 {"MultiMedia4 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12689 {"MultiMedia8 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12690 {"MultiMedia1 Mixer", "SLIM_4_TX", "SLIMBUS_4_TX"},
12691 {"MultiMedia1 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12692 {"MultiMedia1 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12693 {"MultiMedia1 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
12694 {"MultiMedia8 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12695 {"MultiMedia8 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12696 {"MultiMedia4 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12697 {"MultiMedia17 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12698 {"MultiMedia18 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12699 {"MultiMedia19 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12700 {"MultiMedia8 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12701 {"MultiMedia2 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12702 {"MultiMedia4 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12703 {"MultiMedia17 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12704 {"MultiMedia18 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12705 {"MultiMedia19 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12706 {"MultiMedia8 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12707 {"MultiMedia18 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
12708 {"MultiMedia8 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
12709 {"MultiMedia3 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12710 {"MultiMedia5 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12711 {"MultiMedia5 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12712 {"MultiMedia5 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
12713 {"MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12714 {"MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12715 {"MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12716 {"MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12717 {"MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12718 {"MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12719 {"MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12720 {"MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12721 {"MI2S_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12722 {"MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12723 {"MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12724 {"MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12725 {"MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12726 {"MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12727 {"MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12728 {"MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12729 {"MI2S_RX", NULL, "MI2S_RX Audio Mixer"},
12730
12731 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12732 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12733 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12734 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12735 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12736 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12737 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12738 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12739 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12740 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12741 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12742 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12743 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12744 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12745 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12746 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Audio Mixer"},
12747
12748 {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12749 {"TERT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12750 {"TERT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12751 {"TERT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12752 {"TERT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12753 {"TERT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12754 {"TERT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12755 {"TERT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12756 {"TERT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12757 {"TERT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12758 {"TERT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12759 {"TERT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12760 {"TERT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12761 {"TERT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12762 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Audio Mixer"},
12763
12764 {"SEC_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12765 {"SEC_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12766 {"SEC_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12767 {"SEC_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12768 {"SEC_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12769 {"SEC_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12770 {"SEC_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12771 {"SEC_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12772 {"SEC_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12773 {"SEC_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12774 {"SEC_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12775 {"SEC_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12776 {"SEC_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12777 {"SEC_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12778 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"},
12779
12780 {"SEC_MI2S_RX_SD1 Audio Mixer", "MultiMedia6", "MM_DL6"},
12781 {"SEC_MI2S_RX_SD1", NULL, "SEC_MI2S_RX_SD1 Audio Mixer"},
12782
12783 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12784 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
12785
12786 {"PRI_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12787 {"PRI_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12788 {"PRI_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12789 {"PRI_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12790 {"PRI_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12791 {"PRI_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12792 {"PRI_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12793 {"PRI_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12794 {"PRI_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12795 {"PRI_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12796 {"PRI_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12797 {"PRI_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12798 {"PRI_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12799 {"PRI_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12800 {"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12801 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
12802
12803 {"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12804 {"INT0_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12805 {"INT0_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12806 {"INT0_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12807 {"INT0_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12808 {"INT0_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12809 {"INT0_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12810 {"INT0_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12811 {"INT0_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12812 {"INT0_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12813 {"INT0_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12814 {"INT0_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12815 {"INT0_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12816 {"INT0_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12817 {"INT0_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12818 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Audio Mixer"},
12819
12820 {"INT4_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12821 {"INT4_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12822 {"INT4_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12823 {"INT4_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12824 {"INT4_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12825 {"INT4_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12826 {"INT4_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12827 {"INT4_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12828 {"INT4_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12829 {"INT4_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12830 {"INT4_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12831 {"INT4_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12832 {"INT4_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12833 {"INT4_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12834 {"INT4_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12835 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Audio Mixer"},
12836
12837 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12838 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12839 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12840 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12841 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12842 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12843 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12844 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12845 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12846 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12847 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12848 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12849 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12850 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12851 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12852 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12853 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12854 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX Audio Mixer"},
12855
12856 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
12857 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
12858 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
12859 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
12860 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
12861 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
12862 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
12863 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
12864 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
12865 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
12866 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
12867 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
12868 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
12869 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
12870 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
12871 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
12872 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
12873
12874 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
12875 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
12876 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
12877 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
12878 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
12879 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
12880 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
12881 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
12882 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
12883 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
12884 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
12885 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
12886 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
12887 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
12888 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
12889 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
12890 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Audio Mixer"},
12891
12892 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
12893 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
12894 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
12895 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
12896 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
12897 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
12898 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
12899 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
12900 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
12901 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
12902 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
12903 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
12904 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
12905 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
12906 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
12907 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
12908 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Audio Mixer"},
12909
12910 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
12911 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
12912 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
12913 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
12914 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
12915 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
12916 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
12917 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
12918 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
12919 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
12920 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
12921 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
12922 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
12923 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
12924 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
12925 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
12926 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Audio Mixer"},
12927
12928 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
12929 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
12930 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
12931 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
12932 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
12933 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
12934 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
12935 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
12936 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
12937 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
12938 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
12939 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
12940 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
12941 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
12942 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
12943 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
12944 {"PRI_TDM_TX_0", NULL, "PRI_TDM_TX_0 Audio Mixer"},
12945
12946 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
12947 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
12948 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
12949 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
12950 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
12951 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
12952 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
12953 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
12954 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
12955 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
12956 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
12957 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
12958 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
12959 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
12960 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
12961 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
12962 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
12963
12964 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
12965 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
12966 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
12967 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
12968 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
12969 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
12970 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
12971 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
12972 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
12973 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
12974 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
12975 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
12976 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
12977 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
12978 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
12979 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
12980 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Audio Mixer"},
12981
12982 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
12983 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
12984 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
12985 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
12986 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
12987 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
12988 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
12989 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
12990 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
12991 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
12992 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
12993 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
12994 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
12995 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
12996 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
12997 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
12998 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Audio Mixer"},
12999
13000 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13001 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13002 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13003 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13004 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13005 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13006 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13007 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13008 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13009 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13010 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13011 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13012 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13013 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13014 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13015 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13016 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Audio Mixer"},
13017
13018 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13019 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13020 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13021 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13022 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13023 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13024 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13025 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13026 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13027 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13028 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13029 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13030 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13031 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13032 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13033 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13034 {"SEC_TDM_TX_0", NULL, "SEC_TDM_TX_0 Audio Mixer"},
13035
13036 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13037 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13038 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13039 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13040 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13041 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13042 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13043 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13044 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13045 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13046 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13047 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13048 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13049 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13050 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13051 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13052 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Audio Mixer"},
13053
13054 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13055 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13056 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13057 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13058 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13059 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13060 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13061 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13062 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13063 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13064 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13065 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13066 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13067 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13068 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13069 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13070 {"TERT_TDM_TX_0", NULL, "TERT_TDM_TX_0 Audio Mixer"},
13071
13072 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13073 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13074 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13075 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13076 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13077 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13078 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13079 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13080 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13081 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13082 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13083 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13084 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13085 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13086 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13087 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13088 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Audio Mixer"},
13089
13090 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13091 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13092 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13093 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13094 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13095 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13096 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13097 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13098 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13099 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13100 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13101 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13102 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13103 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13104 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13105 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13106 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Audio Mixer"},
13107
13108 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13109 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13110 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13111 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13112 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13113 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13114 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13115 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13116 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13117 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13118 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13119 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13120 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13121 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13122 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13123 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13124 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Audio Mixer"},
13125
13126 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia1", "MM_DL1"},
13127 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia2", "MM_DL2"},
13128 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia3", "MM_DL3"},
13129 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia4", "MM_DL4"},
13130 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia5", "MM_DL5"},
13131 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia6", "MM_DL6"},
13132 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia7", "MM_DL7"},
13133 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia8", "MM_DL8"},
13134 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia9", "MM_DL9"},
13135 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia10", "MM_DL10"},
13136 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia11", "MM_DL11"},
13137 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia12", "MM_DL12"},
13138 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia13", "MM_DL13"},
13139 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia14", "MM_DL14"},
13140 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia15", "MM_DL15"},
13141 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia16", "MM_DL16"},
13142 {"TERT_TDM_RX_4", NULL, "TERT_TDM_RX_4 Audio Mixer"},
13143
13144 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13145 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13146 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13147 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13148 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13149 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13150 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13151 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13152 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13153 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13154 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13155 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13156 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13157 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13158 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13159 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13160 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia20", "MM_DL20"},
13161 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Audio Mixer"},
13162
13163 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13164 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13165 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13166 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13167 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13168 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13169 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13170 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13171 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13172 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13173 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13174 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13175 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13176 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13177 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13178 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13179 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
13180
13181 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13182 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13183 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13184 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13185 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13186 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13187 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13188 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13189 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13190 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13191 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13192 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13193 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13194 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13195 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13196 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13197 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
13198
13199 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13200 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13201 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13202 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13203 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13204 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13205 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13206 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13207 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13208 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13209 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13210 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13211 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13212 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13213 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13214 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13215 {"QUAT_TDM_TX_0", NULL, "QUAT_TDM_TX_0 Audio Mixer"},
13216
13217 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13218 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13219 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13220 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13221 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13222 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13223 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13224 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13225 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13226 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13227 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13228 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13229 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13230 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13231 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13232 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13233 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia20", "MM_DL20"},
13234 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Audio Mixer"},
13235
13236 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13237 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13238 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13239 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13240 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13241 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13242 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13243 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13244 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13245 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13246 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13247 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13248 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13249 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13250 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13251 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13252 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia20", "MM_DL20"},
13253 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Audio Mixer"},
13254
13255 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13256 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13257 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13258 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13259 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13260 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13261 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13262 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13263 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13264 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13265 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13266 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13267 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13268 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13269 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13270 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13271 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia20", "MM_DL20"},
13272 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Audio Mixer"},
13273
13274 {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"},
13275 {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"},
13276 {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"},
13277 {"MultiMedia3 Mixer", "MI2S_TX", "MI2S_TX"},
13278 {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"},
13279 {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13280 {"MultiMedia2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13281 {"MultiMedia6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13282 {"MultiMedia1 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13283 {"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13284 {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13285 {"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13286 {"MultiMedia1 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13287 {"MultiMedia2 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13288 {"MultiMedia1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13289 {"MultiMedia2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13290 {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13291 {"MultiMedia1 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13292 {"MultiMedia3 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
13293 {"MultiMedia5 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13294 {"MultiMedia1 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13295 {"MultiMedia3 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
13296 {"MultiMedia5 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
13297 {"MultiMedia1 Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
13298 {"MultiMedia3 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
13299 {"MultiMedia5 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
13300 {"MultiMedia1 Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
13301 {"MultiMedia3 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
13302 {"MultiMedia5 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
13303 {"MultiMedia2 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13304 {"MultiMedia2 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
13305 {"MultiMedia2 Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
13306 {"MultiMedia2 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
13307 {"MultiMedia1 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13308 {"MultiMedia1 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13309 {"MultiMedia2 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13310 {"MultiMedia6 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13311 {"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13312 {"MultiMedia3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13313 {"MultiMedia5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13314 {"MultiMedia6 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13315 {"MultiMedia3 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13316 {"MultiMedia5 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13317 {"MultiMedia6 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13318 {"MultiMedia3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13319 {"MultiMedia5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13320 {"MultiMedia6 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13321 {"MultiMedia6 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13322 {"MultiMedia6 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13323 {"MultiMedia6 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13324
13325 {"MultiMedia1 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13326 {"MultiMedia1 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13327 {"MultiMedia1 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13328 {"MultiMedia1 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13329 {"MultiMedia1 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13330 {"MultiMedia1 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13331 {"MultiMedia1 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13332 {"MultiMedia1 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13333 {"MultiMedia1 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13334 {"MultiMedia1 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13335 {"MultiMedia1 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13336 {"MultiMedia1 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13337 {"MultiMedia1 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13338 {"MultiMedia1 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13339 {"MultiMedia1 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13340 {"MultiMedia1 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13341
13342 {"MultiMedia2 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13343 {"MultiMedia2 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13344 {"MultiMedia2 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13345 {"MultiMedia2 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13346 {"MultiMedia2 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13347 {"MultiMedia2 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13348 {"MultiMedia2 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13349 {"MultiMedia2 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13350 {"MultiMedia2 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13351 {"MultiMedia2 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13352 {"MultiMedia2 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13353 {"MultiMedia2 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13354 {"MultiMedia2 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13355 {"MultiMedia2 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13356 {"MultiMedia2 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13357 {"MultiMedia2 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13358
13359 {"MultiMedia3 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13360 {"MultiMedia3 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13361 {"MultiMedia3 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13362 {"MultiMedia3 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13363 {"MultiMedia3 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13364 {"MultiMedia3 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13365 {"MultiMedia3 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13366 {"MultiMedia3 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13367 {"MultiMedia3 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13368 {"MultiMedia3 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13369 {"MultiMedia3 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13370 {"MultiMedia3 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13371 {"MultiMedia3 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13372 {"MultiMedia3 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13373 {"MultiMedia3 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13374 {"MultiMedia3 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13375
13376 {"MultiMedia4 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13377 {"MultiMedia4 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13378 {"MultiMedia4 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13379 {"MultiMedia4 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13380 {"MultiMedia4 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13381 {"MultiMedia4 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13382 {"MultiMedia4 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13383 {"MultiMedia4 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13384 {"MultiMedia4 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13385 {"MultiMedia4 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13386 {"MultiMedia4 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13387 {"MultiMedia4 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13388 {"MultiMedia4 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13389 {"MultiMedia4 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13390 {"MultiMedia4 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13391 {"MultiMedia4 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13392
13393 {"MultiMedia5 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13394 {"MultiMedia5 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13395 {"MultiMedia5 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13396 {"MultiMedia5 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13397 {"MultiMedia5 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13398 {"MultiMedia5 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13399 {"MultiMedia5 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13400 {"MultiMedia5 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13401 {"MultiMedia5 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13402 {"MultiMedia5 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13403 {"MultiMedia5 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13404 {"MultiMedia5 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13405 {"MultiMedia5 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13406 {"MultiMedia5 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13407 {"MultiMedia5 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13408 {"MultiMedia5 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13409
13410 {"MultiMedia6 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13411 {"MultiMedia6 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13412 {"MultiMedia6 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13413 {"MultiMedia6 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13414 {"MultiMedia6 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13415 {"MultiMedia6 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13416 {"MultiMedia6 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13417 {"MultiMedia6 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13418 {"MultiMedia6 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13419 {"MultiMedia6 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13420 {"MultiMedia6 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13421 {"MultiMedia6 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13422 {"MultiMedia6 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13423 {"MultiMedia6 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13424 {"MultiMedia6 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13425 {"MultiMedia6 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13426
13427 {"MultiMedia8 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13428 {"MultiMedia8 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13429 {"MultiMedia8 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13430 {"MultiMedia8 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13431 {"MultiMedia8 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13432 {"MultiMedia8 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13433 {"MultiMedia8 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13434 {"MultiMedia8 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13435 {"MultiMedia8 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13436 {"MultiMedia8 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13437 {"MultiMedia8 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13438 {"MultiMedia8 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13439 {"MultiMedia8 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13440 {"MultiMedia8 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13441 {"MultiMedia8 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13442 {"MultiMedia8 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13443
13444 {"MultiMedia9 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13445 {"MultiMedia9 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13446 {"MultiMedia9 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13447 {"MultiMedia9 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13448 {"MultiMedia9 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13449 {"MultiMedia9 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13450 {"MultiMedia9 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13451 {"MultiMedia9 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13452
13453 {"MultiMedia20 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13454 {"MultiMedia20 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13455 {"MultiMedia20 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13456 {"MultiMedia20 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13457 {"MultiMedia20 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13458 {"MultiMedia20 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13459 {"MultiMedia20 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13460 {"MultiMedia20 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13461 {"MultiMedia20 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13462 {"MultiMedia20 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13463 {"MultiMedia20 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13464 {"MultiMedia20 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13465 {"MultiMedia20 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13466 {"MultiMedia20 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13467 {"MultiMedia20 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13468 {"MultiMedia20 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13469 {"MultiMedia20 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13470 {"MultiMedia20 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13471 {"MultiMedia20 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13472 {"MultiMedia20 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13473
13474 {"MultiMedia1 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13475 {"MultiMedia2 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13476 {"MultiMedia4 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13477 {"MultiMedia5 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13478 {"MultiMedia6 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13479 {"MultiMedia8 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13480
13481 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13482 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13483 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13484 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13485 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13486 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13487 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13488 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13489 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13490 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13491 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13492 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13493 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13494 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13495 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13496 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13497 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13498 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Audio Mixer"},
13499
13500 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13501 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13502 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13503 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13504 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13505 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13506 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13507 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13508 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13509 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13510 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13511 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13512 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13513 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13514 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13515 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13516 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13517 {"INT_BT_A2DP_RX", NULL, "INTERNAL_A2DP_RX Audio Mixer"},
13518
13519 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13520 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13521 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13522 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13523 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13524 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13525 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13526 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13527 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13528 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13529 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13530 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13531 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13532 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13533 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13534 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13535 {"INT_FM_RX", NULL, "INTERNAL_FM_RX Audio Mixer"},
13536
13537 {"AFE_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13538 {"AFE_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13539 {"AFE_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13540 {"AFE_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13541 {"AFE_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13542 {"AFE_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13543 {"AFE_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13544 {"AFE_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13545 {"AFE_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13546 {"AFE_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13547 {"AFE_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13548 {"AFE_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13549 {"AFE_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13550 {"AFE_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13551 {"AFE_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13552 {"AFE_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13553 {"PCM_RX", NULL, "AFE_PCM_RX Audio Mixer"},
13554
13555 {"MultiMedia1 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13556 {"MultiMedia3 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13557 {"MultiMedia4 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13558 {"MultiMedia17 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13559 {"MultiMedia18 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13560 {"MultiMedia19 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13561 {"MultiMedia5 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13562 {"MultiMedia8 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13563 {"MultiMedia1 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13564 {"MultiMedia4 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13565 {"MultiMedia17 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13566 {"MultiMedia18 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13567 {"MultiMedia19 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13568 {"MultiMedia5 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13569 {"MultiMedia6 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13570 {"MultiMedia8 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13571
13572 {"MultiMedia1 Mixer", "AFE_PCM_TX", "PCM_TX"},
13573 {"MultiMedia3 Mixer", "AFE_PCM_TX", "PCM_TX"},
13574 {"MultiMedia4 Mixer", "AFE_PCM_TX", "PCM_TX"},
13575 {"MultiMedia17 Mixer", "AFE_PCM_TX", "PCM_TX"},
13576 {"MultiMedia18 Mixer", "AFE_PCM_TX", "PCM_TX"},
13577 {"MultiMedia19 Mixer", "AFE_PCM_TX", "PCM_TX"},
13578 {"MultiMedia5 Mixer", "AFE_PCM_TX", "PCM_TX"},
13579 {"MultiMedia8 Mixer", "AFE_PCM_TX", "PCM_TX"},
13580 {"MM_UL1", NULL, "MultiMedia1 Mixer"},
13581 {"MultiMedia2 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13582 {"MM_UL2", NULL, "MultiMedia2 Mixer"},
13583 {"MM_UL3", NULL, "MultiMedia3 Mixer"},
13584 {"MM_UL4", NULL, "MultiMedia4 Mixer"},
13585 {"MM_UL5", NULL, "MultiMedia5 Mixer"},
13586 {"MM_UL6", NULL, "MultiMedia6 Mixer"},
13587 {"MM_UL8", NULL, "MultiMedia8 Mixer"},
13588 {"MM_UL9", NULL, "MultiMedia9 Mixer"},
13589 {"MM_UL17", NULL, "MultiMedia17 Mixer"},
13590 {"MM_UL18", NULL, "MultiMedia18 Mixer"},
13591 {"MM_UL19", NULL, "MultiMedia19 Mixer"},
13592 {"MM_UL20", NULL, "MultiMedia20 Mixer"},
13593
13594 {"AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13595 {"AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13596 {"AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13597 {"AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13598 {"AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13599 {"AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13600 {"AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13601 {"AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13602 {"AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13603 {"AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13604 {"AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13605 {"AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13606 {"AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13607 {"AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13608 {"AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13609 {"AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13610 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Audio Mixer"},
13611
13612 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13613 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13614 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13615 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13616 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13617 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13618 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13619 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13620 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13621 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13622 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13623 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13624 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13625 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13626 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13627 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13628 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX Audio Mixer"},
13629
13630 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13631 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13632 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13633 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13634 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13635 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13636 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13637 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13638 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13639 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13640 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13641 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13642 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13643 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13644 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13645 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13646 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX Audio Mixer"},
13647
13648 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13649 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13650 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13651 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13652 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13653 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13654 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13655 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13656 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13657 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13658 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13659 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13660 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13661 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13662 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13663 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13664 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX Audio Mixer"},
13665
13666 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13667 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13668 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13669 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13670 {"MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13671 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13672 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13673 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13674 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
13675
13676 {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13677 {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13678 {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13679 {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13680 {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"},
13681 {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13682 {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13683 {"PRI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13684 {"PRI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13685 {"PRI_I2S_RX", NULL, "PRI_RX_Voice Mixer"},
13686
13687 {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13688 {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13689 {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13690 {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13691 {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"},
13692 {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13693 {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13694 {"SEC_I2S_RX", NULL, "SEC_RX_Voice Mixer"},
13695
13696 {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13697 {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13698 {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13699 {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13700 {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13701 {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13702 {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13703 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13704 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13705 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_Voice Mixer"},
13706
13707 {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13708 {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13709 {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13710 {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13711 {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"},
13712 {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13713 {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13714 {"SLIM_0_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13715 {"SLIM_0_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13716 {"SLIM_0_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13717 {"SLIM_0_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13718 {"SLIM_0_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13719 {"SLIMBUS_0_RX", NULL, "SLIM_0_RX_Voice Mixer"},
13720
13721 {"SLIM_6_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13722 {"SLIM_6_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13723 {"SLIM_6_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13724 {"SLIM_6_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13725 {"SLIM_6_RX_Voice Mixer", "Voip", "VOIP_DL"},
13726 {"SLIM_6_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13727 {"SLIM_6_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13728 {"SLIM_6_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13729 {"SLIM_6_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13730 {"SLIM_6_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13731 {"SLIM_6_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13732 {"SLIM_6_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13733 {"SLIMBUS_6_RX", NULL, "SLIM_6_RX_Voice Mixer"},
13734
13735 {"USB_AUDIO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13736 {"USB_AUDIO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13737 {"USB_AUDIO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13738 {"USB_AUDIO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13739 {"USB_AUDIO_RX_Voice Mixer", "Voip", "VOIP_DL"},
13740 {"USB_AUDIO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13741 {"USB_AUDIO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13742 {"USB_AUDIO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13743 {"USB_AUDIO_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13744 {"USB_AUDIO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13745 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13746 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13747 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX_Voice Mixer"},
13748
13749 {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13750 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13751 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13752 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13753 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"},
13754 {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13755 {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13756 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13757 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13758 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13759 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13760 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX_Voice Mixer"},
13761
13762 {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13763 {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13764 {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13765 {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13766 {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
13767 {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13768 {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13769 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13770 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13771 {"PCM_RX", NULL, "AFE_PCM_RX_Voice Mixer"},
13772
13773 {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13774 {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13775 {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13776 {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13777 {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
13778 {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13779 {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13780 {"AUX_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13781 {"AUX_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13782 {"AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13783 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13784 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13785 {"AUX_PCM_RX", NULL, "AUX_PCM_RX_Voice Mixer"},
13786
13787 {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13788 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13789 {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13790 {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13791 {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
13792 {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13793 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13794 {"SEC_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13795 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13796 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13797 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX_Voice Mixer"},
13798
13799 {"TERT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13800 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13801 {"TERT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13802 {"TERT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13803 {"TERT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
13804 {"TERT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13805 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13806 {"TERT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13807 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13808 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13809 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX_Voice Mixer"},
13810
13811 {"QUAT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13812 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13813 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13814 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13815 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
13816 {"QUAT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13817 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13818 {"QUAT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13819 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13820 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13821 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX_Voice Mixer"},
13822
13823 {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13824 {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13825 {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13826 {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13827 {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"},
13828 {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13829 {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13830 {"HDMI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13831 {"HDMI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13832 {"HDMI", NULL, "HDMI_RX_Voice Mixer"},
13833 {"HDMI", NULL, "HDMI_DL_HL"},
13834
13835 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13836 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13837 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13838 {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13839 {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13840 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13841 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13842 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13843 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13844 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
13845
13846 {"PRI_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13847 {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13848 {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13849 {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13850 {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13851 {"PRI_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13852 {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13853 {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13854 {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13855 {"PRI_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13856 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13857 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13858 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_Voice Mixer"},
13859
13860 {"INT0_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13861 {"INT0_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13862 {"INT0_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13863 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13864 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13865 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_Voice Mixer"},
13866
13867 {"INT4_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13868 {"INT4_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13869 {"INT4_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13870 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13871 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13872 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_Voice Mixer"},
13873
13874 {"TERT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13875 {"TERT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13876 {"TERT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13877 {"TERT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13878 {"TERT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13879 {"TERT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13880 {"TERT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13881 {"TERT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13882 {"TERT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13883 {"TERT_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13884 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13885 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13886 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_Voice Mixer"},
13887
13888 {"QUAT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13889 {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13890 {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13891 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13892 {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13893 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13894 {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13895 {"QUAT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13896 {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13897 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13898 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13899 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"},
13900
13901 {"QUIN_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13902 {"QUIN_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13903 {"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13904 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13905 {"QUIN_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13906 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13907 {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13908 {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13909 {"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13910 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13911 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13912 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX_Voice Mixer"},
13913
13914 {"QUAT_TDM_RX_2_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13915 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_Voice Mixer"},
13916
13917 {"VOC_EXT_EC MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13918 {"VOC_EXT_EC MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13919 {"VOC_EXT_EC MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13920 {"VOC_EXT_EC MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13921 {"VOC_EXT_EC MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
13922 {"CS-VOICE_UL1", NULL, "VOC_EXT_EC MUX"},
13923 {"VOIP_UL", NULL, "VOC_EXT_EC MUX"},
13924 {"VoLTE_UL", NULL, "VOC_EXT_EC MUX"},
13925 {"VOICE2_UL", NULL, "VOC_EXT_EC MUX"},
13926 {"VoWLAN_UL", NULL, "VOC_EXT_EC MUX"},
13927 {"VOICEMMODE1_UL", NULL, "VOC_EXT_EC MUX"},
13928 {"VOICEMMODE2_UL", NULL, "VOC_EXT_EC MUX"},
13929
13930 {"AUDIO_REF_EC_UL1 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13931 {"AUDIO_REF_EC_UL1 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13932 {"AUDIO_REF_EC_UL1 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13933 {"AUDIO_REF_EC_UL1 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13934 {"AUDIO_REF_EC_UL1 MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
13935 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13936 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_0", "QUAT_TDM_RX_0"},
13937 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_1", "QUAT_TDM_RX_1"},
13938 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_2", "QUAT_TDM_RX_2"},
13939 {"AUDIO_REF_EC_UL1 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13940
13941 {"AUDIO_REF_EC_UL2 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13942 {"AUDIO_REF_EC_UL2 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13943 {"AUDIO_REF_EC_UL2 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13944 {"AUDIO_REF_EC_UL2 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13945
13946 {"AUDIO_REF_EC_UL3 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13947 {"AUDIO_REF_EC_UL3 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13948 {"AUDIO_REF_EC_UL3 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13949 {"AUDIO_REF_EC_UL3 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13950
13951 {"AUDIO_REF_EC_UL4 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13952 {"AUDIO_REF_EC_UL4 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13953 {"AUDIO_REF_EC_UL4 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13954 {"AUDIO_REF_EC_UL4 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13955
13956 {"AUDIO_REF_EC_UL5 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13957 {"AUDIO_REF_EC_UL5 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13958 {"AUDIO_REF_EC_UL5 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13959 {"AUDIO_REF_EC_UL5 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13960
13961 {"AUDIO_REF_EC_UL6 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13962 {"AUDIO_REF_EC_UL6 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13963 {"AUDIO_REF_EC_UL6 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13964 {"AUDIO_REF_EC_UL6 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13965
13966 {"AUDIO_REF_EC_UL8 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13967 {"AUDIO_REF_EC_UL8 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13968 {"AUDIO_REF_EC_UL8 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13969 {"AUDIO_REF_EC_UL8 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13970
13971 {"AUDIO_REF_EC_UL9 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13972 {"AUDIO_REF_EC_UL9 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13973 {"AUDIO_REF_EC_UL9 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13974 {"AUDIO_REF_EC_UL9 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13975
13976 {"AUDIO_REF_EC_UL17 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13977 {"AUDIO_REF_EC_UL17 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13978 {"AUDIO_REF_EC_UL17 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13979 {"AUDIO_REF_EC_UL17 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13980
13981 {"AUDIO_REF_EC_UL18 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13982 {"AUDIO_REF_EC_UL18 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13983 {"AUDIO_REF_EC_UL18 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13984 {"AUDIO_REF_EC_UL18 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13985
13986 {"AUDIO_REF_EC_UL19 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13987 {"AUDIO_REF_EC_UL19 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13988 {"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13989 {"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13990
13991 {"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
13992 {"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
13993 {"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
13994 {"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"},
13995 {"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"},
13996 {"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"},
13997 {"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"},
13998 {"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"},
13999 {"MM_UL17", NULL, "AUDIO_REF_EC_UL17 MUX"},
14000 {"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
14001 {"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
14002
14003 {"Voice_Tx Mixer", "PRI_TX_Voice", "PRI_I2S_TX"},
14004 {"Voice_Tx Mixer", "PRI_MI2S_TX_Voice", "PRI_MI2S_TX"},
14005 {"Voice_Tx Mixer", "MI2S_TX_Voice", "MI2S_TX"},
14006 {"Voice_Tx Mixer", "TERT_MI2S_TX_Voice", "TERT_MI2S_TX"},
14007 {"Voice_Tx Mixer", "SLIM_0_TX_Voice", "SLIMBUS_0_TX"},
14008 {"Voice_Tx Mixer", "SLIM_7_TX_Voice", "SLIMBUS_7_TX"},
14009 {"Voice_Tx Mixer", "SLIM_8_TX_Voice", "SLIMBUS_8_TX"},
14010 {"Voice_Tx Mixer", "USB_AUDIO_TX_Voice", "USB_AUDIO_TX"},
14011 {"Voice_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice", "INT_BT_SCO_TX"},
14012 {"Voice_Tx Mixer", "AFE_PCM_TX_Voice", "PCM_TX"},
14013 {"Voice_Tx Mixer", "AUX_PCM_TX_Voice", "AUX_PCM_TX"},
14014 {"Voice_Tx Mixer", "SEC_AUX_PCM_TX_Voice", "SEC_AUX_PCM_TX"},
14015 {"Voice_Tx Mixer", "TERT_AUX_PCM_TX_Voice", "TERT_AUX_PCM_TX"},
14016 {"Voice_Tx Mixer", "QUAT_AUX_PCM_TX_Voice", "QUAT_AUX_PCM_TX"},
14017 {"Voice_Tx Mixer", "SEC_MI2S_TX_Voice", "SEC_MI2S_TX"},
14018 {"CS-VOICE_UL1", NULL, "Voice_Tx Mixer"},
14019
14020 {"Voice2_Tx Mixer", "PRI_TX_Voice2", "PRI_I2S_TX"},
14021 {"Voice2_Tx Mixer", "PRI_MI2S_TX_Voice2", "PRI_MI2S_TX"},
14022 {"Voice2_Tx Mixer", "MI2S_TX_Voice2", "MI2S_TX"},
14023 {"Voice2_Tx Mixer", "TERT_MI2S_TX_Voice2", "TERT_MI2S_TX"},
14024 {"Voice2_Tx Mixer", "SLIM_0_TX_Voice2", "SLIMBUS_0_TX"},
14025 {"Voice2_Tx Mixer", "SLIM_7_TX_Voice2", "SLIMBUS_7_TX"},
14026 {"Voice2_Tx Mixer", "SLIM_8_TX_Voice2", "SLIMBUS_8_TX"},
14027 {"Voice2_Tx Mixer", "USB_AUDIO_TX_Voice2", "USB_AUDIO_TX"},
14028 {"Voice2_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice2", "INT_BT_SCO_TX"},
14029 {"Voice2_Tx Mixer", "AFE_PCM_TX_Voice2", "PCM_TX"},
14030 {"Voice2_Tx Mixer", "AUX_PCM_TX_Voice2", "AUX_PCM_TX"},
14031 {"Voice2_Tx Mixer", "SEC_AUX_PCM_TX_Voice2", "SEC_AUX_PCM_TX"},
14032 {"Voice2_Tx Mixer", "TERT_AUX_PCM_TX_Voice2", "TERT_AUX_PCM_TX"},
14033 {"Voice2_Tx Mixer", "QUAT_AUX_PCM_TX_Voice2", "QUAT_AUX_PCM_TX"},
14034 {"VOICE2_UL", NULL, "Voice2_Tx Mixer"},
14035
14036 {"VoLTE_Tx Mixer", "PRI_TX_VoLTE", "PRI_I2S_TX"},
14037 {"VoLTE_Tx Mixer", "SLIM_0_TX_VoLTE", "SLIMBUS_0_TX"},
14038 {"VoLTE_Tx Mixer", "SLIM_7_TX_VoLTE", "SLIMBUS_7_TX"},
14039 {"VoLTE_Tx Mixer", "SLIM_8_TX_VoLTE", "SLIMBUS_8_TX"},
14040 {"VoLTE_Tx Mixer", "USB_AUDIO_TX_VoLTE", "USB_AUDIO_TX"},
14041 {"VoLTE_Tx Mixer", "INTERNAL_BT_SCO_TX_VoLTE", "INT_BT_SCO_TX"},
14042 {"VoLTE_Tx Mixer", "AFE_PCM_TX_VoLTE", "PCM_TX"},
14043 {"VoLTE_Tx Mixer", "AUX_PCM_TX_VoLTE", "AUX_PCM_TX"},
14044 {"VoLTE_Tx Mixer", "SEC_AUX_PCM_TX_VoLTE", "SEC_AUX_PCM_TX"},
14045 {"VoLTE_Tx Mixer", "TERT_AUX_PCM_TX_VoLTE", "TERT_AUX_PCM_TX"},
14046 {"VoLTE_Tx Mixer", "QUAT_AUX_PCM_TX_VoLTE", "QUAT_AUX_PCM_TX"},
14047 {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"},
14048 {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"},
14049 {"VoLTE_Tx Mixer", "TERT_MI2S_TX_VoLTE", "TERT_MI2S_TX"},
14050 {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"},
14051
14052 {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"},
14053 {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"},
14054 {"VoWLAN_Tx Mixer", "SLIM_7_TX_VoWLAN", "SLIMBUS_7_TX"},
14055 {"VoWLAN_Tx Mixer", "SLIM_8_TX_VoWLAN", "SLIMBUS_8_TX"},
14056 {"VoWLAN_Tx Mixer", "USB_AUDIO_TX_VoWLAN", "USB_AUDIO_TX"},
14057 {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"},
14058 {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"},
14059 {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"},
14060 {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"},
14061 {"VoWLAN_Tx Mixer", "TERT_AUX_PCM_TX_VoWLAN", "TERT_AUX_PCM_TX"},
14062 {"VoWLAN_Tx Mixer", "QUAT_AUX_PCM_TX_VoWLAN", "QUAT_AUX_PCM_TX"},
14063 {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"},
14064 {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"},
14065 {"VoWLAN_Tx Mixer", "TERT_MI2S_TX_VoWLAN", "TERT_MI2S_TX"},
14066 {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"},
14067
14068 {"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
14069 {"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
14070 {"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
14071 {"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
14072 {"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
14073 {"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
14074 {"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
14075 {"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
14076 {"VoiceMMode1_Tx Mixer", "USB_AUDIO_TX_MMode1", "USB_AUDIO_TX"},
14077 {"VoiceMMode1_Tx Mixer", "INT_BT_SCO_TX_MMode1", "INT_BT_SCO_TX"},
14078 {"VoiceMMode1_Tx Mixer", "AFE_PCM_TX_MMode1", "PCM_TX"},
14079 {"VoiceMMode1_Tx Mixer", "AUX_PCM_TX_MMode1", "AUX_PCM_TX"},
14080 {"VoiceMMode1_Tx Mixer", "SEC_AUX_PCM_TX_MMode1", "SEC_AUX_PCM_TX"},
14081 {"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
14082 {"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
14083 {"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
14084 {"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
14085
14086 {"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
14087 {"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
14088 {"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
14089 {"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
14090 {"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
14091 {"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
14092 {"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
14093 {"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
14094 {"VoiceMMode2_Tx Mixer", "USB_AUDIO_TX_MMode2", "USB_AUDIO_TX"},
14095 {"VoiceMMode2_Tx Mixer", "INT_BT_SCO_TX_MMode2", "INT_BT_SCO_TX"},
14096 {"VoiceMMode2_Tx Mixer", "AFE_PCM_TX_MMode2", "PCM_TX"},
14097 {"VoiceMMode2_Tx Mixer", "AUX_PCM_TX_MMode2", "AUX_PCM_TX"},
14098 {"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
14099 {"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
14100 {"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
14101 {"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
14102
14103 {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
14104 {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
14105 {"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
14106 {"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
14107 {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
14108 {"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
14109 {"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
14110 {"Voip_Tx Mixer", "USB_AUDIO_TX_Voip", "USB_AUDIO_TX"},
14111 {"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
14112 {"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"},
14113 {"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
14114 {"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"},
14115 {"Voip_Tx Mixer", "TERT_AUX_PCM_TX_Voip", "TERT_AUX_PCM_TX"},
14116 {"Voip_Tx Mixer", "QUAT_AUX_PCM_TX_Voip", "QUAT_AUX_PCM_TX"},
14117 {"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"},
14118 {"VOIP_UL", NULL, "Voip_Tx Mixer"},
14119
14120 {"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
14121 {"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
14122 {"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"},
14123 {"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"},
14124 {"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"},
14125 {"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"},
14126 {"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"},
14127 {"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"},
14128 {"SLIMBUS6_DL_HL", "Switch", "SLIM0_DL_HL"},
14129 {"SLIMBUS_6_RX", NULL, "SLIMBUS6_DL_HL"},
14130 {"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
14131 {"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"},
14132 {"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"},
14133 {"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"},
14134 {"SLIM8_UL_HL", NULL, "SLIMBUS_8_TX"},
14135
14136 {"LSM1 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14137 {"LSM1 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14138 {"LSM1 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14139 {"LSM1 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14140 {"LSM1 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14141 {"LSM1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14142 {"LSM1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14143 {"LSM1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14144 {"LSM1_UL_HL", NULL, "LSM1 Mixer"},
14145
14146 {"LSM2 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14147 {"LSM2 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14148 {"LSM2 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14149 {"LSM2 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14150 {"LSM2 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14151 {"LSM2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14152 {"LSM2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14153 {"LSM2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14154 {"LSM2_UL_HL", NULL, "LSM2 Mixer"},
14155
14156
14157 {"LSM3 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14158 {"LSM3 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14159 {"LSM3 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14160 {"LSM3 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14161 {"LSM3 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14162 {"LSM3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14163 {"LSM3 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14164 {"LSM3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14165 {"LSM3_UL_HL", NULL, "LSM3 Mixer"},
14166
14167
14168 {"LSM4 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14169 {"LSM4 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14170 {"LSM4 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14171 {"LSM4 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14172 {"LSM4 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14173 {"LSM4 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14174 {"LSM4 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14175 {"LSM4 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14176 {"LSM4_UL_HL", NULL, "LSM4 Mixer"},
14177
14178 {"LSM5 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14179 {"LSM5 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14180 {"LSM5 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14181 {"LSM5 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14182 {"LSM5 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14183 {"LSM5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14184 {"LSM5 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14185 {"LSM5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14186 {"LSM5_UL_HL", NULL, "LSM5 Mixer"},
14187
14188 {"LSM6 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14189 {"LSM6 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14190 {"LSM6 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14191 {"LSM6 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14192 {"LSM6 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14193 {"LSM6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14194 {"LSM6_UL_HL", NULL, "LSM6 Mixer"},
14195
14196 {"LSM7 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14197 {"LSM7 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14198 {"LSM7 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14199 {"LSM7 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14200 {"LSM7 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14201 {"LSM7 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14202 {"LSM7_UL_HL", NULL, "LSM7 Mixer"},
14203
14204 {"LSM8 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14205 {"LSM8 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14206 {"LSM8 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14207 {"LSM8 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14208 {"LSM8 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14209 {"LSM8 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14210 {"LSM8_UL_HL", NULL, "LSM8 Mixer"},
14211
14212
14213 {"CPE_LSM_UL_HL", NULL, "BE_IN"},
14214 {"QCHAT_Tx Mixer", "PRI_TX_QCHAT", "PRI_I2S_TX"},
14215 {"QCHAT_Tx Mixer", "SLIM_0_TX_QCHAT", "SLIMBUS_0_TX"},
14216 {"QCHAT_Tx Mixer", "SLIM_7_TX_QCHAT", "SLIMBUS_7_TX"},
14217 {"QCHAT_Tx Mixer", "SLIM_8_TX_QCHAT", "SLIMBUS_8_TX"},
14218 {"QCHAT_Tx Mixer", "INTERNAL_BT_SCO_TX_QCHAT", "INT_BT_SCO_TX"},
14219 {"QCHAT_Tx Mixer", "AFE_PCM_TX_QCHAT", "PCM_TX"},
14220 {"QCHAT_Tx Mixer", "AUX_PCM_TX_QCHAT", "AUX_PCM_TX"},
14221 {"QCHAT_Tx Mixer", "SEC_AUX_PCM_TX_QCHAT", "SEC_AUX_PCM_TX"},
14222 {"QCHAT_Tx Mixer", "TERT_AUX_PCM_TX_QCHAT", "TERT_AUX_PCM_TX"},
14223 {"QCHAT_Tx Mixer", "QUAT_AUX_PCM_TX_QCHAT", "QUAT_AUX_PCM_TX"},
14224 {"QCHAT_Tx Mixer", "MI2S_TX_QCHAT", "MI2S_TX"},
14225 {"QCHAT_Tx Mixer", "PRI_MI2S_TX_QCHAT", "PRI_MI2S_TX"},
14226 {"QCHAT_Tx Mixer", "TERT_MI2S_TX_QCHAT", "TERT_MI2S_TX"},
14227 {"QCHAT_Tx Mixer", "INT3_MI2S_TX_QCHAT", "INT3_MI2S_TX"},
14228 {"QCHAT_Tx Mixer", "USB_AUDIO_TX_QCHAT", "USB_AUDIO_TX"},
14229 {"QCHAT_UL", NULL, "QCHAT_Tx Mixer"},
14230
14231 {"INT_FM_RX", NULL, "INTFM_DL_HL"},
14232 {"INTFM_UL_HL", NULL, "INT_FM_TX"},
14233 {"INTHFP_UL_HL", NULL, "HFP_PRI_AUX_UL_HL"},
14234 {"HFP_PRI_AUX_UL_HL", "Switch", "AUX_PCM_TX"},
14235 {"INTHFP_UL_HL", NULL, "HFP_AUX_UL_HL"},
14236 {"HFP_AUX_UL_HL", "Switch", "SEC_AUX_PCM_TX"},
14237 {"INTHFP_UL_HL", NULL, "HFP_INT_UL_HL"},
14238 {"HFP_INT_UL_HL", "Switch", "INT_BT_SCO_TX"},
14239 {"SLIM7_UL_HL", NULL, "HFP_SLIM7_UL_HL"},
14240 {"HFP_SLIM7_UL_HL", "Switch", "SLIMBUS_7_TX"},
14241 {"AUX_PCM_RX", NULL, "AUXPCM_DL_HL"},
14242 {"AUX_PCM_RX", NULL, "INTHFP_DL_HL"},
14243 {"AUXPCM_UL_HL", NULL, "AUX_PCM_TX"},
14244 {"MI2S_RX", NULL, "MI2S_DL_HL"},
14245 {"MI2S_UL_HL", NULL, "MI2S_TX"},
14246 {"PCM_RX_DL_HL", "Switch", "SLIM0_DL_HL"},
14247 {"PCM_RX", NULL, "PCM_RX_DL_HL"},
14248
14249 /* connect to INT4_MI2S_DL_HL since same pcm_id */
14250 {"INT0_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14251 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_DL_HL"},
14252 {"INT4_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14253 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_DL_HL"},
14254 {"PRI_MI2S_RX_DL_HL", "Switch", "PRI_MI2S_DL_HL"},
14255 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_DL_HL"},
14256 {"SEC_MI2S_RX_DL_HL", "Switch", "SEC_MI2S_DL_HL"},
14257 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_DL_HL"},
14258 {"TERT_MI2S_RX_DL_HL", "Switch", "TERT_MI2S_DL_HL"},
14259 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_DL_HL"},
14260
14261 {"QUAT_MI2S_RX_DL_HL", "Switch", "QUAT_MI2S_DL_HL"},
14262 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_DL_HL"},
14263 {"MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14264 {"INT3_MI2S_UL_HL", NULL, "INT3_MI2S_TX"},
14265 {"TERT_MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14266 {"SEC_I2S_RX", NULL, "SEC_I2S_DL_HL"},
14267 {"PRI_MI2S_UL_HL", NULL, "PRI_MI2S_TX"},
14268 {"SEC_MI2S_UL_HL", NULL, "SEC_MI2S_TX"},
14269 {"SEC_MI2S_RX", NULL, "SEC_MI2S_DL_HL"},
14270 {"PRI_MI2S_RX", NULL, "PRI_MI2S_DL_HL"},
14271 {"TERT_MI2S_RX", NULL, "TERT_MI2S_DL_HL"},
14272 {"QUAT_MI2S_UL_HL", NULL, "QUAT_MI2S_TX"},
14273
14274 {"PRI_TDM_TX_0_UL_HL", NULL, "PRI_TDM_TX_0"},
14275 {"PRI_TDM_TX_1_UL_HL", NULL, "PRI_TDM_TX_1"},
14276 {"PRI_TDM_TX_2_UL_HL", NULL, "PRI_TDM_TX_2"},
14277 {"PRI_TDM_TX_3_UL_HL", NULL, "PRI_TDM_TX_3"},
14278 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0_DL_HL"},
14279 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1_DL_HL"},
14280 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2_DL_HL"},
14281 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3_DL_HL"},
14282 {"SEC_TDM_TX_0_UL_HL", NULL, "SEC_TDM_TX_0"},
14283 {"SEC_TDM_TX_1_UL_HL", NULL, "SEC_TDM_TX_1"},
14284 {"SEC_TDM_TX_2_UL_HL", NULL, "SEC_TDM_TX_2"},
14285 {"SEC_TDM_TX_3_UL_HL", NULL, "SEC_TDM_TX_3"},
14286 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0_DL_HL"},
14287 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1_DL_HL"},
14288 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2_DL_HL"},
14289 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3_DL_HL"},
14290 {"TERT_TDM_TX_0_UL_HL", NULL, "TERT_TDM_TX_0"},
14291 {"TERT_TDM_TX_1_UL_HL", NULL, "TERT_TDM_TX_1"},
14292 {"TERT_TDM_TX_2_UL_HL", NULL, "TERT_TDM_TX_2"},
14293 {"TERT_TDM_TX_3_UL_HL", NULL, "TERT_TDM_TX_3"},
14294 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0_DL_HL"},
14295 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1_DL_HL"},
14296 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2_DL_HL"},
14297 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3_DL_HL"},
14298 {"QUAT_TDM_TX_0_UL_HL", NULL, "QUAT_TDM_TX_0"},
14299 {"QUAT_TDM_TX_1_UL_HL", NULL, "QUAT_TDM_TX_1"},
14300 {"QUAT_TDM_TX_2_UL_HL", NULL, "QUAT_TDM_TX_2"},
14301 {"QUAT_TDM_TX_3_UL_HL", NULL, "QUAT_TDM_TX_3"},
14302 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0_DL_HL"},
14303 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1_DL_HL"},
14304 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_DL_HL"},
14305 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3_DL_HL"},
14306
14307 {"PRI_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14308 {"PRI_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14309 {"PRI_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14310 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14311 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14312 {"PRI_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14313 {"PRI_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14314 {"PRI_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14315 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14316 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14317 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14318 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14319 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14320 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14321 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14322 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14323 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Port Mixer"},
14324
14325 {"PRI_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14326 {"PRI_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14327 {"PRI_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14328 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14329 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14330 {"PRI_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14331 {"PRI_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14332 {"PRI_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14333 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14334 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14335 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14336 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14337 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14338 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14339 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14340 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14341 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Port Mixer"},
14342
14343 {"PRI_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14344 {"PRI_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14345 {"PRI_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14346 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14347 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14348 {"PRI_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14349 {"PRI_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14350 {"PRI_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14351 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14352 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14353 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14354 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14355 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14356 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14357 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14358 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14359 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Port Mixer"},
14360
14361 {"PRI_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14362 {"PRI_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14363 {"PRI_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14364 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14365 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14366 {"PRI_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14367 {"PRI_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14368 {"PRI_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14369 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14370 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14371 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14372 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14373 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14374 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14375 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14376 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14377 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Port Mixer"},
14378
14379 {"SEC_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14380 {"SEC_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14381 {"SEC_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14382 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14383 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14384 {"SEC_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14385 {"SEC_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14386 {"SEC_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14387 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14388 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14389 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14390 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14391 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14392 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14393 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14394 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14395 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Port Mixer"},
14396
14397 {"SEC_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14398 {"SEC_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14399 {"SEC_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14400 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14401 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14402 {"SEC_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14403 {"SEC_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14404 {"SEC_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14405 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14406 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14407 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14408 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14409 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14410 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14411 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14412 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14413 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Port Mixer"},
14414
14415 {"SEC_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14416 {"SEC_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14417 {"SEC_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14418 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14419 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14420 {"SEC_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14421 {"SEC_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14422 {"SEC_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14423 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14424 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14425 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14426 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14427 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14428 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14429 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14430 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14431 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Port Mixer"},
14432
14433 {"SEC_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14434 {"SEC_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14435 {"SEC_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14436 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14437 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14438 {"SEC_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14439 {"SEC_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14440 {"SEC_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14441 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14442 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14443 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14444 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14445 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14446 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14447 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14448 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14449 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Port Mixer"},
14450
14451 {"TERT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14452 {"TERT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14453 {"TERT_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14454 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14455 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14456 {"TERT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14457 {"TERT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14458 {"TERT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14459 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14460 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14461 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14462 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14463 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14464 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14465 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14466 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14467 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Port Mixer"},
14468
14469 {"TERT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14470 {"TERT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14471 {"TERT_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14472 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14473 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14474 {"TERT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14475 {"TERT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14476 {"TERT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14477 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14478 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14479 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14480 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14481 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14482 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14483 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14484 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14485 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Port Mixer"},
14486
14487 {"TERT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14488 {"TERT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14489 {"TERT_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14490 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14491 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14492 {"TERT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14493 {"TERT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14494 {"TERT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14495 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14496 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14497 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14498 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14499 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14500 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14501 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14502 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14503 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Port Mixer"},
14504
14505 {"TERT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14506 {"TERT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14507 {"TERT_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14508 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14509 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14510 {"TERT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14511 {"TERT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14512 {"TERT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14513 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14514 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14515 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14516 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14517 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14518 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14519 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14520 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14521 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Port Mixer"},
14522
14523 {"QUAT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14524 {"QUAT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14525 {"QUAT_TDM_RX_0 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14526 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14527 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14528 {"QUAT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14529 {"QUAT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14530 {"QUAT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14531 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14532 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14533 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14534 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14535 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14536 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14537 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14538 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14539 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Port Mixer"},
14540
14541 {"QUAT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14542 {"QUAT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14543 {"QUAT_TDM_RX_1 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14544 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14545 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14546 {"QUAT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14547 {"QUAT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14548 {"QUAT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14549 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14550 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14551 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14552 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14553 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14554 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14555 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14556 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14557 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Port Mixer"},
14558
14559 {"QUAT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14560 {"QUAT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14561 {"QUAT_TDM_RX_2 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14562 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14563 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14564 {"QUAT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14565 {"QUAT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14566 {"QUAT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14567 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14568 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14569 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14570 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14571 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14572 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14573 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14574 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14575 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Port Mixer"},
14576
14577 {"QUAT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14578 {"QUAT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14579 {"QUAT_TDM_RX_3 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14580 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14581 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14582 {"QUAT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14583 {"QUAT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14584 {"QUAT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14585 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14586 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14587 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14588 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14589 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14590 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14591 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14592 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14593 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"},
14594
14595 {"INT0_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14596 {"INT0_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14597 {"INT0_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14598 {"INT0_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14599 {"INT0_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14600 {"INT0_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14601 {"INT0_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14602 {"INT0_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14603 {"INT0_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14604 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Port Mixer"},
14605
14606 {"INT4_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14607 {"INT4_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14608 {"INT4_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14609 {"INT4_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14610 {"INT4_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14611 {"INT4_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14612 {"INT4_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14613 {"INT4_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14614 {"INT4_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14615 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Port Mixer"},
14616
14617 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14618 {"SLIMBUS_0_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14619 {"SLIMBUS_0_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14620 {"SLIMBUS_0_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14621 {"SLIMBUS_0_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14622 {"SLIMBUS_0_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14623 {"SLIMBUS_0_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14624 {"SLIMBUS_0_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14625 {"SLIMBUS_0_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14626 {"SLIMBUS_0_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14627 {"SLIMBUS_0_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14628 {"SLIMBUS_0_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14629 {"SLIMBUS_0_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14630 {"SLIMBUS_0_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14631 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14632 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Port Mixer"},
14633 {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14634 {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14635 {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"},
14636 {"USB_AUDIO_RX Port Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
14637 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Port Mixer"},
14638 {"USB_DL_HL", "Switch", "USBAUDIO_DL_HL"},
14639 {"USB_AUDIO_RX", NULL, "USB_DL_HL"},
14640 {"USBAUDIO_UL_HL", NULL, "USB_AUDIO_TX"},
14641
14642
14643 {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14644 {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14645 {"AUX_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14646 {"AUX_PCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14647 {"AUX_PCM_RX Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14648 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Port Mixer"},
14649
14650 {"SEC_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14651 {"SEC_AUXPCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14652 {"SEC_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14653 {"SEC_AUX_PCM_RX", NULL, "SEC_AUXPCM_RX Port Mixer"},
14654
14655 {"TERT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14656 {"TERT_AUXPCM_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14657 {"TERT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14658 {"TERT_AUX_PCM_RX", NULL, "TERT_AUXPCM_RX Port Mixer"},
14659
14660 {"QUAT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14661 {"QUAT_AUXPCM_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14662 {"QUAT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14663 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUXPCM_RX Port Mixer"},
14664
14665 {"Voice Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14666 {"Voice Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14667 {"Voice Stub Tx Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14668 {"Voice Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14669 {"Voice Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14670 {"Voice Stub Tx Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14671 {"Voice Stub Tx Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14672 {"Voice Stub Tx Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14673 {"Voice Stub Tx Mixer", "MI2S_TX", "MI2S_TX"},
14674 {"Voice Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14675 {"Voice Stub Tx Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14676 {"Voice Stub Tx Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14677 {"Voice Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14678 {"Voice Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14679 {"Voice Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14680 {"Voice Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14681 {"Voice Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14682 {"Voice Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14683 {"VOICE_STUB_UL", NULL, "Voice Stub Tx Mixer"},
14684
14685 {"VoLTE Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14686 {"VoLTE Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14687 {"VoLTE Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14688 {"VoLTE Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14689 {"VoLTE Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14690 {"VoLTE Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14691 {"VoLTE Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14692 {"VoLTE Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14693 {"VoLTE Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14694 {"VoLTE Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14695 {"VoLTE Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14696 {"VOLTE_STUB_UL", NULL, "VoLTE Stub Tx Mixer"},
14697
14698 {"Voice2 Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14699 {"Voice2 Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14700 {"Voice2 Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14701 {"Voice2 Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14702 {"Voice2 Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14703 {"Voice2 Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14704 {"Voice2 Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14705 {"Voice2 Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14706 {"Voice2 Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14707 {"Voice2 Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14708 {"Voice2 Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14709 {"VOICE2_STUB_UL", NULL, "Voice2 Stub Tx Mixer"},
14710
14711 {"STUB_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
14712 {"STUB_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14713 {"STUB_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14714 {"STUB_RX", NULL, "STUB_RX Mixer"},
14715 {"SLIMBUS_1_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
14716 {"SLIMBUS_1_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14717 {"SLIMBUS_1_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14718 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Mixer"},
14719 {"AFE_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14720 {"AFE_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14721 {"AFE_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14722 {"SLIMBUS_3_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14723 {"SLIMBUS_3_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14724 {"SLIMBUS_3_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14725 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX_Voice Mixer"},
14726
14727 {"SLIM_7_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14728 {"SLIM_7_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14729 {"SLIM_7_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14730 {"SLIM_7_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14731 {"SLIM_7_RX_Voice Mixer", "Voip", "VOIP_DL"},
14732 {"SLIM_7_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14733 {"SLIM_7_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14734 {"SLIM_7_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14735 {"SLIM_7_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14736 {"SLIM_7_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14737 {"SLIM_7_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14738 {"SLIM_7_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14739 {"SLIMBUS_7_RX", NULL, "SLIM_7_RX_Voice Mixer"},
14740
14741 {"SLIM_8_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14742 {"SLIM_8_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14743 {"SLIM_8_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14744 {"SLIM_8_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14745 {"SLIM_8_RX_Voice Mixer", "Voip", "VOIP_DL"},
14746 {"SLIM_8_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14747 {"SLIM_8_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14748 {"SLIM_8_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14749 {"SLIM_8_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14750 {"SLIM_8_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14751 {"SLIM_8_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14752 {"SLIM_8_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14753 {"SLIMBUS_8_RX", NULL, "SLIM_8_RX_Voice Mixer"},
14754
14755 {"SLIMBUS_1_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14756 {"SLIMBUS_1_RX Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14757 {"SLIMBUS_1_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14758 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Port Mixer"},
14759 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14760 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14761 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Port Mixer"},
14762 {"SLIMBUS_3_RX Port Mixer", "INTERNAL_BT_SCO_RX", "INT_BT_SCO_RX"},
14763 {"SLIMBUS_3_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14764 {"SLIMBUS_3_RX Port Mixer", "AFE_PCM_RX", "PCM_RX"},
14765 {"SLIMBUS_3_RX Port Mixer", "AUX_PCM_RX", "AUX_PCM_RX"},
14766 {"SLIMBUS_3_RX Port Mixer", "SLIM_0_RX", "SLIMBUS_0_RX"},
14767 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX Port Mixer"},
14768
14769 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14770 {"SLIMBUS_6_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14771 {"SLIMBUS_6_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14772 {"SLIMBUS_6_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14773 {"SLIMBUS_6_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14774 {"SLIMBUS_6_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14775 {"SLIMBUS_6_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14776 {"SLIMBUS_6_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14777 {"SLIMBUS_6_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14778 {"SLIMBUS_6_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14779 {"SLIMBUS_6_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14780 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14781 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Port Mixer"},
14782
14783 {"HDMI_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14784 {"HDMI", NULL, "HDMI_RX Port Mixer"},
14785
14786 {"DISPLAY_PORT_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14787 {"DISPLAY_PORT", NULL, "DISPLAY_PORT_RX Port Mixer"},
14788
14789 {"SEC_I2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14790 {"SEC_I2S_RX", NULL, "SEC_I2S_RX Port Mixer"},
14791
14792 {"MI2S_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14793 {"MI2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14794 {"MI2S_RX", NULL, "MI2S_RX Port Mixer"},
14795
14796 {"PRI_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14797 {"PRI_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14798 {"PRI_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14799 {"PRI_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14800 {"PRI_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14801 {"PRI_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14802 {"PRI_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14803 {"PRI_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14804 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Port Mixer"},
14805
14806 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14807 {"SEC_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14808 {"SEC_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14809 {"SEC_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14810 {"SEC_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14811 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14812 {"SEC_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14813 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Port Mixer"},
14814
14815 {"TERT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14816 {"TERT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14817 {"TERT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14818 {"TERT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14819 {"TERT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14820 {"TERT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14821 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Port Mixer"},
14822
14823 {"QUAT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14824 {"QUAT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14825 {"QUAT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14826 {"QUAT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14827 {"QUAT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14828 {"QUAT_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14829 {"QUAT_MI2S_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14830 {"QUAT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14831 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Port Mixer"},
14832
14833 /* Backend Enablement */
14834
14835 {"BE_OUT", NULL, "PRI_I2S_RX"},
14836 {"BE_OUT", NULL, "SEC_I2S_RX"},
14837 {"BE_OUT", NULL, "SLIMBUS_0_RX"},
14838 {"BE_OUT", NULL, "SLIMBUS_1_RX"},
14839 {"BE_OUT", NULL, "SLIMBUS_2_RX"},
14840 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
14841 {"BE_OUT", NULL, "SLIMBUS_4_RX"},
14842 {"BE_OUT", NULL, "SLIMBUS_5_RX"},
14843 {"BE_OUT", NULL, "SLIMBUS_6_RX"},
14844 {"BE_OUT", NULL, "SLIMBUS_7_RX"},
14845 {"BE_OUT", NULL, "SLIMBUS_8_RX"},
14846 {"BE_OUT", NULL, "USB_AUDIO_RX"},
14847 {"BE_OUT", NULL, "HDMI"},
14848 {"BE_OUT", NULL, "DISPLAY_PORT"},
14849 {"BE_OUT", NULL, "SPDIF_RX"},
14850 {"BE_OUT", NULL, "MI2S_RX"},
14851 {"BE_OUT", NULL, "QUAT_MI2S_RX"},
14852 {"BE_OUT", NULL, "QUIN_MI2S_RX"},
14853 {"BE_OUT", NULL, "TERT_MI2S_RX"},
14854 {"BE_OUT", NULL, "SEC_MI2S_RX"},
14855 {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"},
14856 {"BE_OUT", NULL, "PRI_MI2S_RX"},
14857 {"BE_OUT", NULL, "INT0_MI2S_RX"},
14858 {"BE_OUT", NULL, "INT4_MI2S_RX"},
14859 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
14860 {"BE_OUT", NULL, "INT_BT_A2DP_RX"},
14861 {"BE_OUT", NULL, "INT_FM_RX"},
14862 {"BE_OUT", NULL, "PCM_RX"},
14863 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
14864 {"BE_OUT", NULL, "AUX_PCM_RX"},
14865 {"BE_OUT", NULL, "SEC_AUX_PCM_RX"},
14866 {"BE_OUT", NULL, "TERT_AUX_PCM_RX"},
14867 {"BE_OUT", NULL, "QUAT_AUX_PCM_RX"},
14868 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
14869 {"BE_OUT", NULL, "INT_FM_RX"},
14870 {"BE_OUT", NULL, "PCM_RX"},
14871 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
14872 {"BE_OUT", NULL, "VOICE_PLAYBACK_TX"},
14873 {"BE_OUT", NULL, "VOICE2_PLAYBACK_TX"},
14874 {"BE_OUT", NULL, "PRI_TDM_RX_0"},
14875 {"BE_OUT", NULL, "PRI_TDM_RX_1"},
14876 {"BE_OUT", NULL, "PRI_TDM_RX_2"},
14877 {"BE_OUT", NULL, "PRI_TDM_RX_3"},
14878 {"BE_OUT", NULL, "SEC_TDM_RX_0"},
14879 {"BE_OUT", NULL, "SEC_TDM_RX_1"},
14880 {"BE_OUT", NULL, "SEC_TDM_RX_2"},
14881 {"BE_OUT", NULL, "SEC_TDM_RX_3"},
14882 {"BE_OUT", NULL, "TERT_TDM_RX_0"},
14883 {"BE_OUT", NULL, "TERT_TDM_RX_1"},
14884 {"BE_OUT", NULL, "TERT_TDM_RX_2"},
14885 {"BE_OUT", NULL, "TERT_TDM_RX_3"},
14886 {"BE_OUT", NULL, "TERT_TDM_RX_4"},
14887 {"BE_OUT", NULL, "QUAT_TDM_RX_0"},
14888 {"BE_OUT", NULL, "QUAT_TDM_RX_1"},
14889 {"BE_OUT", NULL, "QUAT_TDM_RX_2"},
14890 {"BE_OUT", NULL, "QUAT_TDM_RX_3"},
14891
14892 {"PRI_I2S_TX", NULL, "BE_IN"},
14893 {"MI2S_TX", NULL, "BE_IN"},
14894 {"QUAT_MI2S_TX", NULL, "BE_IN"},
14895 {"QUIN_MI2S_TX", NULL, "BE_IN"},
14896 {"PRI_MI2S_TX", NULL, "BE_IN"},
14897 {"TERT_MI2S_TX", NULL, "BE_IN"},
14898 {"INT2_MI2S_TX", NULL, "BE_IN"},
14899 {"INT3_MI2S_TX", NULL, "BE_IN"},
14900 {"INT5_MI2S_TX", NULL, "BE_IN"},
14901 {"SEC_MI2S_TX", NULL, "BE_IN"},
14902 {"SENARY_MI2S_TX", NULL, "BE_IN" },
14903 {"SLIMBUS_0_TX", NULL, "BE_IN" },
14904 {"SLIMBUS_1_TX", NULL, "BE_IN" },
14905 {"SLIMBUS_3_TX", NULL, "BE_IN" },
14906 {"SLIMBUS_4_TX", NULL, "BE_IN" },
14907 {"SLIMBUS_5_TX", NULL, "BE_IN" },
14908 {"SLIMBUS_6_TX", NULL, "BE_IN" },
14909 {"SLIMBUS_7_TX", NULL, "BE_IN" },
14910 {"SLIMBUS_8_TX", NULL, "BE_IN" },
14911 {"USB_AUDIO_TX", NULL, "BE_IN" },
14912 {"INT_BT_SCO_TX", NULL, "BE_IN"},
14913 {"INT_FM_TX", NULL, "BE_IN"},
14914 {"PCM_TX", NULL, "BE_IN"},
14915 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
14916 {"BE_OUT", NULL, "STUB_RX"},
14917 {"STUB_TX", NULL, "BE_IN"},
14918 {"STUB_1_TX", NULL, "BE_IN"},
14919 {"BE_OUT", NULL, "AUX_PCM_RX"},
14920 {"AUX_PCM_TX", NULL, "BE_IN"},
14921 {"SEC_AUX_PCM_TX", NULL, "BE_IN"},
14922 {"TERT_AUX_PCM_TX", NULL, "BE_IN"},
14923 {"QUAT_AUX_PCM_TX", NULL, "BE_IN"},
14924 {"INCALL_RECORD_TX", NULL, "BE_IN"},
14925 {"INCALL_RECORD_RX", NULL, "BE_IN"},
14926 {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
14927 {"SLIM0_RX_VI_FB_RCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
14928 {"PRI_MI2S_RX_VI_FB_MUX", "SENARY_TX", "SENARY_TX"},
14929 {"INT4_MI2S_RX_VI_FB_MONO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
14930 {"INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
14931 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"},
14932 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_RCH_MUX"},
14933 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_VI_FB_MUX"},
14934 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_MONO_CH_MUX"},
14935 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_STEREO_CH_MUX"},
14936 {"PRI_TDM_TX_0", NULL, "BE_IN"},
14937 {"PRI_TDM_TX_1", NULL, "BE_IN"},
14938 {"PRI_TDM_TX_2", NULL, "BE_IN"},
14939 {"PRI_TDM_TX_3", NULL, "BE_IN"},
14940 {"SEC_TDM_TX_0", NULL, "BE_IN"},
14941 {"SEC_TDM_TX_1", NULL, "BE_IN"},
14942 {"SEC_TDM_TX_2", NULL, "BE_IN"},
14943 {"SEC_TDM_TX_3", NULL, "BE_IN"},
14944 {"TERT_TDM_TX_0", NULL, "BE_IN"},
14945 {"TERT_TDM_TX_1", NULL, "BE_IN"},
14946 {"TERT_TDM_TX_2", NULL, "BE_IN"},
14947 {"TERT_TDM_TX_3", NULL, "BE_IN"},
14948 {"QUAT_TDM_TX_0", NULL, "BE_IN"},
14949 {"QUAT_TDM_TX_1", NULL, "BE_IN"},
14950 {"QUAT_TDM_TX_2", NULL, "BE_IN"},
14951 {"QUAT_TDM_TX_3", NULL, "BE_IN"},
14952};
14953
14954static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream,
14955 struct snd_pcm_hw_params *params)
14956{
14957 struct snd_soc_pcm_runtime *rtd = substream->private_data;
14958 unsigned int be_id = rtd->dai_link->id;
14959
14960 if (be_id >= MSM_BACKEND_DAI_MAX) {
14961 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
14962 return -EINVAL;
14963 }
14964
14965 mutex_lock(&routing_lock);
14966 msm_bedais[be_id].sample_rate = params_rate(params);
14967 msm_bedais[be_id].channel = params_channels(params);
14968 msm_bedais[be_id].format = params_format(params);
14969 pr_debug("%s: BE Sample Rate (%d) format (%d) BE id %d\n",
14970 __func__, msm_bedais[be_id].sample_rate,
14971 msm_bedais[be_id].format, be_id);
14972 mutex_unlock(&routing_lock);
14973 return 0;
14974}
14975
14976static int msm_pcm_routing_close(struct snd_pcm_substream *substream)
14977{
14978 struct snd_soc_pcm_runtime *rtd = substream->private_data;
14979 unsigned int be_id = rtd->dai_link->id;
14980 int i, session_type, path_type, topology;
14981 struct msm_pcm_routing_bdai_data *bedai;
14982 struct msm_pcm_routing_fdai_data *fdai;
14983
14984 pr_debug("%s: substream->pcm->id:%s\n",
14985 __func__, substream->pcm->id);
14986
14987 if (be_id >= MSM_BACKEND_DAI_MAX) {
14988 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
14989 return -EINVAL;
14990 }
14991
14992 bedai = &msm_bedais[be_id];
14993 session_type = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
14994 0 : 1);
14995 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
14996 path_type = ADM_PATH_PLAYBACK;
14997 else
14998 path_type = ADM_PATH_LIVE_REC;
14999
15000 mutex_lock(&routing_lock);
15001 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15002 if (!is_mm_lsm_fe_id(i))
15003 continue;
15004 fdai = &fe_dai_map[i][session_type];
15005 if (fdai->strm_id != INVALID_SESSION) {
15006 int idx;
15007 int port_id;
15008 unsigned long copp =
15009 session_copp_map[i][session_type][be_id];
15010 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++)
15011 if (test_bit(idx, &copp))
15012 break;
15013 fdai->be_srate = bedai->sample_rate;
15014 port_id = bedai->port_id;
15015 topology = adm_get_topology_for_port_copp_idx(port_id,
15016 idx);
15017 adm_close(bedai->port_id, fdai->perf_mode, idx);
15018 pr_debug("%s: copp:%ld,idx bit fe:%d, type:%d,be:%d topology=0x%x\n",
15019 __func__, copp, i, session_type, be_id,
15020 topology);
15021 clear_bit(idx,
15022 &session_copp_map[i][session_type][be_id]);
15023 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15024 (bedai->passthr_mode[i] == LEGACY_PCM))
15025 msm_pcm_routing_deinit_pp(bedai->port_id,
15026 topology);
15027 }
15028 }
15029
15030 bedai->active = 0;
15031 bedai->sample_rate = 0;
15032 bedai->channel = 0;
15033 for (i = 0; i < MSM_FRONTEND_DAI_MAX; i++) {
15034 if (bedai->passthr_mode[i] != LISTEN)
15035 bedai->passthr_mode[i] = LEGACY_PCM;
15036 }
15037 mutex_unlock(&routing_lock);
15038
15039 return 0;
15040}
15041
15042static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
15043{
15044 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15045 unsigned int be_id = rtd->dai_link->id;
15046 int i, path_type, topology;
15047 int session_type = INVALID_SESSION;
15048 struct msm_pcm_routing_bdai_data *bedai;
15049 u32 channels, sample_rate;
15050 uint16_t bits_per_sample = 16, voc_path_type;
15051 struct msm_pcm_routing_fdai_data *fdai;
15052 u32 session_id;
15053 struct media_format_info voc_be_media_format;
15054 bool is_lsm;
15055
15056 pr_debug("%s: substream->pcm->id:%s\n",
15057 __func__, substream->pcm->id);
15058
15059 if (be_id >= MSM_BACKEND_DAI_MAX) {
15060 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15061 return -EINVAL;
15062 }
15063
15064 bedai = &msm_bedais[be_id];
15065
15066 mutex_lock(&routing_lock);
15067 if (bedai->active == 1)
15068 goto done; /* Ignore prepare if back-end already active */
15069
15070 /* AFE port is not active at this point. However, still
15071 * go ahead setting active flag under the notion that
15072 * QDSP6 is able to handle ADM starting before AFE port
15073 * is started.
15074 */
15075 bedai->active = 1;
15076
15077 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15078 if (!(is_mm_lsm_fe_id(i) &&
15079 route_check_fe_id_adm_support(i)))
15080 continue;
15081
15082 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
15083 if (bedai->passthr_mode[i] != LEGACY_PCM)
15084 path_type = ADM_PATH_COMPRESSED_RX;
15085 else
15086 path_type = ADM_PATH_PLAYBACK;
15087 session_type = SESSION_TYPE_RX;
15088 } else {
15089 path_type = ADM_PATH_LIVE_REC;
15090 session_type = SESSION_TYPE_TX;
15091 }
15092
15093 is_lsm = (i >= MSM_FRONTEND_DAI_LSM1) &&
15094 (i <= MSM_FRONTEND_DAI_LSM8);
15095 fdai = &fe_dai_map[i][session_type];
15096 if (fdai->strm_id != INVALID_SESSION) {
15097 int app_type, app_type_idx, copp_idx, acdb_dev_id;
15098
15099 if (session_type == SESSION_TYPE_TX &&
15100 fdai->be_srate &&
15101 (fdai->be_srate != bedai->sample_rate)) {
15102 pr_debug("%s: flush strm %d diff BE rates\n",
15103 __func__,
15104 fdai->strm_id);
15105
15106 if (fdai->event_info.event_func)
15107 fdai->event_info.event_func(
15108 MSM_PCM_RT_EVT_BUF_RECFG,
15109 fdai->event_info.priv_data);
15110 fdai->be_srate = 0; /* might not need it */
15111 }
15112 bits_per_sample = msm_routing_get_bit_width(
15113 bedai->format);
15114
15115 app_type =
15116 fe_dai_app_type_cfg[i][session_type][be_id].app_type;
15117 if (app_type && is_lsm) {
15118 app_type_idx =
15119 msm_pcm_routing_get_lsm_app_type_idx(app_type);
15120 sample_rate =
15121 fe_dai_app_type_cfg[i][session_type][be_id]
15122 .sample_rate;
15123 bits_per_sample =
15124 lsm_app_type_cfg[app_type_idx].bit_width;
15125 } else if (app_type) {
15126 app_type_idx =
15127 msm_pcm_routing_get_app_type_idx(app_type);
15128 sample_rate =
15129 fe_dai_app_type_cfg[i][session_type]
15130 [be_id].sample_rate;
15131 bits_per_sample =
15132 app_type_cfg[app_type_idx].bit_width;
15133 } else
15134 sample_rate = bedai->sample_rate;
15135 /*
15136 * check if ADM needs to be configured with different
15137 * channel mapping than backend
15138 */
15139 if (!bedai->adm_override_ch)
15140 channels = bedai->channel;
15141 else
15142 channels = bedai->adm_override_ch;
15143 acdb_dev_id =
15144 fe_dai_app_type_cfg[i][session_type][be_id].acdb_dev_id;
15145 topology = msm_routing_get_adm_topology(i, session_type,
15146 be_id);
15147 copp_idx = adm_open(bedai->port_id, path_type,
15148 sample_rate, channels, topology,
15149 fdai->perf_mode, bits_per_sample,
15150 app_type, acdb_dev_id);
15151 if ((copp_idx < 0) ||
15152 (copp_idx >= MAX_COPPS_PER_PORT)) {
15153 pr_err("%s: adm open failed\n", __func__);
15154 mutex_unlock(&routing_lock);
15155 return -EINVAL;
15156 }
15157 pr_debug("%s: setting idx bit of fe:%d, type: %d, be:%d\n",
15158 __func__, i, session_type, be_id);
15159 set_bit(copp_idx,
15160 &session_copp_map[i][session_type][be_id]);
15161
15162 if (msm_is_resample_needed(
15163 sample_rate,
15164 bedai->sample_rate))
15165 adm_copp_mfc_cfg(
15166 bedai->port_id, copp_idx,
15167 bedai->sample_rate);
15168
15169 msm_pcm_routing_build_matrix(i, session_type, path_type,
15170 fdai->perf_mode,
15171 bedai->passthr_mode[i]);
15172 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15173 (bedai->passthr_mode[i] == LEGACY_PCM))
15174 msm_pcm_routing_cfg_pp(bedai->port_id, copp_idx,
15175 topology, channels);
15176 }
15177 }
15178
15179 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15180 session_id = msm_pcm_routing_get_voc_sessionid(i);
15181 if (session_id) {
15182 pr_debug("%s voice session_id: 0x%x\n", __func__,
15183 session_id);
15184
15185 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
15186 voc_path_type = RX_PATH;
15187 else
15188 voc_path_type = TX_PATH;
15189
15190 voc_set_route_flag(session_id, voc_path_type, 1);
15191
15192 memset(&voc_be_media_format, 0,
15193 sizeof(struct media_format_info));
15194
15195 voc_be_media_format.port_id = bedai->port_id;
15196 voc_be_media_format.num_channels = bedai->channel;
15197 voc_be_media_format.sample_rate = bedai->sample_rate;
15198 voc_be_media_format.bits_per_sample = bedai->format;
15199 /* Defaulting this to 1 for voice call usecases */
15200 voc_be_media_format.channel_mapping[0] = 1;
15201
15202 voc_set_device_config(session_id, voc_path_type,
15203 &voc_be_media_format);
15204
15205 if (voc_get_route_flag(session_id, RX_PATH) &&
15206 voc_get_route_flag(session_id, TX_PATH))
15207 voc_enable_device(session_id);
15208 }
15209 }
15210
15211 /* Check if backend is an external ec ref port and set as needed */
15212 if (unlikely(bedai->port_id == voc_get_ext_ec_ref_port_id())) {
15213
15214 memset(&voc_be_media_format, 0,
15215 sizeof(struct media_format_info));
15216
15217 /* Get format info for ec ref port from msm_bedais[] */
15218 voc_be_media_format.port_id = bedai->port_id;
15219 voc_be_media_format.num_channels = bedai->channel;
15220 voc_be_media_format.bits_per_sample = bedai->format;
15221 voc_be_media_format.sample_rate = bedai->sample_rate;
15222 /* Defaulting this to 1 for voice call usecases */
15223 voc_be_media_format.channel_mapping[0] = 1;
15224 voc_set_ext_ec_ref_media_fmt_info(&voc_be_media_format);
15225 pr_debug("%s: EC Ref media format info set to port_id=%d, num_channels=%d, bits_per_sample=%d, sample_rate=%d\n",
15226 __func__, voc_be_media_format.port_id,
15227 voc_be_media_format.num_channels,
15228 voc_be_media_format.bits_per_sample,
15229 voc_be_media_format.sample_rate);
15230 }
15231
15232done:
15233 mutex_unlock(&routing_lock);
15234
15235 return 0;
15236}
15237
15238static int msm_routing_send_device_pp_params(int port_id, int copp_idx,
15239 int fe_id)
15240{
15241 int index, topo_id, be_idx;
15242 unsigned long pp_config = 0;
15243 bool mute_on;
15244 int latency;
15245 bool compr_passthr_mode = true;
15246
15247 pr_debug("%s: port_id %d, copp_idx %d\n", __func__, port_id, copp_idx);
15248
15249 if (port_id != HDMI_RX && port_id != DISPLAY_PORT_RX) {
15250 pr_err("%s: Device pp params on invalid port %d\n",
15251 __func__, port_id);
15252 return -EINVAL;
15253 }
15254
15255 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15256 if (port_id == msm_bedais[be_idx].port_id)
15257 break;
15258 }
15259
15260 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15261 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15262 return -EINVAL;
15263 }
15264
15265 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15266 if (msm_bedais_pp_params[index].port_id == port_id)
15267 break;
15268 }
15269 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15270 pr_err("%s: Invalid backend pp params index %d\n",
15271 __func__, index);
15272 return -EINVAL;
15273 }
15274
15275 topo_id = adm_get_topology_for_port_copp_idx(port_id, copp_idx);
15276 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY) {
15277 pr_err("%s: Invalid passthrough topology 0x%x\n",
15278 __func__, topo_id);
15279 return -EINVAL;
15280 }
15281
15282 if ((msm_bedais[be_idx].passthr_mode[fe_id] == LEGACY_PCM) ||
15283 (msm_bedais[be_idx].passthr_mode[fe_id] == LISTEN))
15284 compr_passthr_mode = false;
15285
15286 pp_config = msm_bedais_pp_params[index].pp_params_config;
15287 if (test_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config)) {
15288 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15289 clear_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config);
15290 mute_on = msm_bedais_pp_params[index].mute_on;
15291 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15292 adm_send_compressed_device_mute(port_id,
15293 copp_idx,
15294 mute_on);
15295 }
15296 if (test_bit(ADM_PP_PARAM_LATENCY_BIT, &pp_config)) {
15297 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15298 clear_bit(ADM_PP_PARAM_LATENCY_BIT,
15299 &pp_config);
15300 latency = msm_bedais_pp_params[index].latency;
15301 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15302 adm_send_compressed_device_latency(port_id,
15303 copp_idx,
15304 latency);
15305 }
15306 return 0;
15307}
15308
15309static int msm_routing_put_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15310 struct snd_ctl_elem_value *ucontrol)
15311{
15312 int pp_id = ucontrol->value.integer.value[0];
15313 int port_id = 0;
15314 int index, be_idx, i, topo_id, idx;
15315 bool mute;
15316 int latency;
15317 bool compr_passthr_mode = true;
15318
15319 pr_debug("%s: pp_id: 0x%x\n", __func__, pp_id);
15320
15321 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15322 port_id = msm_bedais[be_idx].port_id;
15323 if (port_id == HDMI_RX || port_id == DISPLAY_PORT_RX)
15324 break;
15325 }
15326
15327 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15328 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15329 return -EINVAL;
15330 }
15331
15332 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15333 if (msm_bedais_pp_params[index].port_id == port_id)
15334 break;
15335 }
15336 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15337 pr_err("%s: Invalid pp params backend index %d\n",
15338 __func__, index);
15339 return -EINVAL;
15340 }
15341
15342 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
15343 MSM_FRONTEND_DAI_MM_SIZE) {
15344 if ((msm_bedais[be_idx].passthr_mode[i] == LEGACY_PCM) ||
15345 (msm_bedais[be_idx].passthr_mode[i] == LISTEN))
15346 compr_passthr_mode = false;
15347
15348 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15349 unsigned long copp =
15350 session_copp_map[i]
15351 [SESSION_TYPE_RX][be_idx];
15352 if (!test_bit(idx, &copp))
15353 continue;
15354 topo_id = adm_get_topology_for_port_copp_idx(port_id,
15355 idx);
15356 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY)
15357 continue;
15358 pr_debug("%s: port: 0x%x, copp %ld, be active: %d, passt: %d\n",
15359 __func__, port_id, copp, msm_bedais[be_idx].active,
15360 msm_bedais[be_idx].passthr_mode[i]);
15361 switch (pp_id) {
15362 case ADM_PP_PARAM_MUTE_ID:
15363 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15364 mute = ucontrol->value.integer.value[1] ? true : false;
15365 msm_bedais_pp_params[index].mute_on = mute;
15366 set_bit(ADM_PP_PARAM_MUTE_BIT,
15367 &msm_bedais_pp_params[index].pp_params_config);
15368 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15369 adm_send_compressed_device_mute(port_id,
15370 idx, mute);
15371 break;
15372 case ADM_PP_PARAM_LATENCY_ID:
15373 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15374 msm_bedais_pp_params[index].latency =
15375 ucontrol->value.integer.value[1];
15376 set_bit(ADM_PP_PARAM_LATENCY_BIT,
15377 &msm_bedais_pp_params[index].pp_params_config);
15378 latency = msm_bedais_pp_params[index].latency =
15379 ucontrol->value.integer.value[1];
15380 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15381 adm_send_compressed_device_latency(port_id,
15382 idx, latency);
15383 break;
15384 default:
15385 pr_info("%s, device pp param %d not supported\n",
15386 __func__, pp_id);
15387 break;
15388 }
15389 }
15390 }
15391 return 0;
15392}
15393
15394static int msm_routing_get_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15395 struct snd_ctl_elem_value *ucontrol)
15396{
15397 pr_debug("%s:msm_routing_get_device_pp_params_mixer", __func__);
15398 return 0;
15399}
15400
15401static const struct snd_kcontrol_new device_pp_params_mixer_controls[] = {
15402 SOC_SINGLE_MULTI_EXT("Device PP Params", SND_SOC_NOPM, 0, 0xFFFFFFFF,
15403 0, 3, msm_routing_get_device_pp_params_mixer,
15404 msm_routing_put_device_pp_params_mixer),
15405};
15406
15407static int msm_aptx_dec_license_control_get(struct snd_kcontrol *kcontrol,
15408 struct snd_ctl_elem_value *ucontrol)
15409{
15410 ucontrol->value.integer.value[0] =
15411 core_get_license_status(ASM_MEDIA_FMT_APTX);
15412 pr_debug("%s: status %ld\n", __func__,
15413 ucontrol->value.integer.value[0]);
15414 return 0;
15415}
15416
15417static int msm_aptx_dec_license_control_put(struct snd_kcontrol *kcontrol,
15418 struct snd_ctl_elem_value *ucontrol)
15419{
15420 int32_t status = 0;
15421
15422 status = core_set_license(ucontrol->value.integer.value[0],
15423 APTX_CLASSIC_DEC_LICENSE_ID);
15424 pr_debug("%s: status %d\n", __func__, status);
15425 return status;
15426}
15427
15428static const struct snd_kcontrol_new aptx_dec_license_controls[] = {
15429 SOC_SINGLE_EXT("APTX Dec License", SND_SOC_NOPM, 0,
15430 0xFFFF, 0, msm_aptx_dec_license_control_get,
15431 msm_aptx_dec_license_control_put),
15432};
15433
15434static int msm_routing_be_dai_name_table_info(struct snd_kcontrol *kcontrol,
15435 struct snd_ctl_elem_info *uinfo)
15436{
15437 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
15438 uinfo->count = sizeof(be_dai_name_table);
15439 return 0;
15440}
15441
15442static int msm_routing_be_dai_name_table_tlv_get(struct snd_kcontrol *kcontrol,
15443 unsigned int __user *bytes,
15444 unsigned int size)
15445{
15446 int i;
15447 int ret;
15448
15449 if (size < sizeof(be_dai_name_table)) {
15450 pr_err("%s: invalid size %d requested, returning\n",
15451 __func__, size);
15452 ret = -EINVAL;
15453 goto done;
15454 }
15455
15456 /*
15457 * Fill be_dai_name_table from msm_bedais table to reduce code changes
15458 * needed when adding new backends
15459 */
15460 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15461 be_dai_name_table[i].be_id = i;
15462 strlcpy(be_dai_name_table[i].be_name,
15463 msm_bedais[i].name,
15464 LPASS_BE_NAME_MAX_LENGTH);
15465 }
15466
15467 ret = copy_to_user(bytes, &be_dai_name_table,
15468 sizeof(be_dai_name_table));
15469 if (ret) {
15470 pr_err("%s: failed to copy be_dai_name_table\n", __func__);
15471 ret = -EFAULT;
15472 }
15473
15474done:
15475 return ret;
15476}
15477
15478static const struct snd_kcontrol_new
15479 msm_routing_be_dai_name_table_mixer_controls[] = {
15480 {
15481 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |
15482 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK,
15483 .info = msm_routing_be_dai_name_table_info,
15484 .name = "Backend DAI Name Table",
15485 .tlv.c = snd_soc_bytes_tlv_callback,
15486 .private_value = (unsigned long) &(struct soc_bytes_ext) {
15487 .max = sizeof(be_dai_name_table),
15488 .get = msm_routing_be_dai_name_table_tlv_get,
15489 }
15490 },
15491};
15492
15493static int msm_routing_stereo_channel_reverse_control_get(
15494 struct snd_kcontrol *kcontrol,
15495 struct snd_ctl_elem_value *ucontrol)
15496{
15497 ucontrol->value.integer.value[0] = swap_ch;
15498 pr_debug("%s: Swap channel value: %ld\n", __func__,
15499 ucontrol->value.integer.value[0]);
15500 return 0;
15501}
15502
15503static int msm_routing_stereo_channel_reverse_control_put(
15504 struct snd_kcontrol *kcontrol,
15505 struct snd_ctl_elem_value *ucontrol)
15506{
15507 int i, idx, be_index, port_id;
15508 int ret = 0;
15509 unsigned long copp;
15510
15511 pr_debug("%s Swap channel value:%ld\n", __func__,
15512 ucontrol->value.integer.value[0]);
15513
15514 swap_ch = ucontrol->value.integer.value[0];
15515
15516 mutex_lock(&routing_lock);
15517 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
15518 port_id = msm_bedais[be_index].port_id;
15519 if (!msm_bedais[be_index].active)
15520 continue;
15521
15522 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
15523 MSM_FRONTEND_DAI_MM_SIZE) {
15524 copp = session_copp_map[i][SESSION_TYPE_RX][be_index];
15525 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15526 if (!test_bit(idx, &copp))
15527 continue;
15528
15529 pr_debug("%s: swap channel control of portid:%d, coppid:%d\n",
15530 __func__, port_id, idx);
15531 ret = adm_swap_speaker_channels(
15532 port_id, idx,
15533 msm_bedais[be_index].sample_rate,
15534 swap_ch);
15535 if (ret) {
15536 pr_err("%s:Swap_channel failed, err=%d\n",
15537 __func__, ret);
15538 goto done;
15539 }
15540 }
15541 }
15542 }
15543done:
15544 mutex_unlock(&routing_lock);
15545 return ret;
15546}
15547
15548static const struct snd_kcontrol_new stereo_channel_reverse_control[] = {
15549 SOC_SINGLE_EXT("Swap channel", SND_SOC_NOPM, 0,
15550 1, 0, msm_routing_stereo_channel_reverse_control_get,
15551 msm_routing_stereo_channel_reverse_control_put),
15552};
15553
15554static const struct snd_pcm_ops msm_routing_pcm_ops = {
15555 .hw_params = msm_pcm_routing_hw_params,
15556 .close = msm_pcm_routing_close,
15557 .prepare = msm_pcm_routing_prepare,
15558};
15559
15560/* Not used but frame seems to require it */
15561static int msm_routing_probe(struct snd_soc_platform *platform)
15562{
15563 snd_soc_dapm_new_controls(&platform->component.dapm, msm_qdsp6_widgets,
15564 ARRAY_SIZE(msm_qdsp6_widgets));
15565 snd_soc_dapm_add_routes(&platform->component.dapm, intercon,
15566 ARRAY_SIZE(intercon));
15567
15568 snd_soc_dapm_new_widgets(platform->component.dapm.card);
15569
15570 snd_soc_add_platform_controls(platform, lsm_controls,
15571 ARRAY_SIZE(lsm_controls));
15572
15573 snd_soc_add_platform_controls(platform, aanc_slim_0_rx_mux,
15574 ARRAY_SIZE(aanc_slim_0_rx_mux));
15575
15576 snd_soc_add_platform_controls(platform, msm_voc_session_controls,
15577 ARRAY_SIZE(msm_voc_session_controls));
15578
15579 snd_soc_add_platform_controls(platform, app_type_cfg_controls,
15580 ARRAY_SIZE(app_type_cfg_controls));
15581
15582 snd_soc_add_platform_controls(platform, lsm_app_type_cfg_controls,
15583 ARRAY_SIZE(lsm_app_type_cfg_controls));
15584
15585 snd_soc_add_platform_controls(platform,
15586 stereo_to_custom_stereo_controls,
15587 ARRAY_SIZE(stereo_to_custom_stereo_controls));
15588
15589 snd_soc_add_platform_controls(platform, ec_ref_param_controls,
15590 ARRAY_SIZE(ec_ref_param_controls));
15591
15592 snd_soc_add_platform_controls(platform, channel_mixer_controls,
15593 ARRAY_SIZE(channel_mixer_controls));
15594
15595 msm_qti_pp_add_controls(platform);
15596
15597 msm_dts_srs_tm_add_controls(platform);
15598
15599 msm_dolby_dap_add_controls(platform);
15600
15601 snd_soc_add_platform_controls(platform,
15602 use_ds1_or_ds2_controls,
15603 ARRAY_SIZE(use_ds1_or_ds2_controls));
15604
15605 snd_soc_add_platform_controls(platform,
15606 device_pp_params_mixer_controls,
15607 ARRAY_SIZE(device_pp_params_mixer_controls));
15608
15609 snd_soc_add_platform_controls(platform,
15610 msm_routing_be_dai_name_table_mixer_controls,
15611 ARRAY_SIZE(msm_routing_be_dai_name_table_mixer_controls));
15612
15613 snd_soc_add_platform_controls(platform, msm_source_tracking_controls,
15614 ARRAY_SIZE(msm_source_tracking_controls));
15615 snd_soc_add_platform_controls(platform, adm_channel_config_controls,
15616 ARRAY_SIZE(adm_channel_config_controls));
15617
15618 snd_soc_add_platform_controls(platform, aptx_dec_license_controls,
15619 ARRAY_SIZE(aptx_dec_license_controls));
15620 snd_soc_add_platform_controls(platform, stereo_channel_reverse_control,
15621 ARRAY_SIZE(stereo_channel_reverse_control));
15622 return 0;
15623}
15624
15625int msm_routing_pcm_new(struct snd_soc_pcm_runtime *runtime)
15626{
15627 return msm_pcm_routing_hwdep_new(runtime, msm_bedais);
15628}
15629
15630void msm_routing_pcm_free(struct snd_pcm *pcm)
15631{
15632 msm_pcm_routing_hwdep_free(pcm);
15633}
15634
15635static struct snd_soc_platform_driver msm_soc_routing_platform = {
15636 .ops = &msm_routing_pcm_ops,
15637 .probe = msm_routing_probe,
15638 .pcm_new = msm_routing_pcm_new,
15639 .pcm_free = msm_routing_pcm_free,
15640};
15641
15642static int msm_routing_pcm_probe(struct platform_device *pdev)
15643{
15644
15645 dev_dbg(&pdev->dev, "dev name %s\n", dev_name(&pdev->dev));
15646 return snd_soc_register_platform(&pdev->dev,
15647 &msm_soc_routing_platform);
15648}
15649
15650static int msm_routing_pcm_remove(struct platform_device *pdev)
15651{
15652 snd_soc_unregister_platform(&pdev->dev);
15653 return 0;
15654}
15655
15656static const struct of_device_id msm_pcm_routing_dt_match[] = {
15657 {.compatible = "qcom,msm-pcm-routing"},
15658 {}
15659};
15660MODULE_DEVICE_TABLE(of, msm_pcm_routing_dt_match);
15661
15662static struct platform_driver msm_routing_pcm_driver = {
15663 .driver = {
15664 .name = "msm-pcm-routing",
15665 .owner = THIS_MODULE,
15666 .of_match_table = msm_pcm_routing_dt_match,
15667 },
15668 .probe = msm_routing_pcm_probe,
15669 .remove = msm_routing_pcm_remove,
15670};
15671
15672int msm_routing_check_backend_enabled(int fedai_id)
15673{
15674 int i;
15675
15676 if (fedai_id > MSM_FRONTEND_DAI_MM_MAX_ID) {
15677 /* bad ID assigned in machine driver */
15678 pr_err("%s: bad MM ID\n", __func__);
15679 return 0;
15680 }
15681 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15682 if (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))
15683 return msm_bedais[i].active;
15684 }
15685 return 0;
15686}
15687
15688static int msm_routing_set_cal(int32_t cal_type,
15689 size_t data_size, void *data)
15690{
15691 int ret = 0;
15692
15693 pr_debug("%s\n", __func__);
15694
15695 ret = cal_utils_set_cal(data_size, data, cal_data, 0, NULL);
15696 if (ret < 0) {
15697 pr_err("%s: cal_utils_set_cal failed, ret = %d, cal type = %d!\n",
15698 __func__, ret, cal_type);
15699 ret = -EINVAL;
15700 goto done;
15701 }
15702done:
15703 return ret;
15704}
15705
15706static void msm_routing_delete_cal_data(void)
15707{
15708 pr_debug("%s\n", __func__);
15709
15710 cal_utils_destroy_cal_types(1, &cal_data);
15711}
15712
15713static int msm_routing_init_cal_data(void)
15714{
15715 int ret = 0;
15716 struct cal_type_info cal_type_info = {
15717 {ADM_TOPOLOGY_CAL_TYPE,
15718 {NULL, NULL, NULL,
15719 msm_routing_set_cal, NULL, NULL} },
15720 {NULL, NULL, cal_utils_match_buf_num}
15721 };
15722 pr_debug("%s\n", __func__);
15723
15724 ret = cal_utils_create_cal_types(1, &cal_data,
15725 &cal_type_info);
15726 if (ret < 0) {
15727 pr_err("%s: could not create cal type!\n",
15728 __func__);
15729 ret = -EINVAL;
15730 goto err;
15731 }
15732
15733 return ret;
15734err:
15735 msm_routing_delete_cal_data();
15736 return ret;
15737}
15738
15739static int __init msm_soc_routing_platform_init(void)
15740{
15741 mutex_init(&routing_lock);
15742 if (msm_routing_init_cal_data())
15743 pr_err("%s: could not init cal data!\n", __func__);
15744
15745 afe_set_routing_callback(
15746 (routing_cb)msm_pcm_get_dev_acdb_id_by_port_id);
15747
15748 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
15749 memset(&last_be_id_configured, 0, sizeof(last_be_id_configured));
15750
15751 return platform_driver_register(&msm_routing_pcm_driver);
15752}
15753module_init(msm_soc_routing_platform_init);
15754
15755static void __exit msm_soc_routing_platform_exit(void)
15756{
15757 msm_routing_delete_cal_data();
15758 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
15759 mutex_destroy(&routing_lock);
15760 platform_driver_unregister(&msm_routing_pcm_driver);
15761}
15762module_exit(msm_soc_routing_platform_exit);
15763
15764MODULE_DESCRIPTION("MSM routing platform driver");
15765MODULE_LICENSE("GPL v2");