summaryrefslogtreecommitdiff
path: root/asoc/msm-pcm-routing-v2.h
blob: 6b96bdeb19f562c076010f1d1dd5fc098153c403 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 */
#ifndef _MSM_PCM_ROUTING_H
#define _MSM_PCM_ROUTING_H
#include <dsp/apr_audio-v2.h>
#include <dsp/q6adm-v2.h>

/*
 * These names are used by HAL to specify the BE. If any changes are
 * made to the string names or the max name length corresponding
 * changes need to be made in the HAL to ensure they still match.
 */
#define LPASS_BE_NAME_MAX_LENGTH 24
#define LPASS_BE_PRI_I2S_RX "PRIMARY_I2S_RX"
#define LPASS_BE_PRI_I2S_TX "PRIMARY_I2S_TX"
#define LPASS_BE_SLIMBUS_0_RX "SLIMBUS_0_RX"
#define LPASS_BE_SLIMBUS_0_TX "SLIMBUS_0_TX"
#define LPASS_BE_HDMI "HDMI"
#define LPASS_BE_DISPLAY_PORT "DISPLAY_PORT"
#define LPASS_BE_DISPLAY_PORT1 "DISPLAY_PORT1"
#define LPASS_BE_INT_BT_SCO_RX "INT_BT_SCO_RX"
#define LPASS_BE_INT_BT_SCO_TX "INT_BT_SCO_TX"
#define LPASS_BE_INT_BT_A2DP_RX "INT_BT_A2DP_RX"
#define LPASS_BE_INT_FM_RX "INT_FM_RX"
#define LPASS_BE_INT_FM_TX "INT_FM_TX"
#define LPASS_BE_AFE_PCM_RX "RT_PROXY_DAI_001_RX"
#define LPASS_BE_AFE_PCM_TX "RT_PROXY_DAI_002_TX"
#define LPASS_BE_AUXPCM_RX "AUX_PCM_RX"
#define LPASS_BE_AUXPCM_TX "AUX_PCM_TX"
#define LPASS_BE_SEC_AUXPCM_RX "SEC_AUX_PCM_RX"
#define LPASS_BE_SEC_AUXPCM_TX "SEC_AUX_PCM_TX"
#define LPASS_BE_TERT_AUXPCM_RX "TERT_AUX_PCM_RX"
#define LPASS_BE_TERT_AUXPCM_TX "TERT_AUX_PCM_TX"
#define LPASS_BE_QUAT_AUXPCM_RX "QUAT_AUX_PCM_RX"
#define LPASS_BE_QUAT_AUXPCM_TX "QUAT_AUX_PCM_TX"
#define LPASS_BE_QUIN_AUXPCM_RX "QUIN_AUX_PCM_RX"
#define LPASS_BE_QUIN_AUXPCM_TX "QUIN_AUX_PCM_TX"
#define LPASS_BE_SEN_AUXPCM_RX "SEN_AUX_PCM_RX"
#define LPASS_BE_SEN_AUXPCM_TX "SEN_AUX_PCM_TX"
#define LPASS_BE_VOICE_PLAYBACK_TX "VOICE_PLAYBACK_TX"
#define LPASS_BE_VOICE2_PLAYBACK_TX "VOICE2_PLAYBACK_TX"
#define LPASS_BE_INCALL_RECORD_RX "INCALL_RECORD_RX"
#define LPASS_BE_INCALL_RECORD_TX "INCALL_RECORD_TX"
#define LPASS_BE_PROXY_RX "PROXY_RX"
#define LPASS_BE_PROXY_TX "PROXY_TX"
#define LPASS_BE_SEC_I2S_RX "SECONDARY_I2S_RX"
#define LPASS_BE_PRI_SPDIF_RX "PRI_SPDIF_RX"
#define LPASS_BE_PRI_SPDIF_TX "PRI_SPDIF_TX"
#define LPASS_BE_SEC_SPDIF_RX "SEC_SPDIF_RX"
#define LPASS_BE_SEC_SPDIF_TX "SEC_SPDIF_TX"

#define LPASS_BE_MI2S_RX "MI2S_RX"
#define LPASS_BE_MI2S_TX "MI2S_TX"
#define LPASS_BE_QUAT_MI2S_RX "QUAT_MI2S_RX"
#define LPASS_BE_QUAT_MI2S_TX "QUAT_MI2S_TX"
#define LPASS_BE_SEC_MI2S_RX "SEC_MI2S_RX"
#define LPASS_BE_SEC_MI2S_RX_SD1 "SEC_MI2S_RX_SD1"
#define LPASS_BE_SEC_MI2S_TX "SEC_MI2S_TX"
#define LPASS_BE_PRI_MI2S_RX "PRI_MI2S_RX"
#define LPASS_BE_PRI_MI2S_TX "PRI_MI2S_TX"
#define LPASS_BE_TERT_MI2S_RX "TERT_MI2S_RX"
#define LPASS_BE_TERT_MI2S_TX "TERT_MI2S_TX"
#define LPASS_BE_AUDIO_I2S_RX "AUDIO_I2S_RX"
#define LPASS_BE_STUB_RX "STUB_RX"
#define LPASS_BE_STUB_TX "STUB_TX"
#define LPASS_BE_SLIMBUS_1_RX "SLIMBUS_1_RX"
#define LPASS_BE_SLIMBUS_1_TX "SLIMBUS_1_TX"
#define LPASS_BE_STUB_1_TX "STUB_1_TX"
#define LPASS_BE_SLIMBUS_2_RX "SLIMBUS_2_RX"
#define LPASS_BE_SLIMBUS_2_TX "SLIMBUS_2_TX"
#define LPASS_BE_SLIMBUS_3_RX "SLIMBUS_3_RX"
#define LPASS_BE_SLIMBUS_3_TX "SLIMBUS_3_TX"
#define LPASS_BE_SLIMBUS_4_RX "SLIMBUS_4_RX"
#define LPASS_BE_SLIMBUS_4_TX "SLIMBUS_4_TX"
#define LPASS_BE_SLIMBUS_TX_VI "SLIMBUS_TX_VI"
#define LPASS_BE_SLIMBUS_5_RX "SLIMBUS_5_RX"
#define LPASS_BE_SLIMBUS_5_TX "SLIMBUS_5_TX"
#define LPASS_BE_SLIMBUS_6_RX "SLIMBUS_6_RX"
#define LPASS_BE_SLIMBUS_6_TX "SLIMBUS_6_TX"
#define LPASS_BE_QUIN_MI2S_RX "QUIN_MI2S_RX"
#define LPASS_BE_QUIN_MI2S_TX "QUIN_MI2S_TX"
#define LPASS_BE_SENARY_MI2S_TX "SENARY_MI2S_TX"
#define LPASS_BE_SENARY_MI2S_RX "SENARY_MI2S_RX"

