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