blob: 788946ad8ea17639c629563b260a0b4c831404a5 [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>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053028#include <sound/tlv.h>
29#include <sound/asound.h>
30#include <sound/pcm_params.h>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053031#include <sound/hwdep.h>
Laxminath Kasam605b42f2017-08-01 22:02:15 +053032#include <sound/audio_effects.h>
33#include <asoc/msm-dts-srs-tm-config.h>
34#include <dsp/q6voice.h>
35#include <dsp/q6adm-v2.h>
36#include <dsp/q6asm-v2.h>
37#include <dsp/q6afe-v2.h>
38#include <dsp/q6lsm.h>
39#include <dsp/q6core.h>
40#include <dsp/audio_cal_utils.h>
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053041
42#include "msm-pcm-routing-v2.h"
43#include "msm-pcm-routing-devdep.h"
44#include "msm-qti-pp-config.h"
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053045#include "msm-dolby-dap-config.h"
46#include "msm-ds2-dap-config.h"
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053047
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;
Laxminath Kasam38070be2017-08-17 18:21:59 +05301096 if ((passthr_mode != LEGACY_PCM) && (passthr_mode != LISTEN))
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301097 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{
Asish Bhattacharya34504582017-08-08 12:55:01 +05301771 struct snd_soc_dapm_widget *widget =
1772 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301773 struct soc_mixer_control *mc =
1774 (struct soc_mixer_control *)kcontrol->private_value;
1775 struct snd_soc_dapm_update *update = NULL;
1776
1777 if (ucontrol->value.integer.value[0] &&
1778 msm_pcm_routing_route_is_set(mc->reg, mc->shift) == false) {
1779 msm_pcm_routing_process_audio(mc->reg, mc->shift, 1);
1780 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1781 update);
1782 } else if (!ucontrol->value.integer.value[0] &&
1783 msm_pcm_routing_route_is_set(mc->reg, mc->shift) == true) {
1784 msm_pcm_routing_process_audio(mc->reg, mc->shift, 0);
1785 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1786 update);
1787 }
1788
1789 return 1;
1790}
1791
1792static int msm_routing_get_listen_mixer(struct snd_kcontrol *kcontrol,
1793 struct snd_ctl_elem_value *ucontrol)
1794{
1795 struct soc_mixer_control *mc =
1796 (struct soc_mixer_control *)kcontrol->private_value;
1797
1798 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1799 ucontrol->value.integer.value[0] = 1;
1800 else
1801 ucontrol->value.integer.value[0] = 0;
1802
1803 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1804 ucontrol->value.integer.value[0]);
1805
1806 return 0;
1807}
1808
1809static int msm_routing_put_listen_mixer(struct snd_kcontrol *kcontrol,
1810 struct snd_ctl_elem_value *ucontrol)
1811{
Asish Bhattacharya34504582017-08-08 12:55:01 +05301812 struct snd_soc_dapm_widget *widget =
1813 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301814 struct soc_mixer_control *mc =
1815 (struct soc_mixer_control *)kcontrol->private_value;
1816 struct snd_soc_dapm_update *update = NULL;
1817
1818 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1819 ucontrol->value.integer.value[0]);
1820
1821 if (ucontrol->value.integer.value[0]) {
1822 if (msm_pcm_routing_route_is_set(mc->reg, mc->shift) == false)
1823 msm_pcm_routing_process_audio(mc->reg, mc->shift, 1);
1824 snd_soc_dapm_mixer_update_power(widget->dapm,
1825 kcontrol, 1, update);
1826 } else if (!ucontrol->value.integer.value[0]) {
1827 if (msm_pcm_routing_route_is_set(mc->reg, mc->shift) == true)
1828 msm_pcm_routing_process_audio(mc->reg, mc->shift, 0);
1829 snd_soc_dapm_mixer_update_power(widget->dapm,
1830 kcontrol, 0, update);
1831 }
1832
1833 return 1;
1834}
1835
1836static void msm_pcm_routing_process_voice(u16 reg, u16 val, int set)
1837{
1838 u32 session_id = 0;
1839 u16 path_type;
1840 struct media_format_info voc_be_media_format;
1841
1842 pr_debug("%s: reg %x val %x set %x\n", __func__, reg, val, set);
1843
1844 session_id = msm_pcm_routing_get_voc_sessionid(val);
1845
1846 pr_debug("%s: FE DAI 0x%x session_id 0x%x\n",
1847 __func__, val, session_id);
1848
1849 mutex_lock(&routing_lock);
1850
1851 if (set)
1852 set_bit(val, &msm_bedais[reg].fe_sessions[0]);
1853 else
1854 clear_bit(val, &msm_bedais[reg].fe_sessions[0]);
1855
1856 if (val == MSM_FRONTEND_DAI_DTMF_RX &&
1857 afe_get_port_type(msm_bedais[reg].port_id) ==
1858 MSM_AFE_PORT_TYPE_RX) {
1859 pr_debug("%s(): set=%d port id=0x%x for dtmf generation\n",
1860 __func__, set, msm_bedais[reg].port_id);
1861 afe_set_dtmf_gen_rx_portid(msm_bedais[reg].port_id, set);
1862 }
1863
1864 if (afe_get_port_type(msm_bedais[reg].port_id) ==
1865 MSM_AFE_PORT_TYPE_RX)
1866 path_type = RX_PATH;
1867 else
1868 path_type = TX_PATH;
1869
1870 if (set) {
1871 if (msm_bedais[reg].active) {
1872 voc_set_route_flag(session_id, path_type, 1);
1873
1874 memset(&voc_be_media_format, 0,
1875 sizeof(struct media_format_info));
1876
1877 voc_be_media_format.port_id = msm_bedais[reg].port_id;
1878 voc_be_media_format.num_channels =
1879 msm_bedais[reg].channel;
1880 voc_be_media_format.sample_rate =
1881 msm_bedais[reg].sample_rate;
1882 voc_be_media_format.bits_per_sample =
1883 msm_bedais[reg].format;
1884 /* Defaulting this to 1 for voice call usecases */
1885 voc_be_media_format.channel_mapping[0] = 1;
1886
1887 voc_set_device_config(session_id, path_type,
1888 &voc_be_media_format);
1889
1890 if (voc_get_route_flag(session_id, TX_PATH) &&
1891 voc_get_route_flag(session_id, RX_PATH))
1892 voc_enable_device(session_id);
1893 } else {
1894 pr_debug("%s BE is not active\n", __func__);
1895 }
1896 } else {
1897 voc_set_route_flag(session_id, path_type, 0);
1898 voc_disable_device(session_id);
1899 }
1900
1901 mutex_unlock(&routing_lock);
1902
1903}
1904
1905static int msm_routing_get_voice_mixer(struct snd_kcontrol *kcontrol,
1906 struct snd_ctl_elem_value *ucontrol)
1907{
1908 struct soc_mixer_control *mc =
1909 (struct soc_mixer_control *)kcontrol->private_value;
1910
1911 mutex_lock(&routing_lock);
1912
1913 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1914 ucontrol->value.integer.value[0] = 1;
1915 else
1916 ucontrol->value.integer.value[0] = 0;
1917
1918 mutex_unlock(&routing_lock);
1919
1920 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1921 ucontrol->value.integer.value[0]);
1922
1923 return 0;
1924}
1925
1926static int msm_routing_put_voice_mixer(struct snd_kcontrol *kcontrol,
1927 struct snd_ctl_elem_value *ucontrol)
1928{
Asish Bhattacharya34504582017-08-08 12:55:01 +05301929 struct snd_soc_dapm_widget *widget =
1930 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301931 struct soc_mixer_control *mc =
1932 (struct soc_mixer_control *)kcontrol->private_value;
1933 struct snd_soc_dapm_update *update = NULL;
1934
1935 if (ucontrol->value.integer.value[0]) {
1936 msm_pcm_routing_process_voice(mc->reg, mc->shift, 1);
1937 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1938 update);
1939 } else {
1940 msm_pcm_routing_process_voice(mc->reg, mc->shift, 0);
1941 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1942 update);
1943 }
1944
1945 return 1;
1946}
1947
1948static int msm_routing_get_voice_stub_mixer(struct snd_kcontrol *kcontrol,
1949 struct snd_ctl_elem_value *ucontrol)
1950{
1951 struct soc_mixer_control *mc =
1952 (struct soc_mixer_control *)kcontrol->private_value;
1953
1954 mutex_lock(&routing_lock);
1955
1956 if (test_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]))
1957 ucontrol->value.integer.value[0] = 1;
1958 else
1959 ucontrol->value.integer.value[0] = 0;
1960
1961 mutex_unlock(&routing_lock);
1962
1963 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1964 ucontrol->value.integer.value[0]);
1965
1966 return 0;
1967}
1968
1969static int msm_routing_put_voice_stub_mixer(struct snd_kcontrol *kcontrol,
1970 struct snd_ctl_elem_value *ucontrol)
1971{
Asish Bhattacharya34504582017-08-08 12:55:01 +05301972 struct snd_soc_dapm_widget *widget =
1973 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301974 struct soc_mixer_control *mc =
1975 (struct soc_mixer_control *)kcontrol->private_value;
1976 struct snd_soc_dapm_update *update = NULL;
1977
1978 if (ucontrol->value.integer.value[0]) {
1979 mutex_lock(&routing_lock);
1980 set_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]);
1981 mutex_unlock(&routing_lock);
1982
1983 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
1984 update);
1985 } else {
1986 mutex_lock(&routing_lock);
1987 clear_bit(mc->shift, &msm_bedais[mc->reg].fe_sessions[0]);
1988 mutex_unlock(&routing_lock);
1989
1990 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
1991 update);
1992 }
1993
1994 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
1995 ucontrol->value.integer.value[0]);
1996
1997 return 1;
1998}
1999
2000/*
2001 * Return the mapping between port ID and backend ID to enable the AFE callback
2002 * to determine the acdb_dev_id from the port id
2003 */
2004int msm_pcm_get_be_id_from_port_id(int port_id)
2005{
2006 int i;
2007 int be_id = -EINVAL;
2008
2009 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
2010 if (msm_bedais[i].port_id == port_id) {
2011 be_id = i;
2012 break;
2013 }
2014 }
2015
2016 return be_id;
2017}
2018
2019/*
2020 * Return the registered dev_acdb_id given a port ID to enable identifying the
2021 * correct AFE calibration information by comparing the header information.
2022 */
2023static int msm_pcm_get_dev_acdb_id_by_port_id(int port_id)
2024{
2025 int acdb_id = -EINVAL;
2026 int i = 0;
2027 int session;
2028 int port_type = afe_get_port_type(port_id);
2029 int be_id = msm_pcm_get_be_id_from_port_id(port_id);
2030
2031 pr_debug("%s:port_id %d be_id %d, port_type 0x%x\n",
2032 __func__, port_id, be_id, port_type);
2033
2034 if (port_type == MSM_AFE_PORT_TYPE_TX) {
2035 session = SESSION_TYPE_TX;
2036 } else if (port_type == MSM_AFE_PORT_TYPE_RX) {
2037 session = SESSION_TYPE_RX;
2038 } else {
2039 pr_err("%s: Invalid port type %d\n", __func__, port_type);
2040 acdb_id = -EINVAL;
2041 goto exit;
2042 }
2043
2044 if (be_id < 0) {
2045 pr_err("%s: Error getting backend id %d\n", __func__, be_id);
2046 goto exit;
2047 }
2048
2049 mutex_lock(&routing_lock);
2050 i = find_first_bit(&msm_bedais[be_id].fe_sessions[0],
2051 MSM_FRONTEND_DAI_MAX);
2052 if (i < MSM_FRONTEND_DAI_MAX)
2053 acdb_id = fe_dai_app_type_cfg[i][session][be_id].acdb_dev_id;
2054
2055 pr_debug("%s: FE[%d] session[%d] BE[%d] acdb_id(%d)\n",
2056 __func__, i, session, be_id, acdb_id);
2057 mutex_unlock(&routing_lock);
2058exit:
2059 return acdb_id;
2060}
2061
2062static int msm_routing_get_switch_mixer(struct snd_kcontrol *kcontrol,
2063 struct snd_ctl_elem_value *ucontrol)
2064{
2065 ucontrol->value.integer.value[0] = fm_switch_enable;
2066 pr_debug("%s: FM Switch enable %ld\n", __func__,
2067 ucontrol->value.integer.value[0]);
2068 return 0;
2069}
2070
2071static int msm_routing_put_switch_mixer(struct snd_kcontrol *kcontrol,
2072 struct snd_ctl_elem_value *ucontrol)
2073{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302074 struct snd_soc_dapm_widget *widget =
2075 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302076 struct snd_soc_dapm_update *update = NULL;
2077
2078 pr_debug("%s: FM Switch enable %ld\n", __func__,
2079 ucontrol->value.integer.value[0]);
2080 if (ucontrol->value.integer.value[0])
2081 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2082 update);
2083 else
2084 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2085 update);
2086 fm_switch_enable = ucontrol->value.integer.value[0];
2087 return 1;
2088}
2089
2090static int msm_routing_get_hfp_switch_mixer(struct snd_kcontrol *kcontrol,
2091 struct snd_ctl_elem_value *ucontrol)
2092{
2093 ucontrol->value.integer.value[0] = hfp_switch_enable;
2094 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2095 ucontrol->value.integer.value[0]);
2096 return 0;
2097}
2098
2099static int msm_routing_put_hfp_switch_mixer(struct snd_kcontrol *kcontrol,
2100 struct snd_ctl_elem_value *ucontrol)
2101{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302102 struct snd_soc_dapm_widget *widget =
2103 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302104 struct snd_soc_dapm_update *update = NULL;
2105
2106 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2107 ucontrol->value.integer.value[0]);
2108 if (ucontrol->value.integer.value[0])
2109 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2110 1, update);
2111 else
2112 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2113 0, update);
2114 hfp_switch_enable = ucontrol->value.integer.value[0];
2115 return 1;
2116}
2117
2118static int msm_routing_get_int0_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2119 struct snd_ctl_elem_value *ucontrol)
2120{
2121 ucontrol->value.integer.value[0] = int0_mi2s_switch_enable;
2122 pr_debug("%s: INT0 MI2S Switch enable %ld\n", __func__,
2123 ucontrol->value.integer.value[0]);
2124 return 0;
2125}
2126
2127static int msm_routing_put_int0_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2128 struct snd_ctl_elem_value *ucontrol)
2129{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302130 struct snd_soc_dapm_widget *widget =
2131 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302132 struct snd_soc_dapm_update *update = NULL;
2133
2134 pr_debug("%s: INT0 MI2S Switch enable %ld\n", __func__,
2135 ucontrol->value.integer.value[0]);
2136 if (ucontrol->value.integer.value[0])
2137 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2138 update);
2139 else
2140 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2141 update);
2142 int0_mi2s_switch_enable = ucontrol->value.integer.value[0];
2143 return 1;
2144}
2145
2146static int msm_routing_get_int4_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2147 struct snd_ctl_elem_value *ucontrol)
2148{
2149 ucontrol->value.integer.value[0] = int4_mi2s_switch_enable;
2150 pr_debug("%s: INT4 MI2S Switch enable %ld\n", __func__,
2151 ucontrol->value.integer.value[0]);
2152 return 0;
2153}
2154
2155static int msm_routing_put_int4_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2156 struct snd_ctl_elem_value *ucontrol)
2157{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302158 struct snd_soc_dapm_widget *widget =
2159 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302160 struct snd_soc_dapm_update *update = NULL;
2161
2162 pr_debug("%s: INT4 MI2S Switch enable %ld\n", __func__,
2163 ucontrol->value.integer.value[0]);
2164 if (ucontrol->value.integer.value[0])
2165 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2166 update);
2167 else
2168 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2169 update);
2170 int4_mi2s_switch_enable = ucontrol->value.integer.value[0];
2171 return 1;
2172}
2173
2174static int msm_routing_get_usb_switch_mixer(struct snd_kcontrol *kcontrol,
2175 struct snd_ctl_elem_value *ucontrol)
2176{
2177 ucontrol->value.integer.value[0] = usb_switch_enable;
2178 pr_debug("%s: HFP Switch enable %ld\n", __func__,
2179 ucontrol->value.integer.value[0]);
2180 return 0;
2181}
2182
2183static int msm_routing_put_usb_switch_mixer(struct snd_kcontrol *kcontrol,
2184 struct snd_ctl_elem_value *ucontrol)
2185{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302186 struct snd_soc_dapm_widget *widget =
2187 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302188 struct snd_soc_dapm_update *update = NULL;
2189
2190 pr_debug("%s: USB Switch enable %ld\n", __func__,
2191 ucontrol->value.integer.value[0]);
2192 if (ucontrol->value.integer.value[0])
2193 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2194 1, update);
2195 else
2196 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol,
2197 0, update);
2198 usb_switch_enable = ucontrol->value.integer.value[0];
2199 return 1;
2200}
2201
2202static int msm_routing_get_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2203 struct snd_ctl_elem_value *ucontrol)
2204{
2205 ucontrol->value.integer.value[0] = pri_mi2s_switch_enable;
2206 pr_debug("%s: PRI MI2S Switch enable %ld\n", __func__,
2207 ucontrol->value.integer.value[0]);
2208 return 0;
2209}
2210
2211static int msm_routing_put_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2212 struct snd_ctl_elem_value *ucontrol)
2213{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302214 struct snd_soc_dapm_widget *widget =
2215 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302216 struct snd_soc_dapm_update *update = NULL;
2217
2218 pr_debug("%s: PRI MI2S Switch enable %ld\n", __func__,
2219 ucontrol->value.integer.value[0]);
2220 if (ucontrol->value.integer.value[0])
2221 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2222 update);
2223 else
2224 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2225 update);
2226 pri_mi2s_switch_enable = ucontrol->value.integer.value[0];
2227 return 1;
2228}
2229
2230static int msm_routing_get_sec_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2231 struct snd_ctl_elem_value *ucontrol)
2232{
2233 ucontrol->value.integer.value[0] = sec_mi2s_switch_enable;
2234 pr_debug("%s: SEC MI2S Switch enable %ld\n", __func__,
2235 ucontrol->value.integer.value[0]);
2236 return 0;
2237}
2238
2239static int msm_routing_put_sec_mi2s_switch_mixer(struct snd_kcontrol *kcontrol,
2240 struct snd_ctl_elem_value *ucontrol)
2241{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302242 struct snd_soc_dapm_widget *widget =
2243 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302244 struct snd_soc_dapm_update *update = NULL;
2245
2246 pr_debug("%s: SEC MI2S Switch enable %ld\n", __func__,
2247 ucontrol->value.integer.value[0]);
2248 if (ucontrol->value.integer.value[0])
2249 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2250 update);
2251 else
2252 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2253 update);
2254 sec_mi2s_switch_enable = ucontrol->value.integer.value[0];
2255 return 1;
2256}
2257
2258static int msm_routing_get_tert_mi2s_switch_mixer(
2259 struct snd_kcontrol *kcontrol,
2260 struct snd_ctl_elem_value *ucontrol)
2261{
2262 ucontrol->value.integer.value[0] = tert_mi2s_switch_enable;
2263 pr_debug("%s: TERT MI2S Switch enable %ld\n", __func__,
2264 ucontrol->value.integer.value[0]);
2265 return 0;
2266}
2267
2268static int msm_routing_put_tert_mi2s_switch_mixer(
2269 struct snd_kcontrol *kcontrol,
2270 struct snd_ctl_elem_value *ucontrol)
2271{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302272 struct snd_soc_dapm_widget *widget =
2273 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302274 struct snd_soc_dapm_update *update = NULL;
2275
2276 pr_debug("%s: TERT MI2S Switch enable %ld\n", __func__,
2277 ucontrol->value.integer.value[0]);
2278 if (ucontrol->value.integer.value[0])
2279 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2280 update);
2281 else
2282 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2283 update);
2284 tert_mi2s_switch_enable = ucontrol->value.integer.value[0];
2285 return 1;
2286}
2287
2288static int msm_routing_get_quat_mi2s_switch_mixer(
2289 struct snd_kcontrol *kcontrol,
2290 struct snd_ctl_elem_value *ucontrol)
2291{
2292 ucontrol->value.integer.value[0] = quat_mi2s_switch_enable;
2293 pr_debug("%s: QUAT MI2S Switch enable %ld\n", __func__,
2294 ucontrol->value.integer.value[0]);
2295 return 0;
2296}
2297
2298static int msm_routing_put_quat_mi2s_switch_mixer(
2299 struct snd_kcontrol *kcontrol,
2300 struct snd_ctl_elem_value *ucontrol)
2301{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302302 struct snd_soc_dapm_widget *widget =
2303 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302304 struct snd_soc_dapm_update *update = NULL;
2305
2306 pr_debug("%s: QUAT MI2S Switch enable %ld\n", __func__,
2307 ucontrol->value.integer.value[0]);
2308 if (ucontrol->value.integer.value[0])
2309 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2310 update);
2311 else
2312 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2313 update);
2314 quat_mi2s_switch_enable = ucontrol->value.integer.value[0];
2315 return 1;
2316}
2317
2318static int msm_routing_get_fm_pcmrx_switch_mixer(struct snd_kcontrol *kcontrol,
2319 struct snd_ctl_elem_value *ucontrol)
2320{
2321 ucontrol->value.integer.value[0] = fm_pcmrx_switch_enable;
2322 pr_debug("%s: FM Switch enable %ld\n", __func__,
2323 ucontrol->value.integer.value[0]);
2324 return 0;
2325}
2326
2327static int msm_routing_put_fm_pcmrx_switch_mixer(struct snd_kcontrol *kcontrol,
2328 struct snd_ctl_elem_value *ucontrol)
2329{
Asish Bhattacharya34504582017-08-08 12:55:01 +05302330 struct snd_soc_dapm_widget *widget =
2331 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302332 struct snd_soc_dapm_update *update = NULL;
2333
2334 pr_debug("%s: FM Switch enable %ld\n", __func__,
2335 ucontrol->value.integer.value[0]);
2336 if (ucontrol->value.integer.value[0])
2337 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1,
2338 update);
2339 else
2340 snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0,
2341 update);
2342 fm_pcmrx_switch_enable = ucontrol->value.integer.value[0];
2343 return 1;
2344}
2345
2346static int msm_routing_lsm_port_get(struct snd_kcontrol *kcontrol,
2347 struct snd_ctl_elem_value *ucontrol)
2348{
2349 ucontrol->value.integer.value[0] = lsm_port_index;
2350 return 0;
2351}
2352
2353static int msm_routing_lsm_port_put(struct snd_kcontrol *kcontrol,
2354 struct snd_ctl_elem_value *ucontrol)
2355{
2356 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2357 int mux = ucontrol->value.enumerated.item[0];
2358 int lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
2359
2360 if (mux >= e->items) {
2361 pr_err("%s: Invalid mux value %d\n", __func__, mux);
2362 return -EINVAL;
2363 }
2364
2365 pr_debug("%s: LSM enable %ld\n", __func__,
2366 ucontrol->value.integer.value[0]);
2367 switch (ucontrol->value.integer.value[0]) {
2368 case 1:
2369 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_0_TX;
2370 break;
2371 case 2:
2372 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_1_TX;
2373 break;
2374 case 3:
2375 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_2_TX;
2376 break;
2377 case 4:
2378 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_TX;
2379 break;
2380 case 5:
2381 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
2382 break;
2383 case 6:
2384 lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
2385 break;
2386 case 7:
2387 lsm_port = AFE_PORT_ID_TERTIARY_MI2S_TX;
2388 break;
2389 case 8:
2390 lsm_port = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2391 break;
2392 case 9:
2393 lsm_port = ADM_LSM_PORT_ID;
2394 break;
2395 case 10:
2396 lsm_port = AFE_PORT_ID_INT3_MI2S_TX;
2397 break;
2398 default:
2399 pr_err("Default lsm port");
2400 break;
2401 }
2402 set_lsm_port(lsm_port);
2403 lsm_port_index = ucontrol->value.integer.value[0];
2404
2405 return 0;
2406}
2407
2408static int msm_routing_lsm_func_get(struct snd_kcontrol *kcontrol,
2409 struct snd_ctl_elem_value *ucontrol)
2410{
2411 int i;
2412 u16 port_id;
2413 enum afe_mad_type mad_type;
2414
2415 pr_debug("%s: enter\n", __func__);
2416 for (i = 0; i < ARRAY_SIZE(lsm_port_text); i++)
2417 if (!strnstr(kcontrol->id.name, lsm_port_text[i],
2418 strlen(lsm_port_text[i])))
2419 break;
2420
2421 if (i-- == ARRAY_SIZE(lsm_port_text)) {
2422 WARN(1, "Invalid id name %s\n", kcontrol->id.name);
2423 return -EINVAL;
2424 }
2425
2426 port_id = i * 2 + 1 + SLIMBUS_0_RX;
2427
2428 /*Check for Tertiary/Quaternary/INT3 TX port*/
2429 if (strnstr(kcontrol->id.name, lsm_port_text[7],
2430 strlen(lsm_port_text[7])))
2431 port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
2432
2433 if (strnstr(kcontrol->id.name, lsm_port_text[8],
2434 strlen(lsm_port_text[8])))
2435 port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2436
2437 if (strnstr(kcontrol->id.name, lsm_port_text[10],
2438 strlen(lsm_port_text[10])))
2439 port_id = AFE_PORT_ID_INT3_MI2S_TX;
2440
2441 mad_type = afe_port_get_mad_type(port_id);
2442 pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
2443 mad_type);
2444 switch (mad_type) {
2445 case MAD_HW_NONE:
2446 ucontrol->value.integer.value[0] = MADNONE;
2447 break;
2448 case MAD_HW_AUDIO:
2449 ucontrol->value.integer.value[0] = MADAUDIO;
2450 break;
2451 case MAD_HW_BEACON:
2452 ucontrol->value.integer.value[0] = MADBEACON;
2453 break;
2454 case MAD_HW_ULTRASOUND:
2455 ucontrol->value.integer.value[0] = MADULTRASOUND;
2456 break;
2457 case MAD_SW_AUDIO:
2458 ucontrol->value.integer.value[0] = MADSWAUDIO;
2459 break;
2460 default:
2461 WARN(1, "Unknown\n");
2462 return -EINVAL;
2463 }
2464 return 0;
2465}
2466
2467static int msm_routing_lsm_func_put(struct snd_kcontrol *kcontrol,
2468 struct snd_ctl_elem_value *ucontrol)
2469{
2470 int i;
2471 u16 port_id;
2472 enum afe_mad_type mad_type;
2473
2474 pr_debug("%s: enter\n", __func__);
2475 for (i = 0; i < ARRAY_SIZE(lsm_port_text); i++)
2476 if (strnstr(kcontrol->id.name, lsm_port_text[i],
2477 strlen(lsm_port_text[i])))
2478 break;
2479
2480 if (i-- == ARRAY_SIZE(lsm_port_text)) {
2481 WARN(1, "Invalid id name %s\n", kcontrol->id.name);
2482 return -EINVAL;
2483 }
2484
2485 port_id = i * 2 + 1 + SLIMBUS_0_RX;
2486 switch (ucontrol->value.integer.value[0]) {
2487 case MADNONE:
2488 mad_type = MAD_HW_NONE;
2489 break;
2490 case MADAUDIO:
2491 mad_type = MAD_HW_AUDIO;
2492 break;
2493 case MADBEACON:
2494 mad_type = MAD_HW_BEACON;
2495 break;
2496 case MADULTRASOUND:
2497 mad_type = MAD_HW_ULTRASOUND;
2498 break;
2499 case MADSWAUDIO:
2500 mad_type = MAD_SW_AUDIO;
2501 break;
2502 default:
2503 WARN(1, "Unknown\n");
2504 return -EINVAL;
2505 }
2506
2507 /*Check for Tertiary/Quaternary/INT3 TX port*/
2508 if (strnstr(kcontrol->id.name, lsm_port_text[7],
2509 strlen(lsm_port_text[7])))
2510 port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
2511
2512 if (strnstr(kcontrol->id.name, lsm_port_text[8],
2513 strlen(lsm_port_text[8])))
2514 port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
2515
2516 if (strnstr(kcontrol->id.name, lsm_port_text[10],
2517 strlen(lsm_port_text[10])))
2518 port_id = AFE_PORT_ID_INT3_MI2S_TX;
2519
2520 pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
2521 mad_type);
2522 return afe_port_set_mad_type(port_id, mad_type);
2523}
2524
2525static const char *const adm_override_chs_text[] = {"Zero", "One", "Two"};
2526
2527static SOC_ENUM_SINGLE_EXT_DECL(slim_7_rx_adm_override_chs,
2528 adm_override_chs_text);
2529
2530static int msm_routing_adm_get_backend_idx(struct snd_kcontrol *kcontrol)
2531{
2532 int backend_id;
2533
2534 if (strnstr(kcontrol->id.name, "SLIM7_RX", sizeof("SLIM7_RX"))) {
2535 backend_id = MSM_BACKEND_DAI_SLIMBUS_7_RX;
2536 } else {
2537 pr_err("%s: unsupported backend id: %s",
2538 __func__, kcontrol->id.name);
2539 return -EINVAL;
2540 }
2541
2542 return backend_id;
2543}
2544static int msm_routing_adm_channel_config_get(
2545 struct snd_kcontrol *kcontrol,
2546 struct snd_ctl_elem_value *ucontrol)
2547{
2548 int backend_id = msm_routing_adm_get_backend_idx(kcontrol);
2549
2550 if (backend_id >= 0) {
2551 mutex_lock(&routing_lock);
2552 ucontrol->value.integer.value[0] =
2553 msm_bedais[backend_id].adm_override_ch;
2554 pr_debug("%s: adm channel count %ld for BE:%d\n", __func__,
2555 ucontrol->value.integer.value[0], backend_id);
2556 mutex_unlock(&routing_lock);
2557 }
2558
2559 return 0;
2560}
2561
2562static int msm_routing_adm_channel_config_put(
2563 struct snd_kcontrol *kcontrol,
2564 struct snd_ctl_elem_value *ucontrol)
2565{
2566 int backend_id = msm_routing_adm_get_backend_idx(kcontrol);
2567
2568 if (backend_id >= 0) {
2569 mutex_lock(&routing_lock);
2570 msm_bedais[backend_id].adm_override_ch =
2571 ucontrol->value.integer.value[0];
2572 pr_debug("%s:updating BE :%d adm channels: %d\n",
2573 __func__, backend_id,
2574 msm_bedais[backend_id].adm_override_ch);
2575 mutex_unlock(&routing_lock);
2576 }
2577
2578 return 0;
2579}
2580
2581static const struct snd_kcontrol_new adm_channel_config_controls[] = {
2582 SOC_ENUM_EXT("SLIM7_RX ADM Channels", slim_7_rx_adm_override_chs,
2583 msm_routing_adm_channel_config_get,
2584 msm_routing_adm_channel_config_put),
2585};
2586
2587static int msm_routing_slim_0_rx_aanc_mux_get(struct snd_kcontrol *kcontrol,
2588 struct snd_ctl_elem_value *ucontrol)
2589{
2590
2591 mutex_lock(&routing_lock);
2592 ucontrol->value.integer.value[0] = slim0_rx_aanc_fb_port;
2593 mutex_unlock(&routing_lock);
2594 pr_debug("%s: AANC Mux Port %ld\n", __func__,
2595 ucontrol->value.integer.value[0]);
2596 return 0;
2597};
2598
2599static int msm_routing_slim_0_rx_aanc_mux_put(struct snd_kcontrol *kcontrol,
2600 struct snd_ctl_elem_value *ucontrol)
2601{
2602 struct aanc_data aanc_info;
2603
2604 mutex_lock(&routing_lock);
2605 memset(&aanc_info, 0x00, sizeof(aanc_info));
2606 pr_debug("%s: AANC Mux Port %ld\n", __func__,
2607 ucontrol->value.integer.value[0]);
2608 slim0_rx_aanc_fb_port = ucontrol->value.integer.value[0];
2609 if (ucontrol->value.integer.value[0] == 0) {
2610 aanc_info.aanc_active = false;
2611 aanc_info.aanc_tx_port = 0;
2612 aanc_info.aanc_rx_port = 0;
2613 } else {
2614 aanc_info.aanc_active = true;
2615 aanc_info.aanc_rx_port = SLIMBUS_0_RX;
2616 aanc_info.aanc_tx_port =
2617 (SLIMBUS_0_RX - 1 + (slim0_rx_aanc_fb_port * 2));
2618 }
2619 afe_set_aanc_info(&aanc_info);
2620 mutex_unlock(&routing_lock);
2621 return 0;
2622};
2623static int msm_routing_get_port_mixer(struct snd_kcontrol *kcontrol,
2624 struct snd_ctl_elem_value *ucontrol)
2625{
2626 int idx = 0, shift = 0;
2627 struct soc_mixer_control *mc =
2628 (struct soc_mixer_control *)kcontrol->private_value;
2629
2630 idx = mc->shift/(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2631 shift = mc->shift%(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2632
2633 if (idx >= BE_DAI_PORT_SESSIONS_IDX_MAX) {
2634 pr_err("%s: Invalid idx = %d\n", __func__, idx);
2635 return -EINVAL;
2636 }
2637
2638 if (test_bit(shift,
2639 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]))
2640 ucontrol->value.integer.value[0] = 1;
2641 else
2642 ucontrol->value.integer.value[0] = 0;
2643
2644 pr_debug("%s: reg %x shift %x val %ld\n", __func__, mc->reg, mc->shift,
2645 ucontrol->value.integer.value[0]);
2646
2647 return 0;
2648}
2649
2650static int msm_routing_put_port_mixer(struct snd_kcontrol *kcontrol,
2651 struct snd_ctl_elem_value *ucontrol)
2652{
2653 int idx = 0, shift = 0;
2654 struct soc_mixer_control *mc =
2655 (struct soc_mixer_control *)kcontrol->private_value;
2656
2657 idx = mc->shift/(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2658 shift = mc->shift%(sizeof(msm_bedais[mc->reg].port_sessions[0]) * 8);
2659
2660 if (idx >= BE_DAI_PORT_SESSIONS_IDX_MAX) {
2661 pr_err("%s: Invalid idx = %d\n", __func__, idx);
2662 return -EINVAL;
2663 }
2664
2665 pr_debug("%s: reg 0x%x shift 0x%x val %ld idx %d reminder shift %d\n",
2666 __func__, mc->reg, mc->shift,
2667 ucontrol->value.integer.value[0], idx, shift);
2668
2669 if (ucontrol->value.integer.value[0]) {
2670 afe_loopback(1, msm_bedais[mc->reg].port_id,
2671 msm_bedais[mc->shift].port_id);
2672 set_bit(shift,
2673 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]);
2674 } else {
2675 afe_loopback(0, msm_bedais[mc->reg].port_id,
2676 msm_bedais[mc->shift].port_id);
2677 clear_bit(shift,
2678 (unsigned long *)&msm_bedais[mc->reg].port_sessions[idx]);
2679 }
2680
2681 return 1;
2682}
2683
2684static int msm_pcm_get_channel_rule_index(struct snd_kcontrol *kcontrol,
2685 struct snd_ctl_elem_value *ucontrol)
2686{
2687 u16 fe_id = 0;
2688
2689 fe_id = ((struct soc_mixer_control *)
2690 kcontrol->private_value)->shift;
2691 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2692 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2693 return -EINVAL;
2694 }
2695
2696 ucontrol->value.integer.value[0] = channel_mixer[fe_id].rule;
2697
2698 return 0;
2699}
2700
2701static int msm_pcm_put_channel_rule_index(struct snd_kcontrol *kcontrol,
2702 struct snd_ctl_elem_value *ucontrol)
2703{
2704 u16 fe_id = 0;
2705
2706 fe_id = ((struct soc_mixer_control *)
2707 kcontrol->private_value)->shift;
2708 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2709 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2710 return -EINVAL;
2711 }
2712
2713 channel_mixer[fe_id].rule = ucontrol->value.integer.value[0];
2714
2715 return 1;
2716}
2717
2718static int msm_pcm_get_out_chs(struct snd_kcontrol *kcontrol,
2719 struct snd_ctl_elem_value *ucontrol)
2720{
2721 u16 fe_id = 0;
2722
2723 fe_id = ((struct soc_multi_mixer_control *)
2724 kcontrol->private_value)->shift;
2725 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2726 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2727 return -EINVAL;
2728 }
2729
2730 ucontrol->value.integer.value[0] =
2731 channel_mixer[fe_id].output_channel;
2732 return 0;
2733}
2734
2735static int msm_pcm_put_out_chs(struct snd_kcontrol *kcontrol,
2736 struct snd_ctl_elem_value *ucontrol)
2737{
2738 u16 fe_id = 0;
2739
2740 fe_id = ((struct soc_multi_mixer_control *)
2741 kcontrol->private_value)->shift;
2742 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2743 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2744 return -EINVAL;
2745 }
2746
2747 pr_debug("%s: fe_id is %d, output channels = %d\n", __func__,
2748 fe_id,
2749 (unsigned int)(ucontrol->value.integer.value[0]));
2750 channel_mixer[fe_id].output_channel =
2751 (unsigned int)(ucontrol->value.integer.value[0]);
2752
2753 return 1;
2754}
2755
2756static const char *const ch_mixer[] = {"Disable", "Enable"};
2757
2758/* If new backend is added, need update this array */
2759static const char *const be_name[] = {
2760"ZERO", "PRI_I2S_RX", "PRI_I2S_TX", "SLIM_0_RX",
2761"SLIM_0_TX", "HDMI_RX", "INT_BT_SCO_RX", "INT_BT_SCO_TX",
2762"INT_FM_RX", "INT_FM_TX", "AFE_PCM_RX", "AFE_PCM_TX",
2763"AUXPCM_RX", "AUXPCM_TX", "VOICE_PLAYBACK_TX", "VOICE2_PLAYBACK_TX",
2764"INCALL_RECORD_RX", "INCALL_RECORD_TX", "MI2S_RX", "MI2S_TX",
2765"SEC_I2S_RX", "SLIM_1_RX", "SLIM_1_TX", "SLIM_2_RX",
2766"SLIM_2_TX", "SLIM_3_RX", "SLIM_3_TX", "SLIM_4_RX",
2767"SLIM_4_TX", "SLIM_5_RX", "SLIM_5_TX", "SLIM_6_RX",
2768"SLIM_6_TX", "SLIM_7_RX", "SLIM_7_TX", "SLIM_8_RX",
2769"SLIM_8_TX", "EXTPROC_RX", "EXTPROC_TX", "EXPROC_EC_TX",
2770"QUAT_MI2S_RX", "QUAT_MI2S_TX", "SECOND_MI2S_RX", "SECOND_MI2S_TX",
2771"PRI_MI2S_RX", "PRI_MI2S_TX", "TERT_MI2S_RX", "TERT_MI2S_TX",
2772"AUDIO_I2S_RX", "SEC_AUXPCM_RX", "SEC_AUXPCM_TX", "SPDIF_RX",
2773"SECOND_MI2S_RX_SD1", "QUIN_MI2S_RX", "QUIN_MI2S_TX", "SENARY_MI2S_TX",
2774"PRI_TDM_RX_0", "PRI_TDM_TX_0", "PRI_TDM_RX_1", "PRI_TDM_TX_1",
2775"PRI_TDM_RX_2", "PRI_TDM_TX_2", "PRI_TDM_RX_3", "PRI_TDM_TX_3",
2776"PRI_TDM_RX_4", "PRI_TDM_TX_4", "PRI_TDM_RX_5", "PRI_TDM_TX_5",
2777"PRI_TDM_RX_6", "PRI_TDM_TX_6", "PRI_TDM_RX_7", "PRI_TDM_TX_7",
2778"SEC_TDM_RX_0", "SEC_TDM_TX_0", "SEC_TDM_RX_1", "SEC_TDM_TX_1",
2779"SEC_TDM_RX_2", "SEC_TDM_TX_2", "SEC_TDM_RX_3", "SEC_TDM_TX_3",
2780"SEC_TDM_RX_4", "SEC_TDM_TX_4", "SEC_TDM_RX_5", "SEC_TDM_TX_5",
2781"SEC_TDM_RX_6", "SEC_TDM_TX_6", "SEC_TDM_RX_7", "SEC_TDM_TX_7",
2782"TERT_TDM_RX_0", "TERT_TDM_TX_0", "TERT_TDM_RX_1", "TERT_TDM_TX_1",
2783"TERT_TDM_RX_2", "TERT_TDM_TX_2", "TERT_TDM_RX_3", "TERT_TDM_TX_3",
2784"TERT_TDM_RX_4", "TERT_TDM_TX_4", "TERT_TDM_RX_5", "TERT_TDM_TX_5",
2785"TERT_TDM_RX_6", "TERT_TDM_TX_6", "TERT_TDM_RX_7", "TERT_TDM_TX_7",
2786"QUAT_TDM_RX_0", "QUAT_TDM_TX_0", "QUAT_TDM_RX_1", "QUAT_TDM_TX_1",
2787"QUAT_TDM_RX_2", "QUAT_TDM_TX_2", "QUAT_TDM_RX_3", "QUAT_TDM_TX_3",
2788"QUAT_TDM_RX_4", "QUAT_TDM_TX_4", "QUAT_TDM_RX_5", "QUAT_TDM_TX_5",
2789"QUAT_TDM_RX_6", "QUAT_TDM_TX_6", "QUAT_TDM_RX_7", "QUAT_TDM_TX_7",
2790"INT_BT_A2DP_RX", "USB_RX", "USB_TX", "DISPLAY_PORT_RX",
2791"TERT_AUXPCM_RX", "TERT_AUXPCM_TX", "QUAT_AUXPCM_RX", "QUAT_AUXPCM_TX",
2792"INT0_MI2S_RX", "INT0_MI2S_TX", "INT1_MI2S_RX", "INT1_MI2S_TX",
2793"INT2_MI2S_RX", "INT2_MI2S_TX", "INT3_MI2S_RX", "INT3_MI2S_TX",
2794"INT4_MI2S_RX", "INT4_MI2S_TX", "INT5_MI2S_RX", "INT5_MI2S_TX",
2795"INT6_MI2S_RX", "INT6_MI2S_TX"
2796};
2797
2798static SOC_ENUM_SINGLE_DECL(mm1_channel_mux,
2799 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, ch_mixer);
2800static SOC_ENUM_SINGLE_DECL(mm2_channel_mux,
2801 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA2, ch_mixer);
2802static SOC_ENUM_SINGLE_DECL(mm3_channel_mux,
2803 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA3, ch_mixer);
2804static SOC_ENUM_SINGLE_DECL(mm4_channel_mux,
2805 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA4, ch_mixer);
2806
2807static SOC_ENUM_DOUBLE_DECL(mm1_ch1_enum,
2808 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 0, be_name);
2809static SOC_ENUM_DOUBLE_DECL(mm1_ch2_enum,
2810 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, be_name);
2811static SOC_ENUM_DOUBLE_DECL(mm1_ch3_enum,
2812 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 2, be_name);
2813static SOC_ENUM_DOUBLE_DECL(mm1_ch4_enum,
2814 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 3, be_name);
2815static SOC_ENUM_DOUBLE_DECL(mm1_ch5_enum,
2816 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 4, be_name);
2817static SOC_ENUM_DOUBLE_DECL(mm1_ch6_enum,
2818 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 5, be_name);
2819static SOC_ENUM_DOUBLE_DECL(mm1_ch7_enum,
2820 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 6, be_name);
2821static SOC_ENUM_DOUBLE_DECL(mm1_ch8_enum,
2822 SND_SOC_NOPM, MSM_FRONTEND_DAI_MULTIMEDIA1, 7, be_name);
2823
2824static int msm_pcm_get_ctl_enum_info(struct snd_ctl_elem_info *uinfo,
2825 unsigned int channels,
2826 unsigned int items, const char *const names[])
2827{
2828 if (uinfo->value.enumerated.item >= items)
2829 uinfo->value.enumerated.item = items - 1;
2830
2831 WARN(strlen(names[uinfo->value.enumerated.item]) >=
2832 sizeof(uinfo->value.enumerated.name),
2833 "ALSA: too long item name '%s'\n",
2834 names[uinfo->value.enumerated.item]);
2835 strlcpy(uinfo->value.enumerated.name,
2836 names[uinfo->value.enumerated.item],
2837 sizeof(uinfo->value.enumerated.name));
2838 return 0;
2839}
2840
2841static int msm_pcm_channel_mixer_info(struct snd_kcontrol *kcontrol,
2842 struct snd_ctl_elem_info *uinfo)
2843{
2844 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2845
2846 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2847 uinfo->count = 1;
2848
2849 uinfo->value.enumerated.items = ARRAY_SIZE(ch_mixer);
2850 msm_pcm_get_ctl_enum_info(uinfo, 1, e->items, e->texts);
2851
2852 return 0;
2853}
2854static int msm_pcm_channel_mixer_get(struct snd_kcontrol *kcontrol,
2855 struct snd_ctl_elem_value *ucontrol)
2856{
2857 u16 fe_id = 0;
2858
2859 fe_id = ((struct soc_enum *)
2860 kcontrol->private_value)->shift_l;
2861 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2862 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2863 return -EINVAL;
2864 }
2865
2866 pr_debug("%s: FE %d %s\n", __func__,
2867 fe_id,
2868 channel_mixer[fe_id].enable ? "Enabled" : "Disabled");
2869 ucontrol->value.enumerated.item[0] = channel_mixer[fe_id].enable;
2870 return 0;
2871}
2872
2873static int msm_pcm_channel_mixer_put(struct snd_kcontrol *kcontrol,
2874 struct snd_ctl_elem_value *ucontrol)
2875{
2876 u16 fe_id = 0;
2877
2878 fe_id = ((struct soc_enum *)
2879 kcontrol->private_value)->shift_l;
2880 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2881 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2882 return -EINVAL;
2883 }
2884
2885 channel_mixer[fe_id].enable = ucontrol->value.enumerated.item[0];
2886 pr_debug("%s: %s FE %d\n", __func__,
2887 channel_mixer[fe_id].enable ? "Enable" : "Disable",
2888 fe_id);
2889 return 0;
2890}
2891
2892static int msm_pcm_channel_input_be_info(struct snd_kcontrol *kcontrol,
2893 struct snd_ctl_elem_info *uinfo)
2894{
2895 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2896
2897 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2898 uinfo->count = 1;
2899
2900 uinfo->value.enumerated.items = ARRAY_SIZE(be_name);
2901 msm_pcm_get_ctl_enum_info(uinfo, 1, e->items, e->texts);
2902
2903 return 0;
2904}
2905
2906static int msm_pcm_channel_input_be_put(struct snd_kcontrol *kcontrol,
2907 struct snd_ctl_elem_value *ucontrol)
2908{
2909 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2910 u16 fe_id = 0, in_ch = 0;
2911
2912 fe_id = e->shift_l;
2913 in_ch = e->shift_r;
2914 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2915 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2916 return -EINVAL;
2917 }
2918 if (in_ch >= ADM_MAX_CHANNELS) {
2919 pr_err("%s: invalid input channel %d\n", __func__, in_ch);
2920 return -EINVAL;
2921 }
2922
2923 channel_input[fe_id][in_ch] = ucontrol->value.enumerated.item[0];
2924 return 1;
2925}
2926
2927static int msm_pcm_channel_input_be_get(struct snd_kcontrol *kcontrol,
2928 struct snd_ctl_elem_value *ucontrol)
2929{
2930 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2931 u16 fe_id = 0, in_ch = 0;
2932
2933 fe_id = e->shift_l;
2934 in_ch = e->shift_r;
2935 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2936 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2937 return -EINVAL;
2938 }
2939 if (in_ch >= ADM_MAX_CHANNELS) {
2940 pr_err("%s: invalid input channel %d\n", __func__, in_ch);
2941 return -EINVAL;
2942 }
2943
2944 ucontrol->value.enumerated.item[0] = channel_input[fe_id][in_ch];
2945 return 1;
2946}
2947
2948
2949static int msm_pcm_channel_weight_info(struct snd_kcontrol *kcontrol,
2950 struct snd_ctl_elem_info *uinfo)
2951{
2952 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2953 uinfo->count = ADM_MAX_CHANNELS;
2954 uinfo->value.integer.min = 0;
2955 uinfo->value.integer.max = WEIGHT_0_DB;
2956
2957 return 0;
2958}
2959
2960static int msm_pcm_channel_weight_put(struct snd_kcontrol *kcontrol,
2961 struct snd_ctl_elem_value *ucontrol)
2962{
2963 u16 fe_id = 0, out_ch = 0;
2964 int i, weight;
2965
2966 fe_id = ((struct soc_multi_mixer_control *)
2967 kcontrol->private_value)->shift;
2968 out_ch = ((struct soc_multi_mixer_control *)
2969 kcontrol->private_value)->rshift;
2970 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
2971 pr_err("%s: invalid FE %d\n", __func__, fe_id);
2972 return -EINVAL;
2973 }
2974 if (out_ch >= ADM_MAX_CHANNELS) {
2975 pr_err("%s: invalid input channel %d\n", __func__, out_ch);
2976 return -EINVAL;
2977 }
2978
2979 pr_debug("%s: FE_ID: %d, channel weight %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld\n",
2980 __func__, fe_id,
2981 ucontrol->value.integer.value[0],
2982 ucontrol->value.integer.value[1],
2983 ucontrol->value.integer.value[2],
2984 ucontrol->value.integer.value[3],
2985 ucontrol->value.integer.value[4],
2986 ucontrol->value.integer.value[5],
2987 ucontrol->value.integer.value[6],
2988 ucontrol->value.integer.value[7]);
2989
2990 for (i = 0; i < ADM_MAX_CHANNELS; ++i) {
2991 weight = ucontrol->value.integer.value[i];
2992 channel_mixer[fe_id].channel_weight[out_ch][i] = weight;
2993 pr_debug("%s: FE_ID %d, output %d input %d weight %d\n",
2994 __func__, fe_id, out_ch, i,
2995 channel_mixer[fe_id].channel_weight[out_ch][i]);
2996 }
2997
2998 return 0;
2999}
3000
3001static int msm_pcm_channel_weight_get(struct snd_kcontrol *kcontrol,
3002 struct snd_ctl_elem_value *ucontrol)
3003{
3004 u16 fe_id = 0, out_ch = 0;
3005 int i;
3006
3007 fe_id = ((struct soc_multi_mixer_control *)
3008 kcontrol->private_value)->shift;
3009 out_ch = ((struct soc_multi_mixer_control *)
3010 kcontrol->private_value)->rshift;
3011 if (fe_id >= MSM_FRONTEND_DAI_MM_SIZE) {
3012 pr_err("%s: invalid FE %d\n", __func__, fe_id);
3013 return -EINVAL;
3014 }
3015 if (out_ch >= ADM_MAX_CHANNELS) {
3016 pr_err("%s: invalid input channel %d\n", __func__, out_ch);
3017 return -EINVAL;
3018 }
3019
3020 for (i = 0; i < ADM_MAX_CHANNELS; ++i)
3021 ucontrol->value.integer.value[i] =
3022 channel_mixer[fe_id].channel_weight[out_ch][i];
3023
3024 pr_debug("%s: FE_ID: %d, weight %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld",
3025 __func__, fe_id,
3026 ucontrol->value.integer.value[0],
3027 ucontrol->value.integer.value[1],
3028 ucontrol->value.integer.value[2],
3029 ucontrol->value.integer.value[3],
3030 ucontrol->value.integer.value[4],
3031 ucontrol->value.integer.value[5],
3032 ucontrol->value.integer.value[6],
3033 ucontrol->value.integer.value[7]);
3034
3035 return 0;
3036}
3037
3038static const struct snd_kcontrol_new channel_mixer_controls[] = {
3039 SOC_SINGLE_EXT("MultiMedia1 Channel Rule", SND_SOC_NOPM,
3040 MSM_FRONTEND_DAI_MULTIMEDIA1, 8, 0,
3041 msm_pcm_get_channel_rule_index,
3042 msm_pcm_put_channel_rule_index),
3043 SOC_SINGLE_EXT("MultiMedia2 Channel Rule", SND_SOC_NOPM,
3044 MSM_FRONTEND_DAI_MULTIMEDIA2, 8, 0,
3045 msm_pcm_get_channel_rule_index,
3046 msm_pcm_put_channel_rule_index),
3047 SOC_SINGLE_EXT("MultiMedia3 Channel Rule", SND_SOC_NOPM,
3048 MSM_FRONTEND_DAI_MULTIMEDIA3, 8, 0,
3049 msm_pcm_get_channel_rule_index,
3050 msm_pcm_put_channel_rule_index),
3051 SOC_SINGLE_EXT("MultiMedia4 Channel Rule", SND_SOC_NOPM,
3052 MSM_FRONTEND_DAI_MULTIMEDIA4, 8, 0,
3053 msm_pcm_get_channel_rule_index,
3054 msm_pcm_put_channel_rule_index),
3055 SOC_SINGLE_EXT("MultiMedia5 Channel Rule", SND_SOC_NOPM,
3056 MSM_FRONTEND_DAI_MULTIMEDIA5, 8, 0,
3057 msm_pcm_get_channel_rule_index,
3058 msm_pcm_put_channel_rule_index),
3059 SOC_SINGLE_EXT("MultiMedia6 Channel Rule", SND_SOC_NOPM,
3060 MSM_FRONTEND_DAI_MULTIMEDIA6, 8, 0,
3061 msm_pcm_get_channel_rule_index,
3062 msm_pcm_put_channel_rule_index),
3063
3064 SOC_SINGLE_EXT("MultiMedia1 Channels", SND_SOC_NOPM,
3065 MSM_FRONTEND_DAI_MULTIMEDIA1, 8, 0,
3066 msm_pcm_get_out_chs,
3067 msm_pcm_put_out_chs),
3068 SOC_SINGLE_EXT("MultiMedia2 Channels", SND_SOC_NOPM,
3069 MSM_FRONTEND_DAI_MULTIMEDIA2, 8, 0,
3070 msm_pcm_get_out_chs,
3071 msm_pcm_put_out_chs),
3072 SOC_SINGLE_EXT("MultiMedia3 Channels", SND_SOC_NOPM,
3073 MSM_FRONTEND_DAI_MULTIMEDIA3, 8, 0,
3074 msm_pcm_get_out_chs,
3075 msm_pcm_put_out_chs),
3076 SOC_SINGLE_EXT("MultiMedia4 Channels", SND_SOC_NOPM,
3077 MSM_FRONTEND_DAI_MULTIMEDIA4, 8, 0,
3078 msm_pcm_get_out_chs,
3079 msm_pcm_put_out_chs),
3080 SOC_SINGLE_EXT("MultiMedia5 Channels", SND_SOC_NOPM,
3081 MSM_FRONTEND_DAI_MULTIMEDIA5, 8, 0,
3082 msm_pcm_get_out_chs,
3083 msm_pcm_put_out_chs),
3084 SOC_SINGLE_EXT("MultiMedia6 Channels", SND_SOC_NOPM,
3085 MSM_FRONTEND_DAI_MULTIMEDIA6, 8, 0,
3086 msm_pcm_get_out_chs,
3087 msm_pcm_put_out_chs),
3088 {
3089 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3090 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3091 .name = "MultiMedia1 Channel Mixer",
3092 .info = msm_pcm_channel_mixer_info,
3093 .get = msm_pcm_channel_mixer_get,
3094 .put = msm_pcm_channel_mixer_put,
3095 .private_value = (unsigned long)&(mm1_channel_mux)
3096 },
3097 {
3098 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3099 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3100 .name = "MultiMedia2 Channel Mixer",
3101 .info = msm_pcm_channel_mixer_info,
3102 .get = msm_pcm_channel_mixer_get,
3103 .put = msm_pcm_channel_mixer_put,
3104 .private_value = (unsigned long)&(mm2_channel_mux)
3105 },
3106 {
3107 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3108 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3109 .name = "MultiMedia3 Channel Mixer",
3110 .info = msm_pcm_channel_mixer_info,
3111 .get = msm_pcm_channel_mixer_get,
3112 .put = msm_pcm_channel_mixer_put,
3113 .private_value = (unsigned long)&(mm3_channel_mux)
3114 },
3115 {
3116 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3117 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3118 .name = "MultiMedia4 Channel Mixer",
3119 .info = msm_pcm_channel_mixer_info,
3120 .get = msm_pcm_channel_mixer_get,
3121 .put = msm_pcm_channel_mixer_put,
3122 .private_value = (unsigned long)&(mm4_channel_mux)
3123 },
3124 {
3125 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3126 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3127 .name = "MultiMedia1 Output Channel1",
3128 .info = msm_pcm_channel_weight_info,
3129 .get = msm_pcm_channel_weight_get,
3130 .put = msm_pcm_channel_weight_put,
3131 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3132 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 0,}
3133 },
3134 {
3135 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3136 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3137 .name = "MultiMedia1 Output Channel2",
3138 .info = msm_pcm_channel_weight_info,
3139 .get = msm_pcm_channel_weight_get,
3140 .put = msm_pcm_channel_weight_put,
3141 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3142 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 1, }
3143 },
3144 {
3145 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3146 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3147 .name = "MultiMedia1 Output Channel3",
3148 .info = msm_pcm_channel_weight_info,
3149 .get = msm_pcm_channel_weight_get,
3150 .put = msm_pcm_channel_weight_put,
3151 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3152 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 2,}
3153 },
3154 {
3155 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3156 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3157 .name = "MultiMedia1 Output Channel4",
3158 .info = msm_pcm_channel_weight_info,
3159 .get = msm_pcm_channel_weight_get,
3160 .put = msm_pcm_channel_weight_put,
3161 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3162 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 3,}
3163 },
3164 {
3165 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3166 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3167 .name = "MultiMedia1 Output Channel5",
3168 .info = msm_pcm_channel_weight_info,
3169 .get = msm_pcm_channel_weight_get,
3170 .put = msm_pcm_channel_weight_put,
3171 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3172 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 4,}
3173 },
3174 {
3175 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3176 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3177 .name = "MultiMedia1 Output Channel6",
3178 .info = msm_pcm_channel_weight_info,
3179 .get = msm_pcm_channel_weight_get,
3180 .put = msm_pcm_channel_weight_put,
3181 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3182 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 5,}
3183 },
3184 {
3185 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3186 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3187 .name = "MultiMedia1 Output Channel7",
3188 .info = msm_pcm_channel_weight_info,
3189 .get = msm_pcm_channel_weight_get,
3190 .put = msm_pcm_channel_weight_put,
3191 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3192 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 6,}
3193 },
3194 {
3195 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3196 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3197 .name = "MultiMedia1 Output Channel8",
3198 .info = msm_pcm_channel_weight_info,
3199 .get = msm_pcm_channel_weight_get,
3200 .put = msm_pcm_channel_weight_put,
3201 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3202 { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 7,}
3203 },
3204 {
3205 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3206 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3207 .name = "MultiMedia2 Output Channel1",
3208 .info = msm_pcm_channel_weight_info,
3209 .get = msm_pcm_channel_weight_get,
3210 .put = msm_pcm_channel_weight_put,
3211 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3212 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 0,}
3213 },
3214 {
3215 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3216 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3217 .name = "MultiMedia2 Output Channel2",
3218 .info = msm_pcm_channel_weight_info,
3219 .get = msm_pcm_channel_weight_get,
3220 .put = msm_pcm_channel_weight_put,
3221 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3222 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 1,}
3223 },
3224 {
3225 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3226 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3227 .name = "MultiMedia2 Output Channel3",
3228 .info = msm_pcm_channel_weight_info,
3229 .get = msm_pcm_channel_weight_get,
3230 .put = msm_pcm_channel_weight_put,
3231 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3232 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA2, .rshift = 2,}
3233 },
3234 {
3235 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3236 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3237 .name = "MultiMedia3 Output Channel1",
3238 .info = msm_pcm_channel_weight_info,
3239 .get = msm_pcm_channel_weight_get,
3240 .put = msm_pcm_channel_weight_put,
3241 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3242 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA3, .rshift = 0,}
3243 },
3244 {
3245 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3246 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3247 .name = "MultiMedia3 Output Channel2",
3248 .info = msm_pcm_channel_weight_info,
3249 .get = msm_pcm_channel_weight_get,
3250 .put = msm_pcm_channel_weight_put,
3251 .private_value = (unsigned long)&(struct soc_multi_mixer_control)
3252 {.shift = MSM_FRONTEND_DAI_MULTIMEDIA3, .rshift = 1,}
3253 },
3254 {
3255 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3256 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3257 .name = "MultiMedia1 Channel1",
3258 .info = msm_pcm_channel_input_be_info,
3259 .get = msm_pcm_channel_input_be_get,
3260 .put = msm_pcm_channel_input_be_put,
3261 .private_value = (unsigned long)&(mm1_ch1_enum)
3262 },
3263 {
3264 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3265 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3266 .name = "MultiMedia1 Channel2",
3267 .info = msm_pcm_channel_input_be_info,
3268 .get = msm_pcm_channel_input_be_get,
3269 .put = msm_pcm_channel_input_be_put,
3270 .private_value = (unsigned long)&(mm1_ch2_enum)
3271 },
3272 {
3273 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3274 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3275 .name = "MultiMedia1 Channel3",
3276 .info = msm_pcm_channel_input_be_info,
3277 .get = msm_pcm_channel_input_be_get,
3278 .put = msm_pcm_channel_input_be_put,
3279 .private_value = (unsigned long)&(mm1_ch3_enum)
3280 },
3281 {
3282 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3283 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3284 .name = "MultiMedia1 Channel4",
3285 .info = msm_pcm_channel_input_be_info,
3286 .get = msm_pcm_channel_input_be_get,
3287 .put = msm_pcm_channel_input_be_put,
3288 .private_value = (unsigned long)&(mm1_ch4_enum)
3289 },
3290 {
3291 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3292 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3293 .name = "MultiMedia1 Channel5",
3294 .info = msm_pcm_channel_input_be_info,
3295 .get = msm_pcm_channel_input_be_get,
3296 .put = msm_pcm_channel_input_be_put,
3297 .private_value = (unsigned long)&(mm1_ch5_enum)
3298 },
3299 {
3300 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3301 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3302 .name = "MultiMedia1 Channel6",
3303 .info = msm_pcm_channel_input_be_info,
3304 .get = msm_pcm_channel_input_be_get,
3305 .put = msm_pcm_channel_input_be_put,
3306 .private_value = (unsigned long)&(mm1_ch6_enum)
3307 },
3308 {
3309 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3310 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3311 .name = "MultiMedia1 Channel7",
3312 .info = msm_pcm_channel_input_be_info,
3313 .get = msm_pcm_channel_input_be_get,
3314 .put = msm_pcm_channel_input_be_put,
3315 .private_value = (unsigned long)&(mm1_ch7_enum)
3316 },
3317 {
3318 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3319 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3320 .name = "MultiMedia1 Channel8",
3321 .info = msm_pcm_channel_input_be_info,
3322 .get = msm_pcm_channel_input_be_get,
3323 .put = msm_pcm_channel_input_be_put,
3324 .private_value = (unsigned long)&(mm1_ch8_enum)
3325 },
3326};
3327static int msm_ec_ref_ch_get(struct snd_kcontrol *kcontrol,
3328 struct snd_ctl_elem_value *ucontrol)
3329{
3330 ucontrol->value.integer.value[0] = msm_ec_ref_ch;
3331 pr_debug("%s: msm_ec_ref_ch = %ld\n", __func__,
3332 ucontrol->value.integer.value[0]);
3333 return 0;
3334}
3335
3336static int msm_ec_ref_ch_put(struct snd_kcontrol *kcontrol,
3337 struct snd_ctl_elem_value *ucontrol)
3338{
3339 msm_ec_ref_ch = ucontrol->value.integer.value[0];
3340 pr_debug("%s: msm_ec_ref_ch = %d\n", __func__, msm_ec_ref_ch);
3341 adm_num_ec_ref_rx_chans(msm_ec_ref_ch);
3342 return 0;
3343}
3344
3345static const char *const ec_ref_ch_text[] = {"Zero", "One", "Two", "Three",
3346 "Four", "Five", "Six", "Seven", "Eight"};
3347
3348static int msm_ec_ref_bit_format_get(struct snd_kcontrol *kcontrol,
3349 struct snd_ctl_elem_value *ucontrol)
3350{
3351 switch (msm_ec_ref_bit_format) {
3352 case SNDRV_PCM_FORMAT_S24_LE:
3353 ucontrol->value.integer.value[0] = 2;
3354 break;
3355 case SNDRV_PCM_FORMAT_S16_LE:
3356 ucontrol->value.integer.value[0] = 1;
3357 break;
3358 default:
3359 ucontrol->value.integer.value[0] = 0;
3360 break;
3361 }
3362 pr_debug("%s: msm_ec_ref_bit_format = %ld\n",
3363 __func__, ucontrol->value.integer.value[0]);
3364 return 0;
3365}
3366
3367static int msm_ec_ref_bit_format_put(struct snd_kcontrol *kcontrol,
3368 struct snd_ctl_elem_value *ucontrol)
3369{
3370 u16 bit_width = 0;
3371
3372 switch (ucontrol->value.integer.value[0]) {
3373 case 2:
3374 msm_ec_ref_bit_format = SNDRV_PCM_FORMAT_S24_LE;
3375 break;
3376 case 1:
3377 msm_ec_ref_bit_format = SNDRV_PCM_FORMAT_S16_LE;
3378 break;
3379 default:
3380 msm_ec_ref_bit_format = 0;
3381 break;
3382 }
3383
3384 if (msm_ec_ref_bit_format == SNDRV_PCM_FORMAT_S16_LE)
3385 bit_width = 16;
3386 else if (msm_ec_ref_bit_format == SNDRV_PCM_FORMAT_S24_LE)
3387 bit_width = 24;
3388
3389 pr_debug("%s: msm_ec_ref_bit_format = %d\n",
3390 __func__, msm_ec_ref_bit_format);
3391 adm_ec_ref_rx_bit_width(bit_width);
3392 return 0;
3393}
3394
3395static char const *ec_ref_bit_format_text[] = {"0", "S16_LE", "S24_LE"};
3396
3397static int msm_ec_ref_rate_get(struct snd_kcontrol *kcontrol,
3398 struct snd_ctl_elem_value *ucontrol)
3399{
3400 ucontrol->value.integer.value[0] = msm_ec_ref_sampling_rate;
3401 pr_debug("%s: msm_ec_ref_sampling_rate = %ld\n",
3402 __func__, ucontrol->value.integer.value[0]);
3403 return 0;
3404}
3405
3406static int msm_ec_ref_rate_put(struct snd_kcontrol *kcontrol,
3407 struct snd_ctl_elem_value *ucontrol)
3408{
3409 switch (ucontrol->value.integer.value[0]) {
3410 case 0:
3411 msm_ec_ref_sampling_rate = 0;
3412 break;
3413 case 1:
3414 msm_ec_ref_sampling_rate = 8000;
3415 break;
3416 case 2:
3417 msm_ec_ref_sampling_rate = 16000;
3418 break;
3419 case 3:
3420 msm_ec_ref_sampling_rate = 32000;
3421 break;
3422 case 4:
3423 msm_ec_ref_sampling_rate = 44100;
3424 break;
3425 case 5:
3426 msm_ec_ref_sampling_rate = 48000;
3427 break;
3428 case 6:
3429 msm_ec_ref_sampling_rate = 96000;
3430 break;
3431 case 7:
3432 msm_ec_ref_sampling_rate = 192000;
3433 break;
3434 case 8:
3435 msm_ec_ref_sampling_rate = 384000;
3436 break;
3437 default:
3438 msm_ec_ref_sampling_rate = 48000;
3439 break;
3440 }
3441 pr_debug("%s: msm_ec_ref_sampling_rate = %d\n",
3442 __func__, msm_ec_ref_sampling_rate);
3443 adm_ec_ref_rx_sampling_rate(msm_ec_ref_sampling_rate);
3444 return 0;
3445}
3446
3447static const char *const ec_ref_rate_text[] = {"0", "8000", "16000",
3448 "32000", "44100", "48000", "96000", "192000", "384000"};
3449
3450static const struct soc_enum msm_route_ec_ref_params_enum[] = {
3451 SOC_ENUM_SINGLE_EXT(9, ec_ref_ch_text),
3452 SOC_ENUM_SINGLE_EXT(3, ec_ref_bit_format_text),
3453 SOC_ENUM_SINGLE_EXT(9, ec_ref_rate_text),
3454};
3455
3456static const struct snd_kcontrol_new ec_ref_param_controls[] = {
3457 SOC_ENUM_EXT("EC Reference Channels", msm_route_ec_ref_params_enum[0],
3458 msm_ec_ref_ch_get, msm_ec_ref_ch_put),
3459 SOC_ENUM_EXT("EC Reference Bit Format", msm_route_ec_ref_params_enum[1],
3460 msm_ec_ref_bit_format_get, msm_ec_ref_bit_format_put),
3461 SOC_ENUM_EXT("EC Reference SampleRate", msm_route_ec_ref_params_enum[2],
3462 msm_ec_ref_rate_get, msm_ec_ref_rate_put),
3463};
3464
3465static int msm_routing_ec_ref_rx_get(struct snd_kcontrol *kcontrol,
3466 struct snd_ctl_elem_value *ucontrol)
3467{
3468 pr_debug("%s: ec_ref_rx = %d", __func__, msm_route_ec_ref_rx);
3469 mutex_lock(&routing_lock);
3470 ucontrol->value.integer.value[0] = msm_route_ec_ref_rx;
3471 mutex_unlock(&routing_lock);
3472 return 0;
3473}
3474
3475static int msm_routing_ec_ref_rx_put(struct snd_kcontrol *kcontrol,
3476 struct snd_ctl_elem_value *ucontrol)
3477{
3478 int ec_ref_port_id;
Asish Bhattacharya34504582017-08-08 12:55:01 +05303479 struct snd_soc_dapm_widget *widget =
3480 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05303481 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3482 struct snd_soc_dapm_update *update = NULL;
3483
3484
3485 mutex_lock(&routing_lock);
3486 switch (ucontrol->value.integer.value[0]) {
3487 case 0:
3488 msm_route_ec_ref_rx = 0;
3489 ec_ref_port_id = AFE_PORT_INVALID;
3490 break;
3491 case 1:
3492 msm_route_ec_ref_rx = 1;
3493 ec_ref_port_id = SLIMBUS_0_RX;
3494 break;
3495 case 2:
3496 msm_route_ec_ref_rx = 2;
3497 ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_RX;
3498 break;
3499 case 3:
3500 msm_route_ec_ref_rx = 3;
3501 ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_TX;
3502 break;
3503 case 4:
3504 msm_route_ec_ref_rx = 4;
3505 ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_TX;
3506 break;
3507 case 5:
3508 msm_route_ec_ref_rx = 5;
3509 ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
3510 break;
3511 case 6:
3512 msm_route_ec_ref_rx = 6;
3513 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
3514 break;
3515 case 7:
3516 msm_route_ec_ref_rx = 7;
3517 ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_RX;
3518 break;
3519 case 9:
3520 msm_route_ec_ref_rx = 9;
3521 ec_ref_port_id = SLIMBUS_5_RX;
3522 break;
3523 case 10:
3524 msm_route_ec_ref_rx = 10;
3525 ec_ref_port_id = SLIMBUS_1_TX;
3526 break;
3527 case 11:
3528 msm_route_ec_ref_rx = 11;
3529 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_TX_1;
3530 break;
3531 case 12:
3532 msm_route_ec_ref_rx = 12;
3533 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX;
3534 break;
3535 case 13:
3536 msm_route_ec_ref_rx = 13;
3537 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX_1;
3538 break;
3539 case 14:
3540 msm_route_ec_ref_rx = 14;
3541 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_TDM_RX_2;
3542 break;
3543 case 15:
3544 msm_route_ec_ref_rx = 15;
3545 ec_ref_port_id = SLIMBUS_6_RX;
3546 break;
3547 case 16:
3548 msm_route_ec_ref_rx = 16;
3549 ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_RX;
3550 break;
3551 case 17:
3552 msm_route_ec_ref_rx = 17;
3553 ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_RX;
3554 break;
3555 case 18:
3556 msm_route_ec_ref_rx = 18;
3557 ec_ref_port_id = AFE_PORT_ID_TERTIARY_TDM_TX;
3558 break;
3559 case 19:
3560 msm_route_ec_ref_rx = 19;
3561 ec_ref_port_id = AFE_PORT_ID_USB_RX;
3562 break;
3563 case 20:
3564 msm_route_ec_ref_rx = 20;
3565 ec_ref_port_id = AFE_PORT_ID_INT0_MI2S_RX;
3566 break;
3567 case 21:
3568 msm_route_ec_ref_rx = 21;
3569 ec_ref_port_id = AFE_PORT_ID_INT4_MI2S_RX;
3570 break;
3571 case 22:
3572 msm_route_ec_ref_rx = 22;
3573 ec_ref_port_id = AFE_PORT_ID_INT3_MI2S_TX;
3574 break;
3575 default:
3576 msm_route_ec_ref_rx = 0; /* NONE */
3577 pr_err("%s EC ref rx %ld not valid\n",
3578 __func__, ucontrol->value.integer.value[0]);
3579 ec_ref_port_id = AFE_PORT_INVALID;
3580 break;
3581 }
3582 adm_ec_ref_rx_id(ec_ref_port_id);
3583 pr_debug("%s: msm_route_ec_ref_rx = %d\n",
3584 __func__, msm_route_ec_ref_rx);
3585 mutex_unlock(&routing_lock);
3586 snd_soc_dapm_mux_update_power(widget->dapm, kcontrol,
3587 msm_route_ec_ref_rx, e, update);
3588 return 0;
3589}
3590
3591static const char *const ec_ref_rx[] = { "None", "SLIM_RX", "I2S_RX",
3592 "PRI_MI2S_TX", "SEC_MI2S_TX",
3593 "TERT_MI2S_TX", "QUAT_MI2S_TX", "SEC_I2S_RX", "PROXY_RX",
3594 "SLIM_5_RX", "SLIM_1_TX", "QUAT_TDM_TX_1",
3595 "QUAT_TDM_RX_0", "QUAT_TDM_RX_1", "QUAT_TDM_RX_2", "SLIM_6_RX",
3596 "TERT_MI2S_RX", "QUAT_MI2S_RX", "TERT_TDM_TX_0", "USB_AUDIO_RX",
3597 "INT0_MI2S_RX", "INT4_MI2S_RX", "INT3_MI2S_TX"};
3598
3599static const struct soc_enum msm_route_ec_ref_rx_enum[] = {
3600 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ec_ref_rx), ec_ref_rx),
3601};
3602
3603static const struct snd_kcontrol_new ext_ec_ref_mux_ul1 =
3604 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL1 MUX Mux",
3605 msm_route_ec_ref_rx_enum[0],
3606 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3607
3608static const struct snd_kcontrol_new ext_ec_ref_mux_ul2 =
3609 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL2 MUX Mux",
3610 msm_route_ec_ref_rx_enum[0],
3611 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3612
3613static const struct snd_kcontrol_new ext_ec_ref_mux_ul3 =
3614 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL3 MUX Mux",
3615 msm_route_ec_ref_rx_enum[0],
3616 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3617
3618static const struct snd_kcontrol_new ext_ec_ref_mux_ul4 =
3619 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL4 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_ul5 =
3624 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL5 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_ul6 =
3629 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL6 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_ul8 =
3634 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL8 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_ul9 =
3639 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL9 MUX Mux",
3640 msm_route_ec_ref_rx_enum[0],
3641 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3642
Asish Bhattacharya34504582017-08-08 12:55:01 +05303643static const struct snd_kcontrol_new ext_ec_ref_mux_ul16 =
3644 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL16 MUX Mux",
3645 msm_route_ec_ref_rx_enum[0],
3646 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3647
Laxminath Kasam38070be2017-08-17 18:21:59 +05303648static const struct snd_kcontrol_new ext_ec_ref_mux_ul10 =
3649 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL10 MUX Mux",
3650 msm_route_ec_ref_rx_enum[0],
3651 msm_routing_ec_ref_rx_get, msm_routing_ec_ref_rx_put);
3652
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05303653static const struct snd_kcontrol_new ext_ec_ref_mux_ul17 =
3654 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL17 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_ul18 =
3659 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL18 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_ul19 =
3664 SOC_DAPM_ENUM_EXT("AUDIO_REF_EC_UL19 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 int msm_routing_ext_ec_get(struct snd_kcontrol *kcontrol,
3669 struct snd_ctl_elem_value *ucontrol)
3670{
3671 pr_debug("%s: ext_ec_ref_rx = %x\n", __func__, msm_route_ext_ec_ref);
3672
3673 mutex_lock(&routing_lock);
3674 ucontrol->value.integer.value[0] = msm_route_ext_ec_ref;
3675 mutex_unlock(&routing_lock);
3676 return 0;
3677}
3678
3679static int msm_routing_ext_ec_put(struct snd_kcontrol *kcontrol,
3680 struct snd_ctl_elem_value *ucontrol)
3681{
Asish Bhattacharya34504582017-08-08 12:55:01 +05303682 struct snd_soc_dapm_widget *widget =
3683 snd_soc_dapm_kcontrol_widget(kcontrol);
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05303684 int mux = ucontrol->value.enumerated.item[0];
3685 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
3686 int ret = 1;
3687 bool state = true;
3688 uint16_t ext_ec_ref_port_id;
3689 struct snd_soc_dapm_update *update = NULL;
3690
3691 if (mux >= e->items) {
3692 pr_err("%s: Invalid mux value %d\n", __func__, mux);
3693 return -EINVAL;
3694 }
3695
3696 mutex_lock(&routing_lock);
3697 msm_route_ext_ec_ref = ucontrol->value.integer.value[0];
3698
3699 switch (msm_route_ext_ec_ref) {
3700 case EXT_EC_REF_PRI_MI2S_TX:
3701 ext_ec_ref_port_id = AFE_PORT_ID_PRIMARY_MI2S_TX;
3702 break;
3703 case EXT_EC_REF_SEC_MI2S_TX:
3704 ext_ec_ref_port_id = AFE_PORT_ID_SECONDARY_MI2S_TX;
3705 break;
3706 case EXT_EC_REF_TERT_MI2S_TX:
3707 ext_ec_ref_port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
3708 break;
3709 case EXT_EC_REF_QUAT_MI2S_TX:
3710 ext_ec_ref_port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
3711 break;
3712 case EXT_EC_REF_QUIN_MI2S_TX:
3713 ext_ec_ref_port_id = AFE_PORT_ID_QUINARY_MI2S_TX;
3714 break;
3715 case EXT_EC_REF_SLIM_1_TX:
3716 ext_ec_ref_port_id = SLIMBUS_1_TX;
3717 break;
3718 case EXT_EC_REF_NONE:
3719 default:
3720 ext_ec_ref_port_id = AFE_PORT_INVALID;
3721 state = false;
3722 break;
3723 }
3724
3725 pr_debug("%s: val = %d ext_ec_ref_port_id = 0x%0x state = %d\n",
3726 __func__, msm_route_ext_ec_ref, ext_ec_ref_port_id, state);
3727
3728 if (!voc_set_ext_ec_ref_port_id(ext_ec_ref_port_id, state)) {
3729 mutex_unlock(&routing_lock);
3730 snd_soc_dapm_mux_update_power(widget->dapm, kcontrol, mux, e,
3731 update);
3732 } else {
3733 ret = -EINVAL;
3734 mutex_unlock(&routing_lock);
3735 }
3736 return ret;
3737}
3738
3739static const char * const ext_ec_ref_rx[] = {"NONE", "PRI_MI2S_TX",
3740 "SEC_MI2S_TX", "TERT_MI2S_TX",
3741 "QUAT_MI2S_TX", "QUIN_MI2S_TX",
3742 "SLIM_1_TX"};
3743
3744static const struct soc_enum msm_route_ext_ec_ref_rx_enum[] = {
3745 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ext_ec_ref_rx), ext_ec_ref_rx),
3746};
3747
3748static const struct snd_kcontrol_new voc_ext_ec_mux =
3749 SOC_DAPM_ENUM_EXT("VOC_EXT_EC MUX Mux", msm_route_ext_ec_ref_rx_enum[0],
3750 msm_routing_ext_ec_get, msm_routing_ext_ec_put);
3751
3752
3753static const struct snd_kcontrol_new pri_i2s_rx_mixer_controls[] = {
3754 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_I2S_RX,
3755 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3756 msm_routing_put_audio_mixer),
3757 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_I2S_RX,
3758 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3759 msm_routing_put_audio_mixer),
3760 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_I2S_RX,
3761 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3762 msm_routing_put_audio_mixer),
3763 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_I2S_RX,
3764 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3765 msm_routing_put_audio_mixer),
3766 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_I2S_RX,
3767 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3768 msm_routing_put_audio_mixer),
3769 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_I2S_RX,
3770 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3771 msm_routing_put_audio_mixer),
3772 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_I2S_RX,
3773 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3774 msm_routing_put_audio_mixer),
3775 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_I2S_RX,
3776 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3777 msm_routing_put_audio_mixer),
3778 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_I2S_RX,
3779 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3780 msm_routing_put_audio_mixer),
3781 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_I2S_RX,
3782 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3783 msm_routing_put_audio_mixer),
3784 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_I2S_RX,
3785 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3786 msm_routing_put_audio_mixer),
3787 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_I2S_RX,
3788 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3789 msm_routing_put_audio_mixer),
3790 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_I2S_RX,
3791 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3792 msm_routing_put_audio_mixer),
3793 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_I2S_RX,
3794 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3795 msm_routing_put_audio_mixer),
3796 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_I2S_RX,
3797 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3798 msm_routing_put_audio_mixer),
3799 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_I2S_RX,
3800 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3801 msm_routing_put_audio_mixer),
3802 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_PRI_I2S_RX,
3803 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3804 msm_routing_put_audio_mixer),
3805 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_PRI_I2S_RX,
3806 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3807 msm_routing_put_audio_mixer),
3808 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_PRI_I2S_RX,
3809 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3810 msm_routing_put_audio_mixer),
3811};
3812
3813static const struct snd_kcontrol_new sec_i2s_rx_mixer_controls[] = {
3814 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_I2S_RX,
3815 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3816 msm_routing_put_audio_mixer),
3817 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_I2S_RX,
3818 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3819 msm_routing_put_audio_mixer),
3820 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_I2S_RX,
3821 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3822 msm_routing_put_audio_mixer),
3823 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_I2S_RX,
3824 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3825 msm_routing_put_audio_mixer),
3826 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_I2S_RX,
3827 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3828 msm_routing_put_audio_mixer),
3829 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_I2S_RX,
3830 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3831 msm_routing_put_audio_mixer),
3832 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_I2S_RX,
3833 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3834 msm_routing_put_audio_mixer),
3835 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_I2S_RX,
3836 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3837 msm_routing_put_audio_mixer),
3838 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_I2S_RX,
3839 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3840 msm_routing_put_audio_mixer),
3841 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_I2S_RX,
3842 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3843 msm_routing_put_audio_mixer),
3844 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_I2S_RX,
3845 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3846 msm_routing_put_audio_mixer),
3847 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_I2S_RX,
3848 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3849 msm_routing_put_audio_mixer),
3850 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_I2S_RX,
3851 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3852 msm_routing_put_audio_mixer),
3853 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_I2S_RX,
3854 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3855 msm_routing_put_audio_mixer),
3856 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_I2S_RX,
3857 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3858 msm_routing_put_audio_mixer),
3859 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_I2S_RX,
3860 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3861 msm_routing_put_audio_mixer),
3862 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SEC_I2S_RX,
3863 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3864 msm_routing_put_audio_mixer),
3865 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SEC_I2S_RX,
3866 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3867 msm_routing_put_audio_mixer),
3868 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SEC_I2S_RX,
3869 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3870 msm_routing_put_audio_mixer),
3871};
3872
3873static const struct snd_kcontrol_new spdif_rx_mixer_controls[] = {
3874 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SPDIF_RX,
3875 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3876 msm_routing_put_audio_mixer),
3877 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SPDIF_RX,
3878 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3879 msm_routing_put_audio_mixer),
3880 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SPDIF_RX,
3881 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3882 msm_routing_put_audio_mixer),
3883 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SPDIF_RX,
3884 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3885 msm_routing_put_audio_mixer),
3886 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SPDIF_RX,
3887 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3888 msm_routing_put_audio_mixer),
3889 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SPDIF_RX,
3890 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3891 msm_routing_put_audio_mixer),
3892 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SPDIF_RX,
3893 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3894 msm_routing_put_audio_mixer),
3895 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SPDIF_RX,
3896 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3897 msm_routing_put_audio_mixer),
3898 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SPDIF_RX,
3899 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3900 msm_routing_put_audio_mixer),
3901 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SPDIF_RX,
3902 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3903 msm_routing_put_audio_mixer),
3904 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SPDIF_RX,
3905 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3906 msm_routing_put_audio_mixer),
3907 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SPDIF_RX,
3908 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3909 msm_routing_put_audio_mixer),
3910 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SPDIF_RX,
3911 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3912 msm_routing_put_audio_mixer),
3913 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SPDIF_RX,
3914 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3915 msm_routing_put_audio_mixer),
3916 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SPDIF_RX,
3917 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3918 msm_routing_put_audio_mixer),
3919 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SPDIF_RX,
3920 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3921 msm_routing_put_audio_mixer),
3922 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SPDIF_RX,
3923 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
3924 msm_routing_put_audio_mixer),
3925 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SPDIF_RX,
3926 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
3927 msm_routing_put_audio_mixer),
3928 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SPDIF_RX,
3929 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
3930 msm_routing_put_audio_mixer),
3931
3932};
3933
3934static const struct snd_kcontrol_new slimbus_2_rx_mixer_controls[] = {
3935 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3936 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3937 msm_routing_put_audio_mixer),
3938 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3939 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3940 msm_routing_put_audio_mixer),
3941 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3942 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3943 msm_routing_put_audio_mixer),
3944 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3945 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3946 msm_routing_put_audio_mixer),
3947 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3948 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
3949 msm_routing_put_audio_mixer),
3950 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3951 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
3952 msm_routing_put_audio_mixer),
3953 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3954 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
3955 msm_routing_put_audio_mixer),
3956 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3957 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
3958 msm_routing_put_audio_mixer),
3959 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3960 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
3961 msm_routing_put_audio_mixer),
3962 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3963 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
3964 msm_routing_put_audio_mixer),
3965 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3966 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
3967 msm_routing_put_audio_mixer),
3968 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3969 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
3970 msm_routing_put_audio_mixer),
3971 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3972 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
3973 msm_routing_put_audio_mixer),
3974 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3975 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
3976 msm_routing_put_audio_mixer),
3977 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3978 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
3979 msm_routing_put_audio_mixer),
3980 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_2_RX,
3981 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
3982 msm_routing_put_audio_mixer),
3983};
3984
3985static const struct snd_kcontrol_new slimbus_5_rx_mixer_controls[] = {
3986 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3987 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
3988 msm_routing_put_audio_mixer),
3989 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3990 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
3991 msm_routing_put_audio_mixer),
3992 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3993 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
3994 msm_routing_put_audio_mixer),
3995 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3996 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
3997 msm_routing_put_audio_mixer),
3998 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_5_RX,
3999 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4000 msm_routing_put_audio_mixer),
4001 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4002 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4003 msm_routing_put_audio_mixer),
4004 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4005 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4006 msm_routing_put_audio_mixer),
4007 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4008 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4009 msm_routing_put_audio_mixer),
4010 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4011 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4012 msm_routing_put_audio_mixer),
4013 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4014 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4015 msm_routing_put_audio_mixer),
4016 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4017 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4018 msm_routing_put_audio_mixer),
4019 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4020 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4021 msm_routing_put_audio_mixer),
4022 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4023 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4024 msm_routing_put_audio_mixer),
4025 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4026 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4027 msm_routing_put_audio_mixer),
4028 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4029 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4030 msm_routing_put_audio_mixer),
4031 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4032 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4033 msm_routing_put_audio_mixer),
4034 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4035 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4036 msm_routing_put_audio_mixer),
4037 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4038 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4039 msm_routing_put_audio_mixer),
4040 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SLIMBUS_5_RX,
4041 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4042 msm_routing_put_audio_mixer),
4043};
4044
4045static const struct snd_kcontrol_new slimbus_rx_mixer_controls[] = {
4046 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4047 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4048 msm_routing_put_audio_mixer),
4049 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4050 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4051 msm_routing_put_audio_mixer),
4052 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4053 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4054 msm_routing_put_audio_mixer),
4055 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4056 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4057 msm_routing_put_audio_mixer),
4058 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4059 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4060 msm_routing_put_audio_mixer),
4061 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4062 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4063 msm_routing_put_audio_mixer),
4064 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4065 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4066 msm_routing_put_audio_mixer),
4067 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4068 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4069 msm_routing_put_audio_mixer),
4070 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4071 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4072 msm_routing_put_audio_mixer),
4073 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4074 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4075 msm_routing_put_audio_mixer),
4076 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4077 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4078 msm_routing_put_audio_mixer),
4079 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4080 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4081 msm_routing_put_audio_mixer),
4082 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4083 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4084 msm_routing_put_audio_mixer),
4085 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4086 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4087 msm_routing_put_audio_mixer),
4088 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4089 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4090 msm_routing_put_audio_mixer),
4091 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4092 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4093 msm_routing_put_audio_mixer),
4094 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4095 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4096 msm_routing_put_audio_mixer),
4097 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4098 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4099 msm_routing_put_audio_mixer),
4100 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SLIMBUS_0_RX,
4101 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4102 msm_routing_put_audio_mixer),
4103};
4104
4105static const struct snd_kcontrol_new mi2s_rx_mixer_controls[] = {
4106 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_MI2S_RX,
4107 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4108 msm_routing_put_audio_mixer),
4109 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_MI2S_RX,
4110 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4111 msm_routing_put_audio_mixer),
4112 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_MI2S_RX,
4113 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4114 msm_routing_put_audio_mixer),
4115 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_MI2S_RX,
4116 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4117 msm_routing_put_audio_mixer),
4118 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_MI2S_RX,
4119 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4120 msm_routing_put_audio_mixer),
4121 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_MI2S_RX,
4122 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4123 msm_routing_put_audio_mixer),
4124 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_MI2S_RX,
4125 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4126 msm_routing_put_audio_mixer),
4127 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_MI2S_RX,
4128 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4129 msm_routing_put_audio_mixer),
4130 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_MI2S_RX,
4131 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4132 msm_routing_put_audio_mixer),
4133 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_MI2S_RX,
4134 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4135 msm_routing_put_audio_mixer),
4136 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_MI2S_RX,
4137 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4138 msm_routing_put_audio_mixer),
4139 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_MI2S_RX,
4140 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4141 msm_routing_put_audio_mixer),
4142 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_MI2S_RX,
4143 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4144 msm_routing_put_audio_mixer),
4145 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_MI2S_RX,
4146 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4147 msm_routing_put_audio_mixer),
4148 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_MI2S_RX,
4149 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4150 msm_routing_put_audio_mixer),
4151 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_MI2S_RX,
4152 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4153 msm_routing_put_audio_mixer),
4154 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_MI2S_RX,
4155 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4156 msm_routing_put_audio_mixer),
4157 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_MI2S_RX,
4158 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4159 msm_routing_put_audio_mixer),
4160 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_MI2S_RX,
4161 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4162 msm_routing_put_audio_mixer),
4163};
4164
4165static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = {
4166 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4167 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4168 msm_routing_put_audio_mixer),
4169 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4170 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4171 msm_routing_put_audio_mixer),
4172 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4173 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4174 msm_routing_put_audio_mixer),
4175 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4176 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4177 msm_routing_put_audio_mixer),
4178 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4179 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4180 msm_routing_put_audio_mixer),
4181 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4182 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4183 msm_routing_put_audio_mixer),
4184 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4185 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4186 msm_routing_put_audio_mixer),
4187 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4188 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4189 msm_routing_put_audio_mixer),
4190 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4191 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4192 msm_routing_put_audio_mixer),
4193 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4194 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4195 msm_routing_put_audio_mixer),
4196 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4197 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4198 msm_routing_put_audio_mixer),
4199 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4200 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4201 msm_routing_put_audio_mixer),
4202 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4203 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4204 msm_routing_put_audio_mixer),
4205 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4206 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4207 msm_routing_put_audio_mixer),
4208 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4209 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4210 msm_routing_put_audio_mixer),
4211 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4212 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4213 msm_routing_put_audio_mixer),
4214 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4215 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4216 msm_routing_put_audio_mixer),
4217 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4218 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4219 msm_routing_put_audio_mixer),
4220 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
4221 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4222 msm_routing_put_audio_mixer),
4223};
4224
4225static const struct snd_kcontrol_new quinary_mi2s_rx_mixer_controls[] = {
4226 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4227 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4228 msm_routing_put_audio_mixer),
4229 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4230 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4231 msm_routing_put_audio_mixer),
4232 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4233 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4234 msm_routing_put_audio_mixer),
4235 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4236 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4237 msm_routing_put_audio_mixer),
4238 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4239 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4240 msm_routing_put_audio_mixer),
4241 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4242 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4243 msm_routing_put_audio_mixer),
4244 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4245 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4246 msm_routing_put_audio_mixer),
4247 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4248 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4249 msm_routing_put_audio_mixer),
4250 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4251 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4252 msm_routing_put_audio_mixer),
4253 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4254 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4255 msm_routing_put_audio_mixer),
4256 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4257 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4258 msm_routing_put_audio_mixer),
4259 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4260 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4261 msm_routing_put_audio_mixer),
4262 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4263 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4264 msm_routing_put_audio_mixer),
4265 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4266 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4267 msm_routing_put_audio_mixer),
4268 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4269 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4270 msm_routing_put_audio_mixer),
4271 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4272 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4273 msm_routing_put_audio_mixer),
4274 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4275 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4276 msm_routing_put_audio_mixer),
4277 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4278 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4279 msm_routing_put_audio_mixer),
4280 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
4281 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4282 msm_routing_put_audio_mixer),
4283};
4284
4285static const struct snd_kcontrol_new tertiary_mi2s_rx_mixer_controls[] = {
4286 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4287 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4288 msm_routing_put_audio_mixer),
4289 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4290 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4291 msm_routing_put_audio_mixer),
4292 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4293 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4294 msm_routing_put_audio_mixer),
4295 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4296 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4297 msm_routing_put_audio_mixer),
4298 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4299 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4300 msm_routing_put_audio_mixer),
4301 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4302 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4303 msm_routing_put_audio_mixer),
4304 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4305 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4306 msm_routing_put_audio_mixer),
4307 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4308 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4309 msm_routing_put_audio_mixer),
4310 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4311 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4312 msm_routing_put_audio_mixer),
4313 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4314 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4315 msm_routing_put_audio_mixer),
4316 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4317 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4318 msm_routing_put_audio_mixer),
4319 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4320 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4321 msm_routing_put_audio_mixer),
4322 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4323 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4324 msm_routing_put_audio_mixer),
4325 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4326 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4327 msm_routing_put_audio_mixer),
4328 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4329 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4330 msm_routing_put_audio_mixer),
4331 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4332 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4333 msm_routing_put_audio_mixer),
4334 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
4335 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4336 msm_routing_put_audio_mixer),
4337};
4338
4339static const struct snd_kcontrol_new secondary_mi2s_rx2_mixer_controls[] = {
4340 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SECONDARY_MI2S_RX_SD1,
4341 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4342 msm_routing_put_audio_mixer),
4343};
4344
4345static const struct snd_kcontrol_new secondary_mi2s_rx_mixer_controls[] = {
4346 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4347 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4348 msm_routing_put_audio_mixer),
4349 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4350 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4351 msm_routing_put_audio_mixer),
4352 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4353 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4354 msm_routing_put_audio_mixer),
4355 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4356 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4357 msm_routing_put_audio_mixer),
4358 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4359 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4360 msm_routing_put_audio_mixer),
4361 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4362 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4363 msm_routing_put_audio_mixer),
4364 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4365 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4366 msm_routing_put_audio_mixer),
4367 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4368 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4369 msm_routing_put_audio_mixer),
4370 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4371 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4372 msm_routing_put_audio_mixer),
4373 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4374 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4375 msm_routing_put_audio_mixer),
4376 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4377 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4378 msm_routing_put_audio_mixer),
4379 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4380 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4381 msm_routing_put_audio_mixer),
4382 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4383 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4384 msm_routing_put_audio_mixer),
4385 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4386 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4387 msm_routing_put_audio_mixer),
4388 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4389 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4390 msm_routing_put_audio_mixer),
4391 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4392 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4393 msm_routing_put_audio_mixer),
4394 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4395 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4396 msm_routing_put_audio_mixer),
4397 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4398 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4399 msm_routing_put_audio_mixer),
4400 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
4401 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4402 msm_routing_put_audio_mixer),
4403};
4404
4405static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
4406 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_MI2S_RX,
4407 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4408 msm_routing_put_audio_mixer),
4409 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_MI2S_RX,
4410 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4411 msm_routing_put_audio_mixer),
4412 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_MI2S_RX,
4413 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4414 msm_routing_put_audio_mixer),
4415 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_MI2S_RX,
4416 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4417 msm_routing_put_audio_mixer),
4418 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_MI2S_RX,
4419 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4420 msm_routing_put_audio_mixer),
4421 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_MI2S_RX,
4422 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4423 msm_routing_put_audio_mixer),
4424 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_MI2S_RX,
4425 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4426 msm_routing_put_audio_mixer),
4427 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_MI2S_RX,
4428 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4429 msm_routing_put_audio_mixer),
4430 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_MI2S_RX,
4431 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4432 msm_routing_put_audio_mixer),
4433 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_MI2S_RX,
4434 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4435 msm_routing_put_audio_mixer),
4436 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_MI2S_RX,
4437 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4438 msm_routing_put_audio_mixer),
4439 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_MI2S_RX,
4440 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4441 msm_routing_put_audio_mixer),
4442 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_MI2S_RX,
4443 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4444 msm_routing_put_audio_mixer),
4445 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_MI2S_RX,
4446 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4447 msm_routing_put_audio_mixer),
4448 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_MI2S_RX,
4449 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4450 msm_routing_put_audio_mixer),
4451 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_MI2S_RX,
4452 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4453 msm_routing_put_audio_mixer),
4454 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_PRI_MI2S_RX,
4455 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4456 msm_routing_put_audio_mixer),
4457 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_PRI_MI2S_RX,
4458 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4459 msm_routing_put_audio_mixer),
4460 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_PRI_MI2S_RX,
4461 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4462 msm_routing_put_audio_mixer),
4463};
4464
4465static const struct snd_kcontrol_new int0_mi2s_rx_mixer_controls[] = {
4466 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT0_MI2S_RX,
4467 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4468 msm_routing_put_audio_mixer),
4469 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT0_MI2S_RX,
4470 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4471 msm_routing_put_audio_mixer),
4472 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT0_MI2S_RX,
4473 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4474 msm_routing_put_audio_mixer),
4475 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT0_MI2S_RX,
4476 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4477 msm_routing_put_audio_mixer),
4478 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT0_MI2S_RX,
4479 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4480 msm_routing_put_audio_mixer),
4481 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT0_MI2S_RX,
4482 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4483 msm_routing_put_audio_mixer),
4484 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT0_MI2S_RX,
4485 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4486 msm_routing_put_audio_mixer),
4487 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT0_MI2S_RX,
4488 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4489 msm_routing_put_audio_mixer),
4490 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT0_MI2S_RX,
4491 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4492 msm_routing_put_audio_mixer),
4493 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT0_MI2S_RX,
4494 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4495 msm_routing_put_audio_mixer),
4496 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT0_MI2S_RX,
4497 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4498 msm_routing_put_audio_mixer),
4499 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT0_MI2S_RX,
4500 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4501 msm_routing_put_audio_mixer),
4502 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT0_MI2S_RX,
4503 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4504 msm_routing_put_audio_mixer),
4505 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT0_MI2S_RX,
4506 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4507 msm_routing_put_audio_mixer),
4508 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT0_MI2S_RX,
4509 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4510 msm_routing_put_audio_mixer),
4511 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT0_MI2S_RX,
4512 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4513 msm_routing_put_audio_mixer),
4514};
4515
4516static const struct snd_kcontrol_new int4_mi2s_rx_mixer_controls[] = {
4517 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT4_MI2S_RX,
4518 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4519 msm_routing_put_audio_mixer),
4520 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT4_MI2S_RX,
4521 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4522 msm_routing_put_audio_mixer),
4523 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT4_MI2S_RX,
4524 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4525 msm_routing_put_audio_mixer),
4526 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT4_MI2S_RX,
4527 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4528 msm_routing_put_audio_mixer),
4529 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT4_MI2S_RX,
4530 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4531 msm_routing_put_audio_mixer),
4532 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT4_MI2S_RX,
4533 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4534 msm_routing_put_audio_mixer),
4535 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT4_MI2S_RX,
4536 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4537 msm_routing_put_audio_mixer),
4538 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT4_MI2S_RX,
4539 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4540 msm_routing_put_audio_mixer),
4541 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT4_MI2S_RX,
4542 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4543 msm_routing_put_audio_mixer),
4544 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT4_MI2S_RX,
4545 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4546 msm_routing_put_audio_mixer),
4547 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT4_MI2S_RX,
4548 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4549 msm_routing_put_audio_mixer),
4550 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT4_MI2S_RX,
4551 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4552 msm_routing_put_audio_mixer),
4553 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT4_MI2S_RX,
4554 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4555 msm_routing_put_audio_mixer),
4556 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT4_MI2S_RX,
4557 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4558 msm_routing_put_audio_mixer),
4559 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT4_MI2S_RX,
4560 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4561 msm_routing_put_audio_mixer),
4562 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT4_MI2S_RX,
4563 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4564 msm_routing_put_audio_mixer),
4565};
4566
4567static const struct snd_kcontrol_new hdmi_mixer_controls[] = {
4568 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_HDMI_RX,
4569 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4570 msm_routing_put_audio_mixer),
4571 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_HDMI_RX,
4572 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4573 msm_routing_put_audio_mixer),
4574 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_HDMI_RX,
4575 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4576 msm_routing_put_audio_mixer),
4577 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_HDMI_RX,
4578 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4579 msm_routing_put_audio_mixer),
4580 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_HDMI_RX,
4581 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4582 msm_routing_put_audio_mixer),
4583 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_HDMI_RX,
4584 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4585 msm_routing_put_audio_mixer),
4586 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_HDMI_RX,
4587 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4588 msm_routing_put_audio_mixer),
4589 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_HDMI_RX,
4590 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4591 msm_routing_put_audio_mixer),
4592 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_HDMI_RX,
4593 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4594 msm_routing_put_audio_mixer),
4595 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_HDMI_RX,
4596 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4597 msm_routing_put_audio_mixer),
4598 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_HDMI_RX,
4599 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4600 msm_routing_put_audio_mixer),
4601 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_HDMI_RX,
4602 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4603 msm_routing_put_audio_mixer),
4604 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_HDMI_RX,
4605 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4606 msm_routing_put_audio_mixer),
4607 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_HDMI_RX,
4608 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4609 msm_routing_put_audio_mixer),
4610 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_HDMI_RX,
4611 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4612 msm_routing_put_audio_mixer),
4613 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_HDMI_RX,
4614 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4615 msm_routing_put_audio_mixer),
4616 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_HDMI_RX,
4617 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4618 msm_routing_put_audio_mixer),
4619 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_HDMI_RX,
4620 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4621 msm_routing_put_audio_mixer),
4622 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_HDMI_RX,
4623 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4624 msm_routing_put_audio_mixer),
4625};
4626
4627static const struct snd_kcontrol_new display_port_mixer_controls[] = {
4628 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4629 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4630 msm_routing_put_audio_mixer),
4631 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4632 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4633 msm_routing_put_audio_mixer),
4634 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4635 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4636 msm_routing_put_audio_mixer),
4637 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4638 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4639 msm_routing_put_audio_mixer),
4640 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4641 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4642 msm_routing_put_audio_mixer),
4643 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4644 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4645 msm_routing_put_audio_mixer),
4646 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4647 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4648 msm_routing_put_audio_mixer),
4649 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4650 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4651 msm_routing_put_audio_mixer),
4652 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4653 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4654 msm_routing_put_audio_mixer),
4655 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4656 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4657 msm_routing_put_audio_mixer),
4658 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4659 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4660 msm_routing_put_audio_mixer),
4661 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4662 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4663 msm_routing_put_audio_mixer),
4664 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4665 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4666 msm_routing_put_audio_mixer),
4667 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4668 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4669 msm_routing_put_audio_mixer),
4670 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4671 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4672 msm_routing_put_audio_mixer),
4673 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
4674 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4675 msm_routing_put_audio_mixer),
4676};
4677
4678 /* incall music delivery mixer */
4679static const struct snd_kcontrol_new incall_music_delivery_mixer_controls[] = {
4680 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4681 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4682 msm_routing_put_audio_mixer),
4683 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4684 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4685 msm_routing_put_audio_mixer),
4686 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4687 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4688 msm_routing_put_audio_mixer),
4689 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
4690 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4691 msm_routing_put_audio_mixer),
4692};
4693
4694static const struct snd_kcontrol_new incall_music2_delivery_mixer_controls[] = {
4695 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4696 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4697 msm_routing_put_audio_mixer),
4698 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4699 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4700 msm_routing_put_audio_mixer),
4701 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4702 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4703 msm_routing_put_audio_mixer),
4704 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
4705 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4706 msm_routing_put_audio_mixer),
4707};
4708
4709static const struct snd_kcontrol_new slimbus_4_rx_mixer_controls[] = {
4710 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4711 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4712 msm_routing_put_audio_mixer),
4713 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4714 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4715 msm_routing_put_audio_mixer),
4716 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4717 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4718 msm_routing_put_audio_mixer),
4719 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_4_RX,
4720 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4721 msm_routing_put_audio_mixer),
4722};
4723
4724static const struct snd_kcontrol_new slimbus_6_rx_mixer_controls[] = {
4725 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4726 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4727 msm_routing_put_audio_mixer),
4728 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4729 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4730 msm_routing_put_audio_mixer),
4731 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4732 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4733 msm_routing_put_audio_mixer),
4734 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4735 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4736 msm_routing_put_audio_mixer),
4737 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4738 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4739 msm_routing_put_audio_mixer),
4740 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4741 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4742 msm_routing_put_audio_mixer),
4743 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4744 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4745 msm_routing_put_audio_mixer),
4746 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4747 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4748 msm_routing_put_audio_mixer),
4749 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4750 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4751 msm_routing_put_audio_mixer),
4752 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4753 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4754 msm_routing_put_audio_mixer),
4755 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4756 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4757 msm_routing_put_audio_mixer),
4758 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4759 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4760 msm_routing_put_audio_mixer),
4761 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4762 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4763 msm_routing_put_audio_mixer),
4764 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4765 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4766 msm_routing_put_audio_mixer),
4767 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4768 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4769 msm_routing_put_audio_mixer),
4770 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_6_RX,
4771 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4772 msm_routing_put_audio_mixer),
4773};
4774
4775static const struct snd_kcontrol_new slimbus_7_rx_mixer_controls[] = {
4776 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4777 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4778 msm_routing_put_audio_mixer),
4779 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4780 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4781 msm_routing_put_audio_mixer),
4782 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4783 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4784 msm_routing_put_audio_mixer),
4785 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4786 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4787 msm_routing_put_audio_mixer),
4788 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4789 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4790 msm_routing_put_audio_mixer),
4791 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4792 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4793 msm_routing_put_audio_mixer),
4794 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4795 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4796 msm_routing_put_audio_mixer),
4797 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4798 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4799 msm_routing_put_audio_mixer),
4800 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4801 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4802 msm_routing_put_audio_mixer),
4803 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4804 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4805 msm_routing_put_audio_mixer),
4806 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4807 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4808 msm_routing_put_audio_mixer),
4809 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4810 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4811 msm_routing_put_audio_mixer),
4812 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4813 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4814 msm_routing_put_audio_mixer),
4815 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4816 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4817 msm_routing_put_audio_mixer),
4818 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4819 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4820 msm_routing_put_audio_mixer),
4821 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SLIMBUS_7_RX,
4822 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4823 msm_routing_put_audio_mixer),
4824};
4825
4826static const struct snd_kcontrol_new usb_audio_rx_mixer_controls[] = {
4827 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_USB_RX,
4828 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4829 msm_routing_put_audio_mixer),
4830 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_USB_RX,
4831 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4832 msm_routing_put_audio_mixer),
4833 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_USB_RX,
4834 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4835 msm_routing_put_audio_mixer),
4836 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_USB_RX,
4837 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4838 msm_routing_put_audio_mixer),
4839 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_USB_RX,
4840 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4841 msm_routing_put_audio_mixer),
4842 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_USB_RX,
4843 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4844 msm_routing_put_audio_mixer),
4845 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_USB_RX,
4846 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4847 msm_routing_put_audio_mixer),
4848 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_USB_RX,
4849 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4850 msm_routing_put_audio_mixer),
4851 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_USB_RX,
4852 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4853 msm_routing_put_audio_mixer),
4854 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_USB_RX,
4855 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4856 msm_routing_put_audio_mixer),
4857 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_USB_RX,
4858 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4859 msm_routing_put_audio_mixer),
4860 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_USB_RX,
4861 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4862 msm_routing_put_audio_mixer),
4863 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_USB_RX,
4864 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4865 msm_routing_put_audio_mixer),
4866 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_USB_RX,
4867 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4868 msm_routing_put_audio_mixer),
4869 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_USB_RX,
4870 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4871 msm_routing_put_audio_mixer),
4872 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_USB_RX,
4873 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4874 msm_routing_put_audio_mixer),
4875};
4876
4877static const struct snd_kcontrol_new int_bt_sco_rx_mixer_controls[] = {
4878 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4879 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4880 msm_routing_put_audio_mixer),
4881 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4882 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4883 msm_routing_put_audio_mixer),
4884 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4885 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4886 msm_routing_put_audio_mixer),
4887 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4888 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4889 msm_routing_put_audio_mixer),
4890 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4891 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4892 msm_routing_put_audio_mixer),
4893 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4894 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4895 msm_routing_put_audio_mixer),
4896 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4897 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4898 msm_routing_put_audio_mixer),
4899 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4900 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4901 msm_routing_put_audio_mixer),
4902 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4903 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4904 msm_routing_put_audio_mixer),
4905 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4906 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4907 msm_routing_put_audio_mixer),
4908 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4909 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4910 msm_routing_put_audio_mixer),
4911 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4912 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4913 msm_routing_put_audio_mixer),
4914 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4915 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4916 msm_routing_put_audio_mixer),
4917 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4918 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4919 msm_routing_put_audio_mixer),
4920 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4921 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4922 msm_routing_put_audio_mixer),
4923 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4924 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4925 msm_routing_put_audio_mixer),
4926 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4927 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
4928 msm_routing_put_audio_mixer),
4929 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4930 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
4931 msm_routing_put_audio_mixer),
4932 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_INT_BT_SCO_RX,
4933 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
4934 msm_routing_put_audio_mixer),
4935};
4936
4937static const struct snd_kcontrol_new int_bt_a2dp_rx_mixer_controls[] = {
4938 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4939 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4940 msm_routing_put_audio_mixer),
4941 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4942 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4943 msm_routing_put_audio_mixer),
4944 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4945 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4946 msm_routing_put_audio_mixer),
4947 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4948 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
4949 msm_routing_put_audio_mixer),
4950 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4951 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
4952 msm_routing_put_audio_mixer),
4953 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4954 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
4955 msm_routing_put_audio_mixer),
4956 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4957 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
4958 msm_routing_put_audio_mixer),
4959 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4960 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
4961 msm_routing_put_audio_mixer),
4962 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4963 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
4964 msm_routing_put_audio_mixer),
4965 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4966 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
4967 msm_routing_put_audio_mixer),
4968 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4969 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
4970 msm_routing_put_audio_mixer),
4971 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4972 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
4973 msm_routing_put_audio_mixer),
4974 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4975 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
4976 msm_routing_put_audio_mixer),
4977 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4978 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
4979 msm_routing_put_audio_mixer),
4980 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4981 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
4982 msm_routing_put_audio_mixer),
4983 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_BT_A2DP_RX,
4984 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
4985 msm_routing_put_audio_mixer),
4986};
4987
4988static const struct snd_kcontrol_new int_fm_rx_mixer_controls[] = {
4989 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT_FM_RX,
4990 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
4991 msm_routing_put_audio_mixer),
4992 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT_FM_RX,
4993 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
4994 msm_routing_put_audio_mixer),
4995 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT_FM_RX,
4996 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
4997 msm_routing_put_audio_mixer),
4998 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT_FM_RX,
4999 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5000 msm_routing_put_audio_mixer),
5001 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT_FM_RX,
5002 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5003 msm_routing_put_audio_mixer),
5004 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT_FM_RX,
5005 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5006 msm_routing_put_audio_mixer),
5007 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT_FM_RX,
5008 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5009 msm_routing_put_audio_mixer),
5010 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT_FM_RX,
5011 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5012 msm_routing_put_audio_mixer),
5013 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT_FM_RX,
5014 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5015 msm_routing_put_audio_mixer),
5016 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT_FM_RX,
5017 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5018 msm_routing_put_audio_mixer),
5019 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT_FM_RX,
5020 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5021 msm_routing_put_audio_mixer),
5022 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT_FM_RX,
5023 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5024 msm_routing_put_audio_mixer),
5025 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT_FM_RX,
5026 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5027 msm_routing_put_audio_mixer),
5028 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT_FM_RX,
5029 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5030 msm_routing_put_audio_mixer),
5031 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT_FM_RX,
5032 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5033 msm_routing_put_audio_mixer),
5034 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT_FM_RX,
5035 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5036 msm_routing_put_audio_mixer),
5037 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_INT_FM_RX,
5038 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5039 msm_routing_put_audio_mixer),
5040 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_INT_FM_RX,
5041 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5042 msm_routing_put_audio_mixer),
5043 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_INT_FM_RX,
5044 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5045 msm_routing_put_audio_mixer),
5046};
5047
5048static const struct snd_kcontrol_new afe_pcm_rx_mixer_controls[] = {
5049 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_AFE_PCM_RX,
5050 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5051 msm_routing_put_audio_mixer),
5052 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_AFE_PCM_RX,
5053 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5054 msm_routing_put_audio_mixer),
5055 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_AFE_PCM_RX,
5056 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5057 msm_routing_put_audio_mixer),
5058 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_AFE_PCM_RX,
5059 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5060 msm_routing_put_audio_mixer),
5061 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_AFE_PCM_RX,
5062 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5063 msm_routing_put_audio_mixer),
5064 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_AFE_PCM_RX,
5065 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5066 msm_routing_put_audio_mixer),
5067 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_AFE_PCM_RX,
5068 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5069 msm_routing_put_audio_mixer),
5070 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_AFE_PCM_RX,
5071 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5072 msm_routing_put_audio_mixer),
5073 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_AFE_PCM_RX,
5074 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5075 msm_routing_put_audio_mixer),
5076 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_AFE_PCM_RX,
5077 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5078 msm_routing_put_audio_mixer),
5079 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_AFE_PCM_RX,
5080 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5081 msm_routing_put_audio_mixer),
5082 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_AFE_PCM_RX,
5083 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5084 msm_routing_put_audio_mixer),
5085 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_AFE_PCM_RX,
5086 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5087 msm_routing_put_audio_mixer),
5088 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_AFE_PCM_RX,
5089 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5090 msm_routing_put_audio_mixer),
5091 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_AFE_PCM_RX,
5092 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5093 msm_routing_put_audio_mixer),
5094 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_AFE_PCM_RX,
5095 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5096 msm_routing_put_audio_mixer),
5097 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_AFE_PCM_RX,
5098 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5099 msm_routing_put_audio_mixer),
5100 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_AFE_PCM_RX,
5101 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5102 msm_routing_put_audio_mixer),
5103 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_AFE_PCM_RX,
5104 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5105 msm_routing_put_audio_mixer),
5106};
5107
5108static const struct snd_kcontrol_new auxpcm_rx_mixer_controls[] = {
5109 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_AUXPCM_RX,
5110 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5111 msm_routing_put_audio_mixer),
5112 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_AUXPCM_RX,
5113 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5114 msm_routing_put_audio_mixer),
5115 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_AUXPCM_RX,
5116 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5117 msm_routing_put_audio_mixer),
5118 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_AUXPCM_RX,
5119 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5120 msm_routing_put_audio_mixer),
5121 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_AUXPCM_RX,
5122 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5123 msm_routing_put_audio_mixer),
5124 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_AUXPCM_RX,
5125 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5126 msm_routing_put_audio_mixer),
5127 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_AUXPCM_RX,
5128 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5129 msm_routing_put_audio_mixer),
5130 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_AUXPCM_RX,
5131 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5132 msm_routing_put_audio_mixer),
5133 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_AUXPCM_RX,
5134 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5135 msm_routing_put_audio_mixer),
5136 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_AUXPCM_RX,
5137 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5138 msm_routing_put_audio_mixer),
5139 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_AUXPCM_RX,
5140 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5141 msm_routing_put_audio_mixer),
5142 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_AUXPCM_RX,
5143 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5144 msm_routing_put_audio_mixer),
5145 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_AUXPCM_RX,
5146 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5147 msm_routing_put_audio_mixer),
5148 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_AUXPCM_RX,
5149 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5150 msm_routing_put_audio_mixer),
5151 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_AUXPCM_RX,
5152 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5153 msm_routing_put_audio_mixer),
5154 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_AUXPCM_RX,
5155 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5156 msm_routing_put_audio_mixer),
5157 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_AUXPCM_RX,
5158 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5159 msm_routing_put_audio_mixer),
5160 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_AUXPCM_RX,
5161 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5162 msm_routing_put_audio_mixer),
5163 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_AUXPCM_RX,
5164 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5165 msm_routing_put_audio_mixer),
5166};
5167
5168static const struct snd_kcontrol_new sec_auxpcm_rx_mixer_controls[] = {
5169 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5170 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5171 msm_routing_put_audio_mixer),
5172 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5173 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5174 msm_routing_put_audio_mixer),
5175 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5176 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5177 msm_routing_put_audio_mixer),
5178 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5179 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5180 msm_routing_put_audio_mixer),
5181 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5182 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5183 msm_routing_put_audio_mixer),
5184 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5185 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5186 msm_routing_put_audio_mixer),
5187 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5188 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5189 msm_routing_put_audio_mixer),
5190 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5191 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5192 msm_routing_put_audio_mixer),
5193 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5194 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5195 msm_routing_put_audio_mixer),
5196 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5197 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5198 msm_routing_put_audio_mixer),
5199 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5200 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5201 msm_routing_put_audio_mixer),
5202 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5203 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5204 msm_routing_put_audio_mixer),
5205 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5206 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5207 msm_routing_put_audio_mixer),
5208 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5209 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5210 msm_routing_put_audio_mixer),
5211 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5212 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5213 msm_routing_put_audio_mixer),
5214 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5215 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5216 msm_routing_put_audio_mixer),
5217 SOC_SINGLE_EXT("MultiMedia17", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5218 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
5219 msm_routing_put_audio_mixer),
5220 SOC_SINGLE_EXT("MultiMedia18", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5221 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
5222 msm_routing_put_audio_mixer),
5223 SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
5224 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
5225 msm_routing_put_audio_mixer),
5226};
5227
5228static const struct snd_kcontrol_new tert_auxpcm_rx_mixer_controls[] = {
5229 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5230 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5231 msm_routing_put_audio_mixer),
5232 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5233 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5234 msm_routing_put_audio_mixer),
5235 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5236 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5237 msm_routing_put_audio_mixer),
5238 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5239 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5240 msm_routing_put_audio_mixer),
5241 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5242 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5243 msm_routing_put_audio_mixer),
5244 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5245 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5246 msm_routing_put_audio_mixer),
5247 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5248 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5249 msm_routing_put_audio_mixer),
5250 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5251 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5252 msm_routing_put_audio_mixer),
5253 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5254 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5255 msm_routing_put_audio_mixer),
5256 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5257 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5258 msm_routing_put_audio_mixer),
5259 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5260 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5261 msm_routing_put_audio_mixer),
5262 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5263 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5264 msm_routing_put_audio_mixer),
5265 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5266 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5267 msm_routing_put_audio_mixer),
5268 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5269 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5270 msm_routing_put_audio_mixer),
5271 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5272 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5273 msm_routing_put_audio_mixer),
5274 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
5275 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5276 msm_routing_put_audio_mixer),
5277};
5278
5279static const struct snd_kcontrol_new quat_auxpcm_rx_mixer_controls[] = {
5280 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5281 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5282 msm_routing_put_audio_mixer),
5283 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5284 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5285 msm_routing_put_audio_mixer),
5286 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5287 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5288 msm_routing_put_audio_mixer),
5289 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5290 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5291 msm_routing_put_audio_mixer),
5292 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5293 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5294 msm_routing_put_audio_mixer),
5295 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5296 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5297 msm_routing_put_audio_mixer),
5298 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5299 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5300 msm_routing_put_audio_mixer),
5301 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5302 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5303 msm_routing_put_audio_mixer),
5304 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5305 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5306 msm_routing_put_audio_mixer),
5307 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5308 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5309 msm_routing_put_audio_mixer),
5310 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5311 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5312 msm_routing_put_audio_mixer),
5313 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5314 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5315 msm_routing_put_audio_mixer),
5316 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5317 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5318 msm_routing_put_audio_mixer),
5319 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5320 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5321 msm_routing_put_audio_mixer),
5322 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5323 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5324 msm_routing_put_audio_mixer),
5325 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
5326 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5327 msm_routing_put_audio_mixer),
5328};
5329
5330static const struct snd_kcontrol_new pri_tdm_rx_0_mixer_controls[] = {
5331 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5332 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5333 msm_routing_put_audio_mixer),
5334 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5335 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5336 msm_routing_put_audio_mixer),
5337 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5338 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5339 msm_routing_put_audio_mixer),
5340 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5341 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5342 msm_routing_put_audio_mixer),
5343 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5344 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5345 msm_routing_put_audio_mixer),
5346 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5347 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5348 msm_routing_put_audio_mixer),
5349 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5350 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5351 msm_routing_put_audio_mixer),
5352 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5353 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5354 msm_routing_put_audio_mixer),
5355 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5356 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5357 msm_routing_put_audio_mixer),
5358 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5359 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5360 msm_routing_put_audio_mixer),
5361 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5362 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5363 msm_routing_put_audio_mixer),
5364 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5365 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5366 msm_routing_put_audio_mixer),
5367 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5368 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5369 msm_routing_put_audio_mixer),
5370 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5371 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5372 msm_routing_put_audio_mixer),
5373 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5374 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5375 msm_routing_put_audio_mixer),
5376 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_0,
5377 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5378 msm_routing_put_audio_mixer),
5379};
5380
5381static const struct snd_kcontrol_new pri_tdm_rx_1_mixer_controls[] = {
5382 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5383 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5384 msm_routing_put_audio_mixer),
5385 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5386 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5387 msm_routing_put_audio_mixer),
5388 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5389 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5390 msm_routing_put_audio_mixer),
5391 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5392 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5393 msm_routing_put_audio_mixer),
5394 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5395 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5396 msm_routing_put_audio_mixer),
5397 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5398 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5399 msm_routing_put_audio_mixer),
5400 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5401 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5402 msm_routing_put_audio_mixer),
5403 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5404 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5405 msm_routing_put_audio_mixer),
5406 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5407 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5408 msm_routing_put_audio_mixer),
5409 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5410 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5411 msm_routing_put_audio_mixer),
5412 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5413 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5414 msm_routing_put_audio_mixer),
5415 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5416 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5417 msm_routing_put_audio_mixer),
5418 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5419 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5420 msm_routing_put_audio_mixer),
5421 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5422 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5423 msm_routing_put_audio_mixer),
5424 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5425 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5426 msm_routing_put_audio_mixer),
5427 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_1,
5428 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5429 msm_routing_put_audio_mixer),
5430};
5431
5432static const struct snd_kcontrol_new pri_tdm_rx_2_mixer_controls[] = {
5433 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5434 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5435 msm_routing_put_audio_mixer),
5436 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5437 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5438 msm_routing_put_audio_mixer),
5439 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5440 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5441 msm_routing_put_audio_mixer),
5442 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5443 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5444 msm_routing_put_audio_mixer),
5445 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5446 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5447 msm_routing_put_audio_mixer),
5448 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5449 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5450 msm_routing_put_audio_mixer),
5451 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5452 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5453 msm_routing_put_audio_mixer),
5454 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5455 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5456 msm_routing_put_audio_mixer),
5457 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5458 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5459 msm_routing_put_audio_mixer),
5460 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5461 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5462 msm_routing_put_audio_mixer),
5463 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5464 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5465 msm_routing_put_audio_mixer),
5466 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5467 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5468 msm_routing_put_audio_mixer),
5469 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5470 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5471 msm_routing_put_audio_mixer),
5472 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5473 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5474 msm_routing_put_audio_mixer),
5475 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5476 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5477 msm_routing_put_audio_mixer),
5478 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_2,
5479 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5480 msm_routing_put_audio_mixer),
5481};
5482
5483static const struct snd_kcontrol_new pri_tdm_rx_3_mixer_controls[] = {
5484 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5485 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5486 msm_routing_put_audio_mixer),
5487 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5488 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5489 msm_routing_put_audio_mixer),
5490 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5491 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5492 msm_routing_put_audio_mixer),
5493 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5494 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5495 msm_routing_put_audio_mixer),
5496 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5497 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5498 msm_routing_put_audio_mixer),
5499 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5500 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5501 msm_routing_put_audio_mixer),
5502 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5503 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5504 msm_routing_put_audio_mixer),
5505 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5506 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5507 msm_routing_put_audio_mixer),
5508 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5509 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5510 msm_routing_put_audio_mixer),
5511 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5512 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5513 msm_routing_put_audio_mixer),
5514 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5515 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5516 msm_routing_put_audio_mixer),
5517 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5518 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5519 msm_routing_put_audio_mixer),
5520 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5521 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5522 msm_routing_put_audio_mixer),
5523 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5524 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5525 msm_routing_put_audio_mixer),
5526 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5527 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5528 msm_routing_put_audio_mixer),
5529 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_RX_3,
5530 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5531 msm_routing_put_audio_mixer),
5532};
5533
5534static const struct snd_kcontrol_new pri_tdm_tx_0_mixer_controls[] = {
5535 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5536 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5537 msm_routing_put_audio_mixer),
5538 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5539 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5540 msm_routing_put_audio_mixer),
5541 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5542 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5543 msm_routing_put_audio_mixer),
5544 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5545 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5546 msm_routing_put_audio_mixer),
5547 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5548 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5549 msm_routing_put_audio_mixer),
5550 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5551 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5552 msm_routing_put_audio_mixer),
5553 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5554 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5555 msm_routing_put_audio_mixer),
5556 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5557 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5558 msm_routing_put_audio_mixer),
5559 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5560 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5561 msm_routing_put_audio_mixer),
5562 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5563 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5564 msm_routing_put_audio_mixer),
5565 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5566 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5567 msm_routing_put_audio_mixer),
5568 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5569 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5570 msm_routing_put_audio_mixer),
5571 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5572 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5573 msm_routing_put_audio_mixer),
5574 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5575 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5576 msm_routing_put_audio_mixer),
5577 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5578 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5579 msm_routing_put_audio_mixer),
5580 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_PRI_TDM_TX_0,
5581 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5582 msm_routing_put_audio_mixer),
5583};
5584
5585static const struct snd_kcontrol_new sec_tdm_rx_0_mixer_controls[] = {
5586 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5587 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5588 msm_routing_put_audio_mixer),
5589 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5590 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5591 msm_routing_put_audio_mixer),
5592 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5593 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5594 msm_routing_put_audio_mixer),
5595 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5596 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5597 msm_routing_put_audio_mixer),
5598 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5599 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5600 msm_routing_put_audio_mixer),
5601 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5602 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5603 msm_routing_put_audio_mixer),
5604 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5605 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5606 msm_routing_put_audio_mixer),
5607 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5608 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5609 msm_routing_put_audio_mixer),
5610 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5611 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5612 msm_routing_put_audio_mixer),
5613 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5614 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5615 msm_routing_put_audio_mixer),
5616 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5617 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5618 msm_routing_put_audio_mixer),
5619 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5620 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5621 msm_routing_put_audio_mixer),
5622 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5623 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5624 msm_routing_put_audio_mixer),
5625 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5626 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5627 msm_routing_put_audio_mixer),
5628 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5629 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5630 msm_routing_put_audio_mixer),
5631 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_0,
5632 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5633 msm_routing_put_audio_mixer),
5634};
5635
5636static const struct snd_kcontrol_new sec_tdm_rx_1_mixer_controls[] = {
5637 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5638 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5639 msm_routing_put_audio_mixer),
5640 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5641 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5642 msm_routing_put_audio_mixer),
5643 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5644 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5645 msm_routing_put_audio_mixer),
5646 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5647 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5648 msm_routing_put_audio_mixer),
5649 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5650 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5651 msm_routing_put_audio_mixer),
5652 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5653 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5654 msm_routing_put_audio_mixer),
5655 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5656 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5657 msm_routing_put_audio_mixer),
5658 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5659 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5660 msm_routing_put_audio_mixer),
5661 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5662 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5663 msm_routing_put_audio_mixer),
5664 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5665 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5666 msm_routing_put_audio_mixer),
5667 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5668 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5669 msm_routing_put_audio_mixer),
5670 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5671 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5672 msm_routing_put_audio_mixer),
5673 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5674 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5675 msm_routing_put_audio_mixer),
5676 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5677 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5678 msm_routing_put_audio_mixer),
5679 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5680 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5681 msm_routing_put_audio_mixer),
5682 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_1,
5683 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5684 msm_routing_put_audio_mixer),
5685};
5686
5687static const struct snd_kcontrol_new sec_tdm_rx_2_mixer_controls[] = {
5688 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5689 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5690 msm_routing_put_audio_mixer),
5691 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5692 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5693 msm_routing_put_audio_mixer),
5694 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5695 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5696 msm_routing_put_audio_mixer),
5697 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5698 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5699 msm_routing_put_audio_mixer),
5700 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5701 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5702 msm_routing_put_audio_mixer),
5703 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5704 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5705 msm_routing_put_audio_mixer),
5706 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5707 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5708 msm_routing_put_audio_mixer),
5709 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5710 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5711 msm_routing_put_audio_mixer),
5712 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5713 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5714 msm_routing_put_audio_mixer),
5715 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5716 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5717 msm_routing_put_audio_mixer),
5718 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5719 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5720 msm_routing_put_audio_mixer),
5721 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5722 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5723 msm_routing_put_audio_mixer),
5724 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5725 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5726 msm_routing_put_audio_mixer),
5727 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5728 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5729 msm_routing_put_audio_mixer),
5730 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5731 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5732 msm_routing_put_audio_mixer),
5733 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_2,
5734 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5735 msm_routing_put_audio_mixer),
5736};
5737
5738static const struct snd_kcontrol_new sec_tdm_rx_3_mixer_controls[] = {
5739 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5740 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5741 msm_routing_put_audio_mixer),
5742 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5743 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5744 msm_routing_put_audio_mixer),
5745 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5746 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5747 msm_routing_put_audio_mixer),
5748 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5749 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5750 msm_routing_put_audio_mixer),
5751 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5752 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5753 msm_routing_put_audio_mixer),
5754 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5755 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5756 msm_routing_put_audio_mixer),
5757 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5758 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5759 msm_routing_put_audio_mixer),
5760 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5761 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5762 msm_routing_put_audio_mixer),
5763 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5764 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5765 msm_routing_put_audio_mixer),
5766 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5767 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5768 msm_routing_put_audio_mixer),
5769 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5770 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5771 msm_routing_put_audio_mixer),
5772 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5773 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5774 msm_routing_put_audio_mixer),
5775 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5776 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5777 msm_routing_put_audio_mixer),
5778 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5779 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5780 msm_routing_put_audio_mixer),
5781 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5782 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5783 msm_routing_put_audio_mixer),
5784 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_RX_3,
5785 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5786 msm_routing_put_audio_mixer),
5787};
5788
5789static const struct snd_kcontrol_new sec_tdm_tx_0_mixer_controls[] = {
5790 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5791 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5792 msm_routing_put_audio_mixer),
5793 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5794 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5795 msm_routing_put_audio_mixer),
5796 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5797 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5798 msm_routing_put_audio_mixer),
5799 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5800 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5801 msm_routing_put_audio_mixer),
5802 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5803 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5804 msm_routing_put_audio_mixer),
5805 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5806 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5807 msm_routing_put_audio_mixer),
5808 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5809 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5810 msm_routing_put_audio_mixer),
5811 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5812 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5813 msm_routing_put_audio_mixer),
5814 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5815 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5816 msm_routing_put_audio_mixer),
5817 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5818 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5819 msm_routing_put_audio_mixer),
5820 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5821 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5822 msm_routing_put_audio_mixer),
5823 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5824 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5825 msm_routing_put_audio_mixer),
5826 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5827 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5828 msm_routing_put_audio_mixer),
5829 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5830 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5831 msm_routing_put_audio_mixer),
5832 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5833 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5834 msm_routing_put_audio_mixer),
5835 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_SEC_TDM_TX_0,
5836 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5837 msm_routing_put_audio_mixer),
5838};
5839
5840static const struct snd_kcontrol_new tert_tdm_rx_0_mixer_controls[] = {
5841 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5842 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5843 msm_routing_put_audio_mixer),
5844 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5845 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5846 msm_routing_put_audio_mixer),
5847 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5848 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5849 msm_routing_put_audio_mixer),
5850 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5851 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5852 msm_routing_put_audio_mixer),
5853 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5854 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5855 msm_routing_put_audio_mixer),
5856 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5857 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5858 msm_routing_put_audio_mixer),
5859 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5860 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5861 msm_routing_put_audio_mixer),
5862 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5863 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5864 msm_routing_put_audio_mixer),
5865 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5866 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5867 msm_routing_put_audio_mixer),
5868 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5869 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5870 msm_routing_put_audio_mixer),
5871 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5872 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5873 msm_routing_put_audio_mixer),
5874 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5875 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5876 msm_routing_put_audio_mixer),
5877 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5878 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5879 msm_routing_put_audio_mixer),
5880 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5881 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5882 msm_routing_put_audio_mixer),
5883 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5884 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5885 msm_routing_put_audio_mixer),
5886 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_0,
5887 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5888 msm_routing_put_audio_mixer),
5889};
5890
5891static const struct snd_kcontrol_new tert_tdm_tx_0_mixer_controls[] = {
5892 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5893 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5894 msm_routing_put_audio_mixer),
5895 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5896 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5897 msm_routing_put_audio_mixer),
5898 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5899 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5900 msm_routing_put_audio_mixer),
5901 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5902 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5903 msm_routing_put_audio_mixer),
5904 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5905 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5906 msm_routing_put_audio_mixer),
5907 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5908 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5909 msm_routing_put_audio_mixer),
5910 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5911 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5912 msm_routing_put_audio_mixer),
5913 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5914 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5915 msm_routing_put_audio_mixer),
5916 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5917 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5918 msm_routing_put_audio_mixer),
5919 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5920 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5921 msm_routing_put_audio_mixer),
5922 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5923 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5924 msm_routing_put_audio_mixer),
5925 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5926 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5927 msm_routing_put_audio_mixer),
5928 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5929 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5930 msm_routing_put_audio_mixer),
5931 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5932 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5933 msm_routing_put_audio_mixer),
5934 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5935 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5936 msm_routing_put_audio_mixer),
5937 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_TX_0,
5938 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5939 msm_routing_put_audio_mixer),
5940};
5941
5942static const struct snd_kcontrol_new tert_tdm_rx_1_mixer_controls[] = {
5943 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5944 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5945 msm_routing_put_audio_mixer),
5946 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5947 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5948 msm_routing_put_audio_mixer),
5949 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5950 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
5951 msm_routing_put_audio_mixer),
5952 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5953 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
5954 msm_routing_put_audio_mixer),
5955 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5956 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
5957 msm_routing_put_audio_mixer),
5958 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5959 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
5960 msm_routing_put_audio_mixer),
5961 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5962 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
5963 msm_routing_put_audio_mixer),
5964 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5965 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
5966 msm_routing_put_audio_mixer),
5967 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5968 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
5969 msm_routing_put_audio_mixer),
5970 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5971 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
5972 msm_routing_put_audio_mixer),
5973 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5974 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
5975 msm_routing_put_audio_mixer),
5976 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5977 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
5978 msm_routing_put_audio_mixer),
5979 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5980 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
5981 msm_routing_put_audio_mixer),
5982 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5983 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
5984 msm_routing_put_audio_mixer),
5985 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5986 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
5987 msm_routing_put_audio_mixer),
5988 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_1,
5989 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
5990 msm_routing_put_audio_mixer),
5991};
5992
5993static const struct snd_kcontrol_new tert_tdm_rx_2_mixer_controls[] = {
5994 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
5995 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
5996 msm_routing_put_audio_mixer),
5997 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
5998 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
5999 msm_routing_put_audio_mixer),
6000 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6001 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6002 msm_routing_put_audio_mixer),
6003 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6004 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6005 msm_routing_put_audio_mixer),
6006 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6007 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6008 msm_routing_put_audio_mixer),
6009 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6010 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6011 msm_routing_put_audio_mixer),
6012 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6013 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6014 msm_routing_put_audio_mixer),
6015 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6016 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6017 msm_routing_put_audio_mixer),
6018 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6019 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6020 msm_routing_put_audio_mixer),
6021 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6022 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6023 msm_routing_put_audio_mixer),
6024 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6025 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6026 msm_routing_put_audio_mixer),
6027 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6028 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6029 msm_routing_put_audio_mixer),
6030 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6031 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6032 msm_routing_put_audio_mixer),
6033 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6034 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6035 msm_routing_put_audio_mixer),
6036 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6037 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6038 msm_routing_put_audio_mixer),
6039 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_2,
6040 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6041 msm_routing_put_audio_mixer),
6042};
6043
6044static const struct snd_kcontrol_new tert_tdm_rx_3_mixer_controls[] = {
6045 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6046 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6047 msm_routing_put_audio_mixer),
6048 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6049 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6050 msm_routing_put_audio_mixer),
6051 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6052 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6053 msm_routing_put_audio_mixer),
6054 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6055 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6056 msm_routing_put_audio_mixer),
6057 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6058 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6059 msm_routing_put_audio_mixer),
6060 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6061 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6062 msm_routing_put_audio_mixer),
6063 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6064 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6065 msm_routing_put_audio_mixer),
6066 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6067 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6068 msm_routing_put_audio_mixer),
6069 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6070 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6071 msm_routing_put_audio_mixer),
6072 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6073 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6074 msm_routing_put_audio_mixer),
6075 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6076 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6077 msm_routing_put_audio_mixer),
6078 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6079 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6080 msm_routing_put_audio_mixer),
6081 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6082 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6083 msm_routing_put_audio_mixer),
6084 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6085 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6086 msm_routing_put_audio_mixer),
6087 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6088 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6089 msm_routing_put_audio_mixer),
6090 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_3,
6091 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6092 msm_routing_put_audio_mixer),
6093};
6094
6095static const struct snd_kcontrol_new tert_tdm_rx_4_mixer_controls[] = {
6096 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6097 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6098 msm_routing_put_audio_mixer),
6099 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6100 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6101 msm_routing_put_audio_mixer),
6102 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6103 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6104 msm_routing_put_audio_mixer),
6105 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6106 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6107 msm_routing_put_audio_mixer),
6108 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6109 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6110 msm_routing_put_audio_mixer),
6111 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6112 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6113 msm_routing_put_audio_mixer),
6114 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6115 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6116 msm_routing_put_audio_mixer),
6117 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6118 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6119 msm_routing_put_audio_mixer),
6120 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6121 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6122 msm_routing_put_audio_mixer),
6123 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6124 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6125 msm_routing_put_audio_mixer),
6126 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6127 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6128 msm_routing_put_audio_mixer),
6129 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6130 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6131 msm_routing_put_audio_mixer),
6132 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6133 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6134 msm_routing_put_audio_mixer),
6135 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6136 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6137 msm_routing_put_audio_mixer),
6138 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6139 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6140 msm_routing_put_audio_mixer),
6141 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_TERT_TDM_RX_4,
6142 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6143 msm_routing_put_audio_mixer),
6144};
6145
6146static const struct snd_kcontrol_new quat_tdm_rx_0_mixer_controls[] = {
6147 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6148 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6149 msm_routing_put_audio_mixer),
6150 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6151 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6152 msm_routing_put_audio_mixer),
6153 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6154 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6155 msm_routing_put_audio_mixer),
6156 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6157 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6158 msm_routing_put_audio_mixer),
6159 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6160 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6161 msm_routing_put_audio_mixer),
6162 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6163 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6164 msm_routing_put_audio_mixer),
6165 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6166 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6167 msm_routing_put_audio_mixer),
6168 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6169 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6170 msm_routing_put_audio_mixer),
6171 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6172 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6173 msm_routing_put_audio_mixer),
6174 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6175 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6176 msm_routing_put_audio_mixer),
6177 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6178 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6179 msm_routing_put_audio_mixer),
6180 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6181 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6182 msm_routing_put_audio_mixer),
6183 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6184 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6185 msm_routing_put_audio_mixer),
6186 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6187 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6188 msm_routing_put_audio_mixer),
6189 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6190 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6191 msm_routing_put_audio_mixer),
6192 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6193 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6194 msm_routing_put_audio_mixer),
6195 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
6196 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6197 msm_routing_put_audio_mixer),
6198};
6199
6200static const struct snd_kcontrol_new quat_tdm_tx_0_mixer_controls[] = {
6201 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6202 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6203 msm_routing_put_audio_mixer),
6204 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6205 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6206 msm_routing_put_audio_mixer),
6207 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6208 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6209 msm_routing_put_audio_mixer),
6210 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6211 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6212 msm_routing_put_audio_mixer),
6213 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6214 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6215 msm_routing_put_audio_mixer),
6216 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6217 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6218 msm_routing_put_audio_mixer),
6219 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6220 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6221 msm_routing_put_audio_mixer),
6222 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6223 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6224 msm_routing_put_audio_mixer),
6225 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6226 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6227 msm_routing_put_audio_mixer),
6228 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6229 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6230 msm_routing_put_audio_mixer),
6231 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6232 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6233 msm_routing_put_audio_mixer),
6234 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6235 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6236 msm_routing_put_audio_mixer),
6237 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6238 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6239 msm_routing_put_audio_mixer),
6240 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6241 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6242 msm_routing_put_audio_mixer),
6243 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6244 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6245 msm_routing_put_audio_mixer),
6246 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6247 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6248 msm_routing_put_audio_mixer),
6249};
6250
6251static const struct snd_kcontrol_new quat_tdm_rx_1_mixer_controls[] = {
6252 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6253 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6254 msm_routing_put_audio_mixer),
6255 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6256 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6257 msm_routing_put_audio_mixer),
6258 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6259 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6260 msm_routing_put_audio_mixer),
6261 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6262 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6263 msm_routing_put_audio_mixer),
6264 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6265 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6266 msm_routing_put_audio_mixer),
6267 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6268 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6269 msm_routing_put_audio_mixer),
6270 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6271 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6272 msm_routing_put_audio_mixer),
6273 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6274 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6275 msm_routing_put_audio_mixer),
6276 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6277 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6278 msm_routing_put_audio_mixer),
6279 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6280 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6281 msm_routing_put_audio_mixer),
6282 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6283 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6284 msm_routing_put_audio_mixer),
6285 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6286 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6287 msm_routing_put_audio_mixer),
6288 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6289 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6290 msm_routing_put_audio_mixer),
6291 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6292 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6293 msm_routing_put_audio_mixer),
6294 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6295 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6296 msm_routing_put_audio_mixer),
6297 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6298 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6299 msm_routing_put_audio_mixer),
6300 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
6301 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6302 msm_routing_put_audio_mixer),
6303};
6304
6305static const struct snd_kcontrol_new quat_tdm_rx_2_mixer_controls[] = {
6306 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6307 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6308 msm_routing_put_audio_mixer),
6309 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6310 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6311 msm_routing_put_audio_mixer),
6312 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6313 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6314 msm_routing_put_audio_mixer),
6315 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6316 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6317 msm_routing_put_audio_mixer),
6318 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6319 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6320 msm_routing_put_audio_mixer),
6321 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6322 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6323 msm_routing_put_audio_mixer),
6324 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6325 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6326 msm_routing_put_audio_mixer),
6327 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6328 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6329 msm_routing_put_audio_mixer),
6330 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6331 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6332 msm_routing_put_audio_mixer),
6333 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6334 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6335 msm_routing_put_audio_mixer),
6336 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6337 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6338 msm_routing_put_audio_mixer),
6339 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6340 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6341 msm_routing_put_audio_mixer),
6342 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6343 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6344 msm_routing_put_audio_mixer),
6345 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6346 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6347 msm_routing_put_audio_mixer),
6348 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6349 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6350 msm_routing_put_audio_mixer),
6351 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6352 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6353 msm_routing_put_audio_mixer),
6354 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
6355 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6356 msm_routing_put_audio_mixer),
6357};
6358
6359static const struct snd_kcontrol_new quat_tdm_rx_3_mixer_controls[] = {
6360 SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6361 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6362 msm_routing_put_audio_mixer),
6363 SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6364 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6365 msm_routing_put_audio_mixer),
6366 SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6367 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6368 msm_routing_put_audio_mixer),
6369 SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6370 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6371 msm_routing_put_audio_mixer),
6372 SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6373 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6374 msm_routing_put_audio_mixer),
6375 SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6376 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6377 msm_routing_put_audio_mixer),
6378 SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6379 MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
6380 msm_routing_put_audio_mixer),
6381 SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6382 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
6383 msm_routing_put_audio_mixer),
6384 SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6385 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
6386 msm_routing_put_audio_mixer),
6387 SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6388 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
6389 msm_routing_put_audio_mixer),
6390 SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6391 MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
6392 msm_routing_put_audio_mixer),
6393 SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6394 MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
6395 msm_routing_put_audio_mixer),
6396 SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6397 MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
6398 msm_routing_put_audio_mixer),
6399 SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6400 MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
6401 msm_routing_put_audio_mixer),
6402 SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6403 MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
6404 msm_routing_put_audio_mixer),
6405 SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6406 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
6407 msm_routing_put_audio_mixer),
6408 SOC_SINGLE_EXT("MultiMedia20", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
6409 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
6410 msm_routing_put_audio_mixer),
6411};
6412
6413static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
6414 SOC_SINGLE_EXT("PRI_TX", MSM_BACKEND_DAI_PRI_I2S_TX,
6415 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6416 msm_routing_put_audio_mixer),
6417 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6418 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6419 msm_routing_put_audio_mixer),
6420 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6421 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6422 msm_routing_put_audio_mixer),
6423 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6424 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6425 msm_routing_put_audio_mixer),
6426 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6427 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6428 msm_routing_put_audio_mixer),
6429 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6430 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6431 msm_routing_put_audio_mixer),
6432 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6433 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6434 msm_routing_put_audio_mixer),
6435 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6436 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6437 msm_routing_put_audio_mixer),
6438 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6439 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6440 msm_routing_put_audio_mixer),
6441 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6442 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6443 msm_routing_put_audio_mixer),
6444 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6445 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6446 msm_routing_put_audio_mixer),
6447 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6448 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6449 msm_routing_put_audio_mixer),
6450 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6451 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6452 msm_routing_put_audio_mixer),
6453 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6454 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6455 msm_routing_put_audio_mixer),
6456 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6457 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6458 msm_routing_put_audio_mixer),
6459 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6460 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6461 msm_routing_put_audio_mixer),
6462 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
6463 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6464 msm_routing_put_audio_mixer),
6465 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
6466 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6467 msm_routing_put_audio_mixer),
6468 SOC_SINGLE_EXT("SLIM_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
6469 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6470 msm_routing_put_audio_mixer),
6471 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
6472 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6473 msm_routing_put_audio_mixer),
6474 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX,
6475 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6476 msm_routing_put_audio_mixer),
6477 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6478 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6479 msm_routing_put_audio_mixer),
6480 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6487 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6488 msm_routing_put_audio_mixer),
6489 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6490 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6491 msm_routing_put_audio_mixer),
6492 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6499 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6500 msm_routing_put_audio_mixer),
6501 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6502 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6503 msm_routing_put_audio_mixer),
6504 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6511 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6512 msm_routing_put_audio_mixer),
6513 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6514 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6515 msm_routing_put_audio_mixer),
6516 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6523 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6524 msm_routing_put_audio_mixer),
6525 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
6526 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6527 msm_routing_put_audio_mixer),
6528 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6529 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6530 msm_routing_put_audio_mixer),
6531 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6532 MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
6533 msm_routing_put_audio_mixer),
6534};
6535
6536static const struct snd_kcontrol_new mmul2_mixer_controls[] = {
6537 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6538 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6539 msm_routing_put_audio_mixer),
6540 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6541 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6542 msm_routing_put_audio_mixer),
6543 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6544 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6545 msm_routing_put_audio_mixer),
6546 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6547 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6548 msm_routing_put_audio_mixer),
6549 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6550 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6551 msm_routing_put_audio_mixer),
6552 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6553 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6554 msm_routing_put_audio_mixer),
6555 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6556 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6557 msm_routing_put_audio_mixer),
6558 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6559 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6560 msm_routing_put_audio_mixer),
6561 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6562 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6563 msm_routing_put_audio_mixer),
6564 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
6565 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6566 msm_routing_put_audio_mixer),
6567 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
6568 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6569 msm_routing_put_audio_mixer),
6570 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX,
6571 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6572 msm_routing_put_audio_mixer),
6573 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6574 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6575 msm_routing_put_audio_mixer),
6576 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6583 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6584 msm_routing_put_audio_mixer),
6585 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6586 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6587 msm_routing_put_audio_mixer),
6588 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6595 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6596 msm_routing_put_audio_mixer),
6597 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6598 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6599 msm_routing_put_audio_mixer),
6600 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6607 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6608 msm_routing_put_audio_mixer),
6609 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6610 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6611 msm_routing_put_audio_mixer),
6612 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6619 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6620 msm_routing_put_audio_mixer),
6621 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6622 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6623 msm_routing_put_audio_mixer),
6624 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6625 MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
6626 msm_routing_put_audio_mixer),
6627};
6628
6629static const struct snd_kcontrol_new mmul3_mixer_controls[] = {
6630 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6631 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6632 msm_routing_put_audio_mixer),
6633 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6634 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6635 msm_routing_put_audio_mixer),
6636 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6637 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6638 msm_routing_put_audio_mixer),
6639 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6640 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6641 msm_routing_put_audio_mixer),
6642 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6643 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6644 msm_routing_put_audio_mixer),
6645 SOC_SINGLE_EXT("AUX_PCM_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6646 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6647 msm_routing_put_audio_mixer),
6648 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6649 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6650 msm_routing_put_audio_mixer),
6651 SOC_SINGLE_EXT("TERT_AUX_PCM_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6652 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6653 msm_routing_put_audio_mixer),
6654 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6655 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6656 msm_routing_put_audio_mixer),
6657 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6658 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6659 msm_routing_put_audio_mixer),
6660 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6661 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6662 msm_routing_put_audio_mixer),
6663 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6664 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6665 msm_routing_put_audio_mixer),
6666 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6667 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6668 msm_routing_put_audio_mixer),
6669 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6670 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6671 msm_routing_put_audio_mixer),
6672 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6679 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6680 msm_routing_put_audio_mixer),
6681 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6682 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6683 msm_routing_put_audio_mixer),
6684 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6691 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6692 msm_routing_put_audio_mixer),
6693 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6694 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6695 msm_routing_put_audio_mixer),
6696 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6703 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6704 msm_routing_put_audio_mixer),
6705 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6706 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6707 msm_routing_put_audio_mixer),
6708 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6715 MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
6716 msm_routing_put_audio_mixer),
6717};
6718
6719static const struct snd_kcontrol_new mmul4_mixer_controls[] = {
6720 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6721 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6722 msm_routing_put_audio_mixer),
6723 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6724 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6725 msm_routing_put_audio_mixer),
6726 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6727 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6728 msm_routing_put_audio_mixer),
6729 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6730 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6731 msm_routing_put_audio_mixer),
6732 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6733 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6734 msm_routing_put_audio_mixer),
6735 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
6736 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6737 msm_routing_put_audio_mixer),
6738 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
6739 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6740 msm_routing_put_audio_mixer),
6741 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6742 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6743 msm_routing_put_audio_mixer),
6744 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6745 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6746 msm_routing_put_audio_mixer),
6747 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6754 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6755 msm_routing_put_audio_mixer),
6756 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6757 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6758 msm_routing_put_audio_mixer),
6759 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6766 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6767 msm_routing_put_audio_mixer),
6768 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
6769 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6770 msm_routing_put_audio_mixer),
6771 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6775 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6776 msm_routing_put_audio_mixer),
6777 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6778 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6779 msm_routing_put_audio_mixer),
6780 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6787 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6788 msm_routing_put_audio_mixer),
6789 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6790 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6791 msm_routing_put_audio_mixer),
6792 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6793 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6794 msm_routing_put_audio_mixer),
6795 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6796 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6797 msm_routing_put_audio_mixer),
6798 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6799 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6800 msm_routing_put_audio_mixer),
6801 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6802 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6803 msm_routing_put_audio_mixer),
6804 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6805 MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
6806 msm_routing_put_audio_mixer),
6807};
6808
6809static const struct snd_kcontrol_new mmul5_mixer_controls[] = {
6810 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6811 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6812 msm_routing_put_audio_mixer),
6813 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6814 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6815 msm_routing_put_audio_mixer),
6816 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
6817 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6818 msm_routing_put_audio_mixer),
6819 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
6820 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6821 msm_routing_put_audio_mixer),
6822 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
6823 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6824 msm_routing_put_audio_mixer),
6825 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6826 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6827 msm_routing_put_audio_mixer),
6828 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6829 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6830 msm_routing_put_audio_mixer),
6831 SOC_SINGLE_EXT("TERT_AUX_PCM_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6832 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6833 msm_routing_put_audio_mixer),
6834 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6835 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6836 msm_routing_put_audio_mixer),
6837 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6838 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6839 msm_routing_put_audio_mixer),
6840 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6841 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6842 msm_routing_put_audio_mixer),
6843 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6844 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6845 msm_routing_put_audio_mixer),
6846 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6847 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6848 msm_routing_put_audio_mixer),
6849 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6850 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6851 msm_routing_put_audio_mixer),
6852 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6859 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6860 msm_routing_put_audio_mixer),
6861 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6862 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6863 msm_routing_put_audio_mixer),
6864 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6871 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6872 msm_routing_put_audio_mixer),
6873 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6874 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6875 msm_routing_put_audio_mixer),
6876 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6883 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6884 msm_routing_put_audio_mixer),
6885 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6886 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6887 msm_routing_put_audio_mixer),
6888 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6895 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6896 msm_routing_put_audio_mixer),
6897 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6898 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6899 msm_routing_put_audio_mixer),
6900 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6901 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6902 msm_routing_put_audio_mixer),
6903 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
6904 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6905 msm_routing_put_audio_mixer),
6906 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
6907 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6908 msm_routing_put_audio_mixer),
6909 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
6910 MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
6911 msm_routing_put_audio_mixer),
6912};
6913
6914static const struct snd_kcontrol_new mmul6_mixer_controls[] = {
6915 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
6916 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6917 msm_routing_put_audio_mixer),
6918 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
6919 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6920 msm_routing_put_audio_mixer),
6921 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
6922 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6923 msm_routing_put_audio_mixer),
6924 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
6925 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6926 msm_routing_put_audio_mixer),
6927 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
6928 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6929 msm_routing_put_audio_mixer),
6930 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
6931 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6932 msm_routing_put_audio_mixer),
6933 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
6934 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6935 msm_routing_put_audio_mixer),
6936 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
6937 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6938 msm_routing_put_audio_mixer),
6939 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
6940 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6941 msm_routing_put_audio_mixer),
6942 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
6943 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6944 msm_routing_put_audio_mixer),
6945 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
6946 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6947 msm_routing_put_audio_mixer),
6948 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
6949 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6950 msm_routing_put_audio_mixer),
6951 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
6952 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6953 msm_routing_put_audio_mixer),
6954 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
6961 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6962 msm_routing_put_audio_mixer),
6963 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
6964 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6965 msm_routing_put_audio_mixer),
6966 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
6973 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6974 msm_routing_put_audio_mixer),
6975 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
6976 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6977 msm_routing_put_audio_mixer),
6978 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
6985 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6986 msm_routing_put_audio_mixer),
6987 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
6988 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6989 msm_routing_put_audio_mixer),
6990 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
6997 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
6998 msm_routing_put_audio_mixer),
6999 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7000 MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
7001 msm_routing_put_audio_mixer),
7002};
7003
7004static const struct snd_kcontrol_new mmul8_mixer_controls[] = {
7005 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7006 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7007 msm_routing_put_audio_mixer),
7008 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7009 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7010 msm_routing_put_audio_mixer),
7011 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7012 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7013 msm_routing_put_audio_mixer),
7014 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7015 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7016 msm_routing_put_audio_mixer),
7017 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
7018 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7019 msm_routing_put_audio_mixer),
7020 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
7021 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7022 msm_routing_put_audio_mixer),
7023 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7024 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7025 msm_routing_put_audio_mixer),
7026 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7027 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7028 msm_routing_put_audio_mixer),
7029 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7030 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7031 msm_routing_put_audio_mixer),
7032 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7033 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7034 msm_routing_put_audio_mixer),
7035 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7036 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7037 msm_routing_put_audio_mixer),
7038 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7039 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7040 msm_routing_put_audio_mixer),
7041 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7042 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7043 msm_routing_put_audio_mixer),
7044 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7045 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7046 msm_routing_put_audio_mixer),
7047 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
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_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
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_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7054 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7055 msm_routing_put_audio_mixer),
7056 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7057 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7058 msm_routing_put_audio_mixer),
7059 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
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_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
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_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7066 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7067 msm_routing_put_audio_mixer),
7068 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7069 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7070 msm_routing_put_audio_mixer),
7071 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7078 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7079 msm_routing_put_audio_mixer),
7080 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7081 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7082 msm_routing_put_audio_mixer),
7083 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7090 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7091 msm_routing_put_audio_mixer),
7092 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
7093 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7094 msm_routing_put_audio_mixer),
7095 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7096 MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
7097 msm_routing_put_audio_mixer),
7098};
7099
Asish Bhattacharya34504582017-08-08 12:55:01 +05307100static const struct snd_kcontrol_new mmul16_mixer_controls[] = {
7101 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7102 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7103 msm_routing_put_audio_mixer),
7104 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7105 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7106 msm_routing_put_audio_mixer),
7107 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7108 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7109 msm_routing_put_audio_mixer),
7110 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7111 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7112 msm_routing_put_audio_mixer),
7113 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
7114 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7115 msm_routing_put_audio_mixer),
7116 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
7117 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7118 msm_routing_put_audio_mixer),
7119 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7120 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7121 msm_routing_put_audio_mixer),
7122 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7123 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7124 msm_routing_put_audio_mixer),
7125 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7126 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7127 msm_routing_put_audio_mixer),
7128 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7129 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7130 msm_routing_put_audio_mixer),
7131 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7132 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7133 msm_routing_put_audio_mixer),
7134 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7135 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7136 msm_routing_put_audio_mixer),
7137 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7138 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7139 msm_routing_put_audio_mixer),
7140 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7141 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7142 msm_routing_put_audio_mixer),
7143 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
7144 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7145 msm_routing_put_audio_mixer),
7146 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
7147 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7148 msm_routing_put_audio_mixer),
7149 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7150 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7151 msm_routing_put_audio_mixer),
7152 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7153 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7154 msm_routing_put_audio_mixer),
7155 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
7156 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7157 msm_routing_put_audio_mixer),
7158 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
7159 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7160 msm_routing_put_audio_mixer),
7161 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7162 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7163 msm_routing_put_audio_mixer),
7164 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7165 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7166 msm_routing_put_audio_mixer),
7167 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7168 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7169 msm_routing_put_audio_mixer),
7170 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7171 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7172 msm_routing_put_audio_mixer),
7173 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7174 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7175 msm_routing_put_audio_mixer),
7176 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7177 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7178 msm_routing_put_audio_mixer),
7179 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7180 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7181 msm_routing_put_audio_mixer),
7182 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7183 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7184 msm_routing_put_audio_mixer),
7185 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7186 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7187 msm_routing_put_audio_mixer),
7188 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
7189 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7190 msm_routing_put_audio_mixer),
7191 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7192 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7193 msm_routing_put_audio_mixer),
7194 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
7195 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7196 msm_routing_put_audio_mixer),
7197 SOC_SINGLE_EXT("AUX_PCM_TX", MSM_BACKEND_DAI_AUXPCM_TX,
7198 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7199 msm_routing_put_audio_mixer),
7200 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
7201 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7202 msm_routing_put_audio_mixer),
7203 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
7204 MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
7205 msm_routing_put_audio_mixer),
7206};
7207
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05307208static const struct snd_kcontrol_new mmul9_mixer_controls[] = {
7209 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7210 MSM_FRONTEND_DAI_MULTIMEDIA9, 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_MULTIMEDIA9, 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_MULTIMEDIA9, 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_MULTIMEDIA9, 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_MULTIMEDIA9, 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_MULTIMEDIA9, 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_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7229 msm_routing_put_audio_mixer),
7230 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7231 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7232 msm_routing_put_audio_mixer),
7233 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7234 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7235 msm_routing_put_audio_mixer),
7236 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7237 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7238 msm_routing_put_audio_mixer),
7239 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7240 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7241 msm_routing_put_audio_mixer),
7242 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7243 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7244 msm_routing_put_audio_mixer),
7245 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7246 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7247 msm_routing_put_audio_mixer),
7248 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7249 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7250 msm_routing_put_audio_mixer),
7251 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7252 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7253 msm_routing_put_audio_mixer),
7254 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7255 MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
7256 msm_routing_put_audio_mixer),
7257};
7258
Laxminath Kasam38070be2017-08-17 18:21:59 +05307259static const struct snd_kcontrol_new mmul10_mixer_controls[] = {
7260 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7261 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7262 msm_routing_put_audio_mixer),
7263 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7264 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7265 msm_routing_put_audio_mixer),
7266 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7267 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7268 msm_routing_put_audio_mixer),
7269 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7270 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7271 msm_routing_put_audio_mixer),
7272 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7273 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7274 msm_routing_put_audio_mixer),
7275 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7276 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7277 msm_routing_put_audio_mixer),
7278 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7279 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7280 msm_routing_put_audio_mixer),
7281 SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX,
7282 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7283 msm_routing_put_audio_mixer),
Vikram Panduranga72863152017-09-06 15:47:35 -07007284 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
7285 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7286 msm_routing_put_audio_mixer),
Laxminath Kasam38070be2017-08-17 18:21:59 +05307287 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7288 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7289 msm_routing_put_audio_mixer),
7290 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7291 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7292 msm_routing_put_audio_mixer),
7293 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7294 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7295 msm_routing_put_audio_mixer),
7296 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7297 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7298 msm_routing_put_audio_mixer),
7299 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7300 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7301 msm_routing_put_audio_mixer),
7302 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7303 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7304 msm_routing_put_audio_mixer),
7305 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7306 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7307 msm_routing_put_audio_mixer),
7308 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7309 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7310 msm_routing_put_audio_mixer),
7311 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7312 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7313 msm_routing_put_audio_mixer),
Vikram Panduranga016c49f2017-09-11 15:15:56 -07007314 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
7315 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7316 msm_routing_put_audio_mixer),
7317 SOC_SINGLE_EXT("AUX_PCM_TX", MSM_BACKEND_DAI_AUXPCM_TX,
7318 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7319 msm_routing_put_audio_mixer),
7320 SOC_SINGLE_EXT("SEC_AUX_PCM_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
7321 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7322 msm_routing_put_audio_mixer),
7323 SOC_SINGLE_EXT("TERT_AUX_PCM_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
7324 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7325 msm_routing_put_audio_mixer),
7326 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
7327 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7328 msm_routing_put_audio_mixer),
7329 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7330 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7331 msm_routing_put_audio_mixer),
7332 SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
7333 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7334 msm_routing_put_audio_mixer),
7335 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
7336 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7337 msm_routing_put_audio_mixer),
Laxminath Kasam38070be2017-08-17 18:21:59 +05307338};
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05307339static const struct snd_kcontrol_new mmul17_mixer_controls[] = {
7340 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7341 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7342 msm_routing_put_audio_mixer),
7343 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7344 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7345 msm_routing_put_audio_mixer),
7346 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7347 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7348 msm_routing_put_audio_mixer),
7349 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7350 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7351 msm_routing_put_audio_mixer),
7352 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7353 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7354 msm_routing_put_audio_mixer),
7355 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7356 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7357 msm_routing_put_audio_mixer),
7358 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7359 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7360 msm_routing_put_audio_mixer),
7361};
7362
7363static const struct snd_kcontrol_new mmul18_mixer_controls[] = {
7364 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7365 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7366 msm_routing_put_audio_mixer),
7367 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7368 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7369 msm_routing_put_audio_mixer),
7370 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7371 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7372 msm_routing_put_audio_mixer),
7373 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7374 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7375 msm_routing_put_audio_mixer),
7376 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7377 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7378 msm_routing_put_audio_mixer),
7379 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7380 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7381 msm_routing_put_audio_mixer),
7382 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7383 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7384 msm_routing_put_audio_mixer),
7385 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7386 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7387 msm_routing_put_audio_mixer),
7388};
7389
7390static const struct snd_kcontrol_new mmul19_mixer_controls[] = {
7391 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7392 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7393 msm_routing_put_audio_mixer),
7394 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7395 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7396 msm_routing_put_audio_mixer),
7397 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7398 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7399 msm_routing_put_audio_mixer),
7400 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7401 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7402 msm_routing_put_audio_mixer),
7403 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7404 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7405 msm_routing_put_audio_mixer),
7406 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7407 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7408 msm_routing_put_audio_mixer),
7409 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7410 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7411 msm_routing_put_audio_mixer),
7412};
7413
7414static const struct snd_kcontrol_new mmul20_mixer_controls[] = {
7415 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7416 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7417 msm_routing_put_audio_mixer),
7418 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7419 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7420 msm_routing_put_audio_mixer),
7421 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7422 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7423 msm_routing_put_audio_mixer),
7424 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7425 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7426 msm_routing_put_audio_mixer),
7427 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7428 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7429 msm_routing_put_audio_mixer),
7430 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
7431 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7432 msm_routing_put_audio_mixer),
7433 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
7434 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7435 msm_routing_put_audio_mixer),
7436 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7437 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7438 msm_routing_put_audio_mixer),
7439 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7440 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7441 msm_routing_put_audio_mixer),
7442 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
7443 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7444 msm_routing_put_audio_mixer),
7445 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
7446 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7447 msm_routing_put_audio_mixer),
7448 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7449 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7450 msm_routing_put_audio_mixer),
7451 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7452 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7453 msm_routing_put_audio_mixer),
7454 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7455 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7456 msm_routing_put_audio_mixer),
7457 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7458 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7459 msm_routing_put_audio_mixer),
7460 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7461 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7462 msm_routing_put_audio_mixer),
7463 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7464 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7465 msm_routing_put_audio_mixer),
7466 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7467 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7468 msm_routing_put_audio_mixer),
7469 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7470 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7471 msm_routing_put_audio_mixer),
7472 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7473 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7474 msm_routing_put_audio_mixer),
7475};
7476
7477static const struct snd_kcontrol_new pri_rx_voice_mixer_controls[] = {
7478 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_I2S_RX,
7479 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7480 msm_routing_put_voice_mixer),
7481 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_I2S_RX,
7482 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7483 msm_routing_put_voice_mixer),
7484 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_I2S_RX,
7485 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7486 msm_routing_put_voice_mixer),
7487 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_I2S_RX,
7488 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7489 msm_routing_put_voice_mixer),
7490 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_I2S_RX,
7491 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7492 msm_routing_put_voice_mixer),
7493 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_I2S_RX,
7494 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7495 msm_routing_put_voice_mixer),
7496 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_I2S_RX,
7497 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7498 msm_routing_put_voice_mixer),
7499 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_I2S_RX,
7500 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7501 msm_routing_put_voice_mixer),
7502 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_I2S_RX,
7503 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7504 msm_routing_put_voice_mixer),
7505};
7506
7507static const struct snd_kcontrol_new sec_i2s_rx_voice_mixer_controls[] = {
7508 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_I2S_RX,
7509 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7510 msm_routing_put_voice_mixer),
7511 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_I2S_RX,
7512 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7513 msm_routing_put_voice_mixer),
7514 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_I2S_RX,
7515 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7516 msm_routing_put_voice_mixer),
7517 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_I2S_RX,
7518 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7519 msm_routing_put_voice_mixer),
7520 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_I2S_RX,
7521 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7522 msm_routing_put_voice_mixer),
7523 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_I2S_RX,
7524 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7525 msm_routing_put_voice_mixer),
7526 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_I2S_RX,
7527 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7528 msm_routing_put_voice_mixer),
7529};
7530
7531static const struct snd_kcontrol_new sec_mi2s_rx_voice_mixer_controls[] = {
7532 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7533 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7534 msm_routing_put_voice_mixer),
7535 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7536 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7537 msm_routing_put_voice_mixer),
7538 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7539 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7540 msm_routing_put_voice_mixer),
7541 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7542 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7543 msm_routing_put_voice_mixer),
7544 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7545 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7546 msm_routing_put_voice_mixer),
7547 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7548 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7549 msm_routing_put_voice_mixer),
7550 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7551 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7552 msm_routing_put_voice_mixer),
7553 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7554 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7555 msm_routing_put_voice_mixer),
7556 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7557 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7558 msm_routing_put_voice_mixer),
7559};
7560
7561static const struct snd_kcontrol_new slimbus_rx_voice_mixer_controls[] = {
7562 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7563 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7564 msm_routing_put_voice_mixer),
7565 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7566 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7567 msm_routing_put_voice_mixer),
7568 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7569 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7570 msm_routing_put_voice_mixer),
7571 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7572 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7573 msm_routing_put_voice_stub_mixer),
7574 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7575 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7576 msm_routing_put_voice_stub_mixer),
7577 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7578 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7579 msm_routing_put_voice_mixer),
7580 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7581 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7582 msm_routing_put_voice_stub_mixer),
7583 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7584 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7585 msm_routing_put_voice_mixer),
7586 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7587 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7588 msm_routing_put_voice_mixer),
7589 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7590 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7591 msm_routing_put_voice_mixer),
7592 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7593 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7594 msm_routing_put_voice_mixer),
7595 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7596 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7597 msm_routing_put_voice_mixer),
7598};
7599
7600static const struct snd_kcontrol_new slimbus_6_rx_voice_mixer_controls[] = {
7601 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7602 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7603 msm_routing_put_voice_mixer),
7604 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7605 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7606 msm_routing_put_voice_mixer),
7607 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7608 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7609 msm_routing_put_voice_mixer),
7610 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7611 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7612 msm_routing_put_voice_stub_mixer),
7613 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7614 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7615 msm_routing_put_voice_stub_mixer),
7616 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7617 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7618 msm_routing_put_voice_mixer),
7619 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7620 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7621 msm_routing_put_voice_stub_mixer),
7622 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7623 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7624 msm_routing_put_voice_mixer),
7625 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7626 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7627 msm_routing_put_voice_mixer),
7628 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7629 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7630 msm_routing_put_voice_mixer),
7631 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7632 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7633 msm_routing_put_voice_mixer),
7634 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7635 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7636 msm_routing_put_voice_mixer),
7637};
7638
7639static const struct snd_kcontrol_new usb_audio_rx_voice_mixer_controls[] = {
7640 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_USB_RX,
7641 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7642 msm_routing_put_voice_mixer),
7643 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_USB_RX,
7644 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7645 msm_routing_put_voice_mixer),
7646 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_USB_RX,
7647 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7648 msm_routing_put_voice_mixer),
7649 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_USB_RX,
7650 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7651 msm_routing_put_voice_stub_mixer),
7652 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_USB_RX,
7653 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7654 msm_routing_put_voice_stub_mixer),
7655 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_USB_RX,
7656 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7657 msm_routing_put_voice_mixer),
7658 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_USB_RX,
7659 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7660 msm_routing_put_voice_stub_mixer),
7661 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_USB_RX,
7662 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7663 msm_routing_put_voice_mixer),
7664 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_USB_RX,
7665 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7666 msm_routing_put_voice_mixer),
7667 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_USB_RX,
7668 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7669 msm_routing_put_voice_mixer),
7670 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_USB_RX,
7671 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7672 msm_routing_put_voice_mixer),
7673 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_USB_RX,
7674 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7675 msm_routing_put_voice_mixer),
7676};
7677
7678static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = {
7679 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7680 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7681 msm_routing_put_voice_mixer),
7682 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7683 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7684 msm_routing_put_voice_mixer),
7685 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7686 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7687 msm_routing_put_voice_mixer),
7688 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7689 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7690 msm_routing_put_voice_stub_mixer),
7691 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7692 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7693 msm_routing_put_voice_stub_mixer),
7694 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7695 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7696 msm_routing_put_voice_mixer),
7697 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7698 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7699 msm_routing_put_voice_mixer),
7700 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7701 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7702 msm_routing_put_voice_mixer),
7703 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7704 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7705 msm_routing_put_voice_mixer),
7706 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7707 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7708 msm_routing_put_voice_mixer),
7709 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7710 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7711 msm_routing_put_voice_mixer),
7712};
7713
7714static const struct snd_kcontrol_new mi2s_rx_voice_mixer_controls[] = {
7715 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_MI2S_RX,
7716 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7717 msm_routing_put_voice_mixer),
7718 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_MI2S_RX,
7719 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7720 msm_routing_put_voice_mixer),
7721 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_MI2S_RX,
7722 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7723 msm_routing_put_voice_mixer),
7724 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_MI2S_RX,
7725 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7726 msm_routing_put_voice_stub_mixer),
7727 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_MI2S_RX,
7728 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7729 msm_routing_put_voice_mixer),
7730 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_MI2S_RX,
7731 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7732 msm_routing_put_voice_mixer),
7733 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX,
7734 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7735 msm_routing_put_voice_mixer),
7736 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_MI2S_RX,
7737 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7738 msm_routing_put_voice_mixer),
7739 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_MI2S_RX,
7740 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7741 msm_routing_put_voice_mixer),
7742 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_MI2S_RX,
7743 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7744 msm_routing_put_voice_mixer),
7745};
7746
7747static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = {
7748 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_MI2S_RX,
7749 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7750 msm_routing_put_voice_mixer),
7751 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7752 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7753 msm_routing_put_voice_mixer),
7754 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_MI2S_RX,
7755 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7756 msm_routing_put_voice_mixer),
7757 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7758 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7759 msm_routing_put_voice_stub_mixer),
7760 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7761 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7762 msm_routing_put_voice_stub_mixer),
7763 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_MI2S_RX,
7764 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7765 msm_routing_put_voice_mixer),
7766 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7767 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7768 msm_routing_put_voice_mixer),
7769 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_RX,
7770 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7771 msm_routing_put_voice_mixer),
7772 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX,
7773 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7774 msm_routing_put_voice_mixer),
7775 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_MI2S_RX,
7776 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7777 msm_routing_put_voice_mixer),
7778 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_MI2S_RX,
7779 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7780 msm_routing_put_voice_mixer),
7781 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7782 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7783 msm_routing_put_voice_mixer),
7784};
7785
7786static const struct snd_kcontrol_new int0_mi2s_rx_voice_mixer_controls[] = {
7787 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT0_MI2S_RX,
7788 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7789 msm_routing_put_voice_mixer),
7790 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT0_MI2S_RX,
7791 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7792 msm_routing_put_voice_mixer),
7793 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT0_MI2S_RX,
7794 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7795 msm_routing_put_voice_mixer),
7796 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT0_MI2S_RX,
7797 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7798 msm_routing_put_voice_mixer),
7799 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT0_MI2S_RX,
7800 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7801 msm_routing_put_voice_mixer),
7802};
7803
7804static const struct snd_kcontrol_new int4_mi2s_rx_voice_mixer_controls[] = {
7805 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT4_MI2S_RX,
7806 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7807 msm_routing_put_voice_mixer),
7808 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT4_MI2S_RX,
7809 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7810 msm_routing_put_voice_mixer),
7811 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT4_MI2S_RX,
7812 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7813 msm_routing_put_voice_mixer),
7814 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT4_MI2S_RX,
7815 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7816 msm_routing_put_voice_mixer),
7817 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT4_MI2S_RX,
7818 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7819 msm_routing_put_voice_mixer),
7820};
7821
7822static const struct snd_kcontrol_new tert_mi2s_rx_voice_mixer_controls[] = {
7823 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7824 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7825 msm_routing_put_voice_mixer),
7826 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7827 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7828 msm_routing_put_voice_mixer),
7829 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7830 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7831 msm_routing_put_voice_mixer),
7832 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7833 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7834 msm_routing_put_voice_stub_mixer),
7835 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7836 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7837 msm_routing_put_voice_stub_mixer),
7838 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7839 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7840 msm_routing_put_voice_mixer),
7841 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7842 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7843 msm_routing_put_voice_mixer),
7844 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7845 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7846 msm_routing_put_voice_mixer),
7847 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7848 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7849 msm_routing_put_voice_mixer),
7850 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7851 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7852 msm_routing_put_voice_mixer),
7853 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7854 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7855 msm_routing_put_voice_mixer),
7856 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7857 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7858 msm_routing_put_voice_mixer),
7859};
7860
7861static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = {
7862 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7863 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7864 msm_routing_put_voice_mixer),
7865 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7866 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7867 msm_routing_put_voice_mixer),
7868 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7869 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7870 msm_routing_put_voice_mixer),
7871 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7872 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7873 msm_routing_put_voice_stub_mixer),
7874 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7875 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7876 msm_routing_put_voice_stub_mixer),
7877 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7878 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7879 msm_routing_put_voice_mixer),
7880 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7881 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7882 msm_routing_put_voice_mixer),
7883 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7884 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7885 msm_routing_put_voice_mixer),
7886 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7887 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7888 msm_routing_put_voice_mixer),
7889 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7890 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7891 msm_routing_put_voice_mixer),
7892 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7893 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7894 msm_routing_put_voice_mixer),
7895 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7896 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7897 msm_routing_put_voice_mixer),
7898};
7899
7900static const struct snd_kcontrol_new quin_mi2s_rx_voice_mixer_controls[] = {
7901 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7902 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7903 msm_routing_put_voice_mixer),
7904 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7905 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7906 msm_routing_put_voice_mixer),
7907 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7908 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7909 msm_routing_put_voice_mixer),
7910 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7911 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7912 msm_routing_put_voice_stub_mixer),
7913 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7914 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7915 msm_routing_put_voice_stub_mixer),
7916 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7917 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7918 msm_routing_put_voice_mixer),
7919 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7920 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7921 msm_routing_put_voice_mixer),
7922 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7923 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7924 msm_routing_put_voice_mixer),
7925 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7926 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7927 msm_routing_put_voice_mixer),
7928 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7929 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7930 msm_routing_put_voice_mixer),
7931 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7932 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7933 msm_routing_put_voice_mixer),
7934 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7935 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7936 msm_routing_put_voice_mixer),
7937};
7938
7939static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = {
7940 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AFE_PCM_RX,
7941 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7942 msm_routing_put_voice_mixer),
7943 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AFE_PCM_RX,
7944 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7945 msm_routing_put_voice_mixer),
7946 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AFE_PCM_RX,
7947 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7948 msm_routing_put_voice_mixer),
7949 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7950 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7951 msm_routing_put_voice_stub_mixer),
7952 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7953 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7954 msm_routing_put_voice_stub_mixer),
7955 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AFE_PCM_RX,
7956 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7957 msm_routing_put_voice_mixer),
7958 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7959 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7960 msm_routing_put_voice_stub_mixer),
7961 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AFE_PCM_RX,
7962 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7963 msm_routing_put_voice_mixer),
7964 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX,
7965 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7966 msm_routing_put_voice_mixer),
7967 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AFE_PCM_RX,
7968 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7969 msm_routing_put_voice_mixer),
7970 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AFE_PCM_RX,
7971 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7972 msm_routing_put_voice_mixer),
7973 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AFE_PCM_RX,
7974 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7975 msm_routing_put_voice_mixer),
7976};
7977
7978static const struct snd_kcontrol_new aux_pcm_rx_voice_mixer_controls[] = {
7979 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AUXPCM_RX,
7980 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7981 msm_routing_put_voice_mixer),
7982 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AUXPCM_RX,
7983 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7984 msm_routing_put_voice_mixer),
7985 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AUXPCM_RX,
7986 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7987 msm_routing_put_voice_mixer),
7988 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7989 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7990 msm_routing_put_voice_stub_mixer),
7991 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7992 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7993 msm_routing_put_voice_stub_mixer),
7994 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AUXPCM_RX,
7995 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7996 msm_routing_put_voice_mixer),
7997 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7998 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7999 msm_routing_put_voice_stub_mixer),
8000 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AUXPCM_RX,
8001 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8002 msm_routing_put_voice_mixer),
8003 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX,
8004 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8005 msm_routing_put_voice_mixer),
8006 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AUXPCM_RX,
8007 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8008 msm_routing_put_voice_mixer),
8009 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AUXPCM_RX,
8010 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8011 msm_routing_put_voice_mixer),
8012 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AUXPCM_RX,
8013 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8014 msm_routing_put_voice_mixer),
8015};
8016
8017static const struct snd_kcontrol_new sec_aux_pcm_rx_voice_mixer_controls[] = {
8018 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8019 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8020 msm_routing_put_voice_mixer),
8021 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8022 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8023 msm_routing_put_voice_mixer),
8024 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8025 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8026 msm_routing_put_voice_mixer),
8027 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8028 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8029 msm_routing_put_voice_stub_mixer),
8030 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8031 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8032 msm_routing_put_voice_mixer),
8033 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8034 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8035 msm_routing_put_voice_mixer),
8036 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8037 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8038 msm_routing_put_voice_mixer),
8039 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8040 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8041 msm_routing_put_voice_mixer),
8042 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8043 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8044 msm_routing_put_voice_mixer),
8045 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8046 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8047 msm_routing_put_voice_mixer),
8048};
8049
8050static const struct snd_kcontrol_new tert_aux_pcm_rx_voice_mixer_controls[] = {
8051 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8052 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8053 msm_routing_put_voice_mixer),
8054 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8055 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8056 msm_routing_put_voice_mixer),
8057 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8058 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8059 msm_routing_put_voice_mixer),
8060 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8061 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8062 msm_routing_put_voice_stub_mixer),
8063 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8064 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8065 msm_routing_put_voice_mixer),
8066 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8067 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8068 msm_routing_put_voice_mixer),
8069 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8070 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8071 msm_routing_put_voice_mixer),
8072 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8073 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8074 msm_routing_put_voice_mixer),
8075 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8076 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8077 msm_routing_put_voice_mixer),
8078 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8079 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8080 msm_routing_put_voice_mixer),
8081};
8082
8083static const struct snd_kcontrol_new quat_aux_pcm_rx_voice_mixer_controls[] = {
8084 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8085 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8086 msm_routing_put_voice_mixer),
8087 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8088 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8089 msm_routing_put_voice_mixer),
8090 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8091 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8092 msm_routing_put_voice_mixer),
8093 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8094 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8095 msm_routing_put_voice_stub_mixer),
8096 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8097 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8098 msm_routing_put_voice_mixer),
8099 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8100 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8101 msm_routing_put_voice_mixer),
8102 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8103 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8104 msm_routing_put_voice_mixer),
8105 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8106 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8107 msm_routing_put_voice_mixer),
8108 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8109 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8110 msm_routing_put_voice_mixer),
8111 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8112 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8113 msm_routing_put_voice_mixer),
8114};
8115
8116static const struct snd_kcontrol_new hdmi_rx_voice_mixer_controls[] = {
8117 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_HDMI_RX,
8118 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8119 msm_routing_put_voice_mixer),
8120 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_HDMI_RX,
8121 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8122 msm_routing_put_voice_mixer),
8123 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_HDMI_RX,
8124 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8125 msm_routing_put_voice_mixer),
8126 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_HDMI_RX,
8127 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8128 msm_routing_put_voice_mixer),
8129 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_HDMI_RX,
8130 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8131 msm_routing_put_voice_mixer),
8132 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX,
8133 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8134 msm_routing_put_voice_stub_mixer),
8135 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_HDMI_RX,
8136 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8137 msm_routing_put_voice_stub_mixer),
8138 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_HDMI_RX,
8139 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8140 msm_routing_put_voice_stub_mixer),
8141 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_HDMI_RX,
8142 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8143 msm_routing_put_voice_mixer),
8144 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_HDMI_RX,
8145 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8146 msm_routing_put_voice_mixer),
8147 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_HDMI_RX,
8148 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8149 msm_routing_put_voice_mixer),
8150 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_HDMI_RX,
8151 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8152 msm_routing_put_voice_mixer),
8153};
8154
8155static const struct snd_kcontrol_new slimbus_7_rx_voice_mixer_controls[] = {
8156 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8157 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8158 msm_routing_put_voice_mixer),
8159 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8160 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8161 msm_routing_put_voice_mixer),
8162 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8163 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8164 msm_routing_put_voice_mixer),
8165 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8166 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8167 msm_routing_put_voice_stub_mixer),
8168 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8169 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8170 msm_routing_put_voice_stub_mixer),
8171 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8172 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8173 msm_routing_put_voice_mixer),
8174 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8175 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8176 msm_routing_put_voice_stub_mixer),
8177 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8178 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8179 msm_routing_put_voice_mixer),
8180 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8181 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8182 msm_routing_put_voice_mixer),
8183 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8184 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8185 msm_routing_put_voice_mixer),
8186 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8187 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8188 msm_routing_put_voice_mixer),
8189 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8190 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8191 msm_routing_put_voice_mixer),
8192};
8193
8194static const struct snd_kcontrol_new slimbus_8_rx_voice_mixer_controls[] = {
8195 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8196 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8197 msm_routing_put_voice_mixer),
8198 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8199 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8200 msm_routing_put_voice_mixer),
8201 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8202 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8203 msm_routing_put_voice_mixer),
8204 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8205 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8206 msm_routing_put_voice_stub_mixer),
8207 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8208 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8209 msm_routing_put_voice_stub_mixer),
8210 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8211 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8212 msm_routing_put_voice_mixer),
8213 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8214 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8215 msm_routing_put_voice_stub_mixer),
8216 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8217 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8218 msm_routing_put_voice_mixer),
8219 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8220 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8221 msm_routing_put_voice_mixer),
8222 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8223 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8224 msm_routing_put_voice_mixer),
8225 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8226 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8227 msm_routing_put_voice_mixer),
8228 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8229 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8230 msm_routing_put_voice_mixer),
8231};
8232
8233static const struct snd_kcontrol_new quat_tdm_rx_2_voice_mixer_controls[] = {
8234 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
8235 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8236 msm_routing_put_voice_mixer),
8237};
8238
8239static const struct snd_kcontrol_new stub_rx_mixer_controls[] = {
8240 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8241 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8242 msm_routing_put_voice_stub_mixer),
8243 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8244 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8245 msm_routing_put_voice_stub_mixer),
8246 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8247 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8248 msm_routing_put_voice_stub_mixer),
8249};
8250
8251static const struct snd_kcontrol_new slimbus_1_rx_mixer_controls[] = {
8252 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8253 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8254 msm_routing_put_voice_stub_mixer),
8255 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8256 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8257 msm_routing_put_voice_stub_mixer),
8258 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8259 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8260 msm_routing_put_voice_stub_mixer),
8261};
8262
8263static const struct snd_kcontrol_new slimbus_3_rx_mixer_controls[] = {
8264 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8265 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8266 msm_routing_put_voice_stub_mixer),
8267 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8268 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8269 msm_routing_put_voice_stub_mixer),
8270 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8271 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8272 msm_routing_put_voice_stub_mixer),
8273};
8274
8275static const struct snd_kcontrol_new tx_voice_mixer_controls[] = {
8276 SOC_SINGLE_EXT("PRI_TX_Voice", MSM_BACKEND_DAI_PRI_I2S_TX,
8277 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8278 msm_routing_put_voice_mixer),
8279 SOC_SINGLE_EXT("MI2S_TX_Voice", MSM_BACKEND_DAI_MI2S_TX,
8280 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8281 msm_routing_put_voice_mixer),
8282 SOC_SINGLE_EXT("SLIM_0_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8283 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8284 msm_routing_put_voice_mixer),
8285 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice",
8286 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0,
8287 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8288 SOC_SINGLE_EXT("AFE_PCM_TX_Voice", MSM_BACKEND_DAI_AFE_PCM_TX,
8289 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8290 msm_routing_put_voice_mixer),
8291 SOC_SINGLE_EXT("AUX_PCM_TX_Voice", MSM_BACKEND_DAI_AUXPCM_TX,
8292 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8293 msm_routing_put_voice_mixer),
8294 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8295 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8296 msm_routing_put_voice_mixer),
8297 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8298 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8299 msm_routing_put_voice_mixer),
8300 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8301 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8302 msm_routing_put_voice_mixer),
8303 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice", MSM_BACKEND_DAI_PRI_MI2S_TX,
8304 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8305 msm_routing_put_voice_mixer),
8306 SOC_SINGLE_EXT("SEC_MI2S_TX_Voice", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
8307 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8308 msm_routing_put_voice_mixer),
8309 SOC_SINGLE_EXT("TERT_MI2S_TX_Voice", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8310 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8311 msm_routing_put_voice_mixer),
8312 SOC_SINGLE_EXT("SLIM_7_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8313 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8314 msm_routing_put_voice_mixer),
8315 SOC_SINGLE_EXT("SLIM_8_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8316 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8317 msm_routing_put_voice_mixer),
8318 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice", MSM_BACKEND_DAI_USB_TX,
8319 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8320 msm_routing_put_voice_mixer),
8321};
8322
8323static const struct snd_kcontrol_new tx_voice2_mixer_controls[] = {
8324 SOC_SINGLE_EXT("PRI_TX_Voice2", MSM_BACKEND_DAI_PRI_I2S_TX,
8325 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8326 msm_routing_put_voice_mixer),
8327 SOC_SINGLE_EXT("MI2S_TX_Voice2", MSM_BACKEND_DAI_MI2S_TX,
8328 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8329 msm_routing_put_voice_mixer),
8330 SOC_SINGLE_EXT("SLIM_0_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8331 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8332 msm_routing_put_voice_mixer),
8333 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice2",
8334 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICE2, 1, 0,
8335 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8336 SOC_SINGLE_EXT("AFE_PCM_TX_Voice2", MSM_BACKEND_DAI_AFE_PCM_TX,
8337 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8338 msm_routing_put_voice_mixer),
8339 SOC_SINGLE_EXT("AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_AUXPCM_TX,
8340 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8341 msm_routing_put_voice_mixer),
8342 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8343 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8344 msm_routing_put_voice_mixer),
8345 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8346 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8347 msm_routing_put_voice_mixer),
8348 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8349 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8350 msm_routing_put_voice_mixer),
8351 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice2", MSM_BACKEND_DAI_PRI_MI2S_TX,
8352 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8353 msm_routing_put_voice_mixer),
8354 SOC_SINGLE_EXT("TERT_MI2S_TX_Voice2", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8355 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8356 msm_routing_put_voice_mixer),
8357 SOC_SINGLE_EXT("SLIM_7_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8358 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8359 msm_routing_put_voice_mixer),
8360 SOC_SINGLE_EXT("SLIM_8_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8361 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8362 msm_routing_put_voice_mixer),
8363 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice2", MSM_BACKEND_DAI_USB_TX,
8364 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8365 msm_routing_put_voice_mixer),
8366};
8367
8368static const struct snd_kcontrol_new tx_volte_mixer_controls[] = {
8369 SOC_SINGLE_EXT("PRI_TX_VoLTE", MSM_BACKEND_DAI_PRI_I2S_TX,
8370 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8371 msm_routing_put_voice_mixer),
8372 SOC_SINGLE_EXT("SLIM_0_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8373 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8374 msm_routing_put_voice_mixer),
8375 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoLTE",
8376 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOLTE, 1, 0,
8377 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8378 SOC_SINGLE_EXT("AFE_PCM_TX_VoLTE", MSM_BACKEND_DAI_AFE_PCM_TX,
8379 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8380 msm_routing_put_voice_mixer),
8381 SOC_SINGLE_EXT("AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_AUXPCM_TX,
8382 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8383 msm_routing_put_voice_mixer),
8384 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8385 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8386 msm_routing_put_voice_mixer),
8387 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8388 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8389 msm_routing_put_voice_mixer),
8390 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8391 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8392 msm_routing_put_voice_mixer),
8393 SOC_SINGLE_EXT("MI2S_TX_VoLTE", MSM_BACKEND_DAI_MI2S_TX,
8394 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8395 msm_routing_put_voice_mixer),
8396 SOC_SINGLE_EXT("PRI_MI2S_TX_VoLTE", MSM_BACKEND_DAI_PRI_MI2S_TX,
8397 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8398 msm_routing_put_voice_mixer),
8399 SOC_SINGLE_EXT("TERT_MI2S_TX_VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8400 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8401 msm_routing_put_voice_mixer),
8402 SOC_SINGLE_EXT("SLIM_7_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8403 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8404 msm_routing_put_voice_mixer),
8405 SOC_SINGLE_EXT("SLIM_8_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8406 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8407 msm_routing_put_voice_mixer),
8408 SOC_SINGLE_EXT("USB_AUDIO_TX_VoLTE", MSM_BACKEND_DAI_USB_TX,
8409 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8410 msm_routing_put_voice_mixer),
8411};
8412
8413static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = {
8414 SOC_SINGLE_EXT("PRI_TX_VoWLAN", MSM_BACKEND_DAI_PRI_I2S_TX,
8415 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8416 msm_routing_put_voice_mixer),
8417 SOC_SINGLE_EXT("SLIM_0_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8418 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8419 msm_routing_put_voice_mixer),
8420 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoWLAN",
8421 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0,
8422 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8423 SOC_SINGLE_EXT("AFE_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AFE_PCM_TX,
8424 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8425 msm_routing_put_voice_mixer),
8426 SOC_SINGLE_EXT("AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AUXPCM_TX,
8427 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8428 msm_routing_put_voice_mixer),
8429 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8430 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8431 msm_routing_put_voice_mixer),
8432 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8433 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8434 msm_routing_put_voice_mixer),
8435 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8436 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8437 msm_routing_put_voice_mixer),
8438 SOC_SINGLE_EXT("MI2S_TX_VoWLAN", MSM_BACKEND_DAI_MI2S_TX,
8439 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8440 msm_routing_put_voice_mixer),
8441 SOC_SINGLE_EXT("PRI_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_TX,
8442 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8443 msm_routing_put_voice_mixer),
8444 SOC_SINGLE_EXT("TERT_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8445 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8446 msm_routing_put_voice_mixer),
8447 SOC_SINGLE_EXT("SLIM_7_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8448 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8449 msm_routing_put_voice_mixer),
8450 SOC_SINGLE_EXT("SLIM_8_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8451 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8452 msm_routing_put_voice_mixer),
8453 SOC_SINGLE_EXT("USB_AUDIO_TX_VoWLAN", MSM_BACKEND_DAI_USB_TX,
8454 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8455 msm_routing_put_voice_mixer),
8456};
8457
8458static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
8459 SOC_SINGLE_EXT("PRI_TX_MMode1", MSM_BACKEND_DAI_PRI_I2S_TX,
8460 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8461 msm_routing_put_voice_mixer),
8462 SOC_SINGLE_EXT("MI2S_TX_MMode1", MSM_BACKEND_DAI_MI2S_TX,
8463 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8464 msm_routing_put_voice_mixer),
8465 SOC_SINGLE_EXT("SLIM_0_TX_MMode1",
8466 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8467 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8468 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode1",
8469 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8470 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8471 SOC_SINGLE_EXT("AFE_PCM_TX_MMode1",
8472 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8473 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8474 SOC_SINGLE_EXT("AUX_PCM_TX_MMode1",
8475 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8476 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8477 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode1",
8478 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8479 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8480 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode1",
8481 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8482 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8483 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode1",
8484 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8485 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8486 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode1",
8487 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8488 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8489 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode1",
8490 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8491 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8492 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode1",
8493 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8494 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8495 SOC_SINGLE_EXT("SLIM_7_TX_MMode1",
8496 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8497 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8498 SOC_SINGLE_EXT("SLIM_8_TX_MMode1",
8499 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8500 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8501 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode1", MSM_BACKEND_DAI_USB_TX,
8502 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8503 msm_routing_put_voice_mixer),
8504 SOC_SINGLE_EXT("QUAT_TDM_TX_0_MMode1",
8505 MSM_BACKEND_DAI_QUAT_TDM_TX_0, MSM_FRONTEND_DAI_VOICEMMODE1,
8506 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8507};
8508
8509static const struct snd_kcontrol_new tx_voicemmode2_mixer_controls[] = {
8510 SOC_SINGLE_EXT("PRI_TX_MMode2", MSM_BACKEND_DAI_PRI_I2S_TX,
8511 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8512 msm_routing_put_voice_mixer),
8513 SOC_SINGLE_EXT("MI2S_TX_MMode2", MSM_BACKEND_DAI_MI2S_TX,
8514 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8515 msm_routing_put_voice_mixer),
8516 SOC_SINGLE_EXT("SLIM_0_TX_MMode2",
8517 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8518 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8519 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode2",
8520 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8521 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8522 SOC_SINGLE_EXT("AFE_PCM_TX_MMode2",
8523 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8524 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8525 SOC_SINGLE_EXT("AUX_PCM_TX_MMode2",
8526 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8527 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8528 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode2",
8529 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8530 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8531 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode2",
8532 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8533 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8534 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode2",
8535 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8536 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8537 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode2",
8538 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8539 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8540 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode2",
8541 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8542 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8543 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode2",
8544 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8545 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8546 SOC_SINGLE_EXT("SLIM_7_TX_MMode2",
8547 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8548 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8549 SOC_SINGLE_EXT("SLIM_8_TX_MMode2",
8550 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8551 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8552 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode2",
8553 MSM_BACKEND_DAI_USB_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8554 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8555};
8556
8557static const struct snd_kcontrol_new tx_voip_mixer_controls[] = {
8558 SOC_SINGLE_EXT("PRI_TX_Voip", MSM_BACKEND_DAI_PRI_I2S_TX,
8559 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8560 msm_routing_put_voice_mixer),
8561 SOC_SINGLE_EXT("MI2S_TX_Voip", MSM_BACKEND_DAI_MI2S_TX,
8562 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8563 msm_routing_put_voice_mixer),
8564 SOC_SINGLE_EXT("SLIM_0_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8565 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8566 msm_routing_put_voice_mixer),
8567 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voip", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8568 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8569 msm_routing_put_voice_mixer),
8570 SOC_SINGLE_EXT("AFE_PCM_TX_Voip", MSM_BACKEND_DAI_AFE_PCM_TX,
8571 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8572 msm_routing_put_voice_mixer),
8573 SOC_SINGLE_EXT("AUX_PCM_TX_Voip", MSM_BACKEND_DAI_AUXPCM_TX,
8574 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8575 msm_routing_put_voice_mixer),
8576 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8577 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8578 msm_routing_put_voice_mixer),
8579 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8580 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8581 msm_routing_put_voice_mixer),
8582 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8583 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8584 msm_routing_put_voice_mixer),
8585 SOC_SINGLE_EXT("PRI_MI2S_TX_Voip", MSM_BACKEND_DAI_PRI_MI2S_TX,
8586 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8587 msm_routing_put_voice_mixer),
8588 SOC_SINGLE_EXT("TERT_MI2S_TX_Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8589 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8590 msm_routing_put_voice_mixer),
8591 SOC_SINGLE_EXT("INT3_MI2S_TX_Voip", MSM_BACKEND_DAI_INT3_MI2S_TX,
8592 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8593 msm_routing_put_voice_mixer),
8594 SOC_SINGLE_EXT("SLIM_7_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8595 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8596 msm_routing_put_voice_mixer),
8597 SOC_SINGLE_EXT("SLIM_8_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8598 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8599 msm_routing_put_voice_mixer),
8600 SOC_SINGLE_EXT("USB_AUDIO_TX_Voip", MSM_BACKEND_DAI_USB_TX,
8601 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8602 msm_routing_put_voice_mixer),
8603};
8604
8605static const struct snd_kcontrol_new tx_voice_stub_mixer_controls[] = {
8606 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8607 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8608 msm_routing_put_voice_stub_mixer),
8609 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8610 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8611 msm_routing_put_voice_stub_mixer),
8612 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8613 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8614 msm_routing_put_voice_stub_mixer),
8615 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8616 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8617 msm_routing_put_voice_stub_mixer),
8618 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
8619 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8620 msm_routing_put_voice_stub_mixer),
8621 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8622 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8623 msm_routing_put_voice_stub_mixer),
8624 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8625 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8626 msm_routing_put_voice_stub_mixer),
8627 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
8628 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8629 msm_routing_put_voice_stub_mixer),
8630 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8631 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8632 msm_routing_put_voice_stub_mixer),
8633 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8634 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8635 msm_routing_put_voice_stub_mixer),
8636 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8637 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8638 msm_routing_put_voice_stub_mixer),
8639 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8640 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8641 msm_routing_put_voice_stub_mixer),
8642 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8643 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8644 msm_routing_put_voice_stub_mixer),
8645 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8646 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8647 msm_routing_put_voice_stub_mixer),
8648 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8649 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8650 msm_routing_put_voice_stub_mixer),
8651 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8652 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8653 msm_routing_put_voice_stub_mixer),
8654 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8655 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8656 msm_routing_put_voice_stub_mixer),
8657 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8658 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8659 msm_routing_put_voice_stub_mixer),
8660};
8661
8662static const struct snd_kcontrol_new tx_voice2_stub_mixer_controls[] = {
8663 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8664 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8665 msm_routing_put_voice_stub_mixer),
8666 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8667 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8668 msm_routing_put_voice_stub_mixer),
8669 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8670 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8671 msm_routing_put_voice_stub_mixer),
8672 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8673 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8674 msm_routing_put_voice_stub_mixer),
8675 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8676 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8677 msm_routing_put_voice_stub_mixer),
8678 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8679 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8680 msm_routing_put_voice_stub_mixer),
8681 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8682 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8683 msm_routing_put_voice_stub_mixer),
8684 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8685 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8686 msm_routing_put_voice_stub_mixer),
8687 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8688 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8689 msm_routing_put_voice_stub_mixer),
8690 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8691 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8692 msm_routing_put_voice_stub_mixer),
8693 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8694 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8695 msm_routing_put_voice_stub_mixer),
8696 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8697 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8698 msm_routing_put_voice_stub_mixer),
8699 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8700 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8701 msm_routing_put_voice_stub_mixer),
8702 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8703 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8704 msm_routing_put_voice_stub_mixer),
8705};
8706
8707static const struct snd_kcontrol_new tx_volte_stub_mixer_controls[] = {
8708 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8709 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8710 msm_routing_put_voice_stub_mixer),
8711 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8712 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8713 msm_routing_put_voice_stub_mixer),
8714 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8715 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8716 msm_routing_put_voice_stub_mixer),
8717 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8718 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8719 msm_routing_put_voice_stub_mixer),
8720 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8721 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8722 msm_routing_put_voice_stub_mixer),
8723 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8724 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8725 msm_routing_put_voice_stub_mixer),
8726 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8727 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8728 msm_routing_put_voice_stub_mixer),
8729 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8730 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8731 msm_routing_put_voice_stub_mixer),
8732 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8733 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8734 msm_routing_put_voice_stub_mixer),
8735 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
8736 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8737 msm_routing_put_voice_stub_mixer),
8738 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8739 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8740 msm_routing_put_voice_stub_mixer),
8741 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8742 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8743 msm_routing_put_voice_stub_mixer),
8744 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8745 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8746 msm_routing_put_voice_stub_mixer),
8747 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8748 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8749 msm_routing_put_voice_stub_mixer),
8750};
8751
8752static const struct snd_kcontrol_new tx_qchat_mixer_controls[] = {
8753 SOC_SINGLE_EXT("PRI_TX_QCHAT", MSM_BACKEND_DAI_PRI_I2S_TX,
8754 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8755 msm_routing_put_voice_mixer),
8756 SOC_SINGLE_EXT("SLIM_0_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8757 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8758 msm_routing_put_voice_mixer),
8759 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_QCHAT",
8760 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_QCHAT, 1, 0,
8761 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8762 SOC_SINGLE_EXT("AFE_PCM_TX_QCHAT", MSM_BACKEND_DAI_AFE_PCM_TX,
8763 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8764 msm_routing_put_voice_mixer),
8765 SOC_SINGLE_EXT("AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_AUXPCM_TX,
8766 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8767 msm_routing_put_voice_mixer),
8768 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8769 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8770 msm_routing_put_voice_mixer),
8771 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8772 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8773 msm_routing_put_voice_mixer),
8774 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8775 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8776 msm_routing_put_voice_mixer),
8777 SOC_SINGLE_EXT("MI2S_TX_QCHAT", MSM_BACKEND_DAI_MI2S_TX,
8778 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8779 msm_routing_put_voice_mixer),
8780 SOC_SINGLE_EXT("PRI_MI2S_TX_QCHAT", MSM_BACKEND_DAI_PRI_MI2S_TX,
8781 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8782 msm_routing_put_voice_mixer),
8783 SOC_SINGLE_EXT("TERT_MI2S_TX_QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8784 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8785 msm_routing_put_voice_mixer),
8786 SOC_SINGLE_EXT("INT3_MI2S_TX_QCHAT", MSM_BACKEND_DAI_INT3_MI2S_TX,
8787 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8788 msm_routing_put_voice_mixer),
8789 SOC_SINGLE_EXT("SLIM_7_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8790 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8791 msm_routing_put_voice_mixer),
8792 SOC_SINGLE_EXT("SLIM_8_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8793 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8794 msm_routing_put_voice_mixer),
8795 SOC_SINGLE_EXT("USB_AUDIO_TX_QCHAT", MSM_BACKEND_DAI_USB_TX,
8796 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8797 msm_routing_put_voice_mixer),
8798};
8799
8800static const struct snd_kcontrol_new int0_mi2s_rx_port_mixer_controls[] = {
8801 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8802 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8803 msm_routing_put_port_mixer),
8804 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8805 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8806 msm_routing_put_port_mixer),
8807 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8808 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8809 msm_routing_put_port_mixer),
8810 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8811 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8812 msm_routing_put_port_mixer),
8813 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8814 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8815 msm_routing_put_port_mixer),
8816 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8817 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8818 msm_routing_put_port_mixer),
8819 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8820 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8821 msm_routing_put_port_mixer),
8822 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8823 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8824 msm_routing_put_port_mixer),
8825 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8826 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8827 msm_routing_put_port_mixer),
8828};
8829
8830static const struct snd_kcontrol_new int4_mi2s_rx_port_mixer_controls[] = {
8831 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8832 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8833 msm_routing_put_port_mixer),
8834 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8835 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8836 msm_routing_put_port_mixer),
8837 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8838 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8839 msm_routing_put_port_mixer),
8840 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8841 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8842 msm_routing_put_port_mixer),
8843 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8844 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8845 msm_routing_put_port_mixer),
8846 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8847 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8848 msm_routing_put_port_mixer),
8849 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8850 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8851 msm_routing_put_port_mixer),
8852 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8853 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8854 msm_routing_put_port_mixer),
8855 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8856 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8857 msm_routing_put_port_mixer),
8858};
8859
8860static const struct snd_kcontrol_new sbus_0_rx_port_mixer_controls[] = {
8861 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8862 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8863 msm_routing_put_port_mixer),
8864 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8865 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8866 msm_routing_put_port_mixer),
8867 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8868 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8869 msm_routing_put_port_mixer),
8870 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8871 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8872 msm_routing_put_port_mixer),
8873 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8874 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8875 msm_routing_put_port_mixer),
8876 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8877 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8878 msm_routing_put_port_mixer),
8879 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8880 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8881 msm_routing_put_port_mixer),
8882 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8883 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8884 msm_routing_put_port_mixer),
8885 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8886 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8887 msm_routing_put_port_mixer),
8888 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8889 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8890 msm_routing_put_port_mixer),
8891 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8892 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8893 msm_routing_put_port_mixer),
8894 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8895 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8896 msm_routing_put_port_mixer),
8897 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8898 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8899 msm_routing_put_port_mixer),
8900 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8901 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8902 msm_routing_put_port_mixer),
8903 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8904 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8905 msm_routing_put_port_mixer),
8906 SOC_SINGLE_EXT("PRI_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8907 MSM_BACKEND_DAI_PRI_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8908 msm_routing_put_port_mixer),
8909 SOC_SINGLE_EXT("SEC_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8910 MSM_BACKEND_DAI_SECONDARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8911 msm_routing_put_port_mixer),
8912 SOC_SINGLE_EXT("TERT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8913 MSM_BACKEND_DAI_TERTIARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8914 msm_routing_put_port_mixer),
8915 SOC_SINGLE_EXT("QUAT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8916 MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8917 msm_routing_put_port_mixer),
8918};
8919
8920static const struct snd_kcontrol_new aux_pcm_rx_port_mixer_controls[] = {
8921 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8922 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8923 msm_routing_put_port_mixer),
8924 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8925 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8926 msm_routing_put_port_mixer),
8927 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8928 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8929 msm_routing_put_port_mixer),
8930 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8931 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8932 msm_routing_put_port_mixer),
8933 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_AUXPCM_RX,
8934 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0, msm_routing_get_port_mixer,
8935 msm_routing_put_port_mixer),
8936};
8937
8938static const struct snd_kcontrol_new sec_auxpcm_rx_port_mixer_controls[] = {
8939 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8940 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8941 msm_routing_put_port_mixer),
8942 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8943 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8944 msm_routing_put_port_mixer),
8945 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8946 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8947 msm_routing_put_port_mixer),
8948};
8949
8950static const struct snd_kcontrol_new tert_auxpcm_rx_port_mixer_controls[] = {
8951 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8952 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8953 msm_routing_put_port_mixer),
8954 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8955 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8956 msm_routing_put_port_mixer),
8957 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8958 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8959 msm_routing_put_port_mixer),
8960};
8961
8962static const struct snd_kcontrol_new quat_auxpcm_rx_port_mixer_controls[] = {
8963 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8964 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8965 msm_routing_put_port_mixer),
8966 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8967 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8968 msm_routing_put_port_mixer),
8969 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8970 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8971 msm_routing_put_port_mixer),
8972};
8973
8974static const struct snd_kcontrol_new sbus_1_rx_port_mixer_controls[] = {
8975 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8976 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8977 msm_routing_put_port_mixer),
8978 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8979 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0, msm_routing_get_port_mixer,
8980 msm_routing_put_port_mixer),
8981 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8982 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8983 msm_routing_put_port_mixer),
8984 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8985 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8986 msm_routing_put_port_mixer),
8987 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8988 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8989 msm_routing_put_port_mixer),
8990 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8991 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8992 msm_routing_put_port_mixer),
8993};
8994
8995static const struct snd_kcontrol_new sbus_3_rx_port_mixer_controls[] = {
8996 SOC_SINGLE_EXT("INTERNAL_BT_SCO_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8997 MSM_BACKEND_DAI_INT_BT_SCO_RX, 1, 0, msm_routing_get_port_mixer,
8998 msm_routing_put_port_mixer),
8999 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
9000 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9001 msm_routing_put_port_mixer),
9002 SOC_SINGLE_EXT("AFE_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
9003 MSM_BACKEND_DAI_AFE_PCM_RX, 1, 0, msm_routing_get_port_mixer,
9004 msm_routing_put_port_mixer),
9005 SOC_SINGLE_EXT("AUX_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
9006 MSM_BACKEND_DAI_AUXPCM_RX, 1, 0, msm_routing_get_port_mixer,
9007 msm_routing_put_port_mixer),
9008 SOC_SINGLE_EXT("SLIM_0_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
9009 MSM_BACKEND_DAI_SLIMBUS_0_RX, 1, 0, msm_routing_get_port_mixer,
9010 msm_routing_put_port_mixer),
9011};
9012
9013static const struct snd_kcontrol_new sbus_6_rx_port_mixer_controls[] = {
9014 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9015 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9016 msm_routing_put_port_mixer),
9017 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9018 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9019 msm_routing_put_port_mixer),
9020 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9021 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9022 msm_routing_put_port_mixer),
9023 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9024 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
9025 msm_routing_put_port_mixer),
9026 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9027 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9028 msm_routing_put_port_mixer),
9029 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9030 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9031 msm_routing_put_port_mixer),
9032 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9033 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9034 msm_routing_put_port_mixer),
9035 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9036 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9037 msm_routing_put_port_mixer),
9038 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9039 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9040 msm_routing_put_port_mixer),
9041 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9042 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9043 msm_routing_put_port_mixer),
9044 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9045 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9046 msm_routing_put_port_mixer),
9047 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9048 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
9049 msm_routing_put_port_mixer),
9050};
9051
9052static const struct snd_kcontrol_new bt_sco_rx_port_mixer_controls[] = {
9053 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
9054 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9055 msm_routing_put_port_mixer),
9056 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
9057 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9058 msm_routing_put_port_mixer),
9059};
9060
9061static const struct snd_kcontrol_new afe_pcm_rx_port_mixer_controls[] = {
9062 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
9063 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9064 msm_routing_put_port_mixer),
9065 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
9066 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9067 msm_routing_put_port_mixer),
9068};
9069
9070
9071static const struct snd_kcontrol_new hdmi_rx_port_mixer_controls[] = {
9072 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_HDMI_RX,
9073 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9074 msm_routing_put_port_mixer),
9075};
9076
9077static const struct snd_kcontrol_new display_port_rx_port_mixer_controls[] = {
9078 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
9079 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9080 msm_routing_put_port_mixer),
9081};
9082
9083static const struct snd_kcontrol_new sec_i2s_rx_port_mixer_controls[] = {
9084 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SEC_I2S_RX,
9085 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9086 msm_routing_put_port_mixer),
9087};
9088
9089static const struct snd_kcontrol_new mi2s_rx_port_mixer_controls[] = {
9090 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_MI2S_RX,
9091 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9092 msm_routing_put_port_mixer),
9093 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_RX,
9094 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9095 msm_routing_put_port_mixer),
9096};
9097
9098static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = {
9099 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9100 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9101 msm_routing_put_port_mixer),
9102 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9103 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9104 msm_routing_put_port_mixer),
9105 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9106 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9107 msm_routing_put_port_mixer),
9108 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9109 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9110 msm_routing_put_port_mixer),
9111 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9112 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
9113 msm_routing_put_port_mixer),
9114 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9115 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9116 msm_routing_put_port_mixer),
9117 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9118 MSM_BACKEND_DAI_QUINARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9119 msm_routing_put_port_mixer),
9120 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9121 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9122 msm_routing_put_port_mixer),
9123 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9124 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9125 msm_routing_put_port_mixer),
9126};
9127
9128static const struct snd_kcontrol_new usb_rx_port_mixer_controls[] = {
9129 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_RX,
9130 MSM_BACKEND_DAI_USB_TX, 1, 0, msm_routing_get_port_mixer,
9131 msm_routing_put_port_mixer),
9132};
9133
9134static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = {
9135 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9136 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9137 msm_routing_put_port_mixer),
9138 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9139 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9140 msm_routing_put_port_mixer),
9141 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9142 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9143 msm_routing_put_port_mixer),
9144 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9145 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9146 msm_routing_put_port_mixer),
9147 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9148 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9149 msm_routing_put_port_mixer),
9150 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9151 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9152 msm_routing_put_port_mixer),
9153 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9154 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9155 msm_routing_put_port_mixer),
9156 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9157 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9158 msm_routing_put_port_mixer),
9159};
9160
9161static const struct snd_kcontrol_new pri_tdm_rx_0_port_mixer_controls[] = {
9162 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9163 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9164 msm_routing_get_port_mixer,
9165 msm_routing_put_port_mixer),
9166 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9167 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9168 msm_routing_get_port_mixer,
9169 msm_routing_put_port_mixer),
9170 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9171 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9172 msm_routing_get_port_mixer,
9173 msm_routing_put_port_mixer),
9174 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9175 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9176 msm_routing_get_port_mixer,
9177 msm_routing_put_port_mixer),
9178 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9179 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9180 msm_routing_get_port_mixer,
9181 msm_routing_put_port_mixer),
9182 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9183 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9184 msm_routing_get_port_mixer,
9185 msm_routing_put_port_mixer),
9186 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9187 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9188 msm_routing_get_port_mixer,
9189 msm_routing_put_port_mixer),
9190 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9191 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9192 msm_routing_get_port_mixer,
9193 msm_routing_put_port_mixer),
9194 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9195 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9196 msm_routing_get_port_mixer,
9197 msm_routing_put_port_mixer),
9198 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9199 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9200 msm_routing_get_port_mixer,
9201 msm_routing_put_port_mixer),
9202 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9203 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9204 msm_routing_get_port_mixer,
9205 msm_routing_put_port_mixer),
9206 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9207 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9208 msm_routing_get_port_mixer,
9209 msm_routing_put_port_mixer),
9210 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9211 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9212 msm_routing_get_port_mixer,
9213 msm_routing_put_port_mixer),
9214 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9215 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9216 msm_routing_get_port_mixer,
9217 msm_routing_put_port_mixer),
9218 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9219 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9220 msm_routing_get_port_mixer,
9221 msm_routing_put_port_mixer),
9222 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9223 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9224 msm_routing_get_port_mixer,
9225 msm_routing_put_port_mixer),
9226};
9227
9228static const struct snd_kcontrol_new pri_tdm_rx_1_port_mixer_controls[] = {
9229 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9230 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9231 msm_routing_get_port_mixer,
9232 msm_routing_put_port_mixer),
9233 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9234 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9235 msm_routing_get_port_mixer,
9236 msm_routing_put_port_mixer),
9237 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9238 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9239 msm_routing_get_port_mixer,
9240 msm_routing_put_port_mixer),
9241 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9242 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9243 msm_routing_get_port_mixer,
9244 msm_routing_put_port_mixer),
9245 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9246 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9247 msm_routing_get_port_mixer,
9248 msm_routing_put_port_mixer),
9249 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9250 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9251 msm_routing_get_port_mixer,
9252 msm_routing_put_port_mixer),
9253 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9254 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9255 msm_routing_get_port_mixer,
9256 msm_routing_put_port_mixer),
9257 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9258 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9259 msm_routing_get_port_mixer,
9260 msm_routing_put_port_mixer),
9261 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9262 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9263 msm_routing_get_port_mixer,
9264 msm_routing_put_port_mixer),
9265 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9266 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9267 msm_routing_get_port_mixer,
9268 msm_routing_put_port_mixer),
9269 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9270 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9271 msm_routing_get_port_mixer,
9272 msm_routing_put_port_mixer),
9273 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9274 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9275 msm_routing_get_port_mixer,
9276 msm_routing_put_port_mixer),
9277 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9278 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9279 msm_routing_get_port_mixer,
9280 msm_routing_put_port_mixer),
9281 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9282 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9283 msm_routing_get_port_mixer,
9284 msm_routing_put_port_mixer),
9285 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9286 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9287 msm_routing_get_port_mixer,
9288 msm_routing_put_port_mixer),
9289 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9290 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9291 msm_routing_get_port_mixer,
9292 msm_routing_put_port_mixer),
9293};
9294
9295static const struct snd_kcontrol_new pri_tdm_rx_2_port_mixer_controls[] = {
9296 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9297 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9298 msm_routing_get_port_mixer,
9299 msm_routing_put_port_mixer),
9300 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9301 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9302 msm_routing_get_port_mixer,
9303 msm_routing_put_port_mixer),
9304 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9305 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9306 msm_routing_get_port_mixer,
9307 msm_routing_put_port_mixer),
9308 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9309 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9310 msm_routing_get_port_mixer,
9311 msm_routing_put_port_mixer),
9312 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9313 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9314 msm_routing_get_port_mixer,
9315 msm_routing_put_port_mixer),
9316 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9317 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9318 msm_routing_get_port_mixer,
9319 msm_routing_put_port_mixer),
9320 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9321 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9322 msm_routing_get_port_mixer,
9323 msm_routing_put_port_mixer),
9324 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9325 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9326 msm_routing_get_port_mixer,
9327 msm_routing_put_port_mixer),
9328 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9329 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9330 msm_routing_get_port_mixer,
9331 msm_routing_put_port_mixer),
9332 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9333 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9334 msm_routing_get_port_mixer,
9335 msm_routing_put_port_mixer),
9336 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9337 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9338 msm_routing_get_port_mixer,
9339 msm_routing_put_port_mixer),
9340 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9341 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9342 msm_routing_get_port_mixer,
9343 msm_routing_put_port_mixer),
9344 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9345 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9346 msm_routing_get_port_mixer,
9347 msm_routing_put_port_mixer),
9348 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9349 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9350 msm_routing_get_port_mixer,
9351 msm_routing_put_port_mixer),
9352 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9353 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9354 msm_routing_get_port_mixer,
9355 msm_routing_put_port_mixer),
9356 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9357 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9358 msm_routing_get_port_mixer,
9359 msm_routing_put_port_mixer),
9360};
9361
9362static const struct snd_kcontrol_new pri_tdm_rx_3_port_mixer_controls[] = {
9363 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9364 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9365 msm_routing_get_port_mixer,
9366 msm_routing_put_port_mixer),
9367 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9368 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9369 msm_routing_get_port_mixer,
9370 msm_routing_put_port_mixer),
9371 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9372 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9373 msm_routing_get_port_mixer,
9374 msm_routing_put_port_mixer),
9375 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9376 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9377 msm_routing_get_port_mixer,
9378 msm_routing_put_port_mixer),
9379 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9380 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9381 msm_routing_get_port_mixer,
9382 msm_routing_put_port_mixer),
9383 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9384 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9385 msm_routing_get_port_mixer,
9386 msm_routing_put_port_mixer),
9387 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9388 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9389 msm_routing_get_port_mixer,
9390 msm_routing_put_port_mixer),
9391 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9392 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9393 msm_routing_get_port_mixer,
9394 msm_routing_put_port_mixer),
9395 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9396 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9397 msm_routing_get_port_mixer,
9398 msm_routing_put_port_mixer),
9399 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9400 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9401 msm_routing_get_port_mixer,
9402 msm_routing_put_port_mixer),
9403 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9404 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9405 msm_routing_get_port_mixer,
9406 msm_routing_put_port_mixer),
9407 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9408 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9409 msm_routing_get_port_mixer,
9410 msm_routing_put_port_mixer),
9411 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9412 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9413 msm_routing_get_port_mixer,
9414 msm_routing_put_port_mixer),
9415 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9416 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9417 msm_routing_get_port_mixer,
9418 msm_routing_put_port_mixer),
9419 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9420 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9421 msm_routing_get_port_mixer,
9422 msm_routing_put_port_mixer),
9423 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9424 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9425 msm_routing_get_port_mixer,
9426 msm_routing_put_port_mixer),
9427};
9428
9429static const struct snd_kcontrol_new sec_tdm_rx_0_port_mixer_controls[] = {
9430 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9431 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9432 msm_routing_get_port_mixer,
9433 msm_routing_put_port_mixer),
9434 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9435 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9436 msm_routing_get_port_mixer,
9437 msm_routing_put_port_mixer),
9438 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9439 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9440 msm_routing_get_port_mixer,
9441 msm_routing_put_port_mixer),
9442 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9443 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9444 msm_routing_get_port_mixer,
9445 msm_routing_put_port_mixer),
9446 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9447 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9448 msm_routing_get_port_mixer,
9449 msm_routing_put_port_mixer),
9450 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9451 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9452 msm_routing_get_port_mixer,
9453 msm_routing_put_port_mixer),
9454 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9455 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9456 msm_routing_get_port_mixer,
9457 msm_routing_put_port_mixer),
9458 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9459 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9460 msm_routing_get_port_mixer,
9461 msm_routing_put_port_mixer),
9462 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9463 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9464 msm_routing_get_port_mixer,
9465 msm_routing_put_port_mixer),
9466 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9467 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9468 msm_routing_get_port_mixer,
9469 msm_routing_put_port_mixer),
9470 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9471 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9472 msm_routing_get_port_mixer,
9473 msm_routing_put_port_mixer),
9474 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9475 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9476 msm_routing_get_port_mixer,
9477 msm_routing_put_port_mixer),
9478 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9479 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9480 msm_routing_get_port_mixer,
9481 msm_routing_put_port_mixer),
9482 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9483 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9484 msm_routing_get_port_mixer,
9485 msm_routing_put_port_mixer),
9486 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9487 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9488 msm_routing_get_port_mixer,
9489 msm_routing_put_port_mixer),
9490 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9491 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9492 msm_routing_get_port_mixer,
9493 msm_routing_put_port_mixer),
9494};
9495
9496static const struct snd_kcontrol_new sec_tdm_rx_1_port_mixer_controls[] = {
9497 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9498 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9499 msm_routing_get_port_mixer,
9500 msm_routing_put_port_mixer),
9501 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9502 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9503 msm_routing_get_port_mixer,
9504 msm_routing_put_port_mixer),
9505 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9506 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9507 msm_routing_get_port_mixer,
9508 msm_routing_put_port_mixer),
9509 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9510 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9511 msm_routing_get_port_mixer,
9512 msm_routing_put_port_mixer),
9513 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9514 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9515 msm_routing_get_port_mixer,
9516 msm_routing_put_port_mixer),
9517 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9518 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9519 msm_routing_get_port_mixer,
9520 msm_routing_put_port_mixer),
9521 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9522 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9523 msm_routing_get_port_mixer,
9524 msm_routing_put_port_mixer),
9525 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9526 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9527 msm_routing_get_port_mixer,
9528 msm_routing_put_port_mixer),
9529 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9530 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9531 msm_routing_get_port_mixer,
9532 msm_routing_put_port_mixer),
9533 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9534 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9535 msm_routing_get_port_mixer,
9536 msm_routing_put_port_mixer),
9537 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9538 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9539 msm_routing_get_port_mixer,
9540 msm_routing_put_port_mixer),
9541 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9542 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9543 msm_routing_get_port_mixer,
9544 msm_routing_put_port_mixer),
9545 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9546 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9547 msm_routing_get_port_mixer,
9548 msm_routing_put_port_mixer),
9549 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9550 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9551 msm_routing_get_port_mixer,
9552 msm_routing_put_port_mixer),
9553 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9554 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9555 msm_routing_get_port_mixer,
9556 msm_routing_put_port_mixer),
9557 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9558 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9559 msm_routing_get_port_mixer,
9560 msm_routing_put_port_mixer),
9561};
9562
9563static const struct snd_kcontrol_new sec_tdm_rx_2_port_mixer_controls[] = {
9564 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9565 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9566 msm_routing_get_port_mixer,
9567 msm_routing_put_port_mixer),
9568 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9569 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9570 msm_routing_get_port_mixer,
9571 msm_routing_put_port_mixer),
9572 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9573 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9574 msm_routing_get_port_mixer,
9575 msm_routing_put_port_mixer),
9576 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9577 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9578 msm_routing_get_port_mixer,
9579 msm_routing_put_port_mixer),
9580 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9581 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9582 msm_routing_get_port_mixer,
9583 msm_routing_put_port_mixer),
9584 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9585 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9586 msm_routing_get_port_mixer,
9587 msm_routing_put_port_mixer),
9588 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9589 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9590 msm_routing_get_port_mixer,
9591 msm_routing_put_port_mixer),
9592 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9593 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9594 msm_routing_get_port_mixer,
9595 msm_routing_put_port_mixer),
9596 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9597 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9598 msm_routing_get_port_mixer,
9599 msm_routing_put_port_mixer),
9600 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9601 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9602 msm_routing_get_port_mixer,
9603 msm_routing_put_port_mixer),
9604 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9605 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9606 msm_routing_get_port_mixer,
9607 msm_routing_put_port_mixer),
9608 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9609 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9610 msm_routing_get_port_mixer,
9611 msm_routing_put_port_mixer),
9612 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9613 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9614 msm_routing_get_port_mixer,
9615 msm_routing_put_port_mixer),
9616 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9617 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9618 msm_routing_get_port_mixer,
9619 msm_routing_put_port_mixer),
9620 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9621 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9622 msm_routing_get_port_mixer,
9623 msm_routing_put_port_mixer),
9624 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9625 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9626 msm_routing_get_port_mixer,
9627 msm_routing_put_port_mixer),
9628};
9629
9630static const struct snd_kcontrol_new sec_tdm_rx_3_port_mixer_controls[] = {
9631 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9632 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9633 msm_routing_get_port_mixer,
9634 msm_routing_put_port_mixer),
9635 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9636 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9637 msm_routing_get_port_mixer,
9638 msm_routing_put_port_mixer),
9639 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9640 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9641 msm_routing_get_port_mixer,
9642 msm_routing_put_port_mixer),
9643 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9644 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9645 msm_routing_get_port_mixer,
9646 msm_routing_put_port_mixer),
9647 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9648 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9649 msm_routing_get_port_mixer,
9650 msm_routing_put_port_mixer),
9651 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9652 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9653 msm_routing_get_port_mixer,
9654 msm_routing_put_port_mixer),
9655 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9656 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9657 msm_routing_get_port_mixer,
9658 msm_routing_put_port_mixer),
9659 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9660 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9661 msm_routing_get_port_mixer,
9662 msm_routing_put_port_mixer),
9663 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9664 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9665 msm_routing_get_port_mixer,
9666 msm_routing_put_port_mixer),
9667 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9668 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9669 msm_routing_get_port_mixer,
9670 msm_routing_put_port_mixer),
9671 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9672 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9673 msm_routing_get_port_mixer,
9674 msm_routing_put_port_mixer),
9675 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9676 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9677 msm_routing_get_port_mixer,
9678 msm_routing_put_port_mixer),
9679 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9680 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9681 msm_routing_get_port_mixer,
9682 msm_routing_put_port_mixer),
9683 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9684 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9685 msm_routing_get_port_mixer,
9686 msm_routing_put_port_mixer),
9687 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9688 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9689 msm_routing_get_port_mixer,
9690 msm_routing_put_port_mixer),
9691 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9692 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9693 msm_routing_get_port_mixer,
9694 msm_routing_put_port_mixer),
9695};
9696
9697static const struct snd_kcontrol_new tert_tdm_rx_0_port_mixer_controls[] = {
9698 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9699 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9700 msm_routing_get_port_mixer,
9701 msm_routing_put_port_mixer),
9702 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9703 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9704 msm_routing_get_port_mixer,
9705 msm_routing_put_port_mixer),
9706 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9707 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9708 msm_routing_get_port_mixer,
9709 msm_routing_put_port_mixer),
9710 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9711 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9712 msm_routing_get_port_mixer,
9713 msm_routing_put_port_mixer),
9714 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9715 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9716 msm_routing_get_port_mixer,
9717 msm_routing_put_port_mixer),
9718 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9719 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9720 msm_routing_get_port_mixer,
9721 msm_routing_put_port_mixer),
9722 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9723 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9724 msm_routing_get_port_mixer,
9725 msm_routing_put_port_mixer),
9726 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9727 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9728 msm_routing_get_port_mixer,
9729 msm_routing_put_port_mixer),
9730 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9731 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9732 msm_routing_get_port_mixer,
9733 msm_routing_put_port_mixer),
9734 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9735 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9736 msm_routing_get_port_mixer,
9737 msm_routing_put_port_mixer),
9738 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9739 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9740 msm_routing_get_port_mixer,
9741 msm_routing_put_port_mixer),
9742 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9743 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9744 msm_routing_get_port_mixer,
9745 msm_routing_put_port_mixer),
9746 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9747 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9748 msm_routing_get_port_mixer,
9749 msm_routing_put_port_mixer),
9750 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9751 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9752 msm_routing_get_port_mixer,
9753 msm_routing_put_port_mixer),
9754 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9755 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9756 msm_routing_get_port_mixer,
9757 msm_routing_put_port_mixer),
9758 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9759 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9760 msm_routing_get_port_mixer,
9761 msm_routing_put_port_mixer),
9762};
9763
9764static const struct snd_kcontrol_new tert_tdm_rx_1_port_mixer_controls[] = {
9765 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9766 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9767 msm_routing_get_port_mixer,
9768 msm_routing_put_port_mixer),
9769 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9770 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9771 msm_routing_get_port_mixer,
9772 msm_routing_put_port_mixer),
9773 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9774 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9775 msm_routing_get_port_mixer,
9776 msm_routing_put_port_mixer),
9777 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9778 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9779 msm_routing_get_port_mixer,
9780 msm_routing_put_port_mixer),
9781 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9782 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9783 msm_routing_get_port_mixer,
9784 msm_routing_put_port_mixer),
9785 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9786 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9787 msm_routing_get_port_mixer,
9788 msm_routing_put_port_mixer),
9789 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9790 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9791 msm_routing_get_port_mixer,
9792 msm_routing_put_port_mixer),
9793 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9794 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9795 msm_routing_get_port_mixer,
9796 msm_routing_put_port_mixer),
9797 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9798 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9799 msm_routing_get_port_mixer,
9800 msm_routing_put_port_mixer),
9801 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9802 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9803 msm_routing_get_port_mixer,
9804 msm_routing_put_port_mixer),
9805 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9806 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9807 msm_routing_get_port_mixer,
9808 msm_routing_put_port_mixer),
9809 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9810 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9811 msm_routing_get_port_mixer,
9812 msm_routing_put_port_mixer),
9813 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9814 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9815 msm_routing_get_port_mixer,
9816 msm_routing_put_port_mixer),
9817 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9818 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9819 msm_routing_get_port_mixer,
9820 msm_routing_put_port_mixer),
9821 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9822 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9823 msm_routing_get_port_mixer,
9824 msm_routing_put_port_mixer),
9825 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9826 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9827 msm_routing_get_port_mixer,
9828 msm_routing_put_port_mixer),
9829};
9830
9831static const struct snd_kcontrol_new tert_tdm_rx_2_port_mixer_controls[] = {
9832 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9833 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9834 msm_routing_get_port_mixer,
9835 msm_routing_put_port_mixer),
9836 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9837 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9838 msm_routing_get_port_mixer,
9839 msm_routing_put_port_mixer),
9840 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9841 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9842 msm_routing_get_port_mixer,
9843 msm_routing_put_port_mixer),
9844 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9845 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9846 msm_routing_get_port_mixer,
9847 msm_routing_put_port_mixer),
9848 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9849 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9850 msm_routing_get_port_mixer,
9851 msm_routing_put_port_mixer),
9852 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9853 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9854 msm_routing_get_port_mixer,
9855 msm_routing_put_port_mixer),
9856 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9857 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9858 msm_routing_get_port_mixer,
9859 msm_routing_put_port_mixer),
9860 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9861 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9862 msm_routing_get_port_mixer,
9863 msm_routing_put_port_mixer),
9864 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9865 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9866 msm_routing_get_port_mixer,
9867 msm_routing_put_port_mixer),
9868 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9869 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9870 msm_routing_get_port_mixer,
9871 msm_routing_put_port_mixer),
9872 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9873 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9874 msm_routing_get_port_mixer,
9875 msm_routing_put_port_mixer),
9876 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9877 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9878 msm_routing_get_port_mixer,
9879 msm_routing_put_port_mixer),
9880 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9881 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9882 msm_routing_get_port_mixer,
9883 msm_routing_put_port_mixer),
9884 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9885 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9886 msm_routing_get_port_mixer,
9887 msm_routing_put_port_mixer),
9888 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9889 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9890 msm_routing_get_port_mixer,
9891 msm_routing_put_port_mixer),
9892 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9893 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9894 msm_routing_get_port_mixer,
9895 msm_routing_put_port_mixer),
9896};
9897
9898static const struct snd_kcontrol_new tert_tdm_rx_3_port_mixer_controls[] = {
9899 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9900 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9901 msm_routing_get_port_mixer,
9902 msm_routing_put_port_mixer),
9903 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9904 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9905 msm_routing_get_port_mixer,
9906 msm_routing_put_port_mixer),
9907 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9908 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9909 msm_routing_get_port_mixer,
9910 msm_routing_put_port_mixer),
9911 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9912 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9913 msm_routing_get_port_mixer,
9914 msm_routing_put_port_mixer),
9915 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9916 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9917 msm_routing_get_port_mixer,
9918 msm_routing_put_port_mixer),
9919 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9920 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9921 msm_routing_get_port_mixer,
9922 msm_routing_put_port_mixer),
9923 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9924 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9925 msm_routing_get_port_mixer,
9926 msm_routing_put_port_mixer),
9927 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9928 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9929 msm_routing_get_port_mixer,
9930 msm_routing_put_port_mixer),
9931 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9932 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9933 msm_routing_get_port_mixer,
9934 msm_routing_put_port_mixer),
9935 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9936 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9937 msm_routing_get_port_mixer,
9938 msm_routing_put_port_mixer),
9939 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9940 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9941 msm_routing_get_port_mixer,
9942 msm_routing_put_port_mixer),
9943 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9944 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9945 msm_routing_get_port_mixer,
9946 msm_routing_put_port_mixer),
9947 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9948 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9949 msm_routing_get_port_mixer,
9950 msm_routing_put_port_mixer),
9951 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9952 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9953 msm_routing_get_port_mixer,
9954 msm_routing_put_port_mixer),
9955 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9956 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9957 msm_routing_get_port_mixer,
9958 msm_routing_put_port_mixer),
9959 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9960 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9961 msm_routing_get_port_mixer,
9962 msm_routing_put_port_mixer),
9963};
9964
9965static const struct snd_kcontrol_new quat_tdm_rx_0_port_mixer_controls[] = {
9966 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9967 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9968 msm_routing_get_port_mixer,
9969 msm_routing_put_port_mixer),
9970 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9971 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9972 msm_routing_get_port_mixer,
9973 msm_routing_put_port_mixer),
9974 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9975 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9976 msm_routing_get_port_mixer,
9977 msm_routing_put_port_mixer),
9978 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9979 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9980 msm_routing_get_port_mixer,
9981 msm_routing_put_port_mixer),
9982 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9983 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9984 msm_routing_get_port_mixer,
9985 msm_routing_put_port_mixer),
9986 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9987 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9988 msm_routing_get_port_mixer,
9989 msm_routing_put_port_mixer),
9990 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9991 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9992 msm_routing_get_port_mixer,
9993 msm_routing_put_port_mixer),
9994 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9995 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9996 msm_routing_get_port_mixer,
9997 msm_routing_put_port_mixer),
9998 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9999 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10000 msm_routing_get_port_mixer,
10001 msm_routing_put_port_mixer),
10002 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10003 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10004 msm_routing_get_port_mixer,
10005 msm_routing_put_port_mixer),
10006 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10007 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10008 msm_routing_get_port_mixer,
10009 msm_routing_put_port_mixer),
10010 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10011 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10012 msm_routing_get_port_mixer,
10013 msm_routing_put_port_mixer),
10014 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10015 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10016 msm_routing_get_port_mixer,
10017 msm_routing_put_port_mixer),
10018 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10019 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10020 msm_routing_get_port_mixer,
10021 msm_routing_put_port_mixer),
10022 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10023 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10024 msm_routing_get_port_mixer,
10025 msm_routing_put_port_mixer),
10026 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10027 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10028 msm_routing_get_port_mixer,
10029 msm_routing_put_port_mixer),
10030};
10031
10032static const struct snd_kcontrol_new quat_tdm_rx_1_port_mixer_controls[] = {
10033 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10034 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10035 msm_routing_get_port_mixer,
10036 msm_routing_put_port_mixer),
10037 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10038 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10039 msm_routing_get_port_mixer,
10040 msm_routing_put_port_mixer),
10041 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10042 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10043 msm_routing_get_port_mixer,
10044 msm_routing_put_port_mixer),
10045 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10046 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10047 msm_routing_get_port_mixer,
10048 msm_routing_put_port_mixer),
10049 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10050 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10051 msm_routing_get_port_mixer,
10052 msm_routing_put_port_mixer),
10053 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10054 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10055 msm_routing_get_port_mixer,
10056 msm_routing_put_port_mixer),
10057 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10058 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10059 msm_routing_get_port_mixer,
10060 msm_routing_put_port_mixer),
10061 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10062 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10063 msm_routing_get_port_mixer,
10064 msm_routing_put_port_mixer),
10065 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10066 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10067 msm_routing_get_port_mixer,
10068 msm_routing_put_port_mixer),
10069 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10070 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10071 msm_routing_get_port_mixer,
10072 msm_routing_put_port_mixer),
10073 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10074 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10075 msm_routing_get_port_mixer,
10076 msm_routing_put_port_mixer),
10077 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10078 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10079 msm_routing_get_port_mixer,
10080 msm_routing_put_port_mixer),
10081 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10082 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10083 msm_routing_get_port_mixer,
10084 msm_routing_put_port_mixer),
10085 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10086 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10087 msm_routing_get_port_mixer,
10088 msm_routing_put_port_mixer),
10089 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10090 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10091 msm_routing_get_port_mixer,
10092 msm_routing_put_port_mixer),
10093 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10094 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10095 msm_routing_get_port_mixer,
10096 msm_routing_put_port_mixer),
10097};
10098
10099static const struct snd_kcontrol_new quat_tdm_rx_2_port_mixer_controls[] = {
10100 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10101 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10102 msm_routing_get_port_mixer,
10103 msm_routing_put_port_mixer),
10104 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10105 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10106 msm_routing_get_port_mixer,
10107 msm_routing_put_port_mixer),
10108 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10109 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10110 msm_routing_get_port_mixer,
10111 msm_routing_put_port_mixer),
10112 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10113 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10114 msm_routing_get_port_mixer,
10115 msm_routing_put_port_mixer),
10116 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10117 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10118 msm_routing_get_port_mixer,
10119 msm_routing_put_port_mixer),
10120 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10121 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10122 msm_routing_get_port_mixer,
10123 msm_routing_put_port_mixer),
10124 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10125 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10126 msm_routing_get_port_mixer,
10127 msm_routing_put_port_mixer),
10128 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10129 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10130 msm_routing_get_port_mixer,
10131 msm_routing_put_port_mixer),
10132 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10133 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10134 msm_routing_get_port_mixer,
10135 msm_routing_put_port_mixer),
10136 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10137 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10138 msm_routing_get_port_mixer,
10139 msm_routing_put_port_mixer),
10140 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10141 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10142 msm_routing_get_port_mixer,
10143 msm_routing_put_port_mixer),
10144 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10145 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10146 msm_routing_get_port_mixer,
10147 msm_routing_put_port_mixer),
10148 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10149 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10150 msm_routing_get_port_mixer,
10151 msm_routing_put_port_mixer),
10152 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10153 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10154 msm_routing_get_port_mixer,
10155 msm_routing_put_port_mixer),
10156 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10157 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10158 msm_routing_get_port_mixer,
10159 msm_routing_put_port_mixer),
10160 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10161 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10162 msm_routing_get_port_mixer,
10163 msm_routing_put_port_mixer),
10164};
10165
10166static const struct snd_kcontrol_new quat_tdm_rx_3_port_mixer_controls[] = {
10167 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10168 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10169 msm_routing_get_port_mixer,
10170 msm_routing_put_port_mixer),
10171 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10172 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10173 msm_routing_get_port_mixer,
10174 msm_routing_put_port_mixer),
10175 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10176 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10177 msm_routing_get_port_mixer,
10178 msm_routing_put_port_mixer),
10179 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10180 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10181 msm_routing_get_port_mixer,
10182 msm_routing_put_port_mixer),
10183 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10184 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10185 msm_routing_get_port_mixer,
10186 msm_routing_put_port_mixer),
10187 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10188 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10189 msm_routing_get_port_mixer,
10190 msm_routing_put_port_mixer),
10191 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10192 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10193 msm_routing_get_port_mixer,
10194 msm_routing_put_port_mixer),
10195 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10196 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10197 msm_routing_get_port_mixer,
10198 msm_routing_put_port_mixer),
10199 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10200 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10201 msm_routing_get_port_mixer,
10202 msm_routing_put_port_mixer),
10203 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10204 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10205 msm_routing_get_port_mixer,
10206 msm_routing_put_port_mixer),
10207 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10208 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10209 msm_routing_get_port_mixer,
10210 msm_routing_put_port_mixer),
10211 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10212 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10213 msm_routing_get_port_mixer,
10214 msm_routing_put_port_mixer),
10215 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10216 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10217 msm_routing_get_port_mixer,
10218 msm_routing_put_port_mixer),
10219 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10220 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10221 msm_routing_get_port_mixer,
10222 msm_routing_put_port_mixer),
10223 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10224 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10225 msm_routing_get_port_mixer,
10226 msm_routing_put_port_mixer),
10227 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10228 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10229 msm_routing_get_port_mixer,
10230 msm_routing_put_port_mixer),
10231};
10232
10233static const struct snd_kcontrol_new tert_mi2s_rx_port_mixer_controls[] = {
10234 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10235 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10236 msm_routing_put_port_mixer),
10237 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10238 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10239 msm_routing_put_port_mixer),
10240 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10241 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
10242 msm_routing_put_port_mixer),
10243 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10244 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10245 msm_routing_put_port_mixer),
10246 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10247 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10248 msm_routing_put_port_mixer),
10249 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10250 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10251 msm_routing_put_port_mixer),
10252};
10253
10254static const struct snd_kcontrol_new sec_mi2s_rx_port_mixer_controls[] = {
10255 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10256 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10257 msm_routing_put_port_mixer),
10258 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10259 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10260 msm_routing_put_port_mixer),
10261 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10262 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10263 msm_routing_put_port_mixer),
10264 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10265 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10266 msm_routing_put_port_mixer),
10267 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10268 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
10269 msm_routing_put_port_mixer),
10270 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10271 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
10272 msm_routing_put_port_mixer),
10273 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10274 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10275 msm_routing_put_port_mixer),
10276};
10277
10278static const struct snd_kcontrol_new lsm1_mixer_controls[] = {
10279 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10280 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10281 msm_routing_put_listen_mixer),
10282 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10283 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10284 msm_routing_put_listen_mixer),
10285 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10286 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10287 msm_routing_put_listen_mixer),
10288 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10289 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10290 msm_routing_put_listen_mixer),
10291 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10292 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10293 msm_routing_put_listen_mixer),
10294 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10295 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10296 msm_routing_put_listen_mixer),
10297 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10298 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10299 msm_routing_put_listen_mixer),
10300 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10301 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10302 msm_routing_put_listen_mixer),
10303};
10304
10305static const struct snd_kcontrol_new lsm2_mixer_controls[] = {
10306 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10307 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10308 msm_routing_put_listen_mixer),
10309 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10310 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10311 msm_routing_put_listen_mixer),
10312 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10313 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10314 msm_routing_put_listen_mixer),
10315 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10316 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10317 msm_routing_put_listen_mixer),
10318 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10319 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10320 msm_routing_put_listen_mixer),
10321 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10322 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10323 msm_routing_put_listen_mixer),
10324 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10325 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10326 msm_routing_put_listen_mixer),
10327 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10328 MSM_FRONTEND_DAI_LSM2, 1, 0, msm_routing_get_listen_mixer,
10329 msm_routing_put_listen_mixer),
10330};
10331
10332static const struct snd_kcontrol_new lsm3_mixer_controls[] = {
10333 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10334 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10335 msm_routing_put_listen_mixer),
10336 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10337 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10338 msm_routing_put_listen_mixer),
10339 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10340 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10341 msm_routing_put_listen_mixer),
10342 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10343 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10344 msm_routing_put_listen_mixer),
10345 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10346 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10347 msm_routing_put_listen_mixer),
10348 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10349 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10350 msm_routing_put_listen_mixer),
10351 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10352 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10353 msm_routing_put_listen_mixer),
10354 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10355 MSM_FRONTEND_DAI_LSM3, 1, 0, msm_routing_get_listen_mixer,
10356 msm_routing_put_listen_mixer),
10357};
10358
10359static const struct snd_kcontrol_new lsm4_mixer_controls[] = {
10360 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10361 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10362 msm_routing_put_listen_mixer),
10363 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10364 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10365 msm_routing_put_listen_mixer),
10366 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10367 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10368 msm_routing_put_listen_mixer),
10369 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10370 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10371 msm_routing_put_listen_mixer),
10372 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10373 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10374 msm_routing_put_listen_mixer),
10375 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10376 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10377 msm_routing_put_listen_mixer),
10378 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10379 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10380 msm_routing_put_listen_mixer),
10381 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10382 MSM_FRONTEND_DAI_LSM4, 1, 0, msm_routing_get_listen_mixer,
10383 msm_routing_put_listen_mixer),
10384};
10385
10386static const struct snd_kcontrol_new lsm5_mixer_controls[] = {
10387 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10388 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10389 msm_routing_put_listen_mixer),
10390 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10391 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10392 msm_routing_put_listen_mixer),
10393 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10394 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10395 msm_routing_put_listen_mixer),
10396 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10397 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10398 msm_routing_put_listen_mixer),
10399 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10400 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10401 msm_routing_put_listen_mixer),
10402 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10403 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10404 msm_routing_put_listen_mixer),
10405 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10406 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10407 msm_routing_put_listen_mixer),
10408 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10409 MSM_FRONTEND_DAI_LSM5, 1, 0, msm_routing_get_listen_mixer,
10410 msm_routing_put_listen_mixer),
10411};
10412
10413static const struct snd_kcontrol_new lsm6_mixer_controls[] = {
10414 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10415 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10416 msm_routing_put_listen_mixer),
10417 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10418 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10419 msm_routing_put_listen_mixer),
10420 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10421 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10422 msm_routing_put_listen_mixer),
10423 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10424 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10425 msm_routing_put_listen_mixer),
10426 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10427 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10428 msm_routing_put_listen_mixer),
10429 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10430 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10431 msm_routing_put_listen_mixer),
10432 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10433 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10434 msm_routing_put_listen_mixer),
10435 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10436 MSM_FRONTEND_DAI_LSM6, 1, 0, msm_routing_get_listen_mixer,
10437 msm_routing_put_listen_mixer),
10438};
10439
10440static const struct snd_kcontrol_new lsm7_mixer_controls[] = {
10441 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10442 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10443 msm_routing_put_listen_mixer),
10444 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10445 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10446 msm_routing_put_listen_mixer),
10447 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10448 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10449 msm_routing_put_listen_mixer),
10450 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10451 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10452 msm_routing_put_listen_mixer),
10453 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10454 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10455 msm_routing_put_listen_mixer),
10456 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10457 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10458 msm_routing_put_listen_mixer),
10459 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10460 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10461 msm_routing_put_listen_mixer),
10462 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10463 MSM_FRONTEND_DAI_LSM7, 1, 0, msm_routing_get_listen_mixer,
10464 msm_routing_put_listen_mixer),
10465};
10466
10467static const struct snd_kcontrol_new lsm8_mixer_controls[] = {
10468 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10469 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10470 msm_routing_put_listen_mixer),
10471 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10472 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10473 msm_routing_put_listen_mixer),
10474 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10475 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10476 msm_routing_put_listen_mixer),
10477 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10478 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10479 msm_routing_put_listen_mixer),
10480 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10481 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10482 msm_routing_put_listen_mixer),
10483 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10484 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10485 msm_routing_put_listen_mixer),
10486 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10487 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10488 msm_routing_put_listen_mixer),
10489 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10490 MSM_FRONTEND_DAI_LSM8, 1, 0, msm_routing_get_listen_mixer,
10491 msm_routing_put_listen_mixer),
10492};
10493
10494static const struct snd_kcontrol_new slim_fm_switch_mixer_controls =
10495 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10496 0, 1, 0, msm_routing_get_switch_mixer,
10497 msm_routing_put_switch_mixer);
10498
10499static const struct snd_kcontrol_new slim1_fm_switch_mixer_controls =
10500 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10501 0, 1, 0, msm_routing_get_switch_mixer,
10502 msm_routing_put_switch_mixer);
10503
10504static const struct snd_kcontrol_new slim3_fm_switch_mixer_controls =
10505 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10506 0, 1, 0, msm_routing_get_switch_mixer,
10507 msm_routing_put_switch_mixer);
10508
10509static const struct snd_kcontrol_new slim4_fm_switch_mixer_controls =
10510 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10511 0, 1, 0, msm_routing_get_switch_mixer,
10512 msm_routing_put_switch_mixer);
10513
10514static const struct snd_kcontrol_new slim6_fm_switch_mixer_controls =
10515 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10516 0, 1, 0, msm_routing_get_switch_mixer,
10517 msm_routing_put_switch_mixer);
10518
10519static const struct snd_kcontrol_new pcm_rx_switch_mixer_controls =
10520 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10521 0, 1, 0, msm_routing_get_fm_pcmrx_switch_mixer,
10522 msm_routing_put_fm_pcmrx_switch_mixer);
10523
10524static const struct snd_kcontrol_new int0_mi2s_rx_switch_mixer_controls =
10525 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10526 0, 1, 0, msm_routing_get_int0_mi2s_switch_mixer,
10527 msm_routing_put_int0_mi2s_switch_mixer);
10528
10529static const struct snd_kcontrol_new int4_mi2s_rx_switch_mixer_controls =
10530 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10531 0, 1, 0, msm_routing_get_int4_mi2s_switch_mixer,
10532 msm_routing_put_int4_mi2s_switch_mixer);
10533
10534static const struct snd_kcontrol_new pri_mi2s_rx_switch_mixer_controls =
10535 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10536 0, 1, 0, msm_routing_get_pri_mi2s_switch_mixer,
10537 msm_routing_put_pri_mi2s_switch_mixer);
10538
10539static const struct snd_kcontrol_new sec_mi2s_rx_switch_mixer_controls =
10540 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10541 0, 1, 0, msm_routing_get_sec_mi2s_switch_mixer,
10542 msm_routing_put_sec_mi2s_switch_mixer);
10543
10544static const struct snd_kcontrol_new tert_mi2s_rx_switch_mixer_controls =
10545 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10546 0, 1, 0, msm_routing_get_tert_mi2s_switch_mixer,
10547 msm_routing_put_tert_mi2s_switch_mixer);
10548
10549static const struct snd_kcontrol_new quat_mi2s_rx_switch_mixer_controls =
10550 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10551 0, 1, 0, msm_routing_get_quat_mi2s_switch_mixer,
10552 msm_routing_put_quat_mi2s_switch_mixer);
10553
10554static const struct snd_kcontrol_new hfp_pri_aux_switch_mixer_controls =
10555 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10556 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10557 msm_routing_put_hfp_switch_mixer);
10558
10559static const struct snd_kcontrol_new hfp_aux_switch_mixer_controls =
10560 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10561 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10562 msm_routing_put_hfp_switch_mixer);
10563
10564static const struct snd_kcontrol_new hfp_int_switch_mixer_controls =
10565 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10566 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10567 msm_routing_put_hfp_switch_mixer);
10568
10569static const struct snd_kcontrol_new hfp_slim7_switch_mixer_controls =
10570 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10571 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10572 msm_routing_put_hfp_switch_mixer);
10573
10574static const struct snd_kcontrol_new usb_switch_mixer_controls =
10575 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10576 0, 1, 0, msm_routing_get_usb_switch_mixer,
10577 msm_routing_put_usb_switch_mixer);
10578
10579static const struct soc_enum lsm_port_enum =
10580 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_port_text), lsm_port_text);
10581
10582static const char * const lsm_func_text[] = {
10583 "None", "AUDIO", "BEACON", "ULTRASOUND", "SWAUDIO",
10584};
10585static const struct soc_enum lsm_func_enum =
10586 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_func_text), lsm_func_text);
10587
10588static const struct snd_kcontrol_new lsm_controls[] = {
10589 /* kcontrol of lsm_function */
10590 SOC_ENUM_EXT(SLIMBUS_0_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10591 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10592 SOC_ENUM_EXT(SLIMBUS_1_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10593 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10594 SOC_ENUM_EXT(SLIMBUS_2_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10595 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10596 SOC_ENUM_EXT(SLIMBUS_3_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10597 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10598 SOC_ENUM_EXT(SLIMBUS_4_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10599 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10600 SOC_ENUM_EXT(SLIMBUS_5_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10601 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10602 SOC_ENUM_EXT(TERT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10603 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10604 SOC_ENUM_EXT(QUAT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10605 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10606 SOC_ENUM_EXT(INT3_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10607 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10608 /* kcontrol of lsm_port */
10609 SOC_ENUM_EXT("LSM1 Port", lsm_port_enum,
10610 msm_routing_lsm_port_get,
10611 msm_routing_lsm_port_put),
10612 SOC_ENUM_EXT("LSM2 Port", lsm_port_enum,
10613 msm_routing_lsm_port_get,
10614 msm_routing_lsm_port_put),
10615 SOC_ENUM_EXT("LSM3 Port", lsm_port_enum,
10616 msm_routing_lsm_port_get,
10617 msm_routing_lsm_port_put),
10618 SOC_ENUM_EXT("LSM4 Port", lsm_port_enum,
10619 msm_routing_lsm_port_get,
10620 msm_routing_lsm_port_put),
10621 SOC_ENUM_EXT("LSM5 Port", lsm_port_enum,
10622 msm_routing_lsm_port_get,
10623 msm_routing_lsm_port_put),
10624 SOC_ENUM_EXT("LSM6 Port", lsm_port_enum,
10625 msm_routing_lsm_port_get,
10626 msm_routing_lsm_port_put),
10627 SOC_ENUM_EXT("LSM7 Port", lsm_port_enum,
10628 msm_routing_lsm_port_get,
10629 msm_routing_lsm_port_put),
10630 SOC_ENUM_EXT("LSM8 Port", lsm_port_enum,
10631 msm_routing_lsm_port_get,
10632 msm_routing_lsm_port_put),
10633};
10634
10635static const char * const aanc_slim_0_rx_text[] = {
10636 "ZERO", "SLIMBUS_0_TX", "SLIMBUS_1_TX", "SLIMBUS_2_TX", "SLIMBUS_3_TX",
10637 "SLIMBUS_4_TX", "SLIMBUS_5_TX", "SLIMBUS_6_TX"
10638};
10639
10640static const struct soc_enum aanc_slim_0_rx_enum =
10641 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(aanc_slim_0_rx_text),
10642 aanc_slim_0_rx_text);
10643
10644static const struct snd_kcontrol_new aanc_slim_0_rx_mux[] = {
10645 SOC_ENUM_EXT("AANC_SLIM_0_RX MUX", aanc_slim_0_rx_enum,
10646 msm_routing_slim_0_rx_aanc_mux_get,
10647 msm_routing_slim_0_rx_aanc_mux_put)
10648};
10649
10650static int msm_routing_get_stereo_to_custom_stereo_control(
10651 struct snd_kcontrol *kcontrol,
10652 struct snd_ctl_elem_value *ucontrol)
10653{
10654 ucontrol->value.integer.value[0] = is_custom_stereo_on;
10655 return 0;
10656}
10657
10658static int msm_routing_put_stereo_to_custom_stereo_control(
10659 struct snd_kcontrol *kcontrol,
10660 struct snd_ctl_elem_value *ucontrol)
10661{
10662 int flag = 0, i = 0, rc = 0, idx = 0;
10663 int be_index = 0, port_id, topo_id;
10664 unsigned int session_id = 0;
10665 uint16_t op_FL_ip_FL_weight = 0;
10666 uint16_t op_FL_ip_FR_weight = 0;
10667 uint16_t op_FR_ip_FL_weight = 0;
10668 uint16_t op_FR_ip_FR_weight = 0;
10669
10670 flag = ucontrol->value.integer.value[0];
10671 pr_debug("%s E flag %d\n", __func__, flag);
10672
10673 if ((is_custom_stereo_on && flag) || (!is_custom_stereo_on && !flag)) {
10674 pr_err("%s: is_custom_stereo_on %d, flag %d\n",
10675 __func__, is_custom_stereo_on, flag);
10676 return 0;
10677 }
10678 is_custom_stereo_on = flag ? true : false;
10679 pr_debug("%s:is_custom_stereo_on %d\n", __func__, is_custom_stereo_on);
10680 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
10681 port_id = msm_bedais[be_index].port_id;
10682 if (!msm_bedais[be_index].active)
10683 continue;
10684 if ((port_id != SLIMBUS_0_RX) &&
10685 (port_id != RT_PROXY_PORT_001_RX) &&
10686 (port_id != AFE_PORT_ID_PRIMARY_MI2S_RX) &&
10687 (port_id != AFE_PORT_ID_INT4_MI2S_RX))
10688 continue;
10689
10690 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
10691 MSM_FRONTEND_DAI_MM_SIZE) {
10692 if (fe_dai_map[i][SESSION_TYPE_RX].perf_mode !=
10693 LEGACY_PCM_MODE)
10694 goto skip_send_custom_stereo;
10695 session_id =
10696 fe_dai_map[i][SESSION_TYPE_RX].strm_id;
10697 if (is_custom_stereo_on) {
10698 op_FL_ip_FL_weight =
10699 Q14_GAIN_ZERO_POINT_FIVE;
10700 op_FL_ip_FR_weight =
10701 Q14_GAIN_ZERO_POINT_FIVE;
10702 op_FR_ip_FL_weight =
10703 Q14_GAIN_ZERO_POINT_FIVE;
10704 op_FR_ip_FR_weight =
10705 Q14_GAIN_ZERO_POINT_FIVE;
10706 } else {
10707 op_FL_ip_FL_weight = Q14_GAIN_UNITY;
10708 op_FL_ip_FR_weight = 0;
10709 op_FR_ip_FL_weight = 0;
10710 op_FR_ip_FR_weight = Q14_GAIN_UNITY;
10711 }
10712 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
10713 unsigned long copp =
10714 session_copp_map[i]
10715 [SESSION_TYPE_RX][be_index];
10716 if (!test_bit(idx, &copp))
10717 goto skip_send_custom_stereo;
10718 topo_id = adm_get_topology_for_port_copp_idx(
10719 msm_bedais[be_index].port_id, idx);
10720 if (topo_id < 0)
10721 pr_debug("%s:Err:custom stereo topo %d",
10722 __func__, topo_id);
10723 pr_debug("idx %d\n", idx);
10724 if (topo_id == DS2_ADM_COPP_TOPOLOGY_ID)
10725 rc = msm_ds2_dap_set_custom_stereo_onoff
10726 (msm_bedais[be_index].port_id,
10727 idx, is_custom_stereo_on);
10728 else if (topo_id == DOLBY_ADM_COPP_TOPOLOGY_ID)
10729 rc = dolby_dap_set_custom_stereo_onoff(
10730 msm_bedais[be_index].port_id,
10731 idx, is_custom_stereo_on);
10732 else
10733 rc = msm_qti_pp_send_stereo_to_custom_stereo_cmd
10734 (msm_bedais[be_index].port_id,
10735 idx, session_id,
10736 op_FL_ip_FL_weight,
10737 op_FL_ip_FR_weight,
10738 op_FR_ip_FL_weight,
10739 op_FR_ip_FR_weight);
10740 if (rc < 0)
10741skip_send_custom_stereo:
10742 pr_err("%s: err setting custom stereo\n",
10743 __func__);
10744 }
10745
10746 }
10747 }
10748 return 0;
10749}
10750
10751static const struct snd_kcontrol_new stereo_to_custom_stereo_controls[] = {
10752 SOC_SINGLE_EXT("Set Custom Stereo OnOff", SND_SOC_NOPM, 0,
10753 1, 0, msm_routing_get_stereo_to_custom_stereo_control,
10754 msm_routing_put_stereo_to_custom_stereo_control),
10755};
10756
10757static int msm_routing_get_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10758 struct snd_ctl_elem_value *ucontrol)
10759{
10760 return 0;
10761}
10762
10763static int msm_routing_put_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10764 struct snd_ctl_elem_value *ucontrol)
10765{
10766 int i = 0, j;
10767 int num_app_types = ucontrol->value.integer.value[i++];
10768
10769 pr_debug("%s\n", __func__);
10770
10771 memset(app_type_cfg, 0, MAX_APP_TYPES*
10772 sizeof(struct msm_pcm_routing_app_type_data));
10773 if (num_app_types > MAX_APP_TYPES) {
10774 pr_err("%s: number of app types exceed the max supported\n",
10775 __func__);
10776 return -EINVAL;
10777 }
10778 for (j = 0; j < num_app_types; j++) {
10779 app_type_cfg[j].app_type =
10780 ucontrol->value.integer.value[i++];
10781 app_type_cfg[j].sample_rate =
10782 ucontrol->value.integer.value[i++];
10783 app_type_cfg[j].bit_width =
10784 ucontrol->value.integer.value[i++];
10785 }
10786
10787 return 0;
10788}
10789
10790static int msm_routing_put_app_type_gain_control(struct snd_kcontrol *kcontrol,
10791 struct snd_ctl_elem_value *ucontrol)
10792{
10793 int j, fe_id, be_id, port_type;
10794 int ret = 0;
10795 unsigned long copp;
10796 struct msm_pcm_routing_bdai_data *bedai;
10797 int dir = ucontrol->value.integer.value[0] ? SESSION_TYPE_TX :
10798 SESSION_TYPE_RX;
10799 int app_type = ucontrol->value.integer.value[1];
10800 int gain = (ucontrol->value.integer.value[2] +
10801 ucontrol->value.integer.value[3])/2;
10802
10803 port_type = (dir == SESSION_TYPE_RX) ? MSM_AFE_PORT_TYPE_RX :
10804 MSM_AFE_PORT_TYPE_TX;
10805
10806 mutex_lock(&routing_lock);
10807 for (be_id = 0; be_id < MSM_BACKEND_DAI_MAX; be_id++) {
10808 if (is_be_dai_extproc(be_id))
10809 continue;
10810
10811 bedai = &msm_bedais[be_id];
10812 if (afe_get_port_type(bedai->port_id) != port_type)
10813 continue;
10814
10815 if (!bedai->active)
10816 continue;
10817
10818 for (fe_id = 0; fe_id < MSM_FRONTEND_DAI_MAX; fe_id++) {
10819 if (!test_bit(fe_id, &bedai->fe_sessions[0]))
10820 continue;
10821
10822 if (app_type !=
10823 fe_dai_app_type_cfg[fe_id][dir][be_id].app_type)
10824 continue;
10825
10826 copp = session_copp_map[fe_id][dir][be_id];
10827 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
10828 if (!test_bit(j, &copp))
10829 continue;
10830 ret |= adm_set_volume(bedai->port_id, j, gain);
10831 }
10832 }
10833 }
10834 mutex_unlock(&routing_lock);
10835 return ret ? -EINVAL : 0;
10836}
10837
10838static const struct snd_kcontrol_new app_type_cfg_controls[] = {
10839 SOC_SINGLE_MULTI_EXT("App Type Config", SND_SOC_NOPM, 0,
10840 0xFFFFFFFF, 0, 128, msm_routing_get_app_type_cfg_control,
10841 msm_routing_put_app_type_cfg_control),
10842 SOC_SINGLE_MULTI_EXT("App Type Gain", SND_SOC_NOPM, 0,
10843 0x2000, 0, 4, NULL, msm_routing_put_app_type_gain_control)
10844};
10845
10846static int msm_routing_get_lsm_app_type_cfg_control(
10847 struct snd_kcontrol *kcontrol,
10848 struct snd_ctl_elem_value *ucontrol)
10849{
10850 return 0;
10851}
10852
10853static int msm_routing_put_lsm_app_type_cfg_control(
10854 struct snd_kcontrol *kcontrol,
10855 struct snd_ctl_elem_value *ucontrol)
10856{
10857 int i = 0, j;
10858 int num_app_types = ucontrol->value.integer.value[i++];
10859
10860 memset(lsm_app_type_cfg, 0, MAX_APP_TYPES*
10861 sizeof(struct msm_pcm_routing_app_type_data));
10862 if (num_app_types > MAX_APP_TYPES) {
10863 pr_err("%s: number of app types exceed the max supported\n",
10864 __func__);
10865 return -EINVAL;
10866 }
10867 for (j = 0; j < num_app_types; j++) {
10868 lsm_app_type_cfg[j].app_type =
10869 ucontrol->value.integer.value[i++];
10870 lsm_app_type_cfg[j].sample_rate =
10871 ucontrol->value.integer.value[i++];
10872 lsm_app_type_cfg[j].bit_width =
10873 ucontrol->value.integer.value[i++];
10874 }
10875
10876 return 0;
10877}
10878
10879static const struct snd_kcontrol_new lsm_app_type_cfg_controls[] = {
10880 SOC_SINGLE_MULTI_EXT("Listen App Type Config", SND_SOC_NOPM, 0,
10881 0xFFFFFFFF, 0, 128, msm_routing_get_lsm_app_type_cfg_control,
10882 msm_routing_put_lsm_app_type_cfg_control),
10883};
10884
10885static int msm_routing_get_use_ds1_or_ds2_control(
10886 struct snd_kcontrol *kcontrol,
10887 struct snd_ctl_elem_value *ucontrol)
10888{
10889 ucontrol->value.integer.value[0] = is_ds2_on;
10890 return 0;
10891}
10892
10893static int msm_routing_put_use_ds1_or_ds2_control(
10894 struct snd_kcontrol *kcontrol,
10895 struct snd_ctl_elem_value *ucontrol)
10896{
10897 is_ds2_on = ucontrol->value.integer.value[0];
10898 return 0;
10899}
10900
10901static const struct snd_kcontrol_new use_ds1_or_ds2_controls[] = {
10902 SOC_SINGLE_EXT("DS2 OnOff", SND_SOC_NOPM, 0,
10903 1, 0, msm_routing_get_use_ds1_or_ds2_control,
10904 msm_routing_put_use_ds1_or_ds2_control),
10905};
10906
10907int msm_routing_get_rms_value_control(struct snd_kcontrol *kcontrol,
10908 struct snd_ctl_elem_value *ucontrol) {
10909 int rc = 0;
10910 int be_idx = 0;
10911 char *param_value;
10912 int *update_param_value;
10913 uint32_t param_length = sizeof(uint32_t);
10914 uint32_t param_payload_len = RMS_PAYLOAD_LEN * sizeof(uint32_t);
10915
10916 param_value = kzalloc(param_length + param_payload_len, GFP_KERNEL);
10917 if (!param_value)
10918 return -ENOMEM;
10919
10920 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++)
10921 if (msm_bedais[be_idx].port_id == SLIMBUS_0_TX)
10922 break;
10923 if ((be_idx < MSM_BACKEND_DAI_MAX) && msm_bedais[be_idx].active) {
10924 rc = adm_get_params(SLIMBUS_0_TX, 0,
10925 RMS_MODULEID_APPI_PASSTHRU,
10926 RMS_PARAM_FIRST_SAMPLE,
10927 param_length + param_payload_len,
10928 param_value);
10929 if (rc) {
10930 pr_err("%s: get parameters failed:%d\n", __func__, rc);
10931 kfree(param_value);
10932 return -EINVAL;
10933 }
10934 update_param_value = (int *)param_value;
10935 ucontrol->value.integer.value[0] = update_param_value[0];
10936
10937 pr_debug("%s: FROM DSP value[0] 0x%x\n",
10938 __func__, update_param_value[0]);
10939 }
10940 kfree(param_value);
10941 return 0;
10942}
10943
10944static int msm_voc_session_id_put(struct snd_kcontrol *kcontrol,
10945 struct snd_ctl_elem_value *ucontrol)
10946{
10947 voc_session_id = ucontrol->value.integer.value[0];
10948
10949 pr_debug("%s: voc_session_id=%u\n", __func__, voc_session_id);
10950
10951 return 0;
10952}
10953
10954static int msm_voc_session_id_get(struct snd_kcontrol *kcontrol,
10955 struct snd_ctl_elem_value *ucontrol)
10956{
10957 ucontrol->value.integer.value[0] = voc_session_id;
10958
10959 return 0;
10960}
10961
10962static struct snd_kcontrol_new msm_voc_session_controls[] = {
10963 SOC_SINGLE_MULTI_EXT("Voc VSID", SND_SOC_NOPM, 0,
10964 0xFFFFFFFF, 0, 1, msm_voc_session_id_get,
10965 msm_voc_session_id_put),
10966};
10967
10968static int msm_sound_focus_info(struct snd_kcontrol *kcontrol,
10969 struct snd_ctl_elem_info *uinfo)
10970{
10971 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
10972 uinfo->count = sizeof(struct sound_focus_param);
10973
10974 return 0;
10975}
10976
10977static int msm_voice_sound_focus_put(struct snd_kcontrol *kcontrol,
10978 struct snd_ctl_elem_value *ucontrol)
10979{
10980 int ret = 0;
10981 struct sound_focus_param soundFocusData;
10982
10983 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
10984 sizeof(struct sound_focus_param));
10985 ret = voc_set_sound_focus(soundFocusData);
10986 if (ret) {
10987 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
10988 __func__, ret);
10989
10990 ret = -EINVAL;
10991 }
10992
10993 return ret;
10994}
10995
10996static int msm_voice_sound_focus_get(struct snd_kcontrol *kcontrol,
10997 struct snd_ctl_elem_value *ucontrol)
10998{
10999 int ret = 0;
11000 struct sound_focus_param soundFocusData;
11001
11002 memset(&soundFocusData, 0, sizeof(struct sound_focus_param));
11003
11004 ret = voc_get_sound_focus(&soundFocusData);
11005 if (ret) {
11006 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
11007 __func__, ret);
11008
11009 ret = -EINVAL;
11010 goto done;
11011 }
11012 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
11013 sizeof(struct sound_focus_param));
11014
11015done:
11016 return ret;
11017}
11018
11019static int msm_source_tracking_info(struct snd_kcontrol *kcontrol,
11020 struct snd_ctl_elem_info *uinfo)
11021{
11022 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
11023 uinfo->count = sizeof(struct source_tracking_param);
11024
11025 return 0;
11026}
11027
11028static int msm_voice_source_tracking_get(struct snd_kcontrol *kcontrol,
11029 struct snd_ctl_elem_value *ucontrol)
11030{
11031 int ret = 0;
11032 struct source_tracking_param sourceTrackingData;
11033
11034 memset(&sourceTrackingData, 0, sizeof(struct source_tracking_param));
11035
11036 ret = voc_get_source_tracking(&sourceTrackingData);
11037 if (ret) {
11038 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
11039 __func__, ret);
11040
11041 ret = -EINVAL;
11042 goto done;
11043 }
11044 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
11045 sizeof(struct source_tracking_param));
11046
11047done:
11048 return ret;
11049}
11050
11051static int msm_audio_get_copp_idx_from_port_id(int port_id, int session_type,
11052 int *copp_idx)
11053{
11054 int i, idx, be_idx;
11055 int ret = 0;
11056 unsigned long copp;
11057
11058 pr_debug("%s: Enter, port_id=%d\n", __func__, port_id);
11059
11060 ret = q6audio_validate_port(port_id);
11061 if (ret < 0) {
11062 pr_err("%s: port validation failed id 0x%x ret %d\n",
11063 __func__, port_id, ret);
11064
11065 ret = -EINVAL;
11066 goto done;
11067 }
11068
11069 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
11070 if (msm_bedais[be_idx].port_id == port_id)
11071 break;
11072 }
11073 if (be_idx >= MSM_BACKEND_DAI_MAX) {
11074 pr_err("%s: Invalid be id %d\n", __func__, be_idx);
11075
11076 ret = -EINVAL;
11077 goto done;
11078 }
11079
11080 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
11081 MSM_FRONTEND_DAI_MM_SIZE) {
11082 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
11083 copp = session_copp_map[i]
11084 [session_type][be_idx];
11085 if (test_bit(idx, &copp))
11086 break;
11087 }
11088 if (idx >= MAX_COPPS_PER_PORT)
11089 continue;
11090 else
11091 break;
11092 }
11093 if (i >= MSM_FRONTEND_DAI_MM_SIZE) {
11094 pr_err("%s: Invalid FE, exiting\n", __func__);
11095
11096 ret = -EINVAL;
11097 goto done;
11098 }
11099 *copp_idx = idx;
11100 pr_debug("%s: copp_idx=%d\n", __func__, *copp_idx);
11101
11102done:
11103 return ret;
11104}
11105
11106static int msm_audio_sound_focus_derive_port_id(struct snd_kcontrol *kcontrol,
11107 const char *prefix, int *port_id)
11108{
11109 int ret = 0;
11110
11111 pr_debug("%s: Enter, prefix:%s\n", __func__, prefix);
11112
11113 /*
11114 * Mixer control name will be like "Sound Focus Audio Tx SLIMBUS_0"
11115 * where the prefix is "Sound Focus Audio Tx ". Skip the prefix
11116 * and compare the string with the backend name to derive the port id.
11117 */
11118 if (!strcmp(kcontrol->id.name + strlen(prefix),
11119 "SLIMBUS_0")) {
11120 *port_id = SLIMBUS_0_TX;
11121 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
11122 "TERT_MI2S")) {
11123 *port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
11124 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
11125 "INT3_MI2S")) {
11126 *port_id = AFE_PORT_ID_INT3_MI2S_TX;
11127 } else {
11128 pr_err("%s: mixer ctl name=%s, could not derive valid port id\n",
11129 __func__, kcontrol->id.name);
11130
11131 ret = -EINVAL;
11132 goto done;
11133 }
11134 pr_debug("%s: mixer ctl name=%s, derived port_id=%d\n",
11135 __func__, kcontrol->id.name, *port_id);
11136
11137done:
11138 return ret;
11139}
11140
11141static int msm_audio_sound_focus_put(struct snd_kcontrol *kcontrol,
11142 struct snd_ctl_elem_value *ucontrol)
11143{
11144 int ret = 0;
11145 struct sound_focus_param soundFocusData;
11146 int port_id, copp_idx;
11147
11148 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11149 "Sound Focus Audio Tx ", &port_id);
11150 if (ret != 0) {
11151 pr_err("%s: Error in deriving port id, err=%d\n",
11152 __func__, ret);
11153
11154 ret = -EINVAL;
11155 goto done;
11156 }
11157
11158 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11159 &copp_idx);
11160 if (ret) {
11161 pr_err("%s: Could not get copp idx for port_id=%d\n",
11162 __func__, port_id);
11163
11164 ret = -EINVAL;
11165 goto done;
11166 }
11167
11168 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
11169 sizeof(struct sound_focus_param));
11170
11171 ret = adm_set_sound_focus(port_id, copp_idx, soundFocusData);
11172 if (ret) {
11173 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
11174 __func__, ret);
11175
11176 ret = -EINVAL;
11177 goto done;
11178 }
11179
11180done:
11181 return ret;
11182}
11183
11184static int msm_audio_sound_focus_get(struct snd_kcontrol *kcontrol,
11185 struct snd_ctl_elem_value *ucontrol)
11186{
11187 int ret = 0;
11188 struct sound_focus_param soundFocusData;
11189 int port_id, copp_idx;
11190
11191 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11192 "Sound Focus Audio Tx ", &port_id);
11193 if (ret) {
11194 pr_err("%s: Error in deriving port id, err=%d\n",
11195 __func__, ret);
11196
11197 ret = -EINVAL;
11198 goto done;
11199 }
11200
11201 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11202 &copp_idx);
11203 if (ret) {
11204 pr_err("%s: Could not get copp idx for port_id=%d\n",
11205 __func__, port_id);
11206
11207 ret = -EINVAL;
11208 goto done;
11209 }
11210
11211 ret = adm_get_sound_focus(port_id, copp_idx, &soundFocusData);
11212 if (ret) {
11213 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
11214 __func__, ret);
11215
11216 ret = -EINVAL;
11217 goto done;
11218 }
11219
11220 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
11221 sizeof(struct sound_focus_param));
11222
11223done:
11224 return ret;
11225}
11226
11227static int msm_audio_source_tracking_get(struct snd_kcontrol *kcontrol,
11228 struct snd_ctl_elem_value *ucontrol)
11229{
11230 int ret = 0;
11231 struct source_tracking_param sourceTrackingData;
11232 int port_id, copp_idx;
11233
11234 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11235 "Source Tracking Audio Tx ", &port_id);
11236 if (ret) {
11237 pr_err("%s: Error in deriving port id, err=%d\n",
11238 __func__, ret);
11239
11240 ret = -EINVAL;
11241 goto done;
11242 }
11243
11244 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11245 &copp_idx);
11246 if (ret) {
11247 pr_err("%s: Could not get copp idx for port_id=%d\n",
11248 __func__, port_id);
11249
11250 ret = -EINVAL;
11251 goto done;
11252 }
11253
11254 ret = adm_get_source_tracking(port_id, copp_idx, &sourceTrackingData);
11255 if (ret) {
11256 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
11257 __func__, ret);
11258
11259 ret = -EINVAL;
11260 goto done;
11261 }
11262
11263 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
11264 sizeof(struct source_tracking_param));
11265
11266done:
11267 return ret;
11268}
11269
11270static const struct snd_kcontrol_new msm_source_tracking_controls[] = {
11271 {
11272 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11273 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11274 .name = "Sound Focus Voice Tx SLIMBUS_0",
11275 .info = msm_sound_focus_info,
11276 .get = msm_voice_sound_focus_get,
11277 .put = msm_voice_sound_focus_put,
11278 },
11279 {
11280 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11281 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11282 .name = "Source Tracking Voice Tx SLIMBUS_0",
11283 .info = msm_source_tracking_info,
11284 .get = msm_voice_source_tracking_get,
11285 },
11286 {
11287 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11288 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11289 .name = "Sound Focus Audio Tx SLIMBUS_0",
11290 .info = msm_sound_focus_info,
11291 .get = msm_audio_sound_focus_get,
11292 .put = msm_audio_sound_focus_put,
11293 },
11294 {
11295 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11296 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11297 .name = "Source Tracking Audio Tx SLIMBUS_0",
11298 .info = msm_source_tracking_info,
11299 .get = msm_audio_source_tracking_get,
11300 },
11301 {
11302 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11303 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11304 .name = "Sound Focus Voice Tx TERT_MI2S",
11305 .info = msm_sound_focus_info,
11306 .get = msm_voice_sound_focus_get,
11307 .put = msm_voice_sound_focus_put,
11308 },
11309 {
11310 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11311 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11312 .name = "Source Tracking Voice Tx TERT_MI2S",
11313 .info = msm_source_tracking_info,
11314 .get = msm_voice_source_tracking_get,
11315 },
11316 {
11317 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11318 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11319 .name = "Sound Focus Audio Tx TERT_MI2S",
11320 .info = msm_sound_focus_info,
11321 .get = msm_audio_sound_focus_get,
11322 .put = msm_audio_sound_focus_put,
11323 },
11324 {
11325 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11326 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11327 .name = "Source Tracking Audio Tx TERT_MI2S",
11328 .info = msm_source_tracking_info,
11329 .get = msm_audio_source_tracking_get,
11330 },
11331 {
11332 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11333 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11334 .name = "Sound Focus Voice Tx INT3_MI2S",
11335 .info = msm_sound_focus_info,
11336 .get = msm_voice_sound_focus_get,
11337 .put = msm_voice_sound_focus_put,
11338 },
11339 {
11340 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11341 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11342 .name = "Source Tracking Voice Tx INT3_MI2S",
11343 .info = msm_source_tracking_info,
11344 .get = msm_voice_source_tracking_get,
11345 },
11346 {
11347 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11348 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11349 .name = "Sound Focus Audio Tx INT3_MI2S",
11350 .info = msm_sound_focus_info,
11351 .get = msm_audio_sound_focus_get,
11352 .put = msm_audio_sound_focus_put,
11353 },
11354 {
11355 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11356 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11357 .name = "Source Tracking Audio Tx INT3_MI2S",
11358 .info = msm_source_tracking_info,
11359 .get = msm_audio_source_tracking_get,
11360 },
11361};
11362
11363static int spkr_prot_put_vi_lch_port(struct snd_kcontrol *kcontrol,
11364 struct snd_ctl_elem_value *ucontrol)
11365{
11366 int ret = 0;
11367 int item;
11368 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11369
11370 pr_debug("%s item is %d\n", __func__,
11371 ucontrol->value.enumerated.item[0]);
11372 mutex_lock(&routing_lock);
11373 item = ucontrol->value.enumerated.item[0];
11374 if (item < e->items) {
11375 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11376 __func__, e->shift_l, e->values[item]);
11377 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11378 e->values[item] < MSM_BACKEND_DAI_MAX)
11379 /* Enable feedback TX path */
11380 ret = afe_spk_prot_feed_back_cfg(
11381 msm_bedais[e->values[item]].port_id,
11382 msm_bedais[e->shift_l].port_id, 1, 0, 1);
11383 else {
11384 pr_debug("%s values are out of range item %d\n",
11385 __func__, e->values[item]);
11386 /* Disable feedback TX path */
11387 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11388 ret = afe_spk_prot_feed_back_cfg(0, 0, 0, 0, 0);
11389 else
11390 ret = -EINVAL;
11391 }
11392 } else {
11393 pr_err("%s item value is out of range item\n", __func__);
11394 ret = -EINVAL;
11395 }
11396 mutex_unlock(&routing_lock);
11397 return ret;
11398}
11399
11400static int spkr_prot_put_vi_rch_port(struct snd_kcontrol *kcontrol,
11401 struct snd_ctl_elem_value *ucontrol)
11402{
11403 int ret = 0;
11404 int item;
11405 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11406
11407 pr_debug("%s item is %d\n", __func__,
11408 ucontrol->value.enumerated.item[0]);
11409 mutex_lock(&routing_lock);
11410 item = ucontrol->value.enumerated.item[0];
11411 if (item < e->items) {
11412 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11413 __func__, e->shift_l, e->values[item]);
11414 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11415 e->values[item] < MSM_BACKEND_DAI_MAX)
11416 /* Enable feedback TX path */
11417 ret = afe_spk_prot_feed_back_cfg(
11418 msm_bedais[e->values[item]].port_id,
11419 msm_bedais[e->shift_l].port_id,
11420 1, 1, 1);
11421 else {
11422 pr_debug("%s values are out of range item %d\n",
11423 __func__, e->values[item]);
11424 /* Disable feedback TX path */
11425 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11426 ret = afe_spk_prot_feed_back_cfg(0,
11427 0, 0, 0, 0);
11428 else
11429 ret = -EINVAL;
11430 }
11431 } else {
11432 pr_err("%s item value is out of range item\n", __func__);
11433 ret = -EINVAL;
11434 }
11435 mutex_unlock(&routing_lock);
11436 return ret;
11437}
11438
11439static int spkr_prot_get_vi_lch_port(struct snd_kcontrol *kcontrol,
11440 struct snd_ctl_elem_value *ucontrol)
11441{
11442 pr_debug("%s\n", __func__);
11443 return 0;
11444}
11445
11446static int spkr_prot_get_vi_rch_port(struct snd_kcontrol *kcontrol,
11447 struct snd_ctl_elem_value *ucontrol)
11448{
11449 pr_debug("%s\n", __func__);
11450 ucontrol->value.enumerated.item[0] = 0;
11451 return 0;
11452}
11453
11454static const char * const slim0_rx_vi_fb_tx_lch_mux_text[] = {
11455 "ZERO", "SLIM4_TX"
11456};
11457
11458static const char * const slim0_rx_vi_fb_tx_rch_mux_text[] = {
11459 "ZERO", "SLIM4_TX"
11460};
11461
11462static const char * const mi2s_rx_vi_fb_tx_mux_text[] = {
11463 "ZERO", "SENARY_TX"
11464};
11465
11466static const char * const int4_mi2s_rx_vi_fb_tx_mono_mux_text[] = {
11467 "ZERO", "INT5_MI2S_TX"
11468};
11469
11470static const char * const int4_mi2s_rx_vi_fb_tx_stereo_mux_text[] = {
11471 "ZERO", "INT5_MI2S_TX"
11472};
11473
11474static const int const slim0_rx_vi_fb_tx_lch_value[] = {
11475 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11476};
11477
11478static const int const slim0_rx_vi_fb_tx_rch_value[] = {
11479 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11480};
11481
11482static const int const mi2s_rx_vi_fb_tx_value[] = {
11483 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SENARY_MI2S_TX
11484};
11485
11486static const int const int4_mi2s_rx_vi_fb_tx_mono_ch_value[] = {
11487 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11488};
11489
11490static const int const int4_mi2s_rx_vi_fb_tx_stereo_ch_value[] = {
11491 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11492};
11493
11494static const struct soc_enum slim0_rx_vi_fb_lch_mux_enum =
11495 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11496 ARRAY_SIZE(slim0_rx_vi_fb_tx_lch_mux_text),
11497 slim0_rx_vi_fb_tx_lch_mux_text, slim0_rx_vi_fb_tx_lch_value);
11498
11499static const struct soc_enum slim0_rx_vi_fb_rch_mux_enum =
11500 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11501 ARRAY_SIZE(slim0_rx_vi_fb_tx_rch_mux_text),
11502 slim0_rx_vi_fb_tx_rch_mux_text, slim0_rx_vi_fb_tx_rch_value);
11503
11504static const struct soc_enum mi2s_rx_vi_fb_mux_enum =
11505 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0,
11506 ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text),
11507 mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value);
11508
11509static const struct soc_enum int4_mi2s_rx_vi_fb_mono_ch_mux_enum =
11510 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11511 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_mono_mux_text),
11512 int4_mi2s_rx_vi_fb_tx_mono_mux_text,
11513 int4_mi2s_rx_vi_fb_tx_mono_ch_value);
11514
11515static const struct soc_enum int4_mi2s_rx_vi_fb_stereo_ch_mux_enum =
11516 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11517 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_stereo_mux_text),
11518 int4_mi2s_rx_vi_fb_tx_stereo_mux_text,
11519 int4_mi2s_rx_vi_fb_tx_stereo_ch_value);
11520
11521static const struct snd_kcontrol_new slim0_rx_vi_fb_lch_mux =
11522 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_LCH_MUX",
11523 slim0_rx_vi_fb_lch_mux_enum, spkr_prot_get_vi_lch_port,
11524 spkr_prot_put_vi_lch_port);
11525
11526static const struct snd_kcontrol_new slim0_rx_vi_fb_rch_mux =
11527 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_RCH_MUX",
11528 slim0_rx_vi_fb_rch_mux_enum, spkr_prot_get_vi_rch_port,
11529 spkr_prot_put_vi_rch_port);
11530
11531static const struct snd_kcontrol_new mi2s_rx_vi_fb_mux =
11532 SOC_DAPM_ENUM_EXT("PRI_MI2S_RX_VI_FB_MUX",
11533 mi2s_rx_vi_fb_mux_enum, spkr_prot_get_vi_lch_port,
11534 spkr_prot_put_vi_lch_port);
11535
11536static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_mono_ch_mux =
11537 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_MONO_CH_MUX",
11538 int4_mi2s_rx_vi_fb_mono_ch_mux_enum, spkr_prot_get_vi_lch_port,
11539 spkr_prot_put_vi_lch_port);
11540
11541static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_stereo_ch_mux =
11542 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX",
11543 int4_mi2s_rx_vi_fb_stereo_ch_mux_enum, spkr_prot_get_vi_rch_port,
11544 spkr_prot_put_vi_rch_port);
11545
11546static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
11547 /* Frontend AIF */
11548 /* Widget name equals to Front-End DAI name<Need confirmation>,
11549 * Stream name must contains substring of front-end dai name
11550 */
11551 SND_SOC_DAPM_AIF_IN("MM_DL1", "MultiMedia1 Playback", 0, 0, 0, 0),
11552 SND_SOC_DAPM_AIF_IN("MM_DL2", "MultiMedia2 Playback", 0, 0, 0, 0),
11553 SND_SOC_DAPM_AIF_IN("MM_DL3", "MultiMedia3 Playback", 0, 0, 0, 0),
11554 SND_SOC_DAPM_AIF_IN("MM_DL4", "MultiMedia4 Playback", 0, 0, 0, 0),
11555 SND_SOC_DAPM_AIF_IN("MM_DL5", "MultiMedia5 Playback", 0, 0, 0, 0),
11556 SND_SOC_DAPM_AIF_IN("MM_DL6", "MultiMedia6 Playback", 0, 0, 0, 0),
11557 SND_SOC_DAPM_AIF_IN("MM_DL7", "MultiMedia7 Playback", 0, 0, 0, 0),
11558 SND_SOC_DAPM_AIF_IN("MM_DL8", "MultiMedia8 Playback", 0, 0, 0, 0),
11559 SND_SOC_DAPM_AIF_IN("MM_DL9", "MultiMedia9 Playback", 0, 0, 0, 0),
11560 SND_SOC_DAPM_AIF_IN("MM_DL10", "MultiMedia10 Playback", 0, 0, 0, 0),
11561 SND_SOC_DAPM_AIF_IN("MM_DL11", "MultiMedia11 Playback", 0, 0, 0, 0),
11562 SND_SOC_DAPM_AIF_IN("MM_DL12", "MultiMedia12 Playback", 0, 0, 0, 0),
11563 SND_SOC_DAPM_AIF_IN("MM_DL13", "MultiMedia13 Playback", 0, 0, 0, 0),
11564 SND_SOC_DAPM_AIF_IN("MM_DL14", "MultiMedia14 Playback", 0, 0, 0, 0),
11565 SND_SOC_DAPM_AIF_IN("MM_DL15", "MultiMedia15 Playback", 0, 0, 0, 0),
11566 SND_SOC_DAPM_AIF_IN("MM_DL16", "MultiMedia16 Playback", 0, 0, 0, 0),
11567 SND_SOC_DAPM_AIF_IN("MM_DL20", "MultiMedia20 Playback", 0, 0, 0, 0),
11568 SND_SOC_DAPM_AIF_IN("VOIP_DL", "VoIP Playback", 0, 0, 0, 0),
11569 SND_SOC_DAPM_AIF_OUT("MM_UL1", "MultiMedia1 Capture", 0, 0, 0, 0),
11570 SND_SOC_DAPM_AIF_OUT("MM_UL2", "MultiMedia2 Capture", 0, 0, 0, 0),
11571 SND_SOC_DAPM_AIF_OUT("MM_UL3", "MultiMedia3 Capture", 0, 0, 0, 0),
11572 SND_SOC_DAPM_AIF_OUT("MM_UL4", "MultiMedia4 Capture", 0, 0, 0, 0),
11573 SND_SOC_DAPM_AIF_OUT("MM_UL5", "MultiMedia5 Capture", 0, 0, 0, 0),
11574 SND_SOC_DAPM_AIF_OUT("MM_UL6", "MultiMedia6 Capture", 0, 0, 0, 0),
11575 SND_SOC_DAPM_AIF_OUT("MM_UL8", "MultiMedia8 Capture", 0, 0, 0, 0),
11576 SND_SOC_DAPM_AIF_OUT("MM_UL9", "MultiMedia9 Capture", 0, 0, 0, 0),
Laxminath Kasam38070be2017-08-17 18:21:59 +053011577 SND_SOC_DAPM_AIF_OUT("MM_UL10", "MultiMedia10 Capture", 0, 0, 0, 0),
Asish Bhattacharya34504582017-08-08 12:55:01 +053011578 SND_SOC_DAPM_AIF_OUT("MM_UL16", "MultiMedia16 Capture", 0, 0, 0, 0),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053011579 SND_SOC_DAPM_AIF_OUT("MM_UL17", "MultiMedia17 Capture", 0, 0, 0, 0),
11580 SND_SOC_DAPM_AIF_OUT("MM_UL18", "MultiMedia18 Capture", 0, 0, 0, 0),
11581 SND_SOC_DAPM_AIF_OUT("MM_UL19", "MultiMedia19 Capture", 0, 0, 0, 0),
11582 SND_SOC_DAPM_AIF_OUT("MM_UL20", "MultiMedia20 Capture", 0, 0, 0, 0),
11583 SND_SOC_DAPM_AIF_IN("CS-VOICE_DL1", "CS-VOICE Playback", 0, 0, 0, 0),
11584 SND_SOC_DAPM_AIF_OUT("CS-VOICE_UL1", "CS-VOICE Capture", 0, 0, 0, 0),
11585 SND_SOC_DAPM_AIF_IN("VOICE2_DL", "Voice2 Playback", 0, 0, 0, 0),
11586 SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0),
11587 SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0),
11588 SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0),
11589 SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0),
11590 SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0),
11591 SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0),
11592 SND_SOC_DAPM_AIF_IN("VOICEMMODE1_DL",
11593 "VoiceMMode1 Playback", 0, 0, 0, 0),
11594 SND_SOC_DAPM_AIF_OUT("VOICEMMODE1_UL",
11595 "VoiceMMode1 Capture", 0, 0, 0, 0),
11596 SND_SOC_DAPM_AIF_IN("VOICEMMODE2_DL",
11597 "VoiceMMode2 Playback", 0, 0, 0, 0),
11598 SND_SOC_DAPM_AIF_OUT("VOICEMMODE2_UL",
11599 "VoiceMMode2 Capture", 0, 0, 0, 0),
11600 SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback",
11601 0, 0, 0, 0),
11602 SND_SOC_DAPM_AIF_OUT("SLIM0_UL_HL", "SLIMBUS0_HOSTLESS Capture",
11603 0, 0, 0, 0),
11604 SND_SOC_DAPM_AIF_OUT("CPE_LSM_UL_HL", "CPE LSM capture",
11605 0, 0, 0, 0),
11606 SND_SOC_DAPM_AIF_IN("SLIM1_DL_HL", "SLIMBUS1_HOSTLESS Playback",
11607 0, 0, 0, 0),
11608 SND_SOC_DAPM_AIF_OUT("SLIM1_UL_HL", "SLIMBUS1_HOSTLESS Capture",
11609 0, 0, 0, 0),
11610 SND_SOC_DAPM_AIF_IN("SLIM3_DL_HL", "SLIMBUS3_HOSTLESS Playback",
11611 0, 0, 0, 0),
11612 SND_SOC_DAPM_AIF_OUT("SLIM3_UL_HL", "SLIMBUS3_HOSTLESS Capture",
11613 0, 0, 0, 0),
11614 SND_SOC_DAPM_AIF_IN("SLIM4_DL_HL", "SLIMBUS4_HOSTLESS Playback",
11615 0, 0, 0, 0),
11616 SND_SOC_DAPM_AIF_OUT("SLIM4_UL_HL", "SLIMBUS4_HOSTLESS Capture",
11617 0, 0, 0, 0),
11618 SND_SOC_DAPM_AIF_IN("SLIM6_DL_HL", "SLIMBUS6_HOSTLESS Playback",
11619 0, 0, 0, 0),
11620 SND_SOC_DAPM_AIF_OUT("SLIM6_UL_HL", "SLIMBUS6_HOSTLESS Capture",
11621 0, 0, 0, 0),
11622 SND_SOC_DAPM_AIF_IN("SLIM7_DL_HL", "SLIMBUS7_HOSTLESS Playback",
11623 0, 0, 0, 0),
11624 SND_SOC_DAPM_AIF_OUT("SLIM7_UL_HL", "SLIMBUS7_HOSTLESS Capture",
11625 0, 0, 0, 0),
11626 SND_SOC_DAPM_AIF_IN("SLIM8_DL_HL", "SLIMBUS8_HOSTLESS Playback",
11627 0, 0, 0, 0),
11628 SND_SOC_DAPM_AIF_OUT("SLIM8_UL_HL", "SLIMBUS8_HOSTLESS Capture",
11629 0, 0, 0, 0),
11630 SND_SOC_DAPM_AIF_IN("INTFM_DL_HL", "INT_FM_HOSTLESS Playback",
11631 0, 0, 0, 0),
11632 SND_SOC_DAPM_AIF_OUT("INTFM_UL_HL", "INT_FM_HOSTLESS Capture",
11633 0, 0, 0, 0),
11634 SND_SOC_DAPM_AIF_IN("INTHFP_DL_HL", "INT_HFP_BT_HOSTLESS Playback",
11635 0, 0, 0, 0),
11636 SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture",
11637 0, 0, 0, 0),
11638 SND_SOC_DAPM_AIF_IN("USBAUDIO_DL_HL", "USBAUDIO_HOSTLESS Playback",
11639 0, 0, 0, 0),
11640 SND_SOC_DAPM_AIF_OUT("USBAUDIO_UL_HL", "USBAUDIO_HOSTLESS Capture",
11641 0, 0, 0, 0),
11642 SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0),
11643 SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback",
11644 0, 0, 0, 0),
11645 SND_SOC_DAPM_AIF_IN("INT0_MI2S_DL_HL",
11646 "INT0 MI2S_RX Hostless Playback",
11647 0, 0, 0, 0),
11648 SND_SOC_DAPM_AIF_IN("INT4_MI2S_DL_HL",
11649 "INT4 MI2S_RX Hostless Playback",
11650 0, 0, 0, 0),
11651 SND_SOC_DAPM_AIF_IN("PRI_MI2S_DL_HL",
11652 "Primary MI2S_RX Hostless Playback",
11653 0, 0, 0, 0),
11654 SND_SOC_DAPM_AIF_IN("SEC_MI2S_DL_HL",
11655 "Secondary MI2S_RX Hostless Playback",
11656 0, 0, 0, 0),
11657 SND_SOC_DAPM_AIF_IN("TERT_MI2S_DL_HL",
11658 "Tertiary MI2S_RX Hostless Playback",
11659 0, 0, 0, 0),
11660 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_DL_HL",
11661 "Quaternary MI2S_RX Hostless Playback",
11662 0, 0, 0, 0),
11663
11664 SND_SOC_DAPM_AIF_IN("AUXPCM_DL_HL", "AUXPCM_HOSTLESS Playback",
11665 0, 0, 0, 0),
11666 SND_SOC_DAPM_AIF_OUT("AUXPCM_UL_HL", "AUXPCM_HOSTLESS Capture",
11667 0, 0, 0, 0),
11668 SND_SOC_DAPM_AIF_OUT("MI2S_UL_HL", "MI2S_TX_HOSTLESS Capture",
11669 0, 0, 0, 0),
11670 SND_SOC_DAPM_AIF_OUT("INT3_MI2S_UL_HL",
11671 "INT3 MI2S_TX Hostless Capture",
11672 0, 0, 0, 0),
11673 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_UL_HL",
11674 "Tertiary MI2S_TX Hostless Capture",
11675 0, 0, 0, 0),
11676 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_UL_HL",
11677 "Secondary MI2S_TX Hostless Capture",
11678 0, 0, 0, 0),
11679 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_UL_HL",
11680 "Primary MI2S_TX Hostless Capture",
11681 0, 0, 0, 0),
11682 SND_SOC_DAPM_AIF_OUT("MI2S_DL_HL", "MI2S_RX_HOSTLESS Playback",
11683 0, 0, 0, 0),
11684 SND_SOC_DAPM_AIF_IN("DTMF_DL_HL", "DTMF_RX_HOSTLESS Playback",
11685 0, 0, 0, 0),
11686 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_UL_HL",
11687 "Quaternary MI2S_TX Hostless Capture",
11688 0, 0, 0, 0),
11689
11690 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_0_DL_HL",
11691 "Primary TDM0 Hostless Playback",
11692 0, 0, 0, 0),
11693 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_0_UL_HL",
11694 "Primary TDM0 Hostless Capture",
11695 0, 0, 0, 0),
11696 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_1_DL_HL",
11697 "Primary TDM1 Hostless Playback",
11698 0, 0, 0, 0),
11699 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_1_UL_HL",
11700 "Primary TDM1 Hostless Capture",
11701 0, 0, 0, 0),
11702 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_2_DL_HL",
11703 "Primary TDM2 Hostless Playback",
11704 0, 0, 0, 0),
11705 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_2_UL_HL",
11706 "Primary TDM2 Hostless Capture",
11707 0, 0, 0, 0),
11708 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_3_DL_HL",
11709 "Primary TDM3 Hostless Playback",
11710 0, 0, 0, 0),
11711 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_3_UL_HL",
11712 "Primary TDM3 Hostless Capture",
11713 0, 0, 0, 0),
11714 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_4_DL_HL",
11715 "Primary TDM4 Hostless Playback",
11716 0, 0, 0, 0),
11717 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_4_UL_HL",
11718 "Primary TDM4 Hostless Capture",
11719 0, 0, 0, 0),
11720 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_5_DL_HL",
11721 "Primary TDM5 Hostless Playback",
11722 0, 0, 0, 0),
11723 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_5_UL_HL",
11724 "Primary TDM5 Hostless Capture",
11725 0, 0, 0, 0),
11726 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_6_DL_HL",
11727 "Primary TDM6 Hostless Playback",
11728 0, 0, 0, 0),
11729 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_6_UL_HL",
11730 "Primary TDM6 Hostless Capture",
11731 0, 0, 0, 0),
11732 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_7_DL_HL",
11733 "Primary TDM7 Hostless Playback",
11734 0, 0, 0, 0),
11735 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_7_UL_HL",
11736 "Primary TDM7 Hostless Capture",
11737 0, 0, 0, 0),
11738 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_0_DL_HL",
11739 "Secondary TDM0 Hostless Playback",
11740 0, 0, 0, 0),
11741 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_0_UL_HL",
11742 "Secondary TDM0 Hostless Capture",
11743 0, 0, 0, 0),
11744 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_1_DL_HL",
11745 "Secondary TDM1 Hostless Playback",
11746 0, 0, 0, 0),
11747 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_1_UL_HL",
11748 "Secondary TDM1 Hostless Capture",
11749 0, 0, 0, 0),
11750 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_2_DL_HL",
11751 "Secondary TDM2 Hostless Playback",
11752 0, 0, 0, 0),
11753 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_2_UL_HL",
11754 "Secondary TDM2 Hostless Capture",
11755 0, 0, 0, 0),
11756 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_3_DL_HL",
11757 "Secondary TDM3 Hostless Playback",
11758 0, 0, 0, 0),
11759 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_3_UL_HL",
11760 "Secondary TDM3 Hostless Capture",
11761 0, 0, 0, 0),
11762 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_4_DL_HL",
11763 "Secondary TDM4 Hostless Playback",
11764 0, 0, 0, 0),
11765 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_4_UL_HL",
11766 "Secondary TDM4 Hostless Capture",
11767 0, 0, 0, 0),
11768 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_5_DL_HL",
11769 "Secondary TDM5 Hostless Playback",
11770 0, 0, 0, 0),
11771 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_5_UL_HL",
11772 "Secondary TDM5 Hostless Capture",
11773 0, 0, 0, 0),
11774 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_6_DL_HL",
11775 "Secondary TDM6 Hostless Playback",
11776 0, 0, 0, 0),
11777 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_6_UL_HL",
11778 "Secondary TDM6 Hostless Capture",
11779 0, 0, 0, 0),
11780 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_7_DL_HL",
11781 "Secondary TDM7 Hostless Playback",
11782 0, 0, 0, 0),
11783 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_7_UL_HL",
11784 "Secondary TDM7 Hostless Capture",
11785 0, 0, 0, 0),
11786 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_0_DL_HL",
11787 "Tertiary TDM0 Hostless Playback",
11788 0, 0, 0, 0),
11789 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_0_UL_HL",
11790 "Tertiary TDM0 Hostless Capture",
11791 0, 0, 0, 0),
11792 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_1_DL_HL",
11793 "Tertiary TDM1 Hostless Playback",
11794 0, 0, 0, 0),
11795 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_1_UL_HL",
11796 "Tertiary TDM1 Hostless Capture",
11797 0, 0, 0, 0),
11798 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_2_DL_HL",
11799 "Tertiary TDM2 Hostless Playback",
11800 0, 0, 0, 0),
11801 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_2_UL_HL",
11802 "Tertiary TDM2 Hostless Capture",
11803 0, 0, 0, 0),
11804 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_3_DL_HL",
11805 "Tertiary TDM3 Hostless Playback",
11806 0, 0, 0, 0),
11807 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_3_UL_HL",
11808 "Tertiary TDM3 Hostless Capture",
11809 0, 0, 0, 0),
11810 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_4_DL_HL",
11811 "Tertiary TDM4 Hostless Playback",
11812 0, 0, 0, 0),
11813 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_4_UL_HL",
11814 "Tertiary TDM4 Hostless Capture",
11815 0, 0, 0, 0),
11816 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_5_DL_HL",
11817 "Tertiary TDM5 Hostless Playback",
11818 0, 0, 0, 0),
11819 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_5_UL_HL",
11820 "Tertiary TDM5 Hostless Capture",
11821 0, 0, 0, 0),
11822 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_6_DL_HL",
11823 "Tertiary TDM6 Hostless Playback",
11824 0, 0, 0, 0),
11825 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_6_UL_HL",
11826 "Tertiary TDM6 Hostless Capture",
11827 0, 0, 0, 0),
11828 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_7_DL_HL",
11829 "Tertiary TDM7 Hostless Playback",
11830 0, 0, 0, 0),
11831 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_7_UL_HL",
11832 "Tertiary TDM7 Hostless Capture",
11833 0, 0, 0, 0),
11834 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_0_DL_HL",
11835 "Quaternary TDM0 Hostless Playback",
11836 0, 0, 0, 0),
11837 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_0_UL_HL",
11838 "Quaternary TDM0 Hostless Capture",
11839 0, 0, 0, 0),
11840 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_1_DL_HL",
11841 "Quaternary TDM1 Hostless Playback",
11842 0, 0, 0, 0),
11843 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_1_UL_HL",
11844 "Quaternary TDM1 Hostless Capture",
11845 0, 0, 0, 0),
11846 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_2_DL_HL",
11847 "Quaternary TDM2 Hostless Playback",
11848 0, 0, 0, 0),
11849 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_2_UL_HL",
11850 "Quaternary TDM2 Hostless Capture",
11851 0, 0, 0, 0),
11852 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_3_DL_HL",
11853 "Quaternary TDM3 Hostless Playback",
11854 0, 0, 0, 0),
11855 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_3_UL_HL",
11856 "Quaternary TDM3 Hostless Capture",
11857 0, 0, 0, 0),
11858 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_4_DL_HL",
11859 "Quaternary TDM4 Hostless Playback",
11860 0, 0, 0, 0),
11861 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_4_UL_HL",
11862 "Quaternary TDM4 Hostless Capture",
11863 0, 0, 0, 0),
11864 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_5_DL_HL",
11865 "Quaternary TDM5 Hostless Playback",
11866 0, 0, 0, 0),
11867 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_5_UL_HL",
11868 "Quaternary TDM5 Hostless Capture",
11869 0, 0, 0, 0),
11870 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_6_DL_HL",
11871 "Quaternary TDM6 Hostless Playback",
11872 0, 0, 0, 0),
11873 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_6_UL_HL",
11874 "Quaternary TDM6 Hostless Capture",
11875 0, 0, 0, 0),
11876 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_7_DL_HL",
11877 "Quaternary TDM7 Hostless Playback",
11878 0, 0, 0, 0),
11879 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_7_UL_HL",
11880 "Quaternary TDM7 Hostless Capture",
11881 0, 0, 0, 0),
11882
11883 /* LSM */
11884 SND_SOC_DAPM_AIF_OUT("LSM1_UL_HL", "Listen 1 Audio Service Capture",
11885 0, 0, 0, 0),
11886 SND_SOC_DAPM_AIF_OUT("LSM2_UL_HL", "Listen 2 Audio Service Capture",
11887 0, 0, 0, 0),
11888 SND_SOC_DAPM_AIF_OUT("LSM3_UL_HL", "Listen 3 Audio Service Capture",
11889 0, 0, 0, 0),
11890 SND_SOC_DAPM_AIF_OUT("LSM4_UL_HL", "Listen 4 Audio Service Capture",
11891 0, 0, 0, 0),
11892 SND_SOC_DAPM_AIF_OUT("LSM5_UL_HL", "Listen 5 Audio Service Capture",
11893 0, 0, 0, 0),
11894 SND_SOC_DAPM_AIF_OUT("LSM6_UL_HL", "Listen 6 Audio Service Capture",
11895 0, 0, 0, 0),
11896 SND_SOC_DAPM_AIF_OUT("LSM7_UL_HL", "Listen 7 Audio Service Capture",
11897 0, 0, 0, 0),
11898 SND_SOC_DAPM_AIF_OUT("LSM8_UL_HL", "Listen 8 Audio Service Capture",
11899 0, 0, 0, 0),
11900 SND_SOC_DAPM_AIF_IN("QCHAT_DL", "QCHAT Playback", 0, 0, 0, 0),
11901 SND_SOC_DAPM_AIF_OUT("QCHAT_UL", "QCHAT Capture", 0, 0, 0, 0),
11902 /* Backend AIF */
11903 /* Stream name equals to backend dai link stream name */
11904 SND_SOC_DAPM_AIF_OUT("PRI_I2S_RX", "Primary I2S Playback", 0, 0, 0, 0),
11905 SND_SOC_DAPM_AIF_OUT("SEC_I2S_RX", "Secondary I2S Playback",
11906 0, 0, 0, 0),
11907 SND_SOC_DAPM_AIF_OUT("SPDIF_RX", "SPDIF Playback", 0, 0, 0, 0),
11908 SND_SOC_DAPM_AIF_OUT("SLIMBUS_0_RX", "Slimbus Playback", 0, 0, 0, 0),
11909 SND_SOC_DAPM_AIF_OUT("SLIMBUS_2_RX", "Slimbus2 Playback", 0, 0, 0, 0),
11910 SND_SOC_DAPM_AIF_OUT("SLIMBUS_5_RX", "Slimbus5 Playback", 0, 0, 0, 0),
11911 SND_SOC_DAPM_AIF_OUT("HDMI", "HDMI Playback", 0, 0, 0, 0),
11912 SND_SOC_DAPM_AIF_OUT("DISPLAY_PORT", "Display Port Playback",
11913 0, 0, 0, 0),
11914 SND_SOC_DAPM_AIF_OUT("MI2S_RX", "MI2S Playback", 0, 0, 0, 0),
11915 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_RX", "Quaternary MI2S Playback",
11916 0, 0, 0, 0),
11917 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_RX", "Tertiary MI2S Playback",
11918 0, 0, 0, 0),
11919 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX", "Secondary MI2S Playback",
11920 0, 0, 0, 0),
11921 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX_SD1",
11922 "Secondary MI2S Playback SD1",
11923 0, 0, 0, 0),
11924 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback",
11925 0, 0, 0, 0),
11926 SND_SOC_DAPM_AIF_OUT("INT0_MI2S_RX", "INT0 MI2S Playback",
11927 0, 0, 0, 0),
11928 SND_SOC_DAPM_AIF_OUT("INT4_MI2S_RX", "INT4 MI2S Playback",
11929 0, 0, 0, 0),
11930 SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary MI2S Playback",
11931 0, 0, 0, 0),
11932 SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0),
11933 SND_SOC_DAPM_AIF_IN("MI2S_TX", "MI2S Capture", 0, 0, 0, 0),
11934 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_TX", "Quaternary MI2S Capture",
11935 0, 0, 0, 0),
11936 SND_SOC_DAPM_AIF_IN("PRI_MI2S_TX", "Primary MI2S Capture",
11937 0, 0, 0, 0),
11938 SND_SOC_DAPM_AIF_IN("TERT_MI2S_TX", "Tertiary MI2S Capture",
11939 0, 0, 0, 0),
11940 SND_SOC_DAPM_AIF_IN("INT2_MI2S_TX", "INT2 MI2S Capture",
11941 0, 0, 0, 0),
11942 SND_SOC_DAPM_AIF_IN("INT3_MI2S_TX", "INT3 MI2S Capture",
11943 0, 0, 0, 0),
11944 SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture",
11945 0, 0, 0, 0),
11946 SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0),
11947 SND_SOC_DAPM_AIF_IN("SLIMBUS_2_TX", "Slimbus2 Capture", 0, 0, 0, 0),
11948 SND_SOC_DAPM_AIF_IN("QUIN_MI2S_TX", "Quinary MI2S Capture",
11949 0, 0, 0, 0),
11950 SND_SOC_DAPM_AIF_IN("SENARY_MI2S_TX", "Senary MI2S Capture",
11951 0, 0, 0, 0),
11952 SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback",
11953 0, 0, 0, 0),
11954 SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture",
11955 0, 0, 0, 0),
11956 SND_SOC_DAPM_AIF_OUT("INT_BT_A2DP_RX", "Internal BT-A2DP Playback",
11957 0, 0, 0, 0),
11958 SND_SOC_DAPM_AIF_OUT("INT_FM_RX", "Internal FM Playback",
11959 0, 0, 0, 0),
11960 SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture",
11961 0, 0, 0, 0),
11962 SND_SOC_DAPM_AIF_OUT("PCM_RX", "AFE Playback",
11963 0, 0, 0, 0),
11964 SND_SOC_DAPM_AIF_IN("PCM_TX", "AFE Capture",
11965 0, 0, 0, 0),
11966 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_0", "Primary TDM0 Playback",
11967 0, 0, 0, 0),
11968 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_0", "Primary TDM0 Capture",
11969 0, 0, 0, 0),
11970 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_1", "Primary TDM1 Playback",
11971 0, 0, 0, 0),
11972 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_1", "Primary TDM1 Capture",
11973 0, 0, 0, 0),
11974 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_2", "Primary TDM2 Playback",
11975 0, 0, 0, 0),
11976 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_2", "Primary TDM2 Capture",
11977 0, 0, 0, 0),
11978 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_3", "Primary TDM3 Playback",
11979 0, 0, 0, 0),
11980 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_3", "Primary TDM3 Capture",
11981 0, 0, 0, 0),
11982 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_4", "Primary TDM4 Playback",
11983 0, 0, 0, 0),
11984 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_4", "Primary TDM4 Capture",
11985 0, 0, 0, 0),
11986 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_5", "Primary TDM5 Playback",
11987 0, 0, 0, 0),
11988 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_5", "Primary TDM5 Capture",
11989 0, 0, 0, 0),
11990 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_6", "Primary TDM6 Playback",
11991 0, 0, 0, 0),
11992 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_6", "Primary TDM6 Capture",
11993 0, 0, 0, 0),
11994 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_7", "Primary TDM7 Playback",
11995 0, 0, 0, 0),
11996 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_7", "Primary TDM7 Capture",
11997 0, 0, 0, 0),
11998 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_0", "Secondary TDM0 Playback",
11999 0, 0, 0, 0),
12000 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_0", "Secondary TDM0 Capture",
12001 0, 0, 0, 0),
12002 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_1", "Secondary TDM1 Playback",
12003 0, 0, 0, 0),
12004 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_1", "Secondary TDM1 Capture",
12005 0, 0, 0, 0),
12006 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_2", "Secondary TDM2 Playback",
12007 0, 0, 0, 0),
12008 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_2", "Secondary TDM2 Capture",
12009 0, 0, 0, 0),
12010 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_3", "Secondary TDM3 Playback",
12011 0, 0, 0, 0),
12012 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_3", "Secondary TDM3 Capture",
12013 0, 0, 0, 0),
12014 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_4", "Secondary TDM4 Playback",
12015 0, 0, 0, 0),
12016 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_4", "Secondary TDM4 Capture",
12017 0, 0, 0, 0),
12018 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_5", "Secondary TDM5 Playback",
12019 0, 0, 0, 0),
12020 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_5", "Secondary TDM5 Capture",
12021 0, 0, 0, 0),
12022 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_6", "Secondary TDM6 Playback",
12023 0, 0, 0, 0),
12024 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_6", "Secondary TDM6 Capture",
12025 0, 0, 0, 0),
12026 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_7", "Secondary TDM7 Playback",
12027 0, 0, 0, 0),
12028 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_7", "Secondary TDM7 Capture",
12029 0, 0, 0, 0),
12030 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_0", "Tertiary TDM0 Playback",
12031 0, 0, 0, 0),
12032 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_0", "Tertiary TDM0 Capture",
12033 0, 0, 0, 0),
12034 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_1", "Tertiary TDM1 Playback",
12035 0, 0, 0, 0),
12036 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_1", "Tertiary TDM1 Capture",
12037 0, 0, 0, 0),
12038 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_2", "Tertiary TDM2 Playback",
12039 0, 0, 0, 0),
12040 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_2", "Tertiary TDM2 Capture",
12041 0, 0, 0, 0),
12042 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_3", "Tertiary TDM3 Playback",
12043 0, 0, 0, 0),
12044 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_3", "Tertiary TDM3 Capture",
12045 0, 0, 0, 0),
12046 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_4", "Tertiary TDM4 Playback",
12047 0, 0, 0, 0),
12048 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_4", "Tertiary TDM4 Capture",
12049 0, 0, 0, 0),
12050 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_5", "Tertiary TDM5 Playback",
12051 0, 0, 0, 0),
12052 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_5", "Tertiary TDM5 Capture",
12053 0, 0, 0, 0),
12054 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_6", "Tertiary TDM6 Playback",
12055 0, 0, 0, 0),
12056 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_6", "Tertiary TDM6 Capture",
12057 0, 0, 0, 0),
12058 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_7", "Tertiary TDM7 Playback",
12059 0, 0, 0, 0),
12060 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_7", "Tertiary TDM7 Capture",
12061 0, 0, 0, 0),
12062 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_0", "Quaternary TDM0 Playback",
12063 0, 0, 0, 0),
12064 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_0", "Quaternary TDM0 Capture",
12065 0, 0, 0, 0),
12066 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_1", "Quaternary TDM1 Playback",
12067 0, 0, 0, 0),
12068 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_1", "Quaternary TDM1 Capture",
12069 0, 0, 0, 0),
12070 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_2", "Quaternary TDM2 Playback",
12071 0, 0, 0, 0),
12072 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_2", "Quaternary TDM2 Capture",
12073 0, 0, 0, 0),
12074 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_3", "Quaternary TDM3 Playback",
12075 0, 0, 0, 0),
12076 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_3", "Quaternary TDM3 Capture",
12077 0, 0, 0, 0),
12078 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_4", "Quaternary TDM4 Playback",
12079 0, 0, 0, 0),
12080 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_4", "Quaternary TDM4 Capture",
12081 0, 0, 0, 0),
12082 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_5", "Quaternary TDM5 Playback",
12083 0, 0, 0, 0),
12084 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_5", "Quaternary TDM5 Capture",
12085 0, 0, 0, 0),
12086 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_6", "Quaternary TDM6 Playback",
12087 0, 0, 0, 0),
12088 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_6", "Quaternary TDM6 Capture",
12089 0, 0, 0, 0),
12090 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_7", "Quaternary TDM7 Playback",
12091 0, 0, 0, 0),
12092 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_7", "Quaternary TDM7 Capture",
12093 0, 0, 0, 0),
12094 /* incall */
12095 SND_SOC_DAPM_AIF_OUT("VOICE_PLAYBACK_TX", "Voice Farend Playback",
12096 0, 0, 0, 0),
12097 SND_SOC_DAPM_AIF_OUT("VOICE2_PLAYBACK_TX", "Voice2 Farend Playback",
12098 0, 0, 0, 0),
12099 SND_SOC_DAPM_AIF_OUT("SLIMBUS_4_RX", "Slimbus4 Playback",
12100 0, 0, 0, 0),
12101 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_TX", "Voice Uplink Capture",
12102 0, 0, 0, 0),
12103 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_RX", "Voice Downlink Capture",
12104 0, 0, 0, 0),
12105 SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture",
12106 0, 0, 0, 0),
12107 SND_SOC_DAPM_AIF_IN("SENARY_TX", "Senary_mi2s Capture",
12108 0, 0, 0, 0),
12109 SND_SOC_DAPM_AIF_IN("INT5_MI2S_TX", "INT5 MI2S Capture",
12110 0, 0, 0, 0),
12111 SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0),
12112
12113 SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0),
12114 SND_SOC_DAPM_AIF_IN("AUX_PCM_TX", "AUX PCM Capture", 0, 0, 0, 0),
12115 SND_SOC_DAPM_AIF_OUT("SEC_AUX_PCM_RX", "Sec AUX PCM Playback",
12116 0, 0, 0, 0),
12117 SND_SOC_DAPM_AIF_IN("SEC_AUX_PCM_TX", "Sec AUX PCM Capture",
12118 0, 0, 0, 0),
12119 SND_SOC_DAPM_AIF_OUT("TERT_AUX_PCM_RX", "Tert AUX PCM Playback",
12120 0, 0, 0, 0),
12121 SND_SOC_DAPM_AIF_IN("TERT_AUX_PCM_TX", "Tert AUX PCM Capture",
12122 0, 0, 0, 0),
12123 SND_SOC_DAPM_AIF_OUT("QUAT_AUX_PCM_RX", "Quat AUX PCM Playback",
12124 0, 0, 0, 0),
12125 SND_SOC_DAPM_AIF_IN("QUAT_AUX_PCM_TX", "Quat AUX PCM Capture",
12126 0, 0, 0, 0),
12127 SND_SOC_DAPM_AIF_IN("VOICE_STUB_DL", "VOICE_STUB Playback", 0, 0, 0, 0),
12128 SND_SOC_DAPM_AIF_OUT("VOICE_STUB_UL", "VOICE_STUB Capture", 0, 0, 0, 0),
12129 SND_SOC_DAPM_AIF_IN("VOICE2_STUB_DL", "VOICE2_STUB Playback",
12130 0, 0, 0, 0),
12131 SND_SOC_DAPM_AIF_OUT("VOICE2_STUB_UL", "VOICE2_STUB Capture",
12132 0, 0, 0, 0),
12133 SND_SOC_DAPM_AIF_IN("VOLTE_STUB_DL", "VOLTE_STUB Playback", 0, 0, 0, 0),
12134 SND_SOC_DAPM_AIF_OUT("VOLTE_STUB_UL", "VOLTE_STUB Capture", 0, 0, 0, 0),
12135 SND_SOC_DAPM_AIF_OUT("STUB_RX", "Stub Playback", 0, 0, 0, 0),
12136 SND_SOC_DAPM_AIF_IN("STUB_TX", "Stub Capture", 0, 0, 0, 0),
12137 SND_SOC_DAPM_AIF_OUT("SLIMBUS_1_RX", "Slimbus1 Playback", 0, 0, 0, 0),
12138 SND_SOC_DAPM_AIF_IN("SLIMBUS_1_TX", "Slimbus1 Capture", 0, 0, 0, 0),
12139 SND_SOC_DAPM_AIF_IN("STUB_1_TX", "Stub1 Capture", 0, 0, 0, 0),
12140 SND_SOC_DAPM_AIF_OUT("SLIMBUS_3_RX", "Slimbus3 Playback", 0, 0, 0, 0),
12141 SND_SOC_DAPM_AIF_IN("SLIMBUS_3_TX", "Slimbus3 Capture", 0, 0, 0, 0),
12142 /* In- call recording */
12143 SND_SOC_DAPM_AIF_OUT("SLIMBUS_6_RX", "Slimbus6 Playback", 0, 0, 0, 0),
12144 SND_SOC_DAPM_AIF_IN("SLIMBUS_6_TX", "Slimbus6 Capture", 0, 0, 0, 0),
12145
12146 SND_SOC_DAPM_AIF_OUT("SLIMBUS_7_RX", "Slimbus7 Playback", 0, 0, 0, 0),
12147 SND_SOC_DAPM_AIF_IN("SLIMBUS_7_TX", "Slimbus7 Capture", 0, 0, 0, 0),
12148
12149 SND_SOC_DAPM_AIF_OUT("SLIMBUS_8_RX", "Slimbus8 Playback", 0, 0, 0, 0),
12150 SND_SOC_DAPM_AIF_IN("SLIMBUS_8_TX", "Slimbus8 Capture", 0, 0, 0, 0),
12151 SND_SOC_DAPM_AIF_OUT("USB_AUDIO_RX", "USB Audio Playback", 0, 0, 0, 0),
12152 SND_SOC_DAPM_AIF_IN("USB_AUDIO_TX", "USB Audio Capture", 0, 0, 0, 0),
12153
12154 /* Switch Definitions */
12155 SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0,
12156 &slim_fm_switch_mixer_controls),
12157 SND_SOC_DAPM_SWITCH("SLIMBUS1_DL_HL", SND_SOC_NOPM, 0, 0,
12158 &slim1_fm_switch_mixer_controls),
12159 SND_SOC_DAPM_SWITCH("SLIMBUS3_DL_HL", SND_SOC_NOPM, 0, 0,
12160 &slim3_fm_switch_mixer_controls),
12161 SND_SOC_DAPM_SWITCH("SLIMBUS4_DL_HL", SND_SOC_NOPM, 0, 0,
12162 &slim4_fm_switch_mixer_controls),
12163 SND_SOC_DAPM_SWITCH("SLIMBUS6_DL_HL", SND_SOC_NOPM, 0, 0,
12164 &slim6_fm_switch_mixer_controls),
12165 SND_SOC_DAPM_SWITCH("PCM_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12166 &pcm_rx_switch_mixer_controls),
12167 SND_SOC_DAPM_SWITCH("INT0_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12168 &int0_mi2s_rx_switch_mixer_controls),
12169 SND_SOC_DAPM_SWITCH("INT4_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12170 &int4_mi2s_rx_switch_mixer_controls),
12171 SND_SOC_DAPM_SWITCH("PRI_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12172 &pri_mi2s_rx_switch_mixer_controls),
12173 SND_SOC_DAPM_SWITCH("SEC_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12174 &sec_mi2s_rx_switch_mixer_controls),
12175 SND_SOC_DAPM_SWITCH("TERT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12176 &tert_mi2s_rx_switch_mixer_controls),
12177 SND_SOC_DAPM_SWITCH("QUAT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12178 &quat_mi2s_rx_switch_mixer_controls),
12179 SND_SOC_DAPM_SWITCH("HFP_PRI_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
12180 &hfp_pri_aux_switch_mixer_controls),
12181 SND_SOC_DAPM_SWITCH("HFP_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
12182 &hfp_aux_switch_mixer_controls),
12183 SND_SOC_DAPM_SWITCH("HFP_INT_UL_HL", SND_SOC_NOPM, 0, 0,
12184 &hfp_int_switch_mixer_controls),
12185 SND_SOC_DAPM_SWITCH("HFP_SLIM7_UL_HL", SND_SOC_NOPM, 0, 0,
12186 &hfp_slim7_switch_mixer_controls),
12187 SND_SOC_DAPM_SWITCH("USB_DL_HL", SND_SOC_NOPM, 0, 0,
12188 &usb_switch_mixer_controls),
12189
12190 /* Mixer definitions */
12191 SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12192 pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)),
12193 SND_SOC_DAPM_MIXER("SEC_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12194 sec_i2s_rx_mixer_controls, ARRAY_SIZE(sec_i2s_rx_mixer_controls)),
12195 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12196 slimbus_rx_mixer_controls, ARRAY_SIZE(slimbus_rx_mixer_controls)),
12197 SND_SOC_DAPM_MIXER("SLIMBUS_2_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12198 slimbus_2_rx_mixer_controls, ARRAY_SIZE(slimbus_2_rx_mixer_controls)),
12199 SND_SOC_DAPM_MIXER("SLIMBUS_5_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12200 slimbus_5_rx_mixer_controls, ARRAY_SIZE(slimbus_5_rx_mixer_controls)),
12201 SND_SOC_DAPM_MIXER("SLIMBUS_7_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12202 slimbus_7_rx_mixer_controls, ARRAY_SIZE(slimbus_7_rx_mixer_controls)),
12203 SND_SOC_DAPM_MIXER("HDMI Mixer", SND_SOC_NOPM, 0, 0,
12204 hdmi_mixer_controls, ARRAY_SIZE(hdmi_mixer_controls)),
12205 SND_SOC_DAPM_MIXER("DISPLAY_PORT Mixer", SND_SOC_NOPM, 0, 0,
12206 display_port_mixer_controls, ARRAY_SIZE(display_port_mixer_controls)),
12207 SND_SOC_DAPM_MIXER("SPDIF_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12208 spdif_rx_mixer_controls, ARRAY_SIZE(spdif_rx_mixer_controls)),
12209 SND_SOC_DAPM_MIXER("MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12210 mi2s_rx_mixer_controls, ARRAY_SIZE(mi2s_rx_mixer_controls)),
12211 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12212 quaternary_mi2s_rx_mixer_controls,
12213 ARRAY_SIZE(quaternary_mi2s_rx_mixer_controls)),
12214 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12215 tertiary_mi2s_rx_mixer_controls,
12216 ARRAY_SIZE(tertiary_mi2s_rx_mixer_controls)),
12217 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12218 secondary_mi2s_rx_mixer_controls,
12219 ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)),
12220 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_SD1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12221 secondary_mi2s_rx2_mixer_controls,
12222 ARRAY_SIZE(secondary_mi2s_rx2_mixer_controls)),
12223 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12224 primary_mi2s_rx_mixer_controls,
12225 ARRAY_SIZE(primary_mi2s_rx_mixer_controls)),
12226 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12227 int0_mi2s_rx_mixer_controls,
12228 ARRAY_SIZE(int0_mi2s_rx_mixer_controls)),
12229 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12230 int4_mi2s_rx_mixer_controls,
12231 ARRAY_SIZE(int4_mi2s_rx_mixer_controls)),
12232 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12233 quinary_mi2s_rx_mixer_controls,
12234 ARRAY_SIZE(quinary_mi2s_rx_mixer_controls)),
12235 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12236 pri_tdm_rx_0_mixer_controls,
12237 ARRAY_SIZE(pri_tdm_rx_0_mixer_controls)),
12238 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12239 pri_tdm_rx_1_mixer_controls,
12240 ARRAY_SIZE(pri_tdm_rx_1_mixer_controls)),
12241 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12242 pri_tdm_rx_2_mixer_controls,
12243 ARRAY_SIZE(pri_tdm_rx_2_mixer_controls)),
12244 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12245 pri_tdm_rx_3_mixer_controls,
12246 ARRAY_SIZE(pri_tdm_rx_3_mixer_controls)),
12247 SND_SOC_DAPM_MIXER("PRI_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12248 pri_tdm_tx_0_mixer_controls,
12249 ARRAY_SIZE(pri_tdm_tx_0_mixer_controls)),
12250 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12251 sec_tdm_rx_0_mixer_controls,
12252 ARRAY_SIZE(sec_tdm_rx_0_mixer_controls)),
12253 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12254 sec_tdm_rx_1_mixer_controls,
12255 ARRAY_SIZE(sec_tdm_rx_1_mixer_controls)),
12256 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12257 sec_tdm_rx_2_mixer_controls,
12258 ARRAY_SIZE(sec_tdm_rx_2_mixer_controls)),
12259 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12260 sec_tdm_rx_3_mixer_controls,
12261 ARRAY_SIZE(sec_tdm_rx_3_mixer_controls)),
12262 SND_SOC_DAPM_MIXER("SEC_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12263 sec_tdm_tx_0_mixer_controls,
12264 ARRAY_SIZE(sec_tdm_tx_0_mixer_controls)),
12265 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12266 tert_tdm_rx_0_mixer_controls,
12267 ARRAY_SIZE(tert_tdm_rx_0_mixer_controls)),
12268 SND_SOC_DAPM_MIXER("TERT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12269 tert_tdm_tx_0_mixer_controls,
12270 ARRAY_SIZE(tert_tdm_tx_0_mixer_controls)),
12271 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12272 tert_tdm_rx_1_mixer_controls,
12273 ARRAY_SIZE(tert_tdm_rx_1_mixer_controls)),
12274 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12275 tert_tdm_rx_2_mixer_controls,
12276 ARRAY_SIZE(tert_tdm_rx_2_mixer_controls)),
12277 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12278 tert_tdm_rx_3_mixer_controls,
12279 ARRAY_SIZE(tert_tdm_rx_3_mixer_controls)),
12280 SND_SOC_DAPM_MIXER("TERT_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
12281 tert_tdm_rx_4_mixer_controls,
12282 ARRAY_SIZE(tert_tdm_rx_4_mixer_controls)),
12283 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12284 quat_tdm_rx_0_mixer_controls,
12285 ARRAY_SIZE(quat_tdm_rx_0_mixer_controls)),
12286 SND_SOC_DAPM_MIXER("QUAT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12287 quat_tdm_tx_0_mixer_controls,
12288 ARRAY_SIZE(quat_tdm_tx_0_mixer_controls)),
12289 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12290 quat_tdm_rx_1_mixer_controls,
12291 ARRAY_SIZE(quat_tdm_rx_1_mixer_controls)),
12292 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12293 quat_tdm_rx_2_mixer_controls,
12294 ARRAY_SIZE(quat_tdm_rx_2_mixer_controls)),
12295 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12296 quat_tdm_rx_3_mixer_controls,
12297 ARRAY_SIZE(quat_tdm_rx_3_mixer_controls)),
12298 SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
12299 mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
12300 SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
12301 mmul2_mixer_controls, ARRAY_SIZE(mmul2_mixer_controls)),
12302 SND_SOC_DAPM_MIXER("MultiMedia3 Mixer", SND_SOC_NOPM, 0, 0,
12303 mmul3_mixer_controls, ARRAY_SIZE(mmul3_mixer_controls)),
12304 SND_SOC_DAPM_MIXER("MultiMedia4 Mixer", SND_SOC_NOPM, 0, 0,
12305 mmul4_mixer_controls, ARRAY_SIZE(mmul4_mixer_controls)),
12306 SND_SOC_DAPM_MIXER("MultiMedia5 Mixer", SND_SOC_NOPM, 0, 0,
12307 mmul5_mixer_controls, ARRAY_SIZE(mmul5_mixer_controls)),
12308 SND_SOC_DAPM_MIXER("MultiMedia6 Mixer", SND_SOC_NOPM, 0, 0,
12309 mmul6_mixer_controls, ARRAY_SIZE(mmul6_mixer_controls)),
12310 SND_SOC_DAPM_MIXER("MultiMedia8 Mixer", SND_SOC_NOPM, 0, 0,
12311 mmul8_mixer_controls, ARRAY_SIZE(mmul8_mixer_controls)),
12312 SND_SOC_DAPM_MIXER("MultiMedia9 Mixer", SND_SOC_NOPM, 0, 0,
12313 mmul9_mixer_controls, ARRAY_SIZE(mmul9_mixer_controls)),
Laxminath Kasam38070be2017-08-17 18:21:59 +053012314 SND_SOC_DAPM_MIXER("MultiMedia10 Mixer", SND_SOC_NOPM, 0, 0,
12315 mmul10_mixer_controls, ARRAY_SIZE(mmul10_mixer_controls)),
Asish Bhattacharya34504582017-08-08 12:55:01 +053012316 SND_SOC_DAPM_MIXER("MultiMedia16 Mixer", SND_SOC_NOPM, 0, 0,
12317 mmul16_mixer_controls, ARRAY_SIZE(mmul16_mixer_controls)),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012318 SND_SOC_DAPM_MIXER("MultiMedia17 Mixer", SND_SOC_NOPM, 0, 0,
12319 mmul17_mixer_controls, ARRAY_SIZE(mmul17_mixer_controls)),
12320 SND_SOC_DAPM_MIXER("MultiMedia18 Mixer", SND_SOC_NOPM, 0, 0,
12321 mmul18_mixer_controls, ARRAY_SIZE(mmul18_mixer_controls)),
12322 SND_SOC_DAPM_MIXER("MultiMedia19 Mixer", SND_SOC_NOPM, 0, 0,
12323 mmul19_mixer_controls, ARRAY_SIZE(mmul19_mixer_controls)),
12324 SND_SOC_DAPM_MIXER("MultiMedia20 Mixer", SND_SOC_NOPM, 0, 0,
12325 mmul20_mixer_controls, ARRAY_SIZE(mmul20_mixer_controls)),
12326 SND_SOC_DAPM_MIXER("AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12327 auxpcm_rx_mixer_controls, ARRAY_SIZE(auxpcm_rx_mixer_controls)),
12328 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12329 sec_auxpcm_rx_mixer_controls, ARRAY_SIZE(sec_auxpcm_rx_mixer_controls)),
12330 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12331 tert_auxpcm_rx_mixer_controls,
12332 ARRAY_SIZE(tert_auxpcm_rx_mixer_controls)),
12333 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12334 quat_auxpcm_rx_mixer_controls,
12335 ARRAY_SIZE(quat_auxpcm_rx_mixer_controls)),
12336 /* incall */
12337 SND_SOC_DAPM_MIXER("Incall_Music Audio Mixer", SND_SOC_NOPM, 0, 0,
12338 incall_music_delivery_mixer_controls,
12339 ARRAY_SIZE(incall_music_delivery_mixer_controls)),
12340 SND_SOC_DAPM_MIXER("Incall_Music_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12341 incall_music2_delivery_mixer_controls,
12342 ARRAY_SIZE(incall_music2_delivery_mixer_controls)),
12343 SND_SOC_DAPM_MIXER("SLIMBUS_4_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12344 slimbus_4_rx_mixer_controls,
12345 ARRAY_SIZE(slimbus_4_rx_mixer_controls)),
12346 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12347 slimbus_6_rx_mixer_controls,
12348 ARRAY_SIZE(slimbus_6_rx_mixer_controls)),
12349 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12350 usb_audio_rx_mixer_controls,
12351 ARRAY_SIZE(usb_audio_rx_mixer_controls)),
12352 /* Voice Mixer */
12353 SND_SOC_DAPM_MIXER("PRI_RX_Voice Mixer",
12354 SND_SOC_NOPM, 0, 0, pri_rx_voice_mixer_controls,
12355 ARRAY_SIZE(pri_rx_voice_mixer_controls)),
12356 SND_SOC_DAPM_MIXER("SEC_RX_Voice Mixer",
12357 SND_SOC_NOPM, 0, 0,
12358 sec_i2s_rx_voice_mixer_controls,
12359 ARRAY_SIZE(sec_i2s_rx_voice_mixer_controls)),
12360 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_Voice Mixer",
12361 SND_SOC_NOPM, 0, 0,
12362 sec_mi2s_rx_voice_mixer_controls,
12363 ARRAY_SIZE(sec_mi2s_rx_voice_mixer_controls)),
12364 SND_SOC_DAPM_MIXER("SLIM_0_RX_Voice Mixer",
12365 SND_SOC_NOPM, 0, 0,
12366 slimbus_rx_voice_mixer_controls,
12367 ARRAY_SIZE(slimbus_rx_voice_mixer_controls)),
12368 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX_Voice Mixer",
12369 SND_SOC_NOPM, 0, 0,
12370 bt_sco_rx_voice_mixer_controls,
12371 ARRAY_SIZE(bt_sco_rx_voice_mixer_controls)),
12372 SND_SOC_DAPM_MIXER("AFE_PCM_RX_Voice Mixer",
12373 SND_SOC_NOPM, 0, 0,
12374 afe_pcm_rx_voice_mixer_controls,
12375 ARRAY_SIZE(afe_pcm_rx_voice_mixer_controls)),
12376 SND_SOC_DAPM_MIXER("AUX_PCM_RX_Voice Mixer",
12377 SND_SOC_NOPM, 0, 0,
12378 aux_pcm_rx_voice_mixer_controls,
12379 ARRAY_SIZE(aux_pcm_rx_voice_mixer_controls)),
12380 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX_Voice Mixer",
12381 SND_SOC_NOPM, 0, 0,
12382 sec_aux_pcm_rx_voice_mixer_controls,
12383 ARRAY_SIZE(sec_aux_pcm_rx_voice_mixer_controls)),
12384 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX_Voice Mixer",
12385 SND_SOC_NOPM, 0, 0,
12386 tert_aux_pcm_rx_voice_mixer_controls,
12387 ARRAY_SIZE(tert_aux_pcm_rx_voice_mixer_controls)),
12388 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX_Voice Mixer",
12389 SND_SOC_NOPM, 0, 0,
12390 quat_aux_pcm_rx_voice_mixer_controls,
12391 ARRAY_SIZE(quat_aux_pcm_rx_voice_mixer_controls)),
12392 SND_SOC_DAPM_MIXER("HDMI_RX_Voice Mixer",
12393 SND_SOC_NOPM, 0, 0,
12394 hdmi_rx_voice_mixer_controls,
12395 ARRAY_SIZE(hdmi_rx_voice_mixer_controls)),
12396 SND_SOC_DAPM_MIXER("MI2S_RX_Voice Mixer",
12397 SND_SOC_NOPM, 0, 0,
12398 mi2s_rx_voice_mixer_controls,
12399 ARRAY_SIZE(mi2s_rx_voice_mixer_controls)),
12400 SND_SOC_DAPM_MIXER("PRI_MI2S_RX_Voice Mixer",
12401 SND_SOC_NOPM, 0, 0,
12402 pri_mi2s_rx_voice_mixer_controls,
12403 ARRAY_SIZE(pri_mi2s_rx_voice_mixer_controls)),
12404 SND_SOC_DAPM_MIXER("INT0_MI2S_RX_Voice Mixer",
12405 SND_SOC_NOPM, 0, 0,
12406 int0_mi2s_rx_voice_mixer_controls,
12407 ARRAY_SIZE(int0_mi2s_rx_voice_mixer_controls)),
12408 SND_SOC_DAPM_MIXER("INT4_MI2S_RX_Voice Mixer",
12409 SND_SOC_NOPM, 0, 0,
12410 int4_mi2s_rx_voice_mixer_controls,
12411 ARRAY_SIZE(int4_mi2s_rx_voice_mixer_controls)),
12412 SND_SOC_DAPM_MIXER("TERT_MI2S_RX_Voice Mixer",
12413 SND_SOC_NOPM, 0, 0,
12414 tert_mi2s_rx_voice_mixer_controls,
12415 ARRAY_SIZE(tert_mi2s_rx_voice_mixer_controls)),
12416 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX_Voice Mixer",
12417 SND_SOC_NOPM, 0, 0,
12418 quat_mi2s_rx_voice_mixer_controls,
12419 ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)),
12420 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX_Voice Mixer",
12421 SND_SOC_NOPM, 0, 0,
12422 quin_mi2s_rx_voice_mixer_controls,
12423 ARRAY_SIZE(quin_mi2s_rx_voice_mixer_controls)),
12424 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2_Voice Mixer",
12425 SND_SOC_NOPM, 0, 0,
12426 quat_tdm_rx_2_voice_mixer_controls,
12427 ARRAY_SIZE(quat_tdm_rx_2_voice_mixer_controls)),
12428 SND_SOC_DAPM_MIXER("Voice_Tx Mixer",
12429 SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls,
12430 ARRAY_SIZE(tx_voice_mixer_controls)),
12431 SND_SOC_DAPM_MIXER("Voice2_Tx Mixer",
12432 SND_SOC_NOPM, 0, 0, tx_voice2_mixer_controls,
12433 ARRAY_SIZE(tx_voice2_mixer_controls)),
12434 SND_SOC_DAPM_MIXER("Voip_Tx Mixer",
12435 SND_SOC_NOPM, 0, 0, tx_voip_mixer_controls,
12436 ARRAY_SIZE(tx_voip_mixer_controls)),
12437 SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer",
12438 SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls,
12439 ARRAY_SIZE(tx_volte_mixer_controls)),
12440 SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer",
12441 SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls,
12442 ARRAY_SIZE(tx_vowlan_mixer_controls)),
12443 SND_SOC_DAPM_MIXER("VoiceMMode1_Tx Mixer",
12444 SND_SOC_NOPM, 0, 0, tx_voicemmode1_mixer_controls,
12445 ARRAY_SIZE(tx_voicemmode1_mixer_controls)),
12446 SND_SOC_DAPM_MIXER("VoiceMMode2_Tx Mixer",
12447 SND_SOC_NOPM, 0, 0, tx_voicemmode2_mixer_controls,
12448 ARRAY_SIZE(tx_voicemmode2_mixer_controls)),
12449 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12450 int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)),
12451 SND_SOC_DAPM_MIXER("INTERNAL_A2DP_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12452 int_bt_a2dp_rx_mixer_controls,
12453 ARRAY_SIZE(int_bt_a2dp_rx_mixer_controls)),
12454 SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12455 int_fm_rx_mixer_controls, ARRAY_SIZE(int_fm_rx_mixer_controls)),
12456 SND_SOC_DAPM_MIXER("AFE_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12457 afe_pcm_rx_mixer_controls, ARRAY_SIZE(afe_pcm_rx_mixer_controls)),
12458 SND_SOC_DAPM_MIXER("Voice Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12459 tx_voice_stub_mixer_controls, ARRAY_SIZE(tx_voice_stub_mixer_controls)),
12460 SND_SOC_DAPM_MIXER("Voice2 Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12461 tx_voice2_stub_mixer_controls,
12462 ARRAY_SIZE(tx_voice2_stub_mixer_controls)),
12463 SND_SOC_DAPM_MIXER("VoLTE Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12464 tx_volte_stub_mixer_controls, ARRAY_SIZE(tx_volte_stub_mixer_controls)),
12465 SND_SOC_DAPM_MIXER("STUB_RX Mixer", SND_SOC_NOPM, 0, 0,
12466 stub_rx_mixer_controls, ARRAY_SIZE(stub_rx_mixer_controls)),
12467 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Mixer", SND_SOC_NOPM, 0, 0,
12468 slimbus_1_rx_mixer_controls, ARRAY_SIZE(slimbus_1_rx_mixer_controls)),
12469 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12470 slimbus_3_rx_mixer_controls, ARRAY_SIZE(slimbus_3_rx_mixer_controls)),
12471 SND_SOC_DAPM_MIXER("SLIM_6_RX_Voice Mixer",
12472 SND_SOC_NOPM, 0, 0,
12473 slimbus_6_rx_voice_mixer_controls,
12474 ARRAY_SIZE(slimbus_6_rx_voice_mixer_controls)),
12475 SND_SOC_DAPM_MIXER("SLIM_7_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12476 slimbus_7_rx_voice_mixer_controls,
12477 ARRAY_SIZE(slimbus_7_rx_voice_mixer_controls)),
12478 SND_SOC_DAPM_MIXER("SLIM_8_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12479 slimbus_8_rx_voice_mixer_controls,
12480 ARRAY_SIZE(slimbus_8_rx_voice_mixer_controls)),
12481 /* port mixer */
12482 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Port Mixer",
12483 SND_SOC_NOPM, 0, 0, sbus_0_rx_port_mixer_controls,
12484 ARRAY_SIZE(sbus_0_rx_port_mixer_controls)),
12485 SND_SOC_DAPM_MIXER("AUX_PCM_RX Port Mixer",
12486 SND_SOC_NOPM, 0, 0, aux_pcm_rx_port_mixer_controls,
12487 ARRAY_SIZE(aux_pcm_rx_port_mixer_controls)),
12488 SND_SOC_DAPM_MIXER("SEC_AUXPCM_RX Port Mixer",
12489 SND_SOC_NOPM, 0, 0, sec_auxpcm_rx_port_mixer_controls,
12490 ARRAY_SIZE(sec_auxpcm_rx_port_mixer_controls)),
12491 SND_SOC_DAPM_MIXER("TERT_AUXPCM_RX Port Mixer",
12492 SND_SOC_NOPM, 0, 0, tert_auxpcm_rx_port_mixer_controls,
12493 ARRAY_SIZE(tert_auxpcm_rx_port_mixer_controls)),
12494 SND_SOC_DAPM_MIXER("QUAT_AUXPCM_RX Port Mixer",
12495 SND_SOC_NOPM, 0, 0, quat_auxpcm_rx_port_mixer_controls,
12496 ARRAY_SIZE(quat_auxpcm_rx_port_mixer_controls)),
12497 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12498 sbus_1_rx_port_mixer_controls,
12499 ARRAY_SIZE(sbus_1_rx_port_mixer_controls)),
12500 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12501 bt_sco_rx_port_mixer_controls,
12502 ARRAY_SIZE(bt_sco_rx_port_mixer_controls)),
12503 SND_SOC_DAPM_MIXER("AFE_PCM_RX Port Mixer",
12504 SND_SOC_NOPM, 0, 0, afe_pcm_rx_port_mixer_controls,
12505 ARRAY_SIZE(afe_pcm_rx_port_mixer_controls)),
12506 SND_SOC_DAPM_MIXER("HDMI_RX Port Mixer",
12507 SND_SOC_NOPM, 0, 0, hdmi_rx_port_mixer_controls,
12508 ARRAY_SIZE(hdmi_rx_port_mixer_controls)),
12509 SND_SOC_DAPM_MIXER("DISPLAY_PORT_RX Port Mixer",
12510 SND_SOC_NOPM, 0, 0, display_port_rx_port_mixer_controls,
12511 ARRAY_SIZE(display_port_rx_port_mixer_controls)),
12512 SND_SOC_DAPM_MIXER("SEC_I2S_RX Port Mixer",
12513 SND_SOC_NOPM, 0, 0, sec_i2s_rx_port_mixer_controls,
12514 ARRAY_SIZE(sec_i2s_rx_port_mixer_controls)),
12515 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX Port Mixer",
12516 SND_SOC_NOPM, 0, 0, sbus_3_rx_port_mixer_controls,
12517 ARRAY_SIZE(sbus_3_rx_port_mixer_controls)),
12518 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Port Mixer",
12519 SND_SOC_NOPM, 0, 0, sbus_6_rx_port_mixer_controls,
12520 ARRAY_SIZE(sbus_6_rx_port_mixer_controls)),
12521 SND_SOC_DAPM_MIXER("MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12522 mi2s_rx_port_mixer_controls, ARRAY_SIZE(mi2s_rx_port_mixer_controls)),
12523 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12524 primary_mi2s_rx_port_mixer_controls,
12525 ARRAY_SIZE(primary_mi2s_rx_port_mixer_controls)),
12526 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12527 sec_mi2s_rx_port_mixer_controls,
12528 ARRAY_SIZE(sec_mi2s_rx_port_mixer_controls)),
12529 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12530 tert_mi2s_rx_port_mixer_controls,
12531 ARRAY_SIZE(tert_mi2s_rx_port_mixer_controls)),
12532 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12533 quat_mi2s_rx_port_mixer_controls,
12534 ARRAY_SIZE(quat_mi2s_rx_port_mixer_controls)),
12535 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12536 pri_tdm_rx_0_port_mixer_controls,
12537 ARRAY_SIZE(pri_tdm_rx_0_port_mixer_controls)),
12538 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12539 pri_tdm_rx_1_port_mixer_controls,
12540 ARRAY_SIZE(pri_tdm_rx_1_port_mixer_controls)),
12541 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12542 pri_tdm_rx_2_port_mixer_controls,
12543 ARRAY_SIZE(pri_tdm_rx_2_port_mixer_controls)),
12544 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12545 pri_tdm_rx_3_port_mixer_controls,
12546 ARRAY_SIZE(pri_tdm_rx_3_port_mixer_controls)),
12547 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12548 sec_tdm_rx_0_port_mixer_controls,
12549 ARRAY_SIZE(sec_tdm_rx_0_port_mixer_controls)),
12550 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12551 sec_tdm_rx_1_port_mixer_controls,
12552 ARRAY_SIZE(sec_tdm_rx_1_port_mixer_controls)),
12553 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12554 sec_tdm_rx_2_port_mixer_controls,
12555 ARRAY_SIZE(sec_tdm_rx_2_port_mixer_controls)),
12556 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12557 sec_tdm_rx_3_port_mixer_controls,
12558 ARRAY_SIZE(sec_tdm_rx_3_port_mixer_controls)),
12559 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12560 tert_tdm_rx_0_port_mixer_controls,
12561 ARRAY_SIZE(tert_tdm_rx_0_port_mixer_controls)),
12562 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12563 tert_tdm_rx_1_port_mixer_controls,
12564 ARRAY_SIZE(tert_tdm_rx_1_port_mixer_controls)),
12565 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12566 tert_tdm_rx_2_port_mixer_controls,
12567 ARRAY_SIZE(tert_tdm_rx_2_port_mixer_controls)),
12568 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12569 tert_tdm_rx_3_port_mixer_controls,
12570 ARRAY_SIZE(tert_tdm_rx_3_port_mixer_controls)),
12571 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12572 quat_tdm_rx_0_port_mixer_controls,
12573 ARRAY_SIZE(quat_tdm_rx_0_port_mixer_controls)),
12574 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12575 quat_tdm_rx_1_port_mixer_controls,
12576 ARRAY_SIZE(quat_tdm_rx_1_port_mixer_controls)),
12577 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12578 quat_tdm_rx_2_port_mixer_controls,
12579 ARRAY_SIZE(quat_tdm_rx_2_port_mixer_controls)),
12580 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12581 quat_tdm_rx_3_port_mixer_controls,
12582 ARRAY_SIZE(quat_tdm_rx_3_port_mixer_controls)),
12583 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12584 int0_mi2s_rx_port_mixer_controls,
12585 ARRAY_SIZE(int0_mi2s_rx_port_mixer_controls)),
12586 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12587 int4_mi2s_rx_port_mixer_controls,
12588 ARRAY_SIZE(int4_mi2s_rx_port_mixer_controls)),
12589 SND_SOC_DAPM_MIXER("QCHAT_Tx Mixer",
12590 SND_SOC_NOPM, 0, 0, tx_qchat_mixer_controls,
12591 ARRAY_SIZE(tx_qchat_mixer_controls)),
12592 SND_SOC_DAPM_MIXER("USB_AUDIO_RX_Voice Mixer",
12593 SND_SOC_NOPM, 0, 0, usb_audio_rx_voice_mixer_controls,
12594 ARRAY_SIZE(usb_audio_rx_voice_mixer_controls)),
12595 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer",
12596 SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls,
12597 ARRAY_SIZE(usb_rx_port_mixer_controls)),
12598 /* lsm mixer definitions */
12599 SND_SOC_DAPM_MIXER("LSM1 Mixer", SND_SOC_NOPM, 0, 0,
12600 lsm1_mixer_controls, ARRAY_SIZE(lsm1_mixer_controls)),
12601 SND_SOC_DAPM_MIXER("LSM2 Mixer", SND_SOC_NOPM, 0, 0,
12602 lsm2_mixer_controls, ARRAY_SIZE(lsm2_mixer_controls)),
12603 SND_SOC_DAPM_MIXER("LSM3 Mixer", SND_SOC_NOPM, 0, 0,
12604 lsm3_mixer_controls, ARRAY_SIZE(lsm3_mixer_controls)),
12605 SND_SOC_DAPM_MIXER("LSM4 Mixer", SND_SOC_NOPM, 0, 0,
12606 lsm4_mixer_controls, ARRAY_SIZE(lsm4_mixer_controls)),
12607 SND_SOC_DAPM_MIXER("LSM5 Mixer", SND_SOC_NOPM, 0, 0,
12608 lsm5_mixer_controls, ARRAY_SIZE(lsm5_mixer_controls)),
12609 SND_SOC_DAPM_MIXER("LSM6 Mixer", SND_SOC_NOPM, 0, 0,
12610 lsm6_mixer_controls, ARRAY_SIZE(lsm6_mixer_controls)),
12611 SND_SOC_DAPM_MIXER("LSM7 Mixer", SND_SOC_NOPM, 0, 0,
12612 lsm7_mixer_controls, ARRAY_SIZE(lsm7_mixer_controls)),
12613 SND_SOC_DAPM_MIXER("LSM8 Mixer", SND_SOC_NOPM, 0, 0,
12614 lsm8_mixer_controls, ARRAY_SIZE(lsm8_mixer_controls)),
12615 /* Virtual Pins to force backends ON atm */
12616 SND_SOC_DAPM_OUTPUT("BE_OUT"),
12617 SND_SOC_DAPM_INPUT("BE_IN"),
12618
12619 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_LCH_MUX", SND_SOC_NOPM, 0, 0,
12620 &slim0_rx_vi_fb_lch_mux),
12621 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_RCH_MUX", SND_SOC_NOPM, 0, 0,
12622 &slim0_rx_vi_fb_rch_mux),
12623 SND_SOC_DAPM_MUX("PRI_MI2S_RX_VI_FB_MUX", SND_SOC_NOPM, 0, 0,
12624 &mi2s_rx_vi_fb_mux),
12625 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_MONO_CH_MUX", SND_SOC_NOPM, 0, 0,
12626 &int4_mi2s_rx_vi_fb_mono_ch_mux),
12627 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", SND_SOC_NOPM, 0, 0,
12628 &int4_mi2s_rx_vi_fb_stereo_ch_mux),
12629
12630 SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0,
12631 &voc_ext_ec_mux),
12632 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL1 MUX", SND_SOC_NOPM, 0, 0,
12633 &ext_ec_ref_mux_ul1),
12634 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL2 MUX", SND_SOC_NOPM, 0, 0,
12635 &ext_ec_ref_mux_ul2),
12636 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL3 MUX", SND_SOC_NOPM, 0, 0,
12637 &ext_ec_ref_mux_ul3),
12638 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL4 MUX", SND_SOC_NOPM, 0, 0,
12639 &ext_ec_ref_mux_ul4),
12640 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL5 MUX", SND_SOC_NOPM, 0, 0,
12641 &ext_ec_ref_mux_ul5),
12642 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL6 MUX", SND_SOC_NOPM, 0, 0,
12643 &ext_ec_ref_mux_ul6),
12644 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL8 MUX", SND_SOC_NOPM, 0, 0,
12645 &ext_ec_ref_mux_ul8),
12646 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL9 MUX", SND_SOC_NOPM, 0, 0,
12647 &ext_ec_ref_mux_ul9),
Laxminath Kasam38070be2017-08-17 18:21:59 +053012648 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL10 MUX", SND_SOC_NOPM, 0, 0,
12649 &ext_ec_ref_mux_ul10),
Asish Bhattacharya34504582017-08-08 12:55:01 +053012650 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL16 MUX", SND_SOC_NOPM, 0, 0,
12651 &ext_ec_ref_mux_ul16),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012652 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL17 MUX", SND_SOC_NOPM, 0, 0,
12653 &ext_ec_ref_mux_ul17),
12654 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL18 MUX", SND_SOC_NOPM, 0, 0,
12655 &ext_ec_ref_mux_ul18),
12656 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL19 MUX", SND_SOC_NOPM, 0, 0,
12657 &ext_ec_ref_mux_ul19),
12658};
12659
12660static const struct snd_soc_dapm_route intercon[] = {
12661 {"PRI_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12662 {"PRI_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12663 {"PRI_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12664 {"PRI_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12665 {"PRI_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12666 {"PRI_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12667 {"PRI_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12668 {"PRI_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12669 {"PRI_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12670 {"PRI_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12671 {"PRI_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12672 {"PRI_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12673 {"PRI_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12674 {"PRI_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12675 {"PRI_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12676 {"PRI_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12677 {"PRI_I2S_RX", NULL, "PRI_RX Audio Mixer"},
12678
12679 {"SEC_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12680 {"SEC_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12681 {"SEC_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12682 {"SEC_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12683 {"SEC_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12684 {"SEC_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12685 {"SEC_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12686 {"SEC_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12687 {"SEC_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12688 {"SEC_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12689 {"SEC_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12690 {"SEC_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12691 {"SEC_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12692 {"SEC_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12693 {"SEC_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12694 {"SEC_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12695 {"SEC_I2S_RX", NULL, "SEC_RX Audio Mixer"},
12696
12697 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12698 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12699 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12700 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12701 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12702 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12703 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12704 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12705 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12706 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12707 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12708 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12709 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12710 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12711 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12712 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12713 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Audio Mixer"},
12714
12715 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12716 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12717 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12718 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12719 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12720 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12721 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12722 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12723 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12724 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12725 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12726 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12727 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12728 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12729 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12730 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12731 {"SLIMBUS_2_RX", NULL, "SLIMBUS_2_RX Audio Mixer"},
12732
12733 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12734 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12735 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12736 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12737 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12738 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12739 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12740 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12741 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12742 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12743 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12744 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12745 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12746 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12747 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12748 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12749 {"SLIMBUS_5_RX", NULL, "SLIMBUS_5_RX Audio Mixer"},
12750
12751 {"HDMI Mixer", "MultiMedia1", "MM_DL1"},
12752 {"HDMI Mixer", "MultiMedia2", "MM_DL2"},
12753 {"HDMI Mixer", "MultiMedia3", "MM_DL3"},
12754 {"HDMI Mixer", "MultiMedia4", "MM_DL4"},
12755 {"HDMI Mixer", "MultiMedia5", "MM_DL5"},
12756 {"HDMI Mixer", "MultiMedia6", "MM_DL6"},
12757 {"HDMI Mixer", "MultiMedia7", "MM_DL7"},
12758 {"HDMI Mixer", "MultiMedia8", "MM_DL8"},
12759 {"HDMI Mixer", "MultiMedia9", "MM_DL9"},
12760 {"HDMI Mixer", "MultiMedia10", "MM_DL10"},
12761 {"HDMI Mixer", "MultiMedia11", "MM_DL11"},
12762 {"HDMI Mixer", "MultiMedia12", "MM_DL12"},
12763 {"HDMI Mixer", "MultiMedia13", "MM_DL13"},
12764 {"HDMI Mixer", "MultiMedia14", "MM_DL14"},
12765 {"HDMI Mixer", "MultiMedia15", "MM_DL15"},
12766 {"HDMI Mixer", "MultiMedia16", "MM_DL16"},
12767 {"HDMI", NULL, "HDMI Mixer"},
12768
12769 {"DISPLAY_PORT Mixer", "MultiMedia1", "MM_DL1"},
12770 {"DISPLAY_PORT Mixer", "MultiMedia2", "MM_DL2"},
12771 {"DISPLAY_PORT Mixer", "MultiMedia3", "MM_DL3"},
12772 {"DISPLAY_PORT Mixer", "MultiMedia4", "MM_DL4"},
12773 {"DISPLAY_PORT Mixer", "MultiMedia5", "MM_DL5"},
12774 {"DISPLAY_PORT Mixer", "MultiMedia6", "MM_DL6"},
12775 {"DISPLAY_PORT Mixer", "MultiMedia7", "MM_DL7"},
12776 {"DISPLAY_PORT Mixer", "MultiMedia8", "MM_DL8"},
12777 {"DISPLAY_PORT Mixer", "MultiMedia9", "MM_DL9"},
12778 {"DISPLAY_PORT Mixer", "MultiMedia10", "MM_DL10"},
12779 {"DISPLAY_PORT Mixer", "MultiMedia11", "MM_DL11"},
12780 {"DISPLAY_PORT Mixer", "MultiMedia12", "MM_DL12"},
12781 {"DISPLAY_PORT Mixer", "MultiMedia13", "MM_DL13"},
12782 {"DISPLAY_PORT Mixer", "MultiMedia14", "MM_DL14"},
12783 {"DISPLAY_PORT Mixer", "MultiMedia15", "MM_DL15"},
12784 {"DISPLAY_PORT Mixer", "MultiMedia16", "MM_DL16"},
12785 {"DISPLAY_PORT", NULL, "DISPLAY_PORT Mixer"},
12786
12787 {"SPDIF_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12788 {"SPDIF_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12789 {"SPDIF_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12790 {"SPDIF_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12791 {"SPDIF_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12792 {"SPDIF_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12793 {"SPDIF_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12794 {"SPDIF_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12795 {"SPDIF_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12796 {"SPDIF_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12797 {"SPDIF_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12798 {"SPDIF_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12799 {"SPDIF_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12800 {"SPDIF_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12801 {"SPDIF_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12802 {"SPDIF_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12803 {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"},
12804
12805 /* incall */
12806 {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"},
12807 {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"},
12808 {"Incall_Music Audio Mixer", "MultiMedia5", "MM_DL5"},
12809 {"Incall_Music Audio Mixer", "MultiMedia9", "MM_DL9"},
12810 {"VOICE_PLAYBACK_TX", NULL, "Incall_Music Audio Mixer"},
12811 {"Incall_Music_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
12812 {"Incall_Music_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
12813 {"Incall_Music_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
12814 {"Incall_Music_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
12815 {"VOICE2_PLAYBACK_TX", NULL, "Incall_Music_2 Audio Mixer"},
12816 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12817 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12818 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12819 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12820 {"SLIMBUS_4_RX", NULL, "SLIMBUS_4_RX Audio Mixer"},
12821
12822 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12823 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12824 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12825 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12826 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12827 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12828 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12829 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12830 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12831 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12832 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12833 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12834 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12835 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12836 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12837 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12838 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Audio Mixer"},
12839
12840 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12841 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12842 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12843 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12844 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12845 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12846 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12847 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12848 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12849 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12850 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12851 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12852 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12853 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12854 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12855 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12856 {"SLIMBUS_7_RX", NULL, "SLIMBUS_7_RX Audio Mixer"},
12857
12858 {"USB_AUDIO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12859 {"USB_AUDIO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12860 {"USB_AUDIO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12861 {"USB_AUDIO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12862 {"USB_AUDIO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12863 {"USB_AUDIO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12864 {"USB_AUDIO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12865 {"USB_AUDIO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12866 {"USB_AUDIO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12867 {"USB_AUDIO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12868 {"USB_AUDIO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12869 {"USB_AUDIO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12870 {"USB_AUDIO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12871 {"USB_AUDIO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12872 {"USB_AUDIO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12873 {"USB_AUDIO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12874 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Audio Mixer"},
12875
12876 {"MultiMedia1 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12877 {"MultiMedia4 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12878 {"MultiMedia8 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12879 {"MultiMedia1 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12880 {"MultiMedia4 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12881 {"MultiMedia8 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12882 {"MultiMedia1 Mixer", "SLIM_4_TX", "SLIMBUS_4_TX"},
12883 {"MultiMedia1 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12884 {"MultiMedia1 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12885 {"MultiMedia1 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
12886 {"MultiMedia8 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12887 {"MultiMedia8 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12888 {"MultiMedia4 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12889 {"MultiMedia17 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12890 {"MultiMedia18 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12891 {"MultiMedia19 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12892 {"MultiMedia8 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12893 {"MultiMedia2 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12894 {"MultiMedia4 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12895 {"MultiMedia17 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12896 {"MultiMedia18 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12897 {"MultiMedia19 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12898 {"MultiMedia8 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12899 {"MultiMedia18 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
12900 {"MultiMedia8 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
12901 {"MultiMedia3 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12902 {"MultiMedia5 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053012903 {"MultiMedia10 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053012904 {"MultiMedia16 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012905 {"MultiMedia5 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12906 {"MultiMedia5 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053012907 {"MultiMedia10 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012908 {"MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12909 {"MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12910 {"MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12911 {"MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12912 {"MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12913 {"MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12914 {"MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12915 {"MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12916 {"MI2S_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12917 {"MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12918 {"MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12919 {"MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12920 {"MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12921 {"MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12922 {"MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12923 {"MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12924 {"MI2S_RX", NULL, "MI2S_RX Audio Mixer"},
12925
12926 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12927 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12928 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12929 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12930 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12931 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12932 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12933 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12934 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12935 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12936 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12937 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12938 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12939 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12940 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12941 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Audio Mixer"},
12942
12943 {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12944 {"TERT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12945 {"TERT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12946 {"TERT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12947 {"TERT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12948 {"TERT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12949 {"TERT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12950 {"TERT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12951 {"TERT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12952 {"TERT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12953 {"TERT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12954 {"TERT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12955 {"TERT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12956 {"TERT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12957 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Audio Mixer"},
12958
12959 {"SEC_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12960 {"SEC_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12961 {"SEC_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12962 {"SEC_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12963 {"SEC_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12964 {"SEC_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12965 {"SEC_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12966 {"SEC_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12967 {"SEC_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12968 {"SEC_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12969 {"SEC_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12970 {"SEC_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12971 {"SEC_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12972 {"SEC_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12973 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"},
12974
12975 {"SEC_MI2S_RX_SD1 Audio Mixer", "MultiMedia6", "MM_DL6"},
12976 {"SEC_MI2S_RX_SD1", NULL, "SEC_MI2S_RX_SD1 Audio Mixer"},
12977
12978 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12979 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
12980
12981 {"PRI_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12982 {"PRI_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12983 {"PRI_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12984 {"PRI_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12985 {"PRI_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12986 {"PRI_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12987 {"PRI_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12988 {"PRI_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12989 {"PRI_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12990 {"PRI_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12991 {"PRI_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12992 {"PRI_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12993 {"PRI_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12994 {"PRI_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12995 {"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12996 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
12997
12998 {"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12999 {"INT0_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13000 {"INT0_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13001 {"INT0_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13002 {"INT0_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13003 {"INT0_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13004 {"INT0_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13005 {"INT0_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13006 {"INT0_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13007 {"INT0_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13008 {"INT0_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13009 {"INT0_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13010 {"INT0_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13011 {"INT0_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13012 {"INT0_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13013 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Audio Mixer"},
13014
13015 {"INT4_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13016 {"INT4_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13017 {"INT4_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13018 {"INT4_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13019 {"INT4_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13020 {"INT4_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13021 {"INT4_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13022 {"INT4_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13023 {"INT4_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13024 {"INT4_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13025 {"INT4_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13026 {"INT4_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13027 {"INT4_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13028 {"INT4_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13029 {"INT4_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13030 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Audio Mixer"},
13031
13032 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13033 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13034 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13035 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13036 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13037 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13038 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13039 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13040 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13041 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13042 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13043 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13044 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13045 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13046 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13047 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13048 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13049 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX Audio Mixer"},
13050
13051 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13052 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13053 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13054 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13055 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13056 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13057 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13058 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13059 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13060 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13061 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13062 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13063 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13064 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13065 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13066 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13067 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
13068
13069 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13070 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13071 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13072 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13073 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13074 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13075 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13076 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13077 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13078 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13079 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13080 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13081 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13082 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13083 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13084 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13085 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Audio Mixer"},
13086
13087 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13088 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13089 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13090 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13091 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13092 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13093 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13094 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13095 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13096 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13097 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13098 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13099 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13100 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13101 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13102 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13103 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Audio Mixer"},
13104
13105 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13106 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13107 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13108 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13109 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13110 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13111 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13112 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13113 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13114 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13115 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13116 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13117 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13118 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13119 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13120 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13121 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Audio Mixer"},
13122
13123 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13124 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13125 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13126 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13127 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13128 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13129 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13130 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13131 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13132 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13133 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13134 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13135 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13136 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13137 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13138 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13139 {"PRI_TDM_TX_0", NULL, "PRI_TDM_TX_0 Audio Mixer"},
13140
13141 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13142 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13143 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13144 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13145 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13146 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13147 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13148 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13149 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13150 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13151 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13152 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13153 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13154 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13155 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13156 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13157 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
13158
13159 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13160 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13161 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13162 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13163 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13164 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13165 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13166 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13167 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13168 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13169 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13170 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13171 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13172 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13173 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13174 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13175 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Audio Mixer"},
13176
13177 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13178 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13179 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13180 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13181 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13182 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13183 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13184 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13185 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13186 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13187 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13188 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13189 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13190 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13191 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13192 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13193 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Audio Mixer"},
13194
13195 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13196 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13197 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13198 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13199 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13200 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13201 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13202 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13203 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13204 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13205 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13206 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13207 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13208 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13209 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13210 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13211 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Audio Mixer"},
13212
13213 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13214 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13215 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13216 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13217 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13218 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13219 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13220 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13221 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13222 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13223 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13224 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13225 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13226 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13227 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13228 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13229 {"SEC_TDM_TX_0", NULL, "SEC_TDM_TX_0 Audio Mixer"},
13230
13231 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13232 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13233 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13234 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13235 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13236 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13237 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13238 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13239 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13240 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13241 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13242 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13243 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13244 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13245 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13246 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13247 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Audio Mixer"},
13248
13249 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13250 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13251 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13252 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13253 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13254 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13255 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13256 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13257 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13258 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13259 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13260 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13261 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13262 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13263 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13264 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13265 {"TERT_TDM_TX_0", NULL, "TERT_TDM_TX_0 Audio Mixer"},
13266
13267 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13268 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13269 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13270 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13271 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13272 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13273 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13274 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13275 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13276 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13277 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13278 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13279 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13280 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13281 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13282 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13283 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Audio Mixer"},
13284
13285 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13286 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13287 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13288 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13289 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13290 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13291 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13292 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13293 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13294 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13295 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13296 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13297 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13298 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13299 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13300 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13301 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Audio Mixer"},
13302
13303 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13304 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13305 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13306 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13307 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13308 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13309 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13310 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13311 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13312 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13313 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13314 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13315 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13316 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13317 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13318 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13319 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Audio Mixer"},
13320
13321 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia1", "MM_DL1"},
13322 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia2", "MM_DL2"},
13323 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia3", "MM_DL3"},
13324 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia4", "MM_DL4"},
13325 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia5", "MM_DL5"},
13326 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia6", "MM_DL6"},
13327 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia7", "MM_DL7"},
13328 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia8", "MM_DL8"},
13329 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia9", "MM_DL9"},
13330 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia10", "MM_DL10"},
13331 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia11", "MM_DL11"},
13332 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia12", "MM_DL12"},
13333 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia13", "MM_DL13"},
13334 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia14", "MM_DL14"},
13335 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia15", "MM_DL15"},
13336 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia16", "MM_DL16"},
13337 {"TERT_TDM_RX_4", NULL, "TERT_TDM_RX_4 Audio Mixer"},
13338
13339 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13340 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13341 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13342 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13343 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13344 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13345 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13346 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13347 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13348 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13349 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13350 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13351 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13352 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13353 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13354 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13355 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia20", "MM_DL20"},
13356 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Audio Mixer"},
13357
13358 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13359 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13360 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13361 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13362 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13363 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13364 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13365 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13366 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13367 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13368 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13369 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13370 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13371 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13372 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13373 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13374 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
13375
13376 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13377 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13378 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13379 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13380 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13381 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13382 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13383 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13384 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13385 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13386 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13387 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13388 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13389 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13390 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13391 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13392 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
13393
13394 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13395 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13396 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13397 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13398 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13399 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13400 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13401 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13402 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13403 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13404 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13405 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13406 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13407 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13408 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13409 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13410 {"QUAT_TDM_TX_0", NULL, "QUAT_TDM_TX_0 Audio Mixer"},
13411
13412 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13413 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13414 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13415 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13416 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13417 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13418 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13419 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13420 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13421 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13422 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13423 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13424 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13425 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13426 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13427 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13428 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia20", "MM_DL20"},
13429 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Audio Mixer"},
13430
13431 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13432 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13433 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13434 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13435 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13436 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13437 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13438 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13439 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13440 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13441 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13442 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13443 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13444 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13445 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13446 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13447 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia20", "MM_DL20"},
13448 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Audio Mixer"},
13449
13450 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13451 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13452 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13453 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13454 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13455 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13456 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13457 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13458 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13459 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13460 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13461 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13462 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13463 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13464 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13465 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13466 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia20", "MM_DL20"},
13467 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Audio Mixer"},
13468
13469 {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"},
13470 {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"},
13471 {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"},
13472 {"MultiMedia3 Mixer", "MI2S_TX", "MI2S_TX"},
13473 {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013474 {"MultiMedia10 Mixer", "MI2S_TX", "MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013475 {"MultiMedia16 Mixer", "MI2S_TX", "MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013476 {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13477 {"MultiMedia2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13478 {"MultiMedia6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13479 {"MultiMedia1 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13480 {"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13481 {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13482 {"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13483 {"MultiMedia1 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13484 {"MultiMedia2 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13485 {"MultiMedia1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13486 {"MultiMedia2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13487 {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13488 {"MultiMedia1 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13489 {"MultiMedia3 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
13490 {"MultiMedia5 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013491 {"MultiMedia10 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013492 {"MultiMedia1 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13493 {"MultiMedia3 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
13494 {"MultiMedia5 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013495 {"MultiMedia10 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013496 {"MultiMedia16 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
13497 {"MultiMedia16 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013498 {"MultiMedia1 Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
13499 {"MultiMedia3 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
13500 {"MultiMedia5 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013501 {"MultiMedia10 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013502 {"MultiMedia1 Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
13503 {"MultiMedia3 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
13504 {"MultiMedia5 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013505 {"MultiMedia10 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013506 {"MultiMedia16 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013507 {"MultiMedia2 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13508 {"MultiMedia2 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
13509 {"MultiMedia2 Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
13510 {"MultiMedia2 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
13511 {"MultiMedia1 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13512 {"MultiMedia1 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13513 {"MultiMedia2 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13514 {"MultiMedia6 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13515 {"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13516 {"MultiMedia3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13517 {"MultiMedia5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013518 {"MultiMedia10 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013519 {"MultiMedia6 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13520 {"MultiMedia3 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13521 {"MultiMedia5 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013522 {"MultiMedia10 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013523 {"MultiMedia16 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013524 {"MultiMedia6 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13525 {"MultiMedia3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13526 {"MultiMedia5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013527 {"MultiMedia10 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013528 {"MultiMedia16 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013529 {"MultiMedia6 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13530 {"MultiMedia6 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13531 {"MultiMedia6 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13532 {"MultiMedia6 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13533
13534 {"MultiMedia1 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13535 {"MultiMedia1 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13536 {"MultiMedia1 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13537 {"MultiMedia1 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13538 {"MultiMedia1 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13539 {"MultiMedia1 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13540 {"MultiMedia1 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13541 {"MultiMedia1 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13542 {"MultiMedia1 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13543 {"MultiMedia1 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13544 {"MultiMedia1 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13545 {"MultiMedia1 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13546 {"MultiMedia1 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13547 {"MultiMedia1 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13548 {"MultiMedia1 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13549 {"MultiMedia1 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13550
13551 {"MultiMedia2 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13552 {"MultiMedia2 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13553 {"MultiMedia2 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13554 {"MultiMedia2 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13555 {"MultiMedia2 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13556 {"MultiMedia2 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13557 {"MultiMedia2 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13558 {"MultiMedia2 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13559 {"MultiMedia2 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13560 {"MultiMedia2 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13561 {"MultiMedia2 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13562 {"MultiMedia2 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13563 {"MultiMedia2 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13564 {"MultiMedia2 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13565 {"MultiMedia2 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13566 {"MultiMedia2 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13567
13568 {"MultiMedia3 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13569 {"MultiMedia3 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13570 {"MultiMedia3 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13571 {"MultiMedia3 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13572 {"MultiMedia3 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13573 {"MultiMedia3 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13574 {"MultiMedia3 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13575 {"MultiMedia3 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13576 {"MultiMedia3 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13577 {"MultiMedia3 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13578 {"MultiMedia3 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13579 {"MultiMedia3 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13580 {"MultiMedia3 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13581 {"MultiMedia3 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13582 {"MultiMedia3 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13583 {"MultiMedia3 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13584
13585 {"MultiMedia4 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13586 {"MultiMedia4 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13587 {"MultiMedia4 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13588 {"MultiMedia4 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13589 {"MultiMedia4 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13590 {"MultiMedia4 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13591 {"MultiMedia4 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13592 {"MultiMedia4 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13593 {"MultiMedia4 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13594 {"MultiMedia4 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13595 {"MultiMedia4 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13596 {"MultiMedia4 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13597 {"MultiMedia4 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13598 {"MultiMedia4 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13599 {"MultiMedia4 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13600 {"MultiMedia4 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13601
13602 {"MultiMedia5 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13603 {"MultiMedia5 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13604 {"MultiMedia5 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13605 {"MultiMedia5 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13606 {"MultiMedia5 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13607 {"MultiMedia5 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13608 {"MultiMedia5 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13609 {"MultiMedia5 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13610 {"MultiMedia5 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13611 {"MultiMedia5 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13612 {"MultiMedia5 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13613 {"MultiMedia5 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13614 {"MultiMedia5 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13615 {"MultiMedia5 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13616 {"MultiMedia5 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13617 {"MultiMedia5 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13618
13619 {"MultiMedia6 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13620 {"MultiMedia6 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13621 {"MultiMedia6 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13622 {"MultiMedia6 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13623 {"MultiMedia6 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13624 {"MultiMedia6 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13625 {"MultiMedia6 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13626 {"MultiMedia6 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13627 {"MultiMedia6 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13628 {"MultiMedia6 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13629 {"MultiMedia6 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13630 {"MultiMedia6 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13631 {"MultiMedia6 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13632 {"MultiMedia6 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13633 {"MultiMedia6 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13634 {"MultiMedia6 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13635
13636 {"MultiMedia8 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13637 {"MultiMedia8 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13638 {"MultiMedia8 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13639 {"MultiMedia8 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13640 {"MultiMedia8 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13641 {"MultiMedia8 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13642 {"MultiMedia8 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13643 {"MultiMedia8 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13644 {"MultiMedia8 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13645 {"MultiMedia8 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13646 {"MultiMedia8 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13647 {"MultiMedia8 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13648 {"MultiMedia8 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13649 {"MultiMedia8 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13650 {"MultiMedia8 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13651 {"MultiMedia8 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13652
13653 {"MultiMedia9 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13654 {"MultiMedia9 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13655 {"MultiMedia9 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13656 {"MultiMedia9 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13657 {"MultiMedia9 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13658 {"MultiMedia9 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13659 {"MultiMedia9 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13660 {"MultiMedia9 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13661
Laxminath Kasam38070be2017-08-17 18:21:59 +053013662 {"MultiMedia10 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13663 {"MultiMedia10 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13664 {"MultiMedia10 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13665 {"MultiMedia10 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13666 {"MultiMedia10 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13667 {"MultiMedia10 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13668 {"MultiMedia10 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13669 {"MultiMedia10 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013670 {"MultiMedia20 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13671 {"MultiMedia20 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13672 {"MultiMedia20 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13673 {"MultiMedia20 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13674 {"MultiMedia20 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13675 {"MultiMedia20 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13676 {"MultiMedia20 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13677 {"MultiMedia20 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13678 {"MultiMedia20 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13679 {"MultiMedia20 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13680 {"MultiMedia20 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13681 {"MultiMedia20 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13682 {"MultiMedia20 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13683 {"MultiMedia20 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13684 {"MultiMedia20 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13685 {"MultiMedia20 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13686 {"MultiMedia20 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13687 {"MultiMedia20 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13688 {"MultiMedia20 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13689 {"MultiMedia20 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13690
13691 {"MultiMedia1 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13692 {"MultiMedia2 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13693 {"MultiMedia4 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13694 {"MultiMedia5 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13695 {"MultiMedia6 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13696 {"MultiMedia8 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013697 {"MultiMedia10 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013698
Asish Bhattacharya34504582017-08-08 12:55:01 +053013699 {"MultiMedia16 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13700 {"MultiMedia16 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13701 {"MultiMedia16 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13702 {"MultiMedia16 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13703 {"MultiMedia16 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13704 {"MultiMedia16 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13705 {"MultiMedia16 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13706 {"MultiMedia16 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13707 {"MultiMedia16 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13708 {"MultiMedia16 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13709 {"MultiMedia16 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13710 {"MultiMedia16 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13711 {"MultiMedia16 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13712 {"MultiMedia16 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13713 {"MultiMedia16 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13714 {"MultiMedia16 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13715 {"MultiMedia16 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13716
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013717 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13718 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13719 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13720 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13721 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13722 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13723 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13724 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13725 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13726 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13727 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13728 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13729 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13730 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13731 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13732 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13733 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13734 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Audio Mixer"},
13735
13736 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13737 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13738 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13739 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13740 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13741 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13742 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13743 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13744 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13745 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13746 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13747 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13748 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13749 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13750 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13751 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13752 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13753 {"INT_BT_A2DP_RX", NULL, "INTERNAL_A2DP_RX Audio Mixer"},
13754
13755 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13756 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13757 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13758 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13759 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13760 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13761 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13762 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13763 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13764 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13765 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13766 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13767 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13768 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13769 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13770 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13771 {"INT_FM_RX", NULL, "INTERNAL_FM_RX Audio Mixer"},
13772
13773 {"AFE_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13774 {"AFE_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13775 {"AFE_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13776 {"AFE_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13777 {"AFE_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13778 {"AFE_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13779 {"AFE_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13780 {"AFE_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13781 {"AFE_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13782 {"AFE_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13783 {"AFE_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13784 {"AFE_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13785 {"AFE_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13786 {"AFE_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13787 {"AFE_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13788 {"AFE_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13789 {"PCM_RX", NULL, "AFE_PCM_RX Audio Mixer"},
13790
13791 {"MultiMedia1 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13792 {"MultiMedia3 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13793 {"MultiMedia4 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013794 {"MultiMedia10 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013795 {"MultiMedia17 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13796 {"MultiMedia18 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13797 {"MultiMedia19 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13798 {"MultiMedia5 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13799 {"MultiMedia8 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013800 {"MultiMedia16 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013801 {"MultiMedia1 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13802 {"MultiMedia4 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013803 {"MultiMedia16 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013804 {"MultiMedia17 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13805 {"MultiMedia18 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13806 {"MultiMedia19 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13807 {"MultiMedia5 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13808 {"MultiMedia6 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13809 {"MultiMedia8 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13810
13811 {"MultiMedia1 Mixer", "AFE_PCM_TX", "PCM_TX"},
13812 {"MultiMedia3 Mixer", "AFE_PCM_TX", "PCM_TX"},
13813 {"MultiMedia4 Mixer", "AFE_PCM_TX", "PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013814 {"MultiMedia10 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013815 {"MultiMedia17 Mixer", "AFE_PCM_TX", "PCM_TX"},
13816 {"MultiMedia18 Mixer", "AFE_PCM_TX", "PCM_TX"},
13817 {"MultiMedia19 Mixer", "AFE_PCM_TX", "PCM_TX"},
13818 {"MultiMedia5 Mixer", "AFE_PCM_TX", "PCM_TX"},
13819 {"MultiMedia8 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013820 {"MultiMedia16 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013821 {"MM_UL1", NULL, "MultiMedia1 Mixer"},
13822 {"MultiMedia2 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13823 {"MM_UL2", NULL, "MultiMedia2 Mixer"},
13824 {"MM_UL3", NULL, "MultiMedia3 Mixer"},
13825 {"MM_UL4", NULL, "MultiMedia4 Mixer"},
13826 {"MM_UL5", NULL, "MultiMedia5 Mixer"},
13827 {"MM_UL6", NULL, "MultiMedia6 Mixer"},
13828 {"MM_UL8", NULL, "MultiMedia8 Mixer"},
13829 {"MM_UL9", NULL, "MultiMedia9 Mixer"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013830 {"MM_UL10", NULL, "MultiMedia10 Mixer"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013831 {"MM_UL16", NULL, "MultiMedia16 Mixer"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013832 {"MM_UL17", NULL, "MultiMedia17 Mixer"},
13833 {"MM_UL18", NULL, "MultiMedia18 Mixer"},
13834 {"MM_UL19", NULL, "MultiMedia19 Mixer"},
13835 {"MM_UL20", NULL, "MultiMedia20 Mixer"},
13836
13837 {"AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13838 {"AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13839 {"AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13840 {"AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13841 {"AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13842 {"AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13843 {"AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13844 {"AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13845 {"AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13846 {"AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13847 {"AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13848 {"AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13849 {"AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13850 {"AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13851 {"AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13852 {"AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13853 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Audio Mixer"},
13854
13855 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13856 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13857 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13858 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13859 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13860 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13861 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13862 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13863 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13864 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13865 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13866 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13867 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13868 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13869 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13870 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13871 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX Audio Mixer"},
13872
13873 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13874 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13875 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13876 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13877 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13878 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13879 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13880 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13881 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13882 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13883 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13884 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13885 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13886 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13887 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13888 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13889 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX Audio Mixer"},
13890
13891 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13892 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13893 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13894 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13895 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13896 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13897 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13898 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13899 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13900 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13901 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13902 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13903 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13904 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13905 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13906 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13907 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX Audio Mixer"},
13908
13909 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13910 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13911 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13912 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13913 {"MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13914 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13915 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13916 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13917 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
13918
13919 {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13920 {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13921 {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13922 {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13923 {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"},
13924 {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13925 {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13926 {"PRI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13927 {"PRI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13928 {"PRI_I2S_RX", NULL, "PRI_RX_Voice Mixer"},
13929
13930 {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13931 {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13932 {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13933 {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13934 {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"},
13935 {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13936 {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13937 {"SEC_I2S_RX", NULL, "SEC_RX_Voice Mixer"},
13938
13939 {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13940 {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13941 {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13942 {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13943 {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13944 {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13945 {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13946 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13947 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13948 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_Voice Mixer"},
13949
13950 {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13951 {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13952 {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13953 {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13954 {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"},
13955 {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13956 {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13957 {"SLIM_0_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13958 {"SLIM_0_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13959 {"SLIM_0_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13960 {"SLIM_0_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13961 {"SLIM_0_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13962 {"SLIMBUS_0_RX", NULL, "SLIM_0_RX_Voice Mixer"},
13963
13964 {"SLIM_6_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13965 {"SLIM_6_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13966 {"SLIM_6_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13967 {"SLIM_6_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13968 {"SLIM_6_RX_Voice Mixer", "Voip", "VOIP_DL"},
13969 {"SLIM_6_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13970 {"SLIM_6_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13971 {"SLIM_6_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13972 {"SLIM_6_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13973 {"SLIM_6_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13974 {"SLIM_6_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13975 {"SLIM_6_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13976 {"SLIMBUS_6_RX", NULL, "SLIM_6_RX_Voice Mixer"},
13977
13978 {"USB_AUDIO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13979 {"USB_AUDIO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13980 {"USB_AUDIO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13981 {"USB_AUDIO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13982 {"USB_AUDIO_RX_Voice Mixer", "Voip", "VOIP_DL"},
13983 {"USB_AUDIO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13984 {"USB_AUDIO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13985 {"USB_AUDIO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
13986 {"USB_AUDIO_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
13987 {"USB_AUDIO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13988 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13989 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13990 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX_Voice Mixer"},
13991
13992 {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13993 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13994 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13995 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13996 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"},
13997 {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13998 {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13999 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14000 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14001 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14002 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14003 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX_Voice Mixer"},
14004
14005 {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14006 {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14007 {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14008 {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14009 {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14010 {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14011 {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14012 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14013 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14014 {"PCM_RX", NULL, "AFE_PCM_RX_Voice Mixer"},
14015
14016 {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14017 {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14018 {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14019 {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14020 {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14021 {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14022 {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14023 {"AUX_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14024 {"AUX_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14025 {"AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14026 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14027 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14028 {"AUX_PCM_RX", NULL, "AUX_PCM_RX_Voice Mixer"},
14029
14030 {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14031 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14032 {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14033 {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14034 {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14035 {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14036 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14037 {"SEC_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14038 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14039 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14040 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX_Voice Mixer"},
14041
14042 {"TERT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14043 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14044 {"TERT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14045 {"TERT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14046 {"TERT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14047 {"TERT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14048 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14049 {"TERT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14050 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14051 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14052 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX_Voice Mixer"},
14053
14054 {"QUAT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14055 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14056 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14057 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14058 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14059 {"QUAT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14060 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14061 {"QUAT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14062 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14063 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14064 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX_Voice Mixer"},
14065
14066 {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14067 {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14068 {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14069 {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14070 {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"},
14071 {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14072 {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14073 {"HDMI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14074 {"HDMI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14075 {"HDMI", NULL, "HDMI_RX_Voice Mixer"},
14076 {"HDMI", NULL, "HDMI_DL_HL"},
14077
14078 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14079 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14080 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14081 {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14082 {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14083 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14084 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14085 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14086 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14087 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
14088
14089 {"PRI_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14090 {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14091 {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14092 {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14093 {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14094 {"PRI_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14095 {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14096 {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14097 {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14098 {"PRI_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14099 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14100 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14101 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_Voice Mixer"},
14102
14103 {"INT0_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14104 {"INT0_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14105 {"INT0_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14106 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14107 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14108 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_Voice Mixer"},
14109
14110 {"INT4_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14111 {"INT4_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14112 {"INT4_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14113 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14114 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14115 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_Voice Mixer"},
14116
14117 {"TERT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14118 {"TERT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14119 {"TERT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14120 {"TERT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14121 {"TERT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14122 {"TERT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14123 {"TERT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14124 {"TERT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14125 {"TERT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14126 {"TERT_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14127 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14128 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14129 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_Voice Mixer"},
14130
14131 {"QUAT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14132 {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14133 {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14134 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14135 {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14136 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14137 {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14138 {"QUAT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14139 {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14140 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14141 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14142 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"},
14143
14144 {"QUIN_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14145 {"QUIN_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14146 {"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14147 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14148 {"QUIN_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14149 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14150 {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14151 {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14152 {"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14153 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14154 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14155 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX_Voice Mixer"},
14156
14157 {"QUAT_TDM_RX_2_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14158 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_Voice Mixer"},
14159
14160 {"VOC_EXT_EC MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14161 {"VOC_EXT_EC MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14162 {"VOC_EXT_EC MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14163 {"VOC_EXT_EC MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14164 {"VOC_EXT_EC MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14165 {"CS-VOICE_UL1", NULL, "VOC_EXT_EC MUX"},
14166 {"VOIP_UL", NULL, "VOC_EXT_EC MUX"},
14167 {"VoLTE_UL", NULL, "VOC_EXT_EC MUX"},
14168 {"VOICE2_UL", NULL, "VOC_EXT_EC MUX"},
14169 {"VoWLAN_UL", NULL, "VOC_EXT_EC MUX"},
14170 {"VOICEMMODE1_UL", NULL, "VOC_EXT_EC MUX"},
14171 {"VOICEMMODE2_UL", NULL, "VOC_EXT_EC MUX"},
14172
14173 {"AUDIO_REF_EC_UL1 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14174 {"AUDIO_REF_EC_UL1 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14175 {"AUDIO_REF_EC_UL1 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14176 {"AUDIO_REF_EC_UL1 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14177 {"AUDIO_REF_EC_UL1 MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14178 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14179 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_0", "QUAT_TDM_RX_0"},
14180 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_1", "QUAT_TDM_RX_1"},
14181 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_2", "QUAT_TDM_RX_2"},
14182 {"AUDIO_REF_EC_UL1 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14183
14184 {"AUDIO_REF_EC_UL2 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14185 {"AUDIO_REF_EC_UL2 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14186 {"AUDIO_REF_EC_UL2 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14187 {"AUDIO_REF_EC_UL2 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14188
14189 {"AUDIO_REF_EC_UL3 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14190 {"AUDIO_REF_EC_UL3 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14191 {"AUDIO_REF_EC_UL3 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14192 {"AUDIO_REF_EC_UL3 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14193
14194 {"AUDIO_REF_EC_UL4 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14195 {"AUDIO_REF_EC_UL4 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14196 {"AUDIO_REF_EC_UL4 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14197 {"AUDIO_REF_EC_UL4 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14198
14199 {"AUDIO_REF_EC_UL5 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14200 {"AUDIO_REF_EC_UL5 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14201 {"AUDIO_REF_EC_UL5 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14202 {"AUDIO_REF_EC_UL5 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14203
14204 {"AUDIO_REF_EC_UL6 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14205 {"AUDIO_REF_EC_UL6 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14206 {"AUDIO_REF_EC_UL6 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14207 {"AUDIO_REF_EC_UL6 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14208
14209 {"AUDIO_REF_EC_UL8 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14210 {"AUDIO_REF_EC_UL8 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14211 {"AUDIO_REF_EC_UL8 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14212 {"AUDIO_REF_EC_UL8 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14213
14214 {"AUDIO_REF_EC_UL9 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14215 {"AUDIO_REF_EC_UL9 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14216 {"AUDIO_REF_EC_UL9 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14217 {"AUDIO_REF_EC_UL9 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14218
Laxminath Kasam38070be2017-08-17 18:21:59 +053014219 {"AUDIO_REF_EC_UL10 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14220 {"AUDIO_REF_EC_UL10 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14221 {"AUDIO_REF_EC_UL10 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14222 {"AUDIO_REF_EC_UL10 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14223 {"AUDIO_REF_EC_UL10 MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14224 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14225 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_0", "QUAT_TDM_RX_0"},
14226 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_1", "QUAT_TDM_RX_1"},
14227 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_2", "QUAT_TDM_RX_2"},
14228 {"AUDIO_REF_EC_UL10 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
Vikram Panduranga016c49f2017-09-11 15:15:56 -070014229
14230 {"AUDIO_REF_EC_UL16 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14231 {"AUDIO_REF_EC_UL16 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14232 {"AUDIO_REF_EC_UL16 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14233 {"AUDIO_REF_EC_UL16 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14234
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053014235 {"AUDIO_REF_EC_UL17 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14236 {"AUDIO_REF_EC_UL17 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14237 {"AUDIO_REF_EC_UL17 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14238 {"AUDIO_REF_EC_UL17 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14239
14240 {"AUDIO_REF_EC_UL18 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14241 {"AUDIO_REF_EC_UL18 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14242 {"AUDIO_REF_EC_UL18 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14243 {"AUDIO_REF_EC_UL18 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14244
14245 {"AUDIO_REF_EC_UL19 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14246 {"AUDIO_REF_EC_UL19 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14247 {"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14248 {"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14249
14250 {"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
14251 {"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
14252 {"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
14253 {"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"},
14254 {"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"},
14255 {"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"},
14256 {"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"},
14257 {"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053014258 {"MM_UL10", NULL, "AUDIO_REF_EC_UL10 MUX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053014259 {"MM_UL16", NULL, "AUDIO_REF_EC_UL16 MUX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053014260 {"MM_UL17", NULL, "AUDIO_REF_EC_UL17 MUX"},
14261 {"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
14262 {"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
14263
14264 {"Voice_Tx Mixer", "PRI_TX_Voice", "PRI_I2S_TX"},
14265 {"Voice_Tx Mixer", "PRI_MI2S_TX_Voice", "PRI_MI2S_TX"},
14266 {"Voice_Tx Mixer", "MI2S_TX_Voice", "MI2S_TX"},
14267 {"Voice_Tx Mixer", "TERT_MI2S_TX_Voice", "TERT_MI2S_TX"},
14268 {"Voice_Tx Mixer", "SLIM_0_TX_Voice", "SLIMBUS_0_TX"},
14269 {"Voice_Tx Mixer", "SLIM_7_TX_Voice", "SLIMBUS_7_TX"},
14270 {"Voice_Tx Mixer", "SLIM_8_TX_Voice", "SLIMBUS_8_TX"},
14271 {"Voice_Tx Mixer", "USB_AUDIO_TX_Voice", "USB_AUDIO_TX"},
14272 {"Voice_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice", "INT_BT_SCO_TX"},
14273 {"Voice_Tx Mixer", "AFE_PCM_TX_Voice", "PCM_TX"},
14274 {"Voice_Tx Mixer", "AUX_PCM_TX_Voice", "AUX_PCM_TX"},
14275 {"Voice_Tx Mixer", "SEC_AUX_PCM_TX_Voice", "SEC_AUX_PCM_TX"},
14276 {"Voice_Tx Mixer", "TERT_AUX_PCM_TX_Voice", "TERT_AUX_PCM_TX"},
14277 {"Voice_Tx Mixer", "QUAT_AUX_PCM_TX_Voice", "QUAT_AUX_PCM_TX"},
14278 {"Voice_Tx Mixer", "SEC_MI2S_TX_Voice", "SEC_MI2S_TX"},
14279 {"CS-VOICE_UL1", NULL, "Voice_Tx Mixer"},
14280
14281 {"Voice2_Tx Mixer", "PRI_TX_Voice2", "PRI_I2S_TX"},
14282 {"Voice2_Tx Mixer", "PRI_MI2S_TX_Voice2", "PRI_MI2S_TX"},
14283 {"Voice2_Tx Mixer", "MI2S_TX_Voice2", "MI2S_TX"},
14284 {"Voice2_Tx Mixer", "TERT_MI2S_TX_Voice2", "TERT_MI2S_TX"},
14285 {"Voice2_Tx Mixer", "SLIM_0_TX_Voice2", "SLIMBUS_0_TX"},
14286 {"Voice2_Tx Mixer", "SLIM_7_TX_Voice2", "SLIMBUS_7_TX"},
14287 {"Voice2_Tx Mixer", "SLIM_8_TX_Voice2", "SLIMBUS_8_TX"},
14288 {"Voice2_Tx Mixer", "USB_AUDIO_TX_Voice2", "USB_AUDIO_TX"},
14289 {"Voice2_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice2", "INT_BT_SCO_TX"},
14290 {"Voice2_Tx Mixer", "AFE_PCM_TX_Voice2", "PCM_TX"},
14291 {"Voice2_Tx Mixer", "AUX_PCM_TX_Voice2", "AUX_PCM_TX"},
14292 {"Voice2_Tx Mixer", "SEC_AUX_PCM_TX_Voice2", "SEC_AUX_PCM_TX"},
14293 {"Voice2_Tx Mixer", "TERT_AUX_PCM_TX_Voice2", "TERT_AUX_PCM_TX"},
14294 {"Voice2_Tx Mixer", "QUAT_AUX_PCM_TX_Voice2", "QUAT_AUX_PCM_TX"},
14295 {"VOICE2_UL", NULL, "Voice2_Tx Mixer"},
14296
14297 {"VoLTE_Tx Mixer", "PRI_TX_VoLTE", "PRI_I2S_TX"},
14298 {"VoLTE_Tx Mixer", "SLIM_0_TX_VoLTE", "SLIMBUS_0_TX"},
14299 {"VoLTE_Tx Mixer", "SLIM_7_TX_VoLTE", "SLIMBUS_7_TX"},
14300 {"VoLTE_Tx Mixer", "SLIM_8_TX_VoLTE", "SLIMBUS_8_TX"},
14301 {"VoLTE_Tx Mixer", "USB_AUDIO_TX_VoLTE", "USB_AUDIO_TX"},
14302 {"VoLTE_Tx Mixer", "INTERNAL_BT_SCO_TX_VoLTE", "INT_BT_SCO_TX"},
14303 {"VoLTE_Tx Mixer", "AFE_PCM_TX_VoLTE", "PCM_TX"},
14304 {"VoLTE_Tx Mixer", "AUX_PCM_TX_VoLTE", "AUX_PCM_TX"},
14305 {"VoLTE_Tx Mixer", "SEC_AUX_PCM_TX_VoLTE", "SEC_AUX_PCM_TX"},
14306 {"VoLTE_Tx Mixer", "TERT_AUX_PCM_TX_VoLTE", "TERT_AUX_PCM_TX"},
14307 {"VoLTE_Tx Mixer", "QUAT_AUX_PCM_TX_VoLTE", "QUAT_AUX_PCM_TX"},
14308 {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"},
14309 {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"},
14310 {"VoLTE_Tx Mixer", "TERT_MI2S_TX_VoLTE", "TERT_MI2S_TX"},
14311 {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"},
14312
14313 {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"},
14314 {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"},
14315 {"VoWLAN_Tx Mixer", "SLIM_7_TX_VoWLAN", "SLIMBUS_7_TX"},
14316 {"VoWLAN_Tx Mixer", "SLIM_8_TX_VoWLAN", "SLIMBUS_8_TX"},
14317 {"VoWLAN_Tx Mixer", "USB_AUDIO_TX_VoWLAN", "USB_AUDIO_TX"},
14318 {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"},
14319 {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"},
14320 {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"},
14321 {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"},
14322 {"VoWLAN_Tx Mixer", "TERT_AUX_PCM_TX_VoWLAN", "TERT_AUX_PCM_TX"},
14323 {"VoWLAN_Tx Mixer", "QUAT_AUX_PCM_TX_VoWLAN", "QUAT_AUX_PCM_TX"},
14324 {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"},
14325 {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"},
14326 {"VoWLAN_Tx Mixer", "TERT_MI2S_TX_VoWLAN", "TERT_MI2S_TX"},
14327 {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"},
14328
14329 {"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
14330 {"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
14331 {"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
14332 {"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
14333 {"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
14334 {"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
14335 {"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
14336 {"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
14337 {"VoiceMMode1_Tx Mixer", "USB_AUDIO_TX_MMode1", "USB_AUDIO_TX"},
14338 {"VoiceMMode1_Tx Mixer", "INT_BT_SCO_TX_MMode1", "INT_BT_SCO_TX"},
14339 {"VoiceMMode1_Tx Mixer", "AFE_PCM_TX_MMode1", "PCM_TX"},
14340 {"VoiceMMode1_Tx Mixer", "AUX_PCM_TX_MMode1", "AUX_PCM_TX"},
14341 {"VoiceMMode1_Tx Mixer", "SEC_AUX_PCM_TX_MMode1", "SEC_AUX_PCM_TX"},
14342 {"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
14343 {"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
14344 {"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
14345 {"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
14346
14347 {"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
14348 {"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
14349 {"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
14350 {"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
14351 {"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
14352 {"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
14353 {"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
14354 {"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
14355 {"VoiceMMode2_Tx Mixer", "USB_AUDIO_TX_MMode2", "USB_AUDIO_TX"},
14356 {"VoiceMMode2_Tx Mixer", "INT_BT_SCO_TX_MMode2", "INT_BT_SCO_TX"},
14357 {"VoiceMMode2_Tx Mixer", "AFE_PCM_TX_MMode2", "PCM_TX"},
14358 {"VoiceMMode2_Tx Mixer", "AUX_PCM_TX_MMode2", "AUX_PCM_TX"},
14359 {"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
14360 {"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
14361 {"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
14362 {"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
14363
14364 {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
14365 {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
14366 {"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
14367 {"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
14368 {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
14369 {"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
14370 {"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
14371 {"Voip_Tx Mixer", "USB_AUDIO_TX_Voip", "USB_AUDIO_TX"},
14372 {"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
14373 {"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"},
14374 {"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
14375 {"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"},
14376 {"Voip_Tx Mixer", "TERT_AUX_PCM_TX_Voip", "TERT_AUX_PCM_TX"},
14377 {"Voip_Tx Mixer", "QUAT_AUX_PCM_TX_Voip", "QUAT_AUX_PCM_TX"},
14378 {"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"},
14379 {"VOIP_UL", NULL, "Voip_Tx Mixer"},
14380
14381 {"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
14382 {"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
14383 {"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"},
14384 {"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"},
14385 {"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"},
14386 {"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"},
14387 {"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"},
14388 {"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"},
14389 {"SLIMBUS6_DL_HL", "Switch", "SLIM0_DL_HL"},
14390 {"SLIMBUS_6_RX", NULL, "SLIMBUS6_DL_HL"},
14391 {"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
14392 {"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"},
14393 {"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"},
14394 {"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"},
14395 {"SLIM8_UL_HL", NULL, "SLIMBUS_8_TX"},
14396
14397 {"LSM1 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14398 {"LSM1 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14399 {"LSM1 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14400 {"LSM1 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14401 {"LSM1 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14402 {"LSM1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14403 {"LSM1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14404 {"LSM1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14405 {"LSM1_UL_HL", NULL, "LSM1 Mixer"},
14406
14407 {"LSM2 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14408 {"LSM2 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14409 {"LSM2 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14410 {"LSM2 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14411 {"LSM2 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14412 {"LSM2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14413 {"LSM2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14414 {"LSM2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14415 {"LSM2_UL_HL", NULL, "LSM2 Mixer"},
14416
14417
14418 {"LSM3 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14419 {"LSM3 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14420 {"LSM3 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14421 {"LSM3 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14422 {"LSM3 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14423 {"LSM3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14424 {"LSM3 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14425 {"LSM3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14426 {"LSM3_UL_HL", NULL, "LSM3 Mixer"},
14427
14428
14429 {"LSM4 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14430 {"LSM4 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14431 {"LSM4 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14432 {"LSM4 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14433 {"LSM4 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14434 {"LSM4 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14435 {"LSM4 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14436 {"LSM4 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14437 {"LSM4_UL_HL", NULL, "LSM4 Mixer"},
14438
14439 {"LSM5 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14440 {"LSM5 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14441 {"LSM5 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14442 {"LSM5 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14443 {"LSM5 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14444 {"LSM5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14445 {"LSM5 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14446 {"LSM5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14447 {"LSM5_UL_HL", NULL, "LSM5 Mixer"},
14448
14449 {"LSM6 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14450 {"LSM6 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14451 {"LSM6 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14452 {"LSM6 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14453 {"LSM6 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14454 {"LSM6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14455 {"LSM6_UL_HL", NULL, "LSM6 Mixer"},
14456
14457 {"LSM7 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14458 {"LSM7 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14459 {"LSM7 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14460 {"LSM7 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14461 {"LSM7 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14462 {"LSM7 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14463 {"LSM7_UL_HL", NULL, "LSM7 Mixer"},
14464
14465 {"LSM8 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14466 {"LSM8 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14467 {"LSM8 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14468 {"LSM8 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14469 {"LSM8 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14470 {"LSM8 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14471 {"LSM8_UL_HL", NULL, "LSM8 Mixer"},
14472
14473
14474 {"CPE_LSM_UL_HL", NULL, "BE_IN"},
14475 {"QCHAT_Tx Mixer", "PRI_TX_QCHAT", "PRI_I2S_TX"},
14476 {"QCHAT_Tx Mixer", "SLIM_0_TX_QCHAT", "SLIMBUS_0_TX"},
14477 {"QCHAT_Tx Mixer", "SLIM_7_TX_QCHAT", "SLIMBUS_7_TX"},
14478 {"QCHAT_Tx Mixer", "SLIM_8_TX_QCHAT", "SLIMBUS_8_TX"},
14479 {"QCHAT_Tx Mixer", "INTERNAL_BT_SCO_TX_QCHAT", "INT_BT_SCO_TX"},
14480 {"QCHAT_Tx Mixer", "AFE_PCM_TX_QCHAT", "PCM_TX"},
14481 {"QCHAT_Tx Mixer", "AUX_PCM_TX_QCHAT", "AUX_PCM_TX"},
14482 {"QCHAT_Tx Mixer", "SEC_AUX_PCM_TX_QCHAT", "SEC_AUX_PCM_TX"},
14483 {"QCHAT_Tx Mixer", "TERT_AUX_PCM_TX_QCHAT", "TERT_AUX_PCM_TX"},
14484 {"QCHAT_Tx Mixer", "QUAT_AUX_PCM_TX_QCHAT", "QUAT_AUX_PCM_TX"},
14485 {"QCHAT_Tx Mixer", "MI2S_TX_QCHAT", "MI2S_TX"},
14486 {"QCHAT_Tx Mixer", "PRI_MI2S_TX_QCHAT", "PRI_MI2S_TX"},
14487 {"QCHAT_Tx Mixer", "TERT_MI2S_TX_QCHAT", "TERT_MI2S_TX"},
14488 {"QCHAT_Tx Mixer", "INT3_MI2S_TX_QCHAT", "INT3_MI2S_TX"},
14489 {"QCHAT_Tx Mixer", "USB_AUDIO_TX_QCHAT", "USB_AUDIO_TX"},
14490 {"QCHAT_UL", NULL, "QCHAT_Tx Mixer"},
14491
14492 {"INT_FM_RX", NULL, "INTFM_DL_HL"},
14493 {"INTFM_UL_HL", NULL, "INT_FM_TX"},
14494 {"INTHFP_UL_HL", NULL, "HFP_PRI_AUX_UL_HL"},
14495 {"HFP_PRI_AUX_UL_HL", "Switch", "AUX_PCM_TX"},
14496 {"INTHFP_UL_HL", NULL, "HFP_AUX_UL_HL"},
14497 {"HFP_AUX_UL_HL", "Switch", "SEC_AUX_PCM_TX"},
14498 {"INTHFP_UL_HL", NULL, "HFP_INT_UL_HL"},
14499 {"HFP_INT_UL_HL", "Switch", "INT_BT_SCO_TX"},
14500 {"SLIM7_UL_HL", NULL, "HFP_SLIM7_UL_HL"},
14501 {"HFP_SLIM7_UL_HL", "Switch", "SLIMBUS_7_TX"},
14502 {"AUX_PCM_RX", NULL, "AUXPCM_DL_HL"},
14503 {"AUX_PCM_RX", NULL, "INTHFP_DL_HL"},
14504 {"AUXPCM_UL_HL", NULL, "AUX_PCM_TX"},
14505 {"MI2S_RX", NULL, "MI2S_DL_HL"},
14506 {"MI2S_UL_HL", NULL, "MI2S_TX"},
14507 {"PCM_RX_DL_HL", "Switch", "SLIM0_DL_HL"},
14508 {"PCM_RX", NULL, "PCM_RX_DL_HL"},
14509
14510 /* connect to INT4_MI2S_DL_HL since same pcm_id */
14511 {"INT0_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14512 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_DL_HL"},
14513 {"INT4_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14514 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_DL_HL"},
14515 {"PRI_MI2S_RX_DL_HL", "Switch", "PRI_MI2S_DL_HL"},
14516 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_DL_HL"},
14517 {"SEC_MI2S_RX_DL_HL", "Switch", "SEC_MI2S_DL_HL"},
14518 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_DL_HL"},
14519 {"TERT_MI2S_RX_DL_HL", "Switch", "TERT_MI2S_DL_HL"},
14520 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_DL_HL"},
14521
14522 {"QUAT_MI2S_RX_DL_HL", "Switch", "QUAT_MI2S_DL_HL"},
14523 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_DL_HL"},
14524 {"MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14525 {"INT3_MI2S_UL_HL", NULL, "INT3_MI2S_TX"},
14526 {"TERT_MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14527 {"SEC_I2S_RX", NULL, "SEC_I2S_DL_HL"},
14528 {"PRI_MI2S_UL_HL", NULL, "PRI_MI2S_TX"},
14529 {"SEC_MI2S_UL_HL", NULL, "SEC_MI2S_TX"},
14530 {"SEC_MI2S_RX", NULL, "SEC_MI2S_DL_HL"},
14531 {"PRI_MI2S_RX", NULL, "PRI_MI2S_DL_HL"},
14532 {"TERT_MI2S_RX", NULL, "TERT_MI2S_DL_HL"},
14533 {"QUAT_MI2S_UL_HL", NULL, "QUAT_MI2S_TX"},
14534
14535 {"PRI_TDM_TX_0_UL_HL", NULL, "PRI_TDM_TX_0"},
14536 {"PRI_TDM_TX_1_UL_HL", NULL, "PRI_TDM_TX_1"},
14537 {"PRI_TDM_TX_2_UL_HL", NULL, "PRI_TDM_TX_2"},
14538 {"PRI_TDM_TX_3_UL_HL", NULL, "PRI_TDM_TX_3"},
14539 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0_DL_HL"},
14540 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1_DL_HL"},
14541 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2_DL_HL"},
14542 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3_DL_HL"},
14543 {"SEC_TDM_TX_0_UL_HL", NULL, "SEC_TDM_TX_0"},
14544 {"SEC_TDM_TX_1_UL_HL", NULL, "SEC_TDM_TX_1"},
14545 {"SEC_TDM_TX_2_UL_HL", NULL, "SEC_TDM_TX_2"},
14546 {"SEC_TDM_TX_3_UL_HL", NULL, "SEC_TDM_TX_3"},
14547 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0_DL_HL"},
14548 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1_DL_HL"},
14549 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2_DL_HL"},
14550 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3_DL_HL"},
14551 {"TERT_TDM_TX_0_UL_HL", NULL, "TERT_TDM_TX_0"},
14552 {"TERT_TDM_TX_1_UL_HL", NULL, "TERT_TDM_TX_1"},
14553 {"TERT_TDM_TX_2_UL_HL", NULL, "TERT_TDM_TX_2"},
14554 {"TERT_TDM_TX_3_UL_HL", NULL, "TERT_TDM_TX_3"},
14555 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0_DL_HL"},
14556 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1_DL_HL"},
14557 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2_DL_HL"},
14558 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3_DL_HL"},
14559 {"QUAT_TDM_TX_0_UL_HL", NULL, "QUAT_TDM_TX_0"},
14560 {"QUAT_TDM_TX_1_UL_HL", NULL, "QUAT_TDM_TX_1"},
14561 {"QUAT_TDM_TX_2_UL_HL", NULL, "QUAT_TDM_TX_2"},
14562 {"QUAT_TDM_TX_3_UL_HL", NULL, "QUAT_TDM_TX_3"},
14563 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0_DL_HL"},
14564 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1_DL_HL"},
14565 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_DL_HL"},
14566 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3_DL_HL"},
14567
14568 {"PRI_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14569 {"PRI_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14570 {"PRI_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14571 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14572 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14573 {"PRI_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14574 {"PRI_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14575 {"PRI_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14576 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14577 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14578 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14579 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14580 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14581 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14582 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14583 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14584 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Port Mixer"},
14585
14586 {"PRI_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14587 {"PRI_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14588 {"PRI_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14589 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14590 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14591 {"PRI_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14592 {"PRI_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14593 {"PRI_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14594 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14595 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14596 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14597 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14598 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14599 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14600 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14601 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14602 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Port Mixer"},
14603
14604 {"PRI_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14605 {"PRI_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14606 {"PRI_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14607 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14608 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14609 {"PRI_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14610 {"PRI_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14611 {"PRI_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14612 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14613 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14614 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14615 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14616 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14617 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14618 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14619 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14620 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Port Mixer"},
14621
14622 {"PRI_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14623 {"PRI_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14624 {"PRI_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14625 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14626 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14627 {"PRI_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14628 {"PRI_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14629 {"PRI_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14630 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14631 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14632 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14633 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14634 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14635 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14636 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14637 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14638 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Port Mixer"},
14639
14640 {"SEC_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14641 {"SEC_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14642 {"SEC_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14643 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14644 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14645 {"SEC_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14646 {"SEC_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14647 {"SEC_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14648 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14649 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14650 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14651 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14652 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14653 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14654 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14655 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14656 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Port Mixer"},
14657
14658 {"SEC_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14659 {"SEC_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14660 {"SEC_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14661 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14662 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14663 {"SEC_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14664 {"SEC_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14665 {"SEC_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14666 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14667 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14668 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14669 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14670 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14671 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14672 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14673 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14674 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Port Mixer"},
14675
14676 {"SEC_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14677 {"SEC_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14678 {"SEC_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14679 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14680 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14681 {"SEC_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14682 {"SEC_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14683 {"SEC_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14684 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14685 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14686 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14687 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14688 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14689 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14690 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14691 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14692 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Port Mixer"},
14693
14694 {"SEC_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14695 {"SEC_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14696 {"SEC_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14697 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14698 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14699 {"SEC_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14700 {"SEC_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14701 {"SEC_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14702 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14703 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14704 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14705 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14706 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14707 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14708 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14709 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14710 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Port Mixer"},
14711
14712 {"TERT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14713 {"TERT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14714 {"TERT_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14715 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14716 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14717 {"TERT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14718 {"TERT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14719 {"TERT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14720 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14721 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14722 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14723 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14724 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14725 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14726 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14727 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14728 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Port Mixer"},
14729
14730 {"TERT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14731 {"TERT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14732 {"TERT_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14733 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14734 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14735 {"TERT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14736 {"TERT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14737 {"TERT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14738 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14739 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14740 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14741 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14742 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14743 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14744 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14745 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14746 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Port Mixer"},
14747
14748 {"TERT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14749 {"TERT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14750 {"TERT_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14751 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14752 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14753 {"TERT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14754 {"TERT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14755 {"TERT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14756 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14757 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14758 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14759 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14760 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14761 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14762 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14763 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14764 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Port Mixer"},
14765
14766 {"TERT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14767 {"TERT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14768 {"TERT_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14769 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14770 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14771 {"TERT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14772 {"TERT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14773 {"TERT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14774 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14775 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14776 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14777 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14778 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14779 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14780 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14781 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14782 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Port Mixer"},
14783
14784 {"QUAT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14785 {"QUAT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14786 {"QUAT_TDM_RX_0 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14787 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14788 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14789 {"QUAT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14790 {"QUAT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14791 {"QUAT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14792 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14793 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14794 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14795 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14796 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14797 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14798 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14799 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14800 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Port Mixer"},
14801
14802 {"QUAT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14803 {"QUAT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14804 {"QUAT_TDM_RX_1 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14805 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14806 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14807 {"QUAT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14808 {"QUAT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14809 {"QUAT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14810 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14811 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14812 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14813 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14814 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14815 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14816 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14817 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14818 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Port Mixer"},
14819
14820 {"QUAT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14821 {"QUAT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14822 {"QUAT_TDM_RX_2 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14823 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14824 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14825 {"QUAT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14826 {"QUAT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14827 {"QUAT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14828 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14829 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14830 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14831 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14832 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14833 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14834 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14835 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14836 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Port Mixer"},
14837
14838 {"QUAT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14839 {"QUAT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14840 {"QUAT_TDM_RX_3 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14841 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14842 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14843 {"QUAT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14844 {"QUAT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14845 {"QUAT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14846 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14847 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14848 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14849 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14850 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14851 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14852 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14853 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14854 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"},
14855
14856 {"INT0_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14857 {"INT0_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14858 {"INT0_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14859 {"INT0_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14860 {"INT0_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14861 {"INT0_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14862 {"INT0_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14863 {"INT0_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14864 {"INT0_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14865 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Port Mixer"},
14866
14867 {"INT4_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14868 {"INT4_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14869 {"INT4_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14870 {"INT4_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14871 {"INT4_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14872 {"INT4_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14873 {"INT4_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14874 {"INT4_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14875 {"INT4_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14876 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Port Mixer"},
14877
14878 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14879 {"SLIMBUS_0_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14880 {"SLIMBUS_0_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14881 {"SLIMBUS_0_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14882 {"SLIMBUS_0_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14883 {"SLIMBUS_0_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14884 {"SLIMBUS_0_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14885 {"SLIMBUS_0_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14886 {"SLIMBUS_0_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14887 {"SLIMBUS_0_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14888 {"SLIMBUS_0_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14889 {"SLIMBUS_0_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14890 {"SLIMBUS_0_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14891 {"SLIMBUS_0_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14892 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14893 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Port Mixer"},
14894 {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14895 {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14896 {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"},
14897 {"USB_AUDIO_RX Port Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
14898 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Port Mixer"},
14899 {"USB_DL_HL", "Switch", "USBAUDIO_DL_HL"},
14900 {"USB_AUDIO_RX", NULL, "USB_DL_HL"},
14901 {"USBAUDIO_UL_HL", NULL, "USB_AUDIO_TX"},
14902
14903
14904 {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14905 {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14906 {"AUX_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14907 {"AUX_PCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14908 {"AUX_PCM_RX Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14909 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Port Mixer"},
14910
14911 {"SEC_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14912 {"SEC_AUXPCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14913 {"SEC_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14914 {"SEC_AUX_PCM_RX", NULL, "SEC_AUXPCM_RX Port Mixer"},
14915
14916 {"TERT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14917 {"TERT_AUXPCM_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14918 {"TERT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14919 {"TERT_AUX_PCM_RX", NULL, "TERT_AUXPCM_RX Port Mixer"},
14920
14921 {"QUAT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14922 {"QUAT_AUXPCM_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14923 {"QUAT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14924 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUXPCM_RX Port Mixer"},
14925
14926 {"Voice Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14927 {"Voice Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14928 {"Voice Stub Tx Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14929 {"Voice Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14930 {"Voice Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14931 {"Voice Stub Tx Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14932 {"Voice Stub Tx Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14933 {"Voice Stub Tx Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14934 {"Voice Stub Tx Mixer", "MI2S_TX", "MI2S_TX"},
14935 {"Voice Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14936 {"Voice Stub Tx Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14937 {"Voice Stub Tx Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14938 {"Voice Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14939 {"Voice Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14940 {"Voice Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14941 {"Voice Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14942 {"Voice Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14943 {"Voice Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14944 {"VOICE_STUB_UL", NULL, "Voice Stub Tx Mixer"},
14945
14946 {"VoLTE Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14947 {"VoLTE Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14948 {"VoLTE Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14949 {"VoLTE Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14950 {"VoLTE Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14951 {"VoLTE Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14952 {"VoLTE Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14953 {"VoLTE Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14954 {"VoLTE Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14955 {"VoLTE Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14956 {"VoLTE Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14957 {"VOLTE_STUB_UL", NULL, "VoLTE Stub Tx Mixer"},
14958
14959 {"Voice2 Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14960 {"Voice2 Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14961 {"Voice2 Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14962 {"Voice2 Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14963 {"Voice2 Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14964 {"Voice2 Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14965 {"Voice2 Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14966 {"Voice2 Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14967 {"Voice2 Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14968 {"Voice2 Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14969 {"Voice2 Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14970 {"VOICE2_STUB_UL", NULL, "Voice2 Stub Tx Mixer"},
14971
14972 {"STUB_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
14973 {"STUB_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14974 {"STUB_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14975 {"STUB_RX", NULL, "STUB_RX Mixer"},
14976 {"SLIMBUS_1_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
14977 {"SLIMBUS_1_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14978 {"SLIMBUS_1_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14979 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Mixer"},
14980 {"AFE_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14981 {"AFE_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14982 {"AFE_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14983 {"SLIMBUS_3_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14984 {"SLIMBUS_3_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14985 {"SLIMBUS_3_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14986 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX_Voice Mixer"},
14987
14988 {"SLIM_7_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14989 {"SLIM_7_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14990 {"SLIM_7_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14991 {"SLIM_7_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14992 {"SLIM_7_RX_Voice Mixer", "Voip", "VOIP_DL"},
14993 {"SLIM_7_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14994 {"SLIM_7_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14995 {"SLIM_7_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14996 {"SLIM_7_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14997 {"SLIM_7_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14998 {"SLIM_7_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14999 {"SLIM_7_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
15000 {"SLIMBUS_7_RX", NULL, "SLIM_7_RX_Voice Mixer"},
15001
15002 {"SLIM_8_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
15003 {"SLIM_8_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
15004 {"SLIM_8_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
15005 {"SLIM_8_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
15006 {"SLIM_8_RX_Voice Mixer", "Voip", "VOIP_DL"},
15007 {"SLIM_8_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
15008 {"SLIM_8_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
15009 {"SLIM_8_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15010 {"SLIM_8_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15011 {"SLIM_8_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
15012 {"SLIM_8_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
15013 {"SLIM_8_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
15014 {"SLIMBUS_8_RX", NULL, "SLIM_8_RX_Voice Mixer"},
15015
15016 {"SLIMBUS_1_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15017 {"SLIMBUS_1_RX Port Mixer", "AFE_PCM_TX", "PCM_TX"},
15018 {"SLIMBUS_1_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15019 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Port Mixer"},
15020 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15021 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15022 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Port Mixer"},
15023 {"SLIMBUS_3_RX Port Mixer", "INTERNAL_BT_SCO_RX", "INT_BT_SCO_RX"},
15024 {"SLIMBUS_3_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15025 {"SLIMBUS_3_RX Port Mixer", "AFE_PCM_RX", "PCM_RX"},
15026 {"SLIMBUS_3_RX Port Mixer", "AUX_PCM_RX", "AUX_PCM_RX"},
15027 {"SLIMBUS_3_RX Port Mixer", "SLIM_0_RX", "SLIMBUS_0_RX"},
15028 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX Port Mixer"},
15029
15030 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15031 {"SLIMBUS_6_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15032 {"SLIMBUS_6_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15033 {"SLIMBUS_6_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
15034 {"SLIMBUS_6_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15035 {"SLIMBUS_6_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15036 {"SLIMBUS_6_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
15037 {"SLIMBUS_6_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15038 {"SLIMBUS_6_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15039 {"SLIMBUS_6_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15040 {"SLIMBUS_6_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15041 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15042 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Port Mixer"},
15043
15044 {"HDMI_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15045 {"HDMI", NULL, "HDMI_RX Port Mixer"},
15046
15047 {"DISPLAY_PORT_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15048 {"DISPLAY_PORT", NULL, "DISPLAY_PORT_RX Port Mixer"},
15049
15050 {"SEC_I2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15051 {"SEC_I2S_RX", NULL, "SEC_I2S_RX Port Mixer"},
15052
15053 {"MI2S_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15054 {"MI2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15055 {"MI2S_RX", NULL, "MI2S_RX Port Mixer"},
15056
15057 {"PRI_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15058 {"PRI_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15059 {"PRI_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15060 {"PRI_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15061 {"PRI_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15062 {"PRI_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15063 {"PRI_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15064 {"PRI_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15065 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Port Mixer"},
15066
15067 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15068 {"SEC_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15069 {"SEC_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15070 {"SEC_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15071 {"SEC_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15072 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15073 {"SEC_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15074 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Port Mixer"},
15075
15076 {"TERT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15077 {"TERT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15078 {"TERT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15079 {"TERT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15080 {"TERT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15081 {"TERT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15082 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Port Mixer"},
15083
15084 {"QUAT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15085 {"QUAT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15086 {"QUAT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15087 {"QUAT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15088 {"QUAT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15089 {"QUAT_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15090 {"QUAT_MI2S_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15091 {"QUAT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15092 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Port Mixer"},
15093
15094 /* Backend Enablement */
15095
15096 {"BE_OUT", NULL, "PRI_I2S_RX"},
15097 {"BE_OUT", NULL, "SEC_I2S_RX"},
15098 {"BE_OUT", NULL, "SLIMBUS_0_RX"},
15099 {"BE_OUT", NULL, "SLIMBUS_1_RX"},
15100 {"BE_OUT", NULL, "SLIMBUS_2_RX"},
15101 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15102 {"BE_OUT", NULL, "SLIMBUS_4_RX"},
15103 {"BE_OUT", NULL, "SLIMBUS_5_RX"},
15104 {"BE_OUT", NULL, "SLIMBUS_6_RX"},
15105 {"BE_OUT", NULL, "SLIMBUS_7_RX"},
15106 {"BE_OUT", NULL, "SLIMBUS_8_RX"},
15107 {"BE_OUT", NULL, "USB_AUDIO_RX"},
15108 {"BE_OUT", NULL, "HDMI"},
15109 {"BE_OUT", NULL, "DISPLAY_PORT"},
15110 {"BE_OUT", NULL, "SPDIF_RX"},
15111 {"BE_OUT", NULL, "MI2S_RX"},
15112 {"BE_OUT", NULL, "QUAT_MI2S_RX"},
15113 {"BE_OUT", NULL, "QUIN_MI2S_RX"},
15114 {"BE_OUT", NULL, "TERT_MI2S_RX"},
15115 {"BE_OUT", NULL, "SEC_MI2S_RX"},
15116 {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"},
15117 {"BE_OUT", NULL, "PRI_MI2S_RX"},
15118 {"BE_OUT", NULL, "INT0_MI2S_RX"},
15119 {"BE_OUT", NULL, "INT4_MI2S_RX"},
15120 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
15121 {"BE_OUT", NULL, "INT_BT_A2DP_RX"},
15122 {"BE_OUT", NULL, "INT_FM_RX"},
15123 {"BE_OUT", NULL, "PCM_RX"},
15124 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15125 {"BE_OUT", NULL, "AUX_PCM_RX"},
15126 {"BE_OUT", NULL, "SEC_AUX_PCM_RX"},
15127 {"BE_OUT", NULL, "TERT_AUX_PCM_RX"},
15128 {"BE_OUT", NULL, "QUAT_AUX_PCM_RX"},
15129 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
15130 {"BE_OUT", NULL, "INT_FM_RX"},
15131 {"BE_OUT", NULL, "PCM_RX"},
15132 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15133 {"BE_OUT", NULL, "VOICE_PLAYBACK_TX"},
15134 {"BE_OUT", NULL, "VOICE2_PLAYBACK_TX"},
15135 {"BE_OUT", NULL, "PRI_TDM_RX_0"},
15136 {"BE_OUT", NULL, "PRI_TDM_RX_1"},
15137 {"BE_OUT", NULL, "PRI_TDM_RX_2"},
15138 {"BE_OUT", NULL, "PRI_TDM_RX_3"},
15139 {"BE_OUT", NULL, "SEC_TDM_RX_0"},
15140 {"BE_OUT", NULL, "SEC_TDM_RX_1"},
15141 {"BE_OUT", NULL, "SEC_TDM_RX_2"},
15142 {"BE_OUT", NULL, "SEC_TDM_RX_3"},
15143 {"BE_OUT", NULL, "TERT_TDM_RX_0"},
15144 {"BE_OUT", NULL, "TERT_TDM_RX_1"},
15145 {"BE_OUT", NULL, "TERT_TDM_RX_2"},
15146 {"BE_OUT", NULL, "TERT_TDM_RX_3"},
15147 {"BE_OUT", NULL, "TERT_TDM_RX_4"},
15148 {"BE_OUT", NULL, "QUAT_TDM_RX_0"},
15149 {"BE_OUT", NULL, "QUAT_TDM_RX_1"},
15150 {"BE_OUT", NULL, "QUAT_TDM_RX_2"},
15151 {"BE_OUT", NULL, "QUAT_TDM_RX_3"},
15152
15153 {"PRI_I2S_TX", NULL, "BE_IN"},
15154 {"MI2S_TX", NULL, "BE_IN"},
15155 {"QUAT_MI2S_TX", NULL, "BE_IN"},
15156 {"QUIN_MI2S_TX", NULL, "BE_IN"},
15157 {"PRI_MI2S_TX", NULL, "BE_IN"},
15158 {"TERT_MI2S_TX", NULL, "BE_IN"},
15159 {"INT2_MI2S_TX", NULL, "BE_IN"},
15160 {"INT3_MI2S_TX", NULL, "BE_IN"},
15161 {"INT5_MI2S_TX", NULL, "BE_IN"},
15162 {"SEC_MI2S_TX", NULL, "BE_IN"},
15163 {"SENARY_MI2S_TX", NULL, "BE_IN" },
15164 {"SLIMBUS_0_TX", NULL, "BE_IN" },
15165 {"SLIMBUS_1_TX", NULL, "BE_IN" },
15166 {"SLIMBUS_3_TX", NULL, "BE_IN" },
15167 {"SLIMBUS_4_TX", NULL, "BE_IN" },
15168 {"SLIMBUS_5_TX", NULL, "BE_IN" },
15169 {"SLIMBUS_6_TX", NULL, "BE_IN" },
15170 {"SLIMBUS_7_TX", NULL, "BE_IN" },
15171 {"SLIMBUS_8_TX", NULL, "BE_IN" },
15172 {"USB_AUDIO_TX", NULL, "BE_IN" },
15173 {"INT_BT_SCO_TX", NULL, "BE_IN"},
15174 {"INT_FM_TX", NULL, "BE_IN"},
15175 {"PCM_TX", NULL, "BE_IN"},
15176 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15177 {"BE_OUT", NULL, "STUB_RX"},
15178 {"STUB_TX", NULL, "BE_IN"},
15179 {"STUB_1_TX", NULL, "BE_IN"},
15180 {"BE_OUT", NULL, "AUX_PCM_RX"},
15181 {"AUX_PCM_TX", NULL, "BE_IN"},
15182 {"SEC_AUX_PCM_TX", NULL, "BE_IN"},
15183 {"TERT_AUX_PCM_TX", NULL, "BE_IN"},
15184 {"QUAT_AUX_PCM_TX", NULL, "BE_IN"},
15185 {"INCALL_RECORD_TX", NULL, "BE_IN"},
15186 {"INCALL_RECORD_RX", NULL, "BE_IN"},
15187 {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
15188 {"SLIM0_RX_VI_FB_RCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
15189 {"PRI_MI2S_RX_VI_FB_MUX", "SENARY_TX", "SENARY_TX"},
15190 {"INT4_MI2S_RX_VI_FB_MONO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
15191 {"INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
15192 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"},
15193 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_RCH_MUX"},
15194 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_VI_FB_MUX"},
15195 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_MONO_CH_MUX"},
15196 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_STEREO_CH_MUX"},
15197 {"PRI_TDM_TX_0", NULL, "BE_IN"},
15198 {"PRI_TDM_TX_1", NULL, "BE_IN"},
15199 {"PRI_TDM_TX_2", NULL, "BE_IN"},
15200 {"PRI_TDM_TX_3", NULL, "BE_IN"},
15201 {"SEC_TDM_TX_0", NULL, "BE_IN"},
15202 {"SEC_TDM_TX_1", NULL, "BE_IN"},
15203 {"SEC_TDM_TX_2", NULL, "BE_IN"},
15204 {"SEC_TDM_TX_3", NULL, "BE_IN"},
15205 {"TERT_TDM_TX_0", NULL, "BE_IN"},
15206 {"TERT_TDM_TX_1", NULL, "BE_IN"},
15207 {"TERT_TDM_TX_2", NULL, "BE_IN"},
15208 {"TERT_TDM_TX_3", NULL, "BE_IN"},
15209 {"QUAT_TDM_TX_0", NULL, "BE_IN"},
15210 {"QUAT_TDM_TX_1", NULL, "BE_IN"},
15211 {"QUAT_TDM_TX_2", NULL, "BE_IN"},
15212 {"QUAT_TDM_TX_3", NULL, "BE_IN"},
15213};
15214
15215static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream,
15216 struct snd_pcm_hw_params *params)
15217{
15218 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15219 unsigned int be_id = rtd->dai_link->id;
15220
15221 if (be_id >= MSM_BACKEND_DAI_MAX) {
15222 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15223 return -EINVAL;
15224 }
15225
15226 mutex_lock(&routing_lock);
15227 msm_bedais[be_id].sample_rate = params_rate(params);
15228 msm_bedais[be_id].channel = params_channels(params);
15229 msm_bedais[be_id].format = params_format(params);
15230 pr_debug("%s: BE Sample Rate (%d) format (%d) BE id %d\n",
15231 __func__, msm_bedais[be_id].sample_rate,
15232 msm_bedais[be_id].format, be_id);
15233 mutex_unlock(&routing_lock);
15234 return 0;
15235}
15236
15237static int msm_pcm_routing_close(struct snd_pcm_substream *substream)
15238{
15239 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15240 unsigned int be_id = rtd->dai_link->id;
15241 int i, session_type, path_type, topology;
15242 struct msm_pcm_routing_bdai_data *bedai;
15243 struct msm_pcm_routing_fdai_data *fdai;
15244
15245 pr_debug("%s: substream->pcm->id:%s\n",
15246 __func__, substream->pcm->id);
15247
15248 if (be_id >= MSM_BACKEND_DAI_MAX) {
15249 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15250 return -EINVAL;
15251 }
15252
15253 bedai = &msm_bedais[be_id];
15254 session_type = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
15255 0 : 1);
15256 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
15257 path_type = ADM_PATH_PLAYBACK;
15258 else
15259 path_type = ADM_PATH_LIVE_REC;
15260
15261 mutex_lock(&routing_lock);
15262 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15263 if (!is_mm_lsm_fe_id(i))
15264 continue;
15265 fdai = &fe_dai_map[i][session_type];
15266 if (fdai->strm_id != INVALID_SESSION) {
15267 int idx;
15268 int port_id;
15269 unsigned long copp =
15270 session_copp_map[i][session_type][be_id];
15271 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++)
15272 if (test_bit(idx, &copp))
15273 break;
15274 fdai->be_srate = bedai->sample_rate;
15275 port_id = bedai->port_id;
15276 topology = adm_get_topology_for_port_copp_idx(port_id,
15277 idx);
15278 adm_close(bedai->port_id, fdai->perf_mode, idx);
15279 pr_debug("%s: copp:%ld,idx bit fe:%d, type:%d,be:%d topology=0x%x\n",
15280 __func__, copp, i, session_type, be_id,
15281 topology);
15282 clear_bit(idx,
15283 &session_copp_map[i][session_type][be_id]);
15284 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15285 (bedai->passthr_mode[i] == LEGACY_PCM))
15286 msm_pcm_routing_deinit_pp(bedai->port_id,
15287 topology);
15288 }
15289 }
15290
15291 bedai->active = 0;
15292 bedai->sample_rate = 0;
15293 bedai->channel = 0;
15294 for (i = 0; i < MSM_FRONTEND_DAI_MAX; i++) {
15295 if (bedai->passthr_mode[i] != LISTEN)
15296 bedai->passthr_mode[i] = LEGACY_PCM;
15297 }
15298 mutex_unlock(&routing_lock);
15299
15300 return 0;
15301}
15302
15303static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
15304{
15305 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15306 unsigned int be_id = rtd->dai_link->id;
15307 int i, path_type, topology;
15308 int session_type = INVALID_SESSION;
15309 struct msm_pcm_routing_bdai_data *bedai;
15310 u32 channels, sample_rate;
15311 uint16_t bits_per_sample = 16, voc_path_type;
15312 struct msm_pcm_routing_fdai_data *fdai;
15313 u32 session_id;
15314 struct media_format_info voc_be_media_format;
15315 bool is_lsm;
15316
15317 pr_debug("%s: substream->pcm->id:%s\n",
15318 __func__, substream->pcm->id);
15319
15320 if (be_id >= MSM_BACKEND_DAI_MAX) {
15321 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15322 return -EINVAL;
15323 }
15324
15325 bedai = &msm_bedais[be_id];
15326
15327 mutex_lock(&routing_lock);
15328 if (bedai->active == 1)
15329 goto done; /* Ignore prepare if back-end already active */
15330
15331 /* AFE port is not active at this point. However, still
15332 * go ahead setting active flag under the notion that
15333 * QDSP6 is able to handle ADM starting before AFE port
15334 * is started.
15335 */
15336 bedai->active = 1;
15337
15338 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15339 if (!(is_mm_lsm_fe_id(i) &&
15340 route_check_fe_id_adm_support(i)))
15341 continue;
15342
15343 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
15344 if (bedai->passthr_mode[i] != LEGACY_PCM)
15345 path_type = ADM_PATH_COMPRESSED_RX;
15346 else
15347 path_type = ADM_PATH_PLAYBACK;
15348 session_type = SESSION_TYPE_RX;
15349 } else {
15350 path_type = ADM_PATH_LIVE_REC;
15351 session_type = SESSION_TYPE_TX;
15352 }
15353
15354 is_lsm = (i >= MSM_FRONTEND_DAI_LSM1) &&
15355 (i <= MSM_FRONTEND_DAI_LSM8);
15356 fdai = &fe_dai_map[i][session_type];
15357 if (fdai->strm_id != INVALID_SESSION) {
15358 int app_type, app_type_idx, copp_idx, acdb_dev_id;
15359
15360 if (session_type == SESSION_TYPE_TX &&
15361 fdai->be_srate &&
15362 (fdai->be_srate != bedai->sample_rate)) {
15363 pr_debug("%s: flush strm %d diff BE rates\n",
15364 __func__,
15365 fdai->strm_id);
15366
15367 if (fdai->event_info.event_func)
15368 fdai->event_info.event_func(
15369 MSM_PCM_RT_EVT_BUF_RECFG,
15370 fdai->event_info.priv_data);
15371 fdai->be_srate = 0; /* might not need it */
15372 }
15373 bits_per_sample = msm_routing_get_bit_width(
15374 bedai->format);
15375
15376 app_type =
15377 fe_dai_app_type_cfg[i][session_type][be_id].app_type;
15378 if (app_type && is_lsm) {
15379 app_type_idx =
15380 msm_pcm_routing_get_lsm_app_type_idx(app_type);
15381 sample_rate =
15382 fe_dai_app_type_cfg[i][session_type][be_id]
15383 .sample_rate;
15384 bits_per_sample =
15385 lsm_app_type_cfg[app_type_idx].bit_width;
15386 } else if (app_type) {
15387 app_type_idx =
15388 msm_pcm_routing_get_app_type_idx(app_type);
15389 sample_rate =
15390 fe_dai_app_type_cfg[i][session_type]
15391 [be_id].sample_rate;
15392 bits_per_sample =
15393 app_type_cfg[app_type_idx].bit_width;
15394 } else
15395 sample_rate = bedai->sample_rate;
15396 /*
15397 * check if ADM needs to be configured with different
15398 * channel mapping than backend
15399 */
15400 if (!bedai->adm_override_ch)
15401 channels = bedai->channel;
15402 else
15403 channels = bedai->adm_override_ch;
15404 acdb_dev_id =
15405 fe_dai_app_type_cfg[i][session_type][be_id].acdb_dev_id;
15406 topology = msm_routing_get_adm_topology(i, session_type,
15407 be_id);
15408 copp_idx = adm_open(bedai->port_id, path_type,
15409 sample_rate, channels, topology,
15410 fdai->perf_mode, bits_per_sample,
15411 app_type, acdb_dev_id);
15412 if ((copp_idx < 0) ||
15413 (copp_idx >= MAX_COPPS_PER_PORT)) {
15414 pr_err("%s: adm open failed\n", __func__);
15415 mutex_unlock(&routing_lock);
15416 return -EINVAL;
15417 }
15418 pr_debug("%s: setting idx bit of fe:%d, type: %d, be:%d\n",
15419 __func__, i, session_type, be_id);
15420 set_bit(copp_idx,
15421 &session_copp_map[i][session_type][be_id]);
15422
15423 if (msm_is_resample_needed(
15424 sample_rate,
15425 bedai->sample_rate))
15426 adm_copp_mfc_cfg(
15427 bedai->port_id, copp_idx,
15428 bedai->sample_rate);
15429
15430 msm_pcm_routing_build_matrix(i, session_type, path_type,
15431 fdai->perf_mode,
15432 bedai->passthr_mode[i]);
15433 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15434 (bedai->passthr_mode[i] == LEGACY_PCM))
15435 msm_pcm_routing_cfg_pp(bedai->port_id, copp_idx,
15436 topology, channels);
15437 }
15438 }
15439
15440 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15441 session_id = msm_pcm_routing_get_voc_sessionid(i);
15442 if (session_id) {
15443 pr_debug("%s voice session_id: 0x%x\n", __func__,
15444 session_id);
15445
15446 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
15447 voc_path_type = RX_PATH;
15448 else
15449 voc_path_type = TX_PATH;
15450
15451 voc_set_route_flag(session_id, voc_path_type, 1);
15452
15453 memset(&voc_be_media_format, 0,
15454 sizeof(struct media_format_info));
15455
15456 voc_be_media_format.port_id = bedai->port_id;
15457 voc_be_media_format.num_channels = bedai->channel;
15458 voc_be_media_format.sample_rate = bedai->sample_rate;
15459 voc_be_media_format.bits_per_sample = bedai->format;
15460 /* Defaulting this to 1 for voice call usecases */
15461 voc_be_media_format.channel_mapping[0] = 1;
15462
15463 voc_set_device_config(session_id, voc_path_type,
15464 &voc_be_media_format);
15465
15466 if (voc_get_route_flag(session_id, RX_PATH) &&
15467 voc_get_route_flag(session_id, TX_PATH))
15468 voc_enable_device(session_id);
15469 }
15470 }
15471
15472 /* Check if backend is an external ec ref port and set as needed */
15473 if (unlikely(bedai->port_id == voc_get_ext_ec_ref_port_id())) {
15474
15475 memset(&voc_be_media_format, 0,
15476 sizeof(struct media_format_info));
15477
15478 /* Get format info for ec ref port from msm_bedais[] */
15479 voc_be_media_format.port_id = bedai->port_id;
15480 voc_be_media_format.num_channels = bedai->channel;
15481 voc_be_media_format.bits_per_sample = bedai->format;
15482 voc_be_media_format.sample_rate = bedai->sample_rate;
15483 /* Defaulting this to 1 for voice call usecases */
15484 voc_be_media_format.channel_mapping[0] = 1;
15485 voc_set_ext_ec_ref_media_fmt_info(&voc_be_media_format);
15486 pr_debug("%s: EC Ref media format info set to port_id=%d, num_channels=%d, bits_per_sample=%d, sample_rate=%d\n",
15487 __func__, voc_be_media_format.port_id,
15488 voc_be_media_format.num_channels,
15489 voc_be_media_format.bits_per_sample,
15490 voc_be_media_format.sample_rate);
15491 }
15492
15493done:
15494 mutex_unlock(&routing_lock);
15495
15496 return 0;
15497}
15498
15499static int msm_routing_send_device_pp_params(int port_id, int copp_idx,
15500 int fe_id)
15501{
15502 int index, topo_id, be_idx;
15503 unsigned long pp_config = 0;
15504 bool mute_on;
15505 int latency;
15506 bool compr_passthr_mode = true;
15507
15508 pr_debug("%s: port_id %d, copp_idx %d\n", __func__, port_id, copp_idx);
15509
15510 if (port_id != HDMI_RX && port_id != DISPLAY_PORT_RX) {
15511 pr_err("%s: Device pp params on invalid port %d\n",
15512 __func__, port_id);
15513 return -EINVAL;
15514 }
15515
15516 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15517 if (port_id == msm_bedais[be_idx].port_id)
15518 break;
15519 }
15520
15521 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15522 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15523 return -EINVAL;
15524 }
15525
15526 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15527 if (msm_bedais_pp_params[index].port_id == port_id)
15528 break;
15529 }
15530 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15531 pr_err("%s: Invalid backend pp params index %d\n",
15532 __func__, index);
15533 return -EINVAL;
15534 }
15535
15536 topo_id = adm_get_topology_for_port_copp_idx(port_id, copp_idx);
15537 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY) {
15538 pr_err("%s: Invalid passthrough topology 0x%x\n",
15539 __func__, topo_id);
15540 return -EINVAL;
15541 }
15542
15543 if ((msm_bedais[be_idx].passthr_mode[fe_id] == LEGACY_PCM) ||
15544 (msm_bedais[be_idx].passthr_mode[fe_id] == LISTEN))
15545 compr_passthr_mode = false;
15546
15547 pp_config = msm_bedais_pp_params[index].pp_params_config;
15548 if (test_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config)) {
15549 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15550 clear_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config);
15551 mute_on = msm_bedais_pp_params[index].mute_on;
15552 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15553 adm_send_compressed_device_mute(port_id,
15554 copp_idx,
15555 mute_on);
15556 }
15557 if (test_bit(ADM_PP_PARAM_LATENCY_BIT, &pp_config)) {
15558 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15559 clear_bit(ADM_PP_PARAM_LATENCY_BIT,
15560 &pp_config);
15561 latency = msm_bedais_pp_params[index].latency;
15562 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15563 adm_send_compressed_device_latency(port_id,
15564 copp_idx,
15565 latency);
15566 }
15567 return 0;
15568}
15569
15570static int msm_routing_put_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15571 struct snd_ctl_elem_value *ucontrol)
15572{
15573 int pp_id = ucontrol->value.integer.value[0];
15574 int port_id = 0;
15575 int index, be_idx, i, topo_id, idx;
15576 bool mute;
15577 int latency;
15578 bool compr_passthr_mode = true;
15579
15580 pr_debug("%s: pp_id: 0x%x\n", __func__, pp_id);
15581
15582 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15583 port_id = msm_bedais[be_idx].port_id;
15584 if (port_id == HDMI_RX || port_id == DISPLAY_PORT_RX)
15585 break;
15586 }
15587
15588 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15589 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15590 return -EINVAL;
15591 }
15592
15593 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15594 if (msm_bedais_pp_params[index].port_id == port_id)
15595 break;
15596 }
15597 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15598 pr_err("%s: Invalid pp params backend index %d\n",
15599 __func__, index);
15600 return -EINVAL;
15601 }
15602
15603 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
15604 MSM_FRONTEND_DAI_MM_SIZE) {
15605 if ((msm_bedais[be_idx].passthr_mode[i] == LEGACY_PCM) ||
15606 (msm_bedais[be_idx].passthr_mode[i] == LISTEN))
15607 compr_passthr_mode = false;
15608
15609 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15610 unsigned long copp =
15611 session_copp_map[i]
15612 [SESSION_TYPE_RX][be_idx];
15613 if (!test_bit(idx, &copp))
15614 continue;
15615 topo_id = adm_get_topology_for_port_copp_idx(port_id,
15616 idx);
15617 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY)
15618 continue;
15619 pr_debug("%s: port: 0x%x, copp %ld, be active: %d, passt: %d\n",
15620 __func__, port_id, copp, msm_bedais[be_idx].active,
15621 msm_bedais[be_idx].passthr_mode[i]);
15622 switch (pp_id) {
15623 case ADM_PP_PARAM_MUTE_ID:
15624 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15625 mute = ucontrol->value.integer.value[1] ? true : false;
15626 msm_bedais_pp_params[index].mute_on = mute;
15627 set_bit(ADM_PP_PARAM_MUTE_BIT,
15628 &msm_bedais_pp_params[index].pp_params_config);
15629 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15630 adm_send_compressed_device_mute(port_id,
15631 idx, mute);
15632 break;
15633 case ADM_PP_PARAM_LATENCY_ID:
15634 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15635 msm_bedais_pp_params[index].latency =
15636 ucontrol->value.integer.value[1];
15637 set_bit(ADM_PP_PARAM_LATENCY_BIT,
15638 &msm_bedais_pp_params[index].pp_params_config);
15639 latency = msm_bedais_pp_params[index].latency =
15640 ucontrol->value.integer.value[1];
15641 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15642 adm_send_compressed_device_latency(port_id,
15643 idx, latency);
15644 break;
15645 default:
15646 pr_info("%s, device pp param %d not supported\n",
15647 __func__, pp_id);
15648 break;
15649 }
15650 }
15651 }
15652 return 0;
15653}
15654
15655static int msm_routing_get_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15656 struct snd_ctl_elem_value *ucontrol)
15657{
15658 pr_debug("%s:msm_routing_get_device_pp_params_mixer", __func__);
15659 return 0;
15660}
15661
15662static const struct snd_kcontrol_new device_pp_params_mixer_controls[] = {
15663 SOC_SINGLE_MULTI_EXT("Device PP Params", SND_SOC_NOPM, 0, 0xFFFFFFFF,
15664 0, 3, msm_routing_get_device_pp_params_mixer,
15665 msm_routing_put_device_pp_params_mixer),
15666};
15667
15668static int msm_aptx_dec_license_control_get(struct snd_kcontrol *kcontrol,
15669 struct snd_ctl_elem_value *ucontrol)
15670{
15671 ucontrol->value.integer.value[0] =
15672 core_get_license_status(ASM_MEDIA_FMT_APTX);
15673 pr_debug("%s: status %ld\n", __func__,
15674 ucontrol->value.integer.value[0]);
15675 return 0;
15676}
15677
15678static int msm_aptx_dec_license_control_put(struct snd_kcontrol *kcontrol,
15679 struct snd_ctl_elem_value *ucontrol)
15680{
15681 int32_t status = 0;
15682
15683 status = core_set_license(ucontrol->value.integer.value[0],
15684 APTX_CLASSIC_DEC_LICENSE_ID);
15685 pr_debug("%s: status %d\n", __func__, status);
15686 return status;
15687}
15688
15689static const struct snd_kcontrol_new aptx_dec_license_controls[] = {
15690 SOC_SINGLE_EXT("APTX Dec License", SND_SOC_NOPM, 0,
15691 0xFFFF, 0, msm_aptx_dec_license_control_get,
15692 msm_aptx_dec_license_control_put),
15693};
15694
15695static int msm_routing_be_dai_name_table_info(struct snd_kcontrol *kcontrol,
15696 struct snd_ctl_elem_info *uinfo)
15697{
15698 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
15699 uinfo->count = sizeof(be_dai_name_table);
15700 return 0;
15701}
15702
15703static int msm_routing_be_dai_name_table_tlv_get(struct snd_kcontrol *kcontrol,
15704 unsigned int __user *bytes,
15705 unsigned int size)
15706{
15707 int i;
15708 int ret;
15709
15710 if (size < sizeof(be_dai_name_table)) {
15711 pr_err("%s: invalid size %d requested, returning\n",
15712 __func__, size);
15713 ret = -EINVAL;
15714 goto done;
15715 }
15716
15717 /*
15718 * Fill be_dai_name_table from msm_bedais table to reduce code changes
15719 * needed when adding new backends
15720 */
15721 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15722 be_dai_name_table[i].be_id = i;
15723 strlcpy(be_dai_name_table[i].be_name,
15724 msm_bedais[i].name,
15725 LPASS_BE_NAME_MAX_LENGTH);
15726 }
15727
15728 ret = copy_to_user(bytes, &be_dai_name_table,
15729 sizeof(be_dai_name_table));
15730 if (ret) {
15731 pr_err("%s: failed to copy be_dai_name_table\n", __func__);
15732 ret = -EFAULT;
15733 }
15734
15735done:
15736 return ret;
15737}
15738
15739static const struct snd_kcontrol_new
15740 msm_routing_be_dai_name_table_mixer_controls[] = {
15741 {
15742 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |
15743 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK,
15744 .info = msm_routing_be_dai_name_table_info,
15745 .name = "Backend DAI Name Table",
15746 .tlv.c = snd_soc_bytes_tlv_callback,
15747 .private_value = (unsigned long) &(struct soc_bytes_ext) {
15748 .max = sizeof(be_dai_name_table),
15749 .get = msm_routing_be_dai_name_table_tlv_get,
15750 }
15751 },
15752};
15753
15754static int msm_routing_stereo_channel_reverse_control_get(
15755 struct snd_kcontrol *kcontrol,
15756 struct snd_ctl_elem_value *ucontrol)
15757{
15758 ucontrol->value.integer.value[0] = swap_ch;
15759 pr_debug("%s: Swap channel value: %ld\n", __func__,
15760 ucontrol->value.integer.value[0]);
15761 return 0;
15762}
15763
15764static int msm_routing_stereo_channel_reverse_control_put(
15765 struct snd_kcontrol *kcontrol,
15766 struct snd_ctl_elem_value *ucontrol)
15767{
15768 int i, idx, be_index, port_id;
15769 int ret = 0;
15770 unsigned long copp;
15771
15772 pr_debug("%s Swap channel value:%ld\n", __func__,
15773 ucontrol->value.integer.value[0]);
15774
15775 swap_ch = ucontrol->value.integer.value[0];
15776
15777 mutex_lock(&routing_lock);
15778 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
15779 port_id = msm_bedais[be_index].port_id;
15780 if (!msm_bedais[be_index].active)
15781 continue;
15782
15783 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
15784 MSM_FRONTEND_DAI_MM_SIZE) {
15785 copp = session_copp_map[i][SESSION_TYPE_RX][be_index];
15786 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15787 if (!test_bit(idx, &copp))
15788 continue;
15789
15790 pr_debug("%s: swap channel control of portid:%d, coppid:%d\n",
15791 __func__, port_id, idx);
15792 ret = adm_swap_speaker_channels(
15793 port_id, idx,
15794 msm_bedais[be_index].sample_rate,
15795 swap_ch);
15796 if (ret) {
15797 pr_err("%s:Swap_channel failed, err=%d\n",
15798 __func__, ret);
15799 goto done;
15800 }
15801 }
15802 }
15803 }
15804done:
15805 mutex_unlock(&routing_lock);
15806 return ret;
15807}
15808
15809static const struct snd_kcontrol_new stereo_channel_reverse_control[] = {
15810 SOC_SINGLE_EXT("Swap channel", SND_SOC_NOPM, 0,
15811 1, 0, msm_routing_stereo_channel_reverse_control_get,
15812 msm_routing_stereo_channel_reverse_control_put),
15813};
15814
15815static const struct snd_pcm_ops msm_routing_pcm_ops = {
15816 .hw_params = msm_pcm_routing_hw_params,
15817 .close = msm_pcm_routing_close,
15818 .prepare = msm_pcm_routing_prepare,
15819};
15820
15821/* Not used but frame seems to require it */
15822static int msm_routing_probe(struct snd_soc_platform *platform)
15823{
15824 snd_soc_dapm_new_controls(&platform->component.dapm, msm_qdsp6_widgets,
15825 ARRAY_SIZE(msm_qdsp6_widgets));
15826 snd_soc_dapm_add_routes(&platform->component.dapm, intercon,
15827 ARRAY_SIZE(intercon));
15828
15829 snd_soc_dapm_new_widgets(platform->component.dapm.card);
15830
15831 snd_soc_add_platform_controls(platform, lsm_controls,
15832 ARRAY_SIZE(lsm_controls));
15833
15834 snd_soc_add_platform_controls(platform, aanc_slim_0_rx_mux,
15835 ARRAY_SIZE(aanc_slim_0_rx_mux));
15836
15837 snd_soc_add_platform_controls(platform, msm_voc_session_controls,
15838 ARRAY_SIZE(msm_voc_session_controls));
15839
15840 snd_soc_add_platform_controls(platform, app_type_cfg_controls,
15841 ARRAY_SIZE(app_type_cfg_controls));
15842
15843 snd_soc_add_platform_controls(platform, lsm_app_type_cfg_controls,
15844 ARRAY_SIZE(lsm_app_type_cfg_controls));
15845
15846 snd_soc_add_platform_controls(platform,
15847 stereo_to_custom_stereo_controls,
15848 ARRAY_SIZE(stereo_to_custom_stereo_controls));
15849
15850 snd_soc_add_platform_controls(platform, ec_ref_param_controls,
15851 ARRAY_SIZE(ec_ref_param_controls));
15852
15853 snd_soc_add_platform_controls(platform, channel_mixer_controls,
15854 ARRAY_SIZE(channel_mixer_controls));
15855
15856 msm_qti_pp_add_controls(platform);
15857
15858 msm_dts_srs_tm_add_controls(platform);
15859
15860 msm_dolby_dap_add_controls(platform);
15861
15862 snd_soc_add_platform_controls(platform,
15863 use_ds1_or_ds2_controls,
15864 ARRAY_SIZE(use_ds1_or_ds2_controls));
15865
15866 snd_soc_add_platform_controls(platform,
15867 device_pp_params_mixer_controls,
15868 ARRAY_SIZE(device_pp_params_mixer_controls));
15869
15870 snd_soc_add_platform_controls(platform,
15871 msm_routing_be_dai_name_table_mixer_controls,
15872 ARRAY_SIZE(msm_routing_be_dai_name_table_mixer_controls));
15873
15874 snd_soc_add_platform_controls(platform, msm_source_tracking_controls,
15875 ARRAY_SIZE(msm_source_tracking_controls));
15876 snd_soc_add_platform_controls(platform, adm_channel_config_controls,
15877 ARRAY_SIZE(adm_channel_config_controls));
15878
15879 snd_soc_add_platform_controls(platform, aptx_dec_license_controls,
15880 ARRAY_SIZE(aptx_dec_license_controls));
15881 snd_soc_add_platform_controls(platform, stereo_channel_reverse_control,
15882 ARRAY_SIZE(stereo_channel_reverse_control));
15883 return 0;
15884}
15885
15886int msm_routing_pcm_new(struct snd_soc_pcm_runtime *runtime)
15887{
15888 return msm_pcm_routing_hwdep_new(runtime, msm_bedais);
15889}
15890
15891void msm_routing_pcm_free(struct snd_pcm *pcm)
15892{
15893 msm_pcm_routing_hwdep_free(pcm);
15894}
15895
15896static struct snd_soc_platform_driver msm_soc_routing_platform = {
15897 .ops = &msm_routing_pcm_ops,
15898 .probe = msm_routing_probe,
15899 .pcm_new = msm_routing_pcm_new,
15900 .pcm_free = msm_routing_pcm_free,
15901};
15902
15903static int msm_routing_pcm_probe(struct platform_device *pdev)
15904{
15905
15906 dev_dbg(&pdev->dev, "dev name %s\n", dev_name(&pdev->dev));
15907 return snd_soc_register_platform(&pdev->dev,
15908 &msm_soc_routing_platform);
15909}
15910
15911static int msm_routing_pcm_remove(struct platform_device *pdev)
15912{
15913 snd_soc_unregister_platform(&pdev->dev);
15914 return 0;
15915}
15916
15917static const struct of_device_id msm_pcm_routing_dt_match[] = {
15918 {.compatible = "qcom,msm-pcm-routing"},
15919 {}
15920};
15921MODULE_DEVICE_TABLE(of, msm_pcm_routing_dt_match);
15922
15923static struct platform_driver msm_routing_pcm_driver = {
15924 .driver = {
15925 .name = "msm-pcm-routing",
15926 .owner = THIS_MODULE,
15927 .of_match_table = msm_pcm_routing_dt_match,
15928 },
15929 .probe = msm_routing_pcm_probe,
15930 .remove = msm_routing_pcm_remove,
15931};
15932
15933int msm_routing_check_backend_enabled(int fedai_id)
15934{
15935 int i;
15936
15937 if (fedai_id > MSM_FRONTEND_DAI_MM_MAX_ID) {
15938 /* bad ID assigned in machine driver */
15939 pr_err("%s: bad MM ID\n", __func__);
15940 return 0;
15941 }
15942 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15943 if (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))
15944 return msm_bedais[i].active;
15945 }
15946 return 0;
15947}
15948
15949static int msm_routing_set_cal(int32_t cal_type,
15950 size_t data_size, void *data)
15951{
15952 int ret = 0;
15953
15954 pr_debug("%s\n", __func__);
15955
15956 ret = cal_utils_set_cal(data_size, data, cal_data, 0, NULL);
15957 if (ret < 0) {
15958 pr_err("%s: cal_utils_set_cal failed, ret = %d, cal type = %d!\n",
15959 __func__, ret, cal_type);
15960 ret = -EINVAL;
15961 goto done;
15962 }
15963done:
15964 return ret;
15965}
15966
15967static void msm_routing_delete_cal_data(void)
15968{
15969 pr_debug("%s\n", __func__);
15970
15971 cal_utils_destroy_cal_types(1, &cal_data);
15972}
15973
15974static int msm_routing_init_cal_data(void)
15975{
15976 int ret = 0;
15977 struct cal_type_info cal_type_info = {
15978 {ADM_TOPOLOGY_CAL_TYPE,
15979 {NULL, NULL, NULL,
15980 msm_routing_set_cal, NULL, NULL} },
15981 {NULL, NULL, cal_utils_match_buf_num}
15982 };
15983 pr_debug("%s\n", __func__);
15984
15985 ret = cal_utils_create_cal_types(1, &cal_data,
15986 &cal_type_info);
15987 if (ret < 0) {
15988 pr_err("%s: could not create cal type!\n",
15989 __func__);
15990 ret = -EINVAL;
15991 goto err;
15992 }
15993
15994 return ret;
15995err:
15996 msm_routing_delete_cal_data();
15997 return ret;
15998}
15999
16000static int __init msm_soc_routing_platform_init(void)
16001{
16002 mutex_init(&routing_lock);
16003 if (msm_routing_init_cal_data())
16004 pr_err("%s: could not init cal data!\n", __func__);
16005
16006 afe_set_routing_callback(
16007 (routing_cb)msm_pcm_get_dev_acdb_id_by_port_id);
16008
16009 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
16010 memset(&last_be_id_configured, 0, sizeof(last_be_id_configured));
16011
16012 return platform_driver_register(&msm_routing_pcm_driver);
16013}
16014module_init(msm_soc_routing_platform_init);
16015
16016static void __exit msm_soc_routing_platform_exit(void)
16017{
16018 msm_routing_delete_cal_data();
16019 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
16020 mutex_destroy(&routing_lock);
16021 platform_driver_unregister(&msm_routing_pcm_driver);
16022}
16023module_exit(msm_soc_routing_platform_exit);
16024
16025MODULE_DESCRIPTION("MSM routing platform driver");
16026MODULE_LICENSE("GPL v2");