atmel-i2s.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  1. /*
  2. * Driver for Atmel I2S controller
  3. *
  4. * Copyright (C) 2015 Atmel Corporation
  5. *
  6. * Author: Cyrille Pitchen <cyrille.pitchen@atmel.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License version 2 as published by
  10. * the Free Software Foundation.
  11. *
  12. * This program is distributed in the hope that it will be useful, but WITHOUT
  13. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  15. * more details.
  16. *
  17. * You should have received a copy of the GNU General Public License along with
  18. * this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. #include <linux/init.h>
  21. #include <linux/module.h>
  22. #include <linux/device.h>
  23. #include <linux/slab.h>
  24. #include <linux/delay.h>
  25. #include <linux/io.h>
  26. #include <linux/clk.h>
  27. #include <linux/mfd/syscon.h>
  28. #include <sound/core.h>
  29. #include <sound/pcm.h>
  30. #include <sound/pcm_params.h>
  31. #include <sound/initval.h>
  32. #include <sound/soc.h>
  33. #include <sound/dmaengine_pcm.h>
  34. #define ATMEL_I2SC_MAX_TDM_CHANNELS 8
  35. /*
  36. * ---- I2S Controller Register map ----
  37. */
  38. #define ATMEL_I2SC_CR 0x0000 /* Control Register */
  39. #define ATMEL_I2SC_MR 0x0004 /* Mode Register */
  40. #define ATMEL_I2SC_SR 0x0008 /* Status Register */
  41. #define ATMEL_I2SC_SCR 0x000c /* Status Clear Register */
  42. #define ATMEL_I2SC_SSR 0x0010 /* Status Set Register */
  43. #define ATMEL_I2SC_IER 0x0014 /* Interrupt Enable Register */
  44. #define ATMEL_I2SC_IDR 0x0018 /* Interrupt Disable Register */
  45. #define ATMEL_I2SC_IMR 0x001c /* Interrupt Mask Register */
  46. #define ATMEL_I2SC_RHR 0x0020 /* Receiver Holding Register */
  47. #define ATMEL_I2SC_THR 0x0024 /* Transmitter Holding Register */
  48. #define ATMEL_I2SC_VERSION 0x0028 /* Version Register */
  49. /*
  50. * ---- Control Register (Write-only) ----
  51. */
  52. #define ATMEL_I2SC_CR_RXEN BIT(0) /* Receiver Enable */
  53. #define ATMEL_I2SC_CR_RXDIS BIT(1) /* Receiver Disable */
  54. #define ATMEL_I2SC_CR_CKEN BIT(2) /* Clock Enable */
  55. #define ATMEL_I2SC_CR_CKDIS BIT(3) /* Clock Disable */
  56. #define ATMEL_I2SC_CR_TXEN BIT(4) /* Transmitter Enable */
  57. #define ATMEL_I2SC_CR_TXDIS BIT(5) /* Transmitter Disable */
  58. #define ATMEL_I2SC_CR_SWRST BIT(7) /* Software Reset */
  59. /*
  60. * ---- Mode Register (Read/Write) ----
  61. */
  62. #define ATMEL_I2SC_MR_MODE_MASK GENMASK(0, 0)
  63. #define ATMEL_I2SC_MR_MODE_SLAVE (0 << 0)
  64. #define ATMEL_I2SC_MR_MODE_MASTER (1 << 0)
  65. #define ATMEL_I2SC_MR_DATALENGTH_MASK GENMASK(4, 2)
  66. #define ATMEL_I2SC_MR_DATALENGTH_32_BITS (0 << 2)
  67. #define ATMEL_I2SC_MR_DATALENGTH_24_BITS (1 << 2)
  68. #define ATMEL_I2SC_MR_DATALENGTH_20_BITS (2 << 2)
  69. #define ATMEL_I2SC_MR_DATALENGTH_18_BITS (3 << 2)
  70. #define ATMEL_I2SC_MR_DATALENGTH_16_BITS (4 << 2)
  71. #define ATMEL_I2SC_MR_DATALENGTH_16_BITS_COMPACT (5 << 2)
  72. #define ATMEL_I2SC_MR_DATALENGTH_8_BITS (6 << 2)
  73. #define ATMEL_I2SC_MR_DATALENGTH_8_BITS_COMPACT (7 << 2)
  74. #define ATMEL_I2SC_MR_FORMAT_MASK GENMASK(7, 6)
  75. #define ATMEL_I2SC_MR_FORMAT_I2S (0 << 6)
  76. #define ATMEL_I2SC_MR_FORMAT_LJ (1 << 6) /* Left Justified */
  77. #define ATMEL_I2SC_MR_FORMAT_TDM (2 << 6)
  78. #define ATMEL_I2SC_MR_FORMAT_TDMLJ (3 << 6)
  79. /* Left audio samples duplicated to right audio channel */
  80. #define ATMEL_I2SC_MR_RXMONO BIT(8)
  81. /* Receiver uses one DMA channel ... */
  82. #define ATMEL_I2SC_MR_RXDMA_MASK GENMASK(9, 9)
  83. #define ATMEL_I2SC_MR_RXDMA_SINGLE (0 << 9) /* for all audio channels */
  84. #define ATMEL_I2SC_MR_RXDMA_MULTIPLE (1 << 9) /* per audio channel */
  85. /* I2SDO output of I2SC is internally connected to I2SDI input */
  86. #define ATMEL_I2SC_MR_RXLOOP BIT(10)
  87. /* Left audio samples duplicated to right audio channel */
  88. #define ATMEL_I2SC_MR_TXMONO BIT(12)
  89. /* Transmitter uses one DMA channel ... */
  90. #define ATMEL_I2SC_MR_TXDMA_MASK GENMASK(13, 13)
  91. #define ATMEL_I2SC_MR_TXDMA_SINGLE (0 << 13) /* for all audio channels */
  92. #define ATMEL_I2SC_MR_TXDME_MULTIPLE (1 << 13) /* per audio channel */
  93. /* x sample transmitted when underrun */
  94. #define ATMEL_I2SC_MR_TXSAME_MASK GENMASK(14, 14)
  95. #define ATMEL_I2SC_MR_TXSAME_ZERO (0 << 14) /* Zero sample */
  96. #define ATMEL_I2SC_MR_TXSAME_PREVIOUS (1 << 14) /* Previous sample */
  97. /* Audio Clock to I2SC Master Clock ratio */
  98. #define ATMEL_I2SC_MR_IMCKDIV_MASK GENMASK(21, 16)
  99. #define ATMEL_I2SC_MR_IMCKDIV(div) \
  100. (((div) << 16) & ATMEL_I2SC_MR_IMCKDIV_MASK)
  101. /* Master Clock to fs ratio */
  102. #define ATMEL_I2SC_MR_IMCKFS_MASK GENMASK(29, 24)
  103. #define ATMEL_I2SC_MR_IMCKFS(fs) \
  104. (((fs) << 24) & ATMEL_I2SC_MR_IMCKFS_MASK)
  105. /* Master Clock mode */
  106. #define ATMEL_I2SC_MR_IMCKMODE_MASK GENMASK(30, 30)
  107. /* 0: No master clock generated (selected clock drives I2SCK pin) */
  108. #define ATMEL_I2SC_MR_IMCKMODE_I2SCK (0 << 30)
  109. /* 1: master clock generated (internally generated clock drives I2SMCK pin) */
  110. #define ATMEL_I2SC_MR_IMCKMODE_I2SMCK (1 << 30)
  111. /* Slot Width */
  112. /* 0: slot is 32 bits wide for DATALENGTH = 18/20/24 bits. */
  113. /* 1: slot is 24 bits wide for DATALENGTH = 18/20/24 bits. */
  114. #define ATMEL_I2SC_MR_IWS BIT(31)
  115. /*
  116. * ---- Status Registers ----
  117. */
  118. #define ATMEL_I2SC_SR_RXEN BIT(0) /* Receiver Enabled */
  119. #define ATMEL_I2SC_SR_RXRDY BIT(1) /* Receive Ready */
  120. #define ATMEL_I2SC_SR_RXOR BIT(2) /* Receive Overrun */
  121. #define ATMEL_I2SC_SR_TXEN BIT(4) /* Transmitter Enabled */
  122. #define ATMEL_I2SC_SR_TXRDY BIT(5) /* Transmit Ready */
  123. #define ATMEL_I2SC_SR_TXUR BIT(6) /* Transmit Underrun */
  124. /* Receive Overrun Channel */
  125. #define ATMEL_I2SC_SR_RXORCH_MASK GENMASK(15, 8)
  126. #define ATMEL_I2SC_SR_RXORCH(ch) (1 << (((ch) & 0x7) + 8))
  127. /* Transmit Underrun Channel */
  128. #define ATMEL_I2SC_SR_TXURCH_MASK GENMASK(27, 20)
  129. #define ATMEL_I2SC_SR_TXURCH(ch) (1 << (((ch) & 0x7) + 20))
  130. /*
  131. * ---- Interrupt Enable/Disable/Mask Registers ----
  132. */
  133. #define ATMEL_I2SC_INT_RXRDY ATMEL_I2SC_SR_RXRDY
  134. #define ATMEL_I2SC_INT_RXOR ATMEL_I2SC_SR_RXOR
  135. #define ATMEL_I2SC_INT_TXRDY ATMEL_I2SC_SR_TXRDY
  136. #define ATMEL_I2SC_INT_TXUR ATMEL_I2SC_SR_TXUR
  137. static const struct regmap_config atmel_i2s_regmap_config = {
  138. .reg_bits = 32,
  139. .reg_stride = 4,
  140. .val_bits = 32,
  141. .max_register = ATMEL_I2SC_VERSION,
  142. };
  143. struct atmel_i2s_gck_param {
  144. int fs;
  145. unsigned long mck;
  146. int imckdiv;
  147. int imckfs;
  148. };
  149. #define I2S_MCK_12M288 12288000UL
  150. #define I2S_MCK_11M2896 11289600UL
  151. /* mck = (32 * (imckfs+1) / (imckdiv+1)) * fs */
  152. static const struct atmel_i2s_gck_param gck_params[] = {
  153. /* mck = 12.288MHz */
  154. { 8000, I2S_MCK_12M288, 0, 47}, /* mck = 1536 fs */
  155. { 16000, I2S_MCK_12M288, 1, 47}, /* mck = 768 fs */
  156. { 24000, I2S_MCK_12M288, 3, 63}, /* mck = 512 fs */
  157. { 32000, I2S_MCK_12M288, 3, 47}, /* mck = 384 fs */
  158. { 48000, I2S_MCK_12M288, 7, 63}, /* mck = 256 fs */
  159. { 64000, I2S_MCK_12M288, 7, 47}, /* mck = 192 fs */
  160. { 96000, I2S_MCK_12M288, 7, 31}, /* mck = 128 fs */
  161. {192000, I2S_MCK_12M288, 7, 15}, /* mck = 64 fs */
  162. /* mck = 11.2896MHz */
  163. { 11025, I2S_MCK_11M2896, 1, 63}, /* mck = 1024 fs */
  164. { 22050, I2S_MCK_11M2896, 3, 63}, /* mck = 512 fs */
  165. { 44100, I2S_MCK_11M2896, 7, 63}, /* mck = 256 fs */
  166. { 88200, I2S_MCK_11M2896, 7, 31}, /* mck = 128 fs */
  167. {176400, I2S_MCK_11M2896, 7, 15}, /* mck = 64 fs */
  168. };
  169. struct atmel_i2s_dev;
  170. struct atmel_i2s_caps {
  171. int (*mck_init)(struct atmel_i2s_dev *, struct device_node *np);
  172. };
  173. struct atmel_i2s_dev {
  174. struct device *dev;
  175. struct regmap *regmap;
  176. struct clk *pclk;
  177. struct clk *gclk;
  178. struct clk *aclk;
  179. struct snd_dmaengine_dai_dma_data playback;
  180. struct snd_dmaengine_dai_dma_data capture;
  181. unsigned int fmt;
  182. const struct atmel_i2s_gck_param *gck_param;
  183. const struct atmel_i2s_caps *caps;
  184. };
  185. static irqreturn_t atmel_i2s_interrupt(int irq, void *dev_id)
  186. {
  187. struct atmel_i2s_dev *dev = dev_id;
  188. unsigned int sr, imr, pending, ch, mask;
  189. irqreturn_t ret = IRQ_NONE;
  190. regmap_read(dev->regmap, ATMEL_I2SC_SR, &sr);
  191. regmap_read(dev->regmap, ATMEL_I2SC_IMR, &imr);
  192. pending = sr & imr;
  193. if (!pending)
  194. return IRQ_NONE;
  195. if (pending & ATMEL_I2SC_INT_RXOR) {
  196. mask = ATMEL_I2SC_SR_RXOR;
  197. for (ch = 0; ch < ATMEL_I2SC_MAX_TDM_CHANNELS; ++ch) {
  198. if (sr & ATMEL_I2SC_SR_RXORCH(ch)) {
  199. mask |= ATMEL_I2SC_SR_RXORCH(ch);
  200. dev_err(dev->dev,
  201. "RX overrun on channel %d\n", ch);
  202. }
  203. }
  204. regmap_write(dev->regmap, ATMEL_I2SC_SCR, mask);
  205. ret = IRQ_HANDLED;
  206. }
  207. if (pending & ATMEL_I2SC_INT_TXUR) {
  208. mask = ATMEL_I2SC_SR_TXUR;
  209. for (ch = 0; ch < ATMEL_I2SC_MAX_TDM_CHANNELS; ++ch) {
  210. if (sr & ATMEL_I2SC_SR_TXURCH(ch)) {
  211. mask |= ATMEL_I2SC_SR_TXURCH(ch);
  212. dev_err(dev->dev,
  213. "TX underrun on channel %d\n", ch);
  214. }
  215. }
  216. regmap_write(dev->regmap, ATMEL_I2SC_SCR, mask);
  217. ret = IRQ_HANDLED;
  218. }
  219. return ret;
  220. }
  221. #define ATMEL_I2S_RATES SNDRV_PCM_RATE_8000_192000
  222. #define ATMEL_I2S_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
  223. SNDRV_PCM_FMTBIT_S16_LE | \
  224. SNDRV_PCM_FMTBIT_S18_3LE | \
  225. SNDRV_PCM_FMTBIT_S20_3LE | \
  226. SNDRV_PCM_FMTBIT_S24_3LE | \
  227. SNDRV_PCM_FMTBIT_S24_LE | \
  228. SNDRV_PCM_FMTBIT_S32_LE)
  229. static int atmel_i2s_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
  230. {
  231. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  232. dev->fmt = fmt;
  233. return 0;
  234. }
  235. static int atmel_i2s_prepare(struct snd_pcm_substream *substream,
  236. struct snd_soc_dai *dai)
  237. {
  238. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  239. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  240. unsigned int rhr, sr = 0;
  241. if (is_playback) {
  242. regmap_read(dev->regmap, ATMEL_I2SC_SR, &sr);
  243. if (sr & ATMEL_I2SC_SR_RXRDY) {
  244. /*
  245. * The RX Ready flag should not be set. However if here,
  246. * we flush (read) the Receive Holding Register to start
  247. * from a clean state.
  248. */
  249. dev_dbg(dev->dev, "RXRDY is set\n");
  250. regmap_read(dev->regmap, ATMEL_I2SC_RHR, &rhr);
  251. }
  252. }
  253. return 0;
  254. }
  255. static int atmel_i2s_get_gck_param(struct atmel_i2s_dev *dev, int fs)
  256. {
  257. int i, best;
  258. if (!dev->gclk || !dev->aclk) {
  259. dev_err(dev->dev, "cannot generate the I2S Master Clock\n");
  260. return -EINVAL;
  261. }
  262. /*
  263. * Find the best possible settings to generate the I2S Master Clock
  264. * from the PLL Audio.
  265. */
  266. dev->gck_param = NULL;
  267. best = INT_MAX;
  268. for (i = 0; i < ARRAY_SIZE(gck_params); ++i) {
  269. const struct atmel_i2s_gck_param *gck_param = &gck_params[i];
  270. int val = abs(fs - gck_param->fs);
  271. if (val < best) {
  272. best = val;
  273. dev->gck_param = gck_param;
  274. }
  275. }
  276. return 0;
  277. }
  278. static int atmel_i2s_hw_params(struct snd_pcm_substream *substream,
  279. struct snd_pcm_hw_params *params,
  280. struct snd_soc_dai *dai)
  281. {
  282. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  283. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  284. unsigned int mr = 0;
  285. int ret;
  286. switch (dev->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
  287. case SND_SOC_DAIFMT_I2S:
  288. mr |= ATMEL_I2SC_MR_FORMAT_I2S;
  289. break;
  290. default:
  291. dev_err(dev->dev, "unsupported bus format\n");
  292. return -EINVAL;
  293. }
  294. switch (dev->fmt & SND_SOC_DAIFMT_MASTER_MASK) {
  295. case SND_SOC_DAIFMT_CBS_CFS:
  296. /* codec is slave, so cpu is master */
  297. mr |= ATMEL_I2SC_MR_MODE_MASTER;
  298. ret = atmel_i2s_get_gck_param(dev, params_rate(params));
  299. if (ret)
  300. return ret;
  301. break;
  302. case SND_SOC_DAIFMT_CBM_CFM:
  303. /* codec is master, so cpu is slave */
  304. mr |= ATMEL_I2SC_MR_MODE_SLAVE;
  305. dev->gck_param = NULL;
  306. break;
  307. default:
  308. dev_err(dev->dev, "unsupported master/slave mode\n");
  309. return -EINVAL;
  310. }
  311. switch (params_channels(params)) {
  312. case 1:
  313. if (is_playback)
  314. mr |= ATMEL_I2SC_MR_TXMONO;
  315. else
  316. mr |= ATMEL_I2SC_MR_RXMONO;
  317. break;
  318. case 2:
  319. break;
  320. default:
  321. dev_err(dev->dev, "unsupported number of audio channels\n");
  322. return -EINVAL;
  323. }
  324. switch (params_format(params)) {
  325. case SNDRV_PCM_FORMAT_S8:
  326. mr |= ATMEL_I2SC_MR_DATALENGTH_8_BITS;
  327. break;
  328. case SNDRV_PCM_FORMAT_S16_LE:
  329. mr |= ATMEL_I2SC_MR_DATALENGTH_16_BITS;
  330. break;
  331. case SNDRV_PCM_FORMAT_S18_3LE:
  332. mr |= ATMEL_I2SC_MR_DATALENGTH_18_BITS | ATMEL_I2SC_MR_IWS;
  333. break;
  334. case SNDRV_PCM_FORMAT_S20_3LE:
  335. mr |= ATMEL_I2SC_MR_DATALENGTH_20_BITS | ATMEL_I2SC_MR_IWS;
  336. break;
  337. case SNDRV_PCM_FORMAT_S24_3LE:
  338. mr |= ATMEL_I2SC_MR_DATALENGTH_24_BITS | ATMEL_I2SC_MR_IWS;
  339. break;
  340. case SNDRV_PCM_FORMAT_S24_LE:
  341. mr |= ATMEL_I2SC_MR_DATALENGTH_24_BITS;
  342. break;
  343. case SNDRV_PCM_FORMAT_S32_LE:
  344. mr |= ATMEL_I2SC_MR_DATALENGTH_32_BITS;
  345. break;
  346. default:
  347. dev_err(dev->dev, "unsupported size/endianness for audio samples\n");
  348. return -EINVAL;
  349. }
  350. return regmap_write(dev->regmap, ATMEL_I2SC_MR, mr);
  351. }
  352. static int atmel_i2s_switch_mck_generator(struct atmel_i2s_dev *dev,
  353. bool enabled)
  354. {
  355. unsigned int mr, mr_mask;
  356. unsigned long aclk_rate;
  357. int ret;
  358. mr = 0;
  359. mr_mask = (ATMEL_I2SC_MR_IMCKDIV_MASK |
  360. ATMEL_I2SC_MR_IMCKFS_MASK |
  361. ATMEL_I2SC_MR_IMCKMODE_MASK);
  362. if (!enabled) {
  363. /* Disable the I2S Master Clock generator. */
  364. ret = regmap_write(dev->regmap, ATMEL_I2SC_CR,
  365. ATMEL_I2SC_CR_CKDIS);
  366. if (ret)
  367. return ret;
  368. /* Reset the I2S Master Clock generator settings. */
  369. ret = regmap_update_bits(dev->regmap, ATMEL_I2SC_MR,
  370. mr_mask, mr);
  371. if (ret)
  372. return ret;
  373. /* Disable/unprepare the PMC generated clock. */
  374. clk_disable_unprepare(dev->gclk);
  375. /* Disable/unprepare the PLL audio clock. */
  376. clk_disable_unprepare(dev->aclk);
  377. return 0;
  378. }
  379. if (!dev->gck_param)
  380. return -EINVAL;
  381. aclk_rate = dev->gck_param->mck * (dev->gck_param->imckdiv + 1);
  382. /* Fist change the PLL audio clock frequency ... */
  383. ret = clk_set_rate(dev->aclk, aclk_rate);
  384. if (ret)
  385. return ret;
  386. /*
  387. * ... then set the PMC generated clock rate to the very same frequency
  388. * to set the gclk parent to aclk.
  389. */
  390. ret = clk_set_rate(dev->gclk, aclk_rate);
  391. if (ret)
  392. return ret;
  393. /* Prepare and enable the PLL audio clock first ... */
  394. ret = clk_prepare_enable(dev->aclk);
  395. if (ret)
  396. return ret;
  397. /* ... then prepare and enable the PMC generated clock. */
  398. ret = clk_prepare_enable(dev->gclk);
  399. if (ret)
  400. return ret;
  401. /* Update the Mode Register to generate the I2S Master Clock. */
  402. mr |= ATMEL_I2SC_MR_IMCKDIV(dev->gck_param->imckdiv);
  403. mr |= ATMEL_I2SC_MR_IMCKFS(dev->gck_param->imckfs);
  404. mr |= ATMEL_I2SC_MR_IMCKMODE_I2SMCK;
  405. ret = regmap_update_bits(dev->regmap, ATMEL_I2SC_MR, mr_mask, mr);
  406. if (ret)
  407. return ret;
  408. /* Finally enable the I2S Master Clock generator. */
  409. return regmap_write(dev->regmap, ATMEL_I2SC_CR,
  410. ATMEL_I2SC_CR_CKEN);
  411. }
  412. static int atmel_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
  413. struct snd_soc_dai *dai)
  414. {
  415. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  416. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  417. bool is_master, mck_enabled;
  418. unsigned int cr, mr;
  419. int err;
  420. switch (cmd) {
  421. case SNDRV_PCM_TRIGGER_START:
  422. case SNDRV_PCM_TRIGGER_RESUME:
  423. case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  424. cr = is_playback ? ATMEL_I2SC_CR_TXEN : ATMEL_I2SC_CR_RXEN;
  425. mck_enabled = true;
  426. break;
  427. case SNDRV_PCM_TRIGGER_STOP:
  428. case SNDRV_PCM_TRIGGER_SUSPEND:
  429. case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  430. cr = is_playback ? ATMEL_I2SC_CR_TXDIS : ATMEL_I2SC_CR_RXDIS;
  431. mck_enabled = false;
  432. break;
  433. default:
  434. return -EINVAL;
  435. }
  436. /* Read the Mode Register to retrieve the master/slave state. */
  437. err = regmap_read(dev->regmap, ATMEL_I2SC_MR, &mr);
  438. if (err)
  439. return err;
  440. is_master = (mr & ATMEL_I2SC_MR_MODE_MASK) == ATMEL_I2SC_MR_MODE_MASTER;
  441. /* If master starts, enable the audio clock. */
  442. if (is_master && mck_enabled)
  443. err = atmel_i2s_switch_mck_generator(dev, true);
  444. if (err)
  445. return err;
  446. err = regmap_write(dev->regmap, ATMEL_I2SC_CR, cr);
  447. if (err)
  448. return err;
  449. /* If master stops, disable the audio clock. */
  450. if (is_master && !mck_enabled)
  451. err = atmel_i2s_switch_mck_generator(dev, false);
  452. return err;
  453. }
  454. static const struct snd_soc_dai_ops atmel_i2s_dai_ops = {
  455. .prepare = atmel_i2s_prepare,
  456. .trigger = atmel_i2s_trigger,
  457. .hw_params = atmel_i2s_hw_params,
  458. .set_fmt = atmel_i2s_set_dai_fmt,
  459. };
  460. static int atmel_i2s_dai_probe(struct snd_soc_dai *dai)
  461. {
  462. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  463. snd_soc_dai_init_dma_data(dai, &dev->playback, &dev->capture);
  464. return 0;
  465. }
  466. static struct snd_soc_dai_driver atmel_i2s_dai = {
  467. .probe = atmel_i2s_dai_probe,
  468. .playback = {
  469. .channels_min = 1,
  470. .channels_max = 2,
  471. .rates = ATMEL_I2S_RATES,
  472. .formats = ATMEL_I2S_FORMATS,
  473. },
  474. .capture = {
  475. .channels_min = 1,
  476. .channels_max = 2,
  477. .rates = ATMEL_I2S_RATES,
  478. .formats = ATMEL_I2S_FORMATS,
  479. },
  480. .ops = &atmel_i2s_dai_ops,
  481. .symmetric_rates = 1,
  482. };
  483. static const struct snd_soc_component_driver atmel_i2s_component = {
  484. .name = "atmel-i2s",
  485. };
  486. static int atmel_i2s_sama5d2_mck_init(struct atmel_i2s_dev *dev,
  487. struct device_node *np)
  488. {
  489. struct clk *muxclk;
  490. int err;
  491. if (!dev->gclk)
  492. return 0;
  493. /* muxclk is optional, so we return error for probe defer only */
  494. muxclk = devm_clk_get(dev->dev, "muxclk");
  495. if (IS_ERR(muxclk)) {
  496. err = PTR_ERR(muxclk);
  497. if (err == -EPROBE_DEFER)
  498. return -EPROBE_DEFER;
  499. dev_warn(dev->dev,
  500. "failed to get the I2S clock control: %d\n", err);
  501. return 0;
  502. }
  503. return clk_set_parent(muxclk, dev->gclk);
  504. }
  505. static const struct atmel_i2s_caps atmel_i2s_sama5d2_caps = {
  506. .mck_init = atmel_i2s_sama5d2_mck_init,
  507. };
  508. static const struct of_device_id atmel_i2s_dt_ids[] = {
  509. {
  510. .compatible = "atmel,sama5d2-i2s",
  511. .data = (void *)&atmel_i2s_sama5d2_caps,
  512. },
  513. { /* sentinel */ }
  514. };
  515. MODULE_DEVICE_TABLE(of, atmel_i2s_dt_ids);
  516. static int atmel_i2s_probe(struct platform_device *pdev)
  517. {
  518. struct device_node *np = pdev->dev.of_node;
  519. const struct of_device_id *match;
  520. struct atmel_i2s_dev *dev;
  521. struct resource *mem;
  522. struct regmap *regmap;
  523. void __iomem *base;
  524. int irq;
  525. int err = -ENXIO;
  526. unsigned int pcm_flags = 0;
  527. unsigned int version;
  528. /* Get memory for driver data. */
  529. dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
  530. if (!dev)
  531. return -ENOMEM;
  532. /* Get hardware capabilities. */
  533. match = of_match_node(atmel_i2s_dt_ids, np);
  534. if (match)
  535. dev->caps = match->data;
  536. /* Map I/O registers. */
  537. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  538. base = devm_ioremap_resource(&pdev->dev, mem);
  539. if (IS_ERR(base))
  540. return PTR_ERR(base);
  541. regmap = devm_regmap_init_mmio(&pdev->dev, base,
  542. &atmel_i2s_regmap_config);
  543. if (IS_ERR(regmap))
  544. return PTR_ERR(regmap);
  545. /* Request IRQ. */
  546. irq = platform_get_irq(pdev, 0);
  547. if (irq < 0)
  548. return irq;
  549. err = devm_request_irq(&pdev->dev, irq, atmel_i2s_interrupt, 0,
  550. dev_name(&pdev->dev), dev);
  551. if (err)
  552. return err;
  553. /* Get the peripheral clock. */
  554. dev->pclk = devm_clk_get(&pdev->dev, "pclk");
  555. if (IS_ERR(dev->pclk)) {
  556. err = PTR_ERR(dev->pclk);
  557. dev_err(&pdev->dev,
  558. "failed to get the peripheral clock: %d\n", err);
  559. return err;
  560. }
  561. /* Get audio clocks to generate the I2S Master Clock (I2S_MCK) */
  562. dev->aclk = devm_clk_get(&pdev->dev, "aclk");
  563. dev->gclk = devm_clk_get(&pdev->dev, "gclk");
  564. if (IS_ERR(dev->aclk) && IS_ERR(dev->gclk)) {
  565. if (PTR_ERR(dev->aclk) == -EPROBE_DEFER ||
  566. PTR_ERR(dev->gclk) == -EPROBE_DEFER)
  567. return -EPROBE_DEFER;
  568. /* Master Mode not supported */
  569. dev->aclk = NULL;
  570. dev->gclk = NULL;
  571. } else if (IS_ERR(dev->gclk)) {
  572. err = PTR_ERR(dev->gclk);
  573. dev_err(&pdev->dev,
  574. "failed to get the PMC generated clock: %d\n", err);
  575. return err;
  576. } else if (IS_ERR(dev->aclk)) {
  577. err = PTR_ERR(dev->aclk);
  578. dev_err(&pdev->dev,
  579. "failed to get the PLL audio clock: %d\n", err);
  580. return err;
  581. }
  582. dev->dev = &pdev->dev;
  583. dev->regmap = regmap;
  584. platform_set_drvdata(pdev, dev);
  585. /* Do hardware specific settings to initialize I2S_MCK generator */
  586. if (dev->caps && dev->caps->mck_init) {
  587. err = dev->caps->mck_init(dev, np);
  588. if (err)
  589. return err;
  590. }
  591. /* Enable the peripheral clock. */
  592. err = clk_prepare_enable(dev->pclk);
  593. if (err)
  594. return err;
  595. /* Get IP version. */
  596. regmap_read(dev->regmap, ATMEL_I2SC_VERSION, &version);
  597. dev_info(&pdev->dev, "hw version: %#x\n", version);
  598. /* Enable error interrupts. */
  599. regmap_write(dev->regmap, ATMEL_I2SC_IER,
  600. ATMEL_I2SC_INT_RXOR | ATMEL_I2SC_INT_TXUR);
  601. err = devm_snd_soc_register_component(&pdev->dev,
  602. &atmel_i2s_component,
  603. &atmel_i2s_dai, 1);
  604. if (err) {
  605. dev_err(&pdev->dev, "failed to register DAI: %d\n", err);
  606. clk_disable_unprepare(dev->pclk);
  607. return err;
  608. }
  609. /* Prepare DMA config. */
  610. dev->playback.addr = (dma_addr_t)mem->start + ATMEL_I2SC_THR;
  611. dev->playback.maxburst = 1;
  612. dev->capture.addr = (dma_addr_t)mem->start + ATMEL_I2SC_RHR;
  613. dev->capture.maxburst = 1;
  614. if (of_property_match_string(np, "dma-names", "rx-tx") == 0)
  615. pcm_flags |= SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX;
  616. err = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, pcm_flags);
  617. if (err) {
  618. dev_err(&pdev->dev, "failed to register PCM: %d\n", err);
  619. clk_disable_unprepare(dev->pclk);
  620. return err;
  621. }
  622. return 0;
  623. }
  624. static int atmel_i2s_remove(struct platform_device *pdev)
  625. {
  626. struct atmel_i2s_dev *dev = platform_get_drvdata(pdev);
  627. clk_disable_unprepare(dev->pclk);
  628. return 0;
  629. }
  630. static struct platform_driver atmel_i2s_driver = {
  631. .driver = {
  632. .name = "atmel_i2s",
  633. .of_match_table = of_match_ptr(atmel_i2s_dt_ids),
  634. },
  635. .probe = atmel_i2s_probe,
  636. .remove = atmel_i2s_remove,
  637. };
  638. module_platform_driver(atmel_i2s_driver);
  639. MODULE_DESCRIPTION("Atmel I2S Controller driver");
  640. MODULE_AUTHOR("Cyrille Pitchen <cyrille.pitchen@atmel.com>");
  641. MODULE_LICENSE("GPL v2");