#define LPASS_BE_PRI_META_MI2S_RX "PRI_META_MI2S_RX"
#define LPASS_BE_SEC_META_MI2S_RX "SEC_META_MI2S_RX"

#define LPASS_BE_PRI_TDM_RX_0 "PRI_TDM_RX_0"
#define LPASS_BE_PRI_TDM_TX_0 "PRI_TDM_TX_0"
#define LPASS_BE_PRI_TDM_RX_1 "PRI_TDM_RX_1"
#define LPASS_BE_PRI_TDM_TX_1 "PRI_TDM_TX_1"
#define LPASS_BE_PRI_TDM_RX_2 "PRI_TDM_RX_2"
#define LPASS_BE_PRI_TDM_TX_2 "PRI_TDM_TX_2"
#define LPASS_BE_PRI_TDM_RX_3 "PRI_TDM_RX_3"
#define LPASS_BE_PRI_TDM_TX_3 "PRI_TDM_TX_3"
#define LPASS_BE_PRI_TDM_RX_4 "PRI_TDM_RX_4"
#define LPASS_BE_PRI_TDM_TX_4 "PRI_TDM_TX_4"
#define LPASS_BE_PRI_TDM_RX_5 "PRI_TDM_RX_5"
#define LPASS_BE_PRI_TDM_TX_5 "PRI_TDM_TX_5"
#define LPASS_BE_PRI_TDM_RX_6 "PRI_TDM_RX_6"
#define LPASS_BE_PRI_TDM_TX_6 "PRI_TDM_TX_6"
#define LPASS_BE_PRI_TDM_RX_7 "PRI_TDM_RX_7"
#define LPASS_BE_PRI_TDM_TX_7 "PRI_TDM_TX_7"
#define LPASS_BE_SEC_TDM_RX_0 "SEC_TDM_RX_0"
#define LPASS_BE_SEC_TDM_TX_0 "SEC_TDM_TX_0"
#define LPASS_BE_SEC_TDM_RX_1 "SEC_TDM_RX_1"
#define LPASS_BE_SEC_TDM_TX_1 "SEC_TDM_TX_1"
#define LPASS_BE_SEC_TDM_RX_2 "SEC_TDM_RX_2"
#define LPASS_BE_SEC_TDM_TX_2 "SEC_TDM_TX_2"
#define LPASS_BE_SEC_TDM_RX_3 "SEC_TDM_RX_3"
#define LPASS_BE_SEC_TDM_TX_3 "SEC_TDM_TX_3"
#define LPASS_BE_SEC_TDM_RX_4 "SEC_TDM_RX_4"
#define LPASS_BE_SEC_TDM_TX_4 "SEC_TDM_TX_4"
#define LPASS_BE_SEC_TDM_RX_5 "SEC_TDM_RX_5"
#define LPASS_BE_SEC_TDM_TX_5 "SEC_TDM_TX_5"
#define LPASS_BE_SEC_TDM_RX_6 "SEC_TDM_RX_6"
#define LPASS_BE_SEC_TDM_TX_6 "SEC_TDM_TX_6"
#define LPASS_BE_SEC_TDM_RX_7 "SEC_TDM_RX_7"
#define LPASS_BE_SEC_TDM_TX_7 "SEC_TDM_TX_7"
#define LPASS_BE_TERT_TDM_RX_0 "TERT_TDM_RX_0"
#define LPASS_BE_TERT_TDM_TX_0 "TERT_TDM_TX_0"
#define LPASS_BE_TERT_TDM_RX_1 "TERT_TDM_RX_1"
#define LPASS_BE_TERT_TDM_TX_1 "TERT_TDM_TX_1"
#define LPASS_BE_TERT_TDM_RX_2 "TERT_TDM_RX_2"
#define LPASS_BE_TERT_TDM_TX_2 "TERT_TDM_TX_2"
#define LPASS_BE_TERT_TDM_RX_3 "TERT_TDM_RX_3"
#define LPASS_BE_TERT_TDM_TX_3 "TERT_TDM_TX_3"
#define LPASS_BE_TERT_TDM_RX_4 "TERT_TDM_RX_4"
#define LPASS_BE_TERT_TDM_TX_4 "TERT_TDM_TX_4"
#define LPASS_BE_TERT_TDM_RX_5 "TERT_TDM_RX_5"
#define LPASS_BE_TERT_TDM_TX_5 "TERT_TDM_TX_5"
#define LPASS_BE_TERT_TDM_RX_6 "TERT_TDM_RX_6"
#define LPASS_BE_TERT_TDM_TX_6 "TERT_TDM_TX_6"
#define LPASS_BE_TERT_TDM_RX_7 "TERT_TDM_RX_7"
#define LPASS_BE_TERT_TDM_TX_7 "TERT_TDM_TX_7"
#define LPASS_BE_QUAT_TDM_RX_0 "QUAT_TDM_RX_0"
#define LPASS_BE_QUAT_TDM_TX_0 "QUAT_TDM_TX_0"
#define LPASS_BE_QUAT_TDM_RX_1 "QUAT_TDM_RX_1"
#define LPASS_BE_QUAT_TDM_TX_1 "QUAT_TDM_TX_1"
#define LPASS_BE_QUAT_TDM_RX_2 "QUAT_TDM_RX_2"
#define LPASS_BE_QUAT_TDM_TX_2 "QUAT_TDM_TX_2"
#define LPASS_BE_QUAT_TDM_RX_3 "QUAT_TDM_RX_3"
#define LPASS_BE_QUAT_TDM_TX_3 "QUAT_TDM_TX_3"
#define LPASS_BE_QUAT_TDM_RX_4 "QUAT_TDM_RX_4"
#define LPASS_BE_QUAT_TDM_TX_4 "QUAT_TDM_TX_4"
#define LPASS_BE_QUAT_TDM_RX_5 "QUAT_TDM_RX_5"
#define LPASS_BE_QUAT_TDM_TX_5 "QUAT_TDM_TX_5"
#define LPASS_BE_QUAT_TDM_RX_6 "QUAT_TDM_RX_6"
#define LPASS_BE_QUAT_TDM_TX_6 "QUAT_TDM_TX_6"
#define LPASS_BE_QUAT_TDM_RX_7 "QUAT_TDM_RX_7"
#define LPASS_BE_QUAT_TDM_TX_7 "QUAT_TDM_TX_7"
#define LPASS_BE_AFE_LOOPBACK_TX "AFE_LOOPBACK_TX"
#define LPASS_BE_QUIN_TDM_RX_0 "QUIN_TDM_RX_0"
#define LPASS_BE_QUIN_TDM_TX_0 "QUIN_TDM_TX_0"
#define LPASS_BE_QUIN_TDM_RX_1 "QUIN_TDM_RX_1"
#define LPASS_BE_QUIN_TDM_TX_1 "QUIN_TDM_TX_1"
#define LPASS_BE_QUIN_TDM_RX_2 "QUIN_TDM_RX_2"
#define LPASS_BE_QUIN_TDM_TX_2 "QUIN_TDM_TX_2"
#define LPASS_BE_QUIN_TDM_RX_3 "QUIN_TDM_RX_3"
#define LPASS_BE_QUIN_TDM_TX_3 "QUIN_TDM_TX_3"
#define LPASS_BE_QUIN_TDM_RX_4 "QUIN_TDM_RX_4"
#define LPASS_BE_QUIN_TDM_TX_4 "QUIN_TDM_TX_4"
#define LPASS_BE_QUIN_TDM_RX_5 "QUIN_TDM_RX_5"
#define LPASS_BE_QUIN_TDM_TX_5 "QUIN_TDM_TX_5"
#define LPASS_BE_QUIN_TDM_RX_6 "QUIN_TDM_RX_6"
#define LPASS_BE_QUIN_TDM_TX_6 "QUIN_TDM_TX_6"
#define LPASS_BE_QUIN_TDM_RX_7 "QUIN_TDM_RX_7"
#define LPASS_BE_QUIN_TDM_TX_7 "QUIN_TDM_TX_7"
#define LPASS_BE_SEN_TDM_RX_0 "SEN_TDM_RX_0"
#define LPASS_BE_SEN_TDM_TX_0 "SEN_TDM_TX_0"
#define LPASS_BE_SEN_TDM_RX_1 "SEN_TDM_RX_1"
#define LPASS_BE_SEN_TDM_TX_1 "SEN_TDM_TX_1"
#define LPASS_BE_SEN_TDM_RX_2 "SEN_TDM_RX_2"
#define LPASS_BE_SEN_TDM_TX_2 "SEN_TDM_TX_2"
#define LPASS_BE_SEN_TDM_RX_3 "SEN_TDM_RX_3"
#define LPASS_BE_SEN_TDM_TX_3 "SEN_TDM_TX_3"
#define LPASS_BE_SEN_TDM_RX_4 "SEN_TDM_RX_4"
#define LPASS_BE_SEN_TDM_TX_4 "SEN_TDM_TX_4"
#define LPASS_BE_SEN_TDM_RX_5 "SEN_TDM_RX_5"
#define LPASS_BE_SEN_TDM_TX_5 "SEN_TDM_TX_5"
#define LPASS_BE_SEN_TDM_RX_6 "SEN_TDM_RX_6"
#define LPASS_BE_SEN_TDM_TX_6 "SEN_TDM_TX_6"
#define LPASS_BE_SEN_TDM_RX_7 "SEN_TDM_RX_7"
#define LPASS_BE_SEN_TDM_TX_7 "SEN_TDM_TX_7"

