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