msm-dai-fe.c 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586
  1. /* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include <linux/init.h>
  13. #include <linux/module.h>
  14. #include <linux/device.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/of_device.h>
  17. #include <sound/core.h>
  18. #include <sound/pcm.h>
  19. #include <sound/soc.h>
  20. static struct snd_soc_dai_ops msm_fe_dai_ops = {};
  21. /* Conventional and unconventional sample rate supported */
  22. static unsigned int supported_sample_rates[] = {
  23. 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000,
  24. 88200, 96000, 176400, 192000, 352800, 384000
  25. };
  26. static struct snd_pcm_hw_constraint_list constraints_sample_rates = {
  27. .count = ARRAY_SIZE(supported_sample_rates),
  28. .list = supported_sample_rates,
  29. .mask = 0,
  30. };
  31. static int multimedia_startup(struct snd_pcm_substream *substream,
  32. struct snd_soc_dai *dai)
  33. {
  34. snd_pcm_hw_constraint_list(substream->runtime, 0,
  35. SNDRV_PCM_HW_PARAM_RATE,
  36. &constraints_sample_rates);
  37. return 0;
  38. }
  39. static int fe_dai_probe(struct snd_soc_dai *dai)
  40. {
  41. struct snd_soc_dapm_route intercon;
  42. struct snd_soc_dapm_context *dapm;
  43. if (!dai || !dai->driver) {
  44. pr_err("%s invalid params\n", __func__);
  45. return -EINVAL;
  46. }
  47. dapm = snd_soc_component_get_dapm(dai->component);
  48. memset(&intercon, 0, sizeof(intercon));
  49. if (dai->driver->playback.stream_name &&
  50. dai->driver->playback.aif_name) {
  51. dev_dbg(dai->dev, "%s add route for widget %s",
  52. __func__, dai->driver->playback.stream_name);
  53. intercon.source = dai->driver->playback.stream_name;
  54. intercon.sink = dai->driver->playback.aif_name;
  55. dev_dbg(dai->dev, "%s src %s sink %s\n",
  56. __func__, intercon.source, intercon.sink);
  57. snd_soc_dapm_add_routes(dapm, &intercon, 1);
  58. snd_soc_dapm_ignore_suspend(dapm, intercon.source);
  59. }
  60. if (dai->driver->capture.stream_name &&
  61. dai->driver->capture.aif_name) {
  62. dev_dbg(dai->dev, "%s add route for widget %s",
  63. __func__, dai->driver->capture.stream_name);
  64. intercon.sink = dai->driver->capture.stream_name;
  65. intercon.source = dai->driver->capture.aif_name;
  66. dev_dbg(dai->dev, "%s src %s sink %s\n",
  67. __func__, intercon.source, intercon.sink);
  68. snd_soc_dapm_add_routes(dapm, &intercon, 1);
  69. snd_soc_dapm_ignore_suspend(dapm, intercon.sink);
  70. }
  71. return 0;
  72. }
  73. static struct snd_soc_dai_ops msm_fe_Multimedia_dai_ops = {
  74. .startup = multimedia_startup,
  75. };
  76. static const struct snd_soc_component_driver msm_fe_dai_component = {
  77. .name = "msm-dai-fe",
  78. };
  79. static struct snd_soc_dai_driver msm_fe_dais[] = {
  80. {
  81. .playback = {
  82. .stream_name = "MultiMedia1 Playback",
  83. .aif_name = "MM_DL1",
  84. .rates = (SNDRV_PCM_RATE_8000_384000|
  85. SNDRV_PCM_RATE_KNOT),
  86. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  87. SNDRV_PCM_FMTBIT_S24_LE |
  88. SNDRV_PCM_FMTBIT_S24_3LE |
  89. SNDRV_PCM_FMTBIT_S32_LE),
  90. .channels_min = 1,
  91. .channels_max = 8,
  92. .rate_min = 8000,
  93. .rate_max = 384000,
  94. },
  95. .capture = {
  96. .stream_name = "MultiMedia1 Capture",
  97. .aif_name = "MM_UL1",
  98. .rates = (SNDRV_PCM_RATE_8000_384000|
  99. SNDRV_PCM_RATE_KNOT),
  100. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  101. SNDRV_PCM_FMTBIT_S24_LE |
  102. SNDRV_PCM_FMTBIT_S24_3LE |
  103. SNDRV_PCM_FMTBIT_S32_LE),
  104. .channels_min = 1,
  105. .channels_max = 8,
  106. .rate_min = 8000,
  107. .rate_max = 48000,
  108. },
  109. .ops = &msm_fe_Multimedia_dai_ops,
  110. .name = "MultiMedia1",
  111. .probe = fe_dai_probe,
  112. },
  113. {
  114. .playback = {
  115. .stream_name = "MultiMedia2 Playback",
  116. .aif_name = "MM_DL2",
  117. .rates = (SNDRV_PCM_RATE_8000_384000|
  118. SNDRV_PCM_RATE_KNOT),
  119. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  120. SNDRV_PCM_FMTBIT_S24_LE |
  121. SNDRV_PCM_FMTBIT_S24_3LE |
  122. SNDRV_PCM_FMTBIT_S32_LE),
  123. .channels_min = 1,
  124. .channels_max = 8,
  125. .rate_min = 8000,
  126. .rate_max = 384000,
  127. },
  128. .capture = {
  129. .stream_name = "MultiMedia2 Capture",
  130. .aif_name = "MM_UL2",
  131. .rates = (SNDRV_PCM_RATE_8000_384000|
  132. SNDRV_PCM_RATE_KNOT),
  133. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  134. SNDRV_PCM_FMTBIT_S24_LE |
  135. SNDRV_PCM_FMTBIT_S24_3LE |
  136. SNDRV_PCM_FMTBIT_S32_LE),
  137. .channels_min = 1,
  138. .channels_max = 8,
  139. .rate_min = 8000,
  140. .rate_max = 48000,
  141. },
  142. .ops = &msm_fe_Multimedia_dai_ops,
  143. .name = "MultiMedia2",
  144. .probe = fe_dai_probe,
  145. },
  146. {
  147. .playback = {
  148. .stream_name = "VoIP Playback",
  149. .aif_name = "VOIP_DL",
  150. .rates = SNDRV_PCM_RATE_8000_48000,
  151. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  152. SNDRV_PCM_FMTBIT_SPECIAL,
  153. .channels_min = 1,
  154. .channels_max = 2,
  155. .rate_min = 8000,
  156. .rate_max = 48000,
  157. },
  158. .capture = {
  159. .stream_name = "VoIP Capture",
  160. .aif_name = "VOIP_UL",
  161. .rates = SNDRV_PCM_RATE_8000_48000,
  162. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  163. SNDRV_PCM_FMTBIT_SPECIAL,
  164. .channels_min = 1,
  165. .channels_max = 2,
  166. .rate_min = 8000,
  167. .rate_max = 48000,
  168. },
  169. .ops = &msm_fe_dai_ops,
  170. .name = "VoIP",
  171. .probe = fe_dai_probe,
  172. },
  173. {
  174. .playback = {
  175. .stream_name = "MultiMedia3 Playback",
  176. .aif_name = "MM_DL3",
  177. .rates = (SNDRV_PCM_RATE_8000_384000 |
  178. SNDRV_PCM_RATE_KNOT),
  179. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  180. SNDRV_PCM_FMTBIT_S24_LE |
  181. SNDRV_PCM_FMTBIT_S24_3LE |
  182. SNDRV_PCM_FMTBIT_S32_LE),
  183. .channels_min = 1,
  184. .channels_max = 6,
  185. .rate_min = 8000,
  186. .rate_max = 384000,
  187. },
  188. .capture = {
  189. .stream_name = "MultiMedia3 Capture",
  190. .aif_name = "MM_UL3",
  191. .rates = (SNDRV_PCM_RATE_8000_384000|
  192. SNDRV_PCM_RATE_KNOT),
  193. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  194. SNDRV_PCM_FMTBIT_S24_LE |
  195. SNDRV_PCM_FMTBIT_S24_3LE |
  196. SNDRV_PCM_FMTBIT_S32_LE),
  197. .channels_min = 1,
  198. .channels_max = 8,
  199. .rate_min = 8000,
  200. .rate_max = 48000,
  201. },
  202. .ops = &msm_fe_Multimedia_dai_ops,
  203. .name = "MultiMedia3",
  204. .probe = fe_dai_probe,
  205. },
  206. {
  207. .playback = {
  208. .stream_name = "MultiMedia4 Playback",
  209. .aif_name = "MM_DL4",
  210. .rates = (SNDRV_PCM_RATE_8000_384000 |
  211. SNDRV_PCM_RATE_KNOT),
  212. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  213. SNDRV_PCM_FMTBIT_S24_LE |
  214. SNDRV_PCM_FMTBIT_S24_3LE |
  215. SNDRV_PCM_FMTBIT_S32_LE),
  216. .channels_min = 1,
  217. .channels_max = 8,
  218. .rate_min = 8000,
  219. .rate_max = 384000,
  220. },
  221. .ops = &msm_fe_Multimedia_dai_ops,
  222. .compress_new = snd_soc_new_compress,
  223. .name = "MultiMedia4",
  224. .probe = fe_dai_probe,
  225. },
  226. {
  227. .playback = {
  228. .stream_name = "MultiMedia5 Playback",
  229. .aif_name = "MM_DL5",
  230. .rates = (SNDRV_PCM_RATE_8000_384000 |
  231. SNDRV_PCM_RATE_KNOT),
  232. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  233. SNDRV_PCM_FMTBIT_S24_LE |
  234. SNDRV_PCM_FMTBIT_S24_3LE |
  235. SNDRV_PCM_FMTBIT_S32_LE),
  236. .channels_min = 1,
  237. .channels_max = 8,
  238. .rate_min = 8000,
  239. .rate_max = 384000,
  240. },
  241. .capture = {
  242. .stream_name = "MultiMedia5 Capture",
  243. .aif_name = "MM_UL5",
  244. .rates = (SNDRV_PCM_RATE_8000_48000|
  245. SNDRV_PCM_RATE_KNOT),
  246. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  247. SNDRV_PCM_FMTBIT_S24_LE |
  248. SNDRV_PCM_FMTBIT_S24_3LE |
  249. SNDRV_PCM_FMTBIT_S32_LE),
  250. .channels_min = 1,
  251. .channels_max = 8,
  252. .rate_min = 8000,
  253. .rate_max = 48000,
  254. },
  255. .ops = &msm_fe_Multimedia_dai_ops,
  256. .name = "MultiMedia5",
  257. .probe = fe_dai_probe,
  258. },
  259. {
  260. .playback = {
  261. .stream_name = "MultiMedia6 Playback",
  262. .aif_name = "MM_DL6",
  263. .rates = (SNDRV_PCM_RATE_8000_384000 |
  264. SNDRV_PCM_RATE_KNOT),
  265. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  266. SNDRV_PCM_FMTBIT_S24_LE |
  267. SNDRV_PCM_FMTBIT_S24_3LE |
  268. SNDRV_PCM_FMTBIT_S32_LE),
  269. .channels_min = 1,
  270. .channels_max = 8,
  271. .rate_min = 8000,
  272. .rate_max = 384000,
  273. },
  274. .capture = {
  275. .stream_name = "MultiMedia6 Capture",
  276. .aif_name = "MM_UL6",
  277. .rates = (SNDRV_PCM_RATE_8000_48000|
  278. SNDRV_PCM_RATE_KNOT),
  279. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  280. SNDRV_PCM_FMTBIT_S24_LE |
  281. SNDRV_PCM_FMTBIT_S24_3LE |
  282. SNDRV_PCM_FMTBIT_S32_LE),
  283. .channels_min = 1,
  284. .channels_max = 8,
  285. .rate_min = 8000,
  286. .rate_max = 48000,
  287. },
  288. .ops = &msm_fe_Multimedia_dai_ops,
  289. .name = "MultiMedia6",
  290. .probe = fe_dai_probe,
  291. },
  292. {
  293. .playback = {
  294. .stream_name = "MultiMedia7 Playback",
  295. .aif_name = "MM_DL7",
  296. .rates = (SNDRV_PCM_RATE_8000_384000 |
  297. SNDRV_PCM_RATE_KNOT),
  298. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  299. SNDRV_PCM_FMTBIT_S24_LE |
  300. SNDRV_PCM_FMTBIT_S24_3LE |
  301. SNDRV_PCM_FMTBIT_S32_LE),
  302. .channels_min = 1,
  303. .channels_max = 8,
  304. .rate_min = 8000,
  305. .rate_max = 384000,
  306. },
  307. .ops = &msm_fe_Multimedia_dai_ops,
  308. .compress_new = snd_soc_new_compress,
  309. .name = "MultiMedia7",
  310. .probe = fe_dai_probe,
  311. },
  312. {
  313. .playback = {
  314. .stream_name = "MultiMedia8 Playback",
  315. .aif_name = "MM_DL8",
  316. .rates = (SNDRV_PCM_RATE_8000_384000 |
  317. SNDRV_PCM_RATE_KNOT),
  318. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  319. SNDRV_PCM_FMTBIT_S24_LE |
  320. SNDRV_PCM_FMTBIT_S24_3LE |
  321. SNDRV_PCM_FMTBIT_S32_LE),
  322. .channels_min = 1,
  323. .channels_max = 8,
  324. .rate_min = 8000,
  325. .rate_max = 384000,
  326. },
  327. .capture = {
  328. .stream_name = "MultiMedia8 Capture",
  329. .aif_name = "MM_UL8",
  330. .rates = (SNDRV_PCM_RATE_8000_48000|
  331. SNDRV_PCM_RATE_KNOT),
  332. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  333. SNDRV_PCM_FMTBIT_S24_LE |
  334. SNDRV_PCM_FMTBIT_S24_3LE |
  335. SNDRV_PCM_FMTBIT_S32_LE),
  336. .channels_min = 1,
  337. .channels_max = 8,
  338. .rate_min = 8000,
  339. .rate_max = 48000,
  340. },
  341. .ops = &msm_fe_Multimedia_dai_ops,
  342. .name = "MultiMedia8",
  343. .probe = fe_dai_probe,
  344. },
  345. /* FE DAIs created for hostless operation purpose */
  346. {
  347. .playback = {
  348. .stream_name = "SLIMBUS0_HOSTLESS Playback",
  349. .aif_name = "SLIM0_DL_HL",
  350. .rates = SNDRV_PCM_RATE_8000_384000,
  351. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  352. SNDRV_PCM_FMTBIT_S24_LE),
  353. .channels_min = 1,
  354. .channels_max = 8,
  355. .rate_min = 8000,
  356. .rate_max = 384000,
  357. },
  358. .capture = {
  359. .stream_name = "SLIMBUS0_HOSTLESS Capture",
  360. .aif_name = "SLIM0_UL_HL",
  361. .rates = SNDRV_PCM_RATE_8000_96000,
  362. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  363. SNDRV_PCM_FMTBIT_S24_LE |
  364. SNDRV_PCM_FMTBIT_S32_LE),
  365. .channels_min = 1,
  366. .channels_max = 8,
  367. .rate_min = 8000,
  368. .rate_max = 384000,
  369. },
  370. .ops = &msm_fe_dai_ops,
  371. .name = "SLIMBUS0_HOSTLESS",
  372. .probe = fe_dai_probe,
  373. },
  374. {
  375. .playback = {
  376. .stream_name = "SLIMBUS1_HOSTLESS Playback",
  377. .aif_name = "SLIM1_DL_HL",
  378. .rates = SNDRV_PCM_RATE_8000_384000,
  379. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  380. SNDRV_PCM_FMTBIT_S24_LE),
  381. .channels_min = 1,
  382. .channels_max = 2,
  383. .rate_min = 8000,
  384. .rate_max = 384000,
  385. },
  386. .capture = {
  387. .stream_name = "SLIMBUS1_HOSTLESS Capture",
  388. .aif_name = "SLIM1_UL_HL",
  389. .rates = SNDRV_PCM_RATE_8000_48000,
  390. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  391. SNDRV_PCM_FMTBIT_S24_LE),
  392. .channels_min = 1,
  393. .channels_max = 2,
  394. .rate_min = 8000,
  395. .rate_max = 48000,
  396. },
  397. .ops = &msm_fe_dai_ops,
  398. .name = "SLIMBUS1_HOSTLESS",
  399. .probe = fe_dai_probe,
  400. },
  401. {
  402. .playback = {
  403. .stream_name = "SLIMBUS3_HOSTLESS Playback",
  404. .aif_name = "SLIM3_DL_HL",
  405. .rates = SNDRV_PCM_RATE_8000_384000,
  406. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  407. SNDRV_PCM_FMTBIT_S24_LE),
  408. .channels_min = 1,
  409. .channels_max = 2,
  410. .rate_min = 8000,
  411. .rate_max = 384000,
  412. },
  413. .capture = {
  414. .stream_name = "SLIMBUS3_HOSTLESS Capture",
  415. .aif_name = "SLIM3_UL_HL",
  416. .rates = SNDRV_PCM_RATE_8000_48000,
  417. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  418. SNDRV_PCM_FMTBIT_S24_LE),
  419. .channels_min = 1,
  420. .channels_max = 2,
  421. .rate_min = 8000,
  422. .rate_max = 48000,
  423. },
  424. .ops = &msm_fe_dai_ops,
  425. .name = "SLIMBUS3_HOSTLESS",
  426. .probe = fe_dai_probe,
  427. },
  428. {
  429. .playback = {
  430. .stream_name = "SLIMBUS4_HOSTLESS Playback",
  431. .aif_name = "SLIM4_DL_HL",
  432. .rates = SNDRV_PCM_RATE_8000_384000,
  433. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  434. SNDRV_PCM_FMTBIT_S24_LE),
  435. .channels_min = 1,
  436. .channels_max = 2,
  437. .rate_min = 8000,
  438. .rate_max = 384000,
  439. },
  440. .capture = {
  441. .stream_name = "SLIMBUS4_HOSTLESS Capture",
  442. .aif_name = "SLIM4_UL_HL",
  443. .rates = SNDRV_PCM_RATE_8000_48000,
  444. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  445. SNDRV_PCM_FMTBIT_S24_LE),
  446. .channels_min = 1,
  447. .channels_max = 2,
  448. .rate_min = 8000,
  449. .rate_max = 48000,
  450. },
  451. .ops = &msm_fe_dai_ops,
  452. .name = "SLIMBUS4_HOSTLESS",
  453. .probe = fe_dai_probe,
  454. },
  455. {
  456. .playback = {
  457. .stream_name = "SLIMBUS6_HOSTLESS Playback",
  458. .aif_name = "SLIM6_DL_HL",
  459. .rates = SNDRV_PCM_RATE_8000_384000,
  460. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  461. SNDRV_PCM_FMTBIT_S24_LE),
  462. .channels_min = 1,
  463. .channels_max = 8,
  464. .rate_min = 8000,
  465. .rate_max = 384000,
  466. },
  467. .ops = &msm_fe_dai_ops,
  468. .name = "SLIMBUS6_HOSTLESS",
  469. .probe = fe_dai_probe,
  470. },
  471. {
  472. .playback = {
  473. .stream_name = "SLIMBUS7_HOSTLESS Playback",
  474. .aif_name = "SLIM7_DL_HL",
  475. .rates = SNDRV_PCM_RATE_8000_384000,
  476. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  477. SNDRV_PCM_FMTBIT_S24_LE),
  478. .channels_min = 1,
  479. .channels_max = 8,
  480. .rate_min = 8000,
  481. .rate_max = 384000,
  482. },
  483. .capture = {
  484. .stream_name = "SLIMBUS7_HOSTLESS Capture",
  485. .aif_name = "SLIM7_UL_HL",
  486. .rates = SNDRV_PCM_RATE_8000_384000,
  487. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  488. SNDRV_PCM_FMTBIT_S24_LE),
  489. .channels_min = 1,
  490. .channels_max = 8,
  491. .rate_min = 8000,
  492. .rate_max = 384000,
  493. },
  494. .ops = &msm_fe_dai_ops,
  495. .name = "SLIMBUS7_HOSTLESS",
  496. .probe = fe_dai_probe,
  497. },
  498. {
  499. .playback = {
  500. .stream_name = "SLIMBUS8_HOSTLESS Playback",
  501. .aif_name = "SLIM8_DL_HL",
  502. .rates = SNDRV_PCM_RATE_8000_384000,
  503. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  504. SNDRV_PCM_FMTBIT_S24_LE),
  505. .channels_min = 1,
  506. .channels_max = 8,
  507. .rate_min = 8000,
  508. .rate_max = 384000,
  509. },
  510. .capture = {
  511. .stream_name = "SLIMBUS8_HOSTLESS Capture",
  512. .aif_name = "SLIM8_UL_HL",
  513. .rates = SNDRV_PCM_RATE_8000_384000,
  514. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  515. SNDRV_PCM_FMTBIT_S24_LE),
  516. .channels_min = 1,
  517. .channels_max = 8,
  518. .rate_min = 8000,
  519. .rate_max = 384000,
  520. },
  521. .ops = &msm_fe_dai_ops,
  522. .name = "SLIMBUS8_HOSTLESS",
  523. .probe = fe_dai_probe,
  524. },
  525. {
  526. .playback = {
  527. .stream_name = "INT_FM_HOSTLESS Playback",
  528. .aif_name = "INTFM_DL_HL",
  529. .rates = SNDRV_PCM_RATE_8000_48000,
  530. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  531. .channels_min = 1,
  532. .channels_max = 2,
  533. .rate_min = 8000,
  534. .rate_max = 48000,
  535. },
  536. .capture = {
  537. .stream_name = "INT_FM_HOSTLESS Capture",
  538. .aif_name = "INTFM_UL_HL",
  539. .rates = SNDRV_PCM_RATE_8000_48000,
  540. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  541. .channels_min = 1,
  542. .channels_max = 2,
  543. .rate_min = 8000,
  544. .rate_max = 48000,
  545. },
  546. .ops = &msm_fe_dai_ops,
  547. .name = "INT_FM_HOSTLESS",
  548. .probe = fe_dai_probe,
  549. },
  550. {
  551. .playback = {
  552. .stream_name = "INT_HFP_BT Hostless Playback",
  553. .aif_name = "INTHFP_DL_HL",
  554. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  555. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  556. .channels_min = 1,
  557. .channels_max = 2,
  558. .rate_min = 8000,
  559. .rate_max = 16000,
  560. },
  561. .capture = {
  562. .stream_name = "INT_HFP_BT Hostless Capture",
  563. .aif_name = "INTHFP_UL_HL",
  564. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  565. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  566. .channels_min = 1,
  567. .channels_max = 2,
  568. .rate_min = 8000,
  569. .rate_max = 16000,
  570. },
  571. .ops = &msm_fe_dai_ops,
  572. .name = "INT_HFP_BT_HOSTLESS",
  573. .probe = fe_dai_probe,
  574. },
  575. {
  576. .playback = {
  577. .stream_name = "USBAUDIO_HOSTLESS Playback",
  578. .aif_name = "USBAUDIO_DL_HL",
  579. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
  580. SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
  581. SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
  582. SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
  583. SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
  584. SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 |
  585. SNDRV_PCM_RATE_384000,
  586. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  587. SNDRV_PCM_FMTBIT_S24_LE |
  588. SNDRV_PCM_FMTBIT_S24_3LE |
  589. SNDRV_PCM_FMTBIT_S32_LE,
  590. .channels_min = 1,
  591. .channels_max = 8,
  592. .rate_min = 8000,
  593. .rate_max = 384000,
  594. },
  595. .capture = {
  596. .stream_name = "USBAUDIO_HOSTLESS Capture",
  597. .aif_name = "USBAUDIO_UL_HL",
  598. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
  599. SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
  600. SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
  601. SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
  602. SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
  603. SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 |
  604. SNDRV_PCM_RATE_384000,
  605. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  606. SNDRV_PCM_FMTBIT_S24_LE |
  607. SNDRV_PCM_FMTBIT_S24_3LE |
  608. SNDRV_PCM_FMTBIT_S32_LE,
  609. .channels_min = 1,
  610. .channels_max = 8,
  611. .rate_min = 8000,
  612. .rate_max = 384000,
  613. },
  614. .ops = &msm_fe_dai_ops,
  615. .name = "USBAUDIO_HOSTLESS",
  616. .probe = fe_dai_probe,
  617. },
  618. {
  619. .playback = {
  620. .stream_name = "AFE Playback",
  621. .aif_name = "PCM_RX",
  622. .rates = (SNDRV_PCM_RATE_8000 |
  623. SNDRV_PCM_RATE_16000 |
  624. SNDRV_PCM_RATE_48000),
  625. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  626. .channels_min = 1,
  627. .channels_max = 2,
  628. .rate_min = 8000,
  629. .rate_max = 48000,
  630. },
  631. .capture = {
  632. .stream_name = "AFE Capture",
  633. .aif_name = "PCM_TX",
  634. .rates = (SNDRV_PCM_RATE_8000 |
  635. SNDRV_PCM_RATE_16000 |
  636. SNDRV_PCM_RATE_48000),
  637. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  638. .channels_min = 1,
  639. .channels_max = 2,
  640. .rate_min = 8000,
  641. .rate_max = 48000,
  642. },
  643. .ops = &msm_fe_dai_ops,
  644. .name = "AFE-PROXY",
  645. .probe = fe_dai_probe,
  646. },
  647. {
  648. .playback = {
  649. .stream_name = "HDMI_HOSTLESS Playback",
  650. .aif_name = "HDMI_DL_HL",
  651. .rates = SNDRV_PCM_RATE_8000_48000,
  652. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  653. SNDRV_PCM_FMTBIT_S24_LE),
  654. .channels_min = 1,
  655. .channels_max = 2,
  656. .rate_min = 8000,
  657. .rate_max = 48000,
  658. },
  659. .ops = &msm_fe_dai_ops,
  660. .name = "HDMI_HOSTLESS",
  661. .probe = fe_dai_probe,
  662. },
  663. {
  664. .playback = {
  665. .stream_name = "AUXPCM_HOSTLESS Playback",
  666. .aif_name = "AUXPCM_DL_HL",
  667. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  668. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  669. .channels_min = 1,
  670. .channels_max = 1,
  671. .rate_min = 8000,
  672. .rate_max = 16000,
  673. },
  674. .capture = {
  675. .stream_name = "AUXPCM_HOSTLESS Capture",
  676. .aif_name = "AUXPCM_UL_HL",
  677. .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  678. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  679. .channels_min = 1,
  680. .channels_max = 1,
  681. .rate_min = 8000,
  682. .rate_max = 16000,
  683. },
  684. .ops = &msm_fe_dai_ops,
  685. .name = "AUXPCM_HOSTLESS",
  686. .probe = fe_dai_probe,
  687. },
  688. {
  689. .playback = {
  690. .stream_name = "VOICE_STUB Playback",
  691. .aif_name = "VOICE_STUB_DL",
  692. .rates = SNDRV_PCM_RATE_8000_48000,
  693. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  694. .channels_min = 1,
  695. .channels_max = 2,
  696. .rate_min = 8000,
  697. .rate_max = 48000,
  698. },
  699. .capture = {
  700. .stream_name = "VOICE_STUB Capture",
  701. .aif_name = "VOICE_STUB_UL",
  702. .rates = SNDRV_PCM_RATE_8000_48000,
  703. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  704. .channels_min = 1,
  705. .channels_max = 2,
  706. .rate_min = 8000,
  707. .rate_max = 48000,
  708. },
  709. .ops = &msm_fe_dai_ops,
  710. .name = "VOICE_STUB",
  711. .probe = fe_dai_probe,
  712. },
  713. {
  714. .playback = {
  715. .stream_name = "MI2S_RX_HOSTLESS Playback",
  716. .aif_name = "MI2S_DL_HL",
  717. .rates = SNDRV_PCM_RATE_8000_48000,
  718. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  719. .channels_min = 1,
  720. .channels_max = 2,
  721. .rate_min = 8000,
  722. .rate_max = 48000,
  723. },
  724. .capture = {
  725. .stream_name = "MI2S_TX_HOSTLESS Capture",
  726. .aif_name = "MI2S_UL_HL",
  727. .rates = SNDRV_PCM_RATE_8000_48000,
  728. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  729. SNDRV_PCM_FMTBIT_S24_LE),
  730. .channels_min = 1,
  731. .channels_max = 2,
  732. .rate_min = 8000,
  733. .rate_max = 48000,
  734. },
  735. .ops = &msm_fe_dai_ops,
  736. .name = "MI2S_TX_HOSTLESS",
  737. .probe = fe_dai_probe,
  738. },
  739. {
  740. .playback = {
  741. .stream_name = "SEC_I2S_RX_HOSTLESS Playback",
  742. .aif_name = "SEC_I2S_DL_HL",
  743. .rates = SNDRV_PCM_RATE_8000_48000,
  744. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  745. .channels_min = 1,
  746. .channels_max = 2,
  747. .rate_min = 8000,
  748. .rate_max = 48000,
  749. },
  750. .ops = &msm_fe_dai_ops,
  751. .name = "SEC_I2S_RX_HOSTLESS",
  752. .probe = fe_dai_probe,
  753. },
  754. {
  755. .capture = {
  756. .stream_name = "Primary MI2S_TX Hostless Capture",
  757. .aif_name = "PRI_MI2S_UL_HL",
  758. .rates = SNDRV_PCM_RATE_8000_48000,
  759. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  760. SNDRV_PCM_FMTBIT_S24_LE),
  761. .channels_min = 1,
  762. .channels_max = 2,
  763. .rate_min = 8000,
  764. .rate_max = 48000,
  765. },
  766. .ops = &msm_fe_dai_ops,
  767. .name = "PRI_MI2S_TX_HOSTLESS",
  768. .probe = fe_dai_probe,
  769. },
  770. {
  771. .playback = {
  772. .stream_name = "Primary MI2S_RX Hostless Playback",
  773. .aif_name = "PRI_MI2S_DL_HL",
  774. .rates = SNDRV_PCM_RATE_8000_384000,
  775. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  776. SNDRV_PCM_FMTBIT_S24_LE),
  777. .channels_min = 1,
  778. .channels_max = 2,
  779. .rate_min = 8000,
  780. .rate_max = 384000,
  781. },
  782. .ops = &msm_fe_dai_ops,
  783. .name = "PRI_MI2S_RX_HOSTLESS",
  784. .probe = fe_dai_probe,
  785. },
  786. {
  787. .capture = {
  788. .stream_name = "Secondary MI2S_TX Hostless Capture",
  789. .aif_name = "SEC_MI2S_UL_HL",
  790. .rates = SNDRV_PCM_RATE_8000_48000,
  791. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  792. SNDRV_PCM_FMTBIT_S24_LE),
  793. .channels_min = 1,
  794. .channels_max = 2,
  795. .rate_min = 8000,
  796. .rate_max = 48000,
  797. },
  798. .ops = &msm_fe_dai_ops,
  799. .name = "SEC_MI2S_TX_HOSTLESS",
  800. .probe = fe_dai_probe,
  801. },
  802. {
  803. .playback = {
  804. .stream_name = "Secondary MI2S_RX Hostless Playback",
  805. .aif_name = "SEC_MI2S_DL_HL",
  806. .rates = SNDRV_PCM_RATE_8000_384000,
  807. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  808. SNDRV_PCM_FMTBIT_S24_LE,
  809. .channels_min = 1,
  810. .channels_max = 2,
  811. .rate_min = 8000,
  812. .rate_max = 384000,
  813. },
  814. .ops = &msm_fe_dai_ops,
  815. .name = "SEC_MI2S_RX_HOSTLESS",
  816. .probe = fe_dai_probe,
  817. },
  818. {
  819. .capture = {
  820. .stream_name = "Tertiary MI2S_TX Hostless Capture",
  821. .aif_name = "TERT_MI2S_UL_HL",
  822. .rates = SNDRV_PCM_RATE_8000_48000,
  823. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  824. SNDRV_PCM_FMTBIT_S24_LE),
  825. .channels_min = 1,
  826. .channels_max = 2,
  827. .rate_min = 8000,
  828. .rate_max = 48000,
  829. },
  830. .ops = &msm_fe_dai_ops,
  831. .name = "TERT_MI2S_TX_HOSTLESS",
  832. .probe = fe_dai_probe,
  833. },
  834. {
  835. .playback = {
  836. .stream_name = "Tertiary MI2S_RX Hostless Playback",
  837. .aif_name = "TERT_MI2S_DL_HL",
  838. .rates = SNDRV_PCM_RATE_8000_384000,
  839. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  840. SNDRV_PCM_FMTBIT_S24_LE,
  841. .channels_min = 1,
  842. .channels_max = 2,
  843. .rate_min = 8000,
  844. .rate_max = 384000,
  845. },
  846. .ops = &msm_fe_dai_ops,
  847. .name = "TERT_MI2S_RX_HOSTLESS",
  848. .probe = fe_dai_probe,
  849. },
  850. {
  851. .capture = {
  852. .stream_name = "Quaternary MI2S_TX Hostless Capture",
  853. .aif_name = "QUAT_MI2S_UL_HL",
  854. .rates = SNDRV_PCM_RATE_8000_48000,
  855. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  856. SNDRV_PCM_FMTBIT_S24_LE),
  857. .channels_min = 1,
  858. .channels_max = 2,
  859. .rate_min = 8000,
  860. .rate_max = 48000,
  861. },
  862. .ops = &msm_fe_dai_ops,
  863. .name = "QUAT_MI2S_TX_HOSTLESS",
  864. .probe = fe_dai_probe,
  865. },
  866. {
  867. .playback = {
  868. .stream_name = "Quaternary MI2S_RX Hostless Playback",
  869. .aif_name = "QUAT_MI2S_DL_HL",
  870. .rates = SNDRV_PCM_RATE_8000_384000,
  871. .formats = SNDRV_PCM_FMTBIT_S16_LE |
  872. SNDRV_PCM_FMTBIT_S24_LE,
  873. .channels_min = 1,
  874. .channels_max = 8,
  875. .rate_min = 8000,
  876. .rate_max = 384000,
  877. },
  878. .ops = &msm_fe_dai_ops,
  879. .name = "QUAT_MI2S_RX_HOSTLESS",
  880. .probe = fe_dai_probe,
  881. },
  882. {
  883. .playback = {
  884. .stream_name = "INT0 MI2S_RX Hostless Playback",
  885. .aif_name = "INT0_MI2S_DL_HL",
  886. .rates = SNDRV_PCM_RATE_8000_192000,
  887. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  888. SNDRV_PCM_FMTBIT_S24_LE),
  889. .channels_min = 1,
  890. .channels_max = 2,
  891. .rate_min = 8000,
  892. .rate_max = 192000,
  893. },
  894. .ops = &msm_fe_dai_ops,
  895. .name = "INT0_MI2S_RX_HOSTLESS",
  896. .probe = fe_dai_probe,
  897. },
  898. {
  899. .playback = {
  900. .stream_name = "INT4 MI2S_RX Hostless Playback",
  901. .aif_name = "INT4_MI2S_DL_HL",
  902. .rates = SNDRV_PCM_RATE_8000_192000,
  903. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  904. SNDRV_PCM_FMTBIT_S24_LE),
  905. .channels_min = 1,
  906. .channels_max = 4,
  907. .rate_min = 8000,
  908. .rate_max = 192000,
  909. },
  910. .ops = &msm_fe_dai_ops,
  911. .name = "INT4_MI2S_RX_HOSTLESS",
  912. .probe = fe_dai_probe,
  913. },
  914. {
  915. .capture = {
  916. .stream_name = "INT3 MI2S_TX Hostless Capture",
  917. .aif_name = "INT3_MI2S_UL_HL",
  918. .rates = SNDRV_PCM_RATE_8000_48000,
  919. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  920. SNDRV_PCM_FMTBIT_S24_LE),
  921. .channels_min = 1,
  922. .channels_max = 2,
  923. .rate_min = 8000,
  924. .rate_max = 48000,
  925. },
  926. .ops = &msm_fe_dai_ops,
  927. .name = "INT3_MI2S_TX_HOSTLESS",
  928. .probe = fe_dai_probe,
  929. },
  930. /* TDM Hostless */
  931. {
  932. .capture = {
  933. .stream_name = "Primary TDM0 Hostless Capture",
  934. .aif_name = "PRI_TDM_TX_0_UL_HL",
  935. .rates = SNDRV_PCM_RATE_8000_48000,
  936. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  937. SNDRV_PCM_FMTBIT_S24_LE),
  938. .channels_min = 1,
  939. .channels_max = 8,
  940. .rate_min = 8000,
  941. .rate_max = 48000,
  942. },
  943. .ops = &msm_fe_dai_ops,
  944. .name = "PRI_TDM_TX_0_HOSTLESS",
  945. .probe = fe_dai_probe,
  946. },
  947. {
  948. .playback = {
  949. .stream_name = "Primary TDM0 Hostless Playback",
  950. .aif_name = "PRI_TDM_RX_0_DL_HL",
  951. .rates = SNDRV_PCM_RATE_8000_48000,
  952. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  953. SNDRV_PCM_FMTBIT_S24_LE),
  954. .channels_min = 1,
  955. .channels_max = 8,
  956. .rate_min = 8000,
  957. .rate_max = 48000,
  958. },
  959. .ops = &msm_fe_dai_ops,
  960. .name = "PRI_TDM_RX_0_HOSTLESS",
  961. .probe = fe_dai_probe,
  962. },
  963. {
  964. .capture = {
  965. .stream_name = "Primary TDM1 Hostless Capture",
  966. .aif_name = "PRI_TDM_TX_1_UL_HL",
  967. .rates = SNDRV_PCM_RATE_8000_48000,
  968. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  969. SNDRV_PCM_FMTBIT_S24_LE),
  970. .channels_min = 1,
  971. .channels_max = 8,
  972. .rate_min = 8000,
  973. .rate_max = 48000,
  974. },
  975. .ops = &msm_fe_dai_ops,
  976. .name = "PRI_TDM_TX_1_HOSTLESS",
  977. .probe = fe_dai_probe,
  978. },
  979. {
  980. .playback = {
  981. .stream_name = "Primary TDM1 Hostless Playback",
  982. .aif_name = "PRI_TDM_RX_1_DL_HL",
  983. .rates = SNDRV_PCM_RATE_8000_48000,
  984. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  985. SNDRV_PCM_FMTBIT_S24_LE),
  986. .channels_min = 1,
  987. .channels_max = 8,
  988. .rate_min = 8000,
  989. .rate_max = 48000,
  990. },
  991. .ops = &msm_fe_dai_ops,
  992. .name = "PRI_TDM_RX_1_HOSTLESS",
  993. .probe = fe_dai_probe,
  994. },
  995. {
  996. .capture = {
  997. .stream_name = "Primary TDM2 Hostless Capture",
  998. .aif_name = "PRI_TDM_TX_2_UL_HL",
  999. .rates = SNDRV_PCM_RATE_8000_48000,
  1000. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1001. SNDRV_PCM_FMTBIT_S24_LE),
  1002. .channels_min = 1,
  1003. .channels_max = 8,
  1004. .rate_min = 8000,
  1005. .rate_max = 48000,
  1006. },
  1007. .ops = &msm_fe_dai_ops,
  1008. .name = "PRI_TDM_TX_2_HOSTLESS",
  1009. .probe = fe_dai_probe,
  1010. },
  1011. {
  1012. .playback = {
  1013. .stream_name = "Primary TDM2 Hostless Playback",
  1014. .aif_name = "PRI_TDM_RX_2_DL_HL",
  1015. .rates = SNDRV_PCM_RATE_8000_48000,
  1016. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1017. SNDRV_PCM_FMTBIT_S24_LE),
  1018. .channels_min = 1,
  1019. .channels_max = 8,
  1020. .rate_min = 8000,
  1021. .rate_max = 48000,
  1022. },
  1023. .ops = &msm_fe_dai_ops,
  1024. .name = "PRI_TDM_RX_2_HOSTLESS",
  1025. .probe = fe_dai_probe,
  1026. },
  1027. {
  1028. .capture = {
  1029. .stream_name = "Primary TDM3 Hostless Capture",
  1030. .aif_name = "PRI_TDM_TX_3_UL_HL",
  1031. .rates = SNDRV_PCM_RATE_8000_48000,
  1032. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1033. SNDRV_PCM_FMTBIT_S24_LE),
  1034. .channels_min = 1,
  1035. .channels_max = 8,
  1036. .rate_min = 8000,
  1037. .rate_max = 48000,
  1038. },
  1039. .ops = &msm_fe_dai_ops,
  1040. .name = "PRI_TDM_TX_3_HOSTLESS",
  1041. .probe = fe_dai_probe,
  1042. },
  1043. {
  1044. .playback = {
  1045. .stream_name = "Primary TDM3 Hostless Playback",
  1046. .aif_name = "PRI_TDM_RX_3_DL_HL",
  1047. .rates = SNDRV_PCM_RATE_8000_48000,
  1048. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1049. SNDRV_PCM_FMTBIT_S24_LE),
  1050. .channels_min = 1,
  1051. .channels_max = 8,
  1052. .rate_min = 8000,
  1053. .rate_max = 48000,
  1054. },
  1055. .ops = &msm_fe_dai_ops,
  1056. .name = "PRI_TDM_RX_3_HOSTLESS",
  1057. .probe = fe_dai_probe,
  1058. },
  1059. {
  1060. .capture = {
  1061. .stream_name = "Primary TDM4 Hostless Capture",
  1062. .aif_name = "PRI_TDM_TX_4_UL_HL",
  1063. .rates = SNDRV_PCM_RATE_8000_48000,
  1064. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1065. SNDRV_PCM_FMTBIT_S24_LE),
  1066. .channels_min = 1,
  1067. .channels_max = 8,
  1068. .rate_min = 8000,
  1069. .rate_max = 48000,
  1070. },
  1071. .ops = &msm_fe_dai_ops,
  1072. .name = "PRI_TDM_TX_4_HOSTLESS",
  1073. .probe = fe_dai_probe,
  1074. },
  1075. {
  1076. .playback = {
  1077. .stream_name = "Primary TDM4 Hostless Playback",
  1078. .aif_name = "PRI_TDM_RX_4_DL_HL",
  1079. .rates = SNDRV_PCM_RATE_8000_48000,
  1080. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1081. SNDRV_PCM_FMTBIT_S24_LE),
  1082. .channels_min = 1,
  1083. .channels_max = 8,
  1084. .rate_min = 8000,
  1085. .rate_max = 48000,
  1086. },
  1087. .ops = &msm_fe_dai_ops,
  1088. .name = "PRI_TDM_RX_4_HOSTLESS",
  1089. .probe = fe_dai_probe,
  1090. },
  1091. {
  1092. .capture = {
  1093. .stream_name = "Primary TDM5 Hostless Capture",
  1094. .aif_name = "PRI_TDM_TX_5_UL_HL",
  1095. .rates = SNDRV_PCM_RATE_8000_48000,
  1096. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1097. SNDRV_PCM_FMTBIT_S24_LE),
  1098. .channels_min = 1,
  1099. .channels_max = 8,
  1100. .rate_min = 8000,
  1101. .rate_max = 48000,
  1102. },
  1103. .ops = &msm_fe_dai_ops,
  1104. .name = "PRI_TDM_TX_5_HOSTLESS",
  1105. .probe = fe_dai_probe,
  1106. },
  1107. {
  1108. .playback = {
  1109. .stream_name = "Primary TDM5 Hostless Playback",
  1110. .aif_name = "PRI_TDM_RX_5_DL_HL",
  1111. .rates = SNDRV_PCM_RATE_8000_48000,
  1112. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1113. SNDRV_PCM_FMTBIT_S24_LE),
  1114. .channels_min = 1,
  1115. .channels_max = 8,
  1116. .rate_min = 8000,
  1117. .rate_max = 48000,
  1118. },
  1119. .ops = &msm_fe_dai_ops,
  1120. .name = "PRI_TDM_RX_5_HOSTLESS",
  1121. .probe = fe_dai_probe,
  1122. },
  1123. {
  1124. .capture = {
  1125. .stream_name = "Primary TDM6 Hostless Capture",
  1126. .aif_name = "PRI_TDM_TX_6_UL_HL",
  1127. .rates = SNDRV_PCM_RATE_8000_48000,
  1128. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1129. SNDRV_PCM_FMTBIT_S24_LE),
  1130. .channels_min = 1,
  1131. .channels_max = 8,
  1132. .rate_min = 8000,
  1133. .rate_max = 48000,
  1134. },
  1135. .ops = &msm_fe_dai_ops,
  1136. .name = "PRI_TDM_TX_6_HOSTLESS",
  1137. .probe = fe_dai_probe,
  1138. },
  1139. {
  1140. .playback = {
  1141. .stream_name = "Primary TDM6 Hostless Playback",
  1142. .aif_name = "PRI_TDM_RX_6_DL_HL",
  1143. .rates = SNDRV_PCM_RATE_8000_48000,
  1144. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1145. SNDRV_PCM_FMTBIT_S24_LE),
  1146. .channels_min = 1,
  1147. .channels_max = 8,
  1148. .rate_min = 8000,
  1149. .rate_max = 48000,
  1150. },
  1151. .ops = &msm_fe_dai_ops,
  1152. .name = "PRI_TDM_RX_6_HOSTLESS",
  1153. .probe = fe_dai_probe,
  1154. },
  1155. {
  1156. .capture = {
  1157. .stream_name = "Primary TDM7 Hostless Capture",
  1158. .aif_name = "PRI_TDM_TX_7_UL_HL",
  1159. .rates = SNDRV_PCM_RATE_8000_48000,
  1160. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1161. SNDRV_PCM_FMTBIT_S24_LE),
  1162. .channels_min = 1,
  1163. .channels_max = 8,
  1164. .rate_min = 8000,
  1165. .rate_max = 48000,
  1166. },
  1167. .ops = &msm_fe_dai_ops,
  1168. .name = "PRI_TDM_TX_7_HOSTLESS",
  1169. .probe = fe_dai_probe,
  1170. },
  1171. {
  1172. .playback = {
  1173. .stream_name = "Primary TDM7 Hostless Playback",
  1174. .aif_name = "PRI_TDM_RX_7_DL_HL",
  1175. .rates = SNDRV_PCM_RATE_8000_48000,
  1176. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1177. SNDRV_PCM_FMTBIT_S24_LE),
  1178. .channels_min = 1,
  1179. .channels_max = 8,
  1180. .rate_min = 8000,
  1181. .rate_max = 48000,
  1182. },
  1183. .ops = &msm_fe_dai_ops,
  1184. .name = "PRI_TDM_RX_7_HOSTLESS",
  1185. .probe = fe_dai_probe,
  1186. },
  1187. {
  1188. .capture = {
  1189. .stream_name = "Secondary TDM0 Hostless Capture",
  1190. .aif_name = "SEC_TDM_TX_0_UL_HL",
  1191. .rates = SNDRV_PCM_RATE_8000_48000,
  1192. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1193. SNDRV_PCM_FMTBIT_S24_LE),
  1194. .channels_min = 1,
  1195. .channels_max = 8,
  1196. .rate_min = 8000,
  1197. .rate_max = 48000,
  1198. },
  1199. .ops = &msm_fe_dai_ops,
  1200. .name = "SEC_TDM_TX_0_HOSTLESS",
  1201. .probe = fe_dai_probe,
  1202. },
  1203. {
  1204. .playback = {
  1205. .stream_name = "Secondary TDM0 Hostless Playback",
  1206. .aif_name = "SEC_TDM_RX_0_DL_HL",
  1207. .rates = SNDRV_PCM_RATE_8000_48000,
  1208. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1209. SNDRV_PCM_FMTBIT_S24_LE),
  1210. .channels_min = 1,
  1211. .channels_max = 8,
  1212. .rate_min = 8000,
  1213. .rate_max = 48000,
  1214. },
  1215. .ops = &msm_fe_dai_ops,
  1216. .name = "SEC_TDM_RX_0_HOSTLESS",
  1217. .probe = fe_dai_probe,
  1218. },
  1219. {
  1220. .capture = {
  1221. .stream_name = "Secondary TDM1 Hostless Capture",
  1222. .aif_name = "SEC_TDM_TX_1_UL_HL",
  1223. .rates = SNDRV_PCM_RATE_8000_48000,
  1224. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1225. SNDRV_PCM_FMTBIT_S24_LE),
  1226. .channels_min = 1,
  1227. .channels_max = 8,
  1228. .rate_min = 8000,
  1229. .rate_max = 48000,
  1230. },
  1231. .ops = &msm_fe_dai_ops,
  1232. .name = "SEC_TDM_TX_1_HOSTLESS",
  1233. .probe = fe_dai_probe,
  1234. },
  1235. {
  1236. .playback = {
  1237. .stream_name = "Secondary TDM1 Hostless Playback",
  1238. .aif_name = "SEC_TDM_RX_1_DL_HL",
  1239. .rates = SNDRV_PCM_RATE_8000_48000,
  1240. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1241. SNDRV_PCM_FMTBIT_S24_LE),
  1242. .channels_min = 1,
  1243. .channels_max = 8,
  1244. .rate_min = 8000,
  1245. .rate_max = 48000,
  1246. },
  1247. .ops = &msm_fe_dai_ops,
  1248. .name = "SEC_TDM_RX_1_HOSTLESS",
  1249. .probe = fe_dai_probe,
  1250. },
  1251. {
  1252. .capture = {
  1253. .stream_name = "Secondary TDM2 Hostless Capture",
  1254. .aif_name = "SEC_TDM_TX_2_UL_HL",
  1255. .rates = SNDRV_PCM_RATE_8000_48000,
  1256. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1257. SNDRV_PCM_FMTBIT_S24_LE),
  1258. .channels_min = 1,
  1259. .channels_max = 8,
  1260. .rate_min = 8000,
  1261. .rate_max = 48000,
  1262. },
  1263. .ops = &msm_fe_dai_ops,
  1264. .name = "SEC_TDM_TX_2_HOSTLESS",
  1265. .probe = fe_dai_probe,
  1266. },
  1267. {
  1268. .playback = {
  1269. .stream_name = "Secondary TDM2 Hostless Playback",
  1270. .aif_name = "SEC_TDM_RX_2_DL_HL",
  1271. .rates = SNDRV_PCM_RATE_8000_48000,
  1272. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1273. SNDRV_PCM_FMTBIT_S24_LE),
  1274. .channels_min = 1,
  1275. .channels_max = 8,
  1276. .rate_min = 8000,
  1277. .rate_max = 48000,
  1278. },
  1279. .ops = &msm_fe_dai_ops,
  1280. .name = "SEC_TDM_RX_2_HOSTLESS",
  1281. .probe = fe_dai_probe,
  1282. },
  1283. {
  1284. .capture = {
  1285. .stream_name = "Secondary TDM3 Hostless Capture",
  1286. .aif_name = "SEC_TDM_TX_3_UL_HL",
  1287. .rates = SNDRV_PCM_RATE_8000_48000,
  1288. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1289. SNDRV_PCM_FMTBIT_S24_LE),
  1290. .channels_min = 1,
  1291. .channels_max = 8,
  1292. .rate_min = 8000,
  1293. .rate_max = 48000,
  1294. },
  1295. .ops = &msm_fe_dai_ops,
  1296. .name = "SEC_TDM_TX_3_HOSTLESS",
  1297. .probe = fe_dai_probe,
  1298. },
  1299. {
  1300. .playback = {
  1301. .stream_name = "Secondary TDM3 Hostless Playback",
  1302. .aif_name = "SEC_TDM_RX_3_DL_HL",
  1303. .rates = SNDRV_PCM_RATE_8000_48000,
  1304. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1305. SNDRV_PCM_FMTBIT_S24_LE),
  1306. .channels_min = 1,
  1307. .channels_max = 8,
  1308. .rate_min = 8000,
  1309. .rate_max = 48000,
  1310. },
  1311. .ops = &msm_fe_dai_ops,
  1312. .name = "SEC_TDM_RX_3_HOSTLESS",
  1313. .probe = fe_dai_probe,
  1314. },
  1315. {
  1316. .capture = {
  1317. .stream_name = "Secondary TDM4 Hostless Capture",
  1318. .aif_name = "SEC_TDM_TX_4_UL_HL",
  1319. .rates = SNDRV_PCM_RATE_8000_48000,
  1320. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1321. SNDRV_PCM_FMTBIT_S24_LE),
  1322. .channels_min = 1,
  1323. .channels_max = 8,
  1324. .rate_min = 8000,
  1325. .rate_max = 48000,
  1326. },
  1327. .ops = &msm_fe_dai_ops,
  1328. .name = "SEC_TDM_TX_4_HOSTLESS",
  1329. .probe = fe_dai_probe,
  1330. },
  1331. {
  1332. .playback = {
  1333. .stream_name = "Secondary TDM4 Hostless Playback",
  1334. .aif_name = "SEC_TDM_RX_4_DL_HL",
  1335. .rates = SNDRV_PCM_RATE_8000_48000,
  1336. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1337. SNDRV_PCM_FMTBIT_S24_LE),
  1338. .channels_min = 1,
  1339. .channels_max = 8,
  1340. .rate_min = 8000,
  1341. .rate_max = 48000,
  1342. },
  1343. .ops = &msm_fe_dai_ops,
  1344. .name = "SEC_TDM_RX_4_HOSTLESS",
  1345. .probe = fe_dai_probe,
  1346. },
  1347. {
  1348. .capture = {
  1349. .stream_name = "Secondary TDM5 Hostless Capture",
  1350. .aif_name = "SEC_TDM_TX_5_UL_HL",
  1351. .rates = SNDRV_PCM_RATE_8000_48000,
  1352. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1353. SNDRV_PCM_FMTBIT_S24_LE),
  1354. .channels_min = 1,
  1355. .channels_max = 8,
  1356. .rate_min = 8000,
  1357. .rate_max = 48000,
  1358. },
  1359. .ops = &msm_fe_dai_ops,
  1360. .name = "SEC_TDM_TX_5_HOSTLESS",
  1361. .probe = fe_dai_probe,
  1362. },
  1363. {
  1364. .playback = {
  1365. .stream_name = "Secondary TDM5 Hostless Playback",
  1366. .aif_name = "SEC_TDM_RX_5_DL_HL",
  1367. .rates = SNDRV_PCM_RATE_8000_48000,
  1368. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1369. SNDRV_PCM_FMTBIT_S24_LE),
  1370. .channels_min = 1,
  1371. .channels_max = 8,
  1372. .rate_min = 8000,
  1373. .rate_max = 48000,
  1374. },
  1375. .ops = &msm_fe_dai_ops,
  1376. .name = "SEC_TDM_RX_5_HOSTLESS",
  1377. .probe = fe_dai_probe,
  1378. },
  1379. {
  1380. .capture = {
  1381. .stream_name = "Secondary TDM6 Hostless Capture",
  1382. .aif_name = "SEC_TDM_TX_6_UL_HL",
  1383. .rates = SNDRV_PCM_RATE_8000_48000,
  1384. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1385. SNDRV_PCM_FMTBIT_S24_LE),
  1386. .channels_min = 1,
  1387. .channels_max = 8,
  1388. .rate_min = 8000,
  1389. .rate_max = 48000,
  1390. },
  1391. .ops = &msm_fe_dai_ops,
  1392. .name = "SEC_TDM_TX_6_HOSTLESS",
  1393. .probe = fe_dai_probe,
  1394. },
  1395. {
  1396. .playback = {
  1397. .stream_name = "Secondary TDM6 Hostless Playback",
  1398. .aif_name = "SEC_TDM_RX_6_DL_HL",
  1399. .rates = SNDRV_PCM_RATE_8000_48000,
  1400. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1401. SNDRV_PCM_FMTBIT_S24_LE),
  1402. .channels_min = 1,
  1403. .channels_max = 8,
  1404. .rate_min = 8000,
  1405. .rate_max = 48000,
  1406. },
  1407. .ops = &msm_fe_dai_ops,
  1408. .name = "SEC_TDM_RX_6_HOSTLESS",
  1409. .probe = fe_dai_probe,
  1410. },
  1411. {
  1412. .capture = {
  1413. .stream_name = "Secondary TDM7 Hostless Capture",
  1414. .aif_name = "SEC_TDM_TX_7_UL_HL",
  1415. .rates = SNDRV_PCM_RATE_8000_48000,
  1416. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1417. SNDRV_PCM_FMTBIT_S24_LE),
  1418. .channels_min = 1,
  1419. .channels_max = 8,
  1420. .rate_min = 8000,
  1421. .rate_max = 48000,
  1422. },
  1423. .ops = &msm_fe_dai_ops,
  1424. .name = "SEC_TDM_TX_7_HOSTLESS",
  1425. .probe = fe_dai_probe,
  1426. },
  1427. {
  1428. .playback = {
  1429. .stream_name = "Secondary TDM7 Hostless Playback",
  1430. .aif_name = "SEC_TDM_RX_7_DL_HL",
  1431. .rates = SNDRV_PCM_RATE_8000_48000,
  1432. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1433. SNDRV_PCM_FMTBIT_S24_LE),
  1434. .channels_min = 1,
  1435. .channels_max = 8,
  1436. .rate_min = 8000,
  1437. .rate_max = 48000,
  1438. },
  1439. .ops = &msm_fe_dai_ops,
  1440. .name = "SEC_TDM_RX_7_HOSTLESS",
  1441. .probe = fe_dai_probe,
  1442. },
  1443. {
  1444. .capture = {
  1445. .stream_name = "Tertiary TDM0 Hostless Capture",
  1446. .aif_name = "TERT_TDM_TX_0_UL_HL",
  1447. .rates = SNDRV_PCM_RATE_8000_48000,
  1448. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1449. SNDRV_PCM_FMTBIT_S24_LE),
  1450. .channels_min = 1,
  1451. .channels_max = 8,
  1452. .rate_min = 8000,
  1453. .rate_max = 48000,
  1454. },
  1455. .ops = &msm_fe_dai_ops,
  1456. .name = "TERT_TDM_TX_0_HOSTLESS",
  1457. .probe = fe_dai_probe,
  1458. },
  1459. {
  1460. .playback = {
  1461. .stream_name = "Tertiary TDM0 Hostless Playback",
  1462. .aif_name = "TERT_TDM_RX_0_DL_HL",
  1463. .rates = SNDRV_PCM_RATE_8000_48000,
  1464. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1465. SNDRV_PCM_FMTBIT_S24_LE),
  1466. .channels_min = 1,
  1467. .channels_max = 8,
  1468. .rate_min = 8000,
  1469. .rate_max = 48000,
  1470. },
  1471. .ops = &msm_fe_dai_ops,
  1472. .name = "TERT_TDM_RX_0_HOSTLESS",
  1473. .probe = fe_dai_probe,
  1474. },
  1475. {
  1476. .capture = {
  1477. .stream_name = "Tertiary TDM1 Hostless Capture",
  1478. .aif_name = "TERT_TDM_TX_1_UL_HL",
  1479. .rates = SNDRV_PCM_RATE_8000_48000,
  1480. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1481. SNDRV_PCM_FMTBIT_S24_LE),
  1482. .channels_min = 1,
  1483. .channels_max = 8,
  1484. .rate_min = 8000,
  1485. .rate_max = 48000,
  1486. },
  1487. .ops = &msm_fe_dai_ops,
  1488. .name = "TERT_TDM_TX_1_HOSTLESS",
  1489. .probe = fe_dai_probe,
  1490. },
  1491. {
  1492. .playback = {
  1493. .stream_name = "Tertiary TDM1 Hostless Playback",
  1494. .aif_name = "TERT_TDM_RX_1_DL_HL",
  1495. .rates = SNDRV_PCM_RATE_8000_48000,
  1496. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1497. SNDRV_PCM_FMTBIT_S24_LE),
  1498. .channels_min = 1,
  1499. .channels_max = 8,
  1500. .rate_min = 8000,
  1501. .rate_max = 48000,
  1502. },
  1503. .ops = &msm_fe_dai_ops,
  1504. .name = "TERT_TDM_RX_1_HOSTLESS",
  1505. .probe = fe_dai_probe,
  1506. },
  1507. {
  1508. .capture = {
  1509. .stream_name = "Tertiary TDM2 Hostless Capture",
  1510. .aif_name = "TERT_TDM_TX_2_UL_HL",
  1511. .rates = SNDRV_PCM_RATE_8000_48000,
  1512. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1513. SNDRV_PCM_FMTBIT_S24_LE),
  1514. .channels_min = 1,
  1515. .channels_max = 8,
  1516. .rate_min = 8000,
  1517. .rate_max = 48000,
  1518. },
  1519. .ops = &msm_fe_dai_ops,
  1520. .name = "TERT_TDM_TX_2_HOSTLESS",
  1521. .probe = fe_dai_probe,
  1522. },
  1523. {
  1524. .playback = {
  1525. .stream_name = "Tertiary TDM2 Hostless Playback",
  1526. .aif_name = "TERT_TDM_RX_2_DL_HL",
  1527. .rates = SNDRV_PCM_RATE_8000_48000,
  1528. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1529. SNDRV_PCM_FMTBIT_S24_LE),
  1530. .channels_min = 1,
  1531. .channels_max = 8,
  1532. .rate_min = 8000,
  1533. .rate_max = 48000,
  1534. },
  1535. .ops = &msm_fe_dai_ops,
  1536. .name = "TERT_TDM_RX_2_HOSTLESS",
  1537. .probe = fe_dai_probe,
  1538. },
  1539. {
  1540. .capture = {
  1541. .stream_name = "Tertiary TDM3 Hostless Capture",
  1542. .aif_name = "TERT_TDM_TX_3_UL_HL",
  1543. .rates = SNDRV_PCM_RATE_8000_48000,
  1544. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1545. SNDRV_PCM_FMTBIT_S24_LE),
  1546. .channels_min = 1,
  1547. .channels_max = 8,
  1548. .rate_min = 8000,
  1549. .rate_max = 48000,
  1550. },
  1551. .ops = &msm_fe_dai_ops,
  1552. .name = "TERT_TDM_TX_3_HOSTLESS",
  1553. .probe = fe_dai_probe,
  1554. },
  1555. {
  1556. .playback = {
  1557. .stream_name = "Tertiary TDM3 Hostless Playback",
  1558. .aif_name = "TERT_TDM_RX_3_DL_HL",
  1559. .rates = SNDRV_PCM_RATE_8000_48000,
  1560. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1561. SNDRV_PCM_FMTBIT_S24_LE),
  1562. .channels_min = 1,
  1563. .channels_max = 8,
  1564. .rate_min = 8000,
  1565. .rate_max = 48000,
  1566. },
  1567. .ops = &msm_fe_dai_ops,
  1568. .name = "TERT_TDM_RX_3_HOSTLESS",
  1569. .probe = fe_dai_probe,
  1570. },
  1571. {
  1572. .capture = {
  1573. .stream_name = "Tertiary TDM4 Hostless Capture",
  1574. .aif_name = "TERT_TDM_TX_4_UL_HL",
  1575. .rates = SNDRV_PCM_RATE_8000_48000,
  1576. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1577. SNDRV_PCM_FMTBIT_S24_LE),
  1578. .channels_min = 1,
  1579. .channels_max = 8,
  1580. .rate_min = 8000,
  1581. .rate_max = 48000,
  1582. },
  1583. .ops = &msm_fe_dai_ops,
  1584. .name = "TERT_TDM_TX_4_HOSTLESS",
  1585. .probe = fe_dai_probe,
  1586. },
  1587. {
  1588. .playback = {
  1589. .stream_name = "Tertiary TDM4 Hostless Playback",
  1590. .aif_name = "TERT_TDM_RX_4_DL_HL",
  1591. .rates = SNDRV_PCM_RATE_8000_48000,
  1592. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1593. SNDRV_PCM_FMTBIT_S24_LE),
  1594. .channels_min = 1,
  1595. .channels_max = 8,
  1596. .rate_min = 8000,
  1597. .rate_max = 48000,
  1598. },
  1599. .ops = &msm_fe_dai_ops,
  1600. .name = "TERT_TDM_RX_4_HOSTLESS",
  1601. .probe = fe_dai_probe,
  1602. },
  1603. {
  1604. .capture = {
  1605. .stream_name = "Tertiary TDM5 Hostless Capture",
  1606. .aif_name = "TERT_TDM_TX_5_UL_HL",
  1607. .rates = SNDRV_PCM_RATE_8000_48000,
  1608. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1609. SNDRV_PCM_FMTBIT_S24_LE),
  1610. .channels_min = 1,
  1611. .channels_max = 8,
  1612. .rate_min = 8000,
  1613. .rate_max = 48000,
  1614. },
  1615. .ops = &msm_fe_dai_ops,
  1616. .name = "TERT_TDM_TX_5_HOSTLESS",
  1617. .probe = fe_dai_probe,
  1618. },
  1619. {
  1620. .playback = {
  1621. .stream_name = "Tertiary TDM5 Hostless Playback",
  1622. .aif_name = "TERT_TDM_RX_5_DL_HL",
  1623. .rates = SNDRV_PCM_RATE_8000_48000,
  1624. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1625. SNDRV_PCM_FMTBIT_S24_LE),
  1626. .channels_min = 1,
  1627. .channels_max = 8,
  1628. .rate_min = 8000,
  1629. .rate_max = 48000,
  1630. },
  1631. .ops = &msm_fe_dai_ops,
  1632. .name = "TERT_TDM_RX_5_HOSTLESS",
  1633. .probe = fe_dai_probe,
  1634. },
  1635. {
  1636. .capture = {
  1637. .stream_name = "Tertiary TDM6 Hostless Capture",
  1638. .aif_name = "TERT_TDM_TX_6_UL_HL",
  1639. .rates = SNDRV_PCM_RATE_8000_48000,
  1640. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1641. SNDRV_PCM_FMTBIT_S24_LE),
  1642. .channels_min = 1,
  1643. .channels_max = 8,
  1644. .rate_min = 8000,
  1645. .rate_max = 48000,
  1646. },
  1647. .ops = &msm_fe_dai_ops,
  1648. .name = "TERT_TDM_TX_6_HOSTLESS",
  1649. .probe = fe_dai_probe,
  1650. },
  1651. {
  1652. .playback = {
  1653. .stream_name = "Tertiary TDM6 Hostless Playback",
  1654. .aif_name = "TERT_TDM_RX_6_DL_HL",
  1655. .rates = SNDRV_PCM_RATE_8000_48000,
  1656. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1657. SNDRV_PCM_FMTBIT_S24_LE),
  1658. .channels_min = 1,
  1659. .channels_max = 8,
  1660. .rate_min = 8000,
  1661. .rate_max = 48000,
  1662. },
  1663. .ops = &msm_fe_dai_ops,
  1664. .name = "TERT_TDM_RX_6_HOSTLESS",
  1665. .probe = fe_dai_probe,
  1666. },
  1667. {
  1668. .capture = {
  1669. .stream_name = "Tertiary TDM7 Hostless Capture",
  1670. .aif_name = "TERT_TDM_TX_7_UL_HL",
  1671. .rates = SNDRV_PCM_RATE_8000_48000,
  1672. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1673. SNDRV_PCM_FMTBIT_S24_LE),
  1674. .channels_min = 1,
  1675. .channels_max = 8,
  1676. .rate_min = 8000,
  1677. .rate_max = 48000,
  1678. },
  1679. .ops = &msm_fe_dai_ops,
  1680. .name = "TERT_TDM_TX_7_HOSTLESS",
  1681. .probe = fe_dai_probe,
  1682. },
  1683. {
  1684. .playback = {
  1685. .stream_name = "Tertiary TDM7 Hostless Playback",
  1686. .aif_name = "TERT_TDM_RX_7_DL_HL",
  1687. .rates = SNDRV_PCM_RATE_8000_48000,
  1688. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1689. SNDRV_PCM_FMTBIT_S24_LE),
  1690. .channels_min = 1,
  1691. .channels_max = 8,
  1692. .rate_min = 8000,
  1693. .rate_max = 48000,
  1694. },
  1695. .ops = &msm_fe_dai_ops,
  1696. .name = "TERT_TDM_RX_7_HOSTLESS",
  1697. .probe = fe_dai_probe,
  1698. },
  1699. {
  1700. .capture = {
  1701. .stream_name = "Quaternary TDM0 Hostless Capture",
  1702. .aif_name = "QUAT_TDM_TX_0_UL_HL",
  1703. .rates = SNDRV_PCM_RATE_8000_48000,
  1704. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1705. SNDRV_PCM_FMTBIT_S24_LE),
  1706. .channels_min = 1,
  1707. .channels_max = 8,
  1708. .rate_min = 8000,
  1709. .rate_max = 48000,
  1710. },
  1711. .ops = &msm_fe_dai_ops,
  1712. .name = "QUAT_TDM_TX_0_HOSTLESS",
  1713. .probe = fe_dai_probe,
  1714. },
  1715. {
  1716. .playback = {
  1717. .stream_name = "Quaternary TDM0 Hostless Playback",
  1718. .aif_name = "QUAT_TDM_RX_0_DL_HL",
  1719. .rates = SNDRV_PCM_RATE_8000_48000,
  1720. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1721. SNDRV_PCM_FMTBIT_S24_LE),
  1722. .channels_min = 1,
  1723. .channels_max = 8,
  1724. .rate_min = 8000,
  1725. .rate_max = 48000,
  1726. },
  1727. .ops = &msm_fe_dai_ops,
  1728. .name = "QUAT_TDM_RX_0_HOSTLESS",
  1729. .probe = fe_dai_probe,
  1730. },
  1731. {
  1732. .capture = {
  1733. .stream_name = "Quaternary TDM1 Hostless Capture",
  1734. .aif_name = "QUAT_TDM_TX_1_UL_HL",
  1735. .rates = SNDRV_PCM_RATE_8000_48000,
  1736. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1737. SNDRV_PCM_FMTBIT_S24_LE),
  1738. .channels_min = 1,
  1739. .channels_max = 8,
  1740. .rate_min = 8000,
  1741. .rate_max = 48000,
  1742. },
  1743. .ops = &msm_fe_dai_ops,
  1744. .name = "QUAT_TDM_TX_1_HOSTLESS",
  1745. .probe = fe_dai_probe,
  1746. },
  1747. {
  1748. .playback = {
  1749. .stream_name = "Quaternary TDM1 Hostless Playback",
  1750. .aif_name = "QUAT_TDM_RX_1_DL_HL",
  1751. .rates = SNDRV_PCM_RATE_8000_48000,
  1752. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1753. SNDRV_PCM_FMTBIT_S24_LE),
  1754. .channels_min = 1,
  1755. .channels_max = 8,
  1756. .rate_min = 8000,
  1757. .rate_max = 48000,
  1758. },
  1759. .ops = &msm_fe_dai_ops,
  1760. .name = "QUAT_TDM_RX_1_HOSTLESS",
  1761. .probe = fe_dai_probe,
  1762. },
  1763. {
  1764. .capture = {
  1765. .stream_name = "Quaternary TDM2 Hostless Capture",
  1766. .aif_name = "QUAT_TDM_TX_2_UL_HL",
  1767. .rates = SNDRV_PCM_RATE_8000_48000,
  1768. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1769. SNDRV_PCM_FMTBIT_S24_LE),
  1770. .channels_min = 1,
  1771. .channels_max = 8,
  1772. .rate_min = 8000,
  1773. .rate_max = 48000,
  1774. },
  1775. .ops = &msm_fe_dai_ops,
  1776. .name = "QUAT_TDM_TX_2_HOSTLESS",
  1777. .probe = fe_dai_probe,
  1778. },
  1779. {
  1780. .playback = {
  1781. .stream_name = "Quaternary TDM2 Hostless Playback",
  1782. .aif_name = "QUAT_TDM_RX_2_DL_HL",
  1783. .rates = SNDRV_PCM_RATE_8000_48000,
  1784. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1785. SNDRV_PCM_FMTBIT_S24_LE),
  1786. .channels_min = 1,
  1787. .channels_max = 8,
  1788. .rate_min = 8000,
  1789. .rate_max = 48000,
  1790. },
  1791. .ops = &msm_fe_dai_ops,
  1792. .name = "QUAT_TDM_RX_2_HOSTLESS",
  1793. .probe = fe_dai_probe,
  1794. },
  1795. {
  1796. .capture = {
  1797. .stream_name = "Quaternary TDM3 Hostless Capture",
  1798. .aif_name = "QUAT_TDM_TX_3_UL_HL",
  1799. .rates = SNDRV_PCM_RATE_8000_48000,
  1800. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1801. SNDRV_PCM_FMTBIT_S24_LE),
  1802. .channels_min = 1,
  1803. .channels_max = 8,
  1804. .rate_min = 8000,
  1805. .rate_max = 48000,
  1806. },
  1807. .ops = &msm_fe_dai_ops,
  1808. .name = "QUAT_TDM_TX_3_HOSTLESS",
  1809. .probe = fe_dai_probe,
  1810. },
  1811. {
  1812. .playback = {
  1813. .stream_name = "Quaternary TDM3 Hostless Playback",
  1814. .aif_name = "QUAT_TDM_RX_3_DL_HL",
  1815. .rates = SNDRV_PCM_RATE_8000_48000,
  1816. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1817. SNDRV_PCM_FMTBIT_S24_LE),
  1818. .channels_min = 1,
  1819. .channels_max = 8,
  1820. .rate_min = 8000,
  1821. .rate_max = 48000,
  1822. },
  1823. .ops = &msm_fe_dai_ops,
  1824. .name = "QUAT_TDM_RX_3_HOSTLESS",
  1825. .probe = fe_dai_probe,
  1826. },
  1827. {
  1828. .capture = {
  1829. .stream_name = "Quaternary TDM4 Hostless Capture",
  1830. .aif_name = "QUAT_TDM_TX_4_UL_HL",
  1831. .rates = SNDRV_PCM_RATE_8000_48000,
  1832. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1833. SNDRV_PCM_FMTBIT_S24_LE),
  1834. .channels_min = 1,
  1835. .channels_max = 8,
  1836. .rate_min = 8000,
  1837. .rate_max = 48000,
  1838. },
  1839. .ops = &msm_fe_dai_ops,
  1840. .name = "QUAT_TDM_TX_4_HOSTLESS",
  1841. .probe = fe_dai_probe,
  1842. },
  1843. {
  1844. .playback = {
  1845. .stream_name = "Quaternary TDM4 Hostless Playback",
  1846. .aif_name = "QUAT_TDM_RX_4_DL_HL",
  1847. .rates = SNDRV_PCM_RATE_8000_48000,
  1848. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1849. SNDRV_PCM_FMTBIT_S24_LE),
  1850. .channels_min = 1,
  1851. .channels_max = 8,
  1852. .rate_min = 8000,
  1853. .rate_max = 48000,
  1854. },
  1855. .ops = &msm_fe_dai_ops,
  1856. .name = "QUAT_TDM_RX_4_HOSTLESS",
  1857. .probe = fe_dai_probe,
  1858. },
  1859. {
  1860. .capture = {
  1861. .stream_name = "Quaternary TDM5 Hostless Capture",
  1862. .aif_name = "QUAT_TDM_TX_5_UL_HL",
  1863. .rates = SNDRV_PCM_RATE_8000_48000,
  1864. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1865. SNDRV_PCM_FMTBIT_S24_LE),
  1866. .channels_min = 1,
  1867. .channels_max = 8,
  1868. .rate_min = 8000,
  1869. .rate_max = 48000,
  1870. },
  1871. .ops = &msm_fe_dai_ops,
  1872. .name = "QUAT_TDM_TX_5_HOSTLESS",
  1873. .probe = fe_dai_probe,
  1874. },
  1875. {
  1876. .playback = {
  1877. .stream_name = "Quaternary TDM5 Hostless Playback",
  1878. .aif_name = "QUAT_TDM_RX_5_DL_HL",
  1879. .rates = SNDRV_PCM_RATE_8000_48000,
  1880. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1881. SNDRV_PCM_FMTBIT_S24_LE),
  1882. .channels_min = 1,
  1883. .channels_max = 8,
  1884. .rate_min = 8000,
  1885. .rate_max = 48000,
  1886. },
  1887. .ops = &msm_fe_dai_ops,
  1888. .name = "QUAT_TDM_RX_5_HOSTLESS",
  1889. .probe = fe_dai_probe,
  1890. },
  1891. {
  1892. .capture = {
  1893. .stream_name = "Quaternary TDM6 Hostless Capture",
  1894. .aif_name = "QUAT_TDM_TX_6_UL_HL",
  1895. .rates = SNDRV_PCM_RATE_8000_48000,
  1896. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1897. SNDRV_PCM_FMTBIT_S24_LE),
  1898. .channels_min = 1,
  1899. .channels_max = 8,
  1900. .rate_min = 8000,
  1901. .rate_max = 48000,
  1902. },
  1903. .ops = &msm_fe_dai_ops,
  1904. .name = "QUAT_TDM_TX_6_HOSTLESS",
  1905. .probe = fe_dai_probe,
  1906. },
  1907. {
  1908. .playback = {
  1909. .stream_name = "Quaternary TDM6 Hostless Playback",
  1910. .aif_name = "QUAT_TDM_RX_6_DL_HL",
  1911. .rates = SNDRV_PCM_RATE_8000_48000,
  1912. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1913. SNDRV_PCM_FMTBIT_S24_LE),
  1914. .channels_min = 1,
  1915. .channels_max = 8,
  1916. .rate_min = 8000,
  1917. .rate_max = 48000,
  1918. },
  1919. .ops = &msm_fe_dai_ops,
  1920. .name = "QUAT_TDM_RX_6_HOSTLESS",
  1921. .probe = fe_dai_probe,
  1922. },
  1923. {
  1924. .capture = {
  1925. .stream_name = "Quaternary TDM7 Hostless Capture",
  1926. .aif_name = "QUAT_TDM_TX_7_UL_HL",
  1927. .rates = SNDRV_PCM_RATE_8000_48000,
  1928. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1929. SNDRV_PCM_FMTBIT_S24_LE),
  1930. .channels_min = 1,
  1931. .channels_max = 8,
  1932. .rate_min = 8000,
  1933. .rate_max = 48000,
  1934. },
  1935. .ops = &msm_fe_dai_ops,
  1936. .name = "QUAT_TDM_TX_7_HOSTLESS",
  1937. .probe = fe_dai_probe,
  1938. },
  1939. {
  1940. .playback = {
  1941. .stream_name = "Quaternary TDM7 Hostless Playback",
  1942. .aif_name = "QUAT_TDM_RX_7_DL_HL",
  1943. .rates = SNDRV_PCM_RATE_8000_48000,
  1944. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1945. SNDRV_PCM_FMTBIT_S24_LE),
  1946. .channels_min = 1,
  1947. .channels_max = 8,
  1948. .rate_min = 8000,
  1949. .rate_max = 48000,
  1950. },
  1951. .ops = &msm_fe_dai_ops,
  1952. .name = "QUAT_TDM_RX_7_HOSTLESS",
  1953. .probe = fe_dai_probe,
  1954. },
  1955. {
  1956. .playback = {
  1957. .stream_name = "DTMF_RX_HOSTLESS Playback",
  1958. .aif_name = "DTMF_DL_HL",
  1959. .rates = SNDRV_PCM_RATE_8000_48000,
  1960. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  1961. .channels_min = 1,
  1962. .channels_max = 2,
  1963. .rate_min = 8000,
  1964. .rate_max = 48000,
  1965. },
  1966. .ops = &msm_fe_dai_ops,
  1967. .name = "DTMF_RX_HOSTLESS",
  1968. .probe = fe_dai_probe,
  1969. },
  1970. {
  1971. .capture = {
  1972. .stream_name = "CPE Listen Audio capture",
  1973. .aif_name = "CPE_LSM_UL_HL",
  1974. .rates = SNDRV_PCM_RATE_8000_48000,
  1975. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  1976. SNDRV_PCM_FMTBIT_S24_LE),
  1977. .channels_min = 1,
  1978. .channels_max = 1,
  1979. .rate_min = 8000,
  1980. .rate_max = 48000,
  1981. },
  1982. .ops = &msm_fe_dai_ops,
  1983. .name = "CPE_LSM_NOHOST",
  1984. },
  1985. {
  1986. .playback = {
  1987. .stream_name = "VOLTE_STUB Playback",
  1988. .aif_name = "VOLTE_STUB_DL",
  1989. .rates = SNDRV_PCM_RATE_8000_48000,
  1990. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  1991. .channels_min = 1,
  1992. .channels_max = 2,
  1993. .rate_min = 8000,
  1994. .rate_max = 48000,
  1995. },
  1996. .capture = {
  1997. .stream_name = "VOLTE_STUB Capture",
  1998. .aif_name = "VOLTE_STUB_UL",
  1999. .rates = SNDRV_PCM_RATE_8000_48000,
  2000. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2001. .channels_min = 1,
  2002. .channels_max = 2,
  2003. .rate_min = 8000,
  2004. .rate_max = 48000,
  2005. },
  2006. .ops = &msm_fe_dai_ops,
  2007. .name = "VOLTE_STUB",
  2008. .probe = fe_dai_probe,
  2009. },
  2010. {
  2011. .playback = {
  2012. .stream_name = "VOICE2_STUB Playback",
  2013. .aif_name = "VOICE2_STUB_DL",
  2014. .rates = SNDRV_PCM_RATE_8000_48000,
  2015. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2016. .channels_min = 1,
  2017. .channels_max = 2,
  2018. .rate_min = 8000,
  2019. .rate_max = 48000,
  2020. },
  2021. .capture = {
  2022. .stream_name = "VOICE2_STUB Capture",
  2023. .aif_name = "VOICE2_STUB_UL",
  2024. .rates = SNDRV_PCM_RATE_8000_48000,
  2025. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2026. .channels_min = 1,
  2027. .channels_max = 2,
  2028. .rate_min = 8000,
  2029. .rate_max = 48000,
  2030. },
  2031. .ops = &msm_fe_dai_ops,
  2032. .name = "VOICE2_STUB",
  2033. .probe = fe_dai_probe,
  2034. },
  2035. {
  2036. .playback = {
  2037. .stream_name = "MultiMedia9 Playback",
  2038. .aif_name = "MM_DL9",
  2039. .rates = (SNDRV_PCM_RATE_8000_384000|
  2040. SNDRV_PCM_RATE_KNOT),
  2041. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2042. SNDRV_PCM_FMTBIT_S24_LE |
  2043. SNDRV_PCM_FMTBIT_S24_3LE),
  2044. .channels_min = 1,
  2045. .channels_max = 8,
  2046. .rate_min = 8000,
  2047. .rate_max = 384000,
  2048. },
  2049. .capture = {
  2050. .stream_name = "MultiMedia9 Capture",
  2051. .aif_name = "MM_UL9",
  2052. .rates = (SNDRV_PCM_RATE_8000_48000|
  2053. SNDRV_PCM_RATE_KNOT),
  2054. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2055. .channels_min = 1,
  2056. .channels_max = 8,
  2057. .rate_min = 8000,
  2058. .rate_max = 48000,
  2059. },
  2060. .ops = &msm_fe_Multimedia_dai_ops,
  2061. .name = "MultiMedia9",
  2062. .probe = fe_dai_probe,
  2063. },
  2064. {
  2065. .playback = {
  2066. .stream_name = "QCHAT Playback",
  2067. .aif_name = "QCHAT_DL",
  2068. .rates = SNDRV_PCM_RATE_8000_48000,
  2069. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2070. .channels_min = 1,
  2071. .channels_max = 2,
  2072. .rate_min = 8000,
  2073. .rate_max = 48000,
  2074. },
  2075. .capture = {
  2076. .stream_name = "QCHAT Capture",
  2077. .aif_name = "QCHAT_UL",
  2078. .rates = SNDRV_PCM_RATE_8000_48000,
  2079. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2080. .channels_min = 1,
  2081. .channels_max = 2,
  2082. .rate_min = 8000,
  2083. .rate_max = 48000,
  2084. },
  2085. .ops = &msm_fe_dai_ops,
  2086. .name = "QCHAT",
  2087. .probe = fe_dai_probe,
  2088. },
  2089. {
  2090. .capture = {
  2091. .stream_name = "Listen 1 Audio Service Capture",
  2092. .aif_name = "LSM1_UL_HL",
  2093. .rates = (SNDRV_PCM_RATE_16000 |
  2094. SNDRV_PCM_RATE_48000),
  2095. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2096. SNDRV_PCM_FMTBIT_S24_LE),
  2097. .channels_min = 1,
  2098. .channels_max = 4,
  2099. .rate_min = 16000,
  2100. .rate_max = 48000,
  2101. },
  2102. .ops = &msm_fe_dai_ops,
  2103. .name = "LSM1",
  2104. .probe = fe_dai_probe,
  2105. },
  2106. {
  2107. .capture = {
  2108. .stream_name = "Listen 2 Audio Service Capture",
  2109. .aif_name = "LSM2_UL_HL",
  2110. .rates = (SNDRV_PCM_RATE_16000 |
  2111. SNDRV_PCM_RATE_48000),
  2112. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2113. SNDRV_PCM_FMTBIT_S24_LE),
  2114. .channels_min = 1,
  2115. .channels_max = 4,
  2116. .rate_min = 16000,
  2117. .rate_max = 48000,
  2118. },
  2119. .ops = &msm_fe_dai_ops,
  2120. .name = "LSM2",
  2121. .probe = fe_dai_probe,
  2122. },
  2123. {
  2124. .capture = {
  2125. .stream_name = "Listen 3 Audio Service Capture",
  2126. .aif_name = "LSM3_UL_HL",
  2127. .rates = (SNDRV_PCM_RATE_16000 |
  2128. SNDRV_PCM_RATE_48000),
  2129. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2130. SNDRV_PCM_FMTBIT_S24_LE),
  2131. .channels_min = 1,
  2132. .channels_max = 4,
  2133. .rate_min = 16000,
  2134. .rate_max = 48000,
  2135. },
  2136. .ops = &msm_fe_dai_ops,
  2137. .name = "LSM3",
  2138. .probe = fe_dai_probe,
  2139. },
  2140. {
  2141. .capture = {
  2142. .stream_name = "Listen 4 Audio Service Capture",
  2143. .aif_name = "LSM4_UL_HL",
  2144. .rates = (SNDRV_PCM_RATE_16000 |
  2145. SNDRV_PCM_RATE_48000),
  2146. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2147. SNDRV_PCM_FMTBIT_S24_LE),
  2148. .channels_min = 1,
  2149. .channels_max = 4,
  2150. .rate_min = 16000,
  2151. .rate_max = 48000,
  2152. },
  2153. .ops = &msm_fe_dai_ops,
  2154. .name = "LSM4",
  2155. .probe = fe_dai_probe,
  2156. },
  2157. {
  2158. .capture = {
  2159. .stream_name = "Listen 5 Audio Service Capture",
  2160. .aif_name = "LSM5_UL_HL",
  2161. .rates = (SNDRV_PCM_RATE_16000 |
  2162. SNDRV_PCM_RATE_48000),
  2163. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2164. SNDRV_PCM_FMTBIT_S24_LE),
  2165. .channels_min = 1,
  2166. .channels_max = 4,
  2167. .rate_min = 16000,
  2168. .rate_max = 48000,
  2169. },
  2170. .ops = &msm_fe_dai_ops,
  2171. .name = "LSM5",
  2172. .probe = fe_dai_probe,
  2173. },
  2174. {
  2175. .capture = {
  2176. .stream_name = "Listen 6 Audio Service Capture",
  2177. .aif_name = "LSM6_UL_HL",
  2178. .rates = (SNDRV_PCM_RATE_16000 |
  2179. SNDRV_PCM_RATE_48000),
  2180. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2181. SNDRV_PCM_FMTBIT_S24_LE),
  2182. .channels_min = 1,
  2183. .channels_max = 4,
  2184. .rate_min = 16000,
  2185. .rate_max = 48000,
  2186. },
  2187. .ops = &msm_fe_dai_ops,
  2188. .name = "LSM6",
  2189. .probe = fe_dai_probe,
  2190. },
  2191. {
  2192. .capture = {
  2193. .stream_name = "Listen 7 Audio Service Capture",
  2194. .aif_name = "LSM7_UL_HL",
  2195. .rates = (SNDRV_PCM_RATE_16000 |
  2196. SNDRV_PCM_RATE_48000),
  2197. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2198. SNDRV_PCM_FMTBIT_S24_LE),
  2199. .channels_min = 1,
  2200. .channels_max = 4,
  2201. .rate_min = 16000,
  2202. .rate_max = 48000,
  2203. },
  2204. .ops = &msm_fe_dai_ops,
  2205. .name = "LSM7",
  2206. .probe = fe_dai_probe,
  2207. },
  2208. {
  2209. .capture = {
  2210. .stream_name = "Listen 8 Audio Service Capture",
  2211. .aif_name = "LSM8_UL_HL",
  2212. .rates = (SNDRV_PCM_RATE_16000 |
  2213. SNDRV_PCM_RATE_48000),
  2214. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2215. SNDRV_PCM_FMTBIT_S24_LE),
  2216. .channels_min = 1,
  2217. .channels_max = 4,
  2218. .rate_min = 16000,
  2219. .rate_max = 48000,
  2220. },
  2221. .ops = &msm_fe_dai_ops,
  2222. .name = "LSM8",
  2223. .probe = fe_dai_probe,
  2224. },
  2225. /* FE DAIs created for multiple instances of offload playback */
  2226. {
  2227. .playback = {
  2228. .stream_name = "MultiMedia10 Playback",
  2229. .aif_name = "MM_DL10",
  2230. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2231. SNDRV_PCM_RATE_KNOT),
  2232. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2233. SNDRV_PCM_FMTBIT_S24_LE |
  2234. SNDRV_PCM_FMTBIT_S24_3LE |
  2235. SNDRV_PCM_FMTBIT_S32_LE),
  2236. .channels_min = 1,
  2237. .channels_max = 8,
  2238. .rate_min = 8000,
  2239. .rate_max = 384000,
  2240. },
  2241. .capture = {
  2242. .stream_name = "MultiMedia10 Capture",
  2243. .aif_name = "MM_UL10",
  2244. .rates = (SNDRV_PCM_RATE_8000_48000 |
  2245. SNDRV_PCM_RATE_KNOT),
  2246. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2247. SNDRV_PCM_FMTBIT_S24_LE |
  2248. SNDRV_PCM_FMTBIT_S24_3LE),
  2249. .channels_min = 1,
  2250. .channels_max = 8,
  2251. .rate_min = 8000,
  2252. .rate_max = 48000,
  2253. },
  2254. .ops = &msm_fe_Multimedia_dai_ops,
  2255. .name = "MultiMedia10",
  2256. .probe = fe_dai_probe,
  2257. },
  2258. {
  2259. .playback = {
  2260. .stream_name = "MultiMedia11 Playback",
  2261. .aif_name = "MM_DL11",
  2262. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2263. SNDRV_PCM_RATE_KNOT),
  2264. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2265. SNDRV_PCM_FMTBIT_S24_LE |
  2266. SNDRV_PCM_FMTBIT_S24_3LE |
  2267. SNDRV_PCM_FMTBIT_S32_LE),
  2268. .channels_min = 1,
  2269. .channels_max = 8,
  2270. .rate_min = 8000,
  2271. .rate_max = 384000,
  2272. },
  2273. .ops = &msm_fe_Multimedia_dai_ops,
  2274. .compress_new = snd_soc_new_compress,
  2275. .name = "MultiMedia11",
  2276. .probe = fe_dai_probe,
  2277. },
  2278. {
  2279. .playback = {
  2280. .stream_name = "MultiMedia12 Playback",
  2281. .aif_name = "MM_DL12",
  2282. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2283. SNDRV_PCM_RATE_KNOT),
  2284. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2285. SNDRV_PCM_FMTBIT_S24_LE |
  2286. SNDRV_PCM_FMTBIT_S24_3LE |
  2287. SNDRV_PCM_FMTBIT_S32_LE),
  2288. .channels_min = 1,
  2289. .channels_max = 8,
  2290. .rate_min = 8000,
  2291. .rate_max = 384000,
  2292. },
  2293. .ops = &msm_fe_Multimedia_dai_ops,
  2294. .compress_new = snd_soc_new_compress,
  2295. .name = "MultiMedia12",
  2296. .probe = fe_dai_probe,
  2297. },
  2298. {
  2299. .playback = {
  2300. .stream_name = "MultiMedia13 Playback",
  2301. .aif_name = "MM_DL13",
  2302. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2303. SNDRV_PCM_RATE_KNOT),
  2304. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2305. SNDRV_PCM_FMTBIT_S24_LE |
  2306. SNDRV_PCM_FMTBIT_S24_3LE |
  2307. SNDRV_PCM_FMTBIT_S32_LE),
  2308. .channels_min = 1,
  2309. .channels_max = 8,
  2310. .rate_min = 8000,
  2311. .rate_max = 384000,
  2312. },
  2313. .ops = &msm_fe_Multimedia_dai_ops,
  2314. .compress_new = snd_soc_new_compress,
  2315. .name = "MultiMedia13",
  2316. .probe = fe_dai_probe,
  2317. },
  2318. {
  2319. .playback = {
  2320. .stream_name = "MultiMedia14 Playback",
  2321. .aif_name = "MM_DL14",
  2322. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2323. SNDRV_PCM_RATE_KNOT),
  2324. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2325. SNDRV_PCM_FMTBIT_S24_LE |
  2326. SNDRV_PCM_FMTBIT_S24_3LE |
  2327. SNDRV_PCM_FMTBIT_S32_LE),
  2328. .channels_min = 1,
  2329. .channels_max = 8,
  2330. .rate_min = 8000,
  2331. .rate_max = 384000,
  2332. },
  2333. .ops = &msm_fe_Multimedia_dai_ops,
  2334. .compress_new = snd_soc_new_compress,
  2335. .name = "MultiMedia14",
  2336. .probe = fe_dai_probe,
  2337. },
  2338. {
  2339. .playback = {
  2340. .stream_name = "MultiMedia15 Playback",
  2341. .aif_name = "MM_DL15",
  2342. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2343. SNDRV_PCM_RATE_KNOT),
  2344. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2345. SNDRV_PCM_FMTBIT_S24_LE |
  2346. SNDRV_PCM_FMTBIT_S24_3LE |
  2347. SNDRV_PCM_FMTBIT_S32_LE),
  2348. .channels_min = 1,
  2349. .channels_max = 8,
  2350. .rate_min = 8000,
  2351. .rate_max = 384000,
  2352. },
  2353. .ops = &msm_fe_Multimedia_dai_ops,
  2354. .compress_new = snd_soc_new_compress,
  2355. .name = "MultiMedia15",
  2356. .probe = fe_dai_probe,
  2357. },
  2358. {
  2359. .playback = {
  2360. .stream_name = "MultiMedia16 Playback",
  2361. .aif_name = "MM_DL16",
  2362. .rates = (SNDRV_PCM_RATE_8000_384000 |
  2363. SNDRV_PCM_RATE_KNOT),
  2364. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2365. SNDRV_PCM_FMTBIT_S24_LE |
  2366. SNDRV_PCM_FMTBIT_S24_3LE |
  2367. SNDRV_PCM_FMTBIT_S32_LE),
  2368. .channels_min = 1,
  2369. .channels_max = 8,
  2370. .rate_min = 8000,
  2371. .rate_max = 384000,
  2372. },
  2373. .capture = {
  2374. .stream_name = "MultiMedia16 Capture",
  2375. .aif_name = "MM_UL16",
  2376. .rates = (SNDRV_PCM_RATE_8000_48000|
  2377. SNDRV_PCM_RATE_KNOT),
  2378. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2379. SNDRV_PCM_FMTBIT_S24_LE |
  2380. SNDRV_PCM_FMTBIT_S24_3LE |
  2381. SNDRV_PCM_FMTBIT_S32_LE),
  2382. .channels_min = 1,
  2383. .channels_max = 8,
  2384. .rate_min = 8000,
  2385. .rate_max = 48000,
  2386. },
  2387. .ops = &msm_fe_Multimedia_dai_ops,
  2388. .name = "MultiMedia16",
  2389. .probe = fe_dai_probe,
  2390. },
  2391. {
  2392. .playback = {
  2393. .stream_name = "VoiceMMode1 Playback",
  2394. .aif_name = "VOICEMMODE1_DL",
  2395. .rates = SNDRV_PCM_RATE_8000_48000,
  2396. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2397. .channels_min = 1,
  2398. .channels_max = 2,
  2399. .rate_min = 8000,
  2400. .rate_max = 48000,
  2401. },
  2402. .capture = {
  2403. .stream_name = "VoiceMMode1 Capture",
  2404. .aif_name = "VOICEMMODE1_UL",
  2405. .rates = SNDRV_PCM_RATE_8000_48000,
  2406. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2407. .channels_min = 1,
  2408. .channels_max = 2,
  2409. .rate_min = 8000,
  2410. .rate_max = 48000,
  2411. },
  2412. .ops = &msm_fe_dai_ops,
  2413. .name = "VoiceMMode1",
  2414. .probe = fe_dai_probe,
  2415. },
  2416. {
  2417. .playback = {
  2418. .stream_name = "VoiceMMode2 Playback",
  2419. .aif_name = "VOICEMMODE2_DL",
  2420. .rates = SNDRV_PCM_RATE_8000_48000,
  2421. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2422. .channels_min = 1,
  2423. .channels_max = 2,
  2424. .rate_min = 8000,
  2425. .rate_max = 48000,
  2426. },
  2427. .capture = {
  2428. .stream_name = "VoiceMMode2 Capture",
  2429. .aif_name = "VOICEMMODE2_UL",
  2430. .rates = SNDRV_PCM_RATE_8000_48000,
  2431. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2432. .channels_min = 1,
  2433. .channels_max = 2,
  2434. .rate_min = 8000,
  2435. .rate_max = 48000,
  2436. },
  2437. .ops = &msm_fe_dai_ops,
  2438. .name = "VoiceMMode2",
  2439. .probe = fe_dai_probe,
  2440. },
  2441. {
  2442. .capture = {
  2443. .stream_name = "MultiMedia17 Capture",
  2444. .aif_name = "MM_UL17",
  2445. .rates = (SNDRV_PCM_RATE_8000_48000|
  2446. SNDRV_PCM_RATE_KNOT),
  2447. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2448. SNDRV_PCM_FMTBIT_S24_LE |
  2449. SNDRV_PCM_FMTBIT_S24_3LE),
  2450. .channels_min = 1,
  2451. .channels_max = 8,
  2452. .rate_min = 8000,
  2453. .rate_max = 48000,
  2454. },
  2455. .ops = &msm_fe_Multimedia_dai_ops,
  2456. .compress_new = snd_soc_new_compress,
  2457. .name = "MultiMedia17",
  2458. .probe = fe_dai_probe,
  2459. },
  2460. {
  2461. .capture = {
  2462. .stream_name = "MultiMedia18 Capture",
  2463. .aif_name = "MM_UL18",
  2464. .rates = (SNDRV_PCM_RATE_8000_48000|
  2465. SNDRV_PCM_RATE_KNOT),
  2466. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2467. SNDRV_PCM_FMTBIT_S24_LE |
  2468. SNDRV_PCM_FMTBIT_S24_3LE),
  2469. .channels_min = 1,
  2470. .channels_max = 8,
  2471. .rate_min = 8000,
  2472. .rate_max = 192000,
  2473. },
  2474. .ops = &msm_fe_Multimedia_dai_ops,
  2475. .compress_new = snd_soc_new_compress,
  2476. .name = "MultiMedia18",
  2477. .probe = fe_dai_probe,
  2478. },
  2479. {
  2480. .capture = {
  2481. .stream_name = "MultiMedia19 Capture",
  2482. .aif_name = "MM_UL19",
  2483. .rates = (SNDRV_PCM_RATE_8000_48000|
  2484. SNDRV_PCM_RATE_KNOT),
  2485. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2486. SNDRV_PCM_FMTBIT_S24_LE |
  2487. SNDRV_PCM_FMTBIT_S24_3LE),
  2488. .channels_min = 1,
  2489. .channels_max = 8,
  2490. .rate_min = 8000,
  2491. .rate_max = 48000,
  2492. },
  2493. .ops = &msm_fe_Multimedia_dai_ops,
  2494. .compress_new = snd_soc_new_compress,
  2495. .name = "MultiMedia19",
  2496. .probe = fe_dai_probe,
  2497. },
  2498. {
  2499. .playback = {
  2500. .stream_name = "MultiMedia20 Playback",
  2501. .aif_name = "MM_DL20",
  2502. .rates = (SNDRV_PCM_RATE_8000_384000|
  2503. SNDRV_PCM_RATE_KNOT),
  2504. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2505. SNDRV_PCM_FMTBIT_S24_LE |
  2506. SNDRV_PCM_FMTBIT_S24_3LE |
  2507. SNDRV_PCM_FMTBIT_S32_LE),
  2508. .channels_min = 1,
  2509. .channels_max = 8,
  2510. .rate_min = 8000,
  2511. .rate_max = 384000,
  2512. },
  2513. .capture = {
  2514. .stream_name = "MultiMedia20 Capture",
  2515. .aif_name = "MM_UL20",
  2516. .rates = (SNDRV_PCM_RATE_8000_48000|
  2517. SNDRV_PCM_RATE_KNOT),
  2518. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  2519. SNDRV_PCM_FMTBIT_S24_LE |
  2520. SNDRV_PCM_FMTBIT_S24_3LE |
  2521. SNDRV_PCM_FMTBIT_S32_LE),
  2522. .channels_min = 1,
  2523. .channels_max = 8,
  2524. .rate_min = 8000,
  2525. .rate_max = 48000,
  2526. },
  2527. .ops = &msm_fe_Multimedia_dai_ops,
  2528. .name = "MultiMedia20",
  2529. .probe = fe_dai_probe,
  2530. },
  2531. };
  2532. static int msm_fe_dai_dev_probe(struct platform_device *pdev)
  2533. {
  2534. dev_dbg(&pdev->dev, "%s: dev name %s\n", __func__,
  2535. dev_name(&pdev->dev));
  2536. return snd_soc_register_component(&pdev->dev, &msm_fe_dai_component,
  2537. msm_fe_dais, ARRAY_SIZE(msm_fe_dais));
  2538. }
  2539. static int msm_fe_dai_dev_remove(struct platform_device *pdev)
  2540. {
  2541. snd_soc_unregister_component(&pdev->dev);
  2542. return 0;
  2543. }
  2544. static const struct of_device_id msm_dai_fe_dt_match[] = {
  2545. {.compatible = "qcom,msm-dai-fe"},
  2546. {}
  2547. };
  2548. static struct platform_driver msm_fe_dai_driver = {
  2549. .probe = msm_fe_dai_dev_probe,
  2550. .remove = msm_fe_dai_dev_remove,
  2551. .driver = {
  2552. .name = "msm-dai-fe",
  2553. .owner = THIS_MODULE,
  2554. .of_match_table = msm_dai_fe_dt_match,
  2555. },
  2556. };
  2557. int __init msm_fe_dai_init(void)
  2558. {
  2559. return platform_driver_register(&msm_fe_dai_driver);
  2560. }
  2561. void msm_fe_dai_exit(void)
  2562. {
  2563. platform_driver_unregister(&msm_fe_dai_driver);
  2564. }
  2565. /* Module information */
  2566. MODULE_DESCRIPTION("MSM Frontend DAI driver");
  2567. MODULE_LICENSE("GPL v2");