636 lines · c
1// SPDX-License-Identifier: GPL-2.02// Copyright (c) 2020, Linaro Limited3 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 99static 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 579int 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}597EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name);598 599struct 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 switch (q6dsp_audio_fe_dais[i].id) {607 case HDMI_RX:608 case DISPLAY_PORT_RX:609 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops;610 break;611 case DISPLAY_PORT_RX_1 ... DISPLAY_PORT_RX_7:612 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops;613 break;614 case SLIMBUS_0_RX ... SLIMBUS_6_TX:615 q6dsp_audio_fe_dais[i].ops = cfg->q6slim_ops;616 break;617 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:618 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:619 q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops;620 break;621 case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7:622 q6dsp_audio_fe_dais[i].ops = cfg->q6tdm_ops;623 break;624 case WSA_CODEC_DMA_RX_0 ... RX_CODEC_DMA_RX_7:625 q6dsp_audio_fe_dais[i].ops = cfg->q6dma_ops;626 break;627 default:628 break;629 }630 }631 632 *num_dais = ARRAY_SIZE(q6dsp_audio_fe_dais);633 return q6dsp_audio_fe_dais;634}635EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config);636