#define LPASS_BE_SLIMBUS_7_RX "SLIMBUS_7_RX"
#define LPASS_BE_SLIMBUS_7_TX "SLIMBUS_7_TX"
#define LPASS_BE_SLIMBUS_8_RX "SLIMBUS_8_RX"
#define LPASS_BE_SLIMBUS_8_TX "SLIMBUS_8_TX"
#define LPASS_BE_SLIMBUS_9_RX "SLIMBUS_9_RX"
#define LPASS_BE_SLIMBUS_9_TX "SLIMBUS_9_TX"

#define LPASS_BE_USB_AUDIO_RX "USB_AUDIO_RX"
#define LPASS_BE_USB_AUDIO_TX "USB_AUDIO_TX"

#define LPASS_BE_INT0_MI2S_RX "INT0_MI2S_RX"
#define LPASS_BE_INT0_MI2S_TX "INT0_MI2S_TX"
#define LPASS_BE_INT1_MI2S_RX "INT1_MI2S_RX"
#define LPASS_BE_INT1_MI2S_TX "INT1_MI2S_TX"
#define LPASS_BE_INT2_MI2S_RX "INT2_MI2S_RX"
#define LPASS_BE_INT2_MI2S_TX "INT2_MI2S_TX"
#define LPASS_BE_INT3_MI2S_RX "INT3_MI2S_RX"
#define LPASS_BE_INT3_MI2S_TX "INT3_MI2S_TX"
#define LPASS_BE_INT4_MI2S_RX "INT4_MI2S_RX"
#define LPASS_BE_INT4_MI2S_TX "INT4_MI2S_TX"
#define LPASS_BE_INT5_MI2S_RX "INT5_MI2S_RX"
#define LPASS_BE_INT5_MI2S_TX "INT5_MI2S_TX"
#define LPASS_BE_INT6_MI2S_RX "INT6_MI2S_RX"
#define LPASS_BE_INT6_MI2S_TX "INT6_MI2S_TX"

