fsl_spdif.c 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382
  1. // SPDX-License-Identifier: GPL-2.0
  2. //
  3. // Freescale S/PDIF ALSA SoC Digital Audio Interface (DAI) driver
  4. //
  5. // Copyright (C) 2013 Freescale Semiconductor, Inc.
  6. //
  7. // Based on stmp3xxx_spdif_dai.c
  8. // Vladimir Barinov <vbarinov@embeddedalley.com>
  9. // Copyright 2008 SigmaTel, Inc
  10. // Copyright 2008 Embedded Alley Solutions, Inc
  11. #include <linux/bitrev.h>
  12. #include <linux/clk.h>
  13. #include <linux/module.h>
  14. #include <linux/of_address.h>
  15. #include <linux/of_device.h>
  16. #include <linux/of_irq.h>
  17. #include <linux/regmap.h>
  18. #include <sound/asoundef.h>
  19. #include <sound/dmaengine_pcm.h>
  20. #include <sound/soc.h>
  21. #include "fsl_spdif.h"
  22. #include "imx-pcm.h"
  23. #define FSL_SPDIF_TXFIFO_WML 0x8
  24. #define FSL_SPDIF_RXFIFO_WML 0x8
  25. #define INTR_FOR_PLAYBACK (INT_TXFIFO_RESYNC)
  26. #define INTR_FOR_CAPTURE (INT_SYM_ERR | INT_BIT_ERR | INT_URX_FUL |\
  27. INT_URX_OV | INT_QRX_FUL | INT_QRX_OV |\
  28. INT_UQ_SYNC | INT_UQ_ERR | INT_RXFIFO_RESYNC |\
  29. INT_LOSS_LOCK | INT_DPLL_LOCKED)
  30. #define SIE_INTR_FOR(tx) (tx ? INTR_FOR_PLAYBACK : INTR_FOR_CAPTURE)
  31. /* Index list for the values that has if (DPLL Locked) condition */
  32. static u8 srpc_dpll_locked[] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0xa, 0xb };
  33. #define SRPC_NODPLL_START1 0x5
  34. #define SRPC_NODPLL_START2 0xc
  35. #define DEFAULT_RXCLK_SRC 1
  36. /*
  37. * SPDIF control structure
  38. * Defines channel status, subcode and Q sub
  39. */
  40. struct spdif_mixer_control {
  41. /* spinlock to access control data */
  42. spinlock_t ctl_lock;
  43. /* IEC958 channel tx status bit */
  44. unsigned char ch_status[4];
  45. /* User bits */
  46. unsigned char subcode[2 * SPDIF_UBITS_SIZE];
  47. /* Q subcode part of user bits */
  48. unsigned char qsub[2 * SPDIF_QSUB_SIZE];
  49. /* Buffer offset for U/Q */
  50. u32 upos;
  51. u32 qpos;
  52. /* Ready buffer index of the two buffers */
  53. u32 ready_buf;
  54. };
  55. /**
  56. * fsl_spdif_priv: Freescale SPDIF private data
  57. *
  58. * @fsl_spdif_control: SPDIF control data
  59. * @cpu_dai_drv: cpu dai driver
  60. * @pdev: platform device pointer
  61. * @regmap: regmap handler
  62. * @dpll_locked: dpll lock flag
  63. * @txrate: the best rates for playback
  64. * @txclk_df: STC_TXCLK_DF dividers value for playback
  65. * @sysclk_df: STC_SYSCLK_DF dividers value for playback
  66. * @txclk_src: STC_TXCLK_SRC values for playback
  67. * @rxclk_src: SRPC_CLKSRC_SEL values for capture
  68. * @txclk: tx clock sources for playback
  69. * @rxclk: rx clock sources for capture
  70. * @coreclk: core clock for register access via DMA
  71. * @sysclk: system clock for rx clock rate measurement
  72. * @spbaclk: SPBA clock (optional, depending on SoC design)
  73. * @dma_params_tx: DMA parameters for transmit channel
  74. * @dma_params_rx: DMA parameters for receive channel
  75. */
  76. struct fsl_spdif_priv {
  77. struct spdif_mixer_control fsl_spdif_control;
  78. struct snd_soc_dai_driver cpu_dai_drv;
  79. struct platform_device *pdev;
  80. struct regmap *regmap;
  81. bool dpll_locked;
  82. u32 txrate[SPDIF_TXRATE_MAX];
  83. u8 txclk_df[SPDIF_TXRATE_MAX];
  84. u8 sysclk_df[SPDIF_TXRATE_MAX];
  85. u8 txclk_src[SPDIF_TXRATE_MAX];
  86. u8 rxclk_src;
  87. struct clk *txclk[SPDIF_TXRATE_MAX];
  88. struct clk *rxclk;
  89. struct clk *coreclk;
  90. struct clk *sysclk;
  91. struct clk *spbaclk;
  92. struct snd_dmaengine_dai_dma_data dma_params_tx;
  93. struct snd_dmaengine_dai_dma_data dma_params_rx;
  94. /* regcache for SRPC */
  95. u32 regcache_srpc;
  96. };
  97. /* DPLL locked and lock loss interrupt handler */
  98. static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv)
  99. {
  100. struct regmap *regmap = spdif_priv->regmap;
  101. struct platform_device *pdev = spdif_priv->pdev;
  102. u32 locked;
  103. regmap_read(regmap, REG_SPDIF_SRPC, &locked);
  104. locked &= SRPC_DPLL_LOCKED;
  105. dev_dbg(&pdev->dev, "isr: Rx dpll %s \n",
  106. locked ? "locked" : "loss lock");
  107. spdif_priv->dpll_locked = locked ? true : false;
  108. }
  109. /* Receiver found illegal symbol interrupt handler */
  110. static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv)
  111. {
  112. struct regmap *regmap = spdif_priv->regmap;
  113. struct platform_device *pdev = spdif_priv->pdev;
  114. dev_dbg(&pdev->dev, "isr: receiver found illegal symbol\n");
  115. /* Clear illegal symbol if DPLL unlocked since no audio stream */
  116. if (!spdif_priv->dpll_locked)
  117. regmap_update_bits(regmap, REG_SPDIF_SIE, INT_SYM_ERR, 0);
  118. }
  119. /* U/Q Channel receive register full */
  120. static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name)
  121. {
  122. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  123. struct regmap *regmap = spdif_priv->regmap;
  124. struct platform_device *pdev = spdif_priv->pdev;
  125. u32 *pos, size, val, reg;
  126. switch (name) {
  127. case 'U':
  128. pos = &ctrl->upos;
  129. size = SPDIF_UBITS_SIZE;
  130. reg = REG_SPDIF_SRU;
  131. break;
  132. case 'Q':
  133. pos = &ctrl->qpos;
  134. size = SPDIF_QSUB_SIZE;
  135. reg = REG_SPDIF_SRQ;
  136. break;
  137. default:
  138. dev_err(&pdev->dev, "unsupported channel name\n");
  139. return;
  140. }
  141. dev_dbg(&pdev->dev, "isr: %c Channel receive register full\n", name);
  142. if (*pos >= size * 2) {
  143. *pos = 0;
  144. } else if (unlikely((*pos % size) + 3 > size)) {
  145. dev_err(&pdev->dev, "User bit receive buffer overflow\n");
  146. return;
  147. }
  148. regmap_read(regmap, reg, &val);
  149. ctrl->subcode[*pos++] = val >> 16;
  150. ctrl->subcode[*pos++] = val >> 8;
  151. ctrl->subcode[*pos++] = val;
  152. }
  153. /* U/Q Channel sync found */
  154. static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv)
  155. {
  156. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  157. struct platform_device *pdev = spdif_priv->pdev;
  158. dev_dbg(&pdev->dev, "isr: U/Q Channel sync found\n");
  159. /* U/Q buffer reset */
  160. if (ctrl->qpos == 0)
  161. return;
  162. /* Set ready to this buffer */
  163. ctrl->ready_buf = (ctrl->qpos - 1) / SPDIF_QSUB_SIZE + 1;
  164. }
  165. /* U/Q Channel framing error */
  166. static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv)
  167. {
  168. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  169. struct regmap *regmap = spdif_priv->regmap;
  170. struct platform_device *pdev = spdif_priv->pdev;
  171. u32 val;
  172. dev_dbg(&pdev->dev, "isr: U/Q Channel framing error\n");
  173. /* Read U/Q data to clear the irq and do buffer reset */
  174. regmap_read(regmap, REG_SPDIF_SRU, &val);
  175. regmap_read(regmap, REG_SPDIF_SRQ, &val);
  176. /* Drop this U/Q buffer */
  177. ctrl->ready_buf = 0;
  178. ctrl->upos = 0;
  179. ctrl->qpos = 0;
  180. }
  181. /* Get spdif interrupt status and clear the interrupt */
  182. static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv)
  183. {
  184. struct regmap *regmap = spdif_priv->regmap;
  185. u32 val, val2;
  186. regmap_read(regmap, REG_SPDIF_SIS, &val);
  187. regmap_read(regmap, REG_SPDIF_SIE, &val2);
  188. regmap_write(regmap, REG_SPDIF_SIC, val & val2);
  189. return val;
  190. }
  191. static irqreturn_t spdif_isr(int irq, void *devid)
  192. {
  193. struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid;
  194. struct platform_device *pdev = spdif_priv->pdev;
  195. u32 sis;
  196. sis = spdif_intr_status_clear(spdif_priv);
  197. if (sis & INT_DPLL_LOCKED)
  198. spdif_irq_dpll_lock(spdif_priv);
  199. if (sis & INT_TXFIFO_UNOV)
  200. dev_dbg(&pdev->dev, "isr: Tx FIFO under/overrun\n");
  201. if (sis & INT_TXFIFO_RESYNC)
  202. dev_dbg(&pdev->dev, "isr: Tx FIFO resync\n");
  203. if (sis & INT_CNEW)
  204. dev_dbg(&pdev->dev, "isr: cstatus new\n");
  205. if (sis & INT_VAL_NOGOOD)
  206. dev_dbg(&pdev->dev, "isr: validity flag no good\n");
  207. if (sis & INT_SYM_ERR)
  208. spdif_irq_sym_error(spdif_priv);
  209. if (sis & INT_BIT_ERR)
  210. dev_dbg(&pdev->dev, "isr: receiver found parity bit error\n");
  211. if (sis & INT_URX_FUL)
  212. spdif_irq_uqrx_full(spdif_priv, 'U');
  213. if (sis & INT_URX_OV)
  214. dev_dbg(&pdev->dev, "isr: U Channel receive register overrun\n");
  215. if (sis & INT_QRX_FUL)
  216. spdif_irq_uqrx_full(spdif_priv, 'Q');
  217. if (sis & INT_QRX_OV)
  218. dev_dbg(&pdev->dev, "isr: Q Channel receive register overrun\n");
  219. if (sis & INT_UQ_SYNC)
  220. spdif_irq_uq_sync(spdif_priv);
  221. if (sis & INT_UQ_ERR)
  222. spdif_irq_uq_err(spdif_priv);
  223. if (sis & INT_RXFIFO_UNOV)
  224. dev_dbg(&pdev->dev, "isr: Rx FIFO under/overrun\n");
  225. if (sis & INT_RXFIFO_RESYNC)
  226. dev_dbg(&pdev->dev, "isr: Rx FIFO resync\n");
  227. if (sis & INT_LOSS_LOCK)
  228. spdif_irq_dpll_lock(spdif_priv);
  229. /* FIXME: Write Tx FIFO to clear TxEm */
  230. if (sis & INT_TX_EM)
  231. dev_dbg(&pdev->dev, "isr: Tx FIFO empty\n");
  232. /* FIXME: Read Rx FIFO to clear RxFIFOFul */
  233. if (sis & INT_RXFIFO_FUL)
  234. dev_dbg(&pdev->dev, "isr: Rx FIFO full\n");
  235. return IRQ_HANDLED;
  236. }
  237. static int spdif_softreset(struct fsl_spdif_priv *spdif_priv)
  238. {
  239. struct regmap *regmap = spdif_priv->regmap;
  240. u32 val, cycle = 1000;
  241. regcache_cache_bypass(regmap, true);
  242. regmap_write(regmap, REG_SPDIF_SCR, SCR_SOFT_RESET);
  243. /*
  244. * RESET bit would be cleared after finishing its reset procedure,
  245. * which typically lasts 8 cycles. 1000 cycles will keep it safe.
  246. */
  247. do {
  248. regmap_read(regmap, REG_SPDIF_SCR, &val);
  249. } while ((val & SCR_SOFT_RESET) && cycle--);
  250. regcache_cache_bypass(regmap, false);
  251. regcache_mark_dirty(regmap);
  252. regcache_sync(regmap);
  253. if (cycle)
  254. return 0;
  255. else
  256. return -EBUSY;
  257. }
  258. static void spdif_set_cstatus(struct spdif_mixer_control *ctrl,
  259. u8 mask, u8 cstatus)
  260. {
  261. ctrl->ch_status[3] &= ~mask;
  262. ctrl->ch_status[3] |= cstatus & mask;
  263. }
  264. static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv)
  265. {
  266. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  267. struct regmap *regmap = spdif_priv->regmap;
  268. struct platform_device *pdev = spdif_priv->pdev;
  269. u32 ch_status;
  270. ch_status = (bitrev8(ctrl->ch_status[0]) << 16) |
  271. (bitrev8(ctrl->ch_status[1]) << 8) |
  272. bitrev8(ctrl->ch_status[2]);
  273. regmap_write(regmap, REG_SPDIF_STCSCH, ch_status);
  274. dev_dbg(&pdev->dev, "STCSCH: 0x%06x\n", ch_status);
  275. ch_status = bitrev8(ctrl->ch_status[3]) << 16;
  276. regmap_write(regmap, REG_SPDIF_STCSCL, ch_status);
  277. dev_dbg(&pdev->dev, "STCSCL: 0x%06x\n", ch_status);
  278. }
  279. /* Set SPDIF PhaseConfig register for rx clock */
  280. static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv,
  281. enum spdif_gainsel gainsel, int dpll_locked)
  282. {
  283. struct regmap *regmap = spdif_priv->regmap;
  284. u8 clksrc = spdif_priv->rxclk_src;
  285. if (clksrc >= SRPC_CLKSRC_MAX || gainsel >= GAINSEL_MULTI_MAX)
  286. return -EINVAL;
  287. regmap_update_bits(regmap, REG_SPDIF_SRPC,
  288. SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
  289. SRPC_CLKSRC_SEL_SET(clksrc) | SRPC_GAINSEL_SET(gainsel));
  290. return 0;
  291. }
  292. static int spdif_set_sample_rate(struct snd_pcm_substream *substream,
  293. int sample_rate)
  294. {
  295. struct snd_soc_pcm_runtime *rtd = substream->private_data;
  296. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
  297. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  298. struct regmap *regmap = spdif_priv->regmap;
  299. struct platform_device *pdev = spdif_priv->pdev;
  300. unsigned long csfs = 0;
  301. u32 stc, mask, rate;
  302. u8 clk, txclk_df, sysclk_df;
  303. int ret;
  304. switch (sample_rate) {
  305. case 32000:
  306. rate = SPDIF_TXRATE_32000;
  307. csfs = IEC958_AES3_CON_FS_32000;
  308. break;
  309. case 44100:
  310. rate = SPDIF_TXRATE_44100;
  311. csfs = IEC958_AES3_CON_FS_44100;
  312. break;
  313. case 48000:
  314. rate = SPDIF_TXRATE_48000;
  315. csfs = IEC958_AES3_CON_FS_48000;
  316. break;
  317. case 96000:
  318. rate = SPDIF_TXRATE_96000;
  319. csfs = IEC958_AES3_CON_FS_96000;
  320. break;
  321. case 192000:
  322. rate = SPDIF_TXRATE_192000;
  323. csfs = IEC958_AES3_CON_FS_192000;
  324. break;
  325. default:
  326. dev_err(&pdev->dev, "unsupported sample rate %d\n", sample_rate);
  327. return -EINVAL;
  328. }
  329. clk = spdif_priv->txclk_src[rate];
  330. if (clk >= STC_TXCLK_SRC_MAX) {
  331. dev_err(&pdev->dev, "tx clock source is out of range\n");
  332. return -EINVAL;
  333. }
  334. txclk_df = spdif_priv->txclk_df[rate];
  335. if (txclk_df == 0) {
  336. dev_err(&pdev->dev, "the txclk_df can't be zero\n");
  337. return -EINVAL;
  338. }
  339. sysclk_df = spdif_priv->sysclk_df[rate];
  340. /* Don't mess up the clocks from other modules */
  341. if (clk != STC_TXCLK_SPDIF_ROOT)
  342. goto clk_set_bypass;
  343. /* The S/PDIF block needs a clock of 64 * fs * txclk_df */
  344. ret = clk_set_rate(spdif_priv->txclk[rate],
  345. 64 * sample_rate * txclk_df);
  346. if (ret) {
  347. dev_err(&pdev->dev, "failed to set tx clock rate\n");
  348. return ret;
  349. }
  350. clk_set_bypass:
  351. dev_dbg(&pdev->dev, "expected clock rate = %d\n",
  352. (64 * sample_rate * txclk_df * sysclk_df));
  353. dev_dbg(&pdev->dev, "actual clock rate = %ld\n",
  354. clk_get_rate(spdif_priv->txclk[rate]));
  355. /* set fs field in consumer channel status */
  356. spdif_set_cstatus(ctrl, IEC958_AES3_CON_FS, csfs);
  357. /* select clock source and divisor */
  358. stc = STC_TXCLK_ALL_EN | STC_TXCLK_SRC_SET(clk) |
  359. STC_TXCLK_DF(txclk_df) | STC_SYSCLK_DF(sysclk_df);
  360. mask = STC_TXCLK_ALL_EN_MASK | STC_TXCLK_SRC_MASK |
  361. STC_TXCLK_DF_MASK | STC_SYSCLK_DF_MASK;
  362. regmap_update_bits(regmap, REG_SPDIF_STC, mask, stc);
  363. dev_dbg(&pdev->dev, "set sample rate to %dHz for %dHz playback\n",
  364. spdif_priv->txrate[rate], sample_rate);
  365. return 0;
  366. }
  367. static int fsl_spdif_startup(struct snd_pcm_substream *substream,
  368. struct snd_soc_dai *cpu_dai)
  369. {
  370. struct snd_soc_pcm_runtime *rtd = substream->private_data;
  371. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
  372. struct platform_device *pdev = spdif_priv->pdev;
  373. struct regmap *regmap = spdif_priv->regmap;
  374. u32 scr, mask;
  375. int i;
  376. int ret;
  377. /* Reset module and interrupts only for first initialization */
  378. if (!cpu_dai->active) {
  379. ret = clk_prepare_enable(spdif_priv->coreclk);
  380. if (ret) {
  381. dev_err(&pdev->dev, "failed to enable core clock\n");
  382. return ret;
  383. }
  384. if (!IS_ERR(spdif_priv->spbaclk)) {
  385. ret = clk_prepare_enable(spdif_priv->spbaclk);
  386. if (ret) {
  387. dev_err(&pdev->dev, "failed to enable spba clock\n");
  388. goto err_spbaclk;
  389. }
  390. }
  391. ret = spdif_softreset(spdif_priv);
  392. if (ret) {
  393. dev_err(&pdev->dev, "failed to soft reset\n");
  394. goto err;
  395. }
  396. /* Disable all the interrupts */
  397. regmap_update_bits(regmap, REG_SPDIF_SIE, 0xffffff, 0);
  398. }
  399. if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
  400. scr = SCR_TXFIFO_AUTOSYNC | SCR_TXFIFO_CTRL_NORMAL |
  401. SCR_TXSEL_NORMAL | SCR_USRC_SEL_CHIP |
  402. SCR_TXFIFO_FSEL_IF8;
  403. mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
  404. SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
  405. SCR_TXFIFO_FSEL_MASK;
  406. for (i = 0; i < SPDIF_TXRATE_MAX; i++) {
  407. ret = clk_prepare_enable(spdif_priv->txclk[i]);
  408. if (ret)
  409. goto disable_txclk;
  410. }
  411. } else {
  412. scr = SCR_RXFIFO_FSEL_IF8 | SCR_RXFIFO_AUTOSYNC;
  413. mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
  414. SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
  415. ret = clk_prepare_enable(spdif_priv->rxclk);
  416. if (ret)
  417. goto err;
  418. }
  419. regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
  420. /* Power up SPDIF module */
  421. regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_LOW_POWER, 0);
  422. return 0;
  423. disable_txclk:
  424. for (i--; i >= 0; i--)
  425. clk_disable_unprepare(spdif_priv->txclk[i]);
  426. err:
  427. if (!IS_ERR(spdif_priv->spbaclk))
  428. clk_disable_unprepare(spdif_priv->spbaclk);
  429. err_spbaclk:
  430. clk_disable_unprepare(spdif_priv->coreclk);
  431. return ret;
  432. }
  433. static void fsl_spdif_shutdown(struct snd_pcm_substream *substream,
  434. struct snd_soc_dai *cpu_dai)
  435. {
  436. struct snd_soc_pcm_runtime *rtd = substream->private_data;
  437. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
  438. struct regmap *regmap = spdif_priv->regmap;
  439. u32 scr, mask, i;
  440. if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
  441. scr = 0;
  442. mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
  443. SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
  444. SCR_TXFIFO_FSEL_MASK;
  445. for (i = 0; i < SPDIF_TXRATE_MAX; i++)
  446. clk_disable_unprepare(spdif_priv->txclk[i]);
  447. } else {
  448. scr = SCR_RXFIFO_OFF | SCR_RXFIFO_CTL_ZERO;
  449. mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
  450. SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
  451. clk_disable_unprepare(spdif_priv->rxclk);
  452. }
  453. regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
  454. /* Power down SPDIF module only if tx&rx are both inactive */
  455. if (!cpu_dai->active) {
  456. spdif_intr_status_clear(spdif_priv);
  457. regmap_update_bits(regmap, REG_SPDIF_SCR,
  458. SCR_LOW_POWER, SCR_LOW_POWER);
  459. if (!IS_ERR(spdif_priv->spbaclk))
  460. clk_disable_unprepare(spdif_priv->spbaclk);
  461. clk_disable_unprepare(spdif_priv->coreclk);
  462. }
  463. }
  464. static int fsl_spdif_hw_params(struct snd_pcm_substream *substream,
  465. struct snd_pcm_hw_params *params,
  466. struct snd_soc_dai *dai)
  467. {
  468. struct snd_soc_pcm_runtime *rtd = substream->private_data;
  469. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
  470. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  471. struct platform_device *pdev = spdif_priv->pdev;
  472. u32 sample_rate = params_rate(params);
  473. int ret = 0;
  474. if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
  475. ret = spdif_set_sample_rate(substream, sample_rate);
  476. if (ret) {
  477. dev_err(&pdev->dev, "%s: set sample rate failed: %d\n",
  478. __func__, sample_rate);
  479. return ret;
  480. }
  481. spdif_set_cstatus(ctrl, IEC958_AES3_CON_CLOCK,
  482. IEC958_AES3_CON_CLOCK_1000PPM);
  483. spdif_write_channel_status(spdif_priv);
  484. } else {
  485. /* Setup rx clock source */
  486. ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1);
  487. }
  488. return ret;
  489. }
  490. static int fsl_spdif_trigger(struct snd_pcm_substream *substream,
  491. int cmd, struct snd_soc_dai *dai)
  492. {
  493. struct snd_soc_pcm_runtime *rtd = substream->private_data;
  494. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
  495. struct regmap *regmap = spdif_priv->regmap;
  496. bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
  497. u32 intr = SIE_INTR_FOR(tx);
  498. u32 dmaen = SCR_DMA_xX_EN(tx);
  499. switch (cmd) {
  500. case SNDRV_PCM_TRIGGER_START:
  501. case SNDRV_PCM_TRIGGER_RESUME:
  502. case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  503. regmap_update_bits(regmap, REG_SPDIF_SIE, intr, intr);
  504. regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, dmaen);
  505. break;
  506. case SNDRV_PCM_TRIGGER_STOP:
  507. case SNDRV_PCM_TRIGGER_SUSPEND:
  508. case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  509. regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, 0);
  510. regmap_update_bits(regmap, REG_SPDIF_SIE, intr, 0);
  511. break;
  512. default:
  513. return -EINVAL;
  514. }
  515. return 0;
  516. }
  517. static const struct snd_soc_dai_ops fsl_spdif_dai_ops = {
  518. .startup = fsl_spdif_startup,
  519. .hw_params = fsl_spdif_hw_params,
  520. .trigger = fsl_spdif_trigger,
  521. .shutdown = fsl_spdif_shutdown,
  522. };
  523. /*
  524. * FSL SPDIF IEC958 controller(mixer) functions
  525. *
  526. * Channel status get/put control
  527. * User bit value get/put control
  528. * Valid bit value get control
  529. * DPLL lock status get control
  530. * User bit sync mode selection control
  531. */
  532. static int fsl_spdif_info(struct snd_kcontrol *kcontrol,
  533. struct snd_ctl_elem_info *uinfo)
  534. {
  535. uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
  536. uinfo->count = 1;
  537. return 0;
  538. }
  539. static int fsl_spdif_pb_get(struct snd_kcontrol *kcontrol,
  540. struct snd_ctl_elem_value *uvalue)
  541. {
  542. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  543. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  544. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  545. uvalue->value.iec958.status[0] = ctrl->ch_status[0];
  546. uvalue->value.iec958.status[1] = ctrl->ch_status[1];
  547. uvalue->value.iec958.status[2] = ctrl->ch_status[2];
  548. uvalue->value.iec958.status[3] = ctrl->ch_status[3];
  549. return 0;
  550. }
  551. static int fsl_spdif_pb_put(struct snd_kcontrol *kcontrol,
  552. struct snd_ctl_elem_value *uvalue)
  553. {
  554. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  555. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  556. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  557. ctrl->ch_status[0] = uvalue->value.iec958.status[0];
  558. ctrl->ch_status[1] = uvalue->value.iec958.status[1];
  559. ctrl->ch_status[2] = uvalue->value.iec958.status[2];
  560. ctrl->ch_status[3] = uvalue->value.iec958.status[3];
  561. spdif_write_channel_status(spdif_priv);
  562. return 0;
  563. }
  564. /* Get channel status from SPDIF_RX_CCHAN register */
  565. static int fsl_spdif_capture_get(struct snd_kcontrol *kcontrol,
  566. struct snd_ctl_elem_value *ucontrol)
  567. {
  568. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  569. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  570. struct regmap *regmap = spdif_priv->regmap;
  571. u32 cstatus, val;
  572. regmap_read(regmap, REG_SPDIF_SIS, &val);
  573. if (!(val & INT_CNEW))
  574. return -EAGAIN;
  575. regmap_read(regmap, REG_SPDIF_SRCSH, &cstatus);
  576. ucontrol->value.iec958.status[0] = (cstatus >> 16) & 0xFF;
  577. ucontrol->value.iec958.status[1] = (cstatus >> 8) & 0xFF;
  578. ucontrol->value.iec958.status[2] = cstatus & 0xFF;
  579. regmap_read(regmap, REG_SPDIF_SRCSL, &cstatus);
  580. ucontrol->value.iec958.status[3] = (cstatus >> 16) & 0xFF;
  581. ucontrol->value.iec958.status[4] = (cstatus >> 8) & 0xFF;
  582. ucontrol->value.iec958.status[5] = cstatus & 0xFF;
  583. /* Clear intr */
  584. regmap_write(regmap, REG_SPDIF_SIC, INT_CNEW);
  585. return 0;
  586. }
  587. /*
  588. * Get User bits (subcode) from chip value which readed out
  589. * in UChannel register.
  590. */
  591. static int fsl_spdif_subcode_get(struct snd_kcontrol *kcontrol,
  592. struct snd_ctl_elem_value *ucontrol)
  593. {
  594. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  595. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  596. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  597. unsigned long flags;
  598. int ret = -EAGAIN;
  599. spin_lock_irqsave(&ctrl->ctl_lock, flags);
  600. if (ctrl->ready_buf) {
  601. int idx = (ctrl->ready_buf - 1) * SPDIF_UBITS_SIZE;
  602. memcpy(&ucontrol->value.iec958.subcode[0],
  603. &ctrl->subcode[idx], SPDIF_UBITS_SIZE);
  604. ret = 0;
  605. }
  606. spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
  607. return ret;
  608. }
  609. /* Q-subcode information. The byte size is SPDIF_UBITS_SIZE/8 */
  610. static int fsl_spdif_qinfo(struct snd_kcontrol *kcontrol,
  611. struct snd_ctl_elem_info *uinfo)
  612. {
  613. uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
  614. uinfo->count = SPDIF_QSUB_SIZE;
  615. return 0;
  616. }
  617. /* Get Q subcode from chip value which readed out in QChannel register */
  618. static int fsl_spdif_qget(struct snd_kcontrol *kcontrol,
  619. struct snd_ctl_elem_value *ucontrol)
  620. {
  621. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  622. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  623. struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control;
  624. unsigned long flags;
  625. int ret = -EAGAIN;
  626. spin_lock_irqsave(&ctrl->ctl_lock, flags);
  627. if (ctrl->ready_buf) {
  628. int idx = (ctrl->ready_buf - 1) * SPDIF_QSUB_SIZE;
  629. memcpy(&ucontrol->value.bytes.data[0],
  630. &ctrl->qsub[idx], SPDIF_QSUB_SIZE);
  631. ret = 0;
  632. }
  633. spin_unlock_irqrestore(&ctrl->ctl_lock, flags);
  634. return ret;
  635. }
  636. /* Valid bit information */
  637. static int fsl_spdif_vbit_info(struct snd_kcontrol *kcontrol,
  638. struct snd_ctl_elem_info *uinfo)
  639. {
  640. uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
  641. uinfo->count = 1;
  642. uinfo->value.integer.min = 0;
  643. uinfo->value.integer.max = 1;
  644. return 0;
  645. }
  646. /* Get valid good bit from interrupt status register */
  647. static int fsl_spdif_vbit_get(struct snd_kcontrol *kcontrol,
  648. struct snd_ctl_elem_value *ucontrol)
  649. {
  650. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  651. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  652. struct regmap *regmap = spdif_priv->regmap;
  653. u32 val;
  654. regmap_read(regmap, REG_SPDIF_SIS, &val);
  655. ucontrol->value.integer.value[0] = (val & INT_VAL_NOGOOD) != 0;
  656. regmap_write(regmap, REG_SPDIF_SIC, INT_VAL_NOGOOD);
  657. return 0;
  658. }
  659. /* DPLL lock information */
  660. static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol,
  661. struct snd_ctl_elem_info *uinfo)
  662. {
  663. uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
  664. uinfo->count = 1;
  665. uinfo->value.integer.min = 16000;
  666. uinfo->value.integer.max = 96000;
  667. return 0;
  668. }
  669. static u32 gainsel_multi[GAINSEL_MULTI_MAX] = {
  670. 24, 16, 12, 8, 6, 4, 3,
  671. };
  672. /* Get RX data clock rate given the SPDIF bus_clk */
  673. static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv,
  674. enum spdif_gainsel gainsel)
  675. {
  676. struct regmap *regmap = spdif_priv->regmap;
  677. struct platform_device *pdev = spdif_priv->pdev;
  678. u64 tmpval64, busclk_freq = 0;
  679. u32 freqmeas, phaseconf;
  680. u8 clksrc;
  681. regmap_read(regmap, REG_SPDIF_SRFM, &freqmeas);
  682. regmap_read(regmap, REG_SPDIF_SRPC, &phaseconf);
  683. clksrc = (phaseconf >> SRPC_CLKSRC_SEL_OFFSET) & 0xf;
  684. /* Get bus clock from system */
  685. if (srpc_dpll_locked[clksrc] && (phaseconf & SRPC_DPLL_LOCKED))
  686. busclk_freq = clk_get_rate(spdif_priv->sysclk);
  687. /* FreqMeas_CLK = (BUS_CLK * FreqMeas) / 2 ^ 10 / GAINSEL / 128 */
  688. tmpval64 = (u64) busclk_freq * freqmeas;
  689. do_div(tmpval64, gainsel_multi[gainsel] * 1024);
  690. do_div(tmpval64, 128 * 1024);
  691. dev_dbg(&pdev->dev, "FreqMeas: %d\n", freqmeas);
  692. dev_dbg(&pdev->dev, "BusclkFreq: %lld\n", busclk_freq);
  693. dev_dbg(&pdev->dev, "RxRate: %lld\n", tmpval64);
  694. return (int)tmpval64;
  695. }
  696. /*
  697. * Get DPLL lock or not info from stable interrupt status register.
  698. * User application must use this control to get locked,
  699. * then can do next PCM operation
  700. */
  701. static int fsl_spdif_rxrate_get(struct snd_kcontrol *kcontrol,
  702. struct snd_ctl_elem_value *ucontrol)
  703. {
  704. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  705. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  706. int rate = 0;
  707. if (spdif_priv->dpll_locked)
  708. rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL);
  709. ucontrol->value.integer.value[0] = rate;
  710. return 0;
  711. }
  712. /* User bit sync mode info */
  713. static int fsl_spdif_usync_info(struct snd_kcontrol *kcontrol,
  714. struct snd_ctl_elem_info *uinfo)
  715. {
  716. uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
  717. uinfo->count = 1;
  718. uinfo->value.integer.min = 0;
  719. uinfo->value.integer.max = 1;
  720. return 0;
  721. }
  722. /*
  723. * User bit sync mode:
  724. * 1 CD User channel subcode
  725. * 0 Non-CD data
  726. */
  727. static int fsl_spdif_usync_get(struct snd_kcontrol *kcontrol,
  728. struct snd_ctl_elem_value *ucontrol)
  729. {
  730. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  731. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  732. struct regmap *regmap = spdif_priv->regmap;
  733. u32 val;
  734. regmap_read(regmap, REG_SPDIF_SRCD, &val);
  735. ucontrol->value.integer.value[0] = (val & SRCD_CD_USER) != 0;
  736. return 0;
  737. }
  738. /*
  739. * User bit sync mode:
  740. * 1 CD User channel subcode
  741. * 0 Non-CD data
  742. */
  743. static int fsl_spdif_usync_put(struct snd_kcontrol *kcontrol,
  744. struct snd_ctl_elem_value *ucontrol)
  745. {
  746. struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
  747. struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
  748. struct regmap *regmap = spdif_priv->regmap;
  749. u32 val = ucontrol->value.integer.value[0] << SRCD_CD_USER_OFFSET;
  750. regmap_update_bits(regmap, REG_SPDIF_SRCD, SRCD_CD_USER, val);
  751. return 0;
  752. }
  753. /* FSL SPDIF IEC958 controller defines */
  754. static struct snd_kcontrol_new fsl_spdif_ctrls[] = {
  755. /* Status cchanel controller */
  756. {
  757. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  758. .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
  759. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  760. SNDRV_CTL_ELEM_ACCESS_WRITE |
  761. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  762. .info = fsl_spdif_info,
  763. .get = fsl_spdif_pb_get,
  764. .put = fsl_spdif_pb_put,
  765. },
  766. {
  767. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  768. .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
  769. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  770. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  771. .info = fsl_spdif_info,
  772. .get = fsl_spdif_capture_get,
  773. },
  774. /* User bits controller */
  775. {
  776. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  777. .name = "IEC958 Subcode Capture Default",
  778. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  779. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  780. .info = fsl_spdif_info,
  781. .get = fsl_spdif_subcode_get,
  782. },
  783. {
  784. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  785. .name = "IEC958 Q-subcode Capture Default",
  786. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  787. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  788. .info = fsl_spdif_qinfo,
  789. .get = fsl_spdif_qget,
  790. },
  791. /* Valid bit error controller */
  792. {
  793. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  794. .name = "IEC958 V-Bit Errors",
  795. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  796. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  797. .info = fsl_spdif_vbit_info,
  798. .get = fsl_spdif_vbit_get,
  799. },
  800. /* DPLL lock info get controller */
  801. {
  802. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  803. .name = "RX Sample Rate",
  804. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  805. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  806. .info = fsl_spdif_rxrate_info,
  807. .get = fsl_spdif_rxrate_get,
  808. },
  809. /* User bit sync mode set/get controller */
  810. {
  811. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  812. .name = "IEC958 USyncMode CDText",
  813. .access = SNDRV_CTL_ELEM_ACCESS_READ |
  814. SNDRV_CTL_ELEM_ACCESS_WRITE |
  815. SNDRV_CTL_ELEM_ACCESS_VOLATILE,
  816. .info = fsl_spdif_usync_info,
  817. .get = fsl_spdif_usync_get,
  818. .put = fsl_spdif_usync_put,
  819. },
  820. };
  821. static int fsl_spdif_dai_probe(struct snd_soc_dai *dai)
  822. {
  823. struct fsl_spdif_priv *spdif_private = snd_soc_dai_get_drvdata(dai);
  824. snd_soc_dai_init_dma_data(dai, &spdif_private->dma_params_tx,
  825. &spdif_private->dma_params_rx);
  826. snd_soc_add_dai_controls(dai, fsl_spdif_ctrls, ARRAY_SIZE(fsl_spdif_ctrls));
  827. return 0;
  828. }
  829. static struct snd_soc_dai_driver fsl_spdif_dai = {
  830. .probe = &fsl_spdif_dai_probe,
  831. .playback = {
  832. .stream_name = "CPU-Playback",
  833. .channels_min = 2,
  834. .channels_max = 2,
  835. .rates = FSL_SPDIF_RATES_PLAYBACK,
  836. .formats = FSL_SPDIF_FORMATS_PLAYBACK,
  837. },
  838. .capture = {
  839. .stream_name = "CPU-Capture",
  840. .channels_min = 2,
  841. .channels_max = 2,
  842. .rates = FSL_SPDIF_RATES_CAPTURE,
  843. .formats = FSL_SPDIF_FORMATS_CAPTURE,
  844. },
  845. .ops = &fsl_spdif_dai_ops,
  846. };
  847. static const struct snd_soc_component_driver fsl_spdif_component = {
  848. .name = "fsl-spdif",
  849. };
  850. /* FSL SPDIF REGMAP */
  851. static const struct reg_default fsl_spdif_reg_defaults[] = {
  852. {REG_SPDIF_SCR, 0x00000400},
  853. {REG_SPDIF_SRCD, 0x00000000},
  854. {REG_SPDIF_SIE, 0x00000000},
  855. {REG_SPDIF_STL, 0x00000000},
  856. {REG_SPDIF_STR, 0x00000000},
  857. {REG_SPDIF_STCSCH, 0x00000000},
  858. {REG_SPDIF_STCSCL, 0x00000000},
  859. {REG_SPDIF_STC, 0x00020f00},
  860. };
  861. static bool fsl_spdif_readable_reg(struct device *dev, unsigned int reg)
  862. {
  863. switch (reg) {
  864. case REG_SPDIF_SCR:
  865. case REG_SPDIF_SRCD:
  866. case REG_SPDIF_SRPC:
  867. case REG_SPDIF_SIE:
  868. case REG_SPDIF_SIS:
  869. case REG_SPDIF_SRL:
  870. case REG_SPDIF_SRR:
  871. case REG_SPDIF_SRCSH:
  872. case REG_SPDIF_SRCSL:
  873. case REG_SPDIF_SRU:
  874. case REG_SPDIF_SRQ:
  875. case REG_SPDIF_STCSCH:
  876. case REG_SPDIF_STCSCL:
  877. case REG_SPDIF_SRFM:
  878. case REG_SPDIF_STC:
  879. return true;
  880. default:
  881. return false;
  882. }
  883. }
  884. static bool fsl_spdif_volatile_reg(struct device *dev, unsigned int reg)
  885. {
  886. switch (reg) {
  887. case REG_SPDIF_SRPC:
  888. case REG_SPDIF_SIS:
  889. case REG_SPDIF_SRL:
  890. case REG_SPDIF_SRR:
  891. case REG_SPDIF_SRCSH:
  892. case REG_SPDIF_SRCSL:
  893. case REG_SPDIF_SRU:
  894. case REG_SPDIF_SRQ:
  895. case REG_SPDIF_SRFM:
  896. return true;
  897. default:
  898. return false;
  899. }
  900. }
  901. static bool fsl_spdif_writeable_reg(struct device *dev, unsigned int reg)
  902. {
  903. switch (reg) {
  904. case REG_SPDIF_SCR:
  905. case REG_SPDIF_SRCD:
  906. case REG_SPDIF_SRPC:
  907. case REG_SPDIF_SIE:
  908. case REG_SPDIF_SIC:
  909. case REG_SPDIF_STL:
  910. case REG_SPDIF_STR:
  911. case REG_SPDIF_STCSCH:
  912. case REG_SPDIF_STCSCL:
  913. case REG_SPDIF_STC:
  914. return true;
  915. default:
  916. return false;
  917. }
  918. }
  919. static const struct regmap_config fsl_spdif_regmap_config = {
  920. .reg_bits = 32,
  921. .reg_stride = 4,
  922. .val_bits = 32,
  923. .max_register = REG_SPDIF_STC,
  924. .reg_defaults = fsl_spdif_reg_defaults,
  925. .num_reg_defaults = ARRAY_SIZE(fsl_spdif_reg_defaults),
  926. .readable_reg = fsl_spdif_readable_reg,
  927. .volatile_reg = fsl_spdif_volatile_reg,
  928. .writeable_reg = fsl_spdif_writeable_reg,
  929. .cache_type = REGCACHE_FLAT,
  930. };
  931. static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
  932. struct clk *clk, u64 savesub,
  933. enum spdif_txrate index, bool round)
  934. {
  935. static const u32 rate[] = { 32000, 44100, 48000, 96000, 192000 };
  936. bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk);
  937. u64 rate_ideal, rate_actual, sub;
  938. u32 sysclk_dfmin, sysclk_dfmax;
  939. u32 txclk_df, sysclk_df, arate;
  940. /* The sysclk has an extra divisor [2, 512] */
  941. sysclk_dfmin = is_sysclk ? 2 : 1;
  942. sysclk_dfmax = is_sysclk ? 512 : 1;
  943. for (sysclk_df = sysclk_dfmin; sysclk_df <= sysclk_dfmax; sysclk_df++) {
  944. for (txclk_df = 1; txclk_df <= 128; txclk_df++) {
  945. rate_ideal = rate[index] * txclk_df * 64ULL;
  946. if (round)
  947. rate_actual = clk_round_rate(clk, rate_ideal);
  948. else
  949. rate_actual = clk_get_rate(clk);
  950. arate = rate_actual / 64;
  951. arate /= txclk_df * sysclk_df;
  952. if (arate == rate[index]) {
  953. /* We are lucky */
  954. savesub = 0;
  955. spdif_priv->txclk_df[index] = txclk_df;
  956. spdif_priv->sysclk_df[index] = sysclk_df;
  957. spdif_priv->txrate[index] = arate;
  958. goto out;
  959. } else if (arate / rate[index] == 1) {
  960. /* A little bigger than expect */
  961. sub = (u64)(arate - rate[index]) * 100000;
  962. do_div(sub, rate[index]);
  963. if (sub >= savesub)
  964. continue;
  965. savesub = sub;
  966. spdif_priv->txclk_df[index] = txclk_df;
  967. spdif_priv->sysclk_df[index] = sysclk_df;
  968. spdif_priv->txrate[index] = arate;
  969. } else if (rate[index] / arate == 1) {
  970. /* A little smaller than expect */
  971. sub = (u64)(rate[index] - arate) * 100000;
  972. do_div(sub, rate[index]);
  973. if (sub >= savesub)
  974. continue;
  975. savesub = sub;
  976. spdif_priv->txclk_df[index] = txclk_df;
  977. spdif_priv->sysclk_df[index] = sysclk_df;
  978. spdif_priv->txrate[index] = arate;
  979. }
  980. }
  981. }
  982. out:
  983. return savesub;
  984. }
  985. static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv,
  986. enum spdif_txrate index)
  987. {
  988. static const u32 rate[] = { 32000, 44100, 48000, 96000, 192000 };
  989. struct platform_device *pdev = spdif_priv->pdev;
  990. struct device *dev = &pdev->dev;
  991. u64 savesub = 100000, ret;
  992. struct clk *clk;
  993. char tmp[16];
  994. int i;
  995. for (i = 0; i < STC_TXCLK_SRC_MAX; i++) {
  996. sprintf(tmp, "rxtx%d", i);
  997. clk = devm_clk_get(&pdev->dev, tmp);
  998. if (IS_ERR(clk)) {
  999. dev_err(dev, "no rxtx%d clock in devicetree\n", i);
  1000. return PTR_ERR(clk);
  1001. }
  1002. if (!clk_get_rate(clk))
  1003. continue;
  1004. ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index,
  1005. i == STC_TXCLK_SPDIF_ROOT);
  1006. if (savesub == ret)
  1007. continue;
  1008. savesub = ret;
  1009. spdif_priv->txclk[index] = clk;
  1010. spdif_priv->txclk_src[index] = i;
  1011. /* To quick catch a divisor, we allow a 0.1% deviation */
  1012. if (savesub < 100)
  1013. break;
  1014. }
  1015. dev_dbg(&pdev->dev, "use rxtx%d as tx clock source for %dHz sample rate\n",
  1016. spdif_priv->txclk_src[index], rate[index]);
  1017. dev_dbg(&pdev->dev, "use txclk df %d for %dHz sample rate\n",
  1018. spdif_priv->txclk_df[index], rate[index]);
  1019. if (clk_is_match(spdif_priv->txclk[index], spdif_priv->sysclk))
  1020. dev_dbg(&pdev->dev, "use sysclk df %d for %dHz sample rate\n",
  1021. spdif_priv->sysclk_df[index], rate[index]);
  1022. dev_dbg(&pdev->dev, "the best rate for %dHz sample rate is %dHz\n",
  1023. rate[index], spdif_priv->txrate[index]);
  1024. return 0;
  1025. }
  1026. static int fsl_spdif_probe(struct platform_device *pdev)
  1027. {
  1028. struct device_node *np = pdev->dev.of_node;
  1029. struct fsl_spdif_priv *spdif_priv;
  1030. struct spdif_mixer_control *ctrl;
  1031. struct resource *res;
  1032. void __iomem *regs;
  1033. int irq, ret, i;
  1034. if (!np)
  1035. return -ENODEV;
  1036. spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL);
  1037. if (!spdif_priv)
  1038. return -ENOMEM;
  1039. spdif_priv->pdev = pdev;
  1040. /* Initialize this copy of the CPU DAI driver structure */
  1041. memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
  1042. spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev);
  1043. /* Get the addresses and IRQ */
  1044. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1045. regs = devm_ioremap_resource(&pdev->dev, res);
  1046. if (IS_ERR(regs))
  1047. return PTR_ERR(regs);
  1048. spdif_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev,
  1049. "core", regs, &fsl_spdif_regmap_config);
  1050. if (IS_ERR(spdif_priv->regmap)) {
  1051. dev_err(&pdev->dev, "regmap init failed\n");
  1052. return PTR_ERR(spdif_priv->regmap);
  1053. }
  1054. irq = platform_get_irq(pdev, 0);
  1055. if (irq < 0) {
  1056. dev_err(&pdev->dev, "no irq for node %s\n", pdev->name);
  1057. return irq;
  1058. }
  1059. ret = devm_request_irq(&pdev->dev, irq, spdif_isr, 0,
  1060. dev_name(&pdev->dev), spdif_priv);
  1061. if (ret) {
  1062. dev_err(&pdev->dev, "could not claim irq %u\n", irq);
  1063. return ret;
  1064. }
  1065. /* Get system clock for rx clock rate calculation */
  1066. spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5");
  1067. if (IS_ERR(spdif_priv->sysclk)) {
  1068. dev_err(&pdev->dev, "no sys clock (rxtx5) in devicetree\n");
  1069. return PTR_ERR(spdif_priv->sysclk);
  1070. }
  1071. /* Get core clock for data register access via DMA */
  1072. spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core");
  1073. if (IS_ERR(spdif_priv->coreclk)) {
  1074. dev_err(&pdev->dev, "no core clock in devicetree\n");
  1075. return PTR_ERR(spdif_priv->coreclk);
  1076. }
  1077. spdif_priv->spbaclk = devm_clk_get(&pdev->dev, "spba");
  1078. if (IS_ERR(spdif_priv->spbaclk))
  1079. dev_warn(&pdev->dev, "no spba clock in devicetree\n");
  1080. /* Select clock source for rx/tx clock */
  1081. spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1");
  1082. if (IS_ERR(spdif_priv->rxclk)) {
  1083. dev_err(&pdev->dev, "no rxtx1 clock in devicetree\n");
  1084. return PTR_ERR(spdif_priv->rxclk);
  1085. }
  1086. spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC;
  1087. for (i = 0; i < SPDIF_TXRATE_MAX; i++) {
  1088. ret = fsl_spdif_probe_txclk(spdif_priv, i);
  1089. if (ret)
  1090. return ret;
  1091. }
  1092. /* Initial spinlock for control data */
  1093. ctrl = &spdif_priv->fsl_spdif_control;
  1094. spin_lock_init(&ctrl->ctl_lock);
  1095. /* Init tx channel status default value */
  1096. ctrl->ch_status[0] = IEC958_AES0_CON_NOT_COPYRIGHT |
  1097. IEC958_AES0_CON_EMPHASIS_5015;
  1098. ctrl->ch_status[1] = IEC958_AES1_CON_DIGDIGCONV_ID;
  1099. ctrl->ch_status[2] = 0x00;
  1100. ctrl->ch_status[3] = IEC958_AES3_CON_FS_44100 |
  1101. IEC958_AES3_CON_CLOCK_1000PPM;
  1102. spdif_priv->dpll_locked = false;
  1103. spdif_priv->dma_params_tx.maxburst = FSL_SPDIF_TXFIFO_WML;
  1104. spdif_priv->dma_params_rx.maxburst = FSL_SPDIF_RXFIFO_WML;
  1105. spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL;
  1106. spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL;
  1107. /* Register with ASoC */
  1108. dev_set_drvdata(&pdev->dev, spdif_priv);
  1109. ret = devm_snd_soc_register_component(&pdev->dev, &fsl_spdif_component,
  1110. &spdif_priv->cpu_dai_drv, 1);
  1111. if (ret) {
  1112. dev_err(&pdev->dev, "failed to register DAI: %d\n", ret);
  1113. return ret;
  1114. }
  1115. ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
  1116. if (ret)
  1117. dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
  1118. return ret;
  1119. }
  1120. #ifdef CONFIG_PM_SLEEP
  1121. static int fsl_spdif_suspend(struct device *dev)
  1122. {
  1123. struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
  1124. regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC,
  1125. &spdif_priv->regcache_srpc);
  1126. regcache_cache_only(spdif_priv->regmap, true);
  1127. regcache_mark_dirty(spdif_priv->regmap);
  1128. return 0;
  1129. }
  1130. static int fsl_spdif_resume(struct device *dev)
  1131. {
  1132. struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev);
  1133. regcache_cache_only(spdif_priv->regmap, false);
  1134. regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC,
  1135. SRPC_CLKSRC_SEL_MASK | SRPC_GAINSEL_MASK,
  1136. spdif_priv->regcache_srpc);
  1137. return regcache_sync(spdif_priv->regmap);
  1138. }
  1139. #endif /* CONFIG_PM_SLEEP */
  1140. static const struct dev_pm_ops fsl_spdif_pm = {
  1141. SET_SYSTEM_SLEEP_PM_OPS(fsl_spdif_suspend, fsl_spdif_resume)
  1142. };
  1143. static const struct of_device_id fsl_spdif_dt_ids[] = {
  1144. { .compatible = "fsl,imx35-spdif", },
  1145. { .compatible = "fsl,vf610-spdif", },
  1146. {}
  1147. };
  1148. MODULE_DEVICE_TABLE(of, fsl_spdif_dt_ids);
  1149. static struct platform_driver fsl_spdif_driver = {
  1150. .driver = {
  1151. .name = "fsl-spdif-dai",
  1152. .of_match_table = fsl_spdif_dt_ids,
  1153. .pm = &fsl_spdif_pm,
  1154. },
  1155. .probe = fsl_spdif_probe,
  1156. };
  1157. module_platform_driver(fsl_spdif_driver);
  1158. MODULE_AUTHOR("Freescale Semiconductor, Inc.");
  1159. MODULE_DESCRIPTION("Freescale S/PDIF CPU DAI Driver");
  1160. MODULE_LICENSE("GPL v2");
  1161. MODULE_ALIAS("platform:fsl-spdif-dai");