q6dsp-lpass-ports.c 19 KB

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