#define LPASS_BE_WSA_CDC_DMA_RX_0 "WSA_CDC_DMA_RX_0"
#define LPASS_BE_WSA_CDC_DMA_TX_0 "WSA_CDC_DMA_TX_0"
#define LPASS_BE_WSA_CDC_DMA_RX_1 "WSA_CDC_DMA_RX_1"
#define LPASS_BE_WSA_CDC_DMA_TX_1 "WSA_CDC_DMA_TX_1"
#define LPASS_BE_WSA_CDC_DMA_TX_2 "WSA_CDC_DMA_TX_2"
#define LPASS_BE_VA_CDC_DMA_TX_0 "VA_CDC_DMA_TX_0"
#define LPASS_BE_VA_CDC_DMA_TX_1 "VA_CDC_DMA_TX_1"
#define LPASS_BE_VA_CDC_DMA_TX_2 "VA_CDC_DMA_TX_2"

#define LPASS_BE_RX_CDC_DMA_RX_0 "RX_CDC_DMA_RX_0"
#define LPASS_BE_RX_CDC_DMA_RX_1 "RX_CDC_DMA_RX_1"
#define LPASS_BE_RX_CDC_DMA_RX_2 "RX_CDC_DMA_RX_2"
#define LPASS_BE_RX_CDC_DMA_RX_3 "RX_CDC_DMA_RX_3"
#define LPASS_BE_RX_CDC_DMA_RX_4 "RX_CDC_DMA_RX_4"
#define LPASS_BE_RX_CDC_DMA_RX_5 "RX_CDC_DMA_RX_5"
#define LPASS_BE_RX_CDC_DMA_RX_6 "RX_CDC_DMA_RX_6"
#define LPASS_BE_RX_CDC_DMA_RX_7 "RX_CDC_DMA_RX_7"
#define LPASS_BE_TX_CDC_DMA_TX_0 "TX_CDC_DMA_TX_0"
#define LPASS_BE_TX_CDC_DMA_TX_1 "TX_CDC_DMA_TX_1"
#define LPASS_BE_TX_CDC_DMA_TX_2 "TX_CDC_DMA_TX_2"
#define LPASS_BE_TX_CDC_DMA_TX_3 "TX_CDC_DMA_TX_3"
#define LPASS_BE_TX_CDC_DMA_TX_4 "TX_CDC_DMA_TX_4"
#define LPASS_BE_TX_CDC_DMA_TX_5 "TX_CDC_DMA_TX_5"

/* For multimedia front-ends, asm session is allocated dynamically.
 * Hence, asm session/multimedia front-end mapping has to be maintained.
 * Due to this reason, additional multimedia front-end must be placed before
 * non-multimedia front-ends.
 */

