Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 // Copyright (c) 2020, Linaro Limited
0003 
0004 #include <sound/pcm.h>
0005 #include <sound/soc.h>
0006 #include <sound/pcm_params.h>
0007 #include <dt-bindings/sound/qcom,q6afe.h>
0008 #include "q6dsp-lpass-ports.h"
0009 
0010 #define Q6AFE_TDM_PB_DAI(pre, num, did) {               \
0011         .playback = {                       \
0012             .stream_name = pre" TDM"#num" Playback",    \
0013             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
0014                 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
0015                 SNDRV_PCM_RATE_176400,          \
0016             .formats = SNDRV_PCM_FMTBIT_S16_LE |        \
0017                    SNDRV_PCM_FMTBIT_S24_LE |        \
0018                    SNDRV_PCM_FMTBIT_S32_LE,     \
0019             .channels_min = 1,              \
0020             .channels_max = 8,              \
0021             .rate_min = 8000,               \
0022             .rate_max = 176400,             \
0023         },                          \
0024         .name = #did,                       \
0025         .id = did,                      \
0026     }
0027 
0028 #define Q6AFE_TDM_CAP_DAI(pre, num, did) {              \
0029         .capture = {                        \
0030             .stream_name = pre" TDM"#num" Capture",     \
0031             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
0032                 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
0033                 SNDRV_PCM_RATE_176400,          \
0034             .formats = SNDRV_PCM_FMTBIT_S16_LE |        \
0035                    SNDRV_PCM_FMTBIT_S24_LE |        \
0036                    SNDRV_PCM_FMTBIT_S32_LE,     \
0037             .channels_min = 1,              \
0038             .channels_max = 8,              \
0039             .rate_min = 8000,               \
0040             .rate_max = 176400,             \
0041         },                          \
0042         .name = #did,                       \
0043         .id = did,                      \
0044     }
0045 
0046 #define Q6AFE_CDC_DMA_RX_DAI(did) {             \
0047         .playback = {                       \
0048             .stream_name = #did" Playback", \
0049             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
0050                 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
0051                 SNDRV_PCM_RATE_176400,          \
0052             .formats = SNDRV_PCM_FMTBIT_S16_LE |        \
0053                    SNDRV_PCM_FMTBIT_S24_LE |        \
0054                    SNDRV_PCM_FMTBIT_S32_LE,     \
0055             .channels_min = 1,              \
0056             .channels_max = 8,              \
0057             .rate_min = 8000,               \
0058             .rate_max = 176400,             \
0059         },                          \
0060         .name = #did,                       \
0061         .id = did,                      \
0062     }
0063 
0064 #define Q6AFE_CDC_DMA_TX_DAI(did) {             \
0065         .capture = {                        \
0066             .stream_name = #did" Capture",      \
0067             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
0068                 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
0069                 SNDRV_PCM_RATE_176400,          \
0070             .formats = SNDRV_PCM_FMTBIT_S16_LE |        \
0071                    SNDRV_PCM_FMTBIT_S24_LE |        \
0072                    SNDRV_PCM_FMTBIT_S32_LE,     \
0073             .channels_min = 1,              \
0074             .channels_max = 8,              \
0075             .rate_min = 8000,               \
0076             .rate_max = 176400,             \
0077         },                          \
0078         .name = #did,                       \
0079         .id = did,                      \
0080     }
0081 
0082 
0083 static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = {
0084     {
0085         .playback = {
0086             .stream_name = "HDMI Playback",
0087             .rates = SNDRV_PCM_RATE_48000 |
0088                  SNDRV_PCM_RATE_96000 |
0089                  SNDRV_PCM_RATE_192000,
0090             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0091                    SNDRV_PCM_FMTBIT_S24_LE,
0092             .channels_min = 2,
0093             .channels_max = 8,
0094             .rate_max =     192000,
0095             .rate_min = 48000,
0096         },
0097         .id = HDMI_RX,
0098         .name = "HDMI",
0099     }, {
0100         .name = "SLIMBUS_0_RX",
0101         .id = SLIMBUS_0_RX,
0102         .playback = {
0103             .stream_name = "Slimbus Playback",
0104             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0105                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0106                  SNDRV_PCM_RATE_192000,
0107             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0108                    SNDRV_PCM_FMTBIT_S24_LE,
0109             .channels_min = 1,
0110             .channels_max = 8,
0111             .rate_min = 8000,
0112             .rate_max = 192000,
0113         },
0114     }, {
0115         .name = "SLIMBUS_0_TX",
0116         .id = SLIMBUS_0_TX,
0117         .capture = {
0118             .stream_name = "Slimbus Capture",
0119             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0120                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0121                  SNDRV_PCM_RATE_192000,
0122             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0123                    SNDRV_PCM_FMTBIT_S24_LE,
0124             .channels_min = 1,
0125             .channels_max = 8,
0126             .rate_min = 8000,
0127             .rate_max = 192000,
0128         },
0129     }, {
0130         .playback = {
0131             .stream_name = "Slimbus1 Playback",
0132             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
0133                  SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
0134                  SNDRV_PCM_RATE_192000,
0135             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0136                    SNDRV_PCM_FMTBIT_S24_LE,
0137             .channels_min = 1,
0138             .channels_max = 2,
0139             .rate_min = 8000,
0140             .rate_max = 192000,
0141         },
0142         .name = "SLIMBUS_1_RX",
0143         .id = SLIMBUS_1_RX,
0144     }, {
0145         .name = "SLIMBUS_1_TX",
0146         .id = SLIMBUS_1_TX,
0147         .capture = {
0148             .stream_name = "Slimbus1 Capture",
0149             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0150                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0151                  SNDRV_PCM_RATE_192000,
0152             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0153                    SNDRV_PCM_FMTBIT_S24_LE,
0154             .channels_min = 1,
0155             .channels_max = 8,
0156             .rate_min = 8000,
0157             .rate_max = 192000,
0158         },
0159     }, {
0160         .playback = {
0161             .stream_name = "Slimbus2 Playback",
0162             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0163                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0164                  SNDRV_PCM_RATE_192000,
0165             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0166                    SNDRV_PCM_FMTBIT_S24_LE,
0167             .channels_min = 1,
0168             .channels_max = 8,
0169             .rate_min = 8000,
0170             .rate_max = 192000,
0171         },
0172         .name = "SLIMBUS_2_RX",
0173         .id = SLIMBUS_2_RX,
0174 
0175     }, {
0176         .name = "SLIMBUS_2_TX",
0177         .id = SLIMBUS_2_TX,
0178         .capture = {
0179             .stream_name = "Slimbus2 Capture",
0180             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0181                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0182                  SNDRV_PCM_RATE_192000,
0183             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0184                    SNDRV_PCM_FMTBIT_S24_LE,
0185             .channels_min = 1,
0186             .channels_max = 8,
0187             .rate_min = 8000,
0188             .rate_max = 192000,
0189         },
0190     }, {
0191         .playback = {
0192             .stream_name = "Slimbus3 Playback",
0193             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
0194                  SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
0195                  SNDRV_PCM_RATE_192000,
0196             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0197                    SNDRV_PCM_FMTBIT_S24_LE,
0198             .channels_min = 1,
0199             .channels_max = 2,
0200             .rate_min = 8000,
0201             .rate_max = 192000,
0202         },
0203         .name = "SLIMBUS_3_RX",
0204         .id = SLIMBUS_3_RX,
0205 
0206     }, {
0207         .name = "SLIMBUS_3_TX",
0208         .id = SLIMBUS_3_TX,
0209         .capture = {
0210             .stream_name = "Slimbus3 Capture",
0211             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0212                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0213                  SNDRV_PCM_RATE_192000,
0214             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0215                    SNDRV_PCM_FMTBIT_S24_LE,
0216             .channels_min = 1,
0217             .channels_max = 8,
0218             .rate_min = 8000,
0219             .rate_max = 192000,
0220         },
0221     }, {
0222         .playback = {
0223             .stream_name = "Slimbus4 Playback",
0224             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
0225                  SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
0226                  SNDRV_PCM_RATE_192000,
0227             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0228                    SNDRV_PCM_FMTBIT_S24_LE,
0229             .channels_min = 1,
0230             .channels_max = 2,
0231             .rate_min = 8000,
0232             .rate_max = 192000,
0233         },
0234         .name = "SLIMBUS_4_RX",
0235         .id = SLIMBUS_4_RX,
0236 
0237     }, {
0238         .name = "SLIMBUS_4_TX",
0239         .id = SLIMBUS_4_TX,
0240         .capture = {
0241             .stream_name = "Slimbus4 Capture",
0242             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0243                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0244                  SNDRV_PCM_RATE_192000,
0245             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0246                    SNDRV_PCM_FMTBIT_S24_LE,
0247             .channels_min = 1,
0248             .channels_max = 8,
0249             .rate_min = 8000,
0250             .rate_max = 192000,
0251         },
0252     }, {
0253         .playback = {
0254             .stream_name = "Slimbus5 Playback",
0255             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
0256                  SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
0257                  SNDRV_PCM_RATE_192000,
0258             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0259                    SNDRV_PCM_FMTBIT_S24_LE,
0260             .channels_min = 1,
0261             .channels_max = 2,
0262             .rate_min = 8000,
0263             .rate_max = 192000,
0264         },
0265         .name = "SLIMBUS_5_RX",
0266         .id = SLIMBUS_5_RX,
0267 
0268     }, {
0269         .name = "SLIMBUS_5_TX",
0270         .id = SLIMBUS_5_TX,
0271         .capture = {
0272             .stream_name = "Slimbus5 Capture",
0273             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0274                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0275                  SNDRV_PCM_RATE_192000,
0276             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0277                    SNDRV_PCM_FMTBIT_S24_LE,
0278             .channels_min = 1,
0279             .channels_max = 8,
0280             .rate_min = 8000,
0281             .rate_max = 192000,
0282         },
0283     }, {
0284         .playback = {
0285             .stream_name = "Slimbus6 Playback",
0286             .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
0287                  SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
0288                  SNDRV_PCM_RATE_192000,
0289             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0290                    SNDRV_PCM_FMTBIT_S24_LE,
0291             .channels_min = 1,
0292             .channels_max = 2,
0293             .rate_min = 8000,
0294             .rate_max = 192000,
0295         },
0296         .name = "SLIMBUS_6_RX",
0297         .id = SLIMBUS_6_RX,
0298 
0299     }, {
0300         .name = "SLIMBUS_6_TX",
0301         .id = SLIMBUS_6_TX,
0302         .capture = {
0303             .stream_name = "Slimbus6 Capture",
0304             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0305                  SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0306                  SNDRV_PCM_RATE_192000,
0307             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0308                    SNDRV_PCM_FMTBIT_S24_LE,
0309             .channels_min = 1,
0310             .channels_max = 8,
0311             .rate_min = 8000,
0312             .rate_max = 192000,
0313         },
0314     }, {
0315         .playback = {
0316             .stream_name = "Primary MI2S Playback",
0317             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0318                  SNDRV_PCM_RATE_16000,
0319             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0320                    SNDRV_PCM_FMTBIT_S24_LE,
0321             .channels_min = 1,
0322             .channels_max = 8,
0323             .rate_min =     8000,
0324             .rate_max =     48000,
0325         },
0326         .id = PRIMARY_MI2S_RX,
0327         .name = "PRI_MI2S_RX",
0328     }, {
0329         .capture = {
0330             .stream_name = "Primary MI2S Capture",
0331             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0332                  SNDRV_PCM_RATE_16000,
0333             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0334                    SNDRV_PCM_FMTBIT_S24_LE,
0335             .channels_min = 1,
0336             .channels_max = 8,
0337             .rate_min =     8000,
0338             .rate_max =     48000,
0339         },
0340         .id = PRIMARY_MI2S_TX,
0341         .name = "PRI_MI2S_TX",
0342     }, {
0343         .playback = {
0344             .stream_name = "Secondary MI2S Playback",
0345             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0346                  SNDRV_PCM_RATE_16000,
0347             .formats = SNDRV_PCM_FMTBIT_S16_LE,
0348             .channels_min = 1,
0349             .channels_max = 8,
0350             .rate_min =     8000,
0351             .rate_max =     48000,
0352         },
0353         .name = "SEC_MI2S_RX",
0354         .id = SECONDARY_MI2S_RX,
0355     }, {
0356         .capture = {
0357             .stream_name = "Secondary MI2S Capture",
0358             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0359                  SNDRV_PCM_RATE_16000,
0360             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0361                    SNDRV_PCM_FMTBIT_S24_LE,
0362             .channels_min = 1,
0363             .channels_max = 8,
0364             .rate_min =     8000,
0365             .rate_max =     48000,
0366         },
0367         .id = SECONDARY_MI2S_TX,
0368         .name = "SEC_MI2S_TX",
0369     }, {
0370         .playback = {
0371             .stream_name = "Tertiary MI2S Playback",
0372             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0373                  SNDRV_PCM_RATE_16000,
0374             .formats = SNDRV_PCM_FMTBIT_S16_LE,
0375             .channels_min = 1,
0376             .channels_max = 8,
0377             .rate_min =     8000,
0378             .rate_max =     48000,
0379         },
0380         .name = "TERT_MI2S_RX",
0381         .id = TERTIARY_MI2S_RX,
0382     }, {
0383         .capture = {
0384             .stream_name = "Tertiary MI2S Capture",
0385             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0386                  SNDRV_PCM_RATE_16000,
0387             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0388                    SNDRV_PCM_FMTBIT_S24_LE,
0389             .channels_min = 1,
0390             .channels_max = 8,
0391             .rate_min =     8000,
0392             .rate_max =     48000,
0393         },
0394         .id = TERTIARY_MI2S_TX,
0395         .name = "TERT_MI2S_TX",
0396     }, {
0397         .playback = {
0398             .stream_name = "Quaternary MI2S Playback",
0399             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0400                  SNDRV_PCM_RATE_16000,
0401             .formats = SNDRV_PCM_FMTBIT_S16_LE,
0402             .channels_min = 1,
0403             .channels_max = 8,
0404             .rate_min =     8000,
0405             .rate_max =     48000,
0406         },
0407         .name = "QUAT_MI2S_RX",
0408         .id = QUATERNARY_MI2S_RX,
0409     }, {
0410         .capture = {
0411             .stream_name = "Quaternary MI2S Capture",
0412             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0413                  SNDRV_PCM_RATE_16000,
0414             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0415                    SNDRV_PCM_FMTBIT_S24_LE,
0416             .channels_min = 1,
0417             .channels_max = 8,
0418             .rate_min =     8000,
0419             .rate_max =     48000,
0420         },
0421         .id = QUATERNARY_MI2S_TX,
0422         .name = "QUAT_MI2S_TX",
0423     }, {
0424         .playback = {
0425             .stream_name = "Quinary MI2S Playback",
0426             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0427             SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
0428             SNDRV_PCM_RATE_192000,
0429             .formats = SNDRV_PCM_FMTBIT_S16_LE,
0430             .channels_min = 1,
0431             .channels_max = 8,
0432             .rate_min =     8000,
0433             .rate_max =     192000,
0434         },
0435         .id = QUINARY_MI2S_RX,
0436         .name = "QUIN_MI2S_RX",
0437     }, {
0438         .capture = {
0439             .stream_name = "Quinary MI2S Capture",
0440             .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
0441                  SNDRV_PCM_RATE_16000,
0442             .formats = SNDRV_PCM_FMTBIT_S16_LE,
0443             .channels_min = 1,
0444             .channels_max = 8,
0445             .rate_min =     8000,
0446             .rate_max =     48000,
0447         },
0448         .id = QUINARY_MI2S_TX,
0449         .name = "QUIN_MI2S_TX",
0450     },
0451     Q6AFE_TDM_PB_DAI("Primary", 0, PRIMARY_TDM_RX_0),
0452     Q6AFE_TDM_PB_DAI("Primary", 1, PRIMARY_TDM_RX_1),
0453     Q6AFE_TDM_PB_DAI("Primary", 2, PRIMARY_TDM_RX_2),
0454     Q6AFE_TDM_PB_DAI("Primary", 3, PRIMARY_TDM_RX_3),
0455     Q6AFE_TDM_PB_DAI("Primary", 4, PRIMARY_TDM_RX_4),
0456     Q6AFE_TDM_PB_DAI("Primary", 5, PRIMARY_TDM_RX_5),
0457     Q6AFE_TDM_PB_DAI("Primary", 6, PRIMARY_TDM_RX_6),
0458     Q6AFE_TDM_PB_DAI("Primary", 7, PRIMARY_TDM_RX_7),
0459     Q6AFE_TDM_CAP_DAI("Primary", 0, PRIMARY_TDM_TX_0),
0460     Q6AFE_TDM_CAP_DAI("Primary", 1, PRIMARY_TDM_TX_1),
0461     Q6AFE_TDM_CAP_DAI("Primary", 2, PRIMARY_TDM_TX_2),
0462     Q6AFE_TDM_CAP_DAI("Primary", 3, PRIMARY_TDM_TX_3),
0463     Q6AFE_TDM_CAP_DAI("Primary", 4, PRIMARY_TDM_TX_4),
0464     Q6AFE_TDM_CAP_DAI("Primary", 5, PRIMARY_TDM_TX_5),
0465     Q6AFE_TDM_CAP_DAI("Primary", 6, PRIMARY_TDM_TX_6),
0466     Q6AFE_TDM_CAP_DAI("Primary", 7, PRIMARY_TDM_TX_7),
0467     Q6AFE_TDM_PB_DAI("Secondary", 0, SECONDARY_TDM_RX_0),
0468     Q6AFE_TDM_PB_DAI("Secondary", 1, SECONDARY_TDM_RX_1),
0469     Q6AFE_TDM_PB_DAI("Secondary", 2, SECONDARY_TDM_RX_2),
0470     Q6AFE_TDM_PB_DAI("Secondary", 3, SECONDARY_TDM_RX_3),
0471     Q6AFE_TDM_PB_DAI("Secondary", 4, SECONDARY_TDM_RX_4),
0472     Q6AFE_TDM_PB_DAI("Secondary", 5, SECONDARY_TDM_RX_5),
0473     Q6AFE_TDM_PB_DAI("Secondary", 6, SECONDARY_TDM_RX_6),
0474     Q6AFE_TDM_PB_DAI("Secondary", 7, SECONDARY_TDM_RX_7),
0475     Q6AFE_TDM_CAP_DAI("Secondary", 0, SECONDARY_TDM_TX_0),
0476     Q6AFE_TDM_CAP_DAI("Secondary", 1, SECONDARY_TDM_TX_1),
0477     Q6AFE_TDM_CAP_DAI("Secondary", 2, SECONDARY_TDM_TX_2),
0478     Q6AFE_TDM_CAP_DAI("Secondary", 3, SECONDARY_TDM_TX_3),
0479     Q6AFE_TDM_CAP_DAI("Secondary", 4, SECONDARY_TDM_TX_4),
0480     Q6AFE_TDM_CAP_DAI("Secondary", 5, SECONDARY_TDM_TX_5),
0481     Q6AFE_TDM_CAP_DAI("Secondary", 6, SECONDARY_TDM_TX_6),
0482     Q6AFE_TDM_CAP_DAI("Secondary", 7, SECONDARY_TDM_TX_7),
0483     Q6AFE_TDM_PB_DAI("Tertiary", 0, TERTIARY_TDM_RX_0),
0484     Q6AFE_TDM_PB_DAI("Tertiary", 1, TERTIARY_TDM_RX_1),
0485     Q6AFE_TDM_PB_DAI("Tertiary", 2, TERTIARY_TDM_RX_2),
0486     Q6AFE_TDM_PB_DAI("Tertiary", 3, TERTIARY_TDM_RX_3),
0487     Q6AFE_TDM_PB_DAI("Tertiary", 4, TERTIARY_TDM_RX_4),
0488     Q6AFE_TDM_PB_DAI("Tertiary", 5, TERTIARY_TDM_RX_5),
0489     Q6AFE_TDM_PB_DAI("Tertiary", 6, TERTIARY_TDM_RX_6),
0490     Q6AFE_TDM_PB_DAI("Tertiary", 7, TERTIARY_TDM_RX_7),
0491     Q6AFE_TDM_CAP_DAI("Tertiary", 0, TERTIARY_TDM_TX_0),
0492     Q6AFE_TDM_CAP_DAI("Tertiary", 1, TERTIARY_TDM_TX_1),
0493     Q6AFE_TDM_CAP_DAI("Tertiary", 2, TERTIARY_TDM_TX_2),
0494     Q6AFE_TDM_CAP_DAI("Tertiary", 3, TERTIARY_TDM_TX_3),
0495     Q6AFE_TDM_CAP_DAI("Tertiary", 4, TERTIARY_TDM_TX_4),
0496     Q6AFE_TDM_CAP_DAI("Tertiary", 5, TERTIARY_TDM_TX_5),
0497     Q6AFE_TDM_CAP_DAI("Tertiary", 6, TERTIARY_TDM_TX_6),
0498     Q6AFE_TDM_CAP_DAI("Tertiary", 7, TERTIARY_TDM_TX_7),
0499     Q6AFE_TDM_PB_DAI("Quaternary", 0, QUATERNARY_TDM_RX_0),
0500     Q6AFE_TDM_PB_DAI("Quaternary", 1, QUATERNARY_TDM_RX_1),
0501     Q6AFE_TDM_PB_DAI("Quaternary", 2, QUATERNARY_TDM_RX_2),
0502     Q6AFE_TDM_PB_DAI("Quaternary", 3, QUATERNARY_TDM_RX_3),
0503     Q6AFE_TDM_PB_DAI("Quaternary", 4, QUATERNARY_TDM_RX_4),
0504     Q6AFE_TDM_PB_DAI("Quaternary", 5, QUATERNARY_TDM_RX_5),
0505     Q6AFE_TDM_PB_DAI("Quaternary", 6, QUATERNARY_TDM_RX_6),
0506     Q6AFE_TDM_PB_DAI("Quaternary", 7, QUATERNARY_TDM_RX_7),
0507     Q6AFE_TDM_CAP_DAI("Quaternary", 0, QUATERNARY_TDM_TX_0),
0508     Q6AFE_TDM_CAP_DAI("Quaternary", 1, QUATERNARY_TDM_TX_1),
0509     Q6AFE_TDM_CAP_DAI("Quaternary", 2, QUATERNARY_TDM_TX_2),
0510     Q6AFE_TDM_CAP_DAI("Quaternary", 3, QUATERNARY_TDM_TX_3),
0511     Q6AFE_TDM_CAP_DAI("Quaternary", 4, QUATERNARY_TDM_TX_4),
0512     Q6AFE_TDM_CAP_DAI("Quaternary", 5, QUATERNARY_TDM_TX_5),
0513     Q6AFE_TDM_CAP_DAI("Quaternary", 6, QUATERNARY_TDM_TX_6),
0514     Q6AFE_TDM_CAP_DAI("Quaternary", 7, QUATERNARY_TDM_TX_7),
0515     Q6AFE_TDM_PB_DAI("Quinary", 0, QUINARY_TDM_RX_0),
0516     Q6AFE_TDM_PB_DAI("Quinary", 1, QUINARY_TDM_RX_1),
0517     Q6AFE_TDM_PB_DAI("Quinary", 2, QUINARY_TDM_RX_2),
0518     Q6AFE_TDM_PB_DAI("Quinary", 3, QUINARY_TDM_RX_3),
0519     Q6AFE_TDM_PB_DAI("Quinary", 4, QUINARY_TDM_RX_4),
0520     Q6AFE_TDM_PB_DAI("Quinary", 5, QUINARY_TDM_RX_5),
0521     Q6AFE_TDM_PB_DAI("Quinary", 6, QUINARY_TDM_RX_6),
0522     Q6AFE_TDM_PB_DAI("Quinary", 7, QUINARY_TDM_RX_7),
0523     Q6AFE_TDM_CAP_DAI("Quinary", 0, QUINARY_TDM_TX_0),
0524     Q6AFE_TDM_CAP_DAI("Quinary", 1, QUINARY_TDM_TX_1),
0525     Q6AFE_TDM_CAP_DAI("Quinary", 2, QUINARY_TDM_TX_2),
0526     Q6AFE_TDM_CAP_DAI("Quinary", 3, QUINARY_TDM_TX_3),
0527     Q6AFE_TDM_CAP_DAI("Quinary", 4, QUINARY_TDM_TX_4),
0528     Q6AFE_TDM_CAP_DAI("Quinary", 5, QUINARY_TDM_TX_5),
0529     Q6AFE_TDM_CAP_DAI("Quinary", 6, QUINARY_TDM_TX_6),
0530     Q6AFE_TDM_CAP_DAI("Quinary", 7, QUINARY_TDM_TX_7),
0531     {
0532         .playback = {
0533             .stream_name = "Display Port Playback",
0534             .rates = SNDRV_PCM_RATE_48000 |
0535                  SNDRV_PCM_RATE_96000 |
0536                  SNDRV_PCM_RATE_192000,
0537             .formats = SNDRV_PCM_FMTBIT_S16_LE |
0538                    SNDRV_PCM_FMTBIT_S24_LE,
0539             .channels_min = 2,
0540             .channels_max = 8,
0541             .rate_max =     192000,
0542             .rate_min = 48000,
0543         },
0544         .id = DISPLAY_PORT_RX,
0545         .name = "DISPLAY_PORT",
0546     },
0547     Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_0),
0548     Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_0),
0549     Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_1),
0550     Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_1),
0551     Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_2),
0552     Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_0),
0553     Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_1),
0554     Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_2),
0555     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_0),
0556     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_0),
0557     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_1),
0558     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_1),
0559     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_2),
0560     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_2),
0561     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_3),
0562     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_3),
0563     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_4),
0564     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_4),
0565     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_5),
0566     Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_5),
0567     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_6),
0568     Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_7),
0569 };
0570 
0571 int q6dsp_audio_ports_of_xlate_dai_name(struct snd_soc_component *component,
0572                     const struct of_phandle_args *args,
0573                     const char **dai_name)
0574 {
0575     int id = args->args[0];
0576     int ret = -EINVAL;
0577     int i;
0578 
0579     for (i = 0; i  < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) {
0580         if (q6dsp_audio_fe_dais[i].id == id) {
0581             *dai_name = q6dsp_audio_fe_dais[i].name;
0582             ret = 0;
0583             break;
0584         }
0585     }
0586 
0587     return ret;
0588 }
0589 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name);
0590 
0591 struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev,
0592                 struct q6dsp_audio_port_dai_driver_config *cfg,
0593                 int *num_dais)
0594 {
0595     int i;
0596 
0597     for (i = 0; i  < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) {
0598         q6dsp_audio_fe_dais[i].probe = cfg->probe;
0599         q6dsp_audio_fe_dais[i].remove = cfg->remove;
0600 
0601         switch (q6dsp_audio_fe_dais[i].id) {
0602         case HDMI_RX:
0603         case DISPLAY_PORT_RX:
0604             q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops;
0605             break;
0606         case SLIMBUS_0_RX ... SLIMBUS_6_TX:
0607             q6dsp_audio_fe_dais[i].ops = cfg->q6slim_ops;
0608             break;
0609         case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
0610         case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
0611             q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops;
0612             break;
0613         case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7:
0614             q6dsp_audio_fe_dais[i].ops = cfg->q6tdm_ops;
0615             break;
0616         case WSA_CODEC_DMA_RX_0 ... RX_CODEC_DMA_RX_7:
0617             q6dsp_audio_fe_dais[i].ops = cfg->q6dma_ops;
0618             break;
0619         default:
0620             break;
0621         }
0622     }
0623 
0624     *num_dais = ARRAY_SIZE(q6dsp_audio_fe_dais);
0625     return q6dsp_audio_fe_dais;
0626 }
0627 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config);