1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2020, Linaro Limited 3 4 #include <sound/pcm.h> 5 #include <sound/soc.h> 6 #include <sound/pcm_params.h> 7 #include <dt-bindings/sound/qcom,q6afe.h> 8 #include "q6dsp-lpass-ports.h" 9 10 #define Q6AFE_TDM_PB_DAI(pre, num, did) { \ 11 .playback = { \ 12 .stream_name = pre" TDM"#num" Playback", \ 13 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ 14 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\ 15 SNDRV_PCM_RATE_176400, \ 16 .formats = SNDRV_PCM_FMTBIT_S16_LE | \ 17 SNDRV_PCM_FMTBIT_S24_LE | \ 18 SNDRV_PCM_FMTBIT_S32_LE, \ 19 .channels_min = 1, \ 20 .channels_max = 8, \ 21 .rate_min = 8000, \ 22 .rate_max = 176400, \ 23 }, \ 24 .name = #did, \ 25 .id = did, \ 26 } 27 28 #define Q6AFE_TDM_CAP_DAI(pre, num, did) { \ 29 .capture = { \ 30 .stream_name = pre" TDM"#num" Capture", \ 31 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ 32 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\ 33 SNDRV_PCM_RATE_176400, \ 34 .formats = SNDRV_PCM_FMTBIT_S16_LE | \ 35 SNDRV_PCM_FMTBIT_S24_LE | \ 36 SNDRV_PCM_FMTBIT_S32_LE, \ 37 .channels_min = 1, \ 38 .channels_max = 8, \ 39 .rate_min = 8000, \ 40 .rate_max = 176400, \ 41 }, \ 42 .name = #did, \ 43 .id = did, \ 44 } 45 46 #define Q6AFE_CDC_DMA_RX_DAI(did) { \ 47 .playback = { \ 48 .stream_name = #did" Playback", \ 49 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ 50 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\ 51 SNDRV_PCM_RATE_176400, \ 52 .formats = SNDRV_PCM_FMTBIT_S16_LE | \ 53 SNDRV_PCM_FMTBIT_S24_LE | \ 54 SNDRV_PCM_FMTBIT_S32_LE, \ 55 .channels_min = 1, \ 56 .channels_max = 8, \ 57 .rate_min = 8000, \ 58 .rate_max = 176400, \ 59 }, \ 60 .name = #did, \ 61 .id = did, \ 62 } 63 64 #define Q6AFE_CDC_DMA_TX_DAI(did) { \ 65 .capture = { \ 66 .stream_name = #did" Capture", \ 67 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ 68 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\ 69 SNDRV_PCM_RATE_176400, \ 70 .formats = SNDRV_PCM_FMTBIT_S16_LE | \ 71 SNDRV_PCM_FMTBIT_S24_LE | \ 72 SNDRV_PCM_FMTBIT_S32_LE, \ 73 .channels_min = 1, \ 74 .channels_max = 8, \ 75 .rate_min = 8000, \ 76 .rate_max = 176400, \ 77 }, \ 78 .name = #did, \ 79 .id = did, \ 80 } 81 82 #define Q6AFE_DP_RX_DAI(did) { \ 83 .playback = { \ 84 .stream_name = #did" Playback", \ 85 .rates = SNDRV_PCM_RATE_48000 | \ 86 SNDRV_PCM_RATE_96000 | \ 87 SNDRV_PCM_RATE_192000, \ 88 .formats = SNDRV_PCM_FMTBIT_S16_LE | \ 89 SNDRV_PCM_FMTBIT_S24_LE, \ 90 .channels_min = 2, \ 91 .channels_max = 8, \ 92 .rate_min = 48000, \ 93 .rate_max = 192000, \ 94 }, \ 95 .name = #did, \ 96 .id = did, \ 97 } 98 99 static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = { 100 { 101 .playback = { 102 .stream_name = "HDMI Playback", 103 .rates = SNDRV_PCM_RATE_48000 | 104 SNDRV_PCM_RATE_96000 | 105 SNDRV_PCM_RATE_192000, 106 .formats = SNDRV_PCM_FMTBIT_S16_LE | 107 SNDRV_PCM_FMTBIT_S24_LE, 108 .channels_min = 2, 109 .channels_max = 8, 110 .rate_max = 192000, 111 .rate_min = 48000, 112 }, 113 .id = HDMI_RX, 114 .name = "HDMI", 115 }, { 116 .name = "SLIMBUS_0_RX", 117 .id = SLIMBUS_0_RX, 118 .playback = { 119 .stream_name = "Slimbus Playback", 120 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 121 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 122 SNDRV_PCM_RATE_192000, 123 .formats = SNDRV_PCM_FMTBIT_S16_LE | 124 SNDRV_PCM_FMTBIT_S24_LE, 125 .channels_min = 1, 126 .channels_max = 8, 127 .rate_min = 8000, 128 .rate_max = 192000, 129 }, 130 }, { 131 .name = "SLIMBUS_0_TX", 132 .id = SLIMBUS_0_TX, 133 .capture = { 134 .stream_name = "Slimbus Capture", 135 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 136 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 137 SNDRV_PCM_RATE_192000, 138 .formats = SNDRV_PCM_FMTBIT_S16_LE | 139 SNDRV_PCM_FMTBIT_S24_LE, 140 .channels_min = 1, 141 .channels_max = 8, 142 .rate_min = 8000, 143 .rate_max = 192000, 144 }, 145 }, { 146 .playback = { 147 .stream_name = "Slimbus1 Playback", 148 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | 149 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | 150 SNDRV_PCM_RATE_192000, 151 .formats = SNDRV_PCM_FMTBIT_S16_LE | 152 SNDRV_PCM_FMTBIT_S24_LE, 153 .channels_min = 1, 154 .channels_max = 2, 155 .rate_min = 8000, 156 .rate_max = 192000, 157 }, 158 .name = "SLIMBUS_1_RX", 159 .id = SLIMBUS_1_RX, 160 }, { 161 .name = "SLIMBUS_1_TX", 162 .id = SLIMBUS_1_TX, 163 .capture = { 164 .stream_name = "Slimbus1 Capture", 165 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 166 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 167 SNDRV_PCM_RATE_192000, 168 .formats = SNDRV_PCM_FMTBIT_S16_LE | 169 SNDRV_PCM_FMTBIT_S24_LE, 170 .channels_min = 1, 171 .channels_max = 8, 172 .rate_min = 8000, 173 .rate_max = 192000, 174 }, 175 }, { 176 .playback = { 177 .stream_name = "Slimbus2 Playback", 178 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 179 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 180 SNDRV_PCM_RATE_192000, 181 .formats = SNDRV_PCM_FMTBIT_S16_LE | 182 SNDRV_PCM_FMTBIT_S24_LE, 183 .channels_min = 1, 184 .channels_max = 8, 185 .rate_min = 8000, 186 .rate_max = 192000, 187 }, 188 .name = "SLIMBUS_2_RX", 189 .id = SLIMBUS_2_RX, 190 191 }, { 192 .name = "SLIMBUS_2_TX", 193 .id = SLIMBUS_2_TX, 194 .capture = { 195 .stream_name = "Slimbus2 Capture", 196 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 197 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 198 SNDRV_PCM_RATE_192000, 199 .formats = SNDRV_PCM_FMTBIT_S16_LE | 200 SNDRV_PCM_FMTBIT_S24_LE, 201 .channels_min = 1, 202 .channels_max = 8, 203 .rate_min = 8000, 204 .rate_max = 192000, 205 }, 206 }, { 207 .playback = { 208 .stream_name = "Slimbus3 Playback", 209 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | 210 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | 211 SNDRV_PCM_RATE_192000, 212 .formats = SNDRV_PCM_FMTBIT_S16_LE | 213 SNDRV_PCM_FMTBIT_S24_LE, 214 .channels_min = 1, 215 .channels_max = 2, 216 .rate_min = 8000, 217 .rate_max = 192000, 218 }, 219 .name = "SLIMBUS_3_RX", 220 .id = SLIMBUS_3_RX, 221 222 }, { 223 .name = "SLIMBUS_3_TX", 224 .id = SLIMBUS_3_TX, 225 .capture = { 226 .stream_name = "Slimbus3 Capture", 227 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 228 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 229 SNDRV_PCM_RATE_192000, 230 .formats = SNDRV_PCM_FMTBIT_S16_LE | 231 SNDRV_PCM_FMTBIT_S24_LE, 232 .channels_min = 1, 233 .channels_max = 8, 234 .rate_min = 8000, 235 .rate_max = 192000, 236 }, 237 }, { 238 .playback = { 239 .stream_name = "Slimbus4 Playback", 240 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | 241 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | 242 SNDRV_PCM_RATE_192000, 243 .formats = SNDRV_PCM_FMTBIT_S16_LE | 244 SNDRV_PCM_FMTBIT_S24_LE, 245 .channels_min = 1, 246 .channels_max = 2, 247 .rate_min = 8000, 248 .rate_max = 192000, 249 }, 250 .name = "SLIMBUS_4_RX", 251 .id = SLIMBUS_4_RX, 252 253 }, { 254 .name = "SLIMBUS_4_TX", 255 .id = SLIMBUS_4_TX, 256 .capture = { 257 .stream_name = "Slimbus4 Capture", 258 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 259 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 260 SNDRV_PCM_RATE_192000, 261 .formats = SNDRV_PCM_FMTBIT_S16_LE | 262 SNDRV_PCM_FMTBIT_S24_LE, 263 .channels_min = 1, 264 .channels_max = 8, 265 .rate_min = 8000, 266 .rate_max = 192000, 267 }, 268 }, { 269 .playback = { 270 .stream_name = "Slimbus5 Playback", 271 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | 272 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | 273 SNDRV_PCM_RATE_192000, 274 .formats = SNDRV_PCM_FMTBIT_S16_LE | 275 SNDRV_PCM_FMTBIT_S24_LE, 276 .channels_min = 1, 277 .channels_max = 2, 278 .rate_min = 8000, 279 .rate_max = 192000, 280 }, 281 .name = "SLIMBUS_5_RX", 282 .id = SLIMBUS_5_RX, 283 284 }, { 285 .name = "SLIMBUS_5_TX", 286 .id = SLIMBUS_5_TX, 287 .capture = { 288 .stream_name = "Slimbus5 Capture", 289 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 290 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 291 SNDRV_PCM_RATE_192000, 292 .formats = SNDRV_PCM_FMTBIT_S16_LE | 293 SNDRV_PCM_FMTBIT_S24_LE, 294 .channels_min = 1, 295 .channels_max = 8, 296 .rate_min = 8000, 297 .rate_max = 192000, 298 }, 299 }, { 300 .playback = { 301 .stream_name = "Slimbus6 Playback", 302 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | 303 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | 304 SNDRV_PCM_RATE_192000, 305 .formats = SNDRV_PCM_FMTBIT_S16_LE | 306 SNDRV_PCM_FMTBIT_S24_LE, 307 .channels_min = 1, 308 .channels_max = 2, 309 .rate_min = 8000, 310 .rate_max = 192000, 311 }, 312 .name = "SLIMBUS_6_RX", 313 .id = SLIMBUS_6_RX, 314 315 }, { 316 .name = "SLIMBUS_6_TX", 317 .id = SLIMBUS_6_TX, 318 .capture = { 319 .stream_name = "Slimbus6 Capture", 320 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 321 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 322 SNDRV_PCM_RATE_192000, 323 .formats = SNDRV_PCM_FMTBIT_S16_LE | 324 SNDRV_PCM_FMTBIT_S24_LE, 325 .channels_min = 1, 326 .channels_max = 8, 327 .rate_min = 8000, 328 .rate_max = 192000, 329 }, 330 }, { 331 .playback = { 332 .stream_name = "Primary MI2S Playback", 333 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 334 SNDRV_PCM_RATE_16000, 335 .formats = SNDRV_PCM_FMTBIT_S16_LE | 336 SNDRV_PCM_FMTBIT_S24_LE, 337 .channels_min = 1, 338 .channels_max = 8, 339 .rate_min = 8000, 340 .rate_max = 48000, 341 }, 342 .id = PRIMARY_MI2S_RX, 343 .name = "PRI_MI2S_RX", 344 }, { 345 .capture = { 346 .stream_name = "Primary MI2S Capture", 347 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 348 SNDRV_PCM_RATE_16000, 349 .formats = SNDRV_PCM_FMTBIT_S16_LE | 350 SNDRV_PCM_FMTBIT_S24_LE, 351 .channels_min = 1, 352 .channels_max = 8, 353 .rate_min = 8000, 354 .rate_max = 48000, 355 }, 356 .id = PRIMARY_MI2S_TX, 357 .name = "PRI_MI2S_TX", 358 }, { 359 .playback = { 360 .stream_name = "Secondary MI2S Playback", 361 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 362 SNDRV_PCM_RATE_16000, 363 .formats = SNDRV_PCM_FMTBIT_S16_LE, 364 .channels_min = 1, 365 .channels_max = 8, 366 .rate_min = 8000, 367 .rate_max = 48000, 368 }, 369 .name = "SEC_MI2S_RX", 370 .id = SECONDARY_MI2S_RX, 371 }, { 372 .capture = { 373 .stream_name = "Secondary MI2S Capture", 374 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 375 SNDRV_PCM_RATE_16000, 376 .formats = SNDRV_PCM_FMTBIT_S16_LE | 377 SNDRV_PCM_FMTBIT_S24_LE, 378 .channels_min = 1, 379 .channels_max = 8, 380 .rate_min = 8000, 381 .rate_max = 48000, 382 }, 383 .id = SECONDARY_MI2S_TX, 384 .name = "SEC_MI2S_TX", 385 }, { 386 .playback = { 387 .stream_name = "Tertiary MI2S Playback", 388 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 389 SNDRV_PCM_RATE_16000, 390 .formats = SNDRV_PCM_FMTBIT_S16_LE, 391 .channels_min = 1, 392 .channels_max = 8, 393 .rate_min = 8000, 394 .rate_max = 48000, 395 }, 396 .name = "TERT_MI2S_RX", 397 .id = TERTIARY_MI2S_RX, 398 }, { 399 .capture = { 400 .stream_name = "Tertiary MI2S Capture", 401 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 402 SNDRV_PCM_RATE_16000, 403 .formats = SNDRV_PCM_FMTBIT_S16_LE | 404 SNDRV_PCM_FMTBIT_S24_LE, 405 .channels_min = 1, 406 .channels_max = 8, 407 .rate_min = 8000, 408 .rate_max = 48000, 409 }, 410 .id = TERTIARY_MI2S_TX, 411 .name = "TERT_MI2S_TX", 412 }, { 413 .playback = { 414 .stream_name = "Quaternary MI2S Playback", 415 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 416 SNDRV_PCM_RATE_16000, 417 .formats = SNDRV_PCM_FMTBIT_S16_LE, 418 .channels_min = 1, 419 .channels_max = 8, 420 .rate_min = 8000, 421 .rate_max = 48000, 422 }, 423 .name = "QUAT_MI2S_RX", 424 .id = QUATERNARY_MI2S_RX, 425 }, { 426 .capture = { 427 .stream_name = "Quaternary MI2S Capture", 428 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 429 SNDRV_PCM_RATE_16000, 430 .formats = SNDRV_PCM_FMTBIT_S16_LE | 431 SNDRV_PCM_FMTBIT_S24_LE, 432 .channels_min = 1, 433 .channels_max = 8, 434 .rate_min = 8000, 435 .rate_max = 48000, 436 }, 437 .id = QUATERNARY_MI2S_TX, 438 .name = "QUAT_MI2S_TX", 439 }, { 440 .playback = { 441 .stream_name = "Quinary MI2S Playback", 442 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 443 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 | 444 SNDRV_PCM_RATE_192000, 445 .formats = SNDRV_PCM_FMTBIT_S16_LE, 446 .channels_min = 1, 447 .channels_max = 8, 448 .rate_min = 8000, 449 .rate_max = 192000, 450 }, 451 .id = QUINARY_MI2S_RX, 452 .name = "QUIN_MI2S_RX", 453 }, { 454 .capture = { 455 .stream_name = "Quinary MI2S Capture", 456 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | 457 SNDRV_PCM_RATE_16000, 458 .formats = SNDRV_PCM_FMTBIT_S16_LE, 459 .channels_min = 1, 460 .channels_max = 8, 461 .rate_min = 8000, 462 .rate_max = 48000, 463 }, 464 .id = QUINARY_MI2S_TX, 465 .name = "QUIN_MI2S_TX", 466 }, 467 Q6AFE_TDM_PB_DAI("Primary", 0, PRIMARY_TDM_RX_0), 468 Q6AFE_TDM_PB_DAI("Primary", 1, PRIMARY_TDM_RX_1), 469 Q6AFE_TDM_PB_DAI("Primary", 2, PRIMARY_TDM_RX_2), 470 Q6AFE_TDM_PB_DAI("Primary", 3, PRIMARY_TDM_RX_3), 471 Q6AFE_TDM_PB_DAI("Primary", 4, PRIMARY_TDM_RX_4), 472 Q6AFE_TDM_PB_DAI("Primary", 5, PRIMARY_TDM_RX_5), 473 Q6AFE_TDM_PB_DAI("Primary", 6, PRIMARY_TDM_RX_6), 474 Q6AFE_TDM_PB_DAI("Primary", 7, PRIMARY_TDM_RX_7), 475 Q6AFE_TDM_CAP_DAI("Primary", 0, PRIMARY_TDM_TX_0), 476 Q6AFE_TDM_CAP_DAI("Primary", 1, PRIMARY_TDM_TX_1), 477 Q6AFE_TDM_CAP_DAI("Primary", 2, PRIMARY_TDM_TX_2), 478 Q6AFE_TDM_CAP_DAI("Primary", 3, PRIMARY_TDM_TX_3), 479 Q6AFE_TDM_CAP_DAI("Primary", 4, PRIMARY_TDM_TX_4), 480 Q6AFE_TDM_CAP_DAI("Primary", 5, PRIMARY_TDM_TX_5), 481 Q6AFE_TDM_CAP_DAI("Primary", 6, PRIMARY_TDM_TX_6), 482 Q6AFE_TDM_CAP_DAI("Primary", 7, PRIMARY_TDM_TX_7), 483 Q6AFE_TDM_PB_DAI("Secondary", 0, SECONDARY_TDM_RX_0), 484 Q6AFE_TDM_PB_DAI("Secondary", 1, SECONDARY_TDM_RX_1), 485 Q6AFE_TDM_PB_DAI("Secondary", 2, SECONDARY_TDM_RX_2), 486 Q6AFE_TDM_PB_DAI("Secondary", 3, SECONDARY_TDM_RX_3), 487 Q6AFE_TDM_PB_DAI("Secondary", 4, SECONDARY_TDM_RX_4), 488 Q6AFE_TDM_PB_DAI("Secondary", 5, SECONDARY_TDM_RX_5), 489 Q6AFE_TDM_PB_DAI("Secondary", 6, SECONDARY_TDM_RX_6), 490 Q6AFE_TDM_PB_DAI("Secondary", 7, SECONDARY_TDM_RX_7), 491 Q6AFE_TDM_CAP_DAI("Secondary", 0, SECONDARY_TDM_TX_0), 492 Q6AFE_TDM_CAP_DAI("Secondary", 1, SECONDARY_TDM_TX_1), 493 Q6AFE_TDM_CAP_DAI("Secondary", 2, SECONDARY_TDM_TX_2), 494 Q6AFE_TDM_CAP_DAI("Secondary", 3, SECONDARY_TDM_TX_3), 495 Q6AFE_TDM_CAP_DAI("Secondary", 4, SECONDARY_TDM_TX_4), 496 Q6AFE_TDM_CAP_DAI("Secondary", 5, SECONDARY_TDM_TX_5), 497 Q6AFE_TDM_CAP_DAI("Secondary", 6, SECONDARY_TDM_TX_6), 498 Q6AFE_TDM_CAP_DAI("Secondary", 7, SECONDARY_TDM_TX_7), 499 Q6AFE_TDM_PB_DAI("Tertiary", 0, TERTIARY_TDM_RX_0), 500 Q6AFE_TDM_PB_DAI("Tertiary", 1, TERTIARY_TDM_RX_1), 501 Q6AFE_TDM_PB_DAI("Tertiary", 2, TERTIARY_TDM_RX_2), 502 Q6AFE_TDM_PB_DAI("Tertiary", 3, TERTIARY_TDM_RX_3), 503 Q6AFE_TDM_PB_DAI("Tertiary", 4, TERTIARY_TDM_RX_4), 504 Q6AFE_TDM_PB_DAI("Tertiary", 5, TERTIARY_TDM_RX_5), 505 Q6AFE_TDM_PB_DAI("Tertiary", 6, TERTIARY_TDM_RX_6), 506 Q6AFE_TDM_PB_DAI("Tertiary", 7, TERTIARY_TDM_RX_7), 507 Q6AFE_TDM_CAP_DAI("Tertiary", 0, TERTIARY_TDM_TX_0), 508 Q6AFE_TDM_CAP_DAI("Tertiary", 1, TERTIARY_TDM_TX_1), 509 Q6AFE_TDM_CAP_DAI("Tertiary", 2, TERTIARY_TDM_TX_2), 510 Q6AFE_TDM_CAP_DAI("Tertiary", 3, TERTIARY_TDM_TX_3), 511 Q6AFE_TDM_CAP_DAI("Tertiary", 4, TERTIARY_TDM_TX_4), 512 Q6AFE_TDM_CAP_DAI("Tertiary", 5, TERTIARY_TDM_TX_5), 513 Q6AFE_TDM_CAP_DAI("Tertiary", 6, TERTIARY_TDM_TX_6), 514 Q6AFE_TDM_CAP_DAI("Tertiary", 7, TERTIARY_TDM_TX_7), 515 Q6AFE_TDM_PB_DAI("Quaternary", 0, QUATERNARY_TDM_RX_0), 516 Q6AFE_TDM_PB_DAI("Quaternary", 1, QUATERNARY_TDM_RX_1), 517 Q6AFE_TDM_PB_DAI("Quaternary", 2, QUATERNARY_TDM_RX_2), 518 Q6AFE_TDM_PB_DAI("Quaternary", 3, QUATERNARY_TDM_RX_3), 519 Q6AFE_TDM_PB_DAI("Quaternary", 4, QUATERNARY_TDM_RX_4), 520 Q6AFE_TDM_PB_DAI("Quaternary", 5, QUATERNARY_TDM_RX_5), 521 Q6AFE_TDM_PB_DAI("Quaternary", 6, QUATERNARY_TDM_RX_6), 522 Q6AFE_TDM_PB_DAI("Quaternary", 7, QUATERNARY_TDM_RX_7), 523 Q6AFE_TDM_CAP_DAI("Quaternary", 0, QUATERNARY_TDM_TX_0), 524 Q6AFE_TDM_CAP_DAI("Quaternary", 1, QUATERNARY_TDM_TX_1), 525 Q6AFE_TDM_CAP_DAI("Quaternary", 2, QUATERNARY_TDM_TX_2), 526 Q6AFE_TDM_CAP_DAI("Quaternary", 3, QUATERNARY_TDM_TX_3), 527 Q6AFE_TDM_CAP_DAI("Quaternary", 4, QUATERNARY_TDM_TX_4), 528 Q6AFE_TDM_CAP_DAI("Quaternary", 5, QUATERNARY_TDM_TX_5), 529 Q6AFE_TDM_CAP_DAI("Quaternary", 6, QUATERNARY_TDM_TX_6), 530 Q6AFE_TDM_CAP_DAI("Quaternary", 7, QUATERNARY_TDM_TX_7), 531 Q6AFE_TDM_PB_DAI("Quinary", 0, QUINARY_TDM_RX_0), 532 Q6AFE_TDM_PB_DAI("Quinary", 1, QUINARY_TDM_RX_1), 533 Q6AFE_TDM_PB_DAI("Quinary", 2, QUINARY_TDM_RX_2), 534 Q6AFE_TDM_PB_DAI("Quinary", 3, QUINARY_TDM_RX_3), 535 Q6AFE_TDM_PB_DAI("Quinary", 4, QUINARY_TDM_RX_4), 536 Q6AFE_TDM_PB_DAI("Quinary", 5, QUINARY_TDM_RX_5), 537 Q6AFE_TDM_PB_DAI("Quinary", 6, QUINARY_TDM_RX_6), 538 Q6AFE_TDM_PB_DAI("Quinary", 7, QUINARY_TDM_RX_7), 539 Q6AFE_TDM_CAP_DAI("Quinary", 0, QUINARY_TDM_TX_0), 540 Q6AFE_TDM_CAP_DAI("Quinary", 1, QUINARY_TDM_TX_1), 541 Q6AFE_TDM_CAP_DAI("Quinary", 2, QUINARY_TDM_TX_2), 542 Q6AFE_TDM_CAP_DAI("Quinary", 3, QUINARY_TDM_TX_3), 543 Q6AFE_TDM_CAP_DAI("Quinary", 4, QUINARY_TDM_TX_4), 544 Q6AFE_TDM_CAP_DAI("Quinary", 5, QUINARY_TDM_TX_5), 545 Q6AFE_TDM_CAP_DAI("Quinary", 6, QUINARY_TDM_TX_6), 546 Q6AFE_TDM_CAP_DAI("Quinary", 7, QUINARY_TDM_TX_7), 547 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_0), 548 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_1), 549 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_2), 550 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_3), 551 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_4), 552 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_5), 553 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_6), 554 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_7), 555 Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_0), 556 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_0), 557 Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_1), 558 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_1), 559 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_2), 560 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_0), 561 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_1), 562 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_2), 563 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_0), 564 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_0), 565 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_1), 566 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_1), 567 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_2), 568 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_2), 569 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_3), 570 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_3), 571 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_4), 572 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_4), 573 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_5), 574 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_5), 575 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_6), 576 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_7), 577 }; 578 579 int q6dsp_audio_ports_of_xlate_dai_name(struct snd_soc_component *component, 580 const struct of_phandle_args *args, 581 const char **dai_name) 582 { 583 int id = args->args[0]; 584 int ret = -EINVAL; 585 int i; 586 587 for (i = 0; i < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) { 588 if (q6dsp_audio_fe_dais[i].id == id) { 589 *dai_name = q6dsp_audio_fe_dais[i].name; 590 ret = 0; 591 break; 592 } 593 } 594 595 return ret; 596 } 597 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name); 598 599 struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev, 600 struct q6dsp_audio_port_dai_driver_config *cfg, 601 int *num_dais) 602 { 603 int i; 604 605 for (i = 0; i < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) { 606 q6dsp_audio_fe_dais[i].probe = cfg->probe; 607 q6dsp_audio_fe_dais[i].remove = cfg->remove; 608 609 switch (q6dsp_audio_fe_dais[i].id) { 610 case HDMI_RX: 611 case DISPLAY_PORT_RX: 612 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops; 613 break; 614 case DISPLAY_PORT_RX_1 ... DISPLAY_PORT_RX_7: 615 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops; 616 break; 617 case SLIMBUS_0_RX ... SLIMBUS_6_TX: 618 q6dsp_audio_fe_dais[i].ops = cfg->q6slim_ops; 619 break; 620 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX: 621 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX: 622 q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops; 623 break; 624 case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7: 625 q6dsp_audio_fe_dais[i].ops = cfg->q6tdm_ops; 626 break; 627 case WSA_CODEC_DMA_RX_0 ... RX_CODEC_DMA_RX_7: 628 q6dsp_audio_fe_dais[i].ops = cfg->q6dma_ops; 629 break; 630 default: 631 break; 632 } 633 } 634 635 *num_dais = ARRAY_SIZE(q6dsp_audio_fe_dais); 636 return q6dsp_audio_fe_dais; 637 } 638 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config); 639