enum {
	MSM_FRONTEND_DAI_MULTIMEDIA1 = 0,
	MSM_FRONTEND_DAI_MULTIMEDIA2,
	MSM_FRONTEND_DAI_MULTIMEDIA3,
	MSM_FRONTEND_DAI_MULTIMEDIA4,
	MSM_FRONTEND_DAI_MULTIMEDIA5,
	MSM_FRONTEND_DAI_MULTIMEDIA6,
	MSM_FRONTEND_DAI_MULTIMEDIA7,
	MSM_FRONTEND_DAI_MULTIMEDIA8,
	MSM_FRONTEND_DAI_MULTIMEDIA9,
	MSM_FRONTEND_DAI_MULTIMEDIA10,
	MSM_FRONTEND_DAI_MULTIMEDIA11,
	MSM_FRONTEND_DAI_MULTIMEDIA12,
	MSM_FRONTEND_DAI_MULTIMEDIA13,
	MSM_FRONTEND_DAI_MULTIMEDIA14,
	MSM_FRONTEND_DAI_MULTIMEDIA15,
	MSM_FRONTEND_DAI_MULTIMEDIA16,
	MSM_FRONTEND_DAI_MULTIMEDIA17,
	MSM_FRONTEND_DAI_MULTIMEDIA18,
	MSM_FRONTEND_DAI_MULTIMEDIA19,
	MSM_FRONTEND_DAI_MULTIMEDIA20,
	MSM_FRONTEND_DAI_MULTIMEDIA21,
	MSM_FRONTEND_DAI_MULTIMEDIA22,
	MSM_FRONTEND_DAI_MULTIMEDIA23,
	MSM_FRONTEND_DAI_MULTIMEDIA24,
	MSM_FRONTEND_DAI_MULTIMEDIA25,
	MSM_FRONTEND_DAI_MULTIMEDIA26,
	MSM_FRONTEND_DAI_MULTIMEDIA27,
	MSM_FRONTEND_DAI_MULTIMEDIA28,
	MSM_FRONTEND_DAI_MULTIMEDIA29,
	MSM_FRONTEND_DAI_MULTIMEDIA30,
	MSM_FRONTEND_DAI_VOIP,
	MSM_FRONTEND_DAI_AFE_RX,
	MSM_FRONTEND_DAI_AFE_TX,
	MSM_FRONTEND_DAI_VOICE_STUB,
	MSM_FRONTEND_DAI_DTMF_RX,
	MSM_FRONTEND_DAI_QCHAT,
	MSM_FRONTEND_DAI_VOLTE_STUB,
	MSM_FRONTEND_DAI_LSM1,
	MSM_FRONTEND_DAI_LSM2,
	MSM_FRONTEND_DAI_LSM3,
	MSM_FRONTEND_DAI_LSM4,
	MSM_FRONTEND_DAI_LSM5,
	MSM_FRONTEND_DAI_LSM6,
	MSM_FRONTEND_DAI_LSM7,
	MSM_FRONTEND_DAI_LSM8,
	MSM_FRONTEND_DAI_VOICE2_STUB,
	MSM_FRONTEND_DAI_VOICEMMODE1,
	MSM_FRONTEND_DAI_VOICEMMODE2,
	MSM_FRONTEND_DAI_MAX,
};

#define MSM_FRONTEND_DAI_MM_SIZE (MSM_FRONTEND_DAI_MULTIMEDIA30 + 1)
#define MSM_FRONTEND_DAI_MM_MAX_ID MSM_FRONTEND_DAI_MULTIMEDIA30

