0001
0002
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);