atmel-i2s.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  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 snd_dmaengine_dai_dma_data playback;
  179. struct snd_dmaengine_dai_dma_data capture;
  180. unsigned int fmt;
  181. const struct atmel_i2s_gck_param *gck_param;
  182. const struct atmel_i2s_caps *caps;
  183. };
  184. static irqreturn_t atmel_i2s_interrupt(int irq, void *dev_id)
  185. {
  186. struct atmel_i2s_dev *dev = dev_id;
  187. unsigned int sr, imr, pending, ch, mask;
  188. irqreturn_t ret = IRQ_NONE;
  189. regmap_read(dev->regmap, ATMEL_I2SC_SR, &sr);
  190. regmap_read(dev->regmap, ATMEL_I2SC_IMR, &imr);
  191. pending = sr & imr;
  192. if (!pending)
  193. return IRQ_NONE;
  194. if (pending & ATMEL_I2SC_INT_RXOR) {
  195. mask = ATMEL_I2SC_SR_RXOR;
  196. for (ch = 0; ch < ATMEL_I2SC_MAX_TDM_CHANNELS; ++ch) {
  197. if (sr & ATMEL_I2SC_SR_RXORCH(ch)) {
  198. mask |= ATMEL_I2SC_SR_RXORCH(ch);
  199. dev_err(dev->dev,
  200. "RX overrun on channel %d\n", ch);
  201. }
  202. }
  203. regmap_write(dev->regmap, ATMEL_I2SC_SCR, mask);
  204. ret = IRQ_HANDLED;
  205. }
  206. if (pending & ATMEL_I2SC_INT_TXUR) {
  207. mask = ATMEL_I2SC_SR_TXUR;
  208. for (ch = 0; ch < ATMEL_I2SC_MAX_TDM_CHANNELS; ++ch) {
  209. if (sr & ATMEL_I2SC_SR_TXURCH(ch)) {
  210. mask |= ATMEL_I2SC_SR_TXURCH(ch);
  211. dev_err(dev->dev,
  212. "TX underrun on channel %d\n", ch);
  213. }
  214. }
  215. regmap_write(dev->regmap, ATMEL_I2SC_SCR, mask);
  216. ret = IRQ_HANDLED;
  217. }
  218. return ret;
  219. }
  220. #define ATMEL_I2S_RATES SNDRV_PCM_RATE_8000_192000
  221. #define ATMEL_I2S_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
  222. SNDRV_PCM_FMTBIT_S16_LE | \
  223. SNDRV_PCM_FMTBIT_S18_3LE | \
  224. SNDRV_PCM_FMTBIT_S20_3LE | \
  225. SNDRV_PCM_FMTBIT_S24_3LE | \
  226. SNDRV_PCM_FMTBIT_S24_LE | \
  227. SNDRV_PCM_FMTBIT_S32_LE)
  228. static int atmel_i2s_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
  229. {
  230. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  231. dev->fmt = fmt;
  232. return 0;
  233. }
  234. static int atmel_i2s_prepare(struct snd_pcm_substream *substream,
  235. struct snd_soc_dai *dai)
  236. {
  237. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  238. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  239. unsigned int rhr, sr = 0;
  240. if (is_playback) {
  241. regmap_read(dev->regmap, ATMEL_I2SC_SR, &sr);
  242. if (sr & ATMEL_I2SC_SR_RXRDY) {
  243. /*
  244. * The RX Ready flag should not be set. However if here,
  245. * we flush (read) the Receive Holding Register to start
  246. * from a clean state.
  247. */
  248. dev_dbg(dev->dev, "RXRDY is set\n");
  249. regmap_read(dev->regmap, ATMEL_I2SC_RHR, &rhr);
  250. }
  251. }
  252. return 0;
  253. }
  254. static int atmel_i2s_get_gck_param(struct atmel_i2s_dev *dev, int fs)
  255. {
  256. int i, best;
  257. if (!dev->gclk) {
  258. dev_err(dev->dev, "cannot generate the I2S Master Clock\n");
  259. return -EINVAL;
  260. }
  261. /*
  262. * Find the best possible settings to generate the I2S Master Clock
  263. * from the PLL Audio.
  264. */
  265. dev->gck_param = NULL;
  266. best = INT_MAX;
  267. for (i = 0; i < ARRAY_SIZE(gck_params); ++i) {
  268. const struct atmel_i2s_gck_param *gck_param = &gck_params[i];
  269. int val = abs(fs - gck_param->fs);
  270. if (val < best) {
  271. best = val;
  272. dev->gck_param = gck_param;
  273. }
  274. }
  275. return 0;
  276. }
  277. static int atmel_i2s_hw_params(struct snd_pcm_substream *substream,
  278. struct snd_pcm_hw_params *params,
  279. struct snd_soc_dai *dai)
  280. {
  281. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  282. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  283. unsigned int mr = 0;
  284. int ret;
  285. switch (dev->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
  286. case SND_SOC_DAIFMT_I2S:
  287. mr |= ATMEL_I2SC_MR_FORMAT_I2S;
  288. break;
  289. default:
  290. dev_err(dev->dev, "unsupported bus format\n");
  291. return -EINVAL;
  292. }
  293. switch (dev->fmt & SND_SOC_DAIFMT_MASTER_MASK) {
  294. case SND_SOC_DAIFMT_CBS_CFS:
  295. /* codec is slave, so cpu is master */
  296. mr |= ATMEL_I2SC_MR_MODE_MASTER;
  297. ret = atmel_i2s_get_gck_param(dev, params_rate(params));
  298. if (ret)
  299. return ret;
  300. break;
  301. case SND_SOC_DAIFMT_CBM_CFM:
  302. /* codec is master, so cpu is slave */
  303. mr |= ATMEL_I2SC_MR_MODE_SLAVE;
  304. dev->gck_param = NULL;
  305. break;
  306. default:
  307. dev_err(dev->dev, "unsupported master/slave mode\n");
  308. return -EINVAL;
  309. }
  310. switch (params_channels(params)) {
  311. case 1:
  312. if (is_playback)
  313. mr |= ATMEL_I2SC_MR_TXMONO;
  314. else
  315. mr |= ATMEL_I2SC_MR_RXMONO;
  316. break;
  317. case 2:
  318. break;
  319. default:
  320. dev_err(dev->dev, "unsupported number of audio channels\n");
  321. return -EINVAL;
  322. }
  323. switch (params_format(params)) {
  324. case SNDRV_PCM_FORMAT_S8:
  325. mr |= ATMEL_I2SC_MR_DATALENGTH_8_BITS;
  326. break;
  327. case SNDRV_PCM_FORMAT_S16_LE:
  328. mr |= ATMEL_I2SC_MR_DATALENGTH_16_BITS;
  329. break;
  330. case SNDRV_PCM_FORMAT_S18_3LE:
  331. mr |= ATMEL_I2SC_MR_DATALENGTH_18_BITS | ATMEL_I2SC_MR_IWS;
  332. break;
  333. case SNDRV_PCM_FORMAT_S20_3LE:
  334. mr |= ATMEL_I2SC_MR_DATALENGTH_20_BITS | ATMEL_I2SC_MR_IWS;
  335. break;
  336. case SNDRV_PCM_FORMAT_S24_3LE:
  337. mr |= ATMEL_I2SC_MR_DATALENGTH_24_BITS | ATMEL_I2SC_MR_IWS;
  338. break;
  339. case SNDRV_PCM_FORMAT_S24_LE:
  340. mr |= ATMEL_I2SC_MR_DATALENGTH_24_BITS;
  341. break;
  342. case SNDRV_PCM_FORMAT_S32_LE:
  343. mr |= ATMEL_I2SC_MR_DATALENGTH_32_BITS;
  344. break;
  345. default:
  346. dev_err(dev->dev, "unsupported size/endianness for audio samples\n");
  347. return -EINVAL;
  348. }
  349. return regmap_write(dev->regmap, ATMEL_I2SC_MR, mr);
  350. }
  351. static int atmel_i2s_switch_mck_generator(struct atmel_i2s_dev *dev,
  352. bool enabled)
  353. {
  354. unsigned int mr, mr_mask;
  355. unsigned long gclk_rate;
  356. int ret;
  357. mr = 0;
  358. mr_mask = (ATMEL_I2SC_MR_IMCKDIV_MASK |
  359. ATMEL_I2SC_MR_IMCKFS_MASK |
  360. ATMEL_I2SC_MR_IMCKMODE_MASK);
  361. if (!enabled) {
  362. /* Disable the I2S Master Clock generator. */
  363. ret = regmap_write(dev->regmap, ATMEL_I2SC_CR,
  364. ATMEL_I2SC_CR_CKDIS);
  365. if (ret)
  366. return ret;
  367. /* Reset the I2S Master Clock generator settings. */
  368. ret = regmap_update_bits(dev->regmap, ATMEL_I2SC_MR,
  369. mr_mask, mr);
  370. if (ret)
  371. return ret;
  372. /* Disable/unprepare the PMC generated clock. */
  373. clk_disable_unprepare(dev->gclk);
  374. return 0;
  375. }
  376. if (!dev->gck_param)
  377. return -EINVAL;
  378. gclk_rate = dev->gck_param->mck * (dev->gck_param->imckdiv + 1);
  379. ret = clk_set_rate(dev->gclk, gclk_rate);
  380. if (ret)
  381. return ret;
  382. ret = clk_prepare_enable(dev->gclk);
  383. if (ret)
  384. return ret;
  385. /* Update the Mode Register to generate the I2S Master Clock. */
  386. mr |= ATMEL_I2SC_MR_IMCKDIV(dev->gck_param->imckdiv);
  387. mr |= ATMEL_I2SC_MR_IMCKFS(dev->gck_param->imckfs);
  388. mr |= ATMEL_I2SC_MR_IMCKMODE_I2SMCK;
  389. ret = regmap_update_bits(dev->regmap, ATMEL_I2SC_MR, mr_mask, mr);
  390. if (ret)
  391. return ret;
  392. /* Finally enable the I2S Master Clock generator. */
  393. return regmap_write(dev->regmap, ATMEL_I2SC_CR,
  394. ATMEL_I2SC_CR_CKEN);
  395. }
  396. static int atmel_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
  397. struct snd_soc_dai *dai)
  398. {
  399. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  400. bool is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
  401. bool is_master, mck_enabled;
  402. unsigned int cr, mr;
  403. int err;
  404. switch (cmd) {
  405. case SNDRV_PCM_TRIGGER_START:
  406. case SNDRV_PCM_TRIGGER_RESUME:
  407. case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  408. cr = is_playback ? ATMEL_I2SC_CR_TXEN : ATMEL_I2SC_CR_RXEN;
  409. mck_enabled = true;
  410. break;
  411. case SNDRV_PCM_TRIGGER_STOP:
  412. case SNDRV_PCM_TRIGGER_SUSPEND:
  413. case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  414. cr = is_playback ? ATMEL_I2SC_CR_TXDIS : ATMEL_I2SC_CR_RXDIS;
  415. mck_enabled = false;
  416. break;
  417. default:
  418. return -EINVAL;
  419. }
  420. /* Read the Mode Register to retrieve the master/slave state. */
  421. err = regmap_read(dev->regmap, ATMEL_I2SC_MR, &mr);
  422. if (err)
  423. return err;
  424. is_master = (mr & ATMEL_I2SC_MR_MODE_MASK) == ATMEL_I2SC_MR_MODE_MASTER;
  425. /* If master starts, enable the audio clock. */
  426. if (is_master && mck_enabled)
  427. err = atmel_i2s_switch_mck_generator(dev, true);
  428. if (err)
  429. return err;
  430. err = regmap_write(dev->regmap, ATMEL_I2SC_CR, cr);
  431. if (err)
  432. return err;
  433. /* If master stops, disable the audio clock. */
  434. if (is_master && !mck_enabled)
  435. err = atmel_i2s_switch_mck_generator(dev, false);
  436. return err;
  437. }
  438. static const struct snd_soc_dai_ops atmel_i2s_dai_ops = {
  439. .prepare = atmel_i2s_prepare,
  440. .trigger = atmel_i2s_trigger,
  441. .hw_params = atmel_i2s_hw_params,
  442. .set_fmt = atmel_i2s_set_dai_fmt,
  443. };
  444. static int atmel_i2s_dai_probe(struct snd_soc_dai *dai)
  445. {
  446. struct atmel_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
  447. snd_soc_dai_init_dma_data(dai, &dev->playback, &dev->capture);
  448. return 0;
  449. }
  450. static struct snd_soc_dai_driver atmel_i2s_dai = {
  451. .probe = atmel_i2s_dai_probe,
  452. .playback = {
  453. .channels_min = 1,
  454. .channels_max = 2,
  455. .rates = ATMEL_I2S_RATES,
  456. .formats = ATMEL_I2S_FORMATS,
  457. },
  458. .capture = {
  459. .channels_min = 1,
  460. .channels_max = 2,
  461. .rates = ATMEL_I2S_RATES,
  462. .formats = ATMEL_I2S_FORMATS,
  463. },
  464. .ops = &atmel_i2s_dai_ops,
  465. .symmetric_rates = 1,
  466. };
  467. static const struct snd_soc_component_driver atmel_i2s_component = {
  468. .name = "atmel-i2s",
  469. };
  470. static int atmel_i2s_sama5d2_mck_init(struct atmel_i2s_dev *dev,
  471. struct device_node *np)
  472. {
  473. struct clk *muxclk;
  474. int err;
  475. if (!dev->gclk)
  476. return 0;
  477. /* muxclk is optional, so we return error for probe defer only */
  478. muxclk = devm_clk_get(dev->dev, "muxclk");
  479. if (IS_ERR(muxclk)) {
  480. err = PTR_ERR(muxclk);
  481. if (err == -EPROBE_DEFER)
  482. return -EPROBE_DEFER;
  483. dev_warn(dev->dev,
  484. "failed to get the I2S clock control: %d\n", err);
  485. return 0;
  486. }
  487. return clk_set_parent(muxclk, dev->gclk);
  488. }
  489. static const struct atmel_i2s_caps atmel_i2s_sama5d2_caps = {
  490. .mck_init = atmel_i2s_sama5d2_mck_init,
  491. };
  492. static const struct of_device_id atmel_i2s_dt_ids[] = {
  493. {
  494. .compatible = "atmel,sama5d2-i2s",
  495. .data = (void *)&atmel_i2s_sama5d2_caps,
  496. },
  497. { /* sentinel */ }
  498. };
  499. MODULE_DEVICE_TABLE(of, atmel_i2s_dt_ids);
  500. static int atmel_i2s_probe(struct platform_device *pdev)
  501. {
  502. struct device_node *np = pdev->dev.of_node;
  503. const struct of_device_id *match;
  504. struct atmel_i2s_dev *dev;
  505. struct resource *mem;
  506. struct regmap *regmap;
  507. void __iomem *base;
  508. int irq;
  509. int err = -ENXIO;
  510. unsigned int pcm_flags = 0;
  511. unsigned int version;
  512. /* Get memory for driver data. */
  513. dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
  514. if (!dev)
  515. return -ENOMEM;
  516. /* Get hardware capabilities. */
  517. match = of_match_node(atmel_i2s_dt_ids, np);
  518. if (match)
  519. dev->caps = match->data;
  520. /* Map I/O registers. */
  521. mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  522. base = devm_ioremap_resource(&pdev->dev, mem);
  523. if (IS_ERR(base))
  524. return PTR_ERR(base);
  525. regmap = devm_regmap_init_mmio(&pdev->dev, base,
  526. &atmel_i2s_regmap_config);
  527. if (IS_ERR(regmap))
  528. return PTR_ERR(regmap);
  529. /* Request IRQ. */
  530. irq = platform_get_irq(pdev, 0);
  531. if (irq < 0)
  532. return irq;
  533. err = devm_request_irq(&pdev->dev, irq, atmel_i2s_interrupt, 0,
  534. dev_name(&pdev->dev), dev);
  535. if (err)
  536. return err;
  537. /* Get the peripheral clock. */
  538. dev->pclk = devm_clk_get(&pdev->dev, "pclk");
  539. if (IS_ERR(dev->pclk)) {
  540. err = PTR_ERR(dev->pclk);
  541. dev_err(&pdev->dev,
  542. "failed to get the peripheral clock: %d\n", err);
  543. return err;
  544. }
  545. /* Get audio clock to generate the I2S Master Clock (I2S_MCK) */
  546. dev->gclk = devm_clk_get(&pdev->dev, "gclk");
  547. if (IS_ERR(dev->gclk)) {
  548. if (PTR_ERR(dev->gclk) == -EPROBE_DEFER)
  549. return -EPROBE_DEFER;
  550. /* Master Mode not supported */
  551. dev->gclk = NULL;
  552. }
  553. dev->dev = &pdev->dev;
  554. dev->regmap = regmap;
  555. platform_set_drvdata(pdev, dev);
  556. /* Do hardware specific settings to initialize I2S_MCK generator */
  557. if (dev->caps && dev->caps->mck_init) {
  558. err = dev->caps->mck_init(dev, np);
  559. if (err)
  560. return err;
  561. }
  562. /* Enable the peripheral clock. */
  563. err = clk_prepare_enable(dev->pclk);
  564. if (err)
  565. return err;
  566. /* Get IP version. */
  567. regmap_read(dev->regmap, ATMEL_I2SC_VERSION, &version);
  568. dev_info(&pdev->dev, "hw version: %#x\n", version);
  569. /* Enable error interrupts. */
  570. regmap_write(dev->regmap, ATMEL_I2SC_IER,
  571. ATMEL_I2SC_INT_RXOR | ATMEL_I2SC_INT_TXUR);
  572. err = devm_snd_soc_register_component(&pdev->dev,
  573. &atmel_i2s_component,
  574. &atmel_i2s_dai, 1);
  575. if (err) {
  576. dev_err(&pdev->dev, "failed to register DAI: %d\n", err);
  577. clk_disable_unprepare(dev->pclk);
  578. return err;
  579. }
  580. /* Prepare DMA config. */
  581. dev->playback.addr = (dma_addr_t)mem->start + ATMEL_I2SC_THR;
  582. dev->playback.maxburst = 1;
  583. dev->capture.addr = (dma_addr_t)mem->start + ATMEL_I2SC_RHR;
  584. dev->capture.maxburst = 1;
  585. if (of_property_match_string(np, "dma-names", "rx-tx") == 0)
  586. pcm_flags |= SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX;
  587. err = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, pcm_flags);
  588. if (err) {
  589. dev_err(&pdev->dev, "failed to register PCM: %d\n", err);
  590. clk_disable_unprepare(dev->pclk);
  591. return err;
  592. }
  593. return 0;
  594. }
  595. static int atmel_i2s_remove(struct platform_device *pdev)
  596. {
  597. struct atmel_i2s_dev *dev = platform_get_drvdata(pdev);
  598. clk_disable_unprepare(dev->pclk);
  599. return 0;
  600. }
  601. static struct platform_driver atmel_i2s_driver = {
  602. .driver = {
  603. .name = "atmel_i2s",
  604. .of_match_table = of_match_ptr(atmel_i2s_dt_ids),
  605. },
  606. .probe = atmel_i2s_probe,
  607. .remove = atmel_i2s_remove,
  608. };
  609. module_platform_driver(atmel_i2s_driver);
  610. MODULE_DESCRIPTION("Atmel I2S Controller driver");
  611. MODULE_AUTHOR("Cyrille Pitchen <cyrille.pitchen@atmel.com>");
  612. MODULE_LICENSE("GPL v2");