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