enum {
	MSM_BACKEND_DAI_PRI_I2S_RX = 0,
	MSM_BACKEND_DAI_PRI_I2S_TX,
	MSM_BACKEND_DAI_SLIMBUS_0_RX,
	MSM_BACKEND_DAI_SLIMBUS_0_TX,
	MSM_BACKEND_DAI_HDMI_RX,
	MSM_BACKEND_DAI_INT_BT_SCO_RX,
	MSM_BACKEND_DAI_INT_BT_SCO_TX,
	MSM_BACKEND_DAI_INT_FM_RX,
	MSM_BACKEND_DAI_INT_FM_TX,
	MSM_BACKEND_DAI_AFE_PCM_RX,
	MSM_BACKEND_DAI_AFE_PCM_TX,
	MSM_BACKEND_DAI_AUXPCM_RX,
	MSM_BACKEND_DAI_AUXPCM_TX,
	MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
	MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
	MSM_BACKEND_DAI_INCALL_RECORD_RX,
	MSM_BACKEND_DAI_INCALL_RECORD_TX,
	MSM_BACKEND_DAI_MI2S_RX,
	MSM_BACKEND_DAI_MI2S_TX,
	MSM_BACKEND_DAI_SEC_I2S_RX,
	MSM_BACKEND_DAI_SLIMBUS_1_RX,
	MSM_BACKEND_DAI_SLIMBUS_1_TX,
	MSM_BACKEND_DAI_SLIMBUS_2_RX,
	MSM_BACKEND_DAI_SLIMBUS_2_TX,
	MSM_BACKEND_DAI_SLIMBUS_3_RX,
	MSM_BACKEND_DAI_SLIMBUS_3_TX,
	MSM_BACKEND_DAI_SLIMBUS_4_RX,
	MSM_BACKEND_DAI_SLIMBUS_4_TX,
	MSM_BACKEND_DAI_SLIMBUS_5_RX,
	MSM_BACKEND_DAI_SLIMBUS_5_TX,
	MSM_BACKEND_DAI_SLIMBUS_6_RX,
	MSM_BACKEND_DAI_SLIMBUS_6_TX,
	MSM_BACKEND_DAI_SLIMBUS_7_RX,
	MSM_BACKEND_DAI_SLIMBUS_7_TX,
	MSM_BACKEND_DAI_SLIMBUS_8_RX,
	MSM_BACKEND_DAI_SLIMBUS_8_TX,
	MSM_BACKEND_DAI_EXTPROC_RX,
	MSM_BACKEND_DAI_EXTPROC_TX,
	MSM_BACKEND_DAI_EXTPROC_EC_TX,
	MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
	MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
	MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
	MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
	MSM_BACKEND_DAI_PRI_MI2S_RX,
	MSM_BACKEND_DAI_PRI_MI2S_TX,
	MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
	MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
	MSM_BACKEND_DAI_AUDIO_I2S_RX,
	MSM_BACKEND_DAI_SEC_AUXPCM_RX,
	MSM_BACKEND_DAI_SEC_AUXPCM_TX,
	MSM_BACKEND_DAI_PRI_SPDIF_RX,
	MSM_BACKEND_DAI_SECONDARY_MI2S_RX_SD1,
	MSM_BACKEND_DAI_QUINARY_MI2S_RX,
	MSM_BACKEND_DAI_QUINARY_MI2S_TX,
	MSM_BACKEND_DAI_SENARY_MI2S_TX,
	MSM_BACKEND_DAI_PRI_TDM_RX_0,
	MSM_BACKEND_DAI_PRI_TDM_TX_0,
	MSM_BACKEND_DAI_PRI_TDM_RX_1,
	MSM_BACKEND_DAI_PRI_TDM_TX_1,
	MSM_BACKEND_DAI_PRI_TDM_RX_2,
	MSM_BACKEND_DAI_PRI_TDM_TX_2,
	MSM_BACKEND_DAI_PRI_TDM_RX_3,
	MSM_BACKEND_DAI_PRI_TDM_TX_3,
	MSM_BACKEND_DAI_PRI_TDM_RX_4,
	MSM_BACKEND_DAI_PRI_TDM_TX_4,
	MSM_BACKEND_DAI_PRI_TDM_RX_5,
	MSM_BACKEND_DAI_PRI_TDM_TX_5,
	MSM_BACKEND_DAI_PRI_TDM_RX_6,
	MSM_BACKEND_DAI_PRI_TDM_TX_6,
	MSM_BACKEND_DAI_PRI_TDM_RX_7,
	MSM_BACKEND_DAI_PRI_TDM_TX_7,
	MSM_BACKEND_DAI_SEC_TDM_RX_0,
	MSM_BACKEND_DAI_SEC_TDM_TX_0,
	MSM_BACKEND_DAI_SEC_TDM_RX_1,
	MSM_BACKEND_DAI_SEC_TDM_TX_1,
	MSM_BACKEND_DAI_SEC_TDM_RX_2,
	MSM_BACKEND_DAI_SEC_TDM_TX_2,
	MSM_BACKEND_DAI_SEC_TDM_RX_3,
	MSM_BACKEND_DAI_SEC_TDM_TX_3,
	MSM_BACKEND_DAI_SEC_TDM_RX_4,
	MSM_BACKEND_DAI_SEC_TDM_TX_4,
	MSM_BACKEND_DAI_SEC_TDM_RX_5,
	MSM_BACKEND_DAI_SEC_TDM_TX_5,
	MSM_BACKEND_DAI_SEC_TDM_RX_6,
	MSM_BACKEND_DAI_SEC_TDM_TX_6,
	MSM_BACKEND_DAI_SEC_TDM_RX_7,
	MSM_BACKEND_DAI_SEC_TDM_TX_7,
	MSM_BACKEND_DAI_TERT_TDM_RX_0,
	MSM_BACKEND_DAI_TERT_TDM_TX_0,
	MSM_BACKEND_DAI_TERT_TDM_RX_1,
	MSM_BACKEND_DAI_TERT_TDM_TX_1,
	MSM_BACKEND_DAI_TERT_TDM_RX_2,
	MSM_BACKEND_DAI_TERT_TDM_TX_2,
	MSM_BACKEND_DAI_TERT_TDM_RX_3,
	MSM_BACKEND_DAI_TERT_TDM_TX_3,
	MSM_BACKEND_DAI_TERT_TDM_RX_4,
	MSM_BACKEND_DAI_TERT_TDM_TX_4,
	MSM_BACKEND_DAI_TERT_TDM_RX_5,
	MSM_BACKEND_DAI_TERT_TDM_TX_5,
	MSM_BACKEND_DAI_TERT_TDM_RX_6,
	MSM_BACKEND_DAI_TERT_TDM_TX_6,
	MSM_BACKEND_DAI_TERT_TDM_RX_7,
	MSM_BACKEND_DAI_TERT_TDM_TX_7,
	MSM_BACKEND_DAI_QUAT_TDM_RX_0,
	MSM_BACKEND_DAI_QUAT_TDM_TX_0,
	MSM_BACKEND_DAI_QUAT_TDM_RX_1,
	MSM_BACKEND_DAI_QUAT_TDM_TX_1,
	MSM_BACKEND_DAI_QUAT_TDM_RX_2,
	MSM_BACKEND_DAI_QUAT_TDM_TX_2,
	MSM_BACKEND_DAI_QUAT_TDM_RX_3,
	MSM_BACKEND_DAI_QUAT_TDM_TX_3,
	MSM_BACKEND_DAI_QUAT_TDM_RX_4,
	MSM_BACKEND_DAI_QUAT_TDM_TX_4,
	MSM_BACKEND_DAI_QUAT_TDM_RX_5,
	MSM_BACKEND_DAI_QUAT_TDM_TX_5,
	MSM_BACKEND_DAI_QUAT_TDM_RX_6,
	MSM_BACKEND_DAI_QUAT_TDM_TX_6,
	MSM_BACKEND_DAI_QUAT_TDM_RX_7,
	MSM_BACKEND_DAI_QUAT_TDM_TX_7,
	MSM_BACKEND_DAI_QUIN_TDM_RX_0,
	MSM_BACKEND_DAI_QUIN_TDM_TX_0,
	MSM_BACKEND_DAI_QUIN_TDM_RX_1,
	MSM_BACKEND_DAI_QUIN_TDM_TX_1,
	MSM_BACKEND_DAI_QUIN_TDM_RX_2,
	MSM_BACKEND_DAI_QUIN_TDM_TX_2,
	MSM_BACKEND_DAI_QUIN_TDM_RX_3,
	MSM_BACKEND_DAI_QUIN_TDM_TX_3,
	MSM_BACKEND_DAI_QUIN_TDM_RX_4,
	MSM_BACKEND_DAI_QUIN_TDM_TX_4,
	MSM_BACKEND_DAI_QUIN_TDM_RX_5,
	MSM_BACKEND_DAI_QUIN_TDM_TX_5,
	MSM_BACKEND_DAI_QUIN_TDM_RX_6,
	MSM_BACKEND_DAI_QUIN_TDM_TX_6,
	MSM_BACKEND_DAI_QUIN_TDM_RX_7,
	MSM_BACKEND_DAI_QUIN_TDM_TX_7,
	MSM_BACKEND_DAI_SEN_TDM_RX_0,
	MSM_BACKEND_DAI_SEN_TDM_TX_0,
	MSM_BACKEND_DAI_SEN_TDM_RX_1,
	MSM_BACKEND_DAI_SEN_TDM_TX_1,
	MSM_BACKEND_DAI_SEN_TDM_RX_2,
	MSM_BACKEND_DAI_SEN_TDM_TX_2,
	MSM_BACKEND_DAI_SEN_TDM_RX_3,
	MSM_BACKEND_DAI_SEN_TDM_TX_3,
	MSM_BACKEND_DAI_SEN_TDM_RX_4,
	MSM_BACKEND_DAI_SEN_TDM_TX_4,
	MSM_BACKEND_DAI_SEN_TDM_RX_5,
	MSM_BACKEND_DAI_SEN_TDM_TX_5,
	MSM_BACKEND_DAI_SEN_TDM_RX_6,
	MSM_BACKEND_DAI_SEN_TDM_TX_6,
	MSM_BACKEND_DAI_SEN_TDM_RX_7,
	MSM_BACKEND_DAI_SEN_TDM_TX_7,
	MSM_BACKEND_DAI_INT_BT_A2DP_RX,
	MSM_BACKEND_DAI_USB_RX,
	MSM_BACKEND_DAI_USB_TX,
	MSM_BACKEND_DAI_DISPLAY_PORT_RX,
	MSM_BACKEND_DAI_DISPLAY_PORT_RX_1,
	MSM_BACKEND_DAI_TERT_AUXPCM_RX,
	MSM_BACKEND_DAI_TERT_AUXPCM_TX,
	MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
	MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
	MSM_BACKEND_DAI_QUIN_AUXPCM_RX,
	MSM_BACKEND_DAI_QUIN_AUXPCM_TX,
	MSM_BACKEND_DAI_INT0_MI2S_RX,
	MSM_BACKEND_DAI_INT0_MI2S_TX,
	MSM_BACKEND_DAI_INT1_MI2S_RX,
	MSM_BACKEND_DAI_INT1_MI2S_TX,
	MSM_BACKEND_DAI_INT2_MI2S_RX,
	MSM_BACKEND_DAI_INT2_MI2S_TX,
	MSM_BACKEND_DAI_INT3_MI2S_RX,
	MSM_BACKEND_DAI_INT3_MI2S_TX,
	MSM_BACKEND_DAI_INT4_MI2S_RX,
	MSM_BACKEND_DAI_INT4_MI2S_TX,
	MSM_BACKEND_DAI_INT5_MI2S_RX,
	MSM_BACKEND_DAI_INT5_MI2S_TX,
	MSM_BACKEND_DAI_INT6_MI2S_RX,
	MSM_BACKEND_DAI_INT6_MI2S_TX,
	MSM_BACKEND_DAI_SEN_AUXPCM_RX,
	MSM_BACKEND_DAI_SEN_AUXPCM_TX,
	MSM_BACKEND_DAI_SENARY_MI2S_RX,
	MSM_BACKEND_DAI_WSA_CDC_DMA_RX_0,
	MSM_BACKEND_DAI_WSA_CDC_DMA_TX_0,
	MSM_BACKEND_DAI_WSA_CDC_DMA_RX_1,
	MSM_BACKEND_DAI_WSA_CDC_DMA_TX_1,
	MSM_BACKEND_DAI_WSA_CDC_DMA_TX_2,
	MSM_BACKEND_DAI_VA_CDC_DMA_TX_0,
	MSM_BACKEND_DAI_VA_CDC_DMA_TX_1,
	MSM_BACKEND_DAI_VA_CDC_DMA_TX_2,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_0,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_0,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_1,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_1,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_2,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_2,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_3,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_3,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_4,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_4,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_5,
	MSM_BACKEND_DAI_TX_CDC_DMA_TX_5,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_6,
	MSM_BACKEND_DAI_RX_CDC_DMA_RX_7,
	MSM_BACKEND_DAI_PRI_SPDIF_TX,
	MSM_BACKEND_DAI_SEC_SPDIF_RX,
	MSM_BACKEND_DAI_SEC_SPDIF_TX,
	MSM_BACKEND_DAI_SLIMBUS_9_RX,
	MSM_BACKEND_DAI_SLIMBUS_9_TX,
	MSM_BACKEND_DAI_AFE_LOOPBACK_TX,
	MSM_BACKEND_DAI_PRI_META_MI2S_RX,
	MSM_BACKEND_DAI_SEC_META_MI2S_RX,
	MSM_BACKEND_DAI_PROXY_RX,
	MSM_BACKEND_DAI_PROXY_TX,
	MSM_BACKEND_DAI_MAX,
};

