davinci-mcasp.c 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864
  1. /*
  2. * ALSA SoC McASP Audio Layer for TI DAVINCI processor
  3. *
  4. * Multi-channel Audio Serial Port Driver
  5. *
  6. * Author: Nirmal Pandey <n-pandey@ti.com>,
  7. * Suresh Rajashekara <suresh.r@ti.com>
  8. * Steve Chen <schen@.mvista.com>
  9. *
  10. * Copyright: (C) 2009 MontaVista Software, Inc., <source@mvista.com>
  11. * Copyright: (C) 2009 Texas Instruments, India
  12. *
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License version 2 as
  15. * published by the Free Software Foundation.
  16. */
  17. #include <linux/init.h>
  18. #include <linux/module.h>
  19. #include <linux/device.h>
  20. #include <linux/slab.h>
  21. #include <linux/delay.h>
  22. #include <linux/io.h>
  23. #include <linux/clk.h>
  24. #include <linux/pm_runtime.h>
  25. #include <linux/of.h>
  26. #include <linux/of_platform.h>
  27. #include <linux/of_device.h>
  28. #include <linux/platform_data/davinci_asp.h>
  29. #include <linux/math64.h>
  30. #include <sound/asoundef.h>
  31. #include <sound/core.h>
  32. #include <sound/pcm.h>
  33. #include <sound/pcm_params.h>
  34. #include <sound/initval.h>
  35. #include <sound/soc.h>
  36. #include <sound/dmaengine_pcm.h>
  37. #include <sound/omap-pcm.h>
  38. #include "edma-pcm.h"
  39. #include "davinci-mcasp.h"
  40. #define MCASP_MAX_AFIFO_DEPTH 64
  41. static u32 context_regs[] = {
  42. DAVINCI_MCASP_TXFMCTL_REG,
  43. DAVINCI_MCASP_RXFMCTL_REG,
  44. DAVINCI_MCASP_TXFMT_REG,
  45. DAVINCI_MCASP_RXFMT_REG,
  46. DAVINCI_MCASP_ACLKXCTL_REG,
  47. DAVINCI_MCASP_ACLKRCTL_REG,
  48. DAVINCI_MCASP_AHCLKXCTL_REG,
  49. DAVINCI_MCASP_AHCLKRCTL_REG,
  50. DAVINCI_MCASP_PDIR_REG,
  51. DAVINCI_MCASP_RXMASK_REG,
  52. DAVINCI_MCASP_TXMASK_REG,
  53. DAVINCI_MCASP_RXTDM_REG,
  54. DAVINCI_MCASP_TXTDM_REG,
  55. };
  56. struct davinci_mcasp_context {
  57. u32 config_regs[ARRAY_SIZE(context_regs)];
  58. u32 afifo_regs[2]; /* for read/write fifo control registers */
  59. u32 *xrsr_regs; /* for serializer configuration */
  60. bool pm_state;
  61. };
  62. struct davinci_mcasp_ruledata {
  63. struct davinci_mcasp *mcasp;
  64. int serializers;
  65. };
  66. struct davinci_mcasp {
  67. struct snd_dmaengine_dai_dma_data dma_data[2];
  68. void __iomem *base;
  69. u32 fifo_base;
  70. struct device *dev;
  71. struct snd_pcm_substream *substreams[2];
  72. /* McASP specific data */
  73. int tdm_slots;
  74. u8 op_mode;
  75. u8 num_serializer;
  76. u8 *serial_dir;
  77. u8 version;
  78. u8 bclk_div;
  79. u16 bclk_lrclk_ratio;
  80. int streams;
  81. u32 irq_request[2];
  82. int dma_request[2];
  83. int sysclk_freq;
  84. bool bclk_master;
  85. /* McASP FIFO related */
  86. u8 txnumevt;
  87. u8 rxnumevt;
  88. bool dat_port;
  89. /* Used for comstraint setting on the second stream */
  90. u32 channels;
  91. #ifdef CONFIG_PM_SLEEP
  92. struct davinci_mcasp_context context;
  93. #endif
  94. struct davinci_mcasp_ruledata ruledata[2];
  95. struct snd_pcm_hw_constraint_list chconstr[2];
  96. };
  97. static inline void mcasp_set_bits(struct davinci_mcasp *mcasp, u32 offset,
  98. u32 val)
  99. {
  100. void __iomem *reg = mcasp->base + offset;
  101. __raw_writel(__raw_readl(reg) | val, reg);
  102. }
  103. static inline void mcasp_clr_bits(struct davinci_mcasp *mcasp, u32 offset,
  104. u32 val)
  105. {
  106. void __iomem *reg = mcasp->base + offset;
  107. __raw_writel((__raw_readl(reg) & ~(val)), reg);
  108. }
  109. static inline void mcasp_mod_bits(struct davinci_mcasp *mcasp, u32 offset,
  110. u32 val, u32 mask)
  111. {
  112. void __iomem *reg = mcasp->base + offset;
  113. __raw_writel((__raw_readl(reg) & ~mask) | val, reg);
  114. }
  115. static inline void mcasp_set_reg(struct davinci_mcasp *mcasp, u32 offset,
  116. u32 val)
  117. {
  118. __raw_writel(val, mcasp->base + offset);
  119. }
  120. static inline u32 mcasp_get_reg(struct davinci_mcasp *mcasp, u32 offset)
  121. {
  122. return (u32)__raw_readl(mcasp->base + offset);
  123. }
  124. static void mcasp_set_ctl_reg(struct davinci_mcasp *mcasp, u32 ctl_reg, u32 val)
  125. {
  126. int i = 0;
  127. mcasp_set_bits(mcasp, ctl_reg, val);
  128. /* programming GBLCTL needs to read back from GBLCTL and verfiy */
  129. /* loop count is to avoid the lock-up */
  130. for (i = 0; i < 1000; i++) {
  131. if ((mcasp_get_reg(mcasp, ctl_reg) & val) == val)
  132. break;
  133. }
  134. if (i == 1000 && ((mcasp_get_reg(mcasp, ctl_reg) & val) != val))
  135. printk(KERN_ERR "GBLCTL write error\n");
  136. }
  137. static bool mcasp_is_synchronous(struct davinci_mcasp *mcasp)
  138. {
  139. u32 rxfmctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
  140. u32 aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
  141. return !(aclkxctl & TX_ASYNC) && rxfmctl & AFSRE;
  142. }
  143. static void mcasp_start_rx(struct davinci_mcasp *mcasp)
  144. {
  145. if (mcasp->rxnumevt) { /* enable FIFO */
  146. u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
  147. mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
  148. mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
  149. }
  150. /* Start clocks */
  151. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXHCLKRST);
  152. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXCLKRST);
  153. /*
  154. * When ASYNC == 0 the transmit and receive sections operate
  155. * synchronously from the transmit clock and frame sync. We need to make
  156. * sure that the TX signlas are enabled when starting reception.
  157. */
  158. if (mcasp_is_synchronous(mcasp)) {
  159. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
  160. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
  161. }
  162. /* Activate serializer(s) */
  163. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSERCLR);
  164. /* Release RX state machine */
  165. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXSMRST);
  166. /* Release Frame Sync generator */
  167. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, RXFSRST);
  168. if (mcasp_is_synchronous(mcasp))
  169. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
  170. /* enable receive IRQs */
  171. mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
  172. mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
  173. }
  174. static void mcasp_start_tx(struct davinci_mcasp *mcasp)
  175. {
  176. u32 cnt;
  177. if (mcasp->txnumevt) { /* enable FIFO */
  178. u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
  179. mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
  180. mcasp_set_bits(mcasp, reg, FIFO_ENABLE);
  181. }
  182. /* Start clocks */
  183. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXHCLKRST);
  184. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXCLKRST);
  185. /* Activate serializer(s) */
  186. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSERCLR);
  187. /* wait for XDATA to be cleared */
  188. cnt = 0;
  189. while (!(mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG) &
  190. ~XRDATA) && (cnt < 100000))
  191. cnt++;
  192. /* Release TX state machine */
  193. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXSMRST);
  194. /* Release Frame Sync generator */
  195. mcasp_set_ctl_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, TXFSRST);
  196. /* enable transmit IRQs */
  197. mcasp_set_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
  198. mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
  199. }
  200. static void davinci_mcasp_start(struct davinci_mcasp *mcasp, int stream)
  201. {
  202. mcasp->streams++;
  203. if (stream == SNDRV_PCM_STREAM_PLAYBACK)
  204. mcasp_start_tx(mcasp);
  205. else
  206. mcasp_start_rx(mcasp);
  207. }
  208. static void mcasp_stop_rx(struct davinci_mcasp *mcasp)
  209. {
  210. /* disable IRQ sources */
  211. mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLR_REG,
  212. mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE]);
  213. /*
  214. * In synchronous mode stop the TX clocks if no other stream is
  215. * running
  216. */
  217. if (mcasp_is_synchronous(mcasp) && !mcasp->streams)
  218. mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, 0);
  219. mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLR_REG, 0);
  220. mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
  221. if (mcasp->rxnumevt) { /* disable FIFO */
  222. u32 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
  223. mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
  224. }
  225. }
  226. static void mcasp_stop_tx(struct davinci_mcasp *mcasp)
  227. {
  228. u32 val = 0;
  229. /* disable IRQ sources */
  230. mcasp_clr_bits(mcasp, DAVINCI_MCASP_EVTCTLX_REG,
  231. mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK]);
  232. /*
  233. * In synchronous mode keep TX clocks running if the capture stream is
  234. * still running.
  235. */
  236. if (mcasp_is_synchronous(mcasp) && mcasp->streams)
  237. val = TXHCLKRST | TXCLKRST | TXFSRST;
  238. mcasp_set_reg(mcasp, DAVINCI_MCASP_GBLCTLX_REG, val);
  239. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
  240. if (mcasp->txnumevt) { /* disable FIFO */
  241. u32 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
  242. mcasp_clr_bits(mcasp, reg, FIFO_ENABLE);
  243. }
  244. }
  245. static void davinci_mcasp_stop(struct davinci_mcasp *mcasp, int stream)
  246. {
  247. mcasp->streams--;
  248. if (stream == SNDRV_PCM_STREAM_PLAYBACK)
  249. mcasp_stop_tx(mcasp);
  250. else
  251. mcasp_stop_rx(mcasp);
  252. }
  253. static irqreturn_t davinci_mcasp_tx_irq_handler(int irq, void *data)
  254. {
  255. struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
  256. struct snd_pcm_substream *substream;
  257. u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK];
  258. u32 handled_mask = 0;
  259. u32 stat;
  260. stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG);
  261. if (stat & XUNDRN & irq_mask) {
  262. dev_warn(mcasp->dev, "Transmit buffer underflow\n");
  263. handled_mask |= XUNDRN;
  264. substream = mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK];
  265. if (substream) {
  266. snd_pcm_stream_lock_irq(substream);
  267. if (snd_pcm_running(substream))
  268. snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
  269. snd_pcm_stream_unlock_irq(substream);
  270. }
  271. }
  272. if (!handled_mask)
  273. dev_warn(mcasp->dev, "unhandled tx event. txstat: 0x%08x\n",
  274. stat);
  275. if (stat & XRERR)
  276. handled_mask |= XRERR;
  277. /* Ack the handled event only */
  278. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, handled_mask);
  279. return IRQ_RETVAL(handled_mask);
  280. }
  281. static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
  282. {
  283. struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
  284. struct snd_pcm_substream *substream;
  285. u32 irq_mask = mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE];
  286. u32 handled_mask = 0;
  287. u32 stat;
  288. stat = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG);
  289. if (stat & ROVRN & irq_mask) {
  290. dev_warn(mcasp->dev, "Receive buffer overflow\n");
  291. handled_mask |= ROVRN;
  292. substream = mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE];
  293. if (substream) {
  294. snd_pcm_stream_lock_irq(substream);
  295. if (snd_pcm_running(substream))
  296. snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
  297. snd_pcm_stream_unlock_irq(substream);
  298. }
  299. }
  300. if (!handled_mask)
  301. dev_warn(mcasp->dev, "unhandled rx event. rxstat: 0x%08x\n",
  302. stat);
  303. if (stat & XRERR)
  304. handled_mask |= XRERR;
  305. /* Ack the handled event only */
  306. mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, handled_mask);
  307. return IRQ_RETVAL(handled_mask);
  308. }
  309. static irqreturn_t davinci_mcasp_common_irq_handler(int irq, void *data)
  310. {
  311. struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
  312. irqreturn_t ret = IRQ_NONE;
  313. if (mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK])
  314. ret = davinci_mcasp_tx_irq_handler(irq, data);
  315. if (mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE])
  316. ret |= davinci_mcasp_rx_irq_handler(irq, data);
  317. return ret;
  318. }
  319. static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
  320. unsigned int fmt)
  321. {
  322. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
  323. int ret = 0;
  324. u32 data_delay;
  325. bool fs_pol_rising;
  326. bool inv_fs = false;
  327. pm_runtime_get_sync(mcasp->dev);
  328. switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
  329. case SND_SOC_DAIFMT_DSP_A:
  330. mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
  331. mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
  332. /* 1st data bit occur one ACLK cycle after the frame sync */
  333. data_delay = 1;
  334. break;
  335. case SND_SOC_DAIFMT_DSP_B:
  336. case SND_SOC_DAIFMT_AC97:
  337. mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
  338. mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
  339. /* No delay after FS */
  340. data_delay = 0;
  341. break;
  342. case SND_SOC_DAIFMT_I2S:
  343. /* configure a full-word SYNC pulse (LRCLK) */
  344. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
  345. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
  346. /* 1st data bit occur one ACLK cycle after the frame sync */
  347. data_delay = 1;
  348. /* FS need to be inverted */
  349. inv_fs = true;
  350. break;
  351. case SND_SOC_DAIFMT_LEFT_J:
  352. /* configure a full-word SYNC pulse (LRCLK) */
  353. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
  354. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
  355. /* No delay after FS */
  356. data_delay = 0;
  357. break;
  358. default:
  359. ret = -EINVAL;
  360. goto out;
  361. }
  362. mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(data_delay),
  363. FSXDLY(3));
  364. mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(data_delay),
  365. FSRDLY(3));
  366. switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
  367. case SND_SOC_DAIFMT_CBS_CFS:
  368. /* codec is clock and frame slave */
  369. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
  370. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
  371. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
  372. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
  373. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
  374. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
  375. mcasp->bclk_master = 1;
  376. break;
  377. case SND_SOC_DAIFMT_CBS_CFM:
  378. /* codec is clock slave and frame master */
  379. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
  380. mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
  381. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
  382. mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
  383. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
  384. mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
  385. mcasp->bclk_master = 1;
  386. break;
  387. case SND_SOC_DAIFMT_CBM_CFS:
  388. /* codec is clock master and frame slave */
  389. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
  390. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
  391. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
  392. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
  393. mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, ACLKX | ACLKR);
  394. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AFSX | AFSR);
  395. mcasp->bclk_master = 0;
  396. break;
  397. case SND_SOC_DAIFMT_CBM_CFM:
  398. /* codec is clock and frame master */
  399. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE);
  400. mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE);
  401. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
  402. mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
  403. mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG,
  404. ACLKX | AHCLKX | AFSX | ACLKR | AHCLKR | AFSR);
  405. mcasp->bclk_master = 0;
  406. break;
  407. default:
  408. ret = -EINVAL;
  409. goto out;
  410. }
  411. switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
  412. case SND_SOC_DAIFMT_IB_NF:
  413. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
  414. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
  415. fs_pol_rising = true;
  416. break;
  417. case SND_SOC_DAIFMT_NB_IF:
  418. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
  419. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
  420. fs_pol_rising = false;
  421. break;
  422. case SND_SOC_DAIFMT_IB_IF:
  423. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
  424. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
  425. fs_pol_rising = false;
  426. break;
  427. case SND_SOC_DAIFMT_NB_NF:
  428. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
  429. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
  430. fs_pol_rising = true;
  431. break;
  432. default:
  433. ret = -EINVAL;
  434. goto out;
  435. }
  436. if (inv_fs)
  437. fs_pol_rising = !fs_pol_rising;
  438. if (fs_pol_rising) {
  439. mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
  440. mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
  441. } else {
  442. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
  443. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
  444. }
  445. out:
  446. pm_runtime_put(mcasp->dev);
  447. return ret;
  448. }
  449. static int __davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
  450. int div, bool explicit)
  451. {
  452. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
  453. pm_runtime_get_sync(mcasp->dev);
  454. switch (div_id) {
  455. case 0: /* MCLK divider */
  456. mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
  457. AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
  458. mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
  459. AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
  460. break;
  461. case 1: /* BCLK divider */
  462. mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
  463. ACLKXDIV(div - 1), ACLKXDIV_MASK);
  464. mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
  465. ACLKRDIV(div - 1), ACLKRDIV_MASK);
  466. if (explicit)
  467. mcasp->bclk_div = div;
  468. break;
  469. case 2: /* BCLK/LRCLK ratio */
  470. mcasp->bclk_lrclk_ratio = div;
  471. break;
  472. default:
  473. return -EINVAL;
  474. }
  475. pm_runtime_put(mcasp->dev);
  476. return 0;
  477. }
  478. static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
  479. int div)
  480. {
  481. return __davinci_mcasp_set_clkdiv(dai, div_id, div, 1);
  482. }
  483. static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
  484. unsigned int freq, int dir)
  485. {
  486. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
  487. pm_runtime_get_sync(mcasp->dev);
  488. if (dir == SND_SOC_CLOCK_OUT) {
  489. mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
  490. mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
  491. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
  492. } else {
  493. mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
  494. mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
  495. mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
  496. }
  497. mcasp->sysclk_freq = freq;
  498. pm_runtime_put(mcasp->dev);
  499. return 0;
  500. }
  501. static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
  502. int word_length)
  503. {
  504. u32 fmt;
  505. u32 tx_rotate = (word_length / 4) & 0x7;
  506. u32 mask = (1ULL << word_length) - 1;
  507. /*
  508. * For captured data we should not rotate, inversion and masking is
  509. * enoguh to get the data to the right position:
  510. * Format data from bus after reverse (XRBUF)
  511. * S16_LE: |LSB|MSB|xxx|xxx| |xxx|xxx|MSB|LSB|
  512. * S24_3LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
  513. * S24_LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
  514. * S32_LE: |LSB|DAT|DAT|MSB| |MSB|DAT|DAT|LSB|
  515. */
  516. u32 rx_rotate = 0;
  517. /*
  518. * if s BCLK-to-LRCLK ratio has been configured via the set_clkdiv()
  519. * callback, take it into account here. That allows us to for example
  520. * send 32 bits per channel to the codec, while only 16 of them carry
  521. * audio payload.
  522. * The clock ratio is given for a full period of data (for I2S format
  523. * both left and right channels), so it has to be divided by number of
  524. * tdm-slots (for I2S - divided by 2).
  525. */
  526. if (mcasp->bclk_lrclk_ratio) {
  527. u32 slot_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;
  528. /*
  529. * When we have more bclk then it is needed for the data, we
  530. * need to use the rotation to move the received samples to have
  531. * correct alignment.
  532. */
  533. rx_rotate = (slot_length - word_length) / 4;
  534. word_length = slot_length;
  535. }
  536. /* mapping of the XSSZ bit-field as described in the datasheet */
  537. fmt = (word_length >> 1) - 1;
  538. if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
  539. mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
  540. RXSSZ(0x0F));
  541. mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
  542. TXSSZ(0x0F));
  543. mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
  544. TXROT(7));
  545. mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
  546. RXROT(7));
  547. mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
  548. }
  549. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
  550. return 0;
  551. }
  552. static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
  553. int period_words, int channels)
  554. {
  555. struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
  556. int i;
  557. u8 tx_ser = 0;
  558. u8 rx_ser = 0;
  559. u8 slots = mcasp->tdm_slots;
  560. u8 max_active_serializers = (channels + slots - 1) / slots;
  561. int active_serializers, numevt;
  562. u32 reg;
  563. /* Default configuration */
  564. if (mcasp->version < MCASP_VERSION_3)
  565. mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
  566. /* All PINS as McASP */
  567. mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
  568. if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
  569. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
  570. mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
  571. } else {
  572. mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
  573. mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
  574. }
  575. for (i = 0; i < mcasp->num_serializer; i++) {
  576. mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
  577. mcasp->serial_dir[i]);
  578. if (mcasp->serial_dir[i] == TX_MODE &&
  579. tx_ser < max_active_serializers) {
  580. mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
  581. mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
  582. DISMOD_LOW, DISMOD_MASK);
  583. tx_ser++;
  584. } else if (mcasp->serial_dir[i] == RX_MODE &&
  585. rx_ser < max_active_serializers) {
  586. mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
  587. rx_ser++;
  588. } else {
  589. mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
  590. SRMOD_INACTIVE, SRMOD_MASK);
  591. }
  592. }
  593. if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
  594. active_serializers = tx_ser;
  595. numevt = mcasp->txnumevt;
  596. reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
  597. } else {
  598. active_serializers = rx_ser;
  599. numevt = mcasp->rxnumevt;
  600. reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
  601. }
  602. if (active_serializers < max_active_serializers) {
  603. dev_warn(mcasp->dev, "stream has more channels (%d) than are "
  604. "enabled in mcasp (%d)\n", channels,
  605. active_serializers * slots);
  606. return -EINVAL;
  607. }
  608. /* AFIFO is not in use */
  609. if (!numevt) {
  610. /* Configure the burst size for platform drivers */
  611. if (active_serializers > 1) {
  612. /*
  613. * If more than one serializers are in use we have one
  614. * DMA request to provide data for all serializers.
  615. * For example if three serializers are enabled the DMA
  616. * need to transfer three words per DMA request.
  617. */
  618. dma_data->maxburst = active_serializers;
  619. } else {
  620. dma_data->maxburst = 0;
  621. }
  622. return 0;
  623. }
  624. if (period_words % active_serializers) {
  625. dev_err(mcasp->dev, "Invalid combination of period words and "
  626. "active serializers: %d, %d\n", period_words,
  627. active_serializers);
  628. return -EINVAL;
  629. }
  630. /*
  631. * Calculate the optimal AFIFO depth for platform side:
  632. * The number of words for numevt need to be in steps of active
  633. * serializers.
  634. */
  635. numevt = (numevt / active_serializers) * active_serializers;
  636. while (period_words % numevt && numevt > 0)
  637. numevt -= active_serializers;
  638. if (numevt <= 0)
  639. numevt = active_serializers;
  640. mcasp_mod_bits(mcasp, reg, active_serializers, NUMDMA_MASK);
  641. mcasp_mod_bits(mcasp, reg, NUMEVT(numevt), NUMEVT_MASK);
  642. /* Configure the burst size for platform drivers */
  643. if (numevt == 1)
  644. numevt = 0;
  645. dma_data->maxburst = numevt;
  646. return 0;
  647. }
  648. static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream,
  649. int channels)
  650. {
  651. int i, active_slots;
  652. int total_slots;
  653. int active_serializers;
  654. u32 mask = 0;
  655. u32 busel = 0;
  656. total_slots = mcasp->tdm_slots;
  657. /*
  658. * If more than one serializer is needed, then use them with
  659. * their specified tdm_slots count. Otherwise, one serializer
  660. * can cope with the transaction using as many slots as channels
  661. * in the stream, requires channels symmetry
  662. */
  663. active_serializers = (channels + total_slots - 1) / total_slots;
  664. if (active_serializers == 1)
  665. active_slots = channels;
  666. else
  667. active_slots = total_slots;
  668. for (i = 0; i < active_slots; i++)
  669. mask |= (1 << i);
  670. mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
  671. if (!mcasp->dat_port)
  672. busel = TXSEL;
  673. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
  674. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
  675. mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
  676. FSXMOD(total_slots), FSXMOD(0x1FF));
  677. mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
  678. mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
  679. mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
  680. FSRMOD(total_slots), FSRMOD(0x1FF));
  681. return 0;
  682. }
  683. /* S/PDIF */
  684. static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp,
  685. unsigned int rate)
  686. {
  687. u32 cs_value = 0;
  688. u8 *cs_bytes = (u8*) &cs_value;
  689. /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
  690. and LSB first */
  691. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
  692. /* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
  693. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
  694. /* Set the TX tdm : for all the slots */
  695. mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
  696. /* Set the TX clock controls : div = 1 and internal */
  697. mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
  698. mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
  699. /* Only 44100 and 48000 are valid, both have the same setting */
  700. mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
  701. /* Enable the DIT */
  702. mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
  703. /* Set S/PDIF channel status bits */
  704. cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
  705. cs_bytes[1] = IEC958_AES1_CON_PCM_CODER;
  706. switch (rate) {
  707. case 22050:
  708. cs_bytes[3] |= IEC958_AES3_CON_FS_22050;
  709. break;
  710. case 24000:
  711. cs_bytes[3] |= IEC958_AES3_CON_FS_24000;
  712. break;
  713. case 32000:
  714. cs_bytes[3] |= IEC958_AES3_CON_FS_32000;
  715. break;
  716. case 44100:
  717. cs_bytes[3] |= IEC958_AES3_CON_FS_44100;
  718. break;
  719. case 48000:
  720. cs_bytes[3] |= IEC958_AES3_CON_FS_48000;
  721. break;
  722. case 88200:
  723. cs_bytes[3] |= IEC958_AES3_CON_FS_88200;
  724. break;
  725. case 96000:
  726. cs_bytes[3] |= IEC958_AES3_CON_FS_96000;
  727. break;
  728. case 176400:
  729. cs_bytes[3] |= IEC958_AES3_CON_FS_176400;
  730. break;
  731. case 192000:
  732. cs_bytes[3] |= IEC958_AES3_CON_FS_192000;
  733. break;
  734. default:
  735. printk(KERN_WARNING "unsupported sampling rate: %d\n", rate);
  736. return -EINVAL;
  737. }
  738. mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value);
  739. mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value);
  740. return 0;
  741. }
  742. static int davinci_mcasp_calc_clk_div(struct davinci_mcasp *mcasp,
  743. unsigned int bclk_freq,
  744. int *error_ppm)
  745. {
  746. int div = mcasp->sysclk_freq / bclk_freq;
  747. int rem = mcasp->sysclk_freq % bclk_freq;
  748. if (rem != 0) {
  749. if (div == 0 ||
  750. ((mcasp->sysclk_freq / div) - bclk_freq) >
  751. (bclk_freq - (mcasp->sysclk_freq / (div+1)))) {
  752. div++;
  753. rem = rem - bclk_freq;
  754. }
  755. }
  756. if (error_ppm)
  757. *error_ppm =
  758. (div*1000000 + (int)div64_long(1000000LL*rem,
  759. (int)bclk_freq))
  760. /div - 1000000;
  761. return div;
  762. }
  763. static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
  764. struct snd_pcm_hw_params *params,
  765. struct snd_soc_dai *cpu_dai)
  766. {
  767. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
  768. int word_length;
  769. int channels = params_channels(params);
  770. int period_size = params_period_size(params);
  771. int ret;
  772. /*
  773. * If mcasp is BCLK master, and a BCLK divider was not provided by
  774. * the machine driver, we need to calculate the ratio.
  775. */
  776. if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
  777. int slots = mcasp->tdm_slots;
  778. int rate = params_rate(params);
  779. int sbits = params_width(params);
  780. int ppm, div;
  781. div = davinci_mcasp_calc_clk_div(mcasp, rate*sbits*slots,
  782. &ppm);
  783. if (ppm)
  784. dev_info(mcasp->dev, "Sample-rate is off by %d PPM\n",
  785. ppm);
  786. __davinci_mcasp_set_clkdiv(cpu_dai, 1, div, 0);
  787. }
  788. ret = mcasp_common_hw_param(mcasp, substream->stream,
  789. period_size * channels, channels);
  790. if (ret)
  791. return ret;
  792. if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
  793. ret = mcasp_dit_hw_param(mcasp, params_rate(params));
  794. else
  795. ret = mcasp_i2s_hw_param(mcasp, substream->stream,
  796. channels);
  797. if (ret)
  798. return ret;
  799. switch (params_format(params)) {
  800. case SNDRV_PCM_FORMAT_U8:
  801. case SNDRV_PCM_FORMAT_S8:
  802. word_length = 8;
  803. break;
  804. case SNDRV_PCM_FORMAT_U16_LE:
  805. case SNDRV_PCM_FORMAT_S16_LE:
  806. word_length = 16;
  807. break;
  808. case SNDRV_PCM_FORMAT_U24_3LE:
  809. case SNDRV_PCM_FORMAT_S24_3LE:
  810. word_length = 24;
  811. break;
  812. case SNDRV_PCM_FORMAT_U24_LE:
  813. case SNDRV_PCM_FORMAT_S24_LE:
  814. word_length = 24;
  815. break;
  816. case SNDRV_PCM_FORMAT_U32_LE:
  817. case SNDRV_PCM_FORMAT_S32_LE:
  818. word_length = 32;
  819. break;
  820. default:
  821. printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
  822. return -EINVAL;
  823. }
  824. davinci_config_channel_size(mcasp, word_length);
  825. if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
  826. mcasp->channels = channels;
  827. return 0;
  828. }
  829. static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
  830. int cmd, struct snd_soc_dai *cpu_dai)
  831. {
  832. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
  833. int ret = 0;
  834. switch (cmd) {
  835. case SNDRV_PCM_TRIGGER_RESUME:
  836. case SNDRV_PCM_TRIGGER_START:
  837. case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  838. davinci_mcasp_start(mcasp, substream->stream);
  839. break;
  840. case SNDRV_PCM_TRIGGER_SUSPEND:
  841. case SNDRV_PCM_TRIGGER_STOP:
  842. case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  843. davinci_mcasp_stop(mcasp, substream->stream);
  844. break;
  845. default:
  846. ret = -EINVAL;
  847. }
  848. return ret;
  849. }
  850. static const unsigned int davinci_mcasp_dai_rates[] = {
  851. 8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000,
  852. 88200, 96000, 176400, 192000,
  853. };
  854. #define DAVINCI_MAX_RATE_ERROR_PPM 1000
  855. static int davinci_mcasp_hw_rule_rate(struct snd_pcm_hw_params *params,
  856. struct snd_pcm_hw_rule *rule)
  857. {
  858. struct davinci_mcasp_ruledata *rd = rule->private;
  859. struct snd_interval *ri =
  860. hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
  861. int sbits = params_width(params);
  862. int slots = rd->mcasp->tdm_slots;
  863. struct snd_interval range;
  864. int i;
  865. snd_interval_any(&range);
  866. range.empty = 1;
  867. for (i = 0; i < ARRAY_SIZE(davinci_mcasp_dai_rates); i++) {
  868. if (snd_interval_test(ri, davinci_mcasp_dai_rates[i])) {
  869. uint bclk_freq = sbits*slots*
  870. davinci_mcasp_dai_rates[i];
  871. int ppm;
  872. davinci_mcasp_calc_clk_div(rd->mcasp, bclk_freq, &ppm);
  873. if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
  874. if (range.empty) {
  875. range.min = davinci_mcasp_dai_rates[i];
  876. range.empty = 0;
  877. }
  878. range.max = davinci_mcasp_dai_rates[i];
  879. }
  880. }
  881. }
  882. dev_dbg(rd->mcasp->dev,
  883. "Frequencies %d-%d -> %d-%d for %d sbits and %d tdm slots\n",
  884. ri->min, ri->max, range.min, range.max, sbits, slots);
  885. return snd_interval_refine(hw_param_interval(params, rule->var),
  886. &range);
  887. }
  888. static int davinci_mcasp_hw_rule_format(struct snd_pcm_hw_params *params,
  889. struct snd_pcm_hw_rule *rule)
  890. {
  891. struct davinci_mcasp_ruledata *rd = rule->private;
  892. struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
  893. struct snd_mask nfmt;
  894. int rate = params_rate(params);
  895. int slots = rd->mcasp->tdm_slots;
  896. int i, count = 0;
  897. snd_mask_none(&nfmt);
  898. for (i = 0; i < SNDRV_PCM_FORMAT_LAST; i++) {
  899. if (snd_mask_test(fmt, i)) {
  900. uint bclk_freq = snd_pcm_format_width(i)*slots*rate;
  901. int ppm;
  902. davinci_mcasp_calc_clk_div(rd->mcasp, bclk_freq, &ppm);
  903. if (abs(ppm) < DAVINCI_MAX_RATE_ERROR_PPM) {
  904. snd_mask_set(&nfmt, i);
  905. count++;
  906. }
  907. }
  908. }
  909. dev_dbg(rd->mcasp->dev,
  910. "%d possible sample format for %d Hz and %d tdm slots\n",
  911. count, rate, slots);
  912. return snd_mask_refine(fmt, &nfmt);
  913. }
  914. static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
  915. struct snd_soc_dai *cpu_dai)
  916. {
  917. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
  918. struct davinci_mcasp_ruledata *ruledata =
  919. &mcasp->ruledata[substream->stream];
  920. u32 max_channels = 0;
  921. int i, dir;
  922. mcasp->substreams[substream->stream] = substream;
  923. if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
  924. return 0;
  925. /*
  926. * Limit the maximum allowed channels for the first stream:
  927. * number of serializers for the direction * tdm slots per serializer
  928. */
  929. if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
  930. dir = TX_MODE;
  931. else
  932. dir = RX_MODE;
  933. for (i = 0; i < mcasp->num_serializer; i++) {
  934. if (mcasp->serial_dir[i] == dir)
  935. max_channels++;
  936. }
  937. ruledata->serializers = max_channels;
  938. max_channels *= mcasp->tdm_slots;
  939. /*
  940. * If the already active stream has less channels than the calculated
  941. * limnit based on the seirializers * tdm_slots, we need to use that as
  942. * a constraint for the second stream.
  943. * Otherwise (first stream or less allowed channels) we use the
  944. * calculated constraint.
  945. */
  946. if (mcasp->channels && mcasp->channels < max_channels)
  947. max_channels = mcasp->channels;
  948. snd_pcm_hw_constraint_minmax(substream->runtime,
  949. SNDRV_PCM_HW_PARAM_CHANNELS,
  950. 2, max_channels);
  951. if (mcasp->chconstr[substream->stream].count)
  952. snd_pcm_hw_constraint_list(substream->runtime,
  953. 0, SNDRV_PCM_HW_PARAM_CHANNELS,
  954. &mcasp->chconstr[substream->stream]);
  955. /*
  956. * If we rely on implicit BCLK divider setting we should
  957. * set constraints based on what we can provide.
  958. */
  959. if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
  960. int ret;
  961. ruledata->mcasp = mcasp;
  962. ret = snd_pcm_hw_rule_add(substream->runtime, 0,
  963. SNDRV_PCM_HW_PARAM_RATE,
  964. davinci_mcasp_hw_rule_rate,
  965. ruledata,
  966. SNDRV_PCM_HW_PARAM_FORMAT, -1);
  967. if (ret)
  968. return ret;
  969. ret = snd_pcm_hw_rule_add(substream->runtime, 0,
  970. SNDRV_PCM_HW_PARAM_FORMAT,
  971. davinci_mcasp_hw_rule_format,
  972. ruledata,
  973. SNDRV_PCM_HW_PARAM_RATE, -1);
  974. if (ret)
  975. return ret;
  976. }
  977. return 0;
  978. }
  979. static void davinci_mcasp_shutdown(struct snd_pcm_substream *substream,
  980. struct snd_soc_dai *cpu_dai)
  981. {
  982. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
  983. mcasp->substreams[substream->stream] = NULL;
  984. if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
  985. return;
  986. if (!cpu_dai->active)
  987. mcasp->channels = 0;
  988. }
  989. static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
  990. .startup = davinci_mcasp_startup,
  991. .shutdown = davinci_mcasp_shutdown,
  992. .trigger = davinci_mcasp_trigger,
  993. .hw_params = davinci_mcasp_hw_params,
  994. .set_fmt = davinci_mcasp_set_dai_fmt,
  995. .set_clkdiv = davinci_mcasp_set_clkdiv,
  996. .set_sysclk = davinci_mcasp_set_sysclk,
  997. };
  998. static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
  999. {
  1000. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
  1001. dai->playback_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
  1002. dai->capture_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
  1003. return 0;
  1004. }
  1005. #ifdef CONFIG_PM_SLEEP
  1006. static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
  1007. {
  1008. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
  1009. struct davinci_mcasp_context *context = &mcasp->context;
  1010. u32 reg;
  1011. int i;
  1012. context->pm_state = pm_runtime_active(mcasp->dev);
  1013. if (!context->pm_state)
  1014. pm_runtime_get_sync(mcasp->dev);
  1015. for (i = 0; i < ARRAY_SIZE(context_regs); i++)
  1016. context->config_regs[i] = mcasp_get_reg(mcasp, context_regs[i]);
  1017. if (mcasp->txnumevt) {
  1018. reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
  1019. context->afifo_regs[0] = mcasp_get_reg(mcasp, reg);
  1020. }
  1021. if (mcasp->rxnumevt) {
  1022. reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
  1023. context->afifo_regs[1] = mcasp_get_reg(mcasp, reg);
  1024. }
  1025. for (i = 0; i < mcasp->num_serializer; i++)
  1026. context->xrsr_regs[i] = mcasp_get_reg(mcasp,
  1027. DAVINCI_MCASP_XRSRCTL_REG(i));
  1028. pm_runtime_put_sync(mcasp->dev);
  1029. return 0;
  1030. }
  1031. static int davinci_mcasp_resume(struct snd_soc_dai *dai)
  1032. {
  1033. struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
  1034. struct davinci_mcasp_context *context = &mcasp->context;
  1035. u32 reg;
  1036. int i;
  1037. pm_runtime_get_sync(mcasp->dev);
  1038. for (i = 0; i < ARRAY_SIZE(context_regs); i++)
  1039. mcasp_set_reg(mcasp, context_regs[i], context->config_regs[i]);
  1040. if (mcasp->txnumevt) {
  1041. reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
  1042. mcasp_set_reg(mcasp, reg, context->afifo_regs[0]);
  1043. }
  1044. if (mcasp->rxnumevt) {
  1045. reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
  1046. mcasp_set_reg(mcasp, reg, context->afifo_regs[1]);
  1047. }
  1048. for (i = 0; i < mcasp->num_serializer; i++)
  1049. mcasp_set_reg(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
  1050. context->xrsr_regs[i]);
  1051. if (!context->pm_state)
  1052. pm_runtime_put_sync(mcasp->dev);
  1053. return 0;
  1054. }
  1055. #else
  1056. #define davinci_mcasp_suspend NULL
  1057. #define davinci_mcasp_resume NULL
  1058. #endif
  1059. #define DAVINCI_MCASP_RATES SNDRV_PCM_RATE_8000_192000
  1060. #define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
  1061. SNDRV_PCM_FMTBIT_U8 | \
  1062. SNDRV_PCM_FMTBIT_S16_LE | \
  1063. SNDRV_PCM_FMTBIT_U16_LE | \
  1064. SNDRV_PCM_FMTBIT_S24_LE | \
  1065. SNDRV_PCM_FMTBIT_U24_LE | \
  1066. SNDRV_PCM_FMTBIT_S24_3LE | \
  1067. SNDRV_PCM_FMTBIT_U24_3LE | \
  1068. SNDRV_PCM_FMTBIT_S32_LE | \
  1069. SNDRV_PCM_FMTBIT_U32_LE)
  1070. static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
  1071. {
  1072. .name = "davinci-mcasp.0",
  1073. .probe = davinci_mcasp_dai_probe,
  1074. .suspend = davinci_mcasp_suspend,
  1075. .resume = davinci_mcasp_resume,
  1076. .playback = {
  1077. .channels_min = 2,
  1078. .channels_max = 32 * 16,
  1079. .rates = DAVINCI_MCASP_RATES,
  1080. .formats = DAVINCI_MCASP_PCM_FMTS,
  1081. },
  1082. .capture = {
  1083. .channels_min = 2,
  1084. .channels_max = 32 * 16,
  1085. .rates = DAVINCI_MCASP_RATES,
  1086. .formats = DAVINCI_MCASP_PCM_FMTS,
  1087. },
  1088. .ops = &davinci_mcasp_dai_ops,
  1089. .symmetric_samplebits = 1,
  1090. .symmetric_rates = 1,
  1091. },
  1092. {
  1093. .name = "davinci-mcasp.1",
  1094. .probe = davinci_mcasp_dai_probe,
  1095. .playback = {
  1096. .channels_min = 1,
  1097. .channels_max = 384,
  1098. .rates = DAVINCI_MCASP_RATES,
  1099. .formats = DAVINCI_MCASP_PCM_FMTS,
  1100. },
  1101. .ops = &davinci_mcasp_dai_ops,
  1102. },
  1103. };
  1104. static const struct snd_soc_component_driver davinci_mcasp_component = {
  1105. .name = "davinci-mcasp",
  1106. };
  1107. /* Some HW specific values and defaults. The rest is filled in from DT. */
  1108. static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
  1109. .tx_dma_offset = 0x400,
  1110. .rx_dma_offset = 0x400,
  1111. .version = MCASP_VERSION_1,
  1112. };
  1113. static struct davinci_mcasp_pdata da830_mcasp_pdata = {
  1114. .tx_dma_offset = 0x2000,
  1115. .rx_dma_offset = 0x2000,
  1116. .version = MCASP_VERSION_2,
  1117. };
  1118. static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
  1119. .tx_dma_offset = 0,
  1120. .rx_dma_offset = 0,
  1121. .version = MCASP_VERSION_3,
  1122. };
  1123. static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
  1124. .tx_dma_offset = 0x200,
  1125. .rx_dma_offset = 0x284,
  1126. .version = MCASP_VERSION_4,
  1127. };
  1128. static const struct of_device_id mcasp_dt_ids[] = {
  1129. {
  1130. .compatible = "ti,dm646x-mcasp-audio",
  1131. .data = &dm646x_mcasp_pdata,
  1132. },
  1133. {
  1134. .compatible = "ti,da830-mcasp-audio",
  1135. .data = &da830_mcasp_pdata,
  1136. },
  1137. {
  1138. .compatible = "ti,am33xx-mcasp-audio",
  1139. .data = &am33xx_mcasp_pdata,
  1140. },
  1141. {
  1142. .compatible = "ti,dra7-mcasp-audio",
  1143. .data = &dra7_mcasp_pdata,
  1144. },
  1145. { /* sentinel */ }
  1146. };
  1147. MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
  1148. static int mcasp_reparent_fck(struct platform_device *pdev)
  1149. {
  1150. struct device_node *node = pdev->dev.of_node;
  1151. struct clk *gfclk, *parent_clk;
  1152. const char *parent_name;
  1153. int ret;
  1154. if (!node)
  1155. return 0;
  1156. parent_name = of_get_property(node, "fck_parent", NULL);
  1157. if (!parent_name)
  1158. return 0;
  1159. gfclk = clk_get(&pdev->dev, "fck");
  1160. if (IS_ERR(gfclk)) {
  1161. dev_err(&pdev->dev, "failed to get fck\n");
  1162. return PTR_ERR(gfclk);
  1163. }
  1164. parent_clk = clk_get(NULL, parent_name);
  1165. if (IS_ERR(parent_clk)) {
  1166. dev_err(&pdev->dev, "failed to get parent clock\n");
  1167. ret = PTR_ERR(parent_clk);
  1168. goto err1;
  1169. }
  1170. ret = clk_set_parent(gfclk, parent_clk);
  1171. if (ret) {
  1172. dev_err(&pdev->dev, "failed to reparent fck\n");
  1173. goto err2;
  1174. }
  1175. err2:
  1176. clk_put(parent_clk);
  1177. err1:
  1178. clk_put(gfclk);
  1179. return ret;
  1180. }
  1181. static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
  1182. struct platform_device *pdev)
  1183. {
  1184. struct device_node *np = pdev->dev.of_node;
  1185. struct davinci_mcasp_pdata *pdata = NULL;
  1186. const struct of_device_id *match =
  1187. of_match_device(mcasp_dt_ids, &pdev->dev);
  1188. struct of_phandle_args dma_spec;
  1189. const u32 *of_serial_dir32;
  1190. u32 val;
  1191. int i, ret = 0;
  1192. if (pdev->dev.platform_data) {
  1193. pdata = pdev->dev.platform_data;
  1194. return pdata;
  1195. } else if (match) {
  1196. pdata = (struct davinci_mcasp_pdata*) match->data;
  1197. } else {
  1198. /* control shouldn't reach here. something is wrong */
  1199. ret = -EINVAL;
  1200. goto nodata;
  1201. }
  1202. ret = of_property_read_u32(np, "op-mode", &val);
  1203. if (ret >= 0)
  1204. pdata->op_mode = val;
  1205. ret = of_property_read_u32(np, "tdm-slots", &val);
  1206. if (ret >= 0) {
  1207. if (val < 2 || val > 32) {
  1208. dev_err(&pdev->dev,
  1209. "tdm-slots must be in rage [2-32]\n");
  1210. ret = -EINVAL;
  1211. goto nodata;
  1212. }
  1213. pdata->tdm_slots = val;
  1214. }
  1215. of_serial_dir32 = of_get_property(np, "serial-dir", &val);
  1216. val /= sizeof(u32);
  1217. if (of_serial_dir32) {
  1218. u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
  1219. (sizeof(*of_serial_dir) * val),
  1220. GFP_KERNEL);
  1221. if (!of_serial_dir) {
  1222. ret = -ENOMEM;
  1223. goto nodata;
  1224. }
  1225. for (i = 0; i < val; i++)
  1226. of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
  1227. pdata->num_serializer = val;
  1228. pdata->serial_dir = of_serial_dir;
  1229. }
  1230. ret = of_property_match_string(np, "dma-names", "tx");
  1231. if (ret < 0)
  1232. goto nodata;
  1233. ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
  1234. &dma_spec);
  1235. if (ret < 0)
  1236. goto nodata;
  1237. pdata->tx_dma_channel = dma_spec.args[0];
  1238. /* RX is not valid in DIT mode */
  1239. if (pdata->op_mode != DAVINCI_MCASP_DIT_MODE) {
  1240. ret = of_property_match_string(np, "dma-names", "rx");
  1241. if (ret < 0)
  1242. goto nodata;
  1243. ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
  1244. &dma_spec);
  1245. if (ret < 0)
  1246. goto nodata;
  1247. pdata->rx_dma_channel = dma_spec.args[0];
  1248. }
  1249. ret = of_property_read_u32(np, "tx-num-evt", &val);
  1250. if (ret >= 0)
  1251. pdata->txnumevt = val;
  1252. ret = of_property_read_u32(np, "rx-num-evt", &val);
  1253. if (ret >= 0)
  1254. pdata->rxnumevt = val;
  1255. ret = of_property_read_u32(np, "sram-size-playback", &val);
  1256. if (ret >= 0)
  1257. pdata->sram_size_playback = val;
  1258. ret = of_property_read_u32(np, "sram-size-capture", &val);
  1259. if (ret >= 0)
  1260. pdata->sram_size_capture = val;
  1261. return pdata;
  1262. nodata:
  1263. if (ret < 0) {
  1264. dev_err(&pdev->dev, "Error populating platform data, err %d\n",
  1265. ret);
  1266. pdata = NULL;
  1267. }
  1268. return pdata;
  1269. }
  1270. /* All serializers must have equal number of channels */
  1271. static int davinci_mcasp_ch_constraint(struct davinci_mcasp *mcasp,
  1272. struct snd_pcm_hw_constraint_list *cl,
  1273. int serializers)
  1274. {
  1275. unsigned int *list;
  1276. int i, count = 0;
  1277. if (serializers <= 1)
  1278. return 0;
  1279. list = devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
  1280. (mcasp->tdm_slots + serializers - 2),
  1281. GFP_KERNEL);
  1282. if (!list)
  1283. return -ENOMEM;
  1284. for (i = 2; i <= mcasp->tdm_slots; i++)
  1285. list[count++] = i;
  1286. for (i = 2; i <= serializers; i++)
  1287. list[count++] = i*mcasp->tdm_slots;
  1288. cl->count = count;
  1289. cl->list = list;
  1290. return 0;
  1291. }
  1292. static int davinci_mcasp_init_ch_constraints(struct davinci_mcasp *mcasp)
  1293. {
  1294. int rx_serializers = 0, tx_serializers = 0, ret, i;
  1295. for (i = 0; i < mcasp->num_serializer; i++)
  1296. if (mcasp->serial_dir[i] == TX_MODE)
  1297. tx_serializers++;
  1298. else if (mcasp->serial_dir[i] == RX_MODE)
  1299. rx_serializers++;
  1300. ret = davinci_mcasp_ch_constraint(mcasp, &mcasp->chconstr[
  1301. SNDRV_PCM_STREAM_PLAYBACK],
  1302. tx_serializers);
  1303. if (ret)
  1304. return ret;
  1305. ret = davinci_mcasp_ch_constraint(mcasp, &mcasp->chconstr[
  1306. SNDRV_PCM_STREAM_CAPTURE],
  1307. rx_serializers);
  1308. return ret;
  1309. }
  1310. enum {
  1311. PCM_EDMA,
  1312. PCM_SDMA,
  1313. };
  1314. static const char *sdma_prefix = "ti,omap";
  1315. static int davinci_mcasp_get_dma_type(struct davinci_mcasp *mcasp)
  1316. {
  1317. struct dma_chan *chan;
  1318. const char *tmp;
  1319. int ret = PCM_EDMA;
  1320. if (!mcasp->dev->of_node)
  1321. return PCM_EDMA;
  1322. tmp = mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK].filter_data;
  1323. chan = dma_request_slave_channel_reason(mcasp->dev, tmp);
  1324. if (IS_ERR(chan)) {
  1325. if (PTR_ERR(chan) != -EPROBE_DEFER)
  1326. dev_err(mcasp->dev,
  1327. "Can't verify DMA configuration (%ld)\n",
  1328. PTR_ERR(chan));
  1329. return PTR_ERR(chan);
  1330. }
  1331. BUG_ON(!chan->device || !chan->device->dev);
  1332. if (chan->device->dev->of_node)
  1333. ret = of_property_read_string(chan->device->dev->of_node,
  1334. "compatible", &tmp);
  1335. else
  1336. dev_dbg(mcasp->dev, "DMA controller has no of-node\n");
  1337. dma_release_channel(chan);
  1338. if (ret)
  1339. return ret;
  1340. dev_dbg(mcasp->dev, "DMA controller compatible = \"%s\"\n", tmp);
  1341. if (!strncmp(tmp, sdma_prefix, strlen(sdma_prefix)))
  1342. return PCM_SDMA;
  1343. return PCM_EDMA;
  1344. }
  1345. static int davinci_mcasp_probe(struct platform_device *pdev)
  1346. {
  1347. struct snd_dmaengine_dai_dma_data *dma_data;
  1348. struct resource *mem, *res, *dat;
  1349. struct davinci_mcasp_pdata *pdata;
  1350. struct davinci_mcasp *mcasp;
  1351. char *irq_name;
  1352. int *dma;
  1353. int irq;
  1354. int ret;
  1355. if (!pdev->dev.platform_data && !pdev->dev.of_node) {
  1356. dev_err(&pdev->dev, "No platform data supplied\n");
  1357. return -EINVAL;
  1358. }
  1359. mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
  1360. GFP_KERNEL);
  1361. if (!mcasp)
  1362. return -ENOMEM;
  1363. pdata = davinci_mcasp_set_pdata_from_of(pdev);
  1364. if (!pdata) {
  1365. dev_err(&pdev->dev, "no platform data\n");
  1366. return -EINVAL;
  1367. }
  1368. mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
  1369. if (!mem) {
  1370. dev_warn(mcasp->dev,
  1371. "\"mpu\" mem resource not found, using index 0\n");
  1372. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1373. if (!mem) {
  1374. dev_err(&pdev->dev, "no mem resource?\n");
  1375. return -ENODEV;
  1376. }
  1377. }
  1378. mcasp->base = devm_ioremap_resource(&pdev->dev, mem);
  1379. if (IS_ERR(mcasp->base))
  1380. return PTR_ERR(mcasp->base);
  1381. pm_runtime_enable(&pdev->dev);
  1382. mcasp->op_mode = pdata->op_mode;
  1383. /* sanity check for tdm slots parameter */
  1384. if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE) {
  1385. if (pdata->tdm_slots < 2) {
  1386. dev_err(&pdev->dev, "invalid tdm slots: %d\n",
  1387. pdata->tdm_slots);
  1388. mcasp->tdm_slots = 2;
  1389. } else if (pdata->tdm_slots > 32) {
  1390. dev_err(&pdev->dev, "invalid tdm slots: %d\n",
  1391. pdata->tdm_slots);
  1392. mcasp->tdm_slots = 32;
  1393. } else {
  1394. mcasp->tdm_slots = pdata->tdm_slots;
  1395. }
  1396. }
  1397. mcasp->num_serializer = pdata->num_serializer;
  1398. #ifdef CONFIG_PM_SLEEP
  1399. mcasp->context.xrsr_regs = devm_kzalloc(&pdev->dev,
  1400. sizeof(u32) * mcasp->num_serializer,
  1401. GFP_KERNEL);
  1402. #endif
  1403. mcasp->serial_dir = pdata->serial_dir;
  1404. mcasp->version = pdata->version;
  1405. mcasp->txnumevt = pdata->txnumevt;
  1406. mcasp->rxnumevt = pdata->rxnumevt;
  1407. mcasp->dev = &pdev->dev;
  1408. irq = platform_get_irq_byname(pdev, "common");
  1409. if (irq >= 0) {
  1410. irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common",
  1411. dev_name(&pdev->dev));
  1412. ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
  1413. davinci_mcasp_common_irq_handler,
  1414. IRQF_ONESHOT | IRQF_SHARED,
  1415. irq_name, mcasp);
  1416. if (ret) {
  1417. dev_err(&pdev->dev, "common IRQ request failed\n");
  1418. goto err;
  1419. }
  1420. mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
  1421. mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
  1422. }
  1423. irq = platform_get_irq_byname(pdev, "rx");
  1424. if (irq >= 0) {
  1425. irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx",
  1426. dev_name(&pdev->dev));
  1427. ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
  1428. davinci_mcasp_rx_irq_handler,
  1429. IRQF_ONESHOT, irq_name, mcasp);
  1430. if (ret) {
  1431. dev_err(&pdev->dev, "RX IRQ request failed\n");
  1432. goto err;
  1433. }
  1434. mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
  1435. }
  1436. irq = platform_get_irq_byname(pdev, "tx");
  1437. if (irq >= 0) {
  1438. irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx",
  1439. dev_name(&pdev->dev));
  1440. ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
  1441. davinci_mcasp_tx_irq_handler,
  1442. IRQF_ONESHOT, irq_name, mcasp);
  1443. if (ret) {
  1444. dev_err(&pdev->dev, "TX IRQ request failed\n");
  1445. goto err;
  1446. }
  1447. mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
  1448. }
  1449. dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
  1450. if (dat)
  1451. mcasp->dat_port = true;
  1452. dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
  1453. if (dat)
  1454. dma_data->addr = dat->start;
  1455. else
  1456. dma_data->addr = mem->start + pdata->tx_dma_offset;
  1457. dma = &mcasp->dma_request[SNDRV_PCM_STREAM_PLAYBACK];
  1458. res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
  1459. if (res)
  1460. *dma = res->start;
  1461. else
  1462. *dma = pdata->tx_dma_channel;
  1463. /* dmaengine filter data for DT and non-DT boot */
  1464. if (pdev->dev.of_node)
  1465. dma_data->filter_data = "tx";
  1466. else
  1467. dma_data->filter_data = dma;
  1468. /* RX is not valid in DIT mode */
  1469. if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
  1470. dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
  1471. if (dat)
  1472. dma_data->addr = dat->start;
  1473. else
  1474. dma_data->addr = mem->start + pdata->rx_dma_offset;
  1475. dma = &mcasp->dma_request[SNDRV_PCM_STREAM_CAPTURE];
  1476. res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
  1477. if (res)
  1478. *dma = res->start;
  1479. else
  1480. *dma = pdata->rx_dma_channel;
  1481. /* dmaengine filter data for DT and non-DT boot */
  1482. if (pdev->dev.of_node)
  1483. dma_data->filter_data = "rx";
  1484. else
  1485. dma_data->filter_data = dma;
  1486. }
  1487. if (mcasp->version < MCASP_VERSION_3) {
  1488. mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
  1489. /* dma_params->dma_addr is pointing to the data port address */
  1490. mcasp->dat_port = true;
  1491. } else {
  1492. mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
  1493. }
  1494. ret = davinci_mcasp_init_ch_constraints(mcasp);
  1495. if (ret)
  1496. goto err;
  1497. dev_set_drvdata(&pdev->dev, mcasp);
  1498. mcasp_reparent_fck(pdev);
  1499. ret = devm_snd_soc_register_component(&pdev->dev,
  1500. &davinci_mcasp_component,
  1501. &davinci_mcasp_dai[pdata->op_mode], 1);
  1502. if (ret != 0)
  1503. goto err;
  1504. ret = davinci_mcasp_get_dma_type(mcasp);
  1505. switch (ret) {
  1506. case PCM_EDMA:
  1507. #if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
  1508. (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
  1509. IS_MODULE(CONFIG_SND_EDMA_SOC))
  1510. ret = edma_pcm_platform_register(&pdev->dev);
  1511. #else
  1512. dev_err(&pdev->dev, "Missing SND_EDMA_SOC\n");
  1513. ret = -EINVAL;
  1514. goto err;
  1515. #endif
  1516. break;
  1517. case PCM_SDMA:
  1518. #if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
  1519. (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
  1520. IS_MODULE(CONFIG_SND_OMAP_SOC))
  1521. ret = omap_pcm_platform_register(&pdev->dev);
  1522. #else
  1523. dev_err(&pdev->dev, "Missing SND_SDMA_SOC\n");
  1524. ret = -EINVAL;
  1525. goto err;
  1526. #endif
  1527. break;
  1528. default:
  1529. dev_err(&pdev->dev, "No DMA controller found (%d)\n", ret);
  1530. case -EPROBE_DEFER:
  1531. goto err;
  1532. break;
  1533. }
  1534. if (ret) {
  1535. dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
  1536. goto err;
  1537. }
  1538. return 0;
  1539. err:
  1540. pm_runtime_disable(&pdev->dev);
  1541. return ret;
  1542. }
  1543. static int davinci_mcasp_remove(struct platform_device *pdev)
  1544. {
  1545. pm_runtime_disable(&pdev->dev);
  1546. return 0;
  1547. }
  1548. static struct platform_driver davinci_mcasp_driver = {
  1549. .probe = davinci_mcasp_probe,
  1550. .remove = davinci_mcasp_remove,
  1551. .driver = {
  1552. .name = "davinci-mcasp",
  1553. .of_match_table = mcasp_dt_ids,
  1554. },
  1555. };
  1556. module_platform_driver(davinci_mcasp_driver);
  1557. MODULE_AUTHOR("Steve Chen");
  1558. MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
  1559. MODULE_LICENSE("GPL");