blob: 7a2dc54753d5c7f062ce133ba5121460a0e7580f [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),
7284 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7285 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7286 msm_routing_put_audio_mixer),
7287 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7294 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7295 msm_routing_put_audio_mixer),
7296 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
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_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
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_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
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_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7306 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7307 msm_routing_put_audio_mixer),
7308 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_TX,
7309 MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
7310 msm_routing_put_audio_mixer),
7311};
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05307312static const struct snd_kcontrol_new mmul17_mixer_controls[] = {
7313 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7314 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7315 msm_routing_put_audio_mixer),
7316 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7317 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7318 msm_routing_put_audio_mixer),
7319 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7320 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7321 msm_routing_put_audio_mixer),
7322 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7323 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7324 msm_routing_put_audio_mixer),
7325 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7326 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7327 msm_routing_put_audio_mixer),
7328 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7329 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7330 msm_routing_put_audio_mixer),
7331 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7332 MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
7333 msm_routing_put_audio_mixer),
7334};
7335
7336static const struct snd_kcontrol_new mmul18_mixer_controls[] = {
7337 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7338 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7339 msm_routing_put_audio_mixer),
7340 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7341 MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7342 msm_routing_put_audio_mixer),
7343 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7344 MSM_FRONTEND_DAI_MULTIMEDIA18, 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_MULTIMEDIA18, 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_MULTIMEDIA18, 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_MULTIMEDIA18, 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_MULTIMEDIA18, 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_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
7360 msm_routing_put_audio_mixer),
7361};
7362
7363static const struct snd_kcontrol_new mmul19_mixer_controls[] = {
7364 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
7365 MSM_FRONTEND_DAI_MULTIMEDIA19, 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_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7369 msm_routing_put_audio_mixer),
7370 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT_FM_TX,
7371 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7372 msm_routing_put_audio_mixer),
7373 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
7374 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7375 msm_routing_put_audio_mixer),
7376 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_TX,
7377 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7378 msm_routing_put_audio_mixer),
7379 SOC_SINGLE_EXT("VOC_REC_DL", MSM_BACKEND_DAI_INCALL_RECORD_RX,
7380 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7381 msm_routing_put_audio_mixer),
7382 SOC_SINGLE_EXT("VOC_REC_UL", MSM_BACKEND_DAI_INCALL_RECORD_TX,
7383 MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
7384 msm_routing_put_audio_mixer),
7385};
7386
7387static const struct snd_kcontrol_new mmul20_mixer_controls[] = {
7388 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
7389 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7390 msm_routing_put_audio_mixer),
7391 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
7392 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7393 msm_routing_put_audio_mixer),
7394 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
7395 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7396 msm_routing_put_audio_mixer),
7397 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
7398 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7399 msm_routing_put_audio_mixer),
7400 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_TX_0,
7401 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7402 msm_routing_put_audio_mixer),
7403 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_TX_1,
7404 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7405 msm_routing_put_audio_mixer),
7406 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_TX_2,
7407 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7408 msm_routing_put_audio_mixer),
7409 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_TX_3,
7410 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7411 msm_routing_put_audio_mixer),
7412 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_TX_0,
7413 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7414 msm_routing_put_audio_mixer),
7415 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_TX_1,
7416 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7417 msm_routing_put_audio_mixer),
7418 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_TX_2,
7419 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7420 msm_routing_put_audio_mixer),
7421 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_TX_3,
7422 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7423 msm_routing_put_audio_mixer),
7424 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
7425 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7426 msm_routing_put_audio_mixer),
7427 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_TX_1,
7428 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7429 msm_routing_put_audio_mixer),
7430 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_TX_2,
7431 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7432 msm_routing_put_audio_mixer),
7433 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_TX_3,
7434 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7435 msm_routing_put_audio_mixer),
7436 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_TX_0,
7437 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7438 msm_routing_put_audio_mixer),
7439 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_TX_1,
7440 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7441 msm_routing_put_audio_mixer),
7442 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_TX_2,
7443 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7444 msm_routing_put_audio_mixer),
7445 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
7446 MSM_FRONTEND_DAI_MULTIMEDIA20, 1, 0, msm_routing_get_audio_mixer,
7447 msm_routing_put_audio_mixer),
7448};
7449
7450static const struct snd_kcontrol_new pri_rx_voice_mixer_controls[] = {
7451 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_I2S_RX,
7452 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7453 msm_routing_put_voice_mixer),
7454 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_I2S_RX,
7455 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7456 msm_routing_put_voice_mixer),
7457 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_I2S_RX,
7458 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7459 msm_routing_put_voice_mixer),
7460 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_I2S_RX,
7461 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7462 msm_routing_put_voice_mixer),
7463 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_I2S_RX,
7464 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7465 msm_routing_put_voice_mixer),
7466 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_I2S_RX,
7467 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7468 msm_routing_put_voice_mixer),
7469 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_I2S_RX,
7470 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7471 msm_routing_put_voice_mixer),
7472 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_I2S_RX,
7473 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7474 msm_routing_put_voice_mixer),
7475 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_I2S_RX,
7476 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7477 msm_routing_put_voice_mixer),
7478};
7479
7480static const struct snd_kcontrol_new sec_i2s_rx_voice_mixer_controls[] = {
7481 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_I2S_RX,
7482 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7483 msm_routing_put_voice_mixer),
7484 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_I2S_RX,
7485 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7486 msm_routing_put_voice_mixer),
7487 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_I2S_RX,
7488 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7489 msm_routing_put_voice_mixer),
7490 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_I2S_RX,
7491 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7492 msm_routing_put_voice_mixer),
7493 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_I2S_RX,
7494 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7495 msm_routing_put_voice_mixer),
7496 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_I2S_RX,
7497 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7498 msm_routing_put_voice_mixer),
7499 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_I2S_RX,
7500 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7501 msm_routing_put_voice_mixer),
7502};
7503
7504static const struct snd_kcontrol_new sec_mi2s_rx_voice_mixer_controls[] = {
7505 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7506 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7507 msm_routing_put_voice_mixer),
7508 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7509 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7510 msm_routing_put_voice_mixer),
7511 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7512 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7513 msm_routing_put_voice_mixer),
7514 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7515 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7516 msm_routing_put_voice_mixer),
7517 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7518 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7519 msm_routing_put_voice_mixer),
7520 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7521 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7522 msm_routing_put_voice_mixer),
7523 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7524 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7525 msm_routing_put_voice_mixer),
7526 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7527 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7528 msm_routing_put_voice_mixer),
7529 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
7530 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7531 msm_routing_put_voice_mixer),
7532};
7533
7534static const struct snd_kcontrol_new slimbus_rx_voice_mixer_controls[] = {
7535 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7536 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7537 msm_routing_put_voice_mixer),
7538 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7539 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7540 msm_routing_put_voice_mixer),
7541 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7542 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7543 msm_routing_put_voice_mixer),
7544 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7545 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7546 msm_routing_put_voice_stub_mixer),
7547 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7548 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7549 msm_routing_put_voice_stub_mixer),
7550 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7551 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7552 msm_routing_put_voice_mixer),
7553 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7554 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7555 msm_routing_put_voice_stub_mixer),
7556 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7557 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7558 msm_routing_put_voice_mixer),
7559 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7560 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7561 msm_routing_put_voice_mixer),
7562 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7563 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7564 msm_routing_put_voice_mixer),
7565 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7566 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7567 msm_routing_put_voice_mixer),
7568 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_0_RX,
7569 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7570 msm_routing_put_voice_mixer),
7571};
7572
7573static const struct snd_kcontrol_new slimbus_6_rx_voice_mixer_controls[] = {
7574 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7575 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7576 msm_routing_put_voice_mixer),
7577 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7578 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7579 msm_routing_put_voice_mixer),
7580 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7581 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7582 msm_routing_put_voice_mixer),
7583 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7584 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7585 msm_routing_put_voice_stub_mixer),
7586 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7587 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7588 msm_routing_put_voice_stub_mixer),
7589 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7590 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7591 msm_routing_put_voice_mixer),
7592 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7593 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7594 msm_routing_put_voice_stub_mixer),
7595 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7596 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7597 msm_routing_put_voice_mixer),
7598 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7599 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7600 msm_routing_put_voice_mixer),
7601 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7602 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7603 msm_routing_put_voice_mixer),
7604 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7605 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7606 msm_routing_put_voice_mixer),
7607 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_6_RX,
7608 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7609 msm_routing_put_voice_mixer),
7610};
7611
7612static const struct snd_kcontrol_new usb_audio_rx_voice_mixer_controls[] = {
7613 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_USB_RX,
7614 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7615 msm_routing_put_voice_mixer),
7616 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_USB_RX,
7617 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7618 msm_routing_put_voice_mixer),
7619 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_USB_RX,
7620 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7621 msm_routing_put_voice_mixer),
7622 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_USB_RX,
7623 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7624 msm_routing_put_voice_stub_mixer),
7625 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_USB_RX,
7626 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7627 msm_routing_put_voice_stub_mixer),
7628 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_USB_RX,
7629 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7630 msm_routing_put_voice_mixer),
7631 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_USB_RX,
7632 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7633 msm_routing_put_voice_stub_mixer),
7634 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_USB_RX,
7635 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7636 msm_routing_put_voice_mixer),
7637 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_USB_RX,
7638 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7639 msm_routing_put_voice_mixer),
7640 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_USB_RX,
7641 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7642 msm_routing_put_voice_mixer),
7643 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_USB_RX,
7644 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7645 msm_routing_put_voice_mixer),
7646 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_USB_RX,
7647 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7648 msm_routing_put_voice_mixer),
7649};
7650
7651static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = {
7652 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7653 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7654 msm_routing_put_voice_mixer),
7655 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7656 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7657 msm_routing_put_voice_mixer),
7658 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7659 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7660 msm_routing_put_voice_mixer),
7661 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7662 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7663 msm_routing_put_voice_stub_mixer),
7664 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7665 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7666 msm_routing_put_voice_stub_mixer),
7667 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7668 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7669 msm_routing_put_voice_mixer),
7670 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7671 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7672 msm_routing_put_voice_mixer),
7673 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7674 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7675 msm_routing_put_voice_mixer),
7676 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7677 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7678 msm_routing_put_voice_mixer),
7679 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7680 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7681 msm_routing_put_voice_mixer),
7682 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT_BT_SCO_RX,
7683 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7684 msm_routing_put_voice_mixer),
7685};
7686
7687static const struct snd_kcontrol_new mi2s_rx_voice_mixer_controls[] = {
7688 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_MI2S_RX,
7689 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7690 msm_routing_put_voice_mixer),
7691 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_MI2S_RX,
7692 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7693 msm_routing_put_voice_mixer),
7694 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_MI2S_RX,
7695 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7696 msm_routing_put_voice_mixer),
7697 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_MI2S_RX,
7698 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7699 msm_routing_put_voice_stub_mixer),
7700 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_MI2S_RX,
7701 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7702 msm_routing_put_voice_mixer),
7703 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_MI2S_RX,
7704 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7705 msm_routing_put_voice_mixer),
7706 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX,
7707 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7708 msm_routing_put_voice_mixer),
7709 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_MI2S_RX,
7710 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7711 msm_routing_put_voice_mixer),
7712 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_MI2S_RX,
7713 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7714 msm_routing_put_voice_mixer),
7715 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_MI2S_RX,
7716 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7717 msm_routing_put_voice_mixer),
7718};
7719
7720static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = {
7721 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_PRI_MI2S_RX,
7722 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7723 msm_routing_put_voice_mixer),
7724 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7725 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7726 msm_routing_put_voice_mixer),
7727 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_MI2S_RX,
7728 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7729 msm_routing_put_voice_mixer),
7730 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7731 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7732 msm_routing_put_voice_stub_mixer),
7733 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7734 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7735 msm_routing_put_voice_stub_mixer),
7736 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_MI2S_RX,
7737 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7738 msm_routing_put_voice_mixer),
7739 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
7740 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7741 msm_routing_put_voice_mixer),
7742 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_RX,
7743 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7744 msm_routing_put_voice_mixer),
7745 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX,
7746 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7747 msm_routing_put_voice_mixer),
7748 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_PRI_MI2S_RX,
7749 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7750 msm_routing_put_voice_mixer),
7751 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_PRI_MI2S_RX,
7752 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7753 msm_routing_put_voice_mixer),
7754 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_PRI_MI2S_RX,
7755 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7756 msm_routing_put_voice_mixer),
7757};
7758
7759static const struct snd_kcontrol_new int0_mi2s_rx_voice_mixer_controls[] = {
7760 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT0_MI2S_RX,
7761 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7762 msm_routing_put_voice_mixer),
7763 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT0_MI2S_RX,
7764 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7765 msm_routing_put_voice_mixer),
7766 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT0_MI2S_RX,
7767 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7768 msm_routing_put_voice_mixer),
7769 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT0_MI2S_RX,
7770 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7771 msm_routing_put_voice_mixer),
7772 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT0_MI2S_RX,
7773 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7774 msm_routing_put_voice_mixer),
7775};
7776
7777static const struct snd_kcontrol_new int4_mi2s_rx_voice_mixer_controls[] = {
7778 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT4_MI2S_RX,
7779 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7780 msm_routing_put_voice_mixer),
7781 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT4_MI2S_RX,
7782 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7783 msm_routing_put_voice_mixer),
7784 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT4_MI2S_RX,
7785 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7786 msm_routing_put_voice_mixer),
7787 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT4_MI2S_RX,
7788 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7789 msm_routing_put_voice_mixer),
7790 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT4_MI2S_RX,
7791 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7792 msm_routing_put_voice_mixer),
7793};
7794
7795static const struct snd_kcontrol_new tert_mi2s_rx_voice_mixer_controls[] = {
7796 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7797 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7798 msm_routing_put_voice_mixer),
7799 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7800 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7801 msm_routing_put_voice_mixer),
7802 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7803 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7804 msm_routing_put_voice_mixer),
7805 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7806 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7807 msm_routing_put_voice_stub_mixer),
7808 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7809 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7810 msm_routing_put_voice_stub_mixer),
7811 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7812 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7813 msm_routing_put_voice_mixer),
7814 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7815 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7816 msm_routing_put_voice_mixer),
7817 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7818 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7819 msm_routing_put_voice_mixer),
7820 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7821 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7822 msm_routing_put_voice_mixer),
7823 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7824 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7825 msm_routing_put_voice_mixer),
7826 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7827 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7828 msm_routing_put_voice_mixer),
7829 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
7830 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7831 msm_routing_put_voice_mixer),
7832};
7833
7834static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = {
7835 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7836 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7837 msm_routing_put_voice_mixer),
7838 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7839 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7840 msm_routing_put_voice_mixer),
7841 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7842 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7843 msm_routing_put_voice_mixer),
7844 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7845 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7846 msm_routing_put_voice_stub_mixer),
7847 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7848 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7849 msm_routing_put_voice_stub_mixer),
7850 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7851 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7852 msm_routing_put_voice_mixer),
7853 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7854 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7855 msm_routing_put_voice_mixer),
7856 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7857 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7858 msm_routing_put_voice_mixer),
7859 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7860 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7861 msm_routing_put_voice_mixer),
7862 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7863 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7864 msm_routing_put_voice_mixer),
7865 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7866 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7867 msm_routing_put_voice_mixer),
7868 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
7869 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7870 msm_routing_put_voice_mixer),
7871};
7872
7873static const struct snd_kcontrol_new quin_mi2s_rx_voice_mixer_controls[] = {
7874 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7875 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7876 msm_routing_put_voice_mixer),
7877 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7878 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7879 msm_routing_put_voice_mixer),
7880 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7881 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7882 msm_routing_put_voice_mixer),
7883 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7884 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7885 msm_routing_put_voice_stub_mixer),
7886 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7887 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7888 msm_routing_put_voice_stub_mixer),
7889 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7890 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7891 msm_routing_put_voice_mixer),
7892 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7893 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
7894 msm_routing_put_voice_mixer),
7895 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7896 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7897 msm_routing_put_voice_mixer),
7898 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7899 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7900 msm_routing_put_voice_mixer),
7901 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7902 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7903 msm_routing_put_voice_mixer),
7904 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7905 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7906 msm_routing_put_voice_mixer),
7907 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
7908 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7909 msm_routing_put_voice_mixer),
7910};
7911
7912static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = {
7913 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AFE_PCM_RX,
7914 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7915 msm_routing_put_voice_mixer),
7916 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AFE_PCM_RX,
7917 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7918 msm_routing_put_voice_mixer),
7919 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AFE_PCM_RX,
7920 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7921 msm_routing_put_voice_mixer),
7922 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7923 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7924 msm_routing_put_voice_stub_mixer),
7925 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7926 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7927 msm_routing_put_voice_stub_mixer),
7928 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AFE_PCM_RX,
7929 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7930 msm_routing_put_voice_mixer),
7931 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
7932 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7933 msm_routing_put_voice_stub_mixer),
7934 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AFE_PCM_RX,
7935 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7936 msm_routing_put_voice_mixer),
7937 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX,
7938 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7939 msm_routing_put_voice_mixer),
7940 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AFE_PCM_RX,
7941 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7942 msm_routing_put_voice_mixer),
7943 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AFE_PCM_RX,
7944 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7945 msm_routing_put_voice_mixer),
7946 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AFE_PCM_RX,
7947 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7948 msm_routing_put_voice_mixer),
7949};
7950
7951static const struct snd_kcontrol_new aux_pcm_rx_voice_mixer_controls[] = {
7952 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AUXPCM_RX,
7953 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7954 msm_routing_put_voice_mixer),
7955 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_AUXPCM_RX,
7956 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7957 msm_routing_put_voice_mixer),
7958 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AUXPCM_RX,
7959 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7960 msm_routing_put_voice_mixer),
7961 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7962 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7963 msm_routing_put_voice_stub_mixer),
7964 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7965 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7966 msm_routing_put_voice_stub_mixer),
7967 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_AUXPCM_RX,
7968 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
7969 msm_routing_put_voice_mixer),
7970 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX,
7971 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
7972 msm_routing_put_voice_stub_mixer),
7973 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AUXPCM_RX,
7974 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
7975 msm_routing_put_voice_mixer),
7976 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX,
7977 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
7978 msm_routing_put_voice_mixer),
7979 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_AUXPCM_RX,
7980 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
7981 msm_routing_put_voice_mixer),
7982 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_AUXPCM_RX,
7983 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
7984 msm_routing_put_voice_mixer),
7985 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_AUXPCM_RX,
7986 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
7987 msm_routing_put_voice_mixer),
7988};
7989
7990static const struct snd_kcontrol_new sec_aux_pcm_rx_voice_mixer_controls[] = {
7991 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7992 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
7993 msm_routing_put_voice_mixer),
7994 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7995 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
7996 msm_routing_put_voice_mixer),
7997 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
7998 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
7999 msm_routing_put_voice_mixer),
8000 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8001 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8002 msm_routing_put_voice_stub_mixer),
8003 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8004 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8005 msm_routing_put_voice_mixer),
8006 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8007 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8008 msm_routing_put_voice_mixer),
8009 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8010 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8011 msm_routing_put_voice_mixer),
8012 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8013 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8014 msm_routing_put_voice_mixer),
8015 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8016 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8017 msm_routing_put_voice_mixer),
8018 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8019 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8020 msm_routing_put_voice_mixer),
8021};
8022
8023static const struct snd_kcontrol_new tert_aux_pcm_rx_voice_mixer_controls[] = {
8024 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8025 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8026 msm_routing_put_voice_mixer),
8027 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8028 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8029 msm_routing_put_voice_mixer),
8030 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8031 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8032 msm_routing_put_voice_mixer),
8033 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8034 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8035 msm_routing_put_voice_stub_mixer),
8036 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8037 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8038 msm_routing_put_voice_mixer),
8039 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8040 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8041 msm_routing_put_voice_mixer),
8042 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8043 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8044 msm_routing_put_voice_mixer),
8045 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8046 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8047 msm_routing_put_voice_mixer),
8048 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8049 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8050 msm_routing_put_voice_mixer),
8051 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8052 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8053 msm_routing_put_voice_mixer),
8054};
8055
8056static const struct snd_kcontrol_new quat_aux_pcm_rx_voice_mixer_controls[] = {
8057 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8058 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8059 msm_routing_put_voice_mixer),
8060 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8061 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8062 msm_routing_put_voice_mixer),
8063 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8064 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8065 msm_routing_put_voice_mixer),
8066 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8067 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8068 msm_routing_put_voice_stub_mixer),
8069 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8070 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8071 msm_routing_put_voice_mixer),
8072 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8073 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8074 msm_routing_put_voice_mixer),
8075 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8076 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8077 msm_routing_put_voice_mixer),
8078 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8079 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8080 msm_routing_put_voice_mixer),
8081 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8082 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8083 msm_routing_put_voice_mixer),
8084 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8085 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8086 msm_routing_put_voice_mixer),
8087};
8088
8089static const struct snd_kcontrol_new hdmi_rx_voice_mixer_controls[] = {
8090 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_HDMI_RX,
8091 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8092 msm_routing_put_voice_mixer),
8093 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_HDMI_RX,
8094 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8095 msm_routing_put_voice_mixer),
8096 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_HDMI_RX,
8097 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8098 msm_routing_put_voice_mixer),
8099 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_HDMI_RX,
8100 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8101 msm_routing_put_voice_mixer),
8102 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_HDMI_RX,
8103 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8104 msm_routing_put_voice_mixer),
8105 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX,
8106 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8107 msm_routing_put_voice_stub_mixer),
8108 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_HDMI_RX,
8109 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8110 msm_routing_put_voice_stub_mixer),
8111 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_HDMI_RX,
8112 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8113 msm_routing_put_voice_stub_mixer),
8114 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_HDMI_RX,
8115 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8116 msm_routing_put_voice_mixer),
8117 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_HDMI_RX,
8118 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8119 msm_routing_put_voice_mixer),
8120 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_HDMI_RX,
8121 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8122 msm_routing_put_voice_mixer),
8123 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_HDMI_RX,
8124 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8125 msm_routing_put_voice_mixer),
8126};
8127
8128static const struct snd_kcontrol_new slimbus_7_rx_voice_mixer_controls[] = {
8129 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8130 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8131 msm_routing_put_voice_mixer),
8132 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8133 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8134 msm_routing_put_voice_mixer),
8135 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8136 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8137 msm_routing_put_voice_mixer),
8138 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8139 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8140 msm_routing_put_voice_stub_mixer),
8141 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8142 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8143 msm_routing_put_voice_stub_mixer),
8144 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8145 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8146 msm_routing_put_voice_mixer),
8147 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8148 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8149 msm_routing_put_voice_stub_mixer),
8150 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8151 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8152 msm_routing_put_voice_mixer),
8153 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8154 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8155 msm_routing_put_voice_mixer),
8156 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8157 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8158 msm_routing_put_voice_mixer),
8159 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8160 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8161 msm_routing_put_voice_mixer),
8162 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_7_RX,
8163 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8164 msm_routing_put_voice_mixer),
8165};
8166
8167static const struct snd_kcontrol_new slimbus_8_rx_voice_mixer_controls[] = {
8168 SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8169 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8170 msm_routing_put_voice_mixer),
8171 SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8172 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8173 msm_routing_put_voice_mixer),
8174 SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8175 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8176 msm_routing_put_voice_mixer),
8177 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8178 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8179 msm_routing_put_voice_stub_mixer),
8180 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8181 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8182 msm_routing_put_voice_stub_mixer),
8183 SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8184 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8185 msm_routing_put_voice_mixer),
8186 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8187 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8188 msm_routing_put_voice_stub_mixer),
8189 SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8190 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8191 msm_routing_put_voice_mixer),
8192 SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8193 MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
8194 msm_routing_put_voice_mixer),
8195 SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8196 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8197 msm_routing_put_voice_mixer),
8198 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8199 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8200 msm_routing_put_voice_mixer),
8201 SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_8_RX,
8202 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8203 msm_routing_put_voice_mixer),
8204};
8205
8206static const struct snd_kcontrol_new quat_tdm_rx_2_voice_mixer_controls[] = {
8207 SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
8208 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8209 msm_routing_put_voice_mixer),
8210};
8211
8212static const struct snd_kcontrol_new stub_rx_mixer_controls[] = {
8213 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8214 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8215 msm_routing_put_voice_stub_mixer),
8216 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8217 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8218 msm_routing_put_voice_stub_mixer),
8219 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_EXTPROC_RX,
8220 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8221 msm_routing_put_voice_stub_mixer),
8222};
8223
8224static const struct snd_kcontrol_new slimbus_1_rx_mixer_controls[] = {
8225 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8226 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8227 msm_routing_put_voice_stub_mixer),
8228 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8229 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8230 msm_routing_put_voice_stub_mixer),
8231 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8232 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8233 msm_routing_put_voice_stub_mixer),
8234};
8235
8236static const struct snd_kcontrol_new slimbus_3_rx_mixer_controls[] = {
8237 SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8238 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8239 msm_routing_put_voice_stub_mixer),
8240 SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8241 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8242 msm_routing_put_voice_stub_mixer),
8243 SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8244 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8245 msm_routing_put_voice_stub_mixer),
8246};
8247
8248static const struct snd_kcontrol_new tx_voice_mixer_controls[] = {
8249 SOC_SINGLE_EXT("PRI_TX_Voice", MSM_BACKEND_DAI_PRI_I2S_TX,
8250 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8251 msm_routing_put_voice_mixer),
8252 SOC_SINGLE_EXT("MI2S_TX_Voice", MSM_BACKEND_DAI_MI2S_TX,
8253 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8254 msm_routing_put_voice_mixer),
8255 SOC_SINGLE_EXT("SLIM_0_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8256 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8257 msm_routing_put_voice_mixer),
8258 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice",
8259 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0,
8260 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8261 SOC_SINGLE_EXT("AFE_PCM_TX_Voice", MSM_BACKEND_DAI_AFE_PCM_TX,
8262 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8263 msm_routing_put_voice_mixer),
8264 SOC_SINGLE_EXT("AUX_PCM_TX_Voice", MSM_BACKEND_DAI_AUXPCM_TX,
8265 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8266 msm_routing_put_voice_mixer),
8267 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8268 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8269 msm_routing_put_voice_mixer),
8270 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8271 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8272 msm_routing_put_voice_mixer),
8273 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8274 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8275 msm_routing_put_voice_mixer),
8276 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice", MSM_BACKEND_DAI_PRI_MI2S_TX,
8277 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8278 msm_routing_put_voice_mixer),
8279 SOC_SINGLE_EXT("SEC_MI2S_TX_Voice", MSM_BACKEND_DAI_SECONDARY_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("TERT_MI2S_TX_Voice", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8283 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8284 msm_routing_put_voice_mixer),
8285 SOC_SINGLE_EXT("SLIM_7_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8286 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8287 msm_routing_put_voice_mixer),
8288 SOC_SINGLE_EXT("SLIM_8_TX_Voice", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8289 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8290 msm_routing_put_voice_mixer),
8291 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice", MSM_BACKEND_DAI_USB_TX,
8292 MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
8293 msm_routing_put_voice_mixer),
8294};
8295
8296static const struct snd_kcontrol_new tx_voice2_mixer_controls[] = {
8297 SOC_SINGLE_EXT("PRI_TX_Voice2", MSM_BACKEND_DAI_PRI_I2S_TX,
8298 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8299 msm_routing_put_voice_mixer),
8300 SOC_SINGLE_EXT("MI2S_TX_Voice2", MSM_BACKEND_DAI_MI2S_TX,
8301 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8302 msm_routing_put_voice_mixer),
8303 SOC_SINGLE_EXT("SLIM_0_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8304 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8305 msm_routing_put_voice_mixer),
8306 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voice2",
8307 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICE2, 1, 0,
8308 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8309 SOC_SINGLE_EXT("AFE_PCM_TX_Voice2", MSM_BACKEND_DAI_AFE_PCM_TX,
8310 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8311 msm_routing_put_voice_mixer),
8312 SOC_SINGLE_EXT("AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_AUXPCM_TX,
8313 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8314 msm_routing_put_voice_mixer),
8315 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8316 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8317 msm_routing_put_voice_mixer),
8318 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8319 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8320 msm_routing_put_voice_mixer),
8321 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voice2", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8322 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8323 msm_routing_put_voice_mixer),
8324 SOC_SINGLE_EXT("PRI_MI2S_TX_Voice2", MSM_BACKEND_DAI_PRI_MI2S_TX,
8325 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8326 msm_routing_put_voice_mixer),
8327 SOC_SINGLE_EXT("TERT_MI2S_TX_Voice2", MSM_BACKEND_DAI_TERTIARY_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_7_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8331 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8332 msm_routing_put_voice_mixer),
8333 SOC_SINGLE_EXT("SLIM_8_TX_Voice2", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8334 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8335 msm_routing_put_voice_mixer),
8336 SOC_SINGLE_EXT("USB_AUDIO_TX_Voice2", MSM_BACKEND_DAI_USB_TX,
8337 MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer,
8338 msm_routing_put_voice_mixer),
8339};
8340
8341static const struct snd_kcontrol_new tx_volte_mixer_controls[] = {
8342 SOC_SINGLE_EXT("PRI_TX_VoLTE", MSM_BACKEND_DAI_PRI_I2S_TX,
8343 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8344 msm_routing_put_voice_mixer),
8345 SOC_SINGLE_EXT("SLIM_0_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8346 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8347 msm_routing_put_voice_mixer),
8348 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoLTE",
8349 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOLTE, 1, 0,
8350 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8351 SOC_SINGLE_EXT("AFE_PCM_TX_VoLTE", MSM_BACKEND_DAI_AFE_PCM_TX,
8352 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8353 msm_routing_put_voice_mixer),
8354 SOC_SINGLE_EXT("AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_AUXPCM_TX,
8355 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8356 msm_routing_put_voice_mixer),
8357 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8358 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8359 msm_routing_put_voice_mixer),
8360 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8361 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8362 msm_routing_put_voice_mixer),
8363 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoLTE", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8364 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8365 msm_routing_put_voice_mixer),
8366 SOC_SINGLE_EXT("MI2S_TX_VoLTE", MSM_BACKEND_DAI_MI2S_TX,
8367 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8368 msm_routing_put_voice_mixer),
8369 SOC_SINGLE_EXT("PRI_MI2S_TX_VoLTE", MSM_BACKEND_DAI_PRI_MI2S_TX,
8370 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8371 msm_routing_put_voice_mixer),
8372 SOC_SINGLE_EXT("TERT_MI2S_TX_VoLTE", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8373 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8374 msm_routing_put_voice_mixer),
8375 SOC_SINGLE_EXT("SLIM_7_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8376 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8377 msm_routing_put_voice_mixer),
8378 SOC_SINGLE_EXT("SLIM_8_TX_VoLTE", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8379 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8380 msm_routing_put_voice_mixer),
8381 SOC_SINGLE_EXT("USB_AUDIO_TX_VoLTE", MSM_BACKEND_DAI_USB_TX,
8382 MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer,
8383 msm_routing_put_voice_mixer),
8384};
8385
8386static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = {
8387 SOC_SINGLE_EXT("PRI_TX_VoWLAN", MSM_BACKEND_DAI_PRI_I2S_TX,
8388 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8389 msm_routing_put_voice_mixer),
8390 SOC_SINGLE_EXT("SLIM_0_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8391 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8392 msm_routing_put_voice_mixer),
8393 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoWLAN",
8394 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0,
8395 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8396 SOC_SINGLE_EXT("AFE_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AFE_PCM_TX,
8397 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8398 msm_routing_put_voice_mixer),
8399 SOC_SINGLE_EXT("AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AUXPCM_TX,
8400 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8401 msm_routing_put_voice_mixer),
8402 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8403 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8404 msm_routing_put_voice_mixer),
8405 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8406 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8407 msm_routing_put_voice_mixer),
8408 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8409 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8410 msm_routing_put_voice_mixer),
8411 SOC_SINGLE_EXT("MI2S_TX_VoWLAN", MSM_BACKEND_DAI_MI2S_TX,
8412 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8413 msm_routing_put_voice_mixer),
8414 SOC_SINGLE_EXT("PRI_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_TX,
8415 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8416 msm_routing_put_voice_mixer),
8417 SOC_SINGLE_EXT("TERT_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8418 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8419 msm_routing_put_voice_mixer),
8420 SOC_SINGLE_EXT("SLIM_7_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8421 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8422 msm_routing_put_voice_mixer),
8423 SOC_SINGLE_EXT("SLIM_8_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8424 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8425 msm_routing_put_voice_mixer),
8426 SOC_SINGLE_EXT("USB_AUDIO_TX_VoWLAN", MSM_BACKEND_DAI_USB_TX,
8427 MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer,
8428 msm_routing_put_voice_mixer),
8429};
8430
8431static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
8432 SOC_SINGLE_EXT("PRI_TX_MMode1", MSM_BACKEND_DAI_PRI_I2S_TX,
8433 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8434 msm_routing_put_voice_mixer),
8435 SOC_SINGLE_EXT("MI2S_TX_MMode1", MSM_BACKEND_DAI_MI2S_TX,
8436 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8437 msm_routing_put_voice_mixer),
8438 SOC_SINGLE_EXT("SLIM_0_TX_MMode1",
8439 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8440 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8441 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode1",
8442 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8443 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8444 SOC_SINGLE_EXT("AFE_PCM_TX_MMode1",
8445 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8446 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8447 SOC_SINGLE_EXT("AUX_PCM_TX_MMode1",
8448 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8449 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8450 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode1",
8451 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8452 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8453 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode1",
8454 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8455 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8456 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode1",
8457 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8458 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8459 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode1",
8460 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0,
8461 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8462 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode1",
8463 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8464 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8465 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode1",
8466 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
8467 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8468 SOC_SINGLE_EXT("SLIM_7_TX_MMode1",
8469 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8470 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8471 SOC_SINGLE_EXT("SLIM_8_TX_MMode1",
8472 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
8473 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8474 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode1", MSM_BACKEND_DAI_USB_TX,
8475 MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
8476 msm_routing_put_voice_mixer),
8477 SOC_SINGLE_EXT("QUAT_TDM_TX_0_MMode1",
8478 MSM_BACKEND_DAI_QUAT_TDM_TX_0, MSM_FRONTEND_DAI_VOICEMMODE1,
8479 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8480};
8481
8482static const struct snd_kcontrol_new tx_voicemmode2_mixer_controls[] = {
8483 SOC_SINGLE_EXT("PRI_TX_MMode2", MSM_BACKEND_DAI_PRI_I2S_TX,
8484 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8485 msm_routing_put_voice_mixer),
8486 SOC_SINGLE_EXT("MI2S_TX_MMode2", MSM_BACKEND_DAI_MI2S_TX,
8487 MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
8488 msm_routing_put_voice_mixer),
8489 SOC_SINGLE_EXT("SLIM_0_TX_MMode2",
8490 MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8491 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8492 SOC_SINGLE_EXT("INT_BT_SCO_TX_MMode2",
8493 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8494 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8495 SOC_SINGLE_EXT("AFE_PCM_TX_MMode2",
8496 MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8497 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8498 SOC_SINGLE_EXT("AUX_PCM_TX_MMode2",
8499 MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8500 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8501 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_MMode2",
8502 MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8503 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8504 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_MMode2",
8505 MSM_BACKEND_DAI_TERT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8506 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8507 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_MMode2",
8508 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8509 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8510 SOC_SINGLE_EXT("PRI_MI2S_TX_MMode2",
8511 MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0,
8512 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8513 SOC_SINGLE_EXT("TERT_MI2S_TX_MMode2",
8514 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8515 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8516 SOC_SINGLE_EXT("INT3_MI2S_TX_MMode2",
8517 MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
8518 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8519 SOC_SINGLE_EXT("SLIM_7_TX_MMode2",
8520 MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8521 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8522 SOC_SINGLE_EXT("SLIM_8_TX_MMode2",
8523 MSM_BACKEND_DAI_SLIMBUS_8_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8524 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8525 SOC_SINGLE_EXT("USB_AUDIO_TX_MMode2",
8526 MSM_BACKEND_DAI_USB_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
8527 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8528};
8529
8530static const struct snd_kcontrol_new tx_voip_mixer_controls[] = {
8531 SOC_SINGLE_EXT("PRI_TX_Voip", MSM_BACKEND_DAI_PRI_I2S_TX,
8532 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8533 msm_routing_put_voice_mixer),
8534 SOC_SINGLE_EXT("MI2S_TX_Voip", MSM_BACKEND_DAI_MI2S_TX,
8535 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8536 msm_routing_put_voice_mixer),
8537 SOC_SINGLE_EXT("SLIM_0_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8538 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8539 msm_routing_put_voice_mixer),
8540 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_Voip", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8541 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8542 msm_routing_put_voice_mixer),
8543 SOC_SINGLE_EXT("AFE_PCM_TX_Voip", MSM_BACKEND_DAI_AFE_PCM_TX,
8544 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8545 msm_routing_put_voice_mixer),
8546 SOC_SINGLE_EXT("AUX_PCM_TX_Voip", MSM_BACKEND_DAI_AUXPCM_TX,
8547 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8548 msm_routing_put_voice_mixer),
8549 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8550 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8551 msm_routing_put_voice_mixer),
8552 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8553 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8554 msm_routing_put_voice_mixer),
8555 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8556 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8557 msm_routing_put_voice_mixer),
8558 SOC_SINGLE_EXT("PRI_MI2S_TX_Voip", MSM_BACKEND_DAI_PRI_MI2S_TX,
8559 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8560 msm_routing_put_voice_mixer),
8561 SOC_SINGLE_EXT("TERT_MI2S_TX_Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8562 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8563 msm_routing_put_voice_mixer),
8564 SOC_SINGLE_EXT("INT3_MI2S_TX_Voip", MSM_BACKEND_DAI_INT3_MI2S_TX,
8565 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8566 msm_routing_put_voice_mixer),
8567 SOC_SINGLE_EXT("SLIM_7_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8568 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8569 msm_routing_put_voice_mixer),
8570 SOC_SINGLE_EXT("SLIM_8_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8571 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8572 msm_routing_put_voice_mixer),
8573 SOC_SINGLE_EXT("USB_AUDIO_TX_Voip", MSM_BACKEND_DAI_USB_TX,
8574 MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
8575 msm_routing_put_voice_mixer),
8576};
8577
8578static const struct snd_kcontrol_new tx_voice_stub_mixer_controls[] = {
8579 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8580 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8581 msm_routing_put_voice_stub_mixer),
8582 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT_BT_SCO_TX,
8583 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8584 msm_routing_put_voice_stub_mixer),
8585 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8586 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8587 msm_routing_put_voice_stub_mixer),
8588 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8589 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8590 msm_routing_put_voice_stub_mixer),
8591 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_TX,
8592 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8593 msm_routing_put_voice_stub_mixer),
8594 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_TX,
8595 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8596 msm_routing_put_voice_stub_mixer),
8597 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8598 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8599 msm_routing_put_voice_stub_mixer),
8600 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
8601 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8602 msm_routing_put_voice_stub_mixer),
8603 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
8604 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8605 msm_routing_put_voice_stub_mixer),
8606 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_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("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_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("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_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("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_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("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_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("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_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("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_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("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_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("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8631 MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8632 msm_routing_put_voice_stub_mixer),
8633};
8634
8635static const struct snd_kcontrol_new tx_voice2_stub_mixer_controls[] = {
8636 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8637 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8638 msm_routing_put_voice_stub_mixer),
8639 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8640 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8641 msm_routing_put_voice_stub_mixer),
8642 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8643 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8644 msm_routing_put_voice_stub_mixer),
8645 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8646 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8647 msm_routing_put_voice_stub_mixer),
8648 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8649 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8650 msm_routing_put_voice_stub_mixer),
8651 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8652 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8653 msm_routing_put_voice_stub_mixer),
8654 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8655 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8656 msm_routing_put_voice_stub_mixer),
8657 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8658 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8659 msm_routing_put_voice_stub_mixer),
8660 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8661 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8662 msm_routing_put_voice_stub_mixer),
8663 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_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("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_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("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_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("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_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("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8676 MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8677 msm_routing_put_voice_stub_mixer),
8678};
8679
8680static const struct snd_kcontrol_new tx_volte_stub_mixer_controls[] = {
8681 SOC_SINGLE_EXT("STUB_TX_HL", MSM_BACKEND_DAI_EXTPROC_TX,
8682 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8683 msm_routing_put_voice_stub_mixer),
8684 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
8685 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8686 msm_routing_put_voice_stub_mixer),
8687 SOC_SINGLE_EXT("STUB_1_TX_HL", MSM_BACKEND_DAI_EXTPROC_EC_TX,
8688 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8689 msm_routing_put_voice_stub_mixer),
8690 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_TX,
8691 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8692 msm_routing_put_voice_stub_mixer),
8693 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8694 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8695 msm_routing_put_voice_stub_mixer),
8696 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8697 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8698 msm_routing_put_voice_stub_mixer),
8699 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8700 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8701 msm_routing_put_voice_stub_mixer),
8702 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8703 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8704 msm_routing_put_voice_stub_mixer),
8705 SOC_SINGLE_EXT("SLIM_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
8706 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8707 msm_routing_put_voice_stub_mixer),
8708 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_AFE_PCM_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("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_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("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_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("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_7_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("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8721 MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
8722 msm_routing_put_voice_stub_mixer),
8723};
8724
8725static const struct snd_kcontrol_new tx_qchat_mixer_controls[] = {
8726 SOC_SINGLE_EXT("PRI_TX_QCHAT", MSM_BACKEND_DAI_PRI_I2S_TX,
8727 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8728 msm_routing_put_voice_mixer),
8729 SOC_SINGLE_EXT("SLIM_0_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_0_TX,
8730 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8731 msm_routing_put_voice_mixer),
8732 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_QCHAT",
8733 MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_QCHAT, 1, 0,
8734 msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
8735 SOC_SINGLE_EXT("AFE_PCM_TX_QCHAT", MSM_BACKEND_DAI_AFE_PCM_TX,
8736 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8737 msm_routing_put_voice_mixer),
8738 SOC_SINGLE_EXT("AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_AUXPCM_TX,
8739 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8740 msm_routing_put_voice_mixer),
8741 SOC_SINGLE_EXT("SEC_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_SEC_AUXPCM_TX,
8742 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8743 msm_routing_put_voice_mixer),
8744 SOC_SINGLE_EXT("TERT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_TERT_AUXPCM_TX,
8745 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8746 msm_routing_put_voice_mixer),
8747 SOC_SINGLE_EXT("QUAT_AUX_PCM_TX_QCHAT", MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
8748 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8749 msm_routing_put_voice_mixer),
8750 SOC_SINGLE_EXT("MI2S_TX_QCHAT", MSM_BACKEND_DAI_MI2S_TX,
8751 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8752 msm_routing_put_voice_mixer),
8753 SOC_SINGLE_EXT("PRI_MI2S_TX_QCHAT", MSM_BACKEND_DAI_PRI_MI2S_TX,
8754 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8755 msm_routing_put_voice_mixer),
8756 SOC_SINGLE_EXT("TERT_MI2S_TX_QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
8757 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8758 msm_routing_put_voice_mixer),
8759 SOC_SINGLE_EXT("INT3_MI2S_TX_QCHAT", MSM_BACKEND_DAI_INT3_MI2S_TX,
8760 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8761 msm_routing_put_voice_mixer),
8762 SOC_SINGLE_EXT("SLIM_7_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_TX,
8763 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8764 msm_routing_put_voice_mixer),
8765 SOC_SINGLE_EXT("SLIM_8_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_8_TX,
8766 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8767 msm_routing_put_voice_mixer),
8768 SOC_SINGLE_EXT("USB_AUDIO_TX_QCHAT", MSM_BACKEND_DAI_USB_TX,
8769 MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
8770 msm_routing_put_voice_mixer),
8771};
8772
8773static const struct snd_kcontrol_new int0_mi2s_rx_port_mixer_controls[] = {
8774 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8775 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8776 msm_routing_put_port_mixer),
8777 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8778 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8779 msm_routing_put_port_mixer),
8780 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8781 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8782 msm_routing_put_port_mixer),
8783 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8784 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8785 msm_routing_put_port_mixer),
8786 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8787 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8788 msm_routing_put_port_mixer),
8789 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8790 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8791 msm_routing_put_port_mixer),
8792 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8793 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8794 msm_routing_put_port_mixer),
8795 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8796 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8797 msm_routing_put_port_mixer),
8798 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT0_MI2S_RX,
8799 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8800 msm_routing_put_port_mixer),
8801};
8802
8803static const struct snd_kcontrol_new int4_mi2s_rx_port_mixer_controls[] = {
8804 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8805 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8806 msm_routing_put_port_mixer),
8807 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8808 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8809 msm_routing_put_port_mixer),
8810 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8811 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8812 msm_routing_put_port_mixer),
8813 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8814 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8815 msm_routing_put_port_mixer),
8816 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8817 MSM_BACKEND_DAI_INT3_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8818 msm_routing_put_port_mixer),
8819 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8820 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8821 msm_routing_put_port_mixer),
8822 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8823 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8824 msm_routing_put_port_mixer),
8825 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8826 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8827 msm_routing_put_port_mixer),
8828 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_INT4_MI2S_RX,
8829 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8830 msm_routing_put_port_mixer),
8831};
8832
8833static const struct snd_kcontrol_new sbus_0_rx_port_mixer_controls[] = {
8834 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8835 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8836 msm_routing_put_port_mixer),
8837 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8838 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8839 msm_routing_put_port_mixer),
8840 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8841 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8842 msm_routing_put_port_mixer),
8843 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8844 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8845 msm_routing_put_port_mixer),
8846 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8847 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
8848 msm_routing_put_port_mixer),
8849 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8850 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8851 msm_routing_put_port_mixer),
8852 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8853 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8854 msm_routing_put_port_mixer),
8855 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8856 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8857 msm_routing_put_port_mixer),
8858 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8859 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8860 msm_routing_put_port_mixer),
8861 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8862 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8863 msm_routing_put_port_mixer),
8864 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8865 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8866 msm_routing_put_port_mixer),
8867 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8868 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8869 msm_routing_put_port_mixer),
8870 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8871 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8872 msm_routing_put_port_mixer),
8873 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8874 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8875 msm_routing_put_port_mixer),
8876 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8877 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8878 msm_routing_put_port_mixer),
8879 SOC_SINGLE_EXT("PRI_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8880 MSM_BACKEND_DAI_PRI_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8881 msm_routing_put_port_mixer),
8882 SOC_SINGLE_EXT("SEC_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8883 MSM_BACKEND_DAI_SECONDARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8884 msm_routing_put_port_mixer),
8885 SOC_SINGLE_EXT("TERT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8886 MSM_BACKEND_DAI_TERTIARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8887 msm_routing_put_port_mixer),
8888 SOC_SINGLE_EXT("QUAT_MI2S_RX", MSM_BACKEND_DAI_SLIMBUS_0_RX,
8889 MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, 1, 0, msm_routing_get_port_mixer,
8890 msm_routing_put_port_mixer),
8891};
8892
8893static const struct snd_kcontrol_new aux_pcm_rx_port_mixer_controls[] = {
8894 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8895 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8896 msm_routing_put_port_mixer),
8897 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8898 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8899 msm_routing_put_port_mixer),
8900 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8901 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8902 msm_routing_put_port_mixer),
8903 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_AUXPCM_RX,
8904 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8905 msm_routing_put_port_mixer),
8906 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_AUXPCM_RX,
8907 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0, msm_routing_get_port_mixer,
8908 msm_routing_put_port_mixer),
8909};
8910
8911static const struct snd_kcontrol_new sec_auxpcm_rx_port_mixer_controls[] = {
8912 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8913 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8914 msm_routing_put_port_mixer),
8915 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8916 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8917 msm_routing_put_port_mixer),
8918 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
8919 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8920 msm_routing_put_port_mixer),
8921};
8922
8923static const struct snd_kcontrol_new tert_auxpcm_rx_port_mixer_controls[] = {
8924 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8925 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8926 msm_routing_put_port_mixer),
8927 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8928 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8929 msm_routing_put_port_mixer),
8930 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
8931 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8932 msm_routing_put_port_mixer),
8933};
8934
8935static const struct snd_kcontrol_new quat_auxpcm_rx_port_mixer_controls[] = {
8936 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8937 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8938 msm_routing_put_port_mixer),
8939 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8940 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8941 msm_routing_put_port_mixer),
8942 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
8943 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8944 msm_routing_put_port_mixer),
8945};
8946
8947static const struct snd_kcontrol_new sbus_1_rx_port_mixer_controls[] = {
8948 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8949 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
8950 msm_routing_put_port_mixer),
8951 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8952 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0, msm_routing_get_port_mixer,
8953 msm_routing_put_port_mixer),
8954 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8955 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8956 msm_routing_put_port_mixer),
8957 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8958 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8959 msm_routing_put_port_mixer),
8960 SOC_SINGLE_EXT("TERT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8961 MSM_BACKEND_DAI_TERT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8962 msm_routing_put_port_mixer),
8963 SOC_SINGLE_EXT("QUAT_AUXPCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_1_RX,
8964 MSM_BACKEND_DAI_QUAT_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
8965 msm_routing_put_port_mixer),
8966};
8967
8968static const struct snd_kcontrol_new sbus_3_rx_port_mixer_controls[] = {
8969 SOC_SINGLE_EXT("INTERNAL_BT_SCO_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8970 MSM_BACKEND_DAI_INT_BT_SCO_RX, 1, 0, msm_routing_get_port_mixer,
8971 msm_routing_put_port_mixer),
8972 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8973 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
8974 msm_routing_put_port_mixer),
8975 SOC_SINGLE_EXT("AFE_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8976 MSM_BACKEND_DAI_AFE_PCM_RX, 1, 0, msm_routing_get_port_mixer,
8977 msm_routing_put_port_mixer),
8978 SOC_SINGLE_EXT("AUX_PCM_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8979 MSM_BACKEND_DAI_AUXPCM_RX, 1, 0, msm_routing_get_port_mixer,
8980 msm_routing_put_port_mixer),
8981 SOC_SINGLE_EXT("SLIM_0_RX", MSM_BACKEND_DAI_SLIMBUS_3_RX,
8982 MSM_BACKEND_DAI_SLIMBUS_0_RX, 1, 0, msm_routing_get_port_mixer,
8983 msm_routing_put_port_mixer),
8984};
8985
8986static const struct snd_kcontrol_new sbus_6_rx_port_mixer_controls[] = {
8987 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8988 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
8989 msm_routing_put_port_mixer),
8990 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8991 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
8992 msm_routing_put_port_mixer),
8993 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8994 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
8995 msm_routing_put_port_mixer),
8996 SOC_SINGLE_EXT("SLIM_7_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
8997 MSM_BACKEND_DAI_SLIMBUS_7_TX, 1, 0, msm_routing_get_port_mixer,
8998 msm_routing_put_port_mixer),
8999 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9000 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9001 msm_routing_put_port_mixer),
9002 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9003 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9004 msm_routing_put_port_mixer),
9005 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9006 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9007 msm_routing_put_port_mixer),
9008 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9009 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9010 msm_routing_put_port_mixer),
9011 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9012 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9013 msm_routing_put_port_mixer),
9014 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9015 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9016 msm_routing_put_port_mixer),
9017 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9018 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9019 msm_routing_put_port_mixer),
9020 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SLIMBUS_6_RX,
9021 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
9022 msm_routing_put_port_mixer),
9023};
9024
9025static const struct snd_kcontrol_new bt_sco_rx_port_mixer_controls[] = {
9026 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
9027 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9028 msm_routing_put_port_mixer),
9029 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_INT_BT_SCO_RX,
9030 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9031 msm_routing_put_port_mixer),
9032};
9033
9034static const struct snd_kcontrol_new afe_pcm_rx_port_mixer_controls[] = {
9035 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
9036 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9037 msm_routing_put_port_mixer),
9038 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_AFE_PCM_RX,
9039 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9040 msm_routing_put_port_mixer),
9041};
9042
9043
9044static const struct snd_kcontrol_new hdmi_rx_port_mixer_controls[] = {
9045 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_HDMI_RX,
9046 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9047 msm_routing_put_port_mixer),
9048};
9049
9050static const struct snd_kcontrol_new display_port_rx_port_mixer_controls[] = {
9051 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
9052 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9053 msm_routing_put_port_mixer),
9054};
9055
9056static const struct snd_kcontrol_new sec_i2s_rx_port_mixer_controls[] = {
9057 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_SEC_I2S_RX,
9058 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9059 msm_routing_put_port_mixer),
9060};
9061
9062static const struct snd_kcontrol_new mi2s_rx_port_mixer_controls[] = {
9063 SOC_SINGLE_EXT("SLIM_1_TX", MSM_BACKEND_DAI_MI2S_RX,
9064 MSM_BACKEND_DAI_SLIMBUS_1_TX, 1, 0, msm_routing_get_port_mixer,
9065 msm_routing_put_port_mixer),
9066 SOC_SINGLE_EXT("MI2S_TX", MSM_BACKEND_DAI_MI2S_RX,
9067 MSM_BACKEND_DAI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9068 msm_routing_put_port_mixer),
9069};
9070
9071static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = {
9072 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9073 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9074 msm_routing_put_port_mixer),
9075 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9076 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9077 msm_routing_put_port_mixer),
9078 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9079 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9080 msm_routing_put_port_mixer),
9081 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9082 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9083 msm_routing_put_port_mixer),
9084 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9085 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0, msm_routing_get_port_mixer,
9086 msm_routing_put_port_mixer),
9087 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9088 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9089 msm_routing_put_port_mixer),
9090 SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9091 MSM_BACKEND_DAI_QUINARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9092 msm_routing_put_port_mixer),
9093 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9094 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
9095 msm_routing_put_port_mixer),
9096 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_PRI_MI2S_RX,
9097 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9098 msm_routing_put_port_mixer),
9099};
9100
9101static const struct snd_kcontrol_new usb_rx_port_mixer_controls[] = {
9102 SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_RX,
9103 MSM_BACKEND_DAI_USB_TX, 1, 0, msm_routing_get_port_mixer,
9104 msm_routing_put_port_mixer),
9105};
9106
9107static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = {
9108 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9109 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9110 msm_routing_put_port_mixer),
9111 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9112 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9113 msm_routing_put_port_mixer),
9114 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9115 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
9116 msm_routing_put_port_mixer),
9117 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9118 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0, msm_routing_get_port_mixer,
9119 msm_routing_put_port_mixer),
9120 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_QUATERNARY_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("SEC_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9124 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9125 msm_routing_put_port_mixer),
9126 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9127 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
9128 msm_routing_put_port_mixer),
9129 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
9130 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
9131 msm_routing_put_port_mixer),
9132};
9133
9134static const struct snd_kcontrol_new pri_tdm_rx_0_port_mixer_controls[] = {
9135 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9136 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9137 msm_routing_get_port_mixer,
9138 msm_routing_put_port_mixer),
9139 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9140 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9141 msm_routing_get_port_mixer,
9142 msm_routing_put_port_mixer),
9143 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9144 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9145 msm_routing_get_port_mixer,
9146 msm_routing_put_port_mixer),
9147 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9148 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9149 msm_routing_get_port_mixer,
9150 msm_routing_put_port_mixer),
9151 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9152 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9153 msm_routing_get_port_mixer,
9154 msm_routing_put_port_mixer),
9155 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9156 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9157 msm_routing_get_port_mixer,
9158 msm_routing_put_port_mixer),
9159 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9160 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9161 msm_routing_get_port_mixer,
9162 msm_routing_put_port_mixer),
9163 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9164 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9165 msm_routing_get_port_mixer,
9166 msm_routing_put_port_mixer),
9167 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9168 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9169 msm_routing_get_port_mixer,
9170 msm_routing_put_port_mixer),
9171 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9172 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9173 msm_routing_get_port_mixer,
9174 msm_routing_put_port_mixer),
9175 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9176 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9177 msm_routing_get_port_mixer,
9178 msm_routing_put_port_mixer),
9179 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9180 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9181 msm_routing_get_port_mixer,
9182 msm_routing_put_port_mixer),
9183 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9184 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9185 msm_routing_get_port_mixer,
9186 msm_routing_put_port_mixer),
9187 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9188 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9189 msm_routing_get_port_mixer,
9190 msm_routing_put_port_mixer),
9191 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9192 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9193 msm_routing_get_port_mixer,
9194 msm_routing_put_port_mixer),
9195 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_0,
9196 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9197 msm_routing_get_port_mixer,
9198 msm_routing_put_port_mixer),
9199};
9200
9201static const struct snd_kcontrol_new pri_tdm_rx_1_port_mixer_controls[] = {
9202 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9203 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9204 msm_routing_get_port_mixer,
9205 msm_routing_put_port_mixer),
9206 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9207 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9208 msm_routing_get_port_mixer,
9209 msm_routing_put_port_mixer),
9210 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9211 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9212 msm_routing_get_port_mixer,
9213 msm_routing_put_port_mixer),
9214 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9215 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9216 msm_routing_get_port_mixer,
9217 msm_routing_put_port_mixer),
9218 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9219 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9220 msm_routing_get_port_mixer,
9221 msm_routing_put_port_mixer),
9222 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9223 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9224 msm_routing_get_port_mixer,
9225 msm_routing_put_port_mixer),
9226 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9227 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9228 msm_routing_get_port_mixer,
9229 msm_routing_put_port_mixer),
9230 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9231 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9232 msm_routing_get_port_mixer,
9233 msm_routing_put_port_mixer),
9234 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9235 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9236 msm_routing_get_port_mixer,
9237 msm_routing_put_port_mixer),
9238 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9239 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9240 msm_routing_get_port_mixer,
9241 msm_routing_put_port_mixer),
9242 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9243 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9244 msm_routing_get_port_mixer,
9245 msm_routing_put_port_mixer),
9246 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9247 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9248 msm_routing_get_port_mixer,
9249 msm_routing_put_port_mixer),
9250 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9251 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9252 msm_routing_get_port_mixer,
9253 msm_routing_put_port_mixer),
9254 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9255 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9256 msm_routing_get_port_mixer,
9257 msm_routing_put_port_mixer),
9258 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9259 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9260 msm_routing_get_port_mixer,
9261 msm_routing_put_port_mixer),
9262 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_1,
9263 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9264 msm_routing_get_port_mixer,
9265 msm_routing_put_port_mixer),
9266};
9267
9268static const struct snd_kcontrol_new pri_tdm_rx_2_port_mixer_controls[] = {
9269 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9270 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9271 msm_routing_get_port_mixer,
9272 msm_routing_put_port_mixer),
9273 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9274 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9275 msm_routing_get_port_mixer,
9276 msm_routing_put_port_mixer),
9277 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9278 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9279 msm_routing_get_port_mixer,
9280 msm_routing_put_port_mixer),
9281 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9282 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9283 msm_routing_get_port_mixer,
9284 msm_routing_put_port_mixer),
9285 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9286 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9287 msm_routing_get_port_mixer,
9288 msm_routing_put_port_mixer),
9289 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9290 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9291 msm_routing_get_port_mixer,
9292 msm_routing_put_port_mixer),
9293 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9294 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9295 msm_routing_get_port_mixer,
9296 msm_routing_put_port_mixer),
9297 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9298 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9299 msm_routing_get_port_mixer,
9300 msm_routing_put_port_mixer),
9301 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9302 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9303 msm_routing_get_port_mixer,
9304 msm_routing_put_port_mixer),
9305 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9306 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9307 msm_routing_get_port_mixer,
9308 msm_routing_put_port_mixer),
9309 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9310 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9311 msm_routing_get_port_mixer,
9312 msm_routing_put_port_mixer),
9313 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9314 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9315 msm_routing_get_port_mixer,
9316 msm_routing_put_port_mixer),
9317 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9318 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9319 msm_routing_get_port_mixer,
9320 msm_routing_put_port_mixer),
9321 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9322 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9323 msm_routing_get_port_mixer,
9324 msm_routing_put_port_mixer),
9325 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9326 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9327 msm_routing_get_port_mixer,
9328 msm_routing_put_port_mixer),
9329 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_2,
9330 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9331 msm_routing_get_port_mixer,
9332 msm_routing_put_port_mixer),
9333};
9334
9335static const struct snd_kcontrol_new pri_tdm_rx_3_port_mixer_controls[] = {
9336 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9337 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9338 msm_routing_get_port_mixer,
9339 msm_routing_put_port_mixer),
9340 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9341 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9342 msm_routing_get_port_mixer,
9343 msm_routing_put_port_mixer),
9344 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9345 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9346 msm_routing_get_port_mixer,
9347 msm_routing_put_port_mixer),
9348 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9349 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9350 msm_routing_get_port_mixer,
9351 msm_routing_put_port_mixer),
9352 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9353 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9354 msm_routing_get_port_mixer,
9355 msm_routing_put_port_mixer),
9356 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9357 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9358 msm_routing_get_port_mixer,
9359 msm_routing_put_port_mixer),
9360 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9361 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9362 msm_routing_get_port_mixer,
9363 msm_routing_put_port_mixer),
9364 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9365 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9366 msm_routing_get_port_mixer,
9367 msm_routing_put_port_mixer),
9368 SOC_SINGLE_EXT("PRI_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9369 MSM_BACKEND_DAI_PRI_TDM_TX_0, 1, 0,
9370 msm_routing_get_port_mixer,
9371 msm_routing_put_port_mixer),
9372 SOC_SINGLE_EXT("PRI_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9373 MSM_BACKEND_DAI_PRI_TDM_TX_1, 1, 0,
9374 msm_routing_get_port_mixer,
9375 msm_routing_put_port_mixer),
9376 SOC_SINGLE_EXT("PRI_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9377 MSM_BACKEND_DAI_PRI_TDM_TX_2, 1, 0,
9378 msm_routing_get_port_mixer,
9379 msm_routing_put_port_mixer),
9380 SOC_SINGLE_EXT("PRI_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9381 MSM_BACKEND_DAI_PRI_TDM_TX_3, 1, 0,
9382 msm_routing_get_port_mixer,
9383 msm_routing_put_port_mixer),
9384 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9385 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9386 msm_routing_get_port_mixer,
9387 msm_routing_put_port_mixer),
9388 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9389 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9390 msm_routing_get_port_mixer,
9391 msm_routing_put_port_mixer),
9392 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9393 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9394 msm_routing_get_port_mixer,
9395 msm_routing_put_port_mixer),
9396 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_PRI_TDM_RX_3,
9397 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9398 msm_routing_get_port_mixer,
9399 msm_routing_put_port_mixer),
9400};
9401
9402static const struct snd_kcontrol_new sec_tdm_rx_0_port_mixer_controls[] = {
9403 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9404 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9405 msm_routing_get_port_mixer,
9406 msm_routing_put_port_mixer),
9407 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9408 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9409 msm_routing_get_port_mixer,
9410 msm_routing_put_port_mixer),
9411 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9412 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9413 msm_routing_get_port_mixer,
9414 msm_routing_put_port_mixer),
9415 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9416 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9417 msm_routing_get_port_mixer,
9418 msm_routing_put_port_mixer),
9419 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9420 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9421 msm_routing_get_port_mixer,
9422 msm_routing_put_port_mixer),
9423 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9424 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9425 msm_routing_get_port_mixer,
9426 msm_routing_put_port_mixer),
9427 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9428 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9429 msm_routing_get_port_mixer,
9430 msm_routing_put_port_mixer),
9431 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9432 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9433 msm_routing_get_port_mixer,
9434 msm_routing_put_port_mixer),
9435 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9436 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9437 msm_routing_get_port_mixer,
9438 msm_routing_put_port_mixer),
9439 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9440 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9441 msm_routing_get_port_mixer,
9442 msm_routing_put_port_mixer),
9443 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9444 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9445 msm_routing_get_port_mixer,
9446 msm_routing_put_port_mixer),
9447 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9448 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9449 msm_routing_get_port_mixer,
9450 msm_routing_put_port_mixer),
9451 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9452 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9453 msm_routing_get_port_mixer,
9454 msm_routing_put_port_mixer),
9455 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9456 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9457 msm_routing_get_port_mixer,
9458 msm_routing_put_port_mixer),
9459 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9460 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9461 msm_routing_get_port_mixer,
9462 msm_routing_put_port_mixer),
9463 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_0,
9464 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9465 msm_routing_get_port_mixer,
9466 msm_routing_put_port_mixer),
9467};
9468
9469static const struct snd_kcontrol_new sec_tdm_rx_1_port_mixer_controls[] = {
9470 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9471 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9472 msm_routing_get_port_mixer,
9473 msm_routing_put_port_mixer),
9474 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9475 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9476 msm_routing_get_port_mixer,
9477 msm_routing_put_port_mixer),
9478 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9479 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9480 msm_routing_get_port_mixer,
9481 msm_routing_put_port_mixer),
9482 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9483 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9484 msm_routing_get_port_mixer,
9485 msm_routing_put_port_mixer),
9486 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9487 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9488 msm_routing_get_port_mixer,
9489 msm_routing_put_port_mixer),
9490 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9491 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9492 msm_routing_get_port_mixer,
9493 msm_routing_put_port_mixer),
9494 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9495 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9496 msm_routing_get_port_mixer,
9497 msm_routing_put_port_mixer),
9498 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9499 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9500 msm_routing_get_port_mixer,
9501 msm_routing_put_port_mixer),
9502 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9503 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9504 msm_routing_get_port_mixer,
9505 msm_routing_put_port_mixer),
9506 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9507 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9508 msm_routing_get_port_mixer,
9509 msm_routing_put_port_mixer),
9510 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9511 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9512 msm_routing_get_port_mixer,
9513 msm_routing_put_port_mixer),
9514 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9515 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9516 msm_routing_get_port_mixer,
9517 msm_routing_put_port_mixer),
9518 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9519 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9520 msm_routing_get_port_mixer,
9521 msm_routing_put_port_mixer),
9522 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9523 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9524 msm_routing_get_port_mixer,
9525 msm_routing_put_port_mixer),
9526 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9527 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9528 msm_routing_get_port_mixer,
9529 msm_routing_put_port_mixer),
9530 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_1,
9531 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9532 msm_routing_get_port_mixer,
9533 msm_routing_put_port_mixer),
9534};
9535
9536static const struct snd_kcontrol_new sec_tdm_rx_2_port_mixer_controls[] = {
9537 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9538 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9539 msm_routing_get_port_mixer,
9540 msm_routing_put_port_mixer),
9541 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9542 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9543 msm_routing_get_port_mixer,
9544 msm_routing_put_port_mixer),
9545 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9546 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9547 msm_routing_get_port_mixer,
9548 msm_routing_put_port_mixer),
9549 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9550 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9551 msm_routing_get_port_mixer,
9552 msm_routing_put_port_mixer),
9553 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9554 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9555 msm_routing_get_port_mixer,
9556 msm_routing_put_port_mixer),
9557 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9558 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9559 msm_routing_get_port_mixer,
9560 msm_routing_put_port_mixer),
9561 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9562 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9563 msm_routing_get_port_mixer,
9564 msm_routing_put_port_mixer),
9565 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9566 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9567 msm_routing_get_port_mixer,
9568 msm_routing_put_port_mixer),
9569 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9570 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9571 msm_routing_get_port_mixer,
9572 msm_routing_put_port_mixer),
9573 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9574 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9575 msm_routing_get_port_mixer,
9576 msm_routing_put_port_mixer),
9577 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9578 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9579 msm_routing_get_port_mixer,
9580 msm_routing_put_port_mixer),
9581 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9582 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9583 msm_routing_get_port_mixer,
9584 msm_routing_put_port_mixer),
9585 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9586 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9587 msm_routing_get_port_mixer,
9588 msm_routing_put_port_mixer),
9589 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9590 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9591 msm_routing_get_port_mixer,
9592 msm_routing_put_port_mixer),
9593 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9594 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9595 msm_routing_get_port_mixer,
9596 msm_routing_put_port_mixer),
9597 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_2,
9598 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9599 msm_routing_get_port_mixer,
9600 msm_routing_put_port_mixer),
9601};
9602
9603static const struct snd_kcontrol_new sec_tdm_rx_3_port_mixer_controls[] = {
9604 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9605 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9606 msm_routing_get_port_mixer,
9607 msm_routing_put_port_mixer),
9608 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9609 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9610 msm_routing_get_port_mixer,
9611 msm_routing_put_port_mixer),
9612 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9613 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9614 msm_routing_get_port_mixer,
9615 msm_routing_put_port_mixer),
9616 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9617 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9618 msm_routing_get_port_mixer,
9619 msm_routing_put_port_mixer),
9620 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9621 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9622 msm_routing_get_port_mixer,
9623 msm_routing_put_port_mixer),
9624 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9625 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9626 msm_routing_get_port_mixer,
9627 msm_routing_put_port_mixer),
9628 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9629 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9630 msm_routing_get_port_mixer,
9631 msm_routing_put_port_mixer),
9632 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9633 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9634 msm_routing_get_port_mixer,
9635 msm_routing_put_port_mixer),
9636 SOC_SINGLE_EXT("SEC_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9637 MSM_BACKEND_DAI_SEC_TDM_TX_0, 1, 0,
9638 msm_routing_get_port_mixer,
9639 msm_routing_put_port_mixer),
9640 SOC_SINGLE_EXT("SEC_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9641 MSM_BACKEND_DAI_SEC_TDM_TX_1, 1, 0,
9642 msm_routing_get_port_mixer,
9643 msm_routing_put_port_mixer),
9644 SOC_SINGLE_EXT("SEC_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9645 MSM_BACKEND_DAI_SEC_TDM_TX_2, 1, 0,
9646 msm_routing_get_port_mixer,
9647 msm_routing_put_port_mixer),
9648 SOC_SINGLE_EXT("SEC_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9649 MSM_BACKEND_DAI_SEC_TDM_TX_3, 1, 0,
9650 msm_routing_get_port_mixer,
9651 msm_routing_put_port_mixer),
9652 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9653 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9654 msm_routing_get_port_mixer,
9655 msm_routing_put_port_mixer),
9656 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9657 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9658 msm_routing_get_port_mixer,
9659 msm_routing_put_port_mixer),
9660 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9661 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9662 msm_routing_get_port_mixer,
9663 msm_routing_put_port_mixer),
9664 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_SEC_TDM_RX_3,
9665 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9666 msm_routing_get_port_mixer,
9667 msm_routing_put_port_mixer),
9668};
9669
9670static const struct snd_kcontrol_new tert_tdm_rx_0_port_mixer_controls[] = {
9671 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9672 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9673 msm_routing_get_port_mixer,
9674 msm_routing_put_port_mixer),
9675 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9676 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9677 msm_routing_get_port_mixer,
9678 msm_routing_put_port_mixer),
9679 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9680 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9681 msm_routing_get_port_mixer,
9682 msm_routing_put_port_mixer),
9683 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9684 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9685 msm_routing_get_port_mixer,
9686 msm_routing_put_port_mixer),
9687 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9688 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9689 msm_routing_get_port_mixer,
9690 msm_routing_put_port_mixer),
9691 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9692 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9693 msm_routing_get_port_mixer,
9694 msm_routing_put_port_mixer),
9695 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9696 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9697 msm_routing_get_port_mixer,
9698 msm_routing_put_port_mixer),
9699 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9700 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9701 msm_routing_get_port_mixer,
9702 msm_routing_put_port_mixer),
9703 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9704 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9705 msm_routing_get_port_mixer,
9706 msm_routing_put_port_mixer),
9707 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9708 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9709 msm_routing_get_port_mixer,
9710 msm_routing_put_port_mixer),
9711 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9712 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9713 msm_routing_get_port_mixer,
9714 msm_routing_put_port_mixer),
9715 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9716 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9717 msm_routing_get_port_mixer,
9718 msm_routing_put_port_mixer),
9719 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9720 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9721 msm_routing_get_port_mixer,
9722 msm_routing_put_port_mixer),
9723 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9724 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9725 msm_routing_get_port_mixer,
9726 msm_routing_put_port_mixer),
9727 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9728 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9729 msm_routing_get_port_mixer,
9730 msm_routing_put_port_mixer),
9731 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_0,
9732 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9733 msm_routing_get_port_mixer,
9734 msm_routing_put_port_mixer),
9735};
9736
9737static const struct snd_kcontrol_new tert_tdm_rx_1_port_mixer_controls[] = {
9738 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9739 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9740 msm_routing_get_port_mixer,
9741 msm_routing_put_port_mixer),
9742 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9743 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9744 msm_routing_get_port_mixer,
9745 msm_routing_put_port_mixer),
9746 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9747 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9748 msm_routing_get_port_mixer,
9749 msm_routing_put_port_mixer),
9750 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9751 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9752 msm_routing_get_port_mixer,
9753 msm_routing_put_port_mixer),
9754 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9755 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9756 msm_routing_get_port_mixer,
9757 msm_routing_put_port_mixer),
9758 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9759 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9760 msm_routing_get_port_mixer,
9761 msm_routing_put_port_mixer),
9762 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9763 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9764 msm_routing_get_port_mixer,
9765 msm_routing_put_port_mixer),
9766 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9767 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9768 msm_routing_get_port_mixer,
9769 msm_routing_put_port_mixer),
9770 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9771 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9772 msm_routing_get_port_mixer,
9773 msm_routing_put_port_mixer),
9774 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9775 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9776 msm_routing_get_port_mixer,
9777 msm_routing_put_port_mixer),
9778 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9779 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9780 msm_routing_get_port_mixer,
9781 msm_routing_put_port_mixer),
9782 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9783 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9784 msm_routing_get_port_mixer,
9785 msm_routing_put_port_mixer),
9786 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9787 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9788 msm_routing_get_port_mixer,
9789 msm_routing_put_port_mixer),
9790 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9791 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9792 msm_routing_get_port_mixer,
9793 msm_routing_put_port_mixer),
9794 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9795 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9796 msm_routing_get_port_mixer,
9797 msm_routing_put_port_mixer),
9798 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_1,
9799 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9800 msm_routing_get_port_mixer,
9801 msm_routing_put_port_mixer),
9802};
9803
9804static const struct snd_kcontrol_new tert_tdm_rx_2_port_mixer_controls[] = {
9805 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9806 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9807 msm_routing_get_port_mixer,
9808 msm_routing_put_port_mixer),
9809 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9810 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9811 msm_routing_get_port_mixer,
9812 msm_routing_put_port_mixer),
9813 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9814 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9815 msm_routing_get_port_mixer,
9816 msm_routing_put_port_mixer),
9817 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9818 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9819 msm_routing_get_port_mixer,
9820 msm_routing_put_port_mixer),
9821 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9822 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9823 msm_routing_get_port_mixer,
9824 msm_routing_put_port_mixer),
9825 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9826 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9827 msm_routing_get_port_mixer,
9828 msm_routing_put_port_mixer),
9829 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9830 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9831 msm_routing_get_port_mixer,
9832 msm_routing_put_port_mixer),
9833 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9834 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9835 msm_routing_get_port_mixer,
9836 msm_routing_put_port_mixer),
9837 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9838 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9839 msm_routing_get_port_mixer,
9840 msm_routing_put_port_mixer),
9841 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9842 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9843 msm_routing_get_port_mixer,
9844 msm_routing_put_port_mixer),
9845 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9846 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9847 msm_routing_get_port_mixer,
9848 msm_routing_put_port_mixer),
9849 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9850 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9851 msm_routing_get_port_mixer,
9852 msm_routing_put_port_mixer),
9853 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9854 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9855 msm_routing_get_port_mixer,
9856 msm_routing_put_port_mixer),
9857 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9858 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9859 msm_routing_get_port_mixer,
9860 msm_routing_put_port_mixer),
9861 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9862 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9863 msm_routing_get_port_mixer,
9864 msm_routing_put_port_mixer),
9865 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_2,
9866 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9867 msm_routing_get_port_mixer,
9868 msm_routing_put_port_mixer),
9869};
9870
9871static const struct snd_kcontrol_new tert_tdm_rx_3_port_mixer_controls[] = {
9872 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9873 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9874 msm_routing_get_port_mixer,
9875 msm_routing_put_port_mixer),
9876 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9877 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9878 msm_routing_get_port_mixer,
9879 msm_routing_put_port_mixer),
9880 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9881 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0,
9882 msm_routing_get_port_mixer,
9883 msm_routing_put_port_mixer),
9884 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9885 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9886 msm_routing_get_port_mixer,
9887 msm_routing_put_port_mixer),
9888 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9889 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9890 msm_routing_get_port_mixer,
9891 msm_routing_put_port_mixer),
9892 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9893 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9894 msm_routing_get_port_mixer,
9895 msm_routing_put_port_mixer),
9896 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9897 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9898 msm_routing_get_port_mixer,
9899 msm_routing_put_port_mixer),
9900 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9901 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9902 msm_routing_get_port_mixer,
9903 msm_routing_put_port_mixer),
9904 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9905 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9906 msm_routing_get_port_mixer,
9907 msm_routing_put_port_mixer),
9908 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9909 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9910 msm_routing_get_port_mixer,
9911 msm_routing_put_port_mixer),
9912 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9913 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9914 msm_routing_get_port_mixer,
9915 msm_routing_put_port_mixer),
9916 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9917 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9918 msm_routing_get_port_mixer,
9919 msm_routing_put_port_mixer),
9920 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9921 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9922 msm_routing_get_port_mixer,
9923 msm_routing_put_port_mixer),
9924 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9925 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9926 msm_routing_get_port_mixer,
9927 msm_routing_put_port_mixer),
9928 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9929 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9930 msm_routing_get_port_mixer,
9931 msm_routing_put_port_mixer),
9932 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_TERT_TDM_RX_3,
9933 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
9934 msm_routing_get_port_mixer,
9935 msm_routing_put_port_mixer),
9936};
9937
9938static const struct snd_kcontrol_new quat_tdm_rx_0_port_mixer_controls[] = {
9939 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9940 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
9941 msm_routing_get_port_mixer,
9942 msm_routing_put_port_mixer),
9943 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9944 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
9945 msm_routing_get_port_mixer,
9946 msm_routing_put_port_mixer),
9947 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9948 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
9949 msm_routing_get_port_mixer,
9950 msm_routing_put_port_mixer),
9951 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9952 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
9953 msm_routing_get_port_mixer,
9954 msm_routing_put_port_mixer),
9955 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9956 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
9957 msm_routing_get_port_mixer,
9958 msm_routing_put_port_mixer),
9959 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9960 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
9961 msm_routing_get_port_mixer,
9962 msm_routing_put_port_mixer),
9963 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9964 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
9965 msm_routing_get_port_mixer,
9966 msm_routing_put_port_mixer),
9967 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9968 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
9969 msm_routing_get_port_mixer,
9970 msm_routing_put_port_mixer),
9971 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9972 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
9973 msm_routing_get_port_mixer,
9974 msm_routing_put_port_mixer),
9975 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9976 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
9977 msm_routing_get_port_mixer,
9978 msm_routing_put_port_mixer),
9979 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9980 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
9981 msm_routing_get_port_mixer,
9982 msm_routing_put_port_mixer),
9983 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9984 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
9985 msm_routing_get_port_mixer,
9986 msm_routing_put_port_mixer),
9987 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9988 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
9989 msm_routing_get_port_mixer,
9990 msm_routing_put_port_mixer),
9991 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9992 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
9993 msm_routing_get_port_mixer,
9994 msm_routing_put_port_mixer),
9995 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
9996 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
9997 msm_routing_get_port_mixer,
9998 msm_routing_put_port_mixer),
9999 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_0,
10000 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10001 msm_routing_get_port_mixer,
10002 msm_routing_put_port_mixer),
10003};
10004
10005static const struct snd_kcontrol_new quat_tdm_rx_1_port_mixer_controls[] = {
10006 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10007 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10008 msm_routing_get_port_mixer,
10009 msm_routing_put_port_mixer),
10010 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10011 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10012 msm_routing_get_port_mixer,
10013 msm_routing_put_port_mixer),
10014 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10015 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10016 msm_routing_get_port_mixer,
10017 msm_routing_put_port_mixer),
10018 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10019 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10020 msm_routing_get_port_mixer,
10021 msm_routing_put_port_mixer),
10022 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10023 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10024 msm_routing_get_port_mixer,
10025 msm_routing_put_port_mixer),
10026 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10027 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10028 msm_routing_get_port_mixer,
10029 msm_routing_put_port_mixer),
10030 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10031 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10032 msm_routing_get_port_mixer,
10033 msm_routing_put_port_mixer),
10034 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10035 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10036 msm_routing_get_port_mixer,
10037 msm_routing_put_port_mixer),
10038 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10039 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10040 msm_routing_get_port_mixer,
10041 msm_routing_put_port_mixer),
10042 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10043 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10044 msm_routing_get_port_mixer,
10045 msm_routing_put_port_mixer),
10046 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10047 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10048 msm_routing_get_port_mixer,
10049 msm_routing_put_port_mixer),
10050 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10051 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10052 msm_routing_get_port_mixer,
10053 msm_routing_put_port_mixer),
10054 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10055 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10056 msm_routing_get_port_mixer,
10057 msm_routing_put_port_mixer),
10058 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10059 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10060 msm_routing_get_port_mixer,
10061 msm_routing_put_port_mixer),
10062 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10063 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10064 msm_routing_get_port_mixer,
10065 msm_routing_put_port_mixer),
10066 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_1,
10067 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10068 msm_routing_get_port_mixer,
10069 msm_routing_put_port_mixer),
10070};
10071
10072static const struct snd_kcontrol_new quat_tdm_rx_2_port_mixer_controls[] = {
10073 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10074 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10075 msm_routing_get_port_mixer,
10076 msm_routing_put_port_mixer),
10077 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10078 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10079 msm_routing_get_port_mixer,
10080 msm_routing_put_port_mixer),
10081 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10082 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10083 msm_routing_get_port_mixer,
10084 msm_routing_put_port_mixer),
10085 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10086 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10087 msm_routing_get_port_mixer,
10088 msm_routing_put_port_mixer),
10089 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10090 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10091 msm_routing_get_port_mixer,
10092 msm_routing_put_port_mixer),
10093 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10094 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10095 msm_routing_get_port_mixer,
10096 msm_routing_put_port_mixer),
10097 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10098 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10099 msm_routing_get_port_mixer,
10100 msm_routing_put_port_mixer),
10101 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10102 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10103 msm_routing_get_port_mixer,
10104 msm_routing_put_port_mixer),
10105 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10106 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10107 msm_routing_get_port_mixer,
10108 msm_routing_put_port_mixer),
10109 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10110 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10111 msm_routing_get_port_mixer,
10112 msm_routing_put_port_mixer),
10113 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10114 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10115 msm_routing_get_port_mixer,
10116 msm_routing_put_port_mixer),
10117 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10118 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10119 msm_routing_get_port_mixer,
10120 msm_routing_put_port_mixer),
10121 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10122 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10123 msm_routing_get_port_mixer,
10124 msm_routing_put_port_mixer),
10125 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10126 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10127 msm_routing_get_port_mixer,
10128 msm_routing_put_port_mixer),
10129 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10130 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10131 msm_routing_get_port_mixer,
10132 msm_routing_put_port_mixer),
10133 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_2,
10134 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10135 msm_routing_get_port_mixer,
10136 msm_routing_put_port_mixer),
10137};
10138
10139static const struct snd_kcontrol_new quat_tdm_rx_3_port_mixer_controls[] = {
10140 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10141 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0,
10142 msm_routing_get_port_mixer,
10143 msm_routing_put_port_mixer),
10144 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10145 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0,
10146 msm_routing_get_port_mixer,
10147 msm_routing_put_port_mixer),
10148 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10149 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0,
10150 msm_routing_get_port_mixer,
10151 msm_routing_put_port_mixer),
10152 SOC_SINGLE_EXT("INTERNAL_FM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10153 MSM_BACKEND_DAI_INT_FM_TX, 1, 0,
10154 msm_routing_get_port_mixer,
10155 msm_routing_put_port_mixer),
10156 SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10157 MSM_BACKEND_DAI_INT_BT_SCO_TX, 1, 0,
10158 msm_routing_get_port_mixer,
10159 msm_routing_put_port_mixer),
10160 SOC_SINGLE_EXT("AFE_PCM_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10161 MSM_BACKEND_DAI_AFE_PCM_TX, 1, 0,
10162 msm_routing_get_port_mixer,
10163 msm_routing_put_port_mixer),
10164 SOC_SINGLE_EXT("AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10165 MSM_BACKEND_DAI_AUXPCM_TX, 1, 0,
10166 msm_routing_get_port_mixer,
10167 msm_routing_put_port_mixer),
10168 SOC_SINGLE_EXT("SEC_AUX_PCM_UL_TX", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10169 MSM_BACKEND_DAI_SEC_AUXPCM_TX, 1, 0,
10170 msm_routing_get_port_mixer,
10171 msm_routing_put_port_mixer),
10172 SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10173 MSM_BACKEND_DAI_TERT_TDM_TX_0, 1, 0,
10174 msm_routing_get_port_mixer,
10175 msm_routing_put_port_mixer),
10176 SOC_SINGLE_EXT("TERT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10177 MSM_BACKEND_DAI_TERT_TDM_TX_1, 1, 0,
10178 msm_routing_get_port_mixer,
10179 msm_routing_put_port_mixer),
10180 SOC_SINGLE_EXT("TERT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10181 MSM_BACKEND_DAI_TERT_TDM_TX_2, 1, 0,
10182 msm_routing_get_port_mixer,
10183 msm_routing_put_port_mixer),
10184 SOC_SINGLE_EXT("TERT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10185 MSM_BACKEND_DAI_TERT_TDM_TX_3, 1, 0,
10186 msm_routing_get_port_mixer,
10187 msm_routing_put_port_mixer),
10188 SOC_SINGLE_EXT("QUAT_TDM_TX_0", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10189 MSM_BACKEND_DAI_QUAT_TDM_TX_0, 1, 0,
10190 msm_routing_get_port_mixer,
10191 msm_routing_put_port_mixer),
10192 SOC_SINGLE_EXT("QUAT_TDM_TX_1", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10193 MSM_BACKEND_DAI_QUAT_TDM_TX_1, 1, 0,
10194 msm_routing_get_port_mixer,
10195 msm_routing_put_port_mixer),
10196 SOC_SINGLE_EXT("QUAT_TDM_TX_2", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10197 MSM_BACKEND_DAI_QUAT_TDM_TX_2, 1, 0,
10198 msm_routing_get_port_mixer,
10199 msm_routing_put_port_mixer),
10200 SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_RX_3,
10201 MSM_BACKEND_DAI_QUAT_TDM_TX_3, 1, 0,
10202 msm_routing_get_port_mixer,
10203 msm_routing_put_port_mixer),
10204};
10205
10206static const struct snd_kcontrol_new tert_mi2s_rx_port_mixer_controls[] = {
10207 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10208 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10209 msm_routing_put_port_mixer),
10210 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10211 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10212 msm_routing_put_port_mixer),
10213 SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10214 MSM_BACKEND_DAI_SLIMBUS_0_TX, 1, 0, msm_routing_get_port_mixer,
10215 msm_routing_put_port_mixer),
10216 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10217 MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10218 msm_routing_put_port_mixer),
10219 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10220 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10221 msm_routing_put_port_mixer),
10222 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
10223 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10224 msm_routing_put_port_mixer),
10225};
10226
10227static const struct snd_kcontrol_new sec_mi2s_rx_port_mixer_controls[] = {
10228 SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10229 MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10230 msm_routing_put_port_mixer),
10231 SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10232 MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10233 msm_routing_put_port_mixer),
10234 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10235 MSM_BACKEND_DAI_TERTIARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer,
10236 msm_routing_put_port_mixer),
10237 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10238 MSM_BACKEND_DAI_QUATERNARY_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_SECONDARY_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("INTERNAL_FM_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10244 MSM_BACKEND_DAI_INT_FM_TX, 1, 0, msm_routing_get_port_mixer,
10245 msm_routing_put_port_mixer),
10246 SOC_SINGLE_EXT("SLIM_8_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
10247 MSM_BACKEND_DAI_SLIMBUS_8_TX, 1, 0, msm_routing_get_port_mixer,
10248 msm_routing_put_port_mixer),
10249};
10250
10251static const struct snd_kcontrol_new lsm1_mixer_controls[] = {
10252 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10253 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10254 msm_routing_put_listen_mixer),
10255 SOC_SINGLE_EXT("SLIMBUS_1_TX", MSM_BACKEND_DAI_SLIMBUS_1_TX,
10256 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10257 msm_routing_put_listen_mixer),
10258 SOC_SINGLE_EXT("SLIMBUS_3_TX", MSM_BACKEND_DAI_SLIMBUS_3_TX,
10259 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10260 msm_routing_put_listen_mixer),
10261 SOC_SINGLE_EXT("SLIMBUS_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
10262 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10263 msm_routing_put_listen_mixer),
10264 SOC_SINGLE_EXT("SLIMBUS_5_TX", MSM_BACKEND_DAI_SLIMBUS_5_TX,
10265 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10266 msm_routing_put_listen_mixer),
10267 SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
10268 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10269 msm_routing_put_listen_mixer),
10270 SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
10271 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10272 msm_routing_put_listen_mixer),
10273 SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
10274 MSM_FRONTEND_DAI_LSM1, 1, 0, msm_routing_get_listen_mixer,
10275 msm_routing_put_listen_mixer),
10276};
10277
10278static const struct snd_kcontrol_new lsm2_mixer_controls[] = {
10279 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10280 MSM_FRONTEND_DAI_LSM2, 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_LSM2, 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_LSM2, 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_LSM2, 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_LSM2, 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_LSM2, 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_LSM2, 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_LSM2, 1, 0, msm_routing_get_listen_mixer,
10302 msm_routing_put_listen_mixer),
10303};
10304
10305static const struct snd_kcontrol_new lsm3_mixer_controls[] = {
10306 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10307 MSM_FRONTEND_DAI_LSM3, 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_LSM3, 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_LSM3, 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_LSM3, 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_LSM3, 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_LSM3, 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_LSM3, 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_LSM3, 1, 0, msm_routing_get_listen_mixer,
10329 msm_routing_put_listen_mixer),
10330};
10331
10332static const struct snd_kcontrol_new lsm4_mixer_controls[] = {
10333 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10334 MSM_FRONTEND_DAI_LSM4, 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_LSM4, 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_LSM4, 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_LSM4, 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_LSM4, 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_LSM4, 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_LSM4, 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_LSM4, 1, 0, msm_routing_get_listen_mixer,
10356 msm_routing_put_listen_mixer),
10357};
10358
10359static const struct snd_kcontrol_new lsm5_mixer_controls[] = {
10360 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10361 MSM_FRONTEND_DAI_LSM5, 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_LSM5, 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_LSM5, 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_LSM5, 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_LSM5, 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_LSM5, 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_LSM5, 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_LSM5, 1, 0, msm_routing_get_listen_mixer,
10383 msm_routing_put_listen_mixer),
10384};
10385
10386static const struct snd_kcontrol_new lsm6_mixer_controls[] = {
10387 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10388 MSM_FRONTEND_DAI_LSM6, 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_LSM6, 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_LSM6, 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_LSM6, 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_LSM6, 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_LSM6, 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_LSM6, 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_LSM6, 1, 0, msm_routing_get_listen_mixer,
10410 msm_routing_put_listen_mixer),
10411};
10412
10413static const struct snd_kcontrol_new lsm7_mixer_controls[] = {
10414 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10415 MSM_FRONTEND_DAI_LSM7, 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_LSM7, 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_LSM7, 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_LSM7, 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_LSM7, 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_LSM7, 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_LSM7, 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_LSM7, 1, 0, msm_routing_get_listen_mixer,
10437 msm_routing_put_listen_mixer),
10438};
10439
10440static const struct snd_kcontrol_new lsm8_mixer_controls[] = {
10441 SOC_SINGLE_EXT("SLIMBUS_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX,
10442 MSM_FRONTEND_DAI_LSM8, 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_LSM8, 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_LSM8, 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_LSM8, 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_LSM8, 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_LSM8, 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_LSM8, 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_LSM8, 1, 0, msm_routing_get_listen_mixer,
10464 msm_routing_put_listen_mixer),
10465};
10466
10467static const struct snd_kcontrol_new slim_fm_switch_mixer_controls =
10468 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10469 0, 1, 0, msm_routing_get_switch_mixer,
10470 msm_routing_put_switch_mixer);
10471
10472static const struct snd_kcontrol_new slim1_fm_switch_mixer_controls =
10473 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10474 0, 1, 0, msm_routing_get_switch_mixer,
10475 msm_routing_put_switch_mixer);
10476
10477static const struct snd_kcontrol_new slim3_fm_switch_mixer_controls =
10478 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10479 0, 1, 0, msm_routing_get_switch_mixer,
10480 msm_routing_put_switch_mixer);
10481
10482static const struct snd_kcontrol_new slim4_fm_switch_mixer_controls =
10483 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10484 0, 1, 0, msm_routing_get_switch_mixer,
10485 msm_routing_put_switch_mixer);
10486
10487static const struct snd_kcontrol_new slim6_fm_switch_mixer_controls =
10488 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10489 0, 1, 0, msm_routing_get_switch_mixer,
10490 msm_routing_put_switch_mixer);
10491
10492static const struct snd_kcontrol_new pcm_rx_switch_mixer_controls =
10493 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10494 0, 1, 0, msm_routing_get_fm_pcmrx_switch_mixer,
10495 msm_routing_put_fm_pcmrx_switch_mixer);
10496
10497static const struct snd_kcontrol_new int0_mi2s_rx_switch_mixer_controls =
10498 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10499 0, 1, 0, msm_routing_get_int0_mi2s_switch_mixer,
10500 msm_routing_put_int0_mi2s_switch_mixer);
10501
10502static const struct snd_kcontrol_new int4_mi2s_rx_switch_mixer_controls =
10503 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10504 0, 1, 0, msm_routing_get_int4_mi2s_switch_mixer,
10505 msm_routing_put_int4_mi2s_switch_mixer);
10506
10507static const struct snd_kcontrol_new pri_mi2s_rx_switch_mixer_controls =
10508 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10509 0, 1, 0, msm_routing_get_pri_mi2s_switch_mixer,
10510 msm_routing_put_pri_mi2s_switch_mixer);
10511
10512static const struct snd_kcontrol_new sec_mi2s_rx_switch_mixer_controls =
10513 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10514 0, 1, 0, msm_routing_get_sec_mi2s_switch_mixer,
10515 msm_routing_put_sec_mi2s_switch_mixer);
10516
10517static const struct snd_kcontrol_new tert_mi2s_rx_switch_mixer_controls =
10518 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10519 0, 1, 0, msm_routing_get_tert_mi2s_switch_mixer,
10520 msm_routing_put_tert_mi2s_switch_mixer);
10521
10522static const struct snd_kcontrol_new quat_mi2s_rx_switch_mixer_controls =
10523 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10524 0, 1, 0, msm_routing_get_quat_mi2s_switch_mixer,
10525 msm_routing_put_quat_mi2s_switch_mixer);
10526
10527static const struct snd_kcontrol_new hfp_pri_aux_switch_mixer_controls =
10528 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10529 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10530 msm_routing_put_hfp_switch_mixer);
10531
10532static const struct snd_kcontrol_new hfp_aux_switch_mixer_controls =
10533 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10534 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10535 msm_routing_put_hfp_switch_mixer);
10536
10537static const struct snd_kcontrol_new hfp_int_switch_mixer_controls =
10538 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10539 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10540 msm_routing_put_hfp_switch_mixer);
10541
10542static const struct snd_kcontrol_new hfp_slim7_switch_mixer_controls =
10543 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10544 0, 1, 0, msm_routing_get_hfp_switch_mixer,
10545 msm_routing_put_hfp_switch_mixer);
10546
10547static const struct snd_kcontrol_new usb_switch_mixer_controls =
10548 SOC_SINGLE_EXT("Switch", SND_SOC_NOPM,
10549 0, 1, 0, msm_routing_get_usb_switch_mixer,
10550 msm_routing_put_usb_switch_mixer);
10551
10552static const struct soc_enum lsm_port_enum =
10553 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_port_text), lsm_port_text);
10554
10555static const char * const lsm_func_text[] = {
10556 "None", "AUDIO", "BEACON", "ULTRASOUND", "SWAUDIO",
10557};
10558static const struct soc_enum lsm_func_enum =
10559 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_func_text), lsm_func_text);
10560
10561static const struct snd_kcontrol_new lsm_controls[] = {
10562 /* kcontrol of lsm_function */
10563 SOC_ENUM_EXT(SLIMBUS_0_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10564 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10565 SOC_ENUM_EXT(SLIMBUS_1_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10566 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10567 SOC_ENUM_EXT(SLIMBUS_2_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10568 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10569 SOC_ENUM_EXT(SLIMBUS_3_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10570 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10571 SOC_ENUM_EXT(SLIMBUS_4_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10572 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10573 SOC_ENUM_EXT(SLIMBUS_5_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10574 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10575 SOC_ENUM_EXT(TERT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10576 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10577 SOC_ENUM_EXT(QUAT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10578 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10579 SOC_ENUM_EXT(INT3_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
10580 msm_routing_lsm_func_get, msm_routing_lsm_func_put),
10581 /* kcontrol of lsm_port */
10582 SOC_ENUM_EXT("LSM1 Port", lsm_port_enum,
10583 msm_routing_lsm_port_get,
10584 msm_routing_lsm_port_put),
10585 SOC_ENUM_EXT("LSM2 Port", lsm_port_enum,
10586 msm_routing_lsm_port_get,
10587 msm_routing_lsm_port_put),
10588 SOC_ENUM_EXT("LSM3 Port", lsm_port_enum,
10589 msm_routing_lsm_port_get,
10590 msm_routing_lsm_port_put),
10591 SOC_ENUM_EXT("LSM4 Port", lsm_port_enum,
10592 msm_routing_lsm_port_get,
10593 msm_routing_lsm_port_put),
10594 SOC_ENUM_EXT("LSM5 Port", lsm_port_enum,
10595 msm_routing_lsm_port_get,
10596 msm_routing_lsm_port_put),
10597 SOC_ENUM_EXT("LSM6 Port", lsm_port_enum,
10598 msm_routing_lsm_port_get,
10599 msm_routing_lsm_port_put),
10600 SOC_ENUM_EXT("LSM7 Port", lsm_port_enum,
10601 msm_routing_lsm_port_get,
10602 msm_routing_lsm_port_put),
10603 SOC_ENUM_EXT("LSM8 Port", lsm_port_enum,
10604 msm_routing_lsm_port_get,
10605 msm_routing_lsm_port_put),
10606};
10607
10608static const char * const aanc_slim_0_rx_text[] = {
10609 "ZERO", "SLIMBUS_0_TX", "SLIMBUS_1_TX", "SLIMBUS_2_TX", "SLIMBUS_3_TX",
10610 "SLIMBUS_4_TX", "SLIMBUS_5_TX", "SLIMBUS_6_TX"
10611};
10612
10613static const struct soc_enum aanc_slim_0_rx_enum =
10614 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(aanc_slim_0_rx_text),
10615 aanc_slim_0_rx_text);
10616
10617static const struct snd_kcontrol_new aanc_slim_0_rx_mux[] = {
10618 SOC_ENUM_EXT("AANC_SLIM_0_RX MUX", aanc_slim_0_rx_enum,
10619 msm_routing_slim_0_rx_aanc_mux_get,
10620 msm_routing_slim_0_rx_aanc_mux_put)
10621};
10622
10623static int msm_routing_get_stereo_to_custom_stereo_control(
10624 struct snd_kcontrol *kcontrol,
10625 struct snd_ctl_elem_value *ucontrol)
10626{
10627 ucontrol->value.integer.value[0] = is_custom_stereo_on;
10628 return 0;
10629}
10630
10631static int msm_routing_put_stereo_to_custom_stereo_control(
10632 struct snd_kcontrol *kcontrol,
10633 struct snd_ctl_elem_value *ucontrol)
10634{
10635 int flag = 0, i = 0, rc = 0, idx = 0;
10636 int be_index = 0, port_id, topo_id;
10637 unsigned int session_id = 0;
10638 uint16_t op_FL_ip_FL_weight = 0;
10639 uint16_t op_FL_ip_FR_weight = 0;
10640 uint16_t op_FR_ip_FL_weight = 0;
10641 uint16_t op_FR_ip_FR_weight = 0;
10642
10643 flag = ucontrol->value.integer.value[0];
10644 pr_debug("%s E flag %d\n", __func__, flag);
10645
10646 if ((is_custom_stereo_on && flag) || (!is_custom_stereo_on && !flag)) {
10647 pr_err("%s: is_custom_stereo_on %d, flag %d\n",
10648 __func__, is_custom_stereo_on, flag);
10649 return 0;
10650 }
10651 is_custom_stereo_on = flag ? true : false;
10652 pr_debug("%s:is_custom_stereo_on %d\n", __func__, is_custom_stereo_on);
10653 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
10654 port_id = msm_bedais[be_index].port_id;
10655 if (!msm_bedais[be_index].active)
10656 continue;
10657 if ((port_id != SLIMBUS_0_RX) &&
10658 (port_id != RT_PROXY_PORT_001_RX) &&
10659 (port_id != AFE_PORT_ID_PRIMARY_MI2S_RX) &&
10660 (port_id != AFE_PORT_ID_INT4_MI2S_RX))
10661 continue;
10662
10663 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
10664 MSM_FRONTEND_DAI_MM_SIZE) {
10665 if (fe_dai_map[i][SESSION_TYPE_RX].perf_mode !=
10666 LEGACY_PCM_MODE)
10667 goto skip_send_custom_stereo;
10668 session_id =
10669 fe_dai_map[i][SESSION_TYPE_RX].strm_id;
10670 if (is_custom_stereo_on) {
10671 op_FL_ip_FL_weight =
10672 Q14_GAIN_ZERO_POINT_FIVE;
10673 op_FL_ip_FR_weight =
10674 Q14_GAIN_ZERO_POINT_FIVE;
10675 op_FR_ip_FL_weight =
10676 Q14_GAIN_ZERO_POINT_FIVE;
10677 op_FR_ip_FR_weight =
10678 Q14_GAIN_ZERO_POINT_FIVE;
10679 } else {
10680 op_FL_ip_FL_weight = Q14_GAIN_UNITY;
10681 op_FL_ip_FR_weight = 0;
10682 op_FR_ip_FL_weight = 0;
10683 op_FR_ip_FR_weight = Q14_GAIN_UNITY;
10684 }
10685 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
10686 unsigned long copp =
10687 session_copp_map[i]
10688 [SESSION_TYPE_RX][be_index];
10689 if (!test_bit(idx, &copp))
10690 goto skip_send_custom_stereo;
10691 topo_id = adm_get_topology_for_port_copp_idx(
10692 msm_bedais[be_index].port_id, idx);
10693 if (topo_id < 0)
10694 pr_debug("%s:Err:custom stereo topo %d",
10695 __func__, topo_id);
10696 pr_debug("idx %d\n", idx);
10697 if (topo_id == DS2_ADM_COPP_TOPOLOGY_ID)
10698 rc = msm_ds2_dap_set_custom_stereo_onoff
10699 (msm_bedais[be_index].port_id,
10700 idx, is_custom_stereo_on);
10701 else if (topo_id == DOLBY_ADM_COPP_TOPOLOGY_ID)
10702 rc = dolby_dap_set_custom_stereo_onoff(
10703 msm_bedais[be_index].port_id,
10704 idx, is_custom_stereo_on);
10705 else
10706 rc = msm_qti_pp_send_stereo_to_custom_stereo_cmd
10707 (msm_bedais[be_index].port_id,
10708 idx, session_id,
10709 op_FL_ip_FL_weight,
10710 op_FL_ip_FR_weight,
10711 op_FR_ip_FL_weight,
10712 op_FR_ip_FR_weight);
10713 if (rc < 0)
10714skip_send_custom_stereo:
10715 pr_err("%s: err setting custom stereo\n",
10716 __func__);
10717 }
10718
10719 }
10720 }
10721 return 0;
10722}
10723
10724static const struct snd_kcontrol_new stereo_to_custom_stereo_controls[] = {
10725 SOC_SINGLE_EXT("Set Custom Stereo OnOff", SND_SOC_NOPM, 0,
10726 1, 0, msm_routing_get_stereo_to_custom_stereo_control,
10727 msm_routing_put_stereo_to_custom_stereo_control),
10728};
10729
10730static int msm_routing_get_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10731 struct snd_ctl_elem_value *ucontrol)
10732{
10733 return 0;
10734}
10735
10736static int msm_routing_put_app_type_cfg_control(struct snd_kcontrol *kcontrol,
10737 struct snd_ctl_elem_value *ucontrol)
10738{
10739 int i = 0, j;
10740 int num_app_types = ucontrol->value.integer.value[i++];
10741
10742 pr_debug("%s\n", __func__);
10743
10744 memset(app_type_cfg, 0, MAX_APP_TYPES*
10745 sizeof(struct msm_pcm_routing_app_type_data));
10746 if (num_app_types > MAX_APP_TYPES) {
10747 pr_err("%s: number of app types exceed the max supported\n",
10748 __func__);
10749 return -EINVAL;
10750 }
10751 for (j = 0; j < num_app_types; j++) {
10752 app_type_cfg[j].app_type =
10753 ucontrol->value.integer.value[i++];
10754 app_type_cfg[j].sample_rate =
10755 ucontrol->value.integer.value[i++];
10756 app_type_cfg[j].bit_width =
10757 ucontrol->value.integer.value[i++];
10758 }
10759
10760 return 0;
10761}
10762
10763static int msm_routing_put_app_type_gain_control(struct snd_kcontrol *kcontrol,
10764 struct snd_ctl_elem_value *ucontrol)
10765{
10766 int j, fe_id, be_id, port_type;
10767 int ret = 0;
10768 unsigned long copp;
10769 struct msm_pcm_routing_bdai_data *bedai;
10770 int dir = ucontrol->value.integer.value[0] ? SESSION_TYPE_TX :
10771 SESSION_TYPE_RX;
10772 int app_type = ucontrol->value.integer.value[1];
10773 int gain = (ucontrol->value.integer.value[2] +
10774 ucontrol->value.integer.value[3])/2;
10775
10776 port_type = (dir == SESSION_TYPE_RX) ? MSM_AFE_PORT_TYPE_RX :
10777 MSM_AFE_PORT_TYPE_TX;
10778
10779 mutex_lock(&routing_lock);
10780 for (be_id = 0; be_id < MSM_BACKEND_DAI_MAX; be_id++) {
10781 if (is_be_dai_extproc(be_id))
10782 continue;
10783
10784 bedai = &msm_bedais[be_id];
10785 if (afe_get_port_type(bedai->port_id) != port_type)
10786 continue;
10787
10788 if (!bedai->active)
10789 continue;
10790
10791 for (fe_id = 0; fe_id < MSM_FRONTEND_DAI_MAX; fe_id++) {
10792 if (!test_bit(fe_id, &bedai->fe_sessions[0]))
10793 continue;
10794
10795 if (app_type !=
10796 fe_dai_app_type_cfg[fe_id][dir][be_id].app_type)
10797 continue;
10798
10799 copp = session_copp_map[fe_id][dir][be_id];
10800 for (j = 0; j < MAX_COPPS_PER_PORT; j++) {
10801 if (!test_bit(j, &copp))
10802 continue;
10803 ret |= adm_set_volume(bedai->port_id, j, gain);
10804 }
10805 }
10806 }
10807 mutex_unlock(&routing_lock);
10808 return ret ? -EINVAL : 0;
10809}
10810
10811static const struct snd_kcontrol_new app_type_cfg_controls[] = {
10812 SOC_SINGLE_MULTI_EXT("App Type Config", SND_SOC_NOPM, 0,
10813 0xFFFFFFFF, 0, 128, msm_routing_get_app_type_cfg_control,
10814 msm_routing_put_app_type_cfg_control),
10815 SOC_SINGLE_MULTI_EXT("App Type Gain", SND_SOC_NOPM, 0,
10816 0x2000, 0, 4, NULL, msm_routing_put_app_type_gain_control)
10817};
10818
Vikram Pandurangaee9c03a2017-09-07 15:06:17 -070010819static int msm_routing_put_module_cfg_control(struct snd_kcontrol *kcontrol,
10820 struct snd_ctl_elem_value *ucontrol)
10821{
10822 int copp_idx, fe_id, be_id, port_type;
10823 int ret = 0;
10824 unsigned long copp;
10825 struct msm_pcm_routing_bdai_data *bedai;
10826 char *param_data = NULL;
10827 uint32_t *update_param_data = NULL;
10828 uint32_t param_size = sizeof(uint32_t) +
10829 sizeof(struct adm_param_data_v5);
10830 int dir = ucontrol->value.integer.value[0] ? SESSION_TYPE_TX :
10831 SESSION_TYPE_RX;
10832 int app_type = ucontrol->value.integer.value[1];
10833 int module_id = ucontrol->value.integer.value[2];
10834 int instance_id = ucontrol->value.integer.value[3];
10835 int param_id = ucontrol->value.integer.value[4];
10836 int param_value = ucontrol->value.integer.value[5];
10837
10838 port_type = (dir == SESSION_TYPE_RX) ? MSM_AFE_PORT_TYPE_RX :
10839 MSM_AFE_PORT_TYPE_TX;
10840 pr_debug("%s app_type:%d mod_id:%d instance_id:%d param_id:%d value:%d\n",
10841 __func__, app_type, module_id,
10842 instance_id, param_id, param_value);
10843
10844 param_data = kzalloc(param_size, GFP_KERNEL);
10845 if (!param_data)
10846 return -ENOMEM;
10847
10848 update_param_data = (uint32_t *)param_data;
10849 *update_param_data++ = module_id;
10850 *update_param_data++ = param_id;
10851 *update_param_data++ = sizeof(uint32_t);
10852 *update_param_data++ = param_value;
10853
10854 mutex_lock(&routing_lock);
10855 for (be_id = 0; be_id < MSM_BACKEND_DAI_MAX; be_id++) {
10856 if (is_be_dai_extproc(be_id))
10857 continue;
10858
10859 bedai = &msm_bedais[be_id];
10860 if (afe_get_port_type(bedai->port_id) != port_type)
10861 continue;
10862
10863 if (!bedai->active)
10864 continue;
10865
10866 for (fe_id = 0; fe_id < MSM_FRONTEND_DAI_MAX; fe_id++) {
10867 if (!test_bit(fe_id, &bedai->fe_sessions[0]))
10868 continue;
10869
10870 if (app_type !=
10871 fe_dai_app_type_cfg[fe_id][dir][be_id].app_type)
10872 continue;
10873
10874 copp = session_copp_map[fe_id][dir][be_id];
10875 for (copp_idx = 0; copp_idx < MAX_COPPS_PER_PORT;
10876 copp_idx++) {
10877 if (!test_bit(copp_idx, &copp))
10878 continue;
10879
10880 ret = adm_send_params_v5(bedai->port_id,
10881 copp_idx,
10882 param_data,
10883 param_size);
10884 if (ret) {
10885 pr_err("%s: Setting param failed with err=%d\n",
10886 __func__, ret);
10887 ret = -EINVAL;
10888 goto done;
10889 }
10890 }
10891 }
10892 }
10893done:
10894 mutex_unlock(&routing_lock);
10895 kfree(param_data);
10896 return ret;
10897}
10898
10899static const struct snd_kcontrol_new module_cfg_controls[] = {
10900 SOC_SINGLE_MULTI_EXT("Audio Effect", SND_SOC_NOPM, 0,
10901 0x2000, 0, 6, NULL, msm_routing_put_module_cfg_control)
10902};
10903
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053010904static int msm_routing_get_lsm_app_type_cfg_control(
10905 struct snd_kcontrol *kcontrol,
10906 struct snd_ctl_elem_value *ucontrol)
10907{
10908 return 0;
10909}
10910
10911static int msm_routing_put_lsm_app_type_cfg_control(
10912 struct snd_kcontrol *kcontrol,
10913 struct snd_ctl_elem_value *ucontrol)
10914{
10915 int i = 0, j;
10916 int num_app_types = ucontrol->value.integer.value[i++];
10917
10918 memset(lsm_app_type_cfg, 0, MAX_APP_TYPES*
10919 sizeof(struct msm_pcm_routing_app_type_data));
10920 if (num_app_types > MAX_APP_TYPES) {
10921 pr_err("%s: number of app types exceed the max supported\n",
10922 __func__);
10923 return -EINVAL;
10924 }
10925 for (j = 0; j < num_app_types; j++) {
10926 lsm_app_type_cfg[j].app_type =
10927 ucontrol->value.integer.value[i++];
10928 lsm_app_type_cfg[j].sample_rate =
10929 ucontrol->value.integer.value[i++];
10930 lsm_app_type_cfg[j].bit_width =
10931 ucontrol->value.integer.value[i++];
10932 }
10933
10934 return 0;
10935}
10936
10937static const struct snd_kcontrol_new lsm_app_type_cfg_controls[] = {
10938 SOC_SINGLE_MULTI_EXT("Listen App Type Config", SND_SOC_NOPM, 0,
10939 0xFFFFFFFF, 0, 128, msm_routing_get_lsm_app_type_cfg_control,
10940 msm_routing_put_lsm_app_type_cfg_control),
10941};
10942
10943static int msm_routing_get_use_ds1_or_ds2_control(
10944 struct snd_kcontrol *kcontrol,
10945 struct snd_ctl_elem_value *ucontrol)
10946{
10947 ucontrol->value.integer.value[0] = is_ds2_on;
10948 return 0;
10949}
10950
10951static int msm_routing_put_use_ds1_or_ds2_control(
10952 struct snd_kcontrol *kcontrol,
10953 struct snd_ctl_elem_value *ucontrol)
10954{
10955 is_ds2_on = ucontrol->value.integer.value[0];
10956 return 0;
10957}
10958
10959static const struct snd_kcontrol_new use_ds1_or_ds2_controls[] = {
10960 SOC_SINGLE_EXT("DS2 OnOff", SND_SOC_NOPM, 0,
10961 1, 0, msm_routing_get_use_ds1_or_ds2_control,
10962 msm_routing_put_use_ds1_or_ds2_control),
10963};
10964
10965int msm_routing_get_rms_value_control(struct snd_kcontrol *kcontrol,
10966 struct snd_ctl_elem_value *ucontrol) {
10967 int rc = 0;
10968 int be_idx = 0;
10969 char *param_value;
10970 int *update_param_value;
10971 uint32_t param_length = sizeof(uint32_t);
10972 uint32_t param_payload_len = RMS_PAYLOAD_LEN * sizeof(uint32_t);
10973
10974 param_value = kzalloc(param_length + param_payload_len, GFP_KERNEL);
10975 if (!param_value)
10976 return -ENOMEM;
10977
10978 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++)
10979 if (msm_bedais[be_idx].port_id == SLIMBUS_0_TX)
10980 break;
10981 if ((be_idx < MSM_BACKEND_DAI_MAX) && msm_bedais[be_idx].active) {
10982 rc = adm_get_params(SLIMBUS_0_TX, 0,
10983 RMS_MODULEID_APPI_PASSTHRU,
10984 RMS_PARAM_FIRST_SAMPLE,
10985 param_length + param_payload_len,
10986 param_value);
10987 if (rc) {
10988 pr_err("%s: get parameters failed:%d\n", __func__, rc);
10989 kfree(param_value);
10990 return -EINVAL;
10991 }
10992 update_param_value = (int *)param_value;
10993 ucontrol->value.integer.value[0] = update_param_value[0];
10994
10995 pr_debug("%s: FROM DSP value[0] 0x%x\n",
10996 __func__, update_param_value[0]);
10997 }
10998 kfree(param_value);
10999 return 0;
11000}
11001
11002static int msm_voc_session_id_put(struct snd_kcontrol *kcontrol,
11003 struct snd_ctl_elem_value *ucontrol)
11004{
11005 voc_session_id = ucontrol->value.integer.value[0];
11006
11007 pr_debug("%s: voc_session_id=%u\n", __func__, voc_session_id);
11008
11009 return 0;
11010}
11011
11012static int msm_voc_session_id_get(struct snd_kcontrol *kcontrol,
11013 struct snd_ctl_elem_value *ucontrol)
11014{
11015 ucontrol->value.integer.value[0] = voc_session_id;
11016
11017 return 0;
11018}
11019
11020static struct snd_kcontrol_new msm_voc_session_controls[] = {
11021 SOC_SINGLE_MULTI_EXT("Voc VSID", SND_SOC_NOPM, 0,
11022 0xFFFFFFFF, 0, 1, msm_voc_session_id_get,
11023 msm_voc_session_id_put),
11024};
11025
11026static int msm_sound_focus_info(struct snd_kcontrol *kcontrol,
11027 struct snd_ctl_elem_info *uinfo)
11028{
11029 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
11030 uinfo->count = sizeof(struct sound_focus_param);
11031
11032 return 0;
11033}
11034
11035static int msm_voice_sound_focus_put(struct snd_kcontrol *kcontrol,
11036 struct snd_ctl_elem_value *ucontrol)
11037{
11038 int ret = 0;
11039 struct sound_focus_param soundFocusData;
11040
11041 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
11042 sizeof(struct sound_focus_param));
11043 ret = voc_set_sound_focus(soundFocusData);
11044 if (ret) {
11045 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
11046 __func__, ret);
11047
11048 ret = -EINVAL;
11049 }
11050
11051 return ret;
11052}
11053
11054static int msm_voice_sound_focus_get(struct snd_kcontrol *kcontrol,
11055 struct snd_ctl_elem_value *ucontrol)
11056{
11057 int ret = 0;
11058 struct sound_focus_param soundFocusData;
11059
11060 memset(&soundFocusData, 0, sizeof(struct sound_focus_param));
11061
11062 ret = voc_get_sound_focus(&soundFocusData);
11063 if (ret) {
11064 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
11065 __func__, ret);
11066
11067 ret = -EINVAL;
11068 goto done;
11069 }
11070 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
11071 sizeof(struct sound_focus_param));
11072
11073done:
11074 return ret;
11075}
11076
11077static int msm_source_tracking_info(struct snd_kcontrol *kcontrol,
11078 struct snd_ctl_elem_info *uinfo)
11079{
11080 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
11081 uinfo->count = sizeof(struct source_tracking_param);
11082
11083 return 0;
11084}
11085
11086static int msm_voice_source_tracking_get(struct snd_kcontrol *kcontrol,
11087 struct snd_ctl_elem_value *ucontrol)
11088{
11089 int ret = 0;
11090 struct source_tracking_param sourceTrackingData;
11091
11092 memset(&sourceTrackingData, 0, sizeof(struct source_tracking_param));
11093
11094 ret = voc_get_source_tracking(&sourceTrackingData);
11095 if (ret) {
11096 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
11097 __func__, ret);
11098
11099 ret = -EINVAL;
11100 goto done;
11101 }
11102 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
11103 sizeof(struct source_tracking_param));
11104
11105done:
11106 return ret;
11107}
11108
11109static int msm_audio_get_copp_idx_from_port_id(int port_id, int session_type,
11110 int *copp_idx)
11111{
11112 int i, idx, be_idx;
11113 int ret = 0;
11114 unsigned long copp;
11115
11116 pr_debug("%s: Enter, port_id=%d\n", __func__, port_id);
11117
11118 ret = q6audio_validate_port(port_id);
11119 if (ret < 0) {
11120 pr_err("%s: port validation failed id 0x%x ret %d\n",
11121 __func__, port_id, ret);
11122
11123 ret = -EINVAL;
11124 goto done;
11125 }
11126
11127 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
11128 if (msm_bedais[be_idx].port_id == port_id)
11129 break;
11130 }
11131 if (be_idx >= MSM_BACKEND_DAI_MAX) {
11132 pr_err("%s: Invalid be id %d\n", __func__, be_idx);
11133
11134 ret = -EINVAL;
11135 goto done;
11136 }
11137
11138 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
11139 MSM_FRONTEND_DAI_MM_SIZE) {
11140 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
11141 copp = session_copp_map[i]
11142 [session_type][be_idx];
11143 if (test_bit(idx, &copp))
11144 break;
11145 }
11146 if (idx >= MAX_COPPS_PER_PORT)
11147 continue;
11148 else
11149 break;
11150 }
11151 if (i >= MSM_FRONTEND_DAI_MM_SIZE) {
11152 pr_err("%s: Invalid FE, exiting\n", __func__);
11153
11154 ret = -EINVAL;
11155 goto done;
11156 }
11157 *copp_idx = idx;
11158 pr_debug("%s: copp_idx=%d\n", __func__, *copp_idx);
11159
11160done:
11161 return ret;
11162}
11163
11164static int msm_audio_sound_focus_derive_port_id(struct snd_kcontrol *kcontrol,
11165 const char *prefix, int *port_id)
11166{
11167 int ret = 0;
11168
11169 pr_debug("%s: Enter, prefix:%s\n", __func__, prefix);
11170
11171 /*
11172 * Mixer control name will be like "Sound Focus Audio Tx SLIMBUS_0"
11173 * where the prefix is "Sound Focus Audio Tx ". Skip the prefix
11174 * and compare the string with the backend name to derive the port id.
11175 */
11176 if (!strcmp(kcontrol->id.name + strlen(prefix),
11177 "SLIMBUS_0")) {
11178 *port_id = SLIMBUS_0_TX;
11179 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
11180 "TERT_MI2S")) {
11181 *port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
11182 } else if (!strcmp(kcontrol->id.name + strlen(prefix),
11183 "INT3_MI2S")) {
11184 *port_id = AFE_PORT_ID_INT3_MI2S_TX;
11185 } else {
11186 pr_err("%s: mixer ctl name=%s, could not derive valid port id\n",
11187 __func__, kcontrol->id.name);
11188
11189 ret = -EINVAL;
11190 goto done;
11191 }
11192 pr_debug("%s: mixer ctl name=%s, derived port_id=%d\n",
11193 __func__, kcontrol->id.name, *port_id);
11194
11195done:
11196 return ret;
11197}
11198
11199static int msm_audio_sound_focus_put(struct snd_kcontrol *kcontrol,
11200 struct snd_ctl_elem_value *ucontrol)
11201{
11202 int ret = 0;
11203 struct sound_focus_param soundFocusData;
11204 int port_id, copp_idx;
11205
11206 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11207 "Sound Focus Audio Tx ", &port_id);
11208 if (ret != 0) {
11209 pr_err("%s: Error in deriving port id, err=%d\n",
11210 __func__, ret);
11211
11212 ret = -EINVAL;
11213 goto done;
11214 }
11215
11216 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11217 &copp_idx);
11218 if (ret) {
11219 pr_err("%s: Could not get copp idx for port_id=%d\n",
11220 __func__, port_id);
11221
11222 ret = -EINVAL;
11223 goto done;
11224 }
11225
11226 memcpy((void *)&soundFocusData, ucontrol->value.bytes.data,
11227 sizeof(struct sound_focus_param));
11228
11229 ret = adm_set_sound_focus(port_id, copp_idx, soundFocusData);
11230 if (ret) {
11231 pr_err("%s: Error setting Sound Focus Params, err=%d\n",
11232 __func__, ret);
11233
11234 ret = -EINVAL;
11235 goto done;
11236 }
11237
11238done:
11239 return ret;
11240}
11241
11242static int msm_audio_sound_focus_get(struct snd_kcontrol *kcontrol,
11243 struct snd_ctl_elem_value *ucontrol)
11244{
11245 int ret = 0;
11246 struct sound_focus_param soundFocusData;
11247 int port_id, copp_idx;
11248
11249 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11250 "Sound Focus Audio Tx ", &port_id);
11251 if (ret) {
11252 pr_err("%s: Error in deriving port id, err=%d\n",
11253 __func__, ret);
11254
11255 ret = -EINVAL;
11256 goto done;
11257 }
11258
11259 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11260 &copp_idx);
11261 if (ret) {
11262 pr_err("%s: Could not get copp idx for port_id=%d\n",
11263 __func__, port_id);
11264
11265 ret = -EINVAL;
11266 goto done;
11267 }
11268
11269 ret = adm_get_sound_focus(port_id, copp_idx, &soundFocusData);
11270 if (ret) {
11271 pr_err("%s: Error getting Sound Focus Params, err=%d\n",
11272 __func__, ret);
11273
11274 ret = -EINVAL;
11275 goto done;
11276 }
11277
11278 memcpy(ucontrol->value.bytes.data, (void *)&soundFocusData,
11279 sizeof(struct sound_focus_param));
11280
11281done:
11282 return ret;
11283}
11284
11285static int msm_audio_source_tracking_get(struct snd_kcontrol *kcontrol,
11286 struct snd_ctl_elem_value *ucontrol)
11287{
11288 int ret = 0;
11289 struct source_tracking_param sourceTrackingData;
11290 int port_id, copp_idx;
11291
11292 ret = msm_audio_sound_focus_derive_port_id(kcontrol,
11293 "Source Tracking Audio Tx ", &port_id);
11294 if (ret) {
11295 pr_err("%s: Error in deriving port id, err=%d\n",
11296 __func__, ret);
11297
11298 ret = -EINVAL;
11299 goto done;
11300 }
11301
11302 ret = msm_audio_get_copp_idx_from_port_id(port_id, SESSION_TYPE_TX,
11303 &copp_idx);
11304 if (ret) {
11305 pr_err("%s: Could not get copp idx for port_id=%d\n",
11306 __func__, port_id);
11307
11308 ret = -EINVAL;
11309 goto done;
11310 }
11311
11312 ret = adm_get_source_tracking(port_id, copp_idx, &sourceTrackingData);
11313 if (ret) {
11314 pr_err("%s: Error getting Source Tracking Params, err=%d\n",
11315 __func__, ret);
11316
11317 ret = -EINVAL;
11318 goto done;
11319 }
11320
11321 memcpy(ucontrol->value.bytes.data, (void *)&sourceTrackingData,
11322 sizeof(struct source_tracking_param));
11323
11324done:
11325 return ret;
11326}
11327
11328static const struct snd_kcontrol_new msm_source_tracking_controls[] = {
11329 {
11330 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11331 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11332 .name = "Sound Focus Voice Tx SLIMBUS_0",
11333 .info = msm_sound_focus_info,
11334 .get = msm_voice_sound_focus_get,
11335 .put = msm_voice_sound_focus_put,
11336 },
11337 {
11338 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11339 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11340 .name = "Source Tracking Voice Tx SLIMBUS_0",
11341 .info = msm_source_tracking_info,
11342 .get = msm_voice_source_tracking_get,
11343 },
11344 {
11345 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11346 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11347 .name = "Sound Focus Audio Tx SLIMBUS_0",
11348 .info = msm_sound_focus_info,
11349 .get = msm_audio_sound_focus_get,
11350 .put = msm_audio_sound_focus_put,
11351 },
11352 {
11353 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11354 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11355 .name = "Source Tracking Audio Tx SLIMBUS_0",
11356 .info = msm_source_tracking_info,
11357 .get = msm_audio_source_tracking_get,
11358 },
11359 {
11360 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11361 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11362 .name = "Sound Focus Voice Tx TERT_MI2S",
11363 .info = msm_sound_focus_info,
11364 .get = msm_voice_sound_focus_get,
11365 .put = msm_voice_sound_focus_put,
11366 },
11367 {
11368 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11369 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11370 .name = "Source Tracking Voice Tx TERT_MI2S",
11371 .info = msm_source_tracking_info,
11372 .get = msm_voice_source_tracking_get,
11373 },
11374 {
11375 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11376 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11377 .name = "Sound Focus Audio Tx TERT_MI2S",
11378 .info = msm_sound_focus_info,
11379 .get = msm_audio_sound_focus_get,
11380 .put = msm_audio_sound_focus_put,
11381 },
11382 {
11383 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11384 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11385 .name = "Source Tracking Audio Tx TERT_MI2S",
11386 .info = msm_source_tracking_info,
11387 .get = msm_audio_source_tracking_get,
11388 },
11389 {
11390 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11391 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11392 .name = "Sound Focus Voice Tx INT3_MI2S",
11393 .info = msm_sound_focus_info,
11394 .get = msm_voice_sound_focus_get,
11395 .put = msm_voice_sound_focus_put,
11396 },
11397 {
11398 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11399 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11400 .name = "Source Tracking Voice Tx INT3_MI2S",
11401 .info = msm_source_tracking_info,
11402 .get = msm_voice_source_tracking_get,
11403 },
11404 {
11405 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
11406 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11407 .name = "Sound Focus Audio Tx INT3_MI2S",
11408 .info = msm_sound_focus_info,
11409 .get = msm_audio_sound_focus_get,
11410 .put = msm_audio_sound_focus_put,
11411 },
11412 {
11413 .access = SNDRV_CTL_ELEM_ACCESS_READ,
11414 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11415 .name = "Source Tracking Audio Tx INT3_MI2S",
11416 .info = msm_source_tracking_info,
11417 .get = msm_audio_source_tracking_get,
11418 },
11419};
11420
11421static int spkr_prot_put_vi_lch_port(struct snd_kcontrol *kcontrol,
11422 struct snd_ctl_elem_value *ucontrol)
11423{
11424 int ret = 0;
11425 int item;
11426 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11427
11428 pr_debug("%s item is %d\n", __func__,
11429 ucontrol->value.enumerated.item[0]);
11430 mutex_lock(&routing_lock);
11431 item = ucontrol->value.enumerated.item[0];
11432 if (item < e->items) {
11433 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11434 __func__, e->shift_l, e->values[item]);
11435 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11436 e->values[item] < MSM_BACKEND_DAI_MAX)
11437 /* Enable feedback TX path */
11438 ret = afe_spk_prot_feed_back_cfg(
11439 msm_bedais[e->values[item]].port_id,
11440 msm_bedais[e->shift_l].port_id, 1, 0, 1);
11441 else {
11442 pr_debug("%s values are out of range item %d\n",
11443 __func__, e->values[item]);
11444 /* Disable feedback TX path */
11445 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11446 ret = afe_spk_prot_feed_back_cfg(0, 0, 0, 0, 0);
11447 else
11448 ret = -EINVAL;
11449 }
11450 } else {
11451 pr_err("%s item value is out of range item\n", __func__);
11452 ret = -EINVAL;
11453 }
11454 mutex_unlock(&routing_lock);
11455 return ret;
11456}
11457
11458static int spkr_prot_put_vi_rch_port(struct snd_kcontrol *kcontrol,
11459 struct snd_ctl_elem_value *ucontrol)
11460{
11461 int ret = 0;
11462 int item;
11463 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
11464
11465 pr_debug("%s item is %d\n", __func__,
11466 ucontrol->value.enumerated.item[0]);
11467 mutex_lock(&routing_lock);
11468 item = ucontrol->value.enumerated.item[0];
11469 if (item < e->items) {
11470 pr_debug("%s RX DAI ID %d TX DAI id %d\n",
11471 __func__, e->shift_l, e->values[item]);
11472 if (e->shift_l < MSM_BACKEND_DAI_MAX &&
11473 e->values[item] < MSM_BACKEND_DAI_MAX)
11474 /* Enable feedback TX path */
11475 ret = afe_spk_prot_feed_back_cfg(
11476 msm_bedais[e->values[item]].port_id,
11477 msm_bedais[e->shift_l].port_id,
11478 1, 1, 1);
11479 else {
11480 pr_debug("%s values are out of range item %d\n",
11481 __func__, e->values[item]);
11482 /* Disable feedback TX path */
11483 if (e->values[item] == MSM_BACKEND_DAI_MAX)
11484 ret = afe_spk_prot_feed_back_cfg(0,
11485 0, 0, 0, 0);
11486 else
11487 ret = -EINVAL;
11488 }
11489 } else {
11490 pr_err("%s item value is out of range item\n", __func__);
11491 ret = -EINVAL;
11492 }
11493 mutex_unlock(&routing_lock);
11494 return ret;
11495}
11496
11497static int spkr_prot_get_vi_lch_port(struct snd_kcontrol *kcontrol,
11498 struct snd_ctl_elem_value *ucontrol)
11499{
11500 pr_debug("%s\n", __func__);
11501 return 0;
11502}
11503
11504static int spkr_prot_get_vi_rch_port(struct snd_kcontrol *kcontrol,
11505 struct snd_ctl_elem_value *ucontrol)
11506{
11507 pr_debug("%s\n", __func__);
11508 ucontrol->value.enumerated.item[0] = 0;
11509 return 0;
11510}
11511
11512static const char * const slim0_rx_vi_fb_tx_lch_mux_text[] = {
11513 "ZERO", "SLIM4_TX"
11514};
11515
11516static const char * const slim0_rx_vi_fb_tx_rch_mux_text[] = {
11517 "ZERO", "SLIM4_TX"
11518};
11519
11520static const char * const mi2s_rx_vi_fb_tx_mux_text[] = {
11521 "ZERO", "SENARY_TX"
11522};
11523
11524static const char * const int4_mi2s_rx_vi_fb_tx_mono_mux_text[] = {
11525 "ZERO", "INT5_MI2S_TX"
11526};
11527
11528static const char * const int4_mi2s_rx_vi_fb_tx_stereo_mux_text[] = {
11529 "ZERO", "INT5_MI2S_TX"
11530};
11531
11532static const int const slim0_rx_vi_fb_tx_lch_value[] = {
11533 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11534};
11535
11536static const int const slim0_rx_vi_fb_tx_rch_value[] = {
11537 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX
11538};
11539
11540static const int const mi2s_rx_vi_fb_tx_value[] = {
11541 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SENARY_MI2S_TX
11542};
11543
11544static const int const int4_mi2s_rx_vi_fb_tx_mono_ch_value[] = {
11545 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11546};
11547
11548static const int const int4_mi2s_rx_vi_fb_tx_stereo_ch_value[] = {
11549 MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_INT5_MI2S_TX
11550};
11551
11552static const struct soc_enum slim0_rx_vi_fb_lch_mux_enum =
11553 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11554 ARRAY_SIZE(slim0_rx_vi_fb_tx_lch_mux_text),
11555 slim0_rx_vi_fb_tx_lch_mux_text, slim0_rx_vi_fb_tx_lch_value);
11556
11557static const struct soc_enum slim0_rx_vi_fb_rch_mux_enum =
11558 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0,
11559 ARRAY_SIZE(slim0_rx_vi_fb_tx_rch_mux_text),
11560 slim0_rx_vi_fb_tx_rch_mux_text, slim0_rx_vi_fb_tx_rch_value);
11561
11562static const struct soc_enum mi2s_rx_vi_fb_mux_enum =
11563 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0,
11564 ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text),
11565 mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value);
11566
11567static const struct soc_enum int4_mi2s_rx_vi_fb_mono_ch_mux_enum =
11568 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11569 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_mono_mux_text),
11570 int4_mi2s_rx_vi_fb_tx_mono_mux_text,
11571 int4_mi2s_rx_vi_fb_tx_mono_ch_value);
11572
11573static const struct soc_enum int4_mi2s_rx_vi_fb_stereo_ch_mux_enum =
11574 SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_INT4_MI2S_RX, 0, 0,
11575 ARRAY_SIZE(int4_mi2s_rx_vi_fb_tx_stereo_mux_text),
11576 int4_mi2s_rx_vi_fb_tx_stereo_mux_text,
11577 int4_mi2s_rx_vi_fb_tx_stereo_ch_value);
11578
11579static const struct snd_kcontrol_new slim0_rx_vi_fb_lch_mux =
11580 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_LCH_MUX",
11581 slim0_rx_vi_fb_lch_mux_enum, spkr_prot_get_vi_lch_port,
11582 spkr_prot_put_vi_lch_port);
11583
11584static const struct snd_kcontrol_new slim0_rx_vi_fb_rch_mux =
11585 SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_RCH_MUX",
11586 slim0_rx_vi_fb_rch_mux_enum, spkr_prot_get_vi_rch_port,
11587 spkr_prot_put_vi_rch_port);
11588
11589static const struct snd_kcontrol_new mi2s_rx_vi_fb_mux =
11590 SOC_DAPM_ENUM_EXT("PRI_MI2S_RX_VI_FB_MUX",
11591 mi2s_rx_vi_fb_mux_enum, spkr_prot_get_vi_lch_port,
11592 spkr_prot_put_vi_lch_port);
11593
11594static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_mono_ch_mux =
11595 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_MONO_CH_MUX",
11596 int4_mi2s_rx_vi_fb_mono_ch_mux_enum, spkr_prot_get_vi_lch_port,
11597 spkr_prot_put_vi_lch_port);
11598
11599static const struct snd_kcontrol_new int4_mi2s_rx_vi_fb_stereo_ch_mux =
11600 SOC_DAPM_ENUM_EXT("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX",
11601 int4_mi2s_rx_vi_fb_stereo_ch_mux_enum, spkr_prot_get_vi_rch_port,
11602 spkr_prot_put_vi_rch_port);
11603
11604static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
11605 /* Frontend AIF */
11606 /* Widget name equals to Front-End DAI name<Need confirmation>,
11607 * Stream name must contains substring of front-end dai name
11608 */
11609 SND_SOC_DAPM_AIF_IN("MM_DL1", "MultiMedia1 Playback", 0, 0, 0, 0),
11610 SND_SOC_DAPM_AIF_IN("MM_DL2", "MultiMedia2 Playback", 0, 0, 0, 0),
11611 SND_SOC_DAPM_AIF_IN("MM_DL3", "MultiMedia3 Playback", 0, 0, 0, 0),
11612 SND_SOC_DAPM_AIF_IN("MM_DL4", "MultiMedia4 Playback", 0, 0, 0, 0),
11613 SND_SOC_DAPM_AIF_IN("MM_DL5", "MultiMedia5 Playback", 0, 0, 0, 0),
11614 SND_SOC_DAPM_AIF_IN("MM_DL6", "MultiMedia6 Playback", 0, 0, 0, 0),
11615 SND_SOC_DAPM_AIF_IN("MM_DL7", "MultiMedia7 Playback", 0, 0, 0, 0),
11616 SND_SOC_DAPM_AIF_IN("MM_DL8", "MultiMedia8 Playback", 0, 0, 0, 0),
11617 SND_SOC_DAPM_AIF_IN("MM_DL9", "MultiMedia9 Playback", 0, 0, 0, 0),
11618 SND_SOC_DAPM_AIF_IN("MM_DL10", "MultiMedia10 Playback", 0, 0, 0, 0),
11619 SND_SOC_DAPM_AIF_IN("MM_DL11", "MultiMedia11 Playback", 0, 0, 0, 0),
11620 SND_SOC_DAPM_AIF_IN("MM_DL12", "MultiMedia12 Playback", 0, 0, 0, 0),
11621 SND_SOC_DAPM_AIF_IN("MM_DL13", "MultiMedia13 Playback", 0, 0, 0, 0),
11622 SND_SOC_DAPM_AIF_IN("MM_DL14", "MultiMedia14 Playback", 0, 0, 0, 0),
11623 SND_SOC_DAPM_AIF_IN("MM_DL15", "MultiMedia15 Playback", 0, 0, 0, 0),
11624 SND_SOC_DAPM_AIF_IN("MM_DL16", "MultiMedia16 Playback", 0, 0, 0, 0),
11625 SND_SOC_DAPM_AIF_IN("MM_DL20", "MultiMedia20 Playback", 0, 0, 0, 0),
11626 SND_SOC_DAPM_AIF_IN("VOIP_DL", "VoIP Playback", 0, 0, 0, 0),
11627 SND_SOC_DAPM_AIF_OUT("MM_UL1", "MultiMedia1 Capture", 0, 0, 0, 0),
11628 SND_SOC_DAPM_AIF_OUT("MM_UL2", "MultiMedia2 Capture", 0, 0, 0, 0),
11629 SND_SOC_DAPM_AIF_OUT("MM_UL3", "MultiMedia3 Capture", 0, 0, 0, 0),
11630 SND_SOC_DAPM_AIF_OUT("MM_UL4", "MultiMedia4 Capture", 0, 0, 0, 0),
11631 SND_SOC_DAPM_AIF_OUT("MM_UL5", "MultiMedia5 Capture", 0, 0, 0, 0),
11632 SND_SOC_DAPM_AIF_OUT("MM_UL6", "MultiMedia6 Capture", 0, 0, 0, 0),
11633 SND_SOC_DAPM_AIF_OUT("MM_UL8", "MultiMedia8 Capture", 0, 0, 0, 0),
11634 SND_SOC_DAPM_AIF_OUT("MM_UL9", "MultiMedia9 Capture", 0, 0, 0, 0),
Laxminath Kasam38070be2017-08-17 18:21:59 +053011635 SND_SOC_DAPM_AIF_OUT("MM_UL10", "MultiMedia10 Capture", 0, 0, 0, 0),
Asish Bhattacharya34504582017-08-08 12:55:01 +053011636 SND_SOC_DAPM_AIF_OUT("MM_UL16", "MultiMedia16 Capture", 0, 0, 0, 0),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053011637 SND_SOC_DAPM_AIF_OUT("MM_UL17", "MultiMedia17 Capture", 0, 0, 0, 0),
11638 SND_SOC_DAPM_AIF_OUT("MM_UL18", "MultiMedia18 Capture", 0, 0, 0, 0),
11639 SND_SOC_DAPM_AIF_OUT("MM_UL19", "MultiMedia19 Capture", 0, 0, 0, 0),
11640 SND_SOC_DAPM_AIF_OUT("MM_UL20", "MultiMedia20 Capture", 0, 0, 0, 0),
11641 SND_SOC_DAPM_AIF_IN("CS-VOICE_DL1", "CS-VOICE Playback", 0, 0, 0, 0),
11642 SND_SOC_DAPM_AIF_OUT("CS-VOICE_UL1", "CS-VOICE Capture", 0, 0, 0, 0),
11643 SND_SOC_DAPM_AIF_IN("VOICE2_DL", "Voice2 Playback", 0, 0, 0, 0),
11644 SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0),
11645 SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0),
11646 SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0),
11647 SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0),
11648 SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0),
11649 SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0),
11650 SND_SOC_DAPM_AIF_IN("VOICEMMODE1_DL",
11651 "VoiceMMode1 Playback", 0, 0, 0, 0),
11652 SND_SOC_DAPM_AIF_OUT("VOICEMMODE1_UL",
11653 "VoiceMMode1 Capture", 0, 0, 0, 0),
11654 SND_SOC_DAPM_AIF_IN("VOICEMMODE2_DL",
11655 "VoiceMMode2 Playback", 0, 0, 0, 0),
11656 SND_SOC_DAPM_AIF_OUT("VOICEMMODE2_UL",
11657 "VoiceMMode2 Capture", 0, 0, 0, 0),
11658 SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback",
11659 0, 0, 0, 0),
11660 SND_SOC_DAPM_AIF_OUT("SLIM0_UL_HL", "SLIMBUS0_HOSTLESS Capture",
11661 0, 0, 0, 0),
11662 SND_SOC_DAPM_AIF_OUT("CPE_LSM_UL_HL", "CPE LSM capture",
11663 0, 0, 0, 0),
11664 SND_SOC_DAPM_AIF_IN("SLIM1_DL_HL", "SLIMBUS1_HOSTLESS Playback",
11665 0, 0, 0, 0),
11666 SND_SOC_DAPM_AIF_OUT("SLIM1_UL_HL", "SLIMBUS1_HOSTLESS Capture",
11667 0, 0, 0, 0),
11668 SND_SOC_DAPM_AIF_IN("SLIM3_DL_HL", "SLIMBUS3_HOSTLESS Playback",
11669 0, 0, 0, 0),
11670 SND_SOC_DAPM_AIF_OUT("SLIM3_UL_HL", "SLIMBUS3_HOSTLESS Capture",
11671 0, 0, 0, 0),
11672 SND_SOC_DAPM_AIF_IN("SLIM4_DL_HL", "SLIMBUS4_HOSTLESS Playback",
11673 0, 0, 0, 0),
11674 SND_SOC_DAPM_AIF_OUT("SLIM4_UL_HL", "SLIMBUS4_HOSTLESS Capture",
11675 0, 0, 0, 0),
11676 SND_SOC_DAPM_AIF_IN("SLIM6_DL_HL", "SLIMBUS6_HOSTLESS Playback",
11677 0, 0, 0, 0),
11678 SND_SOC_DAPM_AIF_OUT("SLIM6_UL_HL", "SLIMBUS6_HOSTLESS Capture",
11679 0, 0, 0, 0),
11680 SND_SOC_DAPM_AIF_IN("SLIM7_DL_HL", "SLIMBUS7_HOSTLESS Playback",
11681 0, 0, 0, 0),
11682 SND_SOC_DAPM_AIF_OUT("SLIM7_UL_HL", "SLIMBUS7_HOSTLESS Capture",
11683 0, 0, 0, 0),
11684 SND_SOC_DAPM_AIF_IN("SLIM8_DL_HL", "SLIMBUS8_HOSTLESS Playback",
11685 0, 0, 0, 0),
11686 SND_SOC_DAPM_AIF_OUT("SLIM8_UL_HL", "SLIMBUS8_HOSTLESS Capture",
11687 0, 0, 0, 0),
11688 SND_SOC_DAPM_AIF_IN("INTFM_DL_HL", "INT_FM_HOSTLESS Playback",
11689 0, 0, 0, 0),
11690 SND_SOC_DAPM_AIF_OUT("INTFM_UL_HL", "INT_FM_HOSTLESS Capture",
11691 0, 0, 0, 0),
11692 SND_SOC_DAPM_AIF_IN("INTHFP_DL_HL", "INT_HFP_BT_HOSTLESS Playback",
11693 0, 0, 0, 0),
11694 SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture",
11695 0, 0, 0, 0),
11696 SND_SOC_DAPM_AIF_IN("USBAUDIO_DL_HL", "USBAUDIO_HOSTLESS Playback",
11697 0, 0, 0, 0),
11698 SND_SOC_DAPM_AIF_OUT("USBAUDIO_UL_HL", "USBAUDIO_HOSTLESS Capture",
11699 0, 0, 0, 0),
11700 SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0),
11701 SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback",
11702 0, 0, 0, 0),
11703 SND_SOC_DAPM_AIF_IN("INT0_MI2S_DL_HL",
11704 "INT0 MI2S_RX Hostless Playback",
11705 0, 0, 0, 0),
11706 SND_SOC_DAPM_AIF_IN("INT4_MI2S_DL_HL",
11707 "INT4 MI2S_RX Hostless Playback",
11708 0, 0, 0, 0),
11709 SND_SOC_DAPM_AIF_IN("PRI_MI2S_DL_HL",
11710 "Primary MI2S_RX Hostless Playback",
11711 0, 0, 0, 0),
11712 SND_SOC_DAPM_AIF_IN("SEC_MI2S_DL_HL",
11713 "Secondary MI2S_RX Hostless Playback",
11714 0, 0, 0, 0),
11715 SND_SOC_DAPM_AIF_IN("TERT_MI2S_DL_HL",
11716 "Tertiary MI2S_RX Hostless Playback",
11717 0, 0, 0, 0),
11718 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_DL_HL",
11719 "Quaternary MI2S_RX Hostless Playback",
11720 0, 0, 0, 0),
11721
11722 SND_SOC_DAPM_AIF_IN("AUXPCM_DL_HL", "AUXPCM_HOSTLESS Playback",
11723 0, 0, 0, 0),
11724 SND_SOC_DAPM_AIF_OUT("AUXPCM_UL_HL", "AUXPCM_HOSTLESS Capture",
11725 0, 0, 0, 0),
11726 SND_SOC_DAPM_AIF_OUT("MI2S_UL_HL", "MI2S_TX_HOSTLESS Capture",
11727 0, 0, 0, 0),
11728 SND_SOC_DAPM_AIF_OUT("INT3_MI2S_UL_HL",
11729 "INT3 MI2S_TX Hostless Capture",
11730 0, 0, 0, 0),
11731 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_UL_HL",
11732 "Tertiary MI2S_TX Hostless Capture",
11733 0, 0, 0, 0),
11734 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_UL_HL",
11735 "Secondary MI2S_TX Hostless Capture",
11736 0, 0, 0, 0),
11737 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_UL_HL",
11738 "Primary MI2S_TX Hostless Capture",
11739 0, 0, 0, 0),
11740 SND_SOC_DAPM_AIF_OUT("MI2S_DL_HL", "MI2S_RX_HOSTLESS Playback",
11741 0, 0, 0, 0),
11742 SND_SOC_DAPM_AIF_IN("DTMF_DL_HL", "DTMF_RX_HOSTLESS Playback",
11743 0, 0, 0, 0),
11744 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_UL_HL",
11745 "Quaternary MI2S_TX Hostless Capture",
11746 0, 0, 0, 0),
11747
11748 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_0_DL_HL",
11749 "Primary TDM0 Hostless Playback",
11750 0, 0, 0, 0),
11751 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_0_UL_HL",
11752 "Primary TDM0 Hostless Capture",
11753 0, 0, 0, 0),
11754 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_1_DL_HL",
11755 "Primary TDM1 Hostless Playback",
11756 0, 0, 0, 0),
11757 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_1_UL_HL",
11758 "Primary TDM1 Hostless Capture",
11759 0, 0, 0, 0),
11760 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_2_DL_HL",
11761 "Primary TDM2 Hostless Playback",
11762 0, 0, 0, 0),
11763 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_2_UL_HL",
11764 "Primary TDM2 Hostless Capture",
11765 0, 0, 0, 0),
11766 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_3_DL_HL",
11767 "Primary TDM3 Hostless Playback",
11768 0, 0, 0, 0),
11769 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_3_UL_HL",
11770 "Primary TDM3 Hostless Capture",
11771 0, 0, 0, 0),
11772 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_4_DL_HL",
11773 "Primary TDM4 Hostless Playback",
11774 0, 0, 0, 0),
11775 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_4_UL_HL",
11776 "Primary TDM4 Hostless Capture",
11777 0, 0, 0, 0),
11778 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_5_DL_HL",
11779 "Primary TDM5 Hostless Playback",
11780 0, 0, 0, 0),
11781 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_5_UL_HL",
11782 "Primary TDM5 Hostless Capture",
11783 0, 0, 0, 0),
11784 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_6_DL_HL",
11785 "Primary TDM6 Hostless Playback",
11786 0, 0, 0, 0),
11787 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_6_UL_HL",
11788 "Primary TDM6 Hostless Capture",
11789 0, 0, 0, 0),
11790 SND_SOC_DAPM_AIF_IN("PRI_TDM_RX_7_DL_HL",
11791 "Primary TDM7 Hostless Playback",
11792 0, 0, 0, 0),
11793 SND_SOC_DAPM_AIF_OUT("PRI_TDM_TX_7_UL_HL",
11794 "Primary TDM7 Hostless Capture",
11795 0, 0, 0, 0),
11796 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_0_DL_HL",
11797 "Secondary TDM0 Hostless Playback",
11798 0, 0, 0, 0),
11799 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_0_UL_HL",
11800 "Secondary TDM0 Hostless Capture",
11801 0, 0, 0, 0),
11802 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_1_DL_HL",
11803 "Secondary TDM1 Hostless Playback",
11804 0, 0, 0, 0),
11805 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_1_UL_HL",
11806 "Secondary TDM1 Hostless Capture",
11807 0, 0, 0, 0),
11808 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_2_DL_HL",
11809 "Secondary TDM2 Hostless Playback",
11810 0, 0, 0, 0),
11811 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_2_UL_HL",
11812 "Secondary TDM2 Hostless Capture",
11813 0, 0, 0, 0),
11814 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_3_DL_HL",
11815 "Secondary TDM3 Hostless Playback",
11816 0, 0, 0, 0),
11817 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_3_UL_HL",
11818 "Secondary TDM3 Hostless Capture",
11819 0, 0, 0, 0),
11820 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_4_DL_HL",
11821 "Secondary TDM4 Hostless Playback",
11822 0, 0, 0, 0),
11823 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_4_UL_HL",
11824 "Secondary TDM4 Hostless Capture",
11825 0, 0, 0, 0),
11826 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_5_DL_HL",
11827 "Secondary TDM5 Hostless Playback",
11828 0, 0, 0, 0),
11829 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_5_UL_HL",
11830 "Secondary TDM5 Hostless Capture",
11831 0, 0, 0, 0),
11832 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_6_DL_HL",
11833 "Secondary TDM6 Hostless Playback",
11834 0, 0, 0, 0),
11835 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_6_UL_HL",
11836 "Secondary TDM6 Hostless Capture",
11837 0, 0, 0, 0),
11838 SND_SOC_DAPM_AIF_IN("SEC_TDM_RX_7_DL_HL",
11839 "Secondary TDM7 Hostless Playback",
11840 0, 0, 0, 0),
11841 SND_SOC_DAPM_AIF_OUT("SEC_TDM_TX_7_UL_HL",
11842 "Secondary TDM7 Hostless Capture",
11843 0, 0, 0, 0),
11844 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_0_DL_HL",
11845 "Tertiary TDM0 Hostless Playback",
11846 0, 0, 0, 0),
11847 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_0_UL_HL",
11848 "Tertiary TDM0 Hostless Capture",
11849 0, 0, 0, 0),
11850 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_1_DL_HL",
11851 "Tertiary TDM1 Hostless Playback",
11852 0, 0, 0, 0),
11853 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_1_UL_HL",
11854 "Tertiary TDM1 Hostless Capture",
11855 0, 0, 0, 0),
11856 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_2_DL_HL",
11857 "Tertiary TDM2 Hostless Playback",
11858 0, 0, 0, 0),
11859 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_2_UL_HL",
11860 "Tertiary TDM2 Hostless Capture",
11861 0, 0, 0, 0),
11862 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_3_DL_HL",
11863 "Tertiary TDM3 Hostless Playback",
11864 0, 0, 0, 0),
11865 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_3_UL_HL",
11866 "Tertiary TDM3 Hostless Capture",
11867 0, 0, 0, 0),
11868 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_4_DL_HL",
11869 "Tertiary TDM4 Hostless Playback",
11870 0, 0, 0, 0),
11871 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_4_UL_HL",
11872 "Tertiary TDM4 Hostless Capture",
11873 0, 0, 0, 0),
11874 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_5_DL_HL",
11875 "Tertiary TDM5 Hostless Playback",
11876 0, 0, 0, 0),
11877 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_5_UL_HL",
11878 "Tertiary TDM5 Hostless Capture",
11879 0, 0, 0, 0),
11880 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_6_DL_HL",
11881 "Tertiary TDM6 Hostless Playback",
11882 0, 0, 0, 0),
11883 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_6_UL_HL",
11884 "Tertiary TDM6 Hostless Capture",
11885 0, 0, 0, 0),
11886 SND_SOC_DAPM_AIF_IN("TERT_TDM_RX_7_DL_HL",
11887 "Tertiary TDM7 Hostless Playback",
11888 0, 0, 0, 0),
11889 SND_SOC_DAPM_AIF_OUT("TERT_TDM_TX_7_UL_HL",
11890 "Tertiary TDM7 Hostless Capture",
11891 0, 0, 0, 0),
11892 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_0_DL_HL",
11893 "Quaternary TDM0 Hostless Playback",
11894 0, 0, 0, 0),
11895 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_0_UL_HL",
11896 "Quaternary TDM0 Hostless Capture",
11897 0, 0, 0, 0),
11898 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_1_DL_HL",
11899 "Quaternary TDM1 Hostless Playback",
11900 0, 0, 0, 0),
11901 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_1_UL_HL",
11902 "Quaternary TDM1 Hostless Capture",
11903 0, 0, 0, 0),
11904 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_2_DL_HL",
11905 "Quaternary TDM2 Hostless Playback",
11906 0, 0, 0, 0),
11907 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_2_UL_HL",
11908 "Quaternary TDM2 Hostless Capture",
11909 0, 0, 0, 0),
11910 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_3_DL_HL",
11911 "Quaternary TDM3 Hostless Playback",
11912 0, 0, 0, 0),
11913 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_3_UL_HL",
11914 "Quaternary TDM3 Hostless Capture",
11915 0, 0, 0, 0),
11916 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_4_DL_HL",
11917 "Quaternary TDM4 Hostless Playback",
11918 0, 0, 0, 0),
11919 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_4_UL_HL",
11920 "Quaternary TDM4 Hostless Capture",
11921 0, 0, 0, 0),
11922 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_5_DL_HL",
11923 "Quaternary TDM5 Hostless Playback",
11924 0, 0, 0, 0),
11925 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_5_UL_HL",
11926 "Quaternary TDM5 Hostless Capture",
11927 0, 0, 0, 0),
11928 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_6_DL_HL",
11929 "Quaternary TDM6 Hostless Playback",
11930 0, 0, 0, 0),
11931 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_6_UL_HL",
11932 "Quaternary TDM6 Hostless Capture",
11933 0, 0, 0, 0),
11934 SND_SOC_DAPM_AIF_IN("QUAT_TDM_RX_7_DL_HL",
11935 "Quaternary TDM7 Hostless Playback",
11936 0, 0, 0, 0),
11937 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_TX_7_UL_HL",
11938 "Quaternary TDM7 Hostless Capture",
11939 0, 0, 0, 0),
11940
11941 /* LSM */
11942 SND_SOC_DAPM_AIF_OUT("LSM1_UL_HL", "Listen 1 Audio Service Capture",
11943 0, 0, 0, 0),
11944 SND_SOC_DAPM_AIF_OUT("LSM2_UL_HL", "Listen 2 Audio Service Capture",
11945 0, 0, 0, 0),
11946 SND_SOC_DAPM_AIF_OUT("LSM3_UL_HL", "Listen 3 Audio Service Capture",
11947 0, 0, 0, 0),
11948 SND_SOC_DAPM_AIF_OUT("LSM4_UL_HL", "Listen 4 Audio Service Capture",
11949 0, 0, 0, 0),
11950 SND_SOC_DAPM_AIF_OUT("LSM5_UL_HL", "Listen 5 Audio Service Capture",
11951 0, 0, 0, 0),
11952 SND_SOC_DAPM_AIF_OUT("LSM6_UL_HL", "Listen 6 Audio Service Capture",
11953 0, 0, 0, 0),
11954 SND_SOC_DAPM_AIF_OUT("LSM7_UL_HL", "Listen 7 Audio Service Capture",
11955 0, 0, 0, 0),
11956 SND_SOC_DAPM_AIF_OUT("LSM8_UL_HL", "Listen 8 Audio Service Capture",
11957 0, 0, 0, 0),
11958 SND_SOC_DAPM_AIF_IN("QCHAT_DL", "QCHAT Playback", 0, 0, 0, 0),
11959 SND_SOC_DAPM_AIF_OUT("QCHAT_UL", "QCHAT Capture", 0, 0, 0, 0),
11960 /* Backend AIF */
11961 /* Stream name equals to backend dai link stream name */
11962 SND_SOC_DAPM_AIF_OUT("PRI_I2S_RX", "Primary I2S Playback", 0, 0, 0, 0),
11963 SND_SOC_DAPM_AIF_OUT("SEC_I2S_RX", "Secondary I2S Playback",
11964 0, 0, 0, 0),
11965 SND_SOC_DAPM_AIF_OUT("SPDIF_RX", "SPDIF Playback", 0, 0, 0, 0),
11966 SND_SOC_DAPM_AIF_OUT("SLIMBUS_0_RX", "Slimbus Playback", 0, 0, 0, 0),
11967 SND_SOC_DAPM_AIF_OUT("SLIMBUS_2_RX", "Slimbus2 Playback", 0, 0, 0, 0),
11968 SND_SOC_DAPM_AIF_OUT("SLIMBUS_5_RX", "Slimbus5 Playback", 0, 0, 0, 0),
11969 SND_SOC_DAPM_AIF_OUT("HDMI", "HDMI Playback", 0, 0, 0, 0),
11970 SND_SOC_DAPM_AIF_OUT("DISPLAY_PORT", "Display Port Playback",
11971 0, 0, 0, 0),
11972 SND_SOC_DAPM_AIF_OUT("MI2S_RX", "MI2S Playback", 0, 0, 0, 0),
11973 SND_SOC_DAPM_AIF_OUT("QUAT_MI2S_RX", "Quaternary MI2S Playback",
11974 0, 0, 0, 0),
11975 SND_SOC_DAPM_AIF_OUT("TERT_MI2S_RX", "Tertiary MI2S Playback",
11976 0, 0, 0, 0),
11977 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX", "Secondary MI2S Playback",
11978 0, 0, 0, 0),
11979 SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX_SD1",
11980 "Secondary MI2S Playback SD1",
11981 0, 0, 0, 0),
11982 SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback",
11983 0, 0, 0, 0),
11984 SND_SOC_DAPM_AIF_OUT("INT0_MI2S_RX", "INT0 MI2S Playback",
11985 0, 0, 0, 0),
11986 SND_SOC_DAPM_AIF_OUT("INT4_MI2S_RX", "INT4 MI2S Playback",
11987 0, 0, 0, 0),
11988 SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary MI2S Playback",
11989 0, 0, 0, 0),
11990 SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0),
11991 SND_SOC_DAPM_AIF_IN("MI2S_TX", "MI2S Capture", 0, 0, 0, 0),
11992 SND_SOC_DAPM_AIF_IN("QUAT_MI2S_TX", "Quaternary MI2S Capture",
11993 0, 0, 0, 0),
11994 SND_SOC_DAPM_AIF_IN("PRI_MI2S_TX", "Primary MI2S Capture",
11995 0, 0, 0, 0),
11996 SND_SOC_DAPM_AIF_IN("TERT_MI2S_TX", "Tertiary MI2S Capture",
11997 0, 0, 0, 0),
11998 SND_SOC_DAPM_AIF_IN("INT2_MI2S_TX", "INT2 MI2S Capture",
11999 0, 0, 0, 0),
12000 SND_SOC_DAPM_AIF_IN("INT3_MI2S_TX", "INT3 MI2S Capture",
12001 0, 0, 0, 0),
12002 SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture",
12003 0, 0, 0, 0),
12004 SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0),
12005 SND_SOC_DAPM_AIF_IN("SLIMBUS_2_TX", "Slimbus2 Capture", 0, 0, 0, 0),
12006 SND_SOC_DAPM_AIF_IN("QUIN_MI2S_TX", "Quinary MI2S Capture",
12007 0, 0, 0, 0),
12008 SND_SOC_DAPM_AIF_IN("SENARY_MI2S_TX", "Senary MI2S Capture",
12009 0, 0, 0, 0),
12010 SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback",
12011 0, 0, 0, 0),
12012 SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture",
12013 0, 0, 0, 0),
12014 SND_SOC_DAPM_AIF_OUT("INT_BT_A2DP_RX", "Internal BT-A2DP Playback",
12015 0, 0, 0, 0),
12016 SND_SOC_DAPM_AIF_OUT("INT_FM_RX", "Internal FM Playback",
12017 0, 0, 0, 0),
12018 SND_SOC_DAPM_AIF_IN("INT_FM_TX", "Internal FM Capture",
12019 0, 0, 0, 0),
12020 SND_SOC_DAPM_AIF_OUT("PCM_RX", "AFE Playback",
12021 0, 0, 0, 0),
12022 SND_SOC_DAPM_AIF_IN("PCM_TX", "AFE Capture",
12023 0, 0, 0, 0),
12024 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_0", "Primary TDM0 Playback",
12025 0, 0, 0, 0),
12026 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_0", "Primary TDM0 Capture",
12027 0, 0, 0, 0),
12028 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_1", "Primary TDM1 Playback",
12029 0, 0, 0, 0),
12030 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_1", "Primary TDM1 Capture",
12031 0, 0, 0, 0),
12032 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_2", "Primary TDM2 Playback",
12033 0, 0, 0, 0),
12034 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_2", "Primary TDM2 Capture",
12035 0, 0, 0, 0),
12036 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_3", "Primary TDM3 Playback",
12037 0, 0, 0, 0),
12038 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_3", "Primary TDM3 Capture",
12039 0, 0, 0, 0),
12040 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_4", "Primary TDM4 Playback",
12041 0, 0, 0, 0),
12042 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_4", "Primary TDM4 Capture",
12043 0, 0, 0, 0),
12044 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_5", "Primary TDM5 Playback",
12045 0, 0, 0, 0),
12046 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_5", "Primary TDM5 Capture",
12047 0, 0, 0, 0),
12048 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_6", "Primary TDM6 Playback",
12049 0, 0, 0, 0),
12050 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_6", "Primary TDM6 Capture",
12051 0, 0, 0, 0),
12052 SND_SOC_DAPM_AIF_OUT("PRI_TDM_RX_7", "Primary TDM7 Playback",
12053 0, 0, 0, 0),
12054 SND_SOC_DAPM_AIF_IN("PRI_TDM_TX_7", "Primary TDM7 Capture",
12055 0, 0, 0, 0),
12056 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_0", "Secondary TDM0 Playback",
12057 0, 0, 0, 0),
12058 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_0", "Secondary TDM0 Capture",
12059 0, 0, 0, 0),
12060 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_1", "Secondary TDM1 Playback",
12061 0, 0, 0, 0),
12062 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_1", "Secondary TDM1 Capture",
12063 0, 0, 0, 0),
12064 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_2", "Secondary TDM2 Playback",
12065 0, 0, 0, 0),
12066 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_2", "Secondary TDM2 Capture",
12067 0, 0, 0, 0),
12068 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_3", "Secondary TDM3 Playback",
12069 0, 0, 0, 0),
12070 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_3", "Secondary TDM3 Capture",
12071 0, 0, 0, 0),
12072 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_4", "Secondary TDM4 Playback",
12073 0, 0, 0, 0),
12074 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_4", "Secondary TDM4 Capture",
12075 0, 0, 0, 0),
12076 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_5", "Secondary TDM5 Playback",
12077 0, 0, 0, 0),
12078 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_5", "Secondary TDM5 Capture",
12079 0, 0, 0, 0),
12080 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_6", "Secondary TDM6 Playback",
12081 0, 0, 0, 0),
12082 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_6", "Secondary TDM6 Capture",
12083 0, 0, 0, 0),
12084 SND_SOC_DAPM_AIF_OUT("SEC_TDM_RX_7", "Secondary TDM7 Playback",
12085 0, 0, 0, 0),
12086 SND_SOC_DAPM_AIF_IN("SEC_TDM_TX_7", "Secondary TDM7 Capture",
12087 0, 0, 0, 0),
12088 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_0", "Tertiary TDM0 Playback",
12089 0, 0, 0, 0),
12090 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_0", "Tertiary TDM0 Capture",
12091 0, 0, 0, 0),
12092 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_1", "Tertiary TDM1 Playback",
12093 0, 0, 0, 0),
12094 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_1", "Tertiary TDM1 Capture",
12095 0, 0, 0, 0),
12096 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_2", "Tertiary TDM2 Playback",
12097 0, 0, 0, 0),
12098 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_2", "Tertiary TDM2 Capture",
12099 0, 0, 0, 0),
12100 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_3", "Tertiary TDM3 Playback",
12101 0, 0, 0, 0),
12102 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_3", "Tertiary TDM3 Capture",
12103 0, 0, 0, 0),
12104 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_4", "Tertiary TDM4 Playback",
12105 0, 0, 0, 0),
12106 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_4", "Tertiary TDM4 Capture",
12107 0, 0, 0, 0),
12108 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_5", "Tertiary TDM5 Playback",
12109 0, 0, 0, 0),
12110 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_5", "Tertiary TDM5 Capture",
12111 0, 0, 0, 0),
12112 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_6", "Tertiary TDM6 Playback",
12113 0, 0, 0, 0),
12114 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_6", "Tertiary TDM6 Capture",
12115 0, 0, 0, 0),
12116 SND_SOC_DAPM_AIF_OUT("TERT_TDM_RX_7", "Tertiary TDM7 Playback",
12117 0, 0, 0, 0),
12118 SND_SOC_DAPM_AIF_IN("TERT_TDM_TX_7", "Tertiary TDM7 Capture",
12119 0, 0, 0, 0),
12120 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_0", "Quaternary TDM0 Playback",
12121 0, 0, 0, 0),
12122 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_0", "Quaternary TDM0 Capture",
12123 0, 0, 0, 0),
12124 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_1", "Quaternary TDM1 Playback",
12125 0, 0, 0, 0),
12126 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_1", "Quaternary TDM1 Capture",
12127 0, 0, 0, 0),
12128 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_2", "Quaternary TDM2 Playback",
12129 0, 0, 0, 0),
12130 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_2", "Quaternary TDM2 Capture",
12131 0, 0, 0, 0),
12132 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_3", "Quaternary TDM3 Playback",
12133 0, 0, 0, 0),
12134 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_3", "Quaternary TDM3 Capture",
12135 0, 0, 0, 0),
12136 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_4", "Quaternary TDM4 Playback",
12137 0, 0, 0, 0),
12138 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_4", "Quaternary TDM4 Capture",
12139 0, 0, 0, 0),
12140 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_5", "Quaternary TDM5 Playback",
12141 0, 0, 0, 0),
12142 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_5", "Quaternary TDM5 Capture",
12143 0, 0, 0, 0),
12144 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_6", "Quaternary TDM6 Playback",
12145 0, 0, 0, 0),
12146 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_6", "Quaternary TDM6 Capture",
12147 0, 0, 0, 0),
12148 SND_SOC_DAPM_AIF_OUT("QUAT_TDM_RX_7", "Quaternary TDM7 Playback",
12149 0, 0, 0, 0),
12150 SND_SOC_DAPM_AIF_IN("QUAT_TDM_TX_7", "Quaternary TDM7 Capture",
12151 0, 0, 0, 0),
12152 /* incall */
12153 SND_SOC_DAPM_AIF_OUT("VOICE_PLAYBACK_TX", "Voice Farend Playback",
12154 0, 0, 0, 0),
12155 SND_SOC_DAPM_AIF_OUT("VOICE2_PLAYBACK_TX", "Voice2 Farend Playback",
12156 0, 0, 0, 0),
12157 SND_SOC_DAPM_AIF_OUT("SLIMBUS_4_RX", "Slimbus4 Playback",
12158 0, 0, 0, 0),
12159 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_TX", "Voice Uplink Capture",
12160 0, 0, 0, 0),
12161 SND_SOC_DAPM_AIF_IN("INCALL_RECORD_RX", "Voice Downlink Capture",
12162 0, 0, 0, 0),
12163 SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture",
12164 0, 0, 0, 0),
12165 SND_SOC_DAPM_AIF_IN("SENARY_TX", "Senary_mi2s Capture",
12166 0, 0, 0, 0),
12167 SND_SOC_DAPM_AIF_IN("INT5_MI2S_TX", "INT5 MI2S Capture",
12168 0, 0, 0, 0),
12169 SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0),
12170
12171 SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0),
12172 SND_SOC_DAPM_AIF_IN("AUX_PCM_TX", "AUX PCM Capture", 0, 0, 0, 0),
12173 SND_SOC_DAPM_AIF_OUT("SEC_AUX_PCM_RX", "Sec AUX PCM Playback",
12174 0, 0, 0, 0),
12175 SND_SOC_DAPM_AIF_IN("SEC_AUX_PCM_TX", "Sec AUX PCM Capture",
12176 0, 0, 0, 0),
12177 SND_SOC_DAPM_AIF_OUT("TERT_AUX_PCM_RX", "Tert AUX PCM Playback",
12178 0, 0, 0, 0),
12179 SND_SOC_DAPM_AIF_IN("TERT_AUX_PCM_TX", "Tert AUX PCM Capture",
12180 0, 0, 0, 0),
12181 SND_SOC_DAPM_AIF_OUT("QUAT_AUX_PCM_RX", "Quat AUX PCM Playback",
12182 0, 0, 0, 0),
12183 SND_SOC_DAPM_AIF_IN("QUAT_AUX_PCM_TX", "Quat AUX PCM Capture",
12184 0, 0, 0, 0),
12185 SND_SOC_DAPM_AIF_IN("VOICE_STUB_DL", "VOICE_STUB Playback", 0, 0, 0, 0),
12186 SND_SOC_DAPM_AIF_OUT("VOICE_STUB_UL", "VOICE_STUB Capture", 0, 0, 0, 0),
12187 SND_SOC_DAPM_AIF_IN("VOICE2_STUB_DL", "VOICE2_STUB Playback",
12188 0, 0, 0, 0),
12189 SND_SOC_DAPM_AIF_OUT("VOICE2_STUB_UL", "VOICE2_STUB Capture",
12190 0, 0, 0, 0),
12191 SND_SOC_DAPM_AIF_IN("VOLTE_STUB_DL", "VOLTE_STUB Playback", 0, 0, 0, 0),
12192 SND_SOC_DAPM_AIF_OUT("VOLTE_STUB_UL", "VOLTE_STUB Capture", 0, 0, 0, 0),
12193 SND_SOC_DAPM_AIF_OUT("STUB_RX", "Stub Playback", 0, 0, 0, 0),
12194 SND_SOC_DAPM_AIF_IN("STUB_TX", "Stub Capture", 0, 0, 0, 0),
12195 SND_SOC_DAPM_AIF_OUT("SLIMBUS_1_RX", "Slimbus1 Playback", 0, 0, 0, 0),
12196 SND_SOC_DAPM_AIF_IN("SLIMBUS_1_TX", "Slimbus1 Capture", 0, 0, 0, 0),
12197 SND_SOC_DAPM_AIF_IN("STUB_1_TX", "Stub1 Capture", 0, 0, 0, 0),
12198 SND_SOC_DAPM_AIF_OUT("SLIMBUS_3_RX", "Slimbus3 Playback", 0, 0, 0, 0),
12199 SND_SOC_DAPM_AIF_IN("SLIMBUS_3_TX", "Slimbus3 Capture", 0, 0, 0, 0),
12200 /* In- call recording */
12201 SND_SOC_DAPM_AIF_OUT("SLIMBUS_6_RX", "Slimbus6 Playback", 0, 0, 0, 0),
12202 SND_SOC_DAPM_AIF_IN("SLIMBUS_6_TX", "Slimbus6 Capture", 0, 0, 0, 0),
12203
12204 SND_SOC_DAPM_AIF_OUT("SLIMBUS_7_RX", "Slimbus7 Playback", 0, 0, 0, 0),
12205 SND_SOC_DAPM_AIF_IN("SLIMBUS_7_TX", "Slimbus7 Capture", 0, 0, 0, 0),
12206
12207 SND_SOC_DAPM_AIF_OUT("SLIMBUS_8_RX", "Slimbus8 Playback", 0, 0, 0, 0),
12208 SND_SOC_DAPM_AIF_IN("SLIMBUS_8_TX", "Slimbus8 Capture", 0, 0, 0, 0),
12209 SND_SOC_DAPM_AIF_OUT("USB_AUDIO_RX", "USB Audio Playback", 0, 0, 0, 0),
12210 SND_SOC_DAPM_AIF_IN("USB_AUDIO_TX", "USB Audio Capture", 0, 0, 0, 0),
12211
12212 /* Switch Definitions */
12213 SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0,
12214 &slim_fm_switch_mixer_controls),
12215 SND_SOC_DAPM_SWITCH("SLIMBUS1_DL_HL", SND_SOC_NOPM, 0, 0,
12216 &slim1_fm_switch_mixer_controls),
12217 SND_SOC_DAPM_SWITCH("SLIMBUS3_DL_HL", SND_SOC_NOPM, 0, 0,
12218 &slim3_fm_switch_mixer_controls),
12219 SND_SOC_DAPM_SWITCH("SLIMBUS4_DL_HL", SND_SOC_NOPM, 0, 0,
12220 &slim4_fm_switch_mixer_controls),
12221 SND_SOC_DAPM_SWITCH("SLIMBUS6_DL_HL", SND_SOC_NOPM, 0, 0,
12222 &slim6_fm_switch_mixer_controls),
12223 SND_SOC_DAPM_SWITCH("PCM_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12224 &pcm_rx_switch_mixer_controls),
12225 SND_SOC_DAPM_SWITCH("INT0_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12226 &int0_mi2s_rx_switch_mixer_controls),
12227 SND_SOC_DAPM_SWITCH("INT4_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12228 &int4_mi2s_rx_switch_mixer_controls),
12229 SND_SOC_DAPM_SWITCH("PRI_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12230 &pri_mi2s_rx_switch_mixer_controls),
12231 SND_SOC_DAPM_SWITCH("SEC_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12232 &sec_mi2s_rx_switch_mixer_controls),
12233 SND_SOC_DAPM_SWITCH("TERT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12234 &tert_mi2s_rx_switch_mixer_controls),
12235 SND_SOC_DAPM_SWITCH("QUAT_MI2S_RX_DL_HL", SND_SOC_NOPM, 0, 0,
12236 &quat_mi2s_rx_switch_mixer_controls),
12237 SND_SOC_DAPM_SWITCH("HFP_PRI_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
12238 &hfp_pri_aux_switch_mixer_controls),
12239 SND_SOC_DAPM_SWITCH("HFP_AUX_UL_HL", SND_SOC_NOPM, 0, 0,
12240 &hfp_aux_switch_mixer_controls),
12241 SND_SOC_DAPM_SWITCH("HFP_INT_UL_HL", SND_SOC_NOPM, 0, 0,
12242 &hfp_int_switch_mixer_controls),
12243 SND_SOC_DAPM_SWITCH("HFP_SLIM7_UL_HL", SND_SOC_NOPM, 0, 0,
12244 &hfp_slim7_switch_mixer_controls),
12245 SND_SOC_DAPM_SWITCH("USB_DL_HL", SND_SOC_NOPM, 0, 0,
12246 &usb_switch_mixer_controls),
12247
12248 /* Mixer definitions */
12249 SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12250 pri_i2s_rx_mixer_controls, ARRAY_SIZE(pri_i2s_rx_mixer_controls)),
12251 SND_SOC_DAPM_MIXER("SEC_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12252 sec_i2s_rx_mixer_controls, ARRAY_SIZE(sec_i2s_rx_mixer_controls)),
12253 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12254 slimbus_rx_mixer_controls, ARRAY_SIZE(slimbus_rx_mixer_controls)),
12255 SND_SOC_DAPM_MIXER("SLIMBUS_2_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12256 slimbus_2_rx_mixer_controls, ARRAY_SIZE(slimbus_2_rx_mixer_controls)),
12257 SND_SOC_DAPM_MIXER("SLIMBUS_5_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12258 slimbus_5_rx_mixer_controls, ARRAY_SIZE(slimbus_5_rx_mixer_controls)),
12259 SND_SOC_DAPM_MIXER("SLIMBUS_7_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12260 slimbus_7_rx_mixer_controls, ARRAY_SIZE(slimbus_7_rx_mixer_controls)),
12261 SND_SOC_DAPM_MIXER("HDMI Mixer", SND_SOC_NOPM, 0, 0,
12262 hdmi_mixer_controls, ARRAY_SIZE(hdmi_mixer_controls)),
12263 SND_SOC_DAPM_MIXER("DISPLAY_PORT Mixer", SND_SOC_NOPM, 0, 0,
12264 display_port_mixer_controls, ARRAY_SIZE(display_port_mixer_controls)),
12265 SND_SOC_DAPM_MIXER("SPDIF_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12266 spdif_rx_mixer_controls, ARRAY_SIZE(spdif_rx_mixer_controls)),
12267 SND_SOC_DAPM_MIXER("MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12268 mi2s_rx_mixer_controls, ARRAY_SIZE(mi2s_rx_mixer_controls)),
12269 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12270 quaternary_mi2s_rx_mixer_controls,
12271 ARRAY_SIZE(quaternary_mi2s_rx_mixer_controls)),
12272 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12273 tertiary_mi2s_rx_mixer_controls,
12274 ARRAY_SIZE(tertiary_mi2s_rx_mixer_controls)),
12275 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12276 secondary_mi2s_rx_mixer_controls,
12277 ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)),
12278 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_SD1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12279 secondary_mi2s_rx2_mixer_controls,
12280 ARRAY_SIZE(secondary_mi2s_rx2_mixer_controls)),
12281 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12282 primary_mi2s_rx_mixer_controls,
12283 ARRAY_SIZE(primary_mi2s_rx_mixer_controls)),
12284 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12285 int0_mi2s_rx_mixer_controls,
12286 ARRAY_SIZE(int0_mi2s_rx_mixer_controls)),
12287 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12288 int4_mi2s_rx_mixer_controls,
12289 ARRAY_SIZE(int4_mi2s_rx_mixer_controls)),
12290 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12291 quinary_mi2s_rx_mixer_controls,
12292 ARRAY_SIZE(quinary_mi2s_rx_mixer_controls)),
12293 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12294 pri_tdm_rx_0_mixer_controls,
12295 ARRAY_SIZE(pri_tdm_rx_0_mixer_controls)),
12296 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12297 pri_tdm_rx_1_mixer_controls,
12298 ARRAY_SIZE(pri_tdm_rx_1_mixer_controls)),
12299 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12300 pri_tdm_rx_2_mixer_controls,
12301 ARRAY_SIZE(pri_tdm_rx_2_mixer_controls)),
12302 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12303 pri_tdm_rx_3_mixer_controls,
12304 ARRAY_SIZE(pri_tdm_rx_3_mixer_controls)),
12305 SND_SOC_DAPM_MIXER("PRI_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12306 pri_tdm_tx_0_mixer_controls,
12307 ARRAY_SIZE(pri_tdm_tx_0_mixer_controls)),
12308 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12309 sec_tdm_rx_0_mixer_controls,
12310 ARRAY_SIZE(sec_tdm_rx_0_mixer_controls)),
12311 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12312 sec_tdm_rx_1_mixer_controls,
12313 ARRAY_SIZE(sec_tdm_rx_1_mixer_controls)),
12314 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12315 sec_tdm_rx_2_mixer_controls,
12316 ARRAY_SIZE(sec_tdm_rx_2_mixer_controls)),
12317 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12318 sec_tdm_rx_3_mixer_controls,
12319 ARRAY_SIZE(sec_tdm_rx_3_mixer_controls)),
12320 SND_SOC_DAPM_MIXER("SEC_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12321 sec_tdm_tx_0_mixer_controls,
12322 ARRAY_SIZE(sec_tdm_tx_0_mixer_controls)),
12323 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12324 tert_tdm_rx_0_mixer_controls,
12325 ARRAY_SIZE(tert_tdm_rx_0_mixer_controls)),
12326 SND_SOC_DAPM_MIXER("TERT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12327 tert_tdm_tx_0_mixer_controls,
12328 ARRAY_SIZE(tert_tdm_tx_0_mixer_controls)),
12329 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12330 tert_tdm_rx_1_mixer_controls,
12331 ARRAY_SIZE(tert_tdm_rx_1_mixer_controls)),
12332 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12333 tert_tdm_rx_2_mixer_controls,
12334 ARRAY_SIZE(tert_tdm_rx_2_mixer_controls)),
12335 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12336 tert_tdm_rx_3_mixer_controls,
12337 ARRAY_SIZE(tert_tdm_rx_3_mixer_controls)),
12338 SND_SOC_DAPM_MIXER("TERT_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
12339 tert_tdm_rx_4_mixer_controls,
12340 ARRAY_SIZE(tert_tdm_rx_4_mixer_controls)),
12341 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12342 quat_tdm_rx_0_mixer_controls,
12343 ARRAY_SIZE(quat_tdm_rx_0_mixer_controls)),
12344 SND_SOC_DAPM_MIXER("QUAT_TDM_TX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
12345 quat_tdm_tx_0_mixer_controls,
12346 ARRAY_SIZE(quat_tdm_tx_0_mixer_controls)),
12347 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
12348 quat_tdm_rx_1_mixer_controls,
12349 ARRAY_SIZE(quat_tdm_rx_1_mixer_controls)),
12350 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12351 quat_tdm_rx_2_mixer_controls,
12352 ARRAY_SIZE(quat_tdm_rx_2_mixer_controls)),
12353 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
12354 quat_tdm_rx_3_mixer_controls,
12355 ARRAY_SIZE(quat_tdm_rx_3_mixer_controls)),
12356 SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
12357 mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
12358 SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
12359 mmul2_mixer_controls, ARRAY_SIZE(mmul2_mixer_controls)),
12360 SND_SOC_DAPM_MIXER("MultiMedia3 Mixer", SND_SOC_NOPM, 0, 0,
12361 mmul3_mixer_controls, ARRAY_SIZE(mmul3_mixer_controls)),
12362 SND_SOC_DAPM_MIXER("MultiMedia4 Mixer", SND_SOC_NOPM, 0, 0,
12363 mmul4_mixer_controls, ARRAY_SIZE(mmul4_mixer_controls)),
12364 SND_SOC_DAPM_MIXER("MultiMedia5 Mixer", SND_SOC_NOPM, 0, 0,
12365 mmul5_mixer_controls, ARRAY_SIZE(mmul5_mixer_controls)),
12366 SND_SOC_DAPM_MIXER("MultiMedia6 Mixer", SND_SOC_NOPM, 0, 0,
12367 mmul6_mixer_controls, ARRAY_SIZE(mmul6_mixer_controls)),
12368 SND_SOC_DAPM_MIXER("MultiMedia8 Mixer", SND_SOC_NOPM, 0, 0,
12369 mmul8_mixer_controls, ARRAY_SIZE(mmul8_mixer_controls)),
12370 SND_SOC_DAPM_MIXER("MultiMedia9 Mixer", SND_SOC_NOPM, 0, 0,
12371 mmul9_mixer_controls, ARRAY_SIZE(mmul9_mixer_controls)),
Laxminath Kasam38070be2017-08-17 18:21:59 +053012372 SND_SOC_DAPM_MIXER("MultiMedia10 Mixer", SND_SOC_NOPM, 0, 0,
12373 mmul10_mixer_controls, ARRAY_SIZE(mmul10_mixer_controls)),
Asish Bhattacharya34504582017-08-08 12:55:01 +053012374 SND_SOC_DAPM_MIXER("MultiMedia16 Mixer", SND_SOC_NOPM, 0, 0,
12375 mmul16_mixer_controls, ARRAY_SIZE(mmul16_mixer_controls)),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012376 SND_SOC_DAPM_MIXER("MultiMedia17 Mixer", SND_SOC_NOPM, 0, 0,
12377 mmul17_mixer_controls, ARRAY_SIZE(mmul17_mixer_controls)),
12378 SND_SOC_DAPM_MIXER("MultiMedia18 Mixer", SND_SOC_NOPM, 0, 0,
12379 mmul18_mixer_controls, ARRAY_SIZE(mmul18_mixer_controls)),
12380 SND_SOC_DAPM_MIXER("MultiMedia19 Mixer", SND_SOC_NOPM, 0, 0,
12381 mmul19_mixer_controls, ARRAY_SIZE(mmul19_mixer_controls)),
12382 SND_SOC_DAPM_MIXER("MultiMedia20 Mixer", SND_SOC_NOPM, 0, 0,
12383 mmul20_mixer_controls, ARRAY_SIZE(mmul20_mixer_controls)),
12384 SND_SOC_DAPM_MIXER("AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12385 auxpcm_rx_mixer_controls, ARRAY_SIZE(auxpcm_rx_mixer_controls)),
12386 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12387 sec_auxpcm_rx_mixer_controls, ARRAY_SIZE(sec_auxpcm_rx_mixer_controls)),
12388 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12389 tert_auxpcm_rx_mixer_controls,
12390 ARRAY_SIZE(tert_auxpcm_rx_mixer_controls)),
12391 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12392 quat_auxpcm_rx_mixer_controls,
12393 ARRAY_SIZE(quat_auxpcm_rx_mixer_controls)),
12394 /* incall */
12395 SND_SOC_DAPM_MIXER("Incall_Music Audio Mixer", SND_SOC_NOPM, 0, 0,
12396 incall_music_delivery_mixer_controls,
12397 ARRAY_SIZE(incall_music_delivery_mixer_controls)),
12398 SND_SOC_DAPM_MIXER("Incall_Music_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
12399 incall_music2_delivery_mixer_controls,
12400 ARRAY_SIZE(incall_music2_delivery_mixer_controls)),
12401 SND_SOC_DAPM_MIXER("SLIMBUS_4_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12402 slimbus_4_rx_mixer_controls,
12403 ARRAY_SIZE(slimbus_4_rx_mixer_controls)),
12404 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12405 slimbus_6_rx_mixer_controls,
12406 ARRAY_SIZE(slimbus_6_rx_mixer_controls)),
12407 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12408 usb_audio_rx_mixer_controls,
12409 ARRAY_SIZE(usb_audio_rx_mixer_controls)),
12410 /* Voice Mixer */
12411 SND_SOC_DAPM_MIXER("PRI_RX_Voice Mixer",
12412 SND_SOC_NOPM, 0, 0, pri_rx_voice_mixer_controls,
12413 ARRAY_SIZE(pri_rx_voice_mixer_controls)),
12414 SND_SOC_DAPM_MIXER("SEC_RX_Voice Mixer",
12415 SND_SOC_NOPM, 0, 0,
12416 sec_i2s_rx_voice_mixer_controls,
12417 ARRAY_SIZE(sec_i2s_rx_voice_mixer_controls)),
12418 SND_SOC_DAPM_MIXER("SEC_MI2S_RX_Voice Mixer",
12419 SND_SOC_NOPM, 0, 0,
12420 sec_mi2s_rx_voice_mixer_controls,
12421 ARRAY_SIZE(sec_mi2s_rx_voice_mixer_controls)),
12422 SND_SOC_DAPM_MIXER("SLIM_0_RX_Voice Mixer",
12423 SND_SOC_NOPM, 0, 0,
12424 slimbus_rx_voice_mixer_controls,
12425 ARRAY_SIZE(slimbus_rx_voice_mixer_controls)),
12426 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX_Voice Mixer",
12427 SND_SOC_NOPM, 0, 0,
12428 bt_sco_rx_voice_mixer_controls,
12429 ARRAY_SIZE(bt_sco_rx_voice_mixer_controls)),
12430 SND_SOC_DAPM_MIXER("AFE_PCM_RX_Voice Mixer",
12431 SND_SOC_NOPM, 0, 0,
12432 afe_pcm_rx_voice_mixer_controls,
12433 ARRAY_SIZE(afe_pcm_rx_voice_mixer_controls)),
12434 SND_SOC_DAPM_MIXER("AUX_PCM_RX_Voice Mixer",
12435 SND_SOC_NOPM, 0, 0,
12436 aux_pcm_rx_voice_mixer_controls,
12437 ARRAY_SIZE(aux_pcm_rx_voice_mixer_controls)),
12438 SND_SOC_DAPM_MIXER("SEC_AUX_PCM_RX_Voice Mixer",
12439 SND_SOC_NOPM, 0, 0,
12440 sec_aux_pcm_rx_voice_mixer_controls,
12441 ARRAY_SIZE(sec_aux_pcm_rx_voice_mixer_controls)),
12442 SND_SOC_DAPM_MIXER("TERT_AUX_PCM_RX_Voice Mixer",
12443 SND_SOC_NOPM, 0, 0,
12444 tert_aux_pcm_rx_voice_mixer_controls,
12445 ARRAY_SIZE(tert_aux_pcm_rx_voice_mixer_controls)),
12446 SND_SOC_DAPM_MIXER("QUAT_AUX_PCM_RX_Voice Mixer",
12447 SND_SOC_NOPM, 0, 0,
12448 quat_aux_pcm_rx_voice_mixer_controls,
12449 ARRAY_SIZE(quat_aux_pcm_rx_voice_mixer_controls)),
12450 SND_SOC_DAPM_MIXER("HDMI_RX_Voice Mixer",
12451 SND_SOC_NOPM, 0, 0,
12452 hdmi_rx_voice_mixer_controls,
12453 ARRAY_SIZE(hdmi_rx_voice_mixer_controls)),
12454 SND_SOC_DAPM_MIXER("MI2S_RX_Voice Mixer",
12455 SND_SOC_NOPM, 0, 0,
12456 mi2s_rx_voice_mixer_controls,
12457 ARRAY_SIZE(mi2s_rx_voice_mixer_controls)),
12458 SND_SOC_DAPM_MIXER("PRI_MI2S_RX_Voice Mixer",
12459 SND_SOC_NOPM, 0, 0,
12460 pri_mi2s_rx_voice_mixer_controls,
12461 ARRAY_SIZE(pri_mi2s_rx_voice_mixer_controls)),
12462 SND_SOC_DAPM_MIXER("INT0_MI2S_RX_Voice Mixer",
12463 SND_SOC_NOPM, 0, 0,
12464 int0_mi2s_rx_voice_mixer_controls,
12465 ARRAY_SIZE(int0_mi2s_rx_voice_mixer_controls)),
12466 SND_SOC_DAPM_MIXER("INT4_MI2S_RX_Voice Mixer",
12467 SND_SOC_NOPM, 0, 0,
12468 int4_mi2s_rx_voice_mixer_controls,
12469 ARRAY_SIZE(int4_mi2s_rx_voice_mixer_controls)),
12470 SND_SOC_DAPM_MIXER("TERT_MI2S_RX_Voice Mixer",
12471 SND_SOC_NOPM, 0, 0,
12472 tert_mi2s_rx_voice_mixer_controls,
12473 ARRAY_SIZE(tert_mi2s_rx_voice_mixer_controls)),
12474 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX_Voice Mixer",
12475 SND_SOC_NOPM, 0, 0,
12476 quat_mi2s_rx_voice_mixer_controls,
12477 ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)),
12478 SND_SOC_DAPM_MIXER("QUIN_MI2S_RX_Voice Mixer",
12479 SND_SOC_NOPM, 0, 0,
12480 quin_mi2s_rx_voice_mixer_controls,
12481 ARRAY_SIZE(quin_mi2s_rx_voice_mixer_controls)),
12482 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2_Voice Mixer",
12483 SND_SOC_NOPM, 0, 0,
12484 quat_tdm_rx_2_voice_mixer_controls,
12485 ARRAY_SIZE(quat_tdm_rx_2_voice_mixer_controls)),
12486 SND_SOC_DAPM_MIXER("Voice_Tx Mixer",
12487 SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls,
12488 ARRAY_SIZE(tx_voice_mixer_controls)),
12489 SND_SOC_DAPM_MIXER("Voice2_Tx Mixer",
12490 SND_SOC_NOPM, 0, 0, tx_voice2_mixer_controls,
12491 ARRAY_SIZE(tx_voice2_mixer_controls)),
12492 SND_SOC_DAPM_MIXER("Voip_Tx Mixer",
12493 SND_SOC_NOPM, 0, 0, tx_voip_mixer_controls,
12494 ARRAY_SIZE(tx_voip_mixer_controls)),
12495 SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer",
12496 SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls,
12497 ARRAY_SIZE(tx_volte_mixer_controls)),
12498 SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer",
12499 SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls,
12500 ARRAY_SIZE(tx_vowlan_mixer_controls)),
12501 SND_SOC_DAPM_MIXER("VoiceMMode1_Tx Mixer",
12502 SND_SOC_NOPM, 0, 0, tx_voicemmode1_mixer_controls,
12503 ARRAY_SIZE(tx_voicemmode1_mixer_controls)),
12504 SND_SOC_DAPM_MIXER("VoiceMMode2_Tx Mixer",
12505 SND_SOC_NOPM, 0, 0, tx_voicemmode2_mixer_controls,
12506 ARRAY_SIZE(tx_voicemmode2_mixer_controls)),
12507 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12508 int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)),
12509 SND_SOC_DAPM_MIXER("INTERNAL_A2DP_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12510 int_bt_a2dp_rx_mixer_controls,
12511 ARRAY_SIZE(int_bt_a2dp_rx_mixer_controls)),
12512 SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12513 int_fm_rx_mixer_controls, ARRAY_SIZE(int_fm_rx_mixer_controls)),
12514 SND_SOC_DAPM_MIXER("AFE_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
12515 afe_pcm_rx_mixer_controls, ARRAY_SIZE(afe_pcm_rx_mixer_controls)),
12516 SND_SOC_DAPM_MIXER("Voice Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12517 tx_voice_stub_mixer_controls, ARRAY_SIZE(tx_voice_stub_mixer_controls)),
12518 SND_SOC_DAPM_MIXER("Voice2 Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12519 tx_voice2_stub_mixer_controls,
12520 ARRAY_SIZE(tx_voice2_stub_mixer_controls)),
12521 SND_SOC_DAPM_MIXER("VoLTE Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
12522 tx_volte_stub_mixer_controls, ARRAY_SIZE(tx_volte_stub_mixer_controls)),
12523 SND_SOC_DAPM_MIXER("STUB_RX Mixer", SND_SOC_NOPM, 0, 0,
12524 stub_rx_mixer_controls, ARRAY_SIZE(stub_rx_mixer_controls)),
12525 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Mixer", SND_SOC_NOPM, 0, 0,
12526 slimbus_1_rx_mixer_controls, ARRAY_SIZE(slimbus_1_rx_mixer_controls)),
12527 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12528 slimbus_3_rx_mixer_controls, ARRAY_SIZE(slimbus_3_rx_mixer_controls)),
12529 SND_SOC_DAPM_MIXER("SLIM_6_RX_Voice Mixer",
12530 SND_SOC_NOPM, 0, 0,
12531 slimbus_6_rx_voice_mixer_controls,
12532 ARRAY_SIZE(slimbus_6_rx_voice_mixer_controls)),
12533 SND_SOC_DAPM_MIXER("SLIM_7_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12534 slimbus_7_rx_voice_mixer_controls,
12535 ARRAY_SIZE(slimbus_7_rx_voice_mixer_controls)),
12536 SND_SOC_DAPM_MIXER("SLIM_8_RX_Voice Mixer", SND_SOC_NOPM, 0, 0,
12537 slimbus_8_rx_voice_mixer_controls,
12538 ARRAY_SIZE(slimbus_8_rx_voice_mixer_controls)),
12539 /* port mixer */
12540 SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Port Mixer",
12541 SND_SOC_NOPM, 0, 0, sbus_0_rx_port_mixer_controls,
12542 ARRAY_SIZE(sbus_0_rx_port_mixer_controls)),
12543 SND_SOC_DAPM_MIXER("AUX_PCM_RX Port Mixer",
12544 SND_SOC_NOPM, 0, 0, aux_pcm_rx_port_mixer_controls,
12545 ARRAY_SIZE(aux_pcm_rx_port_mixer_controls)),
12546 SND_SOC_DAPM_MIXER("SEC_AUXPCM_RX Port Mixer",
12547 SND_SOC_NOPM, 0, 0, sec_auxpcm_rx_port_mixer_controls,
12548 ARRAY_SIZE(sec_auxpcm_rx_port_mixer_controls)),
12549 SND_SOC_DAPM_MIXER("TERT_AUXPCM_RX Port Mixer",
12550 SND_SOC_NOPM, 0, 0, tert_auxpcm_rx_port_mixer_controls,
12551 ARRAY_SIZE(tert_auxpcm_rx_port_mixer_controls)),
12552 SND_SOC_DAPM_MIXER("QUAT_AUXPCM_RX Port Mixer",
12553 SND_SOC_NOPM, 0, 0, quat_auxpcm_rx_port_mixer_controls,
12554 ARRAY_SIZE(quat_auxpcm_rx_port_mixer_controls)),
12555 SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12556 sbus_1_rx_port_mixer_controls,
12557 ARRAY_SIZE(sbus_1_rx_port_mixer_controls)),
12558 SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12559 bt_sco_rx_port_mixer_controls,
12560 ARRAY_SIZE(bt_sco_rx_port_mixer_controls)),
12561 SND_SOC_DAPM_MIXER("AFE_PCM_RX Port Mixer",
12562 SND_SOC_NOPM, 0, 0, afe_pcm_rx_port_mixer_controls,
12563 ARRAY_SIZE(afe_pcm_rx_port_mixer_controls)),
12564 SND_SOC_DAPM_MIXER("HDMI_RX Port Mixer",
12565 SND_SOC_NOPM, 0, 0, hdmi_rx_port_mixer_controls,
12566 ARRAY_SIZE(hdmi_rx_port_mixer_controls)),
12567 SND_SOC_DAPM_MIXER("DISPLAY_PORT_RX Port Mixer",
12568 SND_SOC_NOPM, 0, 0, display_port_rx_port_mixer_controls,
12569 ARRAY_SIZE(display_port_rx_port_mixer_controls)),
12570 SND_SOC_DAPM_MIXER("SEC_I2S_RX Port Mixer",
12571 SND_SOC_NOPM, 0, 0, sec_i2s_rx_port_mixer_controls,
12572 ARRAY_SIZE(sec_i2s_rx_port_mixer_controls)),
12573 SND_SOC_DAPM_MIXER("SLIMBUS_3_RX Port Mixer",
12574 SND_SOC_NOPM, 0, 0, sbus_3_rx_port_mixer_controls,
12575 ARRAY_SIZE(sbus_3_rx_port_mixer_controls)),
12576 SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Port Mixer",
12577 SND_SOC_NOPM, 0, 0, sbus_6_rx_port_mixer_controls,
12578 ARRAY_SIZE(sbus_6_rx_port_mixer_controls)),
12579 SND_SOC_DAPM_MIXER("MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12580 mi2s_rx_port_mixer_controls, ARRAY_SIZE(mi2s_rx_port_mixer_controls)),
12581 SND_SOC_DAPM_MIXER("PRI_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12582 primary_mi2s_rx_port_mixer_controls,
12583 ARRAY_SIZE(primary_mi2s_rx_port_mixer_controls)),
12584 SND_SOC_DAPM_MIXER("SEC_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12585 sec_mi2s_rx_port_mixer_controls,
12586 ARRAY_SIZE(sec_mi2s_rx_port_mixer_controls)),
12587 SND_SOC_DAPM_MIXER("TERT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12588 tert_mi2s_rx_port_mixer_controls,
12589 ARRAY_SIZE(tert_mi2s_rx_port_mixer_controls)),
12590 SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12591 quat_mi2s_rx_port_mixer_controls,
12592 ARRAY_SIZE(quat_mi2s_rx_port_mixer_controls)),
12593 SND_SOC_DAPM_MIXER("PRI_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12594 pri_tdm_rx_0_port_mixer_controls,
12595 ARRAY_SIZE(pri_tdm_rx_0_port_mixer_controls)),
12596 SND_SOC_DAPM_MIXER("PRI_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12597 pri_tdm_rx_1_port_mixer_controls,
12598 ARRAY_SIZE(pri_tdm_rx_1_port_mixer_controls)),
12599 SND_SOC_DAPM_MIXER("PRI_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12600 pri_tdm_rx_2_port_mixer_controls,
12601 ARRAY_SIZE(pri_tdm_rx_2_port_mixer_controls)),
12602 SND_SOC_DAPM_MIXER("PRI_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12603 pri_tdm_rx_3_port_mixer_controls,
12604 ARRAY_SIZE(pri_tdm_rx_3_port_mixer_controls)),
12605 SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12606 sec_tdm_rx_0_port_mixer_controls,
12607 ARRAY_SIZE(sec_tdm_rx_0_port_mixer_controls)),
12608 SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12609 sec_tdm_rx_1_port_mixer_controls,
12610 ARRAY_SIZE(sec_tdm_rx_1_port_mixer_controls)),
12611 SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12612 sec_tdm_rx_2_port_mixer_controls,
12613 ARRAY_SIZE(sec_tdm_rx_2_port_mixer_controls)),
12614 SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12615 sec_tdm_rx_3_port_mixer_controls,
12616 ARRAY_SIZE(sec_tdm_rx_3_port_mixer_controls)),
12617 SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12618 tert_tdm_rx_0_port_mixer_controls,
12619 ARRAY_SIZE(tert_tdm_rx_0_port_mixer_controls)),
12620 SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12621 tert_tdm_rx_1_port_mixer_controls,
12622 ARRAY_SIZE(tert_tdm_rx_1_port_mixer_controls)),
12623 SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12624 tert_tdm_rx_2_port_mixer_controls,
12625 ARRAY_SIZE(tert_tdm_rx_2_port_mixer_controls)),
12626 SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12627 tert_tdm_rx_3_port_mixer_controls,
12628 ARRAY_SIZE(tert_tdm_rx_3_port_mixer_controls)),
12629 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Port Mixer", SND_SOC_NOPM, 0, 0,
12630 quat_tdm_rx_0_port_mixer_controls,
12631 ARRAY_SIZE(quat_tdm_rx_0_port_mixer_controls)),
12632 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Port Mixer", SND_SOC_NOPM, 0, 0,
12633 quat_tdm_rx_1_port_mixer_controls,
12634 ARRAY_SIZE(quat_tdm_rx_1_port_mixer_controls)),
12635 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Port Mixer", SND_SOC_NOPM, 0, 0,
12636 quat_tdm_rx_2_port_mixer_controls,
12637 ARRAY_SIZE(quat_tdm_rx_2_port_mixer_controls)),
12638 SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Port Mixer", SND_SOC_NOPM, 0, 0,
12639 quat_tdm_rx_3_port_mixer_controls,
12640 ARRAY_SIZE(quat_tdm_rx_3_port_mixer_controls)),
12641 SND_SOC_DAPM_MIXER("INT0_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12642 int0_mi2s_rx_port_mixer_controls,
12643 ARRAY_SIZE(int0_mi2s_rx_port_mixer_controls)),
12644 SND_SOC_DAPM_MIXER("INT4_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0,
12645 int4_mi2s_rx_port_mixer_controls,
12646 ARRAY_SIZE(int4_mi2s_rx_port_mixer_controls)),
12647 SND_SOC_DAPM_MIXER("QCHAT_Tx Mixer",
12648 SND_SOC_NOPM, 0, 0, tx_qchat_mixer_controls,
12649 ARRAY_SIZE(tx_qchat_mixer_controls)),
12650 SND_SOC_DAPM_MIXER("USB_AUDIO_RX_Voice Mixer",
12651 SND_SOC_NOPM, 0, 0, usb_audio_rx_voice_mixer_controls,
12652 ARRAY_SIZE(usb_audio_rx_voice_mixer_controls)),
12653 SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer",
12654 SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls,
12655 ARRAY_SIZE(usb_rx_port_mixer_controls)),
12656 /* lsm mixer definitions */
12657 SND_SOC_DAPM_MIXER("LSM1 Mixer", SND_SOC_NOPM, 0, 0,
12658 lsm1_mixer_controls, ARRAY_SIZE(lsm1_mixer_controls)),
12659 SND_SOC_DAPM_MIXER("LSM2 Mixer", SND_SOC_NOPM, 0, 0,
12660 lsm2_mixer_controls, ARRAY_SIZE(lsm2_mixer_controls)),
12661 SND_SOC_DAPM_MIXER("LSM3 Mixer", SND_SOC_NOPM, 0, 0,
12662 lsm3_mixer_controls, ARRAY_SIZE(lsm3_mixer_controls)),
12663 SND_SOC_DAPM_MIXER("LSM4 Mixer", SND_SOC_NOPM, 0, 0,
12664 lsm4_mixer_controls, ARRAY_SIZE(lsm4_mixer_controls)),
12665 SND_SOC_DAPM_MIXER("LSM5 Mixer", SND_SOC_NOPM, 0, 0,
12666 lsm5_mixer_controls, ARRAY_SIZE(lsm5_mixer_controls)),
12667 SND_SOC_DAPM_MIXER("LSM6 Mixer", SND_SOC_NOPM, 0, 0,
12668 lsm6_mixer_controls, ARRAY_SIZE(lsm6_mixer_controls)),
12669 SND_SOC_DAPM_MIXER("LSM7 Mixer", SND_SOC_NOPM, 0, 0,
12670 lsm7_mixer_controls, ARRAY_SIZE(lsm7_mixer_controls)),
12671 SND_SOC_DAPM_MIXER("LSM8 Mixer", SND_SOC_NOPM, 0, 0,
12672 lsm8_mixer_controls, ARRAY_SIZE(lsm8_mixer_controls)),
12673 /* Virtual Pins to force backends ON atm */
12674 SND_SOC_DAPM_OUTPUT("BE_OUT"),
12675 SND_SOC_DAPM_INPUT("BE_IN"),
12676
12677 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_LCH_MUX", SND_SOC_NOPM, 0, 0,
12678 &slim0_rx_vi_fb_lch_mux),
12679 SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_RCH_MUX", SND_SOC_NOPM, 0, 0,
12680 &slim0_rx_vi_fb_rch_mux),
12681 SND_SOC_DAPM_MUX("PRI_MI2S_RX_VI_FB_MUX", SND_SOC_NOPM, 0, 0,
12682 &mi2s_rx_vi_fb_mux),
12683 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_MONO_CH_MUX", SND_SOC_NOPM, 0, 0,
12684 &int4_mi2s_rx_vi_fb_mono_ch_mux),
12685 SND_SOC_DAPM_MUX("INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", SND_SOC_NOPM, 0, 0,
12686 &int4_mi2s_rx_vi_fb_stereo_ch_mux),
12687
12688 SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0,
12689 &voc_ext_ec_mux),
12690 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL1 MUX", SND_SOC_NOPM, 0, 0,
12691 &ext_ec_ref_mux_ul1),
12692 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL2 MUX", SND_SOC_NOPM, 0, 0,
12693 &ext_ec_ref_mux_ul2),
12694 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL3 MUX", SND_SOC_NOPM, 0, 0,
12695 &ext_ec_ref_mux_ul3),
12696 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL4 MUX", SND_SOC_NOPM, 0, 0,
12697 &ext_ec_ref_mux_ul4),
12698 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL5 MUX", SND_SOC_NOPM, 0, 0,
12699 &ext_ec_ref_mux_ul5),
12700 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL6 MUX", SND_SOC_NOPM, 0, 0,
12701 &ext_ec_ref_mux_ul6),
12702 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL8 MUX", SND_SOC_NOPM, 0, 0,
12703 &ext_ec_ref_mux_ul8),
12704 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL9 MUX", SND_SOC_NOPM, 0, 0,
12705 &ext_ec_ref_mux_ul9),
Laxminath Kasam38070be2017-08-17 18:21:59 +053012706 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL10 MUX", SND_SOC_NOPM, 0, 0,
12707 &ext_ec_ref_mux_ul10),
Asish Bhattacharya34504582017-08-08 12:55:01 +053012708 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL16 MUX", SND_SOC_NOPM, 0, 0,
12709 &ext_ec_ref_mux_ul16),
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012710 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL17 MUX", SND_SOC_NOPM, 0, 0,
12711 &ext_ec_ref_mux_ul17),
12712 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL18 MUX", SND_SOC_NOPM, 0, 0,
12713 &ext_ec_ref_mux_ul18),
12714 SND_SOC_DAPM_MUX("AUDIO_REF_EC_UL19 MUX", SND_SOC_NOPM, 0, 0,
12715 &ext_ec_ref_mux_ul19),
12716};
12717
12718static const struct snd_soc_dapm_route intercon[] = {
12719 {"PRI_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12720 {"PRI_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12721 {"PRI_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12722 {"PRI_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12723 {"PRI_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12724 {"PRI_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12725 {"PRI_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12726 {"PRI_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12727 {"PRI_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12728 {"PRI_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12729 {"PRI_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12730 {"PRI_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12731 {"PRI_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12732 {"PRI_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12733 {"PRI_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12734 {"PRI_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12735 {"PRI_I2S_RX", NULL, "PRI_RX Audio Mixer"},
12736
12737 {"SEC_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12738 {"SEC_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12739 {"SEC_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12740 {"SEC_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12741 {"SEC_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12742 {"SEC_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12743 {"SEC_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12744 {"SEC_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12745 {"SEC_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12746 {"SEC_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12747 {"SEC_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12748 {"SEC_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12749 {"SEC_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12750 {"SEC_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12751 {"SEC_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12752 {"SEC_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12753 {"SEC_I2S_RX", NULL, "SEC_RX Audio Mixer"},
12754
12755 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12756 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12757 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12758 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12759 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12760 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12761 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12762 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12763 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12764 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12765 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12766 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12767 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12768 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12769 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12770 {"SLIMBUS_0_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12771 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Audio Mixer"},
12772
12773 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12774 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12775 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12776 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12777 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12778 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12779 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12780 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12781 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12782 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12783 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12784 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12785 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12786 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12787 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12788 {"SLIMBUS_2_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12789 {"SLIMBUS_2_RX", NULL, "SLIMBUS_2_RX Audio Mixer"},
12790
12791 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12792 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12793 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12794 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12795 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12796 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12797 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12798 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12799 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12800 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12801 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12802 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12803 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12804 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12805 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12806 {"SLIMBUS_5_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12807 {"SLIMBUS_5_RX", NULL, "SLIMBUS_5_RX Audio Mixer"},
12808
12809 {"HDMI Mixer", "MultiMedia1", "MM_DL1"},
12810 {"HDMI Mixer", "MultiMedia2", "MM_DL2"},
12811 {"HDMI Mixer", "MultiMedia3", "MM_DL3"},
12812 {"HDMI Mixer", "MultiMedia4", "MM_DL4"},
12813 {"HDMI Mixer", "MultiMedia5", "MM_DL5"},
12814 {"HDMI Mixer", "MultiMedia6", "MM_DL6"},
12815 {"HDMI Mixer", "MultiMedia7", "MM_DL7"},
12816 {"HDMI Mixer", "MultiMedia8", "MM_DL8"},
12817 {"HDMI Mixer", "MultiMedia9", "MM_DL9"},
12818 {"HDMI Mixer", "MultiMedia10", "MM_DL10"},
12819 {"HDMI Mixer", "MultiMedia11", "MM_DL11"},
12820 {"HDMI Mixer", "MultiMedia12", "MM_DL12"},
12821 {"HDMI Mixer", "MultiMedia13", "MM_DL13"},
12822 {"HDMI Mixer", "MultiMedia14", "MM_DL14"},
12823 {"HDMI Mixer", "MultiMedia15", "MM_DL15"},
12824 {"HDMI Mixer", "MultiMedia16", "MM_DL16"},
12825 {"HDMI", NULL, "HDMI Mixer"},
12826
12827 {"DISPLAY_PORT Mixer", "MultiMedia1", "MM_DL1"},
12828 {"DISPLAY_PORT Mixer", "MultiMedia2", "MM_DL2"},
12829 {"DISPLAY_PORT Mixer", "MultiMedia3", "MM_DL3"},
12830 {"DISPLAY_PORT Mixer", "MultiMedia4", "MM_DL4"},
12831 {"DISPLAY_PORT Mixer", "MultiMedia5", "MM_DL5"},
12832 {"DISPLAY_PORT Mixer", "MultiMedia6", "MM_DL6"},
12833 {"DISPLAY_PORT Mixer", "MultiMedia7", "MM_DL7"},
12834 {"DISPLAY_PORT Mixer", "MultiMedia8", "MM_DL8"},
12835 {"DISPLAY_PORT Mixer", "MultiMedia9", "MM_DL9"},
12836 {"DISPLAY_PORT Mixer", "MultiMedia10", "MM_DL10"},
12837 {"DISPLAY_PORT Mixer", "MultiMedia11", "MM_DL11"},
12838 {"DISPLAY_PORT Mixer", "MultiMedia12", "MM_DL12"},
12839 {"DISPLAY_PORT Mixer", "MultiMedia13", "MM_DL13"},
12840 {"DISPLAY_PORT Mixer", "MultiMedia14", "MM_DL14"},
12841 {"DISPLAY_PORT Mixer", "MultiMedia15", "MM_DL15"},
12842 {"DISPLAY_PORT Mixer", "MultiMedia16", "MM_DL16"},
12843 {"DISPLAY_PORT", NULL, "DISPLAY_PORT Mixer"},
12844
12845 {"SPDIF_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12846 {"SPDIF_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12847 {"SPDIF_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12848 {"SPDIF_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12849 {"SPDIF_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12850 {"SPDIF_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12851 {"SPDIF_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12852 {"SPDIF_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12853 {"SPDIF_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12854 {"SPDIF_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12855 {"SPDIF_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12856 {"SPDIF_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12857 {"SPDIF_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12858 {"SPDIF_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12859 {"SPDIF_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12860 {"SPDIF_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12861 {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"},
12862
12863 /* incall */
12864 {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"},
12865 {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"},
12866 {"Incall_Music Audio Mixer", "MultiMedia5", "MM_DL5"},
12867 {"Incall_Music Audio Mixer", "MultiMedia9", "MM_DL9"},
12868 {"VOICE_PLAYBACK_TX", NULL, "Incall_Music Audio Mixer"},
12869 {"Incall_Music_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
12870 {"Incall_Music_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
12871 {"Incall_Music_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
12872 {"Incall_Music_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
12873 {"VOICE2_PLAYBACK_TX", NULL, "Incall_Music_2 Audio Mixer"},
12874 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12875 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12876 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12877 {"SLIMBUS_4_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12878 {"SLIMBUS_4_RX", NULL, "SLIMBUS_4_RX Audio Mixer"},
12879
12880 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12881 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12882 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12883 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12884 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12885 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12886 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12887 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12888 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12889 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12890 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12891 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12892 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12893 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12894 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12895 {"SLIMBUS_6_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12896 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Audio Mixer"},
12897
12898 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12899 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12900 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12901 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12902 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12903 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12904 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12905 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12906 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12907 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12908 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12909 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12910 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12911 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12912 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12913 {"SLIMBUS_7_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12914 {"SLIMBUS_7_RX", NULL, "SLIMBUS_7_RX Audio Mixer"},
12915
12916 {"USB_AUDIO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12917 {"USB_AUDIO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12918 {"USB_AUDIO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12919 {"USB_AUDIO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12920 {"USB_AUDIO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12921 {"USB_AUDIO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12922 {"USB_AUDIO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12923 {"USB_AUDIO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12924 {"USB_AUDIO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12925 {"USB_AUDIO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12926 {"USB_AUDIO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12927 {"USB_AUDIO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12928 {"USB_AUDIO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12929 {"USB_AUDIO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12930 {"USB_AUDIO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12931 {"USB_AUDIO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12932 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Audio Mixer"},
12933
12934 {"MultiMedia1 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12935 {"MultiMedia4 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12936 {"MultiMedia8 Mixer", "VOC_REC_UL", "INCALL_RECORD_TX"},
12937 {"MultiMedia1 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12938 {"MultiMedia4 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12939 {"MultiMedia8 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
12940 {"MultiMedia1 Mixer", "SLIM_4_TX", "SLIMBUS_4_TX"},
12941 {"MultiMedia1 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12942 {"MultiMedia1 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12943 {"MultiMedia1 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
12944 {"MultiMedia8 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
12945 {"MultiMedia8 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12946 {"MultiMedia4 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12947 {"MultiMedia17 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12948 {"MultiMedia18 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12949 {"MultiMedia19 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12950 {"MultiMedia8 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12951 {"MultiMedia2 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12952 {"MultiMedia4 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12953 {"MultiMedia17 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12954 {"MultiMedia18 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12955 {"MultiMedia19 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12956 {"MultiMedia8 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
12957 {"MultiMedia18 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
12958 {"MultiMedia8 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
12959 {"MultiMedia3 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
12960 {"MultiMedia5 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053012961 {"MultiMedia10 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053012962 {"MultiMedia16 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012963 {"MultiMedia5 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
12964 {"MultiMedia5 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053012965 {"MultiMedia10 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053012966 {"MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12967 {"MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12968 {"MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12969 {"MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12970 {"MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12971 {"MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12972 {"MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12973 {"MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12974 {"MI2S_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
12975 {"MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12976 {"MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12977 {"MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12978 {"MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12979 {"MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12980 {"MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12981 {"MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12982 {"MI2S_RX", NULL, "MI2S_RX Audio Mixer"},
12983
12984 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
12985 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
12986 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
12987 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
12988 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
12989 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
12990 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
12991 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
12992 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
12993 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
12994 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
12995 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
12996 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
12997 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
12998 {"QUAT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
12999 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Audio Mixer"},
13000
13001 {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13002 {"TERT_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13003 {"TERT_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13004 {"TERT_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13005 {"TERT_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13006 {"TERT_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13007 {"TERT_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13008 {"TERT_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13009 {"TERT_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13010 {"TERT_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13011 {"TERT_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13012 {"TERT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13013 {"TERT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13014 {"TERT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13015 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Audio Mixer"},
13016
13017 {"SEC_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13018 {"SEC_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13019 {"SEC_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13020 {"SEC_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13021 {"SEC_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13022 {"SEC_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13023 {"SEC_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13024 {"SEC_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13025 {"SEC_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13026 {"SEC_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13027 {"SEC_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13028 {"SEC_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13029 {"SEC_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13030 {"SEC_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13031 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"},
13032
13033 {"SEC_MI2S_RX_SD1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13034 {"SEC_MI2S_RX_SD1", NULL, "SEC_MI2S_RX_SD1 Audio Mixer"},
13035
13036 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13037 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13038
13039 {"PRI_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13040 {"PRI_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13041 {"PRI_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13042 {"PRI_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13043 {"PRI_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13044 {"PRI_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13045 {"PRI_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13046 {"PRI_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13047 {"PRI_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13048 {"PRI_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13049 {"PRI_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13050 {"PRI_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13051 {"PRI_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13052 {"PRI_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13053 {"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13054 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
13055
13056 {"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13057 {"INT0_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13058 {"INT0_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13059 {"INT0_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13060 {"INT0_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13061 {"INT0_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13062 {"INT0_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13063 {"INT0_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13064 {"INT0_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13065 {"INT0_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13066 {"INT0_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13067 {"INT0_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13068 {"INT0_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13069 {"INT0_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13070 {"INT0_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13071 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Audio Mixer"},
13072
13073 {"INT4_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13074 {"INT4_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13075 {"INT4_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13076 {"INT4_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13077 {"INT4_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13078 {"INT4_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13079 {"INT4_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13080 {"INT4_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13081 {"INT4_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13082 {"INT4_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13083 {"INT4_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13084 {"INT4_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13085 {"INT4_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13086 {"INT4_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13087 {"INT4_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13088 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Audio Mixer"},
13089
13090 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13091 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13092 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13093 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13094 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13095 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13096 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13097 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13098 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13099 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13100 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13101 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13102 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13103 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13104 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13105 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13106 {"QUIN_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13107 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX Audio Mixer"},
13108
13109 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13110 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13111 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13112 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13113 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13114 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13115 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13116 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13117 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13118 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13119 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13120 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13121 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13122 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13123 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13124 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13125 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
13126
13127 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13128 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13129 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13130 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13131 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13132 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13133 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13134 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13135 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13136 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13137 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13138 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13139 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13140 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13141 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13142 {"PRI_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13143 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Audio Mixer"},
13144
13145 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13146 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13147 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13148 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13149 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13150 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13151 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13152 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13153 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13154 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13155 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13156 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13157 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13158 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13159 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13160 {"PRI_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13161 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Audio Mixer"},
13162
13163 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13164 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13165 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13166 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13167 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13168 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13169 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13170 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13171 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13172 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13173 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13174 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13175 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13176 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13177 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13178 {"PRI_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13179 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Audio Mixer"},
13180
13181 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13182 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13183 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13184 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13185 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13186 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13187 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13188 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13189 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13190 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13191 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13192 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13193 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13194 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13195 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13196 {"PRI_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13197 {"PRI_TDM_TX_0", NULL, "PRI_TDM_TX_0 Audio Mixer"},
13198
13199 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13200 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13201 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13202 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13203 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13204 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13205 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13206 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13207 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13208 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13209 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13210 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13211 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13212 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13213 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13214 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13215 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
13216
13217 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13218 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13219 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13220 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13221 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13222 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13223 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13224 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13225 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13226 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13227 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13228 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13229 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13230 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13231 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13232 {"SEC_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13233 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Audio Mixer"},
13234
13235 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13236 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13237 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13238 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13239 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13240 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13241 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13242 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13243 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13244 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13245 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13246 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13247 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13248 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13249 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13250 {"SEC_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13251 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Audio Mixer"},
13252
13253 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13254 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13255 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13256 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13257 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13258 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13259 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13260 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13261 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13262 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13263 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13264 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13265 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13266 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13267 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13268 {"SEC_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13269 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Audio Mixer"},
13270
13271 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13272 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13273 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13274 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13275 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13276 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13277 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13278 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13279 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13280 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13281 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13282 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13283 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13284 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13285 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13286 {"SEC_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13287 {"SEC_TDM_TX_0", NULL, "SEC_TDM_TX_0 Audio Mixer"},
13288
13289 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13290 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13291 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13292 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13293 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13294 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13295 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13296 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13297 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13298 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13299 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13300 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13301 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13302 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13303 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13304 {"TERT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13305 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Audio Mixer"},
13306
13307 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13308 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13309 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13310 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13311 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13312 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13313 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13314 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13315 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13316 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13317 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13318 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13319 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13320 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13321 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13322 {"TERT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13323 {"TERT_TDM_TX_0", NULL, "TERT_TDM_TX_0 Audio Mixer"},
13324
13325 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13326 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13327 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13328 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13329 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13330 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13331 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13332 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13333 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13334 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13335 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13336 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13337 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13338 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13339 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13340 {"TERT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13341 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Audio Mixer"},
13342
13343 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13344 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13345 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13346 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13347 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13348 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13349 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13350 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13351 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13352 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13353 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13354 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13355 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13356 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13357 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13358 {"TERT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13359 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Audio Mixer"},
13360
13361 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13362 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13363 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13364 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13365 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13366 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13367 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13368 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13369 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13370 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13371 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13372 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13373 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13374 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13375 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13376 {"TERT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13377 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Audio Mixer"},
13378
13379 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia1", "MM_DL1"},
13380 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia2", "MM_DL2"},
13381 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia3", "MM_DL3"},
13382 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia4", "MM_DL4"},
13383 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia5", "MM_DL5"},
13384 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia6", "MM_DL6"},
13385 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia7", "MM_DL7"},
13386 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia8", "MM_DL8"},
13387 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia9", "MM_DL9"},
13388 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia10", "MM_DL10"},
13389 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia11", "MM_DL11"},
13390 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia12", "MM_DL12"},
13391 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia13", "MM_DL13"},
13392 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia14", "MM_DL14"},
13393 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia15", "MM_DL15"},
13394 {"TERT_TDM_RX_4 Audio Mixer", "MultiMedia16", "MM_DL16"},
13395 {"TERT_TDM_RX_4", NULL, "TERT_TDM_RX_4 Audio Mixer"},
13396
13397 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13398 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13399 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13400 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13401 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13402 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13403 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13404 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13405 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13406 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13407 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13408 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13409 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13410 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13411 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13412 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13413 {"QUAT_TDM_RX_0 Audio Mixer", "MultiMedia20", "MM_DL20"},
13414 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Audio Mixer"},
13415
13416 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13417 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13418 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13419 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13420 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13421 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13422 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13423 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13424 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13425 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13426 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13427 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13428 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13429 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13430 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13431 {"PRI_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13432 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Audio Mixer"},
13433
13434 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13435 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13436 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13437 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13438 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13439 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13440 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13441 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13442 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13443 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13444 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13445 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13446 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13447 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13448 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13449 {"SEC_TDM_RX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13450 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Audio Mixer"},
13451
13452 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia1", "MM_DL1"},
13453 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia2", "MM_DL2"},
13454 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia3", "MM_DL3"},
13455 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia4", "MM_DL4"},
13456 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia5", "MM_DL5"},
13457 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia6", "MM_DL6"},
13458 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia7", "MM_DL7"},
13459 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia8", "MM_DL8"},
13460 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia9", "MM_DL9"},
13461 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia10", "MM_DL10"},
13462 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia11", "MM_DL11"},
13463 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia12", "MM_DL12"},
13464 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia13", "MM_DL13"},
13465 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia14", "MM_DL14"},
13466 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia15", "MM_DL15"},
13467 {"QUAT_TDM_TX_0 Audio Mixer", "MultiMedia16", "MM_DL16"},
13468 {"QUAT_TDM_TX_0", NULL, "QUAT_TDM_TX_0 Audio Mixer"},
13469
13470 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia1", "MM_DL1"},
13471 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia2", "MM_DL2"},
13472 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia3", "MM_DL3"},
13473 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia4", "MM_DL4"},
13474 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia5", "MM_DL5"},
13475 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia6", "MM_DL6"},
13476 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia7", "MM_DL7"},
13477 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia8", "MM_DL8"},
13478 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia9", "MM_DL9"},
13479 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia10", "MM_DL10"},
13480 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia11", "MM_DL11"},
13481 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia12", "MM_DL12"},
13482 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia13", "MM_DL13"},
13483 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia14", "MM_DL14"},
13484 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia15", "MM_DL15"},
13485 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia16", "MM_DL16"},
13486 {"QUAT_TDM_RX_1 Audio Mixer", "MultiMedia20", "MM_DL20"},
13487 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Audio Mixer"},
13488
13489 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia1", "MM_DL1"},
13490 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia2", "MM_DL2"},
13491 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia3", "MM_DL3"},
13492 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia4", "MM_DL4"},
13493 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia5", "MM_DL5"},
13494 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia6", "MM_DL6"},
13495 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia7", "MM_DL7"},
13496 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia8", "MM_DL8"},
13497 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia9", "MM_DL9"},
13498 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia10", "MM_DL10"},
13499 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia11", "MM_DL11"},
13500 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia12", "MM_DL12"},
13501 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia13", "MM_DL13"},
13502 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia14", "MM_DL14"},
13503 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia15", "MM_DL15"},
13504 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia16", "MM_DL16"},
13505 {"QUAT_TDM_RX_2 Audio Mixer", "MultiMedia20", "MM_DL20"},
13506 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Audio Mixer"},
13507
13508 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia1", "MM_DL1"},
13509 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia2", "MM_DL2"},
13510 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia3", "MM_DL3"},
13511 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia4", "MM_DL4"},
13512 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia5", "MM_DL5"},
13513 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia6", "MM_DL6"},
13514 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia7", "MM_DL7"},
13515 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia8", "MM_DL8"},
13516 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia9", "MM_DL9"},
13517 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia10", "MM_DL10"},
13518 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia11", "MM_DL11"},
13519 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia12", "MM_DL12"},
13520 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia13", "MM_DL13"},
13521 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia14", "MM_DL14"},
13522 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia15", "MM_DL15"},
13523 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia16", "MM_DL16"},
13524 {"QUAT_TDM_RX_3 Audio Mixer", "MultiMedia20", "MM_DL20"},
13525 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Audio Mixer"},
13526
13527 {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"},
13528 {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"},
13529 {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"},
13530 {"MultiMedia3 Mixer", "MI2S_TX", "MI2S_TX"},
13531 {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013532 {"MultiMedia10 Mixer", "MI2S_TX", "MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013533 {"MultiMedia16 Mixer", "MI2S_TX", "MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013534 {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13535 {"MultiMedia2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13536 {"MultiMedia6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13537 {"MultiMedia1 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13538 {"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
13539 {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13540 {"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13541 {"MultiMedia1 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13542 {"MultiMedia2 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13543 {"MultiMedia1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13544 {"MultiMedia2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13545 {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13546 {"MultiMedia1 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13547 {"MultiMedia3 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
13548 {"MultiMedia5 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013549 {"MultiMedia10 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013550 {"MultiMedia1 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13551 {"MultiMedia3 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
13552 {"MultiMedia5 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013553 {"MultiMedia10 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013554 {"MultiMedia16 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
13555 {"MultiMedia16 Mixer", "SEC_AUX_PCM_TX", "SEC_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013556 {"MultiMedia1 Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
13557 {"MultiMedia3 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
13558 {"MultiMedia5 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013559 {"MultiMedia10 Mixer", "TERT_AUX_PCM_TX", "TERT_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013560 {"MultiMedia1 Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
13561 {"MultiMedia3 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
13562 {"MultiMedia5 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013563 {"MultiMedia10 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013564 {"MultiMedia16 Mixer", "QUAT_AUX_PCM_TX", "QUAT_AUX_PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013565 {"MultiMedia2 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13566 {"MultiMedia2 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
13567 {"MultiMedia2 Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
13568 {"MultiMedia2 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
13569 {"MultiMedia1 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13570 {"MultiMedia1 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13571 {"MultiMedia2 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13572 {"MultiMedia6 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
13573 {"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13574 {"MultiMedia3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13575 {"MultiMedia5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013576 {"MultiMedia10 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013577 {"MultiMedia6 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13578 {"MultiMedia3 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
13579 {"MultiMedia5 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013580 {"MultiMedia10 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013581 {"MultiMedia16 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013582 {"MultiMedia6 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13583 {"MultiMedia3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
13584 {"MultiMedia5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013585 {"MultiMedia10 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013586 {"MultiMedia16 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013587 {"MultiMedia6 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13588 {"MultiMedia6 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
13589 {"MultiMedia6 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
13590 {"MultiMedia6 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13591
13592 {"MultiMedia1 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13593 {"MultiMedia1 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13594 {"MultiMedia1 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13595 {"MultiMedia1 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13596 {"MultiMedia1 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13597 {"MultiMedia1 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13598 {"MultiMedia1 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13599 {"MultiMedia1 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13600 {"MultiMedia1 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13601 {"MultiMedia1 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13602 {"MultiMedia1 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13603 {"MultiMedia1 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13604 {"MultiMedia1 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13605 {"MultiMedia1 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13606 {"MultiMedia1 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13607 {"MultiMedia1 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13608
13609 {"MultiMedia2 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13610 {"MultiMedia2 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13611 {"MultiMedia2 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13612 {"MultiMedia2 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13613 {"MultiMedia2 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13614 {"MultiMedia2 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13615 {"MultiMedia2 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13616 {"MultiMedia2 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13617 {"MultiMedia2 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13618 {"MultiMedia2 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13619 {"MultiMedia2 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13620 {"MultiMedia2 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13621 {"MultiMedia2 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13622 {"MultiMedia2 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13623 {"MultiMedia2 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13624 {"MultiMedia2 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13625
13626 {"MultiMedia3 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13627 {"MultiMedia3 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13628 {"MultiMedia3 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13629 {"MultiMedia3 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13630 {"MultiMedia3 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13631 {"MultiMedia3 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13632 {"MultiMedia3 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13633 {"MultiMedia3 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13634 {"MultiMedia3 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13635 {"MultiMedia3 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13636 {"MultiMedia3 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13637 {"MultiMedia3 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13638 {"MultiMedia3 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13639 {"MultiMedia3 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13640 {"MultiMedia3 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13641 {"MultiMedia3 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13642
13643 {"MultiMedia4 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13644 {"MultiMedia4 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13645 {"MultiMedia4 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13646 {"MultiMedia4 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13647 {"MultiMedia4 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13648 {"MultiMedia4 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13649 {"MultiMedia4 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13650 {"MultiMedia4 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13651 {"MultiMedia4 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13652 {"MultiMedia4 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13653 {"MultiMedia4 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13654 {"MultiMedia4 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13655 {"MultiMedia4 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13656 {"MultiMedia4 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13657 {"MultiMedia4 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13658 {"MultiMedia4 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13659
13660 {"MultiMedia5 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13661 {"MultiMedia5 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13662 {"MultiMedia5 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13663 {"MultiMedia5 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13664 {"MultiMedia5 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13665 {"MultiMedia5 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13666 {"MultiMedia5 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13667 {"MultiMedia5 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13668 {"MultiMedia5 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13669 {"MultiMedia5 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13670 {"MultiMedia5 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13671 {"MultiMedia5 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13672 {"MultiMedia5 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13673 {"MultiMedia5 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13674 {"MultiMedia5 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13675 {"MultiMedia5 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13676
13677 {"MultiMedia6 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13678 {"MultiMedia6 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13679 {"MultiMedia6 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13680 {"MultiMedia6 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13681 {"MultiMedia6 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13682 {"MultiMedia6 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13683 {"MultiMedia6 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13684 {"MultiMedia6 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13685 {"MultiMedia6 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13686 {"MultiMedia6 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13687 {"MultiMedia6 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13688 {"MultiMedia6 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13689 {"MultiMedia6 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13690 {"MultiMedia6 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13691 {"MultiMedia6 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13692 {"MultiMedia6 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13693
13694 {"MultiMedia8 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13695 {"MultiMedia8 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13696 {"MultiMedia8 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13697 {"MultiMedia8 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13698 {"MultiMedia8 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13699 {"MultiMedia8 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13700 {"MultiMedia8 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13701 {"MultiMedia8 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13702 {"MultiMedia8 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13703 {"MultiMedia8 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13704 {"MultiMedia8 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13705 {"MultiMedia8 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13706 {"MultiMedia8 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13707 {"MultiMedia8 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13708 {"MultiMedia8 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13709 {"MultiMedia8 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13710
13711 {"MultiMedia9 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13712 {"MultiMedia9 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13713 {"MultiMedia9 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13714 {"MultiMedia9 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13715 {"MultiMedia9 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13716 {"MultiMedia9 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13717 {"MultiMedia9 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13718 {"MultiMedia9 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13719
Laxminath Kasam38070be2017-08-17 18:21:59 +053013720 {"MultiMedia10 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13721 {"MultiMedia10 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13722 {"MultiMedia10 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13723 {"MultiMedia10 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13724 {"MultiMedia10 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13725 {"MultiMedia10 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13726 {"MultiMedia10 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13727 {"MultiMedia10 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013728 {"MultiMedia20 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
13729 {"MultiMedia20 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
13730 {"MultiMedia20 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
13731 {"MultiMedia20 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
13732 {"MultiMedia20 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13733 {"MultiMedia20 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13734 {"MultiMedia20 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13735 {"MultiMedia20 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13736 {"MultiMedia20 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13737 {"MultiMedia20 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13738 {"MultiMedia20 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13739 {"MultiMedia20 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13740 {"MultiMedia20 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13741 {"MultiMedia20 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13742 {"MultiMedia20 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13743 {"MultiMedia20 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13744 {"MultiMedia20 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13745 {"MultiMedia20 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13746 {"MultiMedia20 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13747 {"MultiMedia20 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13748
13749 {"MultiMedia1 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13750 {"MultiMedia2 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13751 {"MultiMedia4 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13752 {"MultiMedia5 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13753 {"MultiMedia6 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13754 {"MultiMedia8 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013755 {"MultiMedia10 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013756
Asish Bhattacharya34504582017-08-08 12:55:01 +053013757 {"MultiMedia16 Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
13758 {"MultiMedia16 Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
13759 {"MultiMedia16 Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
13760 {"MultiMedia16 Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
13761 {"MultiMedia16 Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
13762 {"MultiMedia16 Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
13763 {"MultiMedia16 Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
13764 {"MultiMedia16 Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
13765 {"MultiMedia16 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
13766 {"MultiMedia16 Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
13767 {"MultiMedia16 Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
13768 {"MultiMedia16 Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
13769 {"MultiMedia16 Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
13770 {"MultiMedia16 Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
13771 {"MultiMedia16 Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
13772 {"MultiMedia16 Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
13773 {"MultiMedia16 Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
13774
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013775 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13776 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13777 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13778 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13779 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13780 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13781 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13782 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13783 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13784 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13785 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13786 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13787 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13788 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13789 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13790 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13791 {"INTERNAL_BT_SCO_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13792 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Audio Mixer"},
13793
13794 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13795 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13796 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13797 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13798 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13799 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13800 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13801 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13802 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13803 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13804 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13805 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13806 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13807 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13808 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13809 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13810 {"INTERNAL_A2DP_RX Audio Mixer", "MultiMedia6", "MM_UL6"},
13811 {"INT_BT_A2DP_RX", NULL, "INTERNAL_A2DP_RX Audio Mixer"},
13812
13813 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13814 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13815 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13816 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13817 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13818 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13819 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13820 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13821 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13822 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13823 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13824 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13825 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13826 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13827 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13828 {"INTERNAL_FM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13829 {"INT_FM_RX", NULL, "INTERNAL_FM_RX Audio Mixer"},
13830
13831 {"AFE_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13832 {"AFE_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13833 {"AFE_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13834 {"AFE_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13835 {"AFE_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13836 {"AFE_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13837 {"AFE_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13838 {"AFE_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13839 {"AFE_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13840 {"AFE_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13841 {"AFE_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13842 {"AFE_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13843 {"AFE_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13844 {"AFE_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13845 {"AFE_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13846 {"AFE_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13847 {"PCM_RX", NULL, "AFE_PCM_RX Audio Mixer"},
13848
13849 {"MultiMedia1 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13850 {"MultiMedia3 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13851 {"MultiMedia4 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013852 {"MultiMedia10 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013853 {"MultiMedia17 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13854 {"MultiMedia18 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13855 {"MultiMedia19 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13856 {"MultiMedia5 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
13857 {"MultiMedia8 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013858 {"MultiMedia16 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013859 {"MultiMedia1 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13860 {"MultiMedia4 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013861 {"MultiMedia16 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013862 {"MultiMedia17 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13863 {"MultiMedia18 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13864 {"MultiMedia19 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13865 {"MultiMedia5 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13866 {"MultiMedia6 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13867 {"MultiMedia8 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13868
13869 {"MultiMedia1 Mixer", "AFE_PCM_TX", "PCM_TX"},
13870 {"MultiMedia3 Mixer", "AFE_PCM_TX", "PCM_TX"},
13871 {"MultiMedia4 Mixer", "AFE_PCM_TX", "PCM_TX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013872 {"MultiMedia10 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013873 {"MultiMedia17 Mixer", "AFE_PCM_TX", "PCM_TX"},
13874 {"MultiMedia18 Mixer", "AFE_PCM_TX", "PCM_TX"},
13875 {"MultiMedia19 Mixer", "AFE_PCM_TX", "PCM_TX"},
13876 {"MultiMedia5 Mixer", "AFE_PCM_TX", "PCM_TX"},
13877 {"MultiMedia8 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013878 {"MultiMedia16 Mixer", "AFE_PCM_TX", "PCM_TX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013879 {"MM_UL1", NULL, "MultiMedia1 Mixer"},
13880 {"MultiMedia2 Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
13881 {"MM_UL2", NULL, "MultiMedia2 Mixer"},
13882 {"MM_UL3", NULL, "MultiMedia3 Mixer"},
13883 {"MM_UL4", NULL, "MultiMedia4 Mixer"},
13884 {"MM_UL5", NULL, "MultiMedia5 Mixer"},
13885 {"MM_UL6", NULL, "MultiMedia6 Mixer"},
13886 {"MM_UL8", NULL, "MultiMedia8 Mixer"},
13887 {"MM_UL9", NULL, "MultiMedia9 Mixer"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053013888 {"MM_UL10", NULL, "MultiMedia10 Mixer"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053013889 {"MM_UL16", NULL, "MultiMedia16 Mixer"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053013890 {"MM_UL17", NULL, "MultiMedia17 Mixer"},
13891 {"MM_UL18", NULL, "MultiMedia18 Mixer"},
13892 {"MM_UL19", NULL, "MultiMedia19 Mixer"},
13893 {"MM_UL20", NULL, "MultiMedia20 Mixer"},
13894
13895 {"AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13896 {"AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13897 {"AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13898 {"AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13899 {"AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13900 {"AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13901 {"AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13902 {"AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13903 {"AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13904 {"AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13905 {"AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13906 {"AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13907 {"AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13908 {"AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13909 {"AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13910 {"AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13911 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Audio Mixer"},
13912
13913 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13914 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13915 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13916 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13917 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13918 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13919 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13920 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13921 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13922 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13923 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13924 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13925 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13926 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13927 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13928 {"SEC_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13929 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX Audio Mixer"},
13930
13931 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13932 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13933 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13934 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13935 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13936 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13937 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13938 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13939 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13940 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13941 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13942 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13943 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13944 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13945 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13946 {"TERT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13947 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX Audio Mixer"},
13948
13949 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
13950 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
13951 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
13952 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
13953 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
13954 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
13955 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
13956 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
13957 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia9", "MM_DL9"},
13958 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
13959 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
13960 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
13961 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
13962 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
13963 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
13964 {"QUAT_AUX_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
13965 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX Audio Mixer"},
13966
13967 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13968 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13969 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
13970 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
13971 {"MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13972 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13973 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13974 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13975 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
13976
13977 {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13978 {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13979 {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13980 {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13981 {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"},
13982 {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13983 {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13984 {"PRI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
13985 {"PRI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
13986 {"PRI_I2S_RX", NULL, "PRI_RX_Voice Mixer"},
13987
13988 {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13989 {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13990 {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
13991 {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
13992 {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"},
13993 {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
13994 {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
13995 {"SEC_I2S_RX", NULL, "SEC_RX_Voice Mixer"},
13996
13997 {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
13998 {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
13999 {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14000 {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14001 {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14002 {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14003 {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14004 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14005 {"SEC_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14006 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_Voice Mixer"},
14007
14008 {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14009 {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14010 {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14011 {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14012 {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"},
14013 {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14014 {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14015 {"SLIM_0_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14016 {"SLIM_0_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14017 {"SLIM_0_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14018 {"SLIM_0_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14019 {"SLIM_0_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14020 {"SLIMBUS_0_RX", NULL, "SLIM_0_RX_Voice Mixer"},
14021
14022 {"SLIM_6_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14023 {"SLIM_6_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14024 {"SLIM_6_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14025 {"SLIM_6_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14026 {"SLIM_6_RX_Voice Mixer", "Voip", "VOIP_DL"},
14027 {"SLIM_6_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14028 {"SLIM_6_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14029 {"SLIM_6_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14030 {"SLIM_6_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14031 {"SLIM_6_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14032 {"SLIM_6_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14033 {"SLIM_6_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14034 {"SLIMBUS_6_RX", NULL, "SLIM_6_RX_Voice Mixer"},
14035
14036 {"USB_AUDIO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14037 {"USB_AUDIO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14038 {"USB_AUDIO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14039 {"USB_AUDIO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14040 {"USB_AUDIO_RX_Voice Mixer", "Voip", "VOIP_DL"},
14041 {"USB_AUDIO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14042 {"USB_AUDIO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14043 {"USB_AUDIO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14044 {"USB_AUDIO_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14045 {"USB_AUDIO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14046 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14047 {"USB_AUDIO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14048 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX_Voice Mixer"},
14049
14050 {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14051 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14052 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14053 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14054 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"},
14055 {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14056 {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14057 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14058 {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14059 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14060 {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14061 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX_Voice Mixer"},
14062
14063 {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14064 {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14065 {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14066 {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14067 {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14068 {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14069 {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14070 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14071 {"AFE_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14072 {"PCM_RX", NULL, "AFE_PCM_RX_Voice Mixer"},
14073
14074 {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14075 {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14076 {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14077 {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14078 {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14079 {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14080 {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14081 {"AUX_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14082 {"AUX_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14083 {"AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14084 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14085 {"AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14086 {"AUX_PCM_RX", NULL, "AUX_PCM_RX_Voice Mixer"},
14087
14088 {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14089 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14090 {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14091 {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14092 {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14093 {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14094 {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14095 {"SEC_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14096 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14097 {"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14098 {"SEC_AUX_PCM_RX", NULL, "SEC_AUX_PCM_RX_Voice Mixer"},
14099
14100 {"TERT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14101 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14102 {"TERT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14103 {"TERT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14104 {"TERT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14105 {"TERT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14106 {"TERT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14107 {"TERT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14108 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14109 {"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14110 {"TERT_AUX_PCM_RX", NULL, "TERT_AUX_PCM_RX_Voice Mixer"},
14111
14112 {"QUAT_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14113 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14114 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14115 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14116 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
14117 {"QUAT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14118 {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14119 {"QUAT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14120 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14121 {"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14122 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUX_PCM_RX_Voice Mixer"},
14123
14124 {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14125 {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14126 {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14127 {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14128 {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"},
14129 {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14130 {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14131 {"HDMI_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14132 {"HDMI_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14133 {"HDMI", NULL, "HDMI_RX_Voice Mixer"},
14134 {"HDMI", NULL, "HDMI_DL_HL"},
14135
14136 {"MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14137 {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14138 {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14139 {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14140 {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14141 {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14142 {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14143 {"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14144 {"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14145 {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
14146
14147 {"PRI_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14148 {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14149 {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14150 {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14151 {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14152 {"PRI_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14153 {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14154 {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14155 {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14156 {"PRI_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14157 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14158 {"PRI_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14159 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_Voice Mixer"},
14160
14161 {"INT0_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14162 {"INT0_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14163 {"INT0_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14164 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14165 {"INT0_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14166 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_Voice Mixer"},
14167
14168 {"INT4_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14169 {"INT4_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14170 {"INT4_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14171 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14172 {"INT4_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14173 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_Voice Mixer"},
14174
14175 {"TERT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14176 {"TERT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14177 {"TERT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14178 {"TERT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14179 {"TERT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14180 {"TERT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14181 {"TERT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14182 {"TERT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14183 {"TERT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14184 {"TERT_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
14185 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14186 {"TERT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14187 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_Voice Mixer"},
14188
14189 {"QUAT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14190 {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14191 {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14192 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14193 {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14194 {"QUAT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14195 {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14196 {"QUAT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14197 {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14198 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14199 {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14200 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"},
14201
14202 {"QUIN_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
14203 {"QUIN_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
14204 {"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
14205 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
14206 {"QUIN_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
14207 {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
14208 {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
14209 {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
14210 {"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
14211 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14212 {"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
14213 {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX_Voice Mixer"},
14214
14215 {"QUAT_TDM_RX_2_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
14216 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_Voice Mixer"},
14217
14218 {"VOC_EXT_EC MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14219 {"VOC_EXT_EC MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14220 {"VOC_EXT_EC MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14221 {"VOC_EXT_EC MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14222 {"VOC_EXT_EC MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14223 {"CS-VOICE_UL1", NULL, "VOC_EXT_EC MUX"},
14224 {"VOIP_UL", NULL, "VOC_EXT_EC MUX"},
14225 {"VoLTE_UL", NULL, "VOC_EXT_EC MUX"},
14226 {"VOICE2_UL", NULL, "VOC_EXT_EC MUX"},
14227 {"VoWLAN_UL", NULL, "VOC_EXT_EC MUX"},
14228 {"VOICEMMODE1_UL", NULL, "VOC_EXT_EC MUX"},
14229 {"VOICEMMODE2_UL", NULL, "VOC_EXT_EC MUX"},
14230
14231 {"AUDIO_REF_EC_UL1 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14232 {"AUDIO_REF_EC_UL1 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14233 {"AUDIO_REF_EC_UL1 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14234 {"AUDIO_REF_EC_UL1 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14235 {"AUDIO_REF_EC_UL1 MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14236 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14237 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_0", "QUAT_TDM_RX_0"},
14238 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_1", "QUAT_TDM_RX_1"},
14239 {"AUDIO_REF_EC_UL1 MUX", "QUAT_TDM_RX_2", "QUAT_TDM_RX_2"},
14240 {"AUDIO_REF_EC_UL1 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14241
14242 {"AUDIO_REF_EC_UL2 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14243 {"AUDIO_REF_EC_UL2 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14244 {"AUDIO_REF_EC_UL2 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14245 {"AUDIO_REF_EC_UL2 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14246
14247 {"AUDIO_REF_EC_UL3 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14248 {"AUDIO_REF_EC_UL3 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14249 {"AUDIO_REF_EC_UL3 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14250 {"AUDIO_REF_EC_UL3 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14251
14252 {"AUDIO_REF_EC_UL4 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14253 {"AUDIO_REF_EC_UL4 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14254 {"AUDIO_REF_EC_UL4 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14255 {"AUDIO_REF_EC_UL4 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14256
14257 {"AUDIO_REF_EC_UL5 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14258 {"AUDIO_REF_EC_UL5 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14259 {"AUDIO_REF_EC_UL5 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14260 {"AUDIO_REF_EC_UL5 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14261
14262 {"AUDIO_REF_EC_UL6 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14263 {"AUDIO_REF_EC_UL6 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14264 {"AUDIO_REF_EC_UL6 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14265 {"AUDIO_REF_EC_UL6 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14266
14267 {"AUDIO_REF_EC_UL8 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14268 {"AUDIO_REF_EC_UL8 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14269 {"AUDIO_REF_EC_UL8 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14270 {"AUDIO_REF_EC_UL8 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14271
14272 {"AUDIO_REF_EC_UL9 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14273 {"AUDIO_REF_EC_UL9 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14274 {"AUDIO_REF_EC_UL9 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14275 {"AUDIO_REF_EC_UL9 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14276
Laxminath Kasam38070be2017-08-17 18:21:59 +053014277 {"AUDIO_REF_EC_UL10 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14278 {"AUDIO_REF_EC_UL10 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14279 {"AUDIO_REF_EC_UL10 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14280 {"AUDIO_REF_EC_UL10 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14281 {"AUDIO_REF_EC_UL10 MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
14282 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14283 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_0", "QUAT_TDM_RX_0"},
14284 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_1", "QUAT_TDM_RX_1"},
14285 {"AUDIO_REF_EC_UL10 MUX", "QUAT_TDM_RX_2", "QUAT_TDM_RX_2"},
14286 {"AUDIO_REF_EC_UL10 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053014287 {"AUDIO_REF_EC_UL17 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14288 {"AUDIO_REF_EC_UL17 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14289 {"AUDIO_REF_EC_UL17 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14290 {"AUDIO_REF_EC_UL17 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14291
14292 {"AUDIO_REF_EC_UL18 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14293 {"AUDIO_REF_EC_UL18 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14294 {"AUDIO_REF_EC_UL18 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14295 {"AUDIO_REF_EC_UL18 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14296
14297 {"AUDIO_REF_EC_UL19 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14298 {"AUDIO_REF_EC_UL19 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14299 {"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14300 {"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14301
14302 {"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
14303 {"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
14304 {"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
14305 {"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"},
14306 {"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"},
14307 {"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"},
14308 {"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"},
14309 {"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"},
Laxminath Kasam38070be2017-08-17 18:21:59 +053014310 {"MM_UL10", NULL, "AUDIO_REF_EC_UL10 MUX"},
Asish Bhattacharya34504582017-08-08 12:55:01 +053014311 {"MM_UL16", NULL, "AUDIO_REF_EC_UL16 MUX"},
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053014312 {"MM_UL17", NULL, "AUDIO_REF_EC_UL17 MUX"},
14313 {"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
14314 {"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
14315
14316 {"Voice_Tx Mixer", "PRI_TX_Voice", "PRI_I2S_TX"},
14317 {"Voice_Tx Mixer", "PRI_MI2S_TX_Voice", "PRI_MI2S_TX"},
14318 {"Voice_Tx Mixer", "MI2S_TX_Voice", "MI2S_TX"},
14319 {"Voice_Tx Mixer", "TERT_MI2S_TX_Voice", "TERT_MI2S_TX"},
14320 {"Voice_Tx Mixer", "SLIM_0_TX_Voice", "SLIMBUS_0_TX"},
14321 {"Voice_Tx Mixer", "SLIM_7_TX_Voice", "SLIMBUS_7_TX"},
14322 {"Voice_Tx Mixer", "SLIM_8_TX_Voice", "SLIMBUS_8_TX"},
14323 {"Voice_Tx Mixer", "USB_AUDIO_TX_Voice", "USB_AUDIO_TX"},
14324 {"Voice_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice", "INT_BT_SCO_TX"},
14325 {"Voice_Tx Mixer", "AFE_PCM_TX_Voice", "PCM_TX"},
14326 {"Voice_Tx Mixer", "AUX_PCM_TX_Voice", "AUX_PCM_TX"},
14327 {"Voice_Tx Mixer", "SEC_AUX_PCM_TX_Voice", "SEC_AUX_PCM_TX"},
14328 {"Voice_Tx Mixer", "TERT_AUX_PCM_TX_Voice", "TERT_AUX_PCM_TX"},
14329 {"Voice_Tx Mixer", "QUAT_AUX_PCM_TX_Voice", "QUAT_AUX_PCM_TX"},
14330 {"Voice_Tx Mixer", "SEC_MI2S_TX_Voice", "SEC_MI2S_TX"},
14331 {"CS-VOICE_UL1", NULL, "Voice_Tx Mixer"},
14332
14333 {"Voice2_Tx Mixer", "PRI_TX_Voice2", "PRI_I2S_TX"},
14334 {"Voice2_Tx Mixer", "PRI_MI2S_TX_Voice2", "PRI_MI2S_TX"},
14335 {"Voice2_Tx Mixer", "MI2S_TX_Voice2", "MI2S_TX"},
14336 {"Voice2_Tx Mixer", "TERT_MI2S_TX_Voice2", "TERT_MI2S_TX"},
14337 {"Voice2_Tx Mixer", "SLIM_0_TX_Voice2", "SLIMBUS_0_TX"},
14338 {"Voice2_Tx Mixer", "SLIM_7_TX_Voice2", "SLIMBUS_7_TX"},
14339 {"Voice2_Tx Mixer", "SLIM_8_TX_Voice2", "SLIMBUS_8_TX"},
14340 {"Voice2_Tx Mixer", "USB_AUDIO_TX_Voice2", "USB_AUDIO_TX"},
14341 {"Voice2_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice2", "INT_BT_SCO_TX"},
14342 {"Voice2_Tx Mixer", "AFE_PCM_TX_Voice2", "PCM_TX"},
14343 {"Voice2_Tx Mixer", "AUX_PCM_TX_Voice2", "AUX_PCM_TX"},
14344 {"Voice2_Tx Mixer", "SEC_AUX_PCM_TX_Voice2", "SEC_AUX_PCM_TX"},
14345 {"Voice2_Tx Mixer", "TERT_AUX_PCM_TX_Voice2", "TERT_AUX_PCM_TX"},
14346 {"Voice2_Tx Mixer", "QUAT_AUX_PCM_TX_Voice2", "QUAT_AUX_PCM_TX"},
14347 {"VOICE2_UL", NULL, "Voice2_Tx Mixer"},
14348
14349 {"VoLTE_Tx Mixer", "PRI_TX_VoLTE", "PRI_I2S_TX"},
14350 {"VoLTE_Tx Mixer", "SLIM_0_TX_VoLTE", "SLIMBUS_0_TX"},
14351 {"VoLTE_Tx Mixer", "SLIM_7_TX_VoLTE", "SLIMBUS_7_TX"},
14352 {"VoLTE_Tx Mixer", "SLIM_8_TX_VoLTE", "SLIMBUS_8_TX"},
14353 {"VoLTE_Tx Mixer", "USB_AUDIO_TX_VoLTE", "USB_AUDIO_TX"},
14354 {"VoLTE_Tx Mixer", "INTERNAL_BT_SCO_TX_VoLTE", "INT_BT_SCO_TX"},
14355 {"VoLTE_Tx Mixer", "AFE_PCM_TX_VoLTE", "PCM_TX"},
14356 {"VoLTE_Tx Mixer", "AUX_PCM_TX_VoLTE", "AUX_PCM_TX"},
14357 {"VoLTE_Tx Mixer", "SEC_AUX_PCM_TX_VoLTE", "SEC_AUX_PCM_TX"},
14358 {"VoLTE_Tx Mixer", "TERT_AUX_PCM_TX_VoLTE", "TERT_AUX_PCM_TX"},
14359 {"VoLTE_Tx Mixer", "QUAT_AUX_PCM_TX_VoLTE", "QUAT_AUX_PCM_TX"},
14360 {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"},
14361 {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"},
14362 {"VoLTE_Tx Mixer", "TERT_MI2S_TX_VoLTE", "TERT_MI2S_TX"},
14363 {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"},
14364
14365 {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"},
14366 {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"},
14367 {"VoWLAN_Tx Mixer", "SLIM_7_TX_VoWLAN", "SLIMBUS_7_TX"},
14368 {"VoWLAN_Tx Mixer", "SLIM_8_TX_VoWLAN", "SLIMBUS_8_TX"},
14369 {"VoWLAN_Tx Mixer", "USB_AUDIO_TX_VoWLAN", "USB_AUDIO_TX"},
14370 {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"},
14371 {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"},
14372 {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"},
14373 {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"},
14374 {"VoWLAN_Tx Mixer", "TERT_AUX_PCM_TX_VoWLAN", "TERT_AUX_PCM_TX"},
14375 {"VoWLAN_Tx Mixer", "QUAT_AUX_PCM_TX_VoWLAN", "QUAT_AUX_PCM_TX"},
14376 {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"},
14377 {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"},
14378 {"VoWLAN_Tx Mixer", "TERT_MI2S_TX_VoWLAN", "TERT_MI2S_TX"},
14379 {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"},
14380
14381 {"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
14382 {"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
14383 {"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
14384 {"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
14385 {"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
14386 {"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
14387 {"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
14388 {"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
14389 {"VoiceMMode1_Tx Mixer", "USB_AUDIO_TX_MMode1", "USB_AUDIO_TX"},
14390 {"VoiceMMode1_Tx Mixer", "INT_BT_SCO_TX_MMode1", "INT_BT_SCO_TX"},
14391 {"VoiceMMode1_Tx Mixer", "AFE_PCM_TX_MMode1", "PCM_TX"},
14392 {"VoiceMMode1_Tx Mixer", "AUX_PCM_TX_MMode1", "AUX_PCM_TX"},
14393 {"VoiceMMode1_Tx Mixer", "SEC_AUX_PCM_TX_MMode1", "SEC_AUX_PCM_TX"},
14394 {"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
14395 {"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
14396 {"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
14397 {"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
14398
14399 {"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
14400 {"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
14401 {"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
14402 {"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
14403 {"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
14404 {"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
14405 {"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
14406 {"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
14407 {"VoiceMMode2_Tx Mixer", "USB_AUDIO_TX_MMode2", "USB_AUDIO_TX"},
14408 {"VoiceMMode2_Tx Mixer", "INT_BT_SCO_TX_MMode2", "INT_BT_SCO_TX"},
14409 {"VoiceMMode2_Tx Mixer", "AFE_PCM_TX_MMode2", "PCM_TX"},
14410 {"VoiceMMode2_Tx Mixer", "AUX_PCM_TX_MMode2", "AUX_PCM_TX"},
14411 {"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
14412 {"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
14413 {"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
14414 {"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
14415
14416 {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
14417 {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
14418 {"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
14419 {"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
14420 {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
14421 {"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
14422 {"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
14423 {"Voip_Tx Mixer", "USB_AUDIO_TX_Voip", "USB_AUDIO_TX"},
14424 {"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
14425 {"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"},
14426 {"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
14427 {"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"},
14428 {"Voip_Tx Mixer", "TERT_AUX_PCM_TX_Voip", "TERT_AUX_PCM_TX"},
14429 {"Voip_Tx Mixer", "QUAT_AUX_PCM_TX_Voip", "QUAT_AUX_PCM_TX"},
14430 {"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"},
14431 {"VOIP_UL", NULL, "Voip_Tx Mixer"},
14432
14433 {"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
14434 {"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
14435 {"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"},
14436 {"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"},
14437 {"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"},
14438 {"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"},
14439 {"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"},
14440 {"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"},
14441 {"SLIMBUS6_DL_HL", "Switch", "SLIM0_DL_HL"},
14442 {"SLIMBUS_6_RX", NULL, "SLIMBUS6_DL_HL"},
14443 {"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
14444 {"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"},
14445 {"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"},
14446 {"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"},
14447 {"SLIM8_UL_HL", NULL, "SLIMBUS_8_TX"},
14448
14449 {"LSM1 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14450 {"LSM1 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14451 {"LSM1 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14452 {"LSM1 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14453 {"LSM1 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14454 {"LSM1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14455 {"LSM1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14456 {"LSM1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14457 {"LSM1_UL_HL", NULL, "LSM1 Mixer"},
14458
14459 {"LSM2 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14460 {"LSM2 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14461 {"LSM2 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14462 {"LSM2 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14463 {"LSM2 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14464 {"LSM2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14465 {"LSM2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14466 {"LSM2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14467 {"LSM2_UL_HL", NULL, "LSM2 Mixer"},
14468
14469
14470 {"LSM3 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14471 {"LSM3 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14472 {"LSM3 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14473 {"LSM3 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14474 {"LSM3 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14475 {"LSM3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14476 {"LSM3 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14477 {"LSM3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14478 {"LSM3_UL_HL", NULL, "LSM3 Mixer"},
14479
14480
14481 {"LSM4 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14482 {"LSM4 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14483 {"LSM4 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14484 {"LSM4 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14485 {"LSM4 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14486 {"LSM4 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14487 {"LSM4 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14488 {"LSM4 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14489 {"LSM4_UL_HL", NULL, "LSM4 Mixer"},
14490
14491 {"LSM5 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14492 {"LSM5 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14493 {"LSM5 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14494 {"LSM5 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14495 {"LSM5 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14496 {"LSM5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14497 {"LSM5 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14498 {"LSM5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14499 {"LSM5_UL_HL", NULL, "LSM5 Mixer"},
14500
14501 {"LSM6 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14502 {"LSM6 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14503 {"LSM6 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14504 {"LSM6 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14505 {"LSM6 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14506 {"LSM6 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14507 {"LSM6_UL_HL", NULL, "LSM6 Mixer"},
14508
14509 {"LSM7 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14510 {"LSM7 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14511 {"LSM7 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14512 {"LSM7 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14513 {"LSM7 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14514 {"LSM7 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14515 {"LSM7_UL_HL", NULL, "LSM7 Mixer"},
14516
14517 {"LSM8 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
14518 {"LSM8 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
14519 {"LSM8 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
14520 {"LSM8 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
14521 {"LSM8 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
14522 {"LSM8 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14523 {"LSM8_UL_HL", NULL, "LSM8 Mixer"},
14524
14525
14526 {"CPE_LSM_UL_HL", NULL, "BE_IN"},
14527 {"QCHAT_Tx Mixer", "PRI_TX_QCHAT", "PRI_I2S_TX"},
14528 {"QCHAT_Tx Mixer", "SLIM_0_TX_QCHAT", "SLIMBUS_0_TX"},
14529 {"QCHAT_Tx Mixer", "SLIM_7_TX_QCHAT", "SLIMBUS_7_TX"},
14530 {"QCHAT_Tx Mixer", "SLIM_8_TX_QCHAT", "SLIMBUS_8_TX"},
14531 {"QCHAT_Tx Mixer", "INTERNAL_BT_SCO_TX_QCHAT", "INT_BT_SCO_TX"},
14532 {"QCHAT_Tx Mixer", "AFE_PCM_TX_QCHAT", "PCM_TX"},
14533 {"QCHAT_Tx Mixer", "AUX_PCM_TX_QCHAT", "AUX_PCM_TX"},
14534 {"QCHAT_Tx Mixer", "SEC_AUX_PCM_TX_QCHAT", "SEC_AUX_PCM_TX"},
14535 {"QCHAT_Tx Mixer", "TERT_AUX_PCM_TX_QCHAT", "TERT_AUX_PCM_TX"},
14536 {"QCHAT_Tx Mixer", "QUAT_AUX_PCM_TX_QCHAT", "QUAT_AUX_PCM_TX"},
14537 {"QCHAT_Tx Mixer", "MI2S_TX_QCHAT", "MI2S_TX"},
14538 {"QCHAT_Tx Mixer", "PRI_MI2S_TX_QCHAT", "PRI_MI2S_TX"},
14539 {"QCHAT_Tx Mixer", "TERT_MI2S_TX_QCHAT", "TERT_MI2S_TX"},
14540 {"QCHAT_Tx Mixer", "INT3_MI2S_TX_QCHAT", "INT3_MI2S_TX"},
14541 {"QCHAT_Tx Mixer", "USB_AUDIO_TX_QCHAT", "USB_AUDIO_TX"},
14542 {"QCHAT_UL", NULL, "QCHAT_Tx Mixer"},
14543
14544 {"INT_FM_RX", NULL, "INTFM_DL_HL"},
14545 {"INTFM_UL_HL", NULL, "INT_FM_TX"},
14546 {"INTHFP_UL_HL", NULL, "HFP_PRI_AUX_UL_HL"},
14547 {"HFP_PRI_AUX_UL_HL", "Switch", "AUX_PCM_TX"},
14548 {"INTHFP_UL_HL", NULL, "HFP_AUX_UL_HL"},
14549 {"HFP_AUX_UL_HL", "Switch", "SEC_AUX_PCM_TX"},
14550 {"INTHFP_UL_HL", NULL, "HFP_INT_UL_HL"},
14551 {"HFP_INT_UL_HL", "Switch", "INT_BT_SCO_TX"},
14552 {"SLIM7_UL_HL", NULL, "HFP_SLIM7_UL_HL"},
14553 {"HFP_SLIM7_UL_HL", "Switch", "SLIMBUS_7_TX"},
14554 {"AUX_PCM_RX", NULL, "AUXPCM_DL_HL"},
14555 {"AUX_PCM_RX", NULL, "INTHFP_DL_HL"},
14556 {"AUXPCM_UL_HL", NULL, "AUX_PCM_TX"},
14557 {"MI2S_RX", NULL, "MI2S_DL_HL"},
14558 {"MI2S_UL_HL", NULL, "MI2S_TX"},
14559 {"PCM_RX_DL_HL", "Switch", "SLIM0_DL_HL"},
14560 {"PCM_RX", NULL, "PCM_RX_DL_HL"},
14561
14562 /* connect to INT4_MI2S_DL_HL since same pcm_id */
14563 {"INT0_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14564 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_DL_HL"},
14565 {"INT4_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
14566 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_DL_HL"},
14567 {"PRI_MI2S_RX_DL_HL", "Switch", "PRI_MI2S_DL_HL"},
14568 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_DL_HL"},
14569 {"SEC_MI2S_RX_DL_HL", "Switch", "SEC_MI2S_DL_HL"},
14570 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX_DL_HL"},
14571 {"TERT_MI2S_RX_DL_HL", "Switch", "TERT_MI2S_DL_HL"},
14572 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_DL_HL"},
14573
14574 {"QUAT_MI2S_RX_DL_HL", "Switch", "QUAT_MI2S_DL_HL"},
14575 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_DL_HL"},
14576 {"MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14577 {"INT3_MI2S_UL_HL", NULL, "INT3_MI2S_TX"},
14578 {"TERT_MI2S_UL_HL", NULL, "TERT_MI2S_TX"},
14579 {"SEC_I2S_RX", NULL, "SEC_I2S_DL_HL"},
14580 {"PRI_MI2S_UL_HL", NULL, "PRI_MI2S_TX"},
14581 {"SEC_MI2S_UL_HL", NULL, "SEC_MI2S_TX"},
14582 {"SEC_MI2S_RX", NULL, "SEC_MI2S_DL_HL"},
14583 {"PRI_MI2S_RX", NULL, "PRI_MI2S_DL_HL"},
14584 {"TERT_MI2S_RX", NULL, "TERT_MI2S_DL_HL"},
14585 {"QUAT_MI2S_UL_HL", NULL, "QUAT_MI2S_TX"},
14586
14587 {"PRI_TDM_TX_0_UL_HL", NULL, "PRI_TDM_TX_0"},
14588 {"PRI_TDM_TX_1_UL_HL", NULL, "PRI_TDM_TX_1"},
14589 {"PRI_TDM_TX_2_UL_HL", NULL, "PRI_TDM_TX_2"},
14590 {"PRI_TDM_TX_3_UL_HL", NULL, "PRI_TDM_TX_3"},
14591 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0_DL_HL"},
14592 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1_DL_HL"},
14593 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2_DL_HL"},
14594 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3_DL_HL"},
14595 {"SEC_TDM_TX_0_UL_HL", NULL, "SEC_TDM_TX_0"},
14596 {"SEC_TDM_TX_1_UL_HL", NULL, "SEC_TDM_TX_1"},
14597 {"SEC_TDM_TX_2_UL_HL", NULL, "SEC_TDM_TX_2"},
14598 {"SEC_TDM_TX_3_UL_HL", NULL, "SEC_TDM_TX_3"},
14599 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0_DL_HL"},
14600 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1_DL_HL"},
14601 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2_DL_HL"},
14602 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3_DL_HL"},
14603 {"TERT_TDM_TX_0_UL_HL", NULL, "TERT_TDM_TX_0"},
14604 {"TERT_TDM_TX_1_UL_HL", NULL, "TERT_TDM_TX_1"},
14605 {"TERT_TDM_TX_2_UL_HL", NULL, "TERT_TDM_TX_2"},
14606 {"TERT_TDM_TX_3_UL_HL", NULL, "TERT_TDM_TX_3"},
14607 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0_DL_HL"},
14608 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1_DL_HL"},
14609 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2_DL_HL"},
14610 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3_DL_HL"},
14611 {"QUAT_TDM_TX_0_UL_HL", NULL, "QUAT_TDM_TX_0"},
14612 {"QUAT_TDM_TX_1_UL_HL", NULL, "QUAT_TDM_TX_1"},
14613 {"QUAT_TDM_TX_2_UL_HL", NULL, "QUAT_TDM_TX_2"},
14614 {"QUAT_TDM_TX_3_UL_HL", NULL, "QUAT_TDM_TX_3"},
14615 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0_DL_HL"},
14616 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1_DL_HL"},
14617 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_DL_HL"},
14618 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3_DL_HL"},
14619
14620 {"PRI_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14621 {"PRI_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14622 {"PRI_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14623 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14624 {"PRI_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14625 {"PRI_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14626 {"PRI_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14627 {"PRI_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14628 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14629 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14630 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14631 {"PRI_TDM_RX_0 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14632 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14633 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14634 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14635 {"PRI_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14636 {"PRI_TDM_RX_0", NULL, "PRI_TDM_RX_0 Port Mixer"},
14637
14638 {"PRI_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14639 {"PRI_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14640 {"PRI_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14641 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14642 {"PRI_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14643 {"PRI_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14644 {"PRI_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14645 {"PRI_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14646 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14647 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14648 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14649 {"PRI_TDM_RX_1 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14650 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14651 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14652 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14653 {"PRI_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14654 {"PRI_TDM_RX_1", NULL, "PRI_TDM_RX_1 Port Mixer"},
14655
14656 {"PRI_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14657 {"PRI_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14658 {"PRI_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14659 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14660 {"PRI_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14661 {"PRI_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14662 {"PRI_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14663 {"PRI_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14664 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14665 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14666 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14667 {"PRI_TDM_RX_2 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14668 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14669 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14670 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14671 {"PRI_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14672 {"PRI_TDM_RX_2", NULL, "PRI_TDM_RX_2 Port Mixer"},
14673
14674 {"PRI_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14675 {"PRI_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14676 {"PRI_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14677 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14678 {"PRI_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14679 {"PRI_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14680 {"PRI_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14681 {"PRI_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14682 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_0", "PRI_TDM_TX_0"},
14683 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_1", "PRI_TDM_TX_1"},
14684 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_2", "PRI_TDM_TX_2"},
14685 {"PRI_TDM_RX_3 Port Mixer", "PRI_TDM_TX_3", "PRI_TDM_TX_3"},
14686 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14687 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14688 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14689 {"PRI_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14690 {"PRI_TDM_RX_3", NULL, "PRI_TDM_RX_3 Port Mixer"},
14691
14692 {"SEC_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14693 {"SEC_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14694 {"SEC_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14695 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14696 {"SEC_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14697 {"SEC_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14698 {"SEC_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14699 {"SEC_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14700 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14701 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14702 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14703 {"SEC_TDM_RX_0 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14704 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14705 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14706 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14707 {"SEC_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14708 {"SEC_TDM_RX_0", NULL, "SEC_TDM_RX_0 Port Mixer"},
14709
14710 {"SEC_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14711 {"SEC_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14712 {"SEC_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14713 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14714 {"SEC_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14715 {"SEC_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14716 {"SEC_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14717 {"SEC_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14718 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14719 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14720 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14721 {"SEC_TDM_RX_1 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14722 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14723 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14724 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14725 {"SEC_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14726 {"SEC_TDM_RX_1", NULL, "SEC_TDM_RX_1 Port Mixer"},
14727
14728 {"SEC_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14729 {"SEC_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14730 {"SEC_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14731 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14732 {"SEC_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14733 {"SEC_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14734 {"SEC_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14735 {"SEC_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14736 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14737 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14738 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14739 {"SEC_TDM_RX_2 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14740 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14741 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14742 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14743 {"SEC_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14744 {"SEC_TDM_RX_2", NULL, "SEC_TDM_RX_2 Port Mixer"},
14745
14746 {"SEC_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14747 {"SEC_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14748 {"SEC_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14749 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14750 {"SEC_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14751 {"SEC_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14752 {"SEC_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14753 {"SEC_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14754 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
14755 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_1", "SEC_TDM_TX_1"},
14756 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_2", "SEC_TDM_TX_2"},
14757 {"SEC_TDM_RX_3 Port Mixer", "SEC_TDM_TX_3", "SEC_TDM_TX_3"},
14758 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14759 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14760 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14761 {"SEC_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14762 {"SEC_TDM_RX_3", NULL, "SEC_TDM_RX_3 Port Mixer"},
14763
14764 {"TERT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14765 {"TERT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14766 {"TERT_TDM_RX_0 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14767 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14768 {"TERT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14769 {"TERT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14770 {"TERT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14771 {"TERT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14772 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14773 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14774 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14775 {"TERT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14776 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14777 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14778 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14779 {"TERT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14780 {"TERT_TDM_RX_0", NULL, "TERT_TDM_RX_0 Port Mixer"},
14781
14782 {"TERT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14783 {"TERT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14784 {"TERT_TDM_RX_1 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14785 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14786 {"TERT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14787 {"TERT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14788 {"TERT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14789 {"TERT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14790 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14791 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14792 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14793 {"TERT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14794 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14795 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14796 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14797 {"TERT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14798 {"TERT_TDM_RX_1", NULL, "TERT_TDM_RX_1 Port Mixer"},
14799
14800 {"TERT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14801 {"TERT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14802 {"TERT_TDM_RX_2 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14803 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14804 {"TERT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14805 {"TERT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14806 {"TERT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14807 {"TERT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14808 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14809 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14810 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14811 {"TERT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14812 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14813 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14814 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14815 {"TERT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14816 {"TERT_TDM_RX_2", NULL, "TERT_TDM_RX_2 Port Mixer"},
14817
14818 {"TERT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14819 {"TERT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14820 {"TERT_TDM_RX_3 Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14821 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14822 {"TERT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14823 {"TERT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14824 {"TERT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14825 {"TERT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14826 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14827 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14828 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14829 {"TERT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14830 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14831 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14832 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14833 {"TERT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14834 {"TERT_TDM_RX_3", NULL, "TERT_TDM_RX_3 Port Mixer"},
14835
14836 {"QUAT_TDM_RX_0 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14837 {"QUAT_TDM_RX_0 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14838 {"QUAT_TDM_RX_0 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14839 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14840 {"QUAT_TDM_RX_0 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14841 {"QUAT_TDM_RX_0 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14842 {"QUAT_TDM_RX_0 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14843 {"QUAT_TDM_RX_0 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14844 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14845 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14846 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14847 {"QUAT_TDM_RX_0 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14848 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14849 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14850 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14851 {"QUAT_TDM_RX_0 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14852 {"QUAT_TDM_RX_0", NULL, "QUAT_TDM_RX_0 Port Mixer"},
14853
14854 {"QUAT_TDM_RX_1 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14855 {"QUAT_TDM_RX_1 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14856 {"QUAT_TDM_RX_1 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14857 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14858 {"QUAT_TDM_RX_1 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14859 {"QUAT_TDM_RX_1 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14860 {"QUAT_TDM_RX_1 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14861 {"QUAT_TDM_RX_1 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14862 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14863 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14864 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14865 {"QUAT_TDM_RX_1 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14866 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14867 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14868 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14869 {"QUAT_TDM_RX_1 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14870 {"QUAT_TDM_RX_1", NULL, "QUAT_TDM_RX_1 Port Mixer"},
14871
14872 {"QUAT_TDM_RX_2 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14873 {"QUAT_TDM_RX_2 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14874 {"QUAT_TDM_RX_2 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14875 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14876 {"QUAT_TDM_RX_2 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14877 {"QUAT_TDM_RX_2 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14878 {"QUAT_TDM_RX_2 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14879 {"QUAT_TDM_RX_2 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14880 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14881 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14882 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14883 {"QUAT_TDM_RX_2 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14884 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14885 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14886 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14887 {"QUAT_TDM_RX_2 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14888 {"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2 Port Mixer"},
14889
14890 {"QUAT_TDM_RX_3 Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14891 {"QUAT_TDM_RX_3 Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14892 {"QUAT_TDM_RX_3 Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14893 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14894 {"QUAT_TDM_RX_3 Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14895 {"QUAT_TDM_RX_3 Port Mixer", "AFE_PCM_TX", "PCM_TX"},
14896 {"QUAT_TDM_RX_3 Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14897 {"QUAT_TDM_RX_3 Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14898 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
14899 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_1", "TERT_TDM_TX_1"},
14900 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_2", "TERT_TDM_TX_2"},
14901 {"QUAT_TDM_RX_3 Port Mixer", "TERT_TDM_TX_3", "TERT_TDM_TX_3"},
14902 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14903 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"},
14904 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"},
14905 {"QUAT_TDM_RX_3 Port Mixer", "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"},
14906 {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"},
14907
14908 {"INT0_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14909 {"INT0_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14910 {"INT0_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14911 {"INT0_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14912 {"INT0_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14913 {"INT0_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14914 {"INT0_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14915 {"INT0_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14916 {"INT0_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14917 {"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Port Mixer"},
14918
14919 {"INT4_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14920 {"INT4_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14921 {"INT4_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14922 {"INT4_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14923 {"INT4_MI2S_RX Port Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14924 {"INT4_MI2S_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14925 {"INT4_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14926 {"INT4_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14927 {"INT4_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14928 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Port Mixer"},
14929
14930 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14931 {"SLIMBUS_0_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14932 {"SLIMBUS_0_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14933 {"SLIMBUS_0_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14934 {"SLIMBUS_0_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14935 {"SLIMBUS_0_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14936 {"SLIMBUS_0_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14937 {"SLIMBUS_0_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14938 {"SLIMBUS_0_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14939 {"SLIMBUS_0_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
14940 {"SLIMBUS_0_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14941 {"SLIMBUS_0_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
14942 {"SLIMBUS_0_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14943 {"SLIMBUS_0_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14944 {"SLIMBUS_0_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14945 {"SLIMBUS_0_RX", NULL, "SLIMBUS_0_RX Port Mixer"},
14946 {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
14947 {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14948 {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"},
14949 {"USB_AUDIO_RX Port Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"},
14950 {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Port Mixer"},
14951 {"USB_DL_HL", "Switch", "USBAUDIO_DL_HL"},
14952 {"USB_AUDIO_RX", NULL, "USB_DL_HL"},
14953 {"USBAUDIO_UL_HL", NULL, "USB_AUDIO_TX"},
14954
14955
14956 {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14957 {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14958 {"AUX_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14959 {"AUX_PCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14960 {"AUX_PCM_RX Port Mixer", "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"},
14961 {"AUX_PCM_RX", NULL, "AUX_PCM_RX Port Mixer"},
14962
14963 {"SEC_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14964 {"SEC_AUXPCM_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14965 {"SEC_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14966 {"SEC_AUX_PCM_RX", NULL, "SEC_AUXPCM_RX Port Mixer"},
14967
14968 {"TERT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14969 {"TERT_AUXPCM_RX Port Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14970 {"TERT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14971 {"TERT_AUX_PCM_RX", NULL, "TERT_AUXPCM_RX Port Mixer"},
14972
14973 {"QUAT_AUXPCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14974 {"QUAT_AUXPCM_RX Port Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14975 {"QUAT_AUXPCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14976 {"QUAT_AUX_PCM_RX", NULL, "QUAT_AUXPCM_RX Port Mixer"},
14977
14978 {"Voice Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14979 {"Voice Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
14980 {"Voice Stub Tx Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
14981 {"Voice Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
14982 {"Voice Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
14983 {"Voice Stub Tx Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
14984 {"Voice Stub Tx Mixer", "TERT_AUXPCM_UL_TX", "TERT_AUX_PCM_TX"},
14985 {"Voice Stub Tx Mixer", "QUAT_AUXPCM_UL_TX", "QUAT_AUX_PCM_TX"},
14986 {"Voice Stub Tx Mixer", "MI2S_TX", "MI2S_TX"},
14987 {"Voice Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
14988 {"Voice Stub Tx Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
14989 {"Voice Stub Tx Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
14990 {"Voice Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
14991 {"Voice Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
14992 {"Voice Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
14993 {"Voice Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
14994 {"Voice Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
14995 {"Voice Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
14996 {"VOICE_STUB_UL", NULL, "Voice Stub Tx Mixer"},
14997
14998 {"VoLTE Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
14999 {"VoLTE Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15000 {"VoLTE Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
15001 {"VoLTE Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15002 {"VoLTE Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15003 {"VoLTE Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
15004 {"VoLTE Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
15005 {"VoLTE Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15006 {"VoLTE Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
15007 {"VoLTE Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15008 {"VoLTE Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15009 {"VOLTE_STUB_UL", NULL, "VoLTE Stub Tx Mixer"},
15010
15011 {"Voice2 Stub Tx Mixer", "STUB_TX_HL", "STUB_TX"},
15012 {"Voice2 Stub Tx Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15013 {"Voice2 Stub Tx Mixer", "STUB_1_TX_HL", "STUB_1_TX"},
15014 {"Voice2 Stub Tx Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15015 {"Voice2 Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15016 {"Voice2 Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
15017 {"Voice2 Stub Tx Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
15018 {"Voice2 Stub Tx Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15019 {"Voice2 Stub Tx Mixer", "AFE_PCM_TX", "PCM_TX"},
15020 {"Voice2 Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15021 {"Voice2 Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15022 {"VOICE2_STUB_UL", NULL, "Voice2 Stub Tx Mixer"},
15023
15024 {"STUB_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
15025 {"STUB_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15026 {"STUB_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15027 {"STUB_RX", NULL, "STUB_RX Mixer"},
15028 {"SLIMBUS_1_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
15029 {"SLIMBUS_1_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15030 {"SLIMBUS_1_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15031 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Mixer"},
15032 {"AFE_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
15033 {"AFE_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15034 {"AFE_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15035 {"SLIMBUS_3_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
15036 {"SLIMBUS_3_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15037 {"SLIMBUS_3_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15038 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX_Voice Mixer"},
15039
15040 {"SLIM_7_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
15041 {"SLIM_7_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
15042 {"SLIM_7_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
15043 {"SLIM_7_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
15044 {"SLIM_7_RX_Voice Mixer", "Voip", "VOIP_DL"},
15045 {"SLIM_7_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
15046 {"SLIM_7_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
15047 {"SLIM_7_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15048 {"SLIM_7_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15049 {"SLIM_7_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
15050 {"SLIM_7_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
15051 {"SLIM_7_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
15052 {"SLIMBUS_7_RX", NULL, "SLIM_7_RX_Voice Mixer"},
15053
15054 {"SLIM_8_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
15055 {"SLIM_8_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
15056 {"SLIM_8_RX_Voice Mixer", "VoLTE", "VoLTE_DL"},
15057 {"SLIM_8_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"},
15058 {"SLIM_8_RX_Voice Mixer", "Voip", "VOIP_DL"},
15059 {"SLIM_8_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
15060 {"SLIM_8_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
15061 {"SLIM_8_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
15062 {"SLIM_8_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
15063 {"SLIM_8_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
15064 {"SLIM_8_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
15065 {"SLIM_8_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
15066 {"SLIMBUS_8_RX", NULL, "SLIM_8_RX_Voice Mixer"},
15067
15068 {"SLIMBUS_1_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15069 {"SLIMBUS_1_RX Port Mixer", "AFE_PCM_TX", "PCM_TX"},
15070 {"SLIMBUS_1_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15071 {"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Port Mixer"},
15072 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15073 {"INTERNAL_BT_SCO_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15074 {"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX Port Mixer"},
15075 {"SLIMBUS_3_RX Port Mixer", "INTERNAL_BT_SCO_RX", "INT_BT_SCO_RX"},
15076 {"SLIMBUS_3_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15077 {"SLIMBUS_3_RX Port Mixer", "AFE_PCM_RX", "PCM_RX"},
15078 {"SLIMBUS_3_RX Port Mixer", "AUX_PCM_RX", "AUX_PCM_RX"},
15079 {"SLIMBUS_3_RX Port Mixer", "SLIM_0_RX", "SLIMBUS_0_RX"},
15080 {"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX Port Mixer"},
15081
15082 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15083 {"SLIMBUS_6_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15084 {"SLIMBUS_6_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15085 {"SLIMBUS_6_RX Port Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
15086 {"SLIMBUS_6_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15087 {"SLIMBUS_6_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15088 {"SLIMBUS_6_RX Port Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
15089 {"SLIMBUS_6_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15090 {"SLIMBUS_6_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15091 {"SLIMBUS_6_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15092 {"SLIMBUS_6_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15093 {"SLIMBUS_6_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15094 {"SLIMBUS_6_RX", NULL, "SLIMBUS_6_RX Port Mixer"},
15095
15096 {"HDMI_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15097 {"HDMI", NULL, "HDMI_RX Port Mixer"},
15098
15099 {"DISPLAY_PORT_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15100 {"DISPLAY_PORT", NULL, "DISPLAY_PORT_RX Port Mixer"},
15101
15102 {"SEC_I2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15103 {"SEC_I2S_RX", NULL, "SEC_I2S_RX Port Mixer"},
15104
15105 {"MI2S_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"},
15106 {"MI2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"},
15107 {"MI2S_RX", NULL, "MI2S_RX Port Mixer"},
15108
15109 {"PRI_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15110 {"PRI_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15111 {"PRI_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15112 {"PRI_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15113 {"PRI_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15114 {"PRI_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15115 {"PRI_MI2S_RX Port Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
15116 {"PRI_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15117 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Port Mixer"},
15118
15119 {"SEC_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15120 {"SEC_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15121 {"SEC_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15122 {"SEC_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15123 {"SEC_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15124 {"SEC_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15125 {"SEC_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15126 {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Port Mixer"},
15127
15128 {"TERT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15129 {"TERT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15130 {"TERT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15131 {"TERT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15132 {"TERT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15133 {"TERT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15134 {"TERT_MI2S_RX", NULL, "TERT_MI2S_RX Port Mixer"},
15135
15136 {"QUAT_MI2S_RX Port Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
15137 {"QUAT_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
15138 {"QUAT_MI2S_RX Port Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
15139 {"QUAT_MI2S_RX Port Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
15140 {"QUAT_MI2S_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
15141 {"QUAT_MI2S_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"},
15142 {"QUAT_MI2S_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
15143 {"QUAT_MI2S_RX Port Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
15144 {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Port Mixer"},
15145
15146 /* Backend Enablement */
15147
15148 {"BE_OUT", NULL, "PRI_I2S_RX"},
15149 {"BE_OUT", NULL, "SEC_I2S_RX"},
15150 {"BE_OUT", NULL, "SLIMBUS_0_RX"},
15151 {"BE_OUT", NULL, "SLIMBUS_1_RX"},
15152 {"BE_OUT", NULL, "SLIMBUS_2_RX"},
15153 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15154 {"BE_OUT", NULL, "SLIMBUS_4_RX"},
15155 {"BE_OUT", NULL, "SLIMBUS_5_RX"},
15156 {"BE_OUT", NULL, "SLIMBUS_6_RX"},
15157 {"BE_OUT", NULL, "SLIMBUS_7_RX"},
15158 {"BE_OUT", NULL, "SLIMBUS_8_RX"},
15159 {"BE_OUT", NULL, "USB_AUDIO_RX"},
15160 {"BE_OUT", NULL, "HDMI"},
15161 {"BE_OUT", NULL, "DISPLAY_PORT"},
15162 {"BE_OUT", NULL, "SPDIF_RX"},
15163 {"BE_OUT", NULL, "MI2S_RX"},
15164 {"BE_OUT", NULL, "QUAT_MI2S_RX"},
15165 {"BE_OUT", NULL, "QUIN_MI2S_RX"},
15166 {"BE_OUT", NULL, "TERT_MI2S_RX"},
15167 {"BE_OUT", NULL, "SEC_MI2S_RX"},
15168 {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"},
15169 {"BE_OUT", NULL, "PRI_MI2S_RX"},
15170 {"BE_OUT", NULL, "INT0_MI2S_RX"},
15171 {"BE_OUT", NULL, "INT4_MI2S_RX"},
15172 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
15173 {"BE_OUT", NULL, "INT_BT_A2DP_RX"},
15174 {"BE_OUT", NULL, "INT_FM_RX"},
15175 {"BE_OUT", NULL, "PCM_RX"},
15176 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15177 {"BE_OUT", NULL, "AUX_PCM_RX"},
15178 {"BE_OUT", NULL, "SEC_AUX_PCM_RX"},
15179 {"BE_OUT", NULL, "TERT_AUX_PCM_RX"},
15180 {"BE_OUT", NULL, "QUAT_AUX_PCM_RX"},
15181 {"BE_OUT", NULL, "INT_BT_SCO_RX"},
15182 {"BE_OUT", NULL, "INT_FM_RX"},
15183 {"BE_OUT", NULL, "PCM_RX"},
15184 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15185 {"BE_OUT", NULL, "VOICE_PLAYBACK_TX"},
15186 {"BE_OUT", NULL, "VOICE2_PLAYBACK_TX"},
15187 {"BE_OUT", NULL, "PRI_TDM_RX_0"},
15188 {"BE_OUT", NULL, "PRI_TDM_RX_1"},
15189 {"BE_OUT", NULL, "PRI_TDM_RX_2"},
15190 {"BE_OUT", NULL, "PRI_TDM_RX_3"},
15191 {"BE_OUT", NULL, "SEC_TDM_RX_0"},
15192 {"BE_OUT", NULL, "SEC_TDM_RX_1"},
15193 {"BE_OUT", NULL, "SEC_TDM_RX_2"},
15194 {"BE_OUT", NULL, "SEC_TDM_RX_3"},
15195 {"BE_OUT", NULL, "TERT_TDM_RX_0"},
15196 {"BE_OUT", NULL, "TERT_TDM_RX_1"},
15197 {"BE_OUT", NULL, "TERT_TDM_RX_2"},
15198 {"BE_OUT", NULL, "TERT_TDM_RX_3"},
15199 {"BE_OUT", NULL, "TERT_TDM_RX_4"},
15200 {"BE_OUT", NULL, "QUAT_TDM_RX_0"},
15201 {"BE_OUT", NULL, "QUAT_TDM_RX_1"},
15202 {"BE_OUT", NULL, "QUAT_TDM_RX_2"},
15203 {"BE_OUT", NULL, "QUAT_TDM_RX_3"},
15204
15205 {"PRI_I2S_TX", NULL, "BE_IN"},
15206 {"MI2S_TX", NULL, "BE_IN"},
15207 {"QUAT_MI2S_TX", NULL, "BE_IN"},
15208 {"QUIN_MI2S_TX", NULL, "BE_IN"},
15209 {"PRI_MI2S_TX", NULL, "BE_IN"},
15210 {"TERT_MI2S_TX", NULL, "BE_IN"},
15211 {"INT2_MI2S_TX", NULL, "BE_IN"},
15212 {"INT3_MI2S_TX", NULL, "BE_IN"},
15213 {"INT5_MI2S_TX", NULL, "BE_IN"},
15214 {"SEC_MI2S_TX", NULL, "BE_IN"},
15215 {"SENARY_MI2S_TX", NULL, "BE_IN" },
15216 {"SLIMBUS_0_TX", NULL, "BE_IN" },
15217 {"SLIMBUS_1_TX", NULL, "BE_IN" },
15218 {"SLIMBUS_3_TX", NULL, "BE_IN" },
15219 {"SLIMBUS_4_TX", NULL, "BE_IN" },
15220 {"SLIMBUS_5_TX", NULL, "BE_IN" },
15221 {"SLIMBUS_6_TX", NULL, "BE_IN" },
15222 {"SLIMBUS_7_TX", NULL, "BE_IN" },
15223 {"SLIMBUS_8_TX", NULL, "BE_IN" },
15224 {"USB_AUDIO_TX", NULL, "BE_IN" },
15225 {"INT_BT_SCO_TX", NULL, "BE_IN"},
15226 {"INT_FM_TX", NULL, "BE_IN"},
15227 {"PCM_TX", NULL, "BE_IN"},
15228 {"BE_OUT", NULL, "SLIMBUS_3_RX"},
15229 {"BE_OUT", NULL, "STUB_RX"},
15230 {"STUB_TX", NULL, "BE_IN"},
15231 {"STUB_1_TX", NULL, "BE_IN"},
15232 {"BE_OUT", NULL, "AUX_PCM_RX"},
15233 {"AUX_PCM_TX", NULL, "BE_IN"},
15234 {"SEC_AUX_PCM_TX", NULL, "BE_IN"},
15235 {"TERT_AUX_PCM_TX", NULL, "BE_IN"},
15236 {"QUAT_AUX_PCM_TX", NULL, "BE_IN"},
15237 {"INCALL_RECORD_TX", NULL, "BE_IN"},
15238 {"INCALL_RECORD_RX", NULL, "BE_IN"},
15239 {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
15240 {"SLIM0_RX_VI_FB_RCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"},
15241 {"PRI_MI2S_RX_VI_FB_MUX", "SENARY_TX", "SENARY_TX"},
15242 {"INT4_MI2S_RX_VI_FB_MONO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
15243 {"INT4_MI2S_RX_VI_FB_STEREO_CH_MUX", "INT5_MI2S_TX", "INT5_MI2S_TX"},
15244 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"},
15245 {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_RCH_MUX"},
15246 {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_VI_FB_MUX"},
15247 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_MONO_CH_MUX"},
15248 {"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_VI_FB_STEREO_CH_MUX"},
15249 {"PRI_TDM_TX_0", NULL, "BE_IN"},
15250 {"PRI_TDM_TX_1", NULL, "BE_IN"},
15251 {"PRI_TDM_TX_2", NULL, "BE_IN"},
15252 {"PRI_TDM_TX_3", NULL, "BE_IN"},
15253 {"SEC_TDM_TX_0", NULL, "BE_IN"},
15254 {"SEC_TDM_TX_1", NULL, "BE_IN"},
15255 {"SEC_TDM_TX_2", NULL, "BE_IN"},
15256 {"SEC_TDM_TX_3", NULL, "BE_IN"},
15257 {"TERT_TDM_TX_0", NULL, "BE_IN"},
15258 {"TERT_TDM_TX_1", NULL, "BE_IN"},
15259 {"TERT_TDM_TX_2", NULL, "BE_IN"},
15260 {"TERT_TDM_TX_3", NULL, "BE_IN"},
15261 {"QUAT_TDM_TX_0", NULL, "BE_IN"},
15262 {"QUAT_TDM_TX_1", NULL, "BE_IN"},
15263 {"QUAT_TDM_TX_2", NULL, "BE_IN"},
15264 {"QUAT_TDM_TX_3", NULL, "BE_IN"},
15265};
15266
15267static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream,
15268 struct snd_pcm_hw_params *params)
15269{
15270 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15271 unsigned int be_id = rtd->dai_link->id;
15272
15273 if (be_id >= MSM_BACKEND_DAI_MAX) {
15274 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15275 return -EINVAL;
15276 }
15277
15278 mutex_lock(&routing_lock);
15279 msm_bedais[be_id].sample_rate = params_rate(params);
15280 msm_bedais[be_id].channel = params_channels(params);
15281 msm_bedais[be_id].format = params_format(params);
15282 pr_debug("%s: BE Sample Rate (%d) format (%d) BE id %d\n",
15283 __func__, msm_bedais[be_id].sample_rate,
15284 msm_bedais[be_id].format, be_id);
15285 mutex_unlock(&routing_lock);
15286 return 0;
15287}
15288
15289static int msm_pcm_routing_close(struct snd_pcm_substream *substream)
15290{
15291 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15292 unsigned int be_id = rtd->dai_link->id;
15293 int i, session_type, path_type, topology;
15294 struct msm_pcm_routing_bdai_data *bedai;
15295 struct msm_pcm_routing_fdai_data *fdai;
15296
15297 pr_debug("%s: substream->pcm->id:%s\n",
15298 __func__, substream->pcm->id);
15299
15300 if (be_id >= MSM_BACKEND_DAI_MAX) {
15301 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15302 return -EINVAL;
15303 }
15304
15305 bedai = &msm_bedais[be_id];
15306 session_type = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
15307 0 : 1);
15308 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
15309 path_type = ADM_PATH_PLAYBACK;
15310 else
15311 path_type = ADM_PATH_LIVE_REC;
15312
15313 mutex_lock(&routing_lock);
15314 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15315 if (!is_mm_lsm_fe_id(i))
15316 continue;
15317 fdai = &fe_dai_map[i][session_type];
15318 if (fdai->strm_id != INVALID_SESSION) {
15319 int idx;
15320 int port_id;
15321 unsigned long copp =
15322 session_copp_map[i][session_type][be_id];
15323 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++)
15324 if (test_bit(idx, &copp))
15325 break;
15326 fdai->be_srate = bedai->sample_rate;
15327 port_id = bedai->port_id;
15328 topology = adm_get_topology_for_port_copp_idx(port_id,
15329 idx);
15330 adm_close(bedai->port_id, fdai->perf_mode, idx);
15331 pr_debug("%s: copp:%ld,idx bit fe:%d, type:%d,be:%d topology=0x%x\n",
15332 __func__, copp, i, session_type, be_id,
15333 topology);
15334 clear_bit(idx,
15335 &session_copp_map[i][session_type][be_id]);
15336 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15337 (bedai->passthr_mode[i] == LEGACY_PCM))
15338 msm_pcm_routing_deinit_pp(bedai->port_id,
15339 topology);
15340 }
15341 }
15342
15343 bedai->active = 0;
15344 bedai->sample_rate = 0;
15345 bedai->channel = 0;
15346 for (i = 0; i < MSM_FRONTEND_DAI_MAX; i++) {
15347 if (bedai->passthr_mode[i] != LISTEN)
15348 bedai->passthr_mode[i] = LEGACY_PCM;
15349 }
15350 mutex_unlock(&routing_lock);
15351
15352 return 0;
15353}
15354
15355static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
15356{
15357 struct snd_soc_pcm_runtime *rtd = substream->private_data;
15358 unsigned int be_id = rtd->dai_link->id;
15359 int i, path_type, topology;
15360 int session_type = INVALID_SESSION;
15361 struct msm_pcm_routing_bdai_data *bedai;
15362 u32 channels, sample_rate;
15363 uint16_t bits_per_sample = 16, voc_path_type;
15364 struct msm_pcm_routing_fdai_data *fdai;
15365 u32 session_id;
15366 struct media_format_info voc_be_media_format;
15367 bool is_lsm;
15368
15369 pr_debug("%s: substream->pcm->id:%s\n",
15370 __func__, substream->pcm->id);
15371
15372 if (be_id >= MSM_BACKEND_DAI_MAX) {
15373 pr_err("%s: unexpected BE id %d\n", __func__, be_id);
15374 return -EINVAL;
15375 }
15376
15377 bedai = &msm_bedais[be_id];
15378
15379 mutex_lock(&routing_lock);
15380 if (bedai->active == 1)
15381 goto done; /* Ignore prepare if back-end already active */
15382
15383 /* AFE port is not active at this point. However, still
15384 * go ahead setting active flag under the notion that
15385 * QDSP6 is able to handle ADM starting before AFE port
15386 * is started.
15387 */
15388 bedai->active = 1;
15389
15390 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15391 if (!(is_mm_lsm_fe_id(i) &&
15392 route_check_fe_id_adm_support(i)))
15393 continue;
15394
15395 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
15396 if (bedai->passthr_mode[i] != LEGACY_PCM)
15397 path_type = ADM_PATH_COMPRESSED_RX;
15398 else
15399 path_type = ADM_PATH_PLAYBACK;
15400 session_type = SESSION_TYPE_RX;
15401 } else {
15402 path_type = ADM_PATH_LIVE_REC;
15403 session_type = SESSION_TYPE_TX;
15404 }
15405
15406 is_lsm = (i >= MSM_FRONTEND_DAI_LSM1) &&
15407 (i <= MSM_FRONTEND_DAI_LSM8);
15408 fdai = &fe_dai_map[i][session_type];
15409 if (fdai->strm_id != INVALID_SESSION) {
15410 int app_type, app_type_idx, copp_idx, acdb_dev_id;
15411
15412 if (session_type == SESSION_TYPE_TX &&
15413 fdai->be_srate &&
15414 (fdai->be_srate != bedai->sample_rate)) {
15415 pr_debug("%s: flush strm %d diff BE rates\n",
15416 __func__,
15417 fdai->strm_id);
15418
15419 if (fdai->event_info.event_func)
15420 fdai->event_info.event_func(
15421 MSM_PCM_RT_EVT_BUF_RECFG,
15422 fdai->event_info.priv_data);
15423 fdai->be_srate = 0; /* might not need it */
15424 }
15425 bits_per_sample = msm_routing_get_bit_width(
15426 bedai->format);
15427
15428 app_type =
15429 fe_dai_app_type_cfg[i][session_type][be_id].app_type;
15430 if (app_type && is_lsm) {
15431 app_type_idx =
15432 msm_pcm_routing_get_lsm_app_type_idx(app_type);
15433 sample_rate =
15434 fe_dai_app_type_cfg[i][session_type][be_id]
15435 .sample_rate;
15436 bits_per_sample =
15437 lsm_app_type_cfg[app_type_idx].bit_width;
15438 } else if (app_type) {
15439 app_type_idx =
15440 msm_pcm_routing_get_app_type_idx(app_type);
15441 sample_rate =
15442 fe_dai_app_type_cfg[i][session_type]
15443 [be_id].sample_rate;
15444 bits_per_sample =
15445 app_type_cfg[app_type_idx].bit_width;
15446 } else
15447 sample_rate = bedai->sample_rate;
15448 /*
15449 * check if ADM needs to be configured with different
15450 * channel mapping than backend
15451 */
15452 if (!bedai->adm_override_ch)
15453 channels = bedai->channel;
15454 else
15455 channels = bedai->adm_override_ch;
15456 acdb_dev_id =
15457 fe_dai_app_type_cfg[i][session_type][be_id].acdb_dev_id;
15458 topology = msm_routing_get_adm_topology(i, session_type,
15459 be_id);
15460 copp_idx = adm_open(bedai->port_id, path_type,
15461 sample_rate, channels, topology,
15462 fdai->perf_mode, bits_per_sample,
15463 app_type, acdb_dev_id);
15464 if ((copp_idx < 0) ||
15465 (copp_idx >= MAX_COPPS_PER_PORT)) {
15466 pr_err("%s: adm open failed\n", __func__);
15467 mutex_unlock(&routing_lock);
15468 return -EINVAL;
15469 }
15470 pr_debug("%s: setting idx bit of fe:%d, type: %d, be:%d\n",
15471 __func__, i, session_type, be_id);
15472 set_bit(copp_idx,
15473 &session_copp_map[i][session_type][be_id]);
15474
15475 if (msm_is_resample_needed(
15476 sample_rate,
15477 bedai->sample_rate))
15478 adm_copp_mfc_cfg(
15479 bedai->port_id, copp_idx,
15480 bedai->sample_rate);
15481
15482 msm_pcm_routing_build_matrix(i, session_type, path_type,
15483 fdai->perf_mode,
15484 bedai->passthr_mode[i]);
15485 if ((fdai->perf_mode == LEGACY_PCM_MODE) &&
15486 (bedai->passthr_mode[i] == LEGACY_PCM))
15487 msm_pcm_routing_cfg_pp(bedai->port_id, copp_idx,
15488 topology, channels);
15489 }
15490 }
15491
15492 for_each_set_bit(i, &bedai->fe_sessions[0], MSM_FRONTEND_DAI_MAX) {
15493 session_id = msm_pcm_routing_get_voc_sessionid(i);
15494 if (session_id) {
15495 pr_debug("%s voice session_id: 0x%x\n", __func__,
15496 session_id);
15497
15498 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
15499 voc_path_type = RX_PATH;
15500 else
15501 voc_path_type = TX_PATH;
15502
15503 voc_set_route_flag(session_id, voc_path_type, 1);
15504
15505 memset(&voc_be_media_format, 0,
15506 sizeof(struct media_format_info));
15507
15508 voc_be_media_format.port_id = bedai->port_id;
15509 voc_be_media_format.num_channels = bedai->channel;
15510 voc_be_media_format.sample_rate = bedai->sample_rate;
15511 voc_be_media_format.bits_per_sample = bedai->format;
15512 /* Defaulting this to 1 for voice call usecases */
15513 voc_be_media_format.channel_mapping[0] = 1;
15514
15515 voc_set_device_config(session_id, voc_path_type,
15516 &voc_be_media_format);
15517
15518 if (voc_get_route_flag(session_id, RX_PATH) &&
15519 voc_get_route_flag(session_id, TX_PATH))
15520 voc_enable_device(session_id);
15521 }
15522 }
15523
15524 /* Check if backend is an external ec ref port and set as needed */
15525 if (unlikely(bedai->port_id == voc_get_ext_ec_ref_port_id())) {
15526
15527 memset(&voc_be_media_format, 0,
15528 sizeof(struct media_format_info));
15529
15530 /* Get format info for ec ref port from msm_bedais[] */
15531 voc_be_media_format.port_id = bedai->port_id;
15532 voc_be_media_format.num_channels = bedai->channel;
15533 voc_be_media_format.bits_per_sample = bedai->format;
15534 voc_be_media_format.sample_rate = bedai->sample_rate;
15535 /* Defaulting this to 1 for voice call usecases */
15536 voc_be_media_format.channel_mapping[0] = 1;
15537 voc_set_ext_ec_ref_media_fmt_info(&voc_be_media_format);
15538 pr_debug("%s: EC Ref media format info set to port_id=%d, num_channels=%d, bits_per_sample=%d, sample_rate=%d\n",
15539 __func__, voc_be_media_format.port_id,
15540 voc_be_media_format.num_channels,
15541 voc_be_media_format.bits_per_sample,
15542 voc_be_media_format.sample_rate);
15543 }
15544
15545done:
15546 mutex_unlock(&routing_lock);
15547
15548 return 0;
15549}
15550
15551static int msm_routing_send_device_pp_params(int port_id, int copp_idx,
15552 int fe_id)
15553{
15554 int index, topo_id, be_idx;
15555 unsigned long pp_config = 0;
15556 bool mute_on;
15557 int latency;
15558 bool compr_passthr_mode = true;
15559
15560 pr_debug("%s: port_id %d, copp_idx %d\n", __func__, port_id, copp_idx);
15561
15562 if (port_id != HDMI_RX && port_id != DISPLAY_PORT_RX) {
15563 pr_err("%s: Device pp params on invalid port %d\n",
15564 __func__, port_id);
15565 return -EINVAL;
15566 }
15567
15568 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15569 if (port_id == msm_bedais[be_idx].port_id)
15570 break;
15571 }
15572
15573 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15574 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15575 return -EINVAL;
15576 }
15577
15578 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15579 if (msm_bedais_pp_params[index].port_id == port_id)
15580 break;
15581 }
15582 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15583 pr_err("%s: Invalid backend pp params index %d\n",
15584 __func__, index);
15585 return -EINVAL;
15586 }
15587
15588 topo_id = adm_get_topology_for_port_copp_idx(port_id, copp_idx);
15589 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY) {
15590 pr_err("%s: Invalid passthrough topology 0x%x\n",
15591 __func__, topo_id);
15592 return -EINVAL;
15593 }
15594
15595 if ((msm_bedais[be_idx].passthr_mode[fe_id] == LEGACY_PCM) ||
15596 (msm_bedais[be_idx].passthr_mode[fe_id] == LISTEN))
15597 compr_passthr_mode = false;
15598
15599 pp_config = msm_bedais_pp_params[index].pp_params_config;
15600 if (test_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config)) {
15601 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15602 clear_bit(ADM_PP_PARAM_MUTE_BIT, &pp_config);
15603 mute_on = msm_bedais_pp_params[index].mute_on;
15604 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15605 adm_send_compressed_device_mute(port_id,
15606 copp_idx,
15607 mute_on);
15608 }
15609 if (test_bit(ADM_PP_PARAM_LATENCY_BIT, &pp_config)) {
15610 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15611 clear_bit(ADM_PP_PARAM_LATENCY_BIT,
15612 &pp_config);
15613 latency = msm_bedais_pp_params[index].latency;
15614 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15615 adm_send_compressed_device_latency(port_id,
15616 copp_idx,
15617 latency);
15618 }
15619 return 0;
15620}
15621
15622static int msm_routing_put_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15623 struct snd_ctl_elem_value *ucontrol)
15624{
15625 int pp_id = ucontrol->value.integer.value[0];
15626 int port_id = 0;
15627 int index, be_idx, i, topo_id, idx;
15628 bool mute;
15629 int latency;
15630 bool compr_passthr_mode = true;
15631
15632 pr_debug("%s: pp_id: 0x%x\n", __func__, pp_id);
15633
15634 for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
15635 port_id = msm_bedais[be_idx].port_id;
15636 if (port_id == HDMI_RX || port_id == DISPLAY_PORT_RX)
15637 break;
15638 }
15639
15640 if (be_idx >= MSM_BACKEND_DAI_MAX) {
15641 pr_debug("%s: Invalid be id %d\n", __func__, be_idx);
15642 return -EINVAL;
15643 }
15644
15645 for (index = 0; index < MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX; index++) {
15646 if (msm_bedais_pp_params[index].port_id == port_id)
15647 break;
15648 }
15649 if (index >= MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX) {
15650 pr_err("%s: Invalid pp params backend index %d\n",
15651 __func__, index);
15652 return -EINVAL;
15653 }
15654
15655 for_each_set_bit(i, &msm_bedais[be_idx].fe_sessions[0],
15656 MSM_FRONTEND_DAI_MM_SIZE) {
15657 if ((msm_bedais[be_idx].passthr_mode[i] == LEGACY_PCM) ||
15658 (msm_bedais[be_idx].passthr_mode[i] == LISTEN))
15659 compr_passthr_mode = false;
15660
15661 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15662 unsigned long copp =
15663 session_copp_map[i]
15664 [SESSION_TYPE_RX][be_idx];
15665 if (!test_bit(idx, &copp))
15666 continue;
15667 topo_id = adm_get_topology_for_port_copp_idx(port_id,
15668 idx);
15669 if (topo_id != COMPRESSED_PASSTHROUGH_DEFAULT_TOPOLOGY)
15670 continue;
15671 pr_debug("%s: port: 0x%x, copp %ld, be active: %d, passt: %d\n",
15672 __func__, port_id, copp, msm_bedais[be_idx].active,
15673 msm_bedais[be_idx].passthr_mode[i]);
15674 switch (pp_id) {
15675 case ADM_PP_PARAM_MUTE_ID:
15676 pr_debug("%s: ADM_PP_PARAM_MUTE\n", __func__);
15677 mute = ucontrol->value.integer.value[1] ? true : false;
15678 msm_bedais_pp_params[index].mute_on = mute;
15679 set_bit(ADM_PP_PARAM_MUTE_BIT,
15680 &msm_bedais_pp_params[index].pp_params_config);
15681 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15682 adm_send_compressed_device_mute(port_id,
15683 idx, mute);
15684 break;
15685 case ADM_PP_PARAM_LATENCY_ID:
15686 pr_debug("%s: ADM_PP_PARAM_LATENCY\n", __func__);
15687 msm_bedais_pp_params[index].latency =
15688 ucontrol->value.integer.value[1];
15689 set_bit(ADM_PP_PARAM_LATENCY_BIT,
15690 &msm_bedais_pp_params[index].pp_params_config);
15691 latency = msm_bedais_pp_params[index].latency =
15692 ucontrol->value.integer.value[1];
15693 if ((msm_bedais[be_idx].active) && compr_passthr_mode)
15694 adm_send_compressed_device_latency(port_id,
15695 idx, latency);
15696 break;
15697 default:
15698 pr_info("%s, device pp param %d not supported\n",
15699 __func__, pp_id);
15700 break;
15701 }
15702 }
15703 }
15704 return 0;
15705}
15706
15707static int msm_routing_get_device_pp_params_mixer(struct snd_kcontrol *kcontrol,
15708 struct snd_ctl_elem_value *ucontrol)
15709{
15710 pr_debug("%s:msm_routing_get_device_pp_params_mixer", __func__);
15711 return 0;
15712}
15713
15714static const struct snd_kcontrol_new device_pp_params_mixer_controls[] = {
15715 SOC_SINGLE_MULTI_EXT("Device PP Params", SND_SOC_NOPM, 0, 0xFFFFFFFF,
15716 0, 3, msm_routing_get_device_pp_params_mixer,
15717 msm_routing_put_device_pp_params_mixer),
15718};
15719
15720static int msm_aptx_dec_license_control_get(struct snd_kcontrol *kcontrol,
15721 struct snd_ctl_elem_value *ucontrol)
15722{
15723 ucontrol->value.integer.value[0] =
15724 core_get_license_status(ASM_MEDIA_FMT_APTX);
15725 pr_debug("%s: status %ld\n", __func__,
15726 ucontrol->value.integer.value[0]);
15727 return 0;
15728}
15729
15730static int msm_aptx_dec_license_control_put(struct snd_kcontrol *kcontrol,
15731 struct snd_ctl_elem_value *ucontrol)
15732{
15733 int32_t status = 0;
15734
15735 status = core_set_license(ucontrol->value.integer.value[0],
15736 APTX_CLASSIC_DEC_LICENSE_ID);
15737 pr_debug("%s: status %d\n", __func__, status);
15738 return status;
15739}
15740
15741static const struct snd_kcontrol_new aptx_dec_license_controls[] = {
15742 SOC_SINGLE_EXT("APTX Dec License", SND_SOC_NOPM, 0,
15743 0xFFFF, 0, msm_aptx_dec_license_control_get,
15744 msm_aptx_dec_license_control_put),
15745};
15746
15747static int msm_routing_be_dai_name_table_info(struct snd_kcontrol *kcontrol,
15748 struct snd_ctl_elem_info *uinfo)
15749{
15750 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
15751 uinfo->count = sizeof(be_dai_name_table);
15752 return 0;
15753}
15754
15755static int msm_routing_be_dai_name_table_tlv_get(struct snd_kcontrol *kcontrol,
15756 unsigned int __user *bytes,
15757 unsigned int size)
15758{
15759 int i;
15760 int ret;
15761
15762 if (size < sizeof(be_dai_name_table)) {
15763 pr_err("%s: invalid size %d requested, returning\n",
15764 __func__, size);
15765 ret = -EINVAL;
15766 goto done;
15767 }
15768
15769 /*
15770 * Fill be_dai_name_table from msm_bedais table to reduce code changes
15771 * needed when adding new backends
15772 */
15773 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15774 be_dai_name_table[i].be_id = i;
15775 strlcpy(be_dai_name_table[i].be_name,
15776 msm_bedais[i].name,
15777 LPASS_BE_NAME_MAX_LENGTH);
15778 }
15779
15780 ret = copy_to_user(bytes, &be_dai_name_table,
15781 sizeof(be_dai_name_table));
15782 if (ret) {
15783 pr_err("%s: failed to copy be_dai_name_table\n", __func__);
15784 ret = -EFAULT;
15785 }
15786
15787done:
15788 return ret;
15789}
15790
15791static const struct snd_kcontrol_new
15792 msm_routing_be_dai_name_table_mixer_controls[] = {
15793 {
15794 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |
15795 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK,
15796 .info = msm_routing_be_dai_name_table_info,
15797 .name = "Backend DAI Name Table",
15798 .tlv.c = snd_soc_bytes_tlv_callback,
15799 .private_value = (unsigned long) &(struct soc_bytes_ext) {
15800 .max = sizeof(be_dai_name_table),
15801 .get = msm_routing_be_dai_name_table_tlv_get,
15802 }
15803 },
15804};
15805
15806static int msm_routing_stereo_channel_reverse_control_get(
15807 struct snd_kcontrol *kcontrol,
15808 struct snd_ctl_elem_value *ucontrol)
15809{
15810 ucontrol->value.integer.value[0] = swap_ch;
15811 pr_debug("%s: Swap channel value: %ld\n", __func__,
15812 ucontrol->value.integer.value[0]);
15813 return 0;
15814}
15815
15816static int msm_routing_stereo_channel_reverse_control_put(
15817 struct snd_kcontrol *kcontrol,
15818 struct snd_ctl_elem_value *ucontrol)
15819{
15820 int i, idx, be_index, port_id;
15821 int ret = 0;
15822 unsigned long copp;
15823
15824 pr_debug("%s Swap channel value:%ld\n", __func__,
15825 ucontrol->value.integer.value[0]);
15826
15827 swap_ch = ucontrol->value.integer.value[0];
15828
15829 mutex_lock(&routing_lock);
15830 for (be_index = 0; be_index < MSM_BACKEND_DAI_MAX; be_index++) {
15831 port_id = msm_bedais[be_index].port_id;
15832 if (!msm_bedais[be_index].active)
15833 continue;
15834
15835 for_each_set_bit(i, &msm_bedais[be_index].fe_sessions[0],
15836 MSM_FRONTEND_DAI_MM_SIZE) {
15837 copp = session_copp_map[i][SESSION_TYPE_RX][be_index];
15838 for (idx = 0; idx < MAX_COPPS_PER_PORT; idx++) {
15839 if (!test_bit(idx, &copp))
15840 continue;
15841
15842 pr_debug("%s: swap channel control of portid:%d, coppid:%d\n",
15843 __func__, port_id, idx);
15844 ret = adm_swap_speaker_channels(
15845 port_id, idx,
15846 msm_bedais[be_index].sample_rate,
15847 swap_ch);
15848 if (ret) {
15849 pr_err("%s:Swap_channel failed, err=%d\n",
15850 __func__, ret);
15851 goto done;
15852 }
15853 }
15854 }
15855 }
15856done:
15857 mutex_unlock(&routing_lock);
15858 return ret;
15859}
15860
15861static const struct snd_kcontrol_new stereo_channel_reverse_control[] = {
15862 SOC_SINGLE_EXT("Swap channel", SND_SOC_NOPM, 0,
15863 1, 0, msm_routing_stereo_channel_reverse_control_get,
15864 msm_routing_stereo_channel_reverse_control_put),
15865};
15866
15867static const struct snd_pcm_ops msm_routing_pcm_ops = {
15868 .hw_params = msm_pcm_routing_hw_params,
15869 .close = msm_pcm_routing_close,
15870 .prepare = msm_pcm_routing_prepare,
15871};
15872
15873/* Not used but frame seems to require it */
15874static int msm_routing_probe(struct snd_soc_platform *platform)
15875{
15876 snd_soc_dapm_new_controls(&platform->component.dapm, msm_qdsp6_widgets,
15877 ARRAY_SIZE(msm_qdsp6_widgets));
15878 snd_soc_dapm_add_routes(&platform->component.dapm, intercon,
15879 ARRAY_SIZE(intercon));
15880
15881 snd_soc_dapm_new_widgets(platform->component.dapm.card);
15882
15883 snd_soc_add_platform_controls(platform, lsm_controls,
15884 ARRAY_SIZE(lsm_controls));
15885
15886 snd_soc_add_platform_controls(platform, aanc_slim_0_rx_mux,
15887 ARRAY_SIZE(aanc_slim_0_rx_mux));
15888
15889 snd_soc_add_platform_controls(platform, msm_voc_session_controls,
15890 ARRAY_SIZE(msm_voc_session_controls));
15891
15892 snd_soc_add_platform_controls(platform, app_type_cfg_controls,
15893 ARRAY_SIZE(app_type_cfg_controls));
15894
15895 snd_soc_add_platform_controls(platform, lsm_app_type_cfg_controls,
15896 ARRAY_SIZE(lsm_app_type_cfg_controls));
15897
Vikram Pandurangaee9c03a2017-09-07 15:06:17 -070015898 snd_soc_add_platform_controls(platform, module_cfg_controls,
15899 ARRAY_SIZE(module_cfg_controls));
15900
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +053015901 snd_soc_add_platform_controls(platform,
15902 stereo_to_custom_stereo_controls,
15903 ARRAY_SIZE(stereo_to_custom_stereo_controls));
15904
15905 snd_soc_add_platform_controls(platform, ec_ref_param_controls,
15906 ARRAY_SIZE(ec_ref_param_controls));
15907
15908 snd_soc_add_platform_controls(platform, channel_mixer_controls,
15909 ARRAY_SIZE(channel_mixer_controls));
15910
15911 msm_qti_pp_add_controls(platform);
15912
15913 msm_dts_srs_tm_add_controls(platform);
15914
15915 msm_dolby_dap_add_controls(platform);
15916
15917 snd_soc_add_platform_controls(platform,
15918 use_ds1_or_ds2_controls,
15919 ARRAY_SIZE(use_ds1_or_ds2_controls));
15920
15921 snd_soc_add_platform_controls(platform,
15922 device_pp_params_mixer_controls,
15923 ARRAY_SIZE(device_pp_params_mixer_controls));
15924
15925 snd_soc_add_platform_controls(platform,
15926 msm_routing_be_dai_name_table_mixer_controls,
15927 ARRAY_SIZE(msm_routing_be_dai_name_table_mixer_controls));
15928
15929 snd_soc_add_platform_controls(platform, msm_source_tracking_controls,
15930 ARRAY_SIZE(msm_source_tracking_controls));
15931 snd_soc_add_platform_controls(platform, adm_channel_config_controls,
15932 ARRAY_SIZE(adm_channel_config_controls));
15933
15934 snd_soc_add_platform_controls(platform, aptx_dec_license_controls,
15935 ARRAY_SIZE(aptx_dec_license_controls));
15936 snd_soc_add_platform_controls(platform, stereo_channel_reverse_control,
15937 ARRAY_SIZE(stereo_channel_reverse_control));
15938 return 0;
15939}
15940
15941int msm_routing_pcm_new(struct snd_soc_pcm_runtime *runtime)
15942{
15943 return msm_pcm_routing_hwdep_new(runtime, msm_bedais);
15944}
15945
15946void msm_routing_pcm_free(struct snd_pcm *pcm)
15947{
15948 msm_pcm_routing_hwdep_free(pcm);
15949}
15950
15951static struct snd_soc_platform_driver msm_soc_routing_platform = {
15952 .ops = &msm_routing_pcm_ops,
15953 .probe = msm_routing_probe,
15954 .pcm_new = msm_routing_pcm_new,
15955 .pcm_free = msm_routing_pcm_free,
15956};
15957
15958static int msm_routing_pcm_probe(struct platform_device *pdev)
15959{
15960
15961 dev_dbg(&pdev->dev, "dev name %s\n", dev_name(&pdev->dev));
15962 return snd_soc_register_platform(&pdev->dev,
15963 &msm_soc_routing_platform);
15964}
15965
15966static int msm_routing_pcm_remove(struct platform_device *pdev)
15967{
15968 snd_soc_unregister_platform(&pdev->dev);
15969 return 0;
15970}
15971
15972static const struct of_device_id msm_pcm_routing_dt_match[] = {
15973 {.compatible = "qcom,msm-pcm-routing"},
15974 {}
15975};
15976MODULE_DEVICE_TABLE(of, msm_pcm_routing_dt_match);
15977
15978static struct platform_driver msm_routing_pcm_driver = {
15979 .driver = {
15980 .name = "msm-pcm-routing",
15981 .owner = THIS_MODULE,
15982 .of_match_table = msm_pcm_routing_dt_match,
15983 },
15984 .probe = msm_routing_pcm_probe,
15985 .remove = msm_routing_pcm_remove,
15986};
15987
15988int msm_routing_check_backend_enabled(int fedai_id)
15989{
15990 int i;
15991
15992 if (fedai_id > MSM_FRONTEND_DAI_MM_MAX_ID) {
15993 /* bad ID assigned in machine driver */
15994 pr_err("%s: bad MM ID\n", __func__);
15995 return 0;
15996 }
15997 for (i = 0; i < MSM_BACKEND_DAI_MAX; i++) {
15998 if (test_bit(fedai_id, &msm_bedais[i].fe_sessions[0]))
15999 return msm_bedais[i].active;
16000 }
16001 return 0;
16002}
16003
16004static int msm_routing_set_cal(int32_t cal_type,
16005 size_t data_size, void *data)
16006{
16007 int ret = 0;
16008
16009 pr_debug("%s\n", __func__);
16010
16011 ret = cal_utils_set_cal(data_size, data, cal_data, 0, NULL);
16012 if (ret < 0) {
16013 pr_err("%s: cal_utils_set_cal failed, ret = %d, cal type = %d!\n",
16014 __func__, ret, cal_type);
16015 ret = -EINVAL;
16016 goto done;
16017 }
16018done:
16019 return ret;
16020}
16021
16022static void msm_routing_delete_cal_data(void)
16023{
16024 pr_debug("%s\n", __func__);
16025
16026 cal_utils_destroy_cal_types(1, &cal_data);
16027}
16028
16029static int msm_routing_init_cal_data(void)
16030{
16031 int ret = 0;
16032 struct cal_type_info cal_type_info = {
16033 {ADM_TOPOLOGY_CAL_TYPE,
16034 {NULL, NULL, NULL,
16035 msm_routing_set_cal, NULL, NULL} },
16036 {NULL, NULL, cal_utils_match_buf_num}
16037 };
16038 pr_debug("%s\n", __func__);
16039
16040 ret = cal_utils_create_cal_types(1, &cal_data,
16041 &cal_type_info);
16042 if (ret < 0) {
16043 pr_err("%s: could not create cal type!\n",
16044 __func__);
16045 ret = -EINVAL;
16046 goto err;
16047 }
16048
16049 return ret;
16050err:
16051 msm_routing_delete_cal_data();
16052 return ret;
16053}
16054
16055static int __init msm_soc_routing_platform_init(void)
16056{
16057 mutex_init(&routing_lock);
16058 if (msm_routing_init_cal_data())
16059 pr_err("%s: could not init cal data!\n", __func__);
16060
16061 afe_set_routing_callback(
16062 (routing_cb)msm_pcm_get_dev_acdb_id_by_port_id);
16063
16064 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
16065 memset(&last_be_id_configured, 0, sizeof(last_be_id_configured));
16066
16067 return platform_driver_register(&msm_routing_pcm_driver);
16068}
16069module_init(msm_soc_routing_platform_init);
16070
16071static void __exit msm_soc_routing_platform_exit(void)
16072{
16073 msm_routing_delete_cal_data();
16074 memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
16075 mutex_destroy(&routing_lock);
16076 platform_driver_unregister(&msm_routing_pcm_driver);
16077}
16078module_exit(msm_soc_routing_platform_exit);
16079
16080MODULE_DESCRIPTION("MSM routing platform driver");
16081MODULE_LICENSE("GPL v2");