enum msm_pcm_routing_event {
	MSM_PCM_RT_EVT_BUF_RECFG,
	MSM_PCM_RT_EVT_DEVSWITCH,
	MSM_PCM_RT_EVT_MAX,
};

enum {
	EXT_EC_REF_NONE = 0,
	EXT_EC_REF_PRI_MI2S_TX,
	EXT_EC_REF_SEC_MI2S_TX,
	EXT_EC_REF_TERT_MI2S_TX,
	EXT_EC_REF_QUAT_MI2S_TX,
	EXT_EC_REF_QUIN_MI2S_TX,
	EXT_EC_REF_SLIM_1_TX,
	EXT_EC_REF_PRI_TDM_TX,
	EXT_EC_REF_SEC_TDM_TX,
};

#define INVALID_SESSION -1
#define SESSION_TYPE_RX 0
#define SESSION_TYPE_TX 1
#define MAX_SESSION_TYPES 2
#define INT_RX_VOL_MAX_STEPS 0x2000
#define INT_RX_VOL_GAIN 0x2000

#define RELEASE_LOCK	0
#define ACQUIRE_LOCK	1

#define MSM_BACKEND_DAI_PP_PARAMS_REQ_MAX	2
#define HDMI_RX_ID				0x8001
#define ADM_PP_PARAM_MUTE_ID			0
#define ADM_PP_PARAM_MUTE_BIT			1
#define ADM_PP_PARAM_LATENCY_ID			1
#define ADM_PP_PARAM_LATENCY_BIT		2
#define BE_DAI_PORT_SESSIONS_IDX_MAX		4
#define BE_DAI_FE_SESSIONS_IDX_MAX		2

#define STREAM_TYPE_ASM 0
#define STREAM_TYPE_LSM 1

enum {
	ADM_TOPOLOGY_CAL_TYPE_IDX = 0,
	ADM_LSM_TOPOLOGY_CAL_TYPE_IDX,
	MAX_ROUTING_CAL_TYPES
};

struct msm_pcm_routing_evt {
	void (*event_func)(enum msm_pcm_routing_event, void *);
	void *priv_data;
};

struct msm_pcm_routing_bdai_data {
	u16 port_id; /* AFE port ID */
	u8 active; /* track if this backend is enabled */

	/* Front-end sessions */
	unsigned long fe_sessions[BE_DAI_FE_SESSIONS_IDX_MAX];
	/*
	 * Track Tx BE ports -> Rx BE ports.
	 * port_sessions[0] used to track BE 0 to BE 63.
	 * port_sessions[1] used to track BE 64 to BE 127.
	 * port_sessions[2] used to track BE 128 to BE 191.
	 * port_sessions[3] used to track BE 192 to BE 255.
	 */
	u64 port_sessions[BE_DAI_PORT_SESSIONS_IDX_MAX];

	unsigned int  sample_rate;
	unsigned int  channel;
	unsigned int  format;
	unsigned int  adm_override_ch;
	char *name;
};

struct msm_pcm_routing_fdai_data {
	u16 be_srate; /* track prior backend sample rate for flushing purpose */
	int strm_id; /* ASM stream ID */
	int perf_mode;
	struct msm_pcm_routing_evt event_info;
	u32 passthr_mode;
};

#define MAX_APP_TYPES	16
struct msm_pcm_routing_app_type_data {
	int app_type;
	u32 sample_rate;
	int bit_width;
	u32 num_out_channels;
};

struct msm_pcm_stream_app_type_cfg {
	int app_type;
	int acdb_dev_id;
	int sample_rate;
};

/* dai_id: front-end ID,
 * dspst_id:  DSP audio stream ID
 * stream_type: playback or capture
 */
int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode, int dspst_id,
				   int stream_type);
void msm_pcm_routing_reg_psthr_stream(int fedai_id, int dspst_id,
		int stream_type);
int msm_pcm_routing_reg_phy_compr_stream(int fedai_id, int perf_mode,
					  int dspst_id, int stream_type,
					  uint32_t compr_passthr);

int msm_pcm_routing_reg_phy_stream_v2(int fedai_id, int perf_mode,
				      int dspst_id, int stream_type,
				      struct msm_pcm_routing_evt event_info);

void msm_pcm_routing_dereg_phy_stream(int fedai_id, int stream_type);

int msm_routing_check_backend_enabled(int fedai_id);


void msm_pcm_routing_get_bedai_info(int be_idx,
				    struct msm_pcm_routing_bdai_data *bedai);
void msm_pcm_routing_get_fedai_info(int fe_idx, int sess_type,
				    struct msm_pcm_routing_fdai_data *fe_dai);
void msm_pcm_routing_acquire_lock(void);
void msm_pcm_routing_release_lock(void);

int msm_pcm_routing_reg_stream_app_type_cfg(
	int fedai_id, int session_type, int be_id,
	struct msm_pcm_stream_app_type_cfg *cfg_data);
int msm_pcm_routing_get_stream_app_type_cfg(
	int fedai_id, int session_type, int *be_id,
	struct msm_pcm_stream_app_type_cfg *cfg_data);
int msm_pcm_routing_send_chmix_cfg(int fe_id, int ip_channel_cnt,
	int op_channel_cnt, int *ch_wght_coeff,
	int session_type, int stream_type);
int msm_pcm_routing_get_pp_ch_cnt(int fe_id, int session_type);

int msm_pcm_routing_set_channel_mixer_cfg(
	int fe_id, int session_type,
	struct msm_pcm_channel_mixer *params);

int msm_pcm_routing_set_channel_mixer_runtime(
	int be_id, int session_id,
	int session_type,
	struct msm_pcm_channel_mixer *params);
#endif /*_MSM_PCM_H*/