pinctrl: qcom: apq8064: Correct interrupts in example
[cascardo/linux.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, int div)
407 {
408         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
409
410         switch (div_id) {
411         case 0:         /* MCLK divider */
412                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG,
413                                AHCLKXDIV(div - 1), AHCLKXDIV_MASK);
414                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG,
415                                AHCLKRDIV(div - 1), AHCLKRDIV_MASK);
416                 break;
417
418         case 1:         /* BCLK divider */
419                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG,
420                                ACLKXDIV(div - 1), ACLKXDIV_MASK);
421                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
422                                ACLKRDIV(div - 1), ACLKRDIV_MASK);
423                 mcasp->bclk_div = div;
424                 break;
425
426         case 2:         /* BCLK/LRCLK ratio */
427                 mcasp->bclk_lrclk_ratio = div;
428                 break;
429
430         default:
431                 return -EINVAL;
432         }
433
434         return 0;
435 }
436
437 static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
438                                     unsigned int freq, int dir)
439 {
440         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
441
442         if (dir == SND_SOC_CLOCK_OUT) {
443                 mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
444                 mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
445                 mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
446         } else {
447                 mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
448                 mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
449                 mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
450         }
451
452         mcasp->sysclk_freq = freq;
453
454         return 0;
455 }
456
457 static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
458                                        int word_length)
459 {
460         u32 fmt;
461         u32 tx_rotate = (word_length / 4) & 0x7;
462         u32 rx_rotate = (32 - word_length) / 4;
463         u32 mask = (1ULL << word_length) - 1;
464
465         /*
466          * if s BCLK-to-LRCLK ratio has been configured via the set_clkdiv()
467          * callback, take it into account here. That allows us to for example
468          * send 32 bits per channel to the codec, while only 16 of them carry
469          * audio payload.
470          * The clock ratio is given for a full period of data (for I2S format
471          * both left and right channels), so it has to be divided by number of
472          * tdm-slots (for I2S - divided by 2).
473          */
474         if (mcasp->bclk_lrclk_ratio)
475                 word_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;
476
477         /* mapping of the XSSZ bit-field as described in the datasheet */
478         fmt = (word_length >> 1) - 1;
479
480         if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
481                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXSSZ(fmt),
482                                RXSSZ(0x0F));
483                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXSSZ(fmt),
484                                TXSSZ(0x0F));
485                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(tx_rotate),
486                                TXROT(7));
487                 mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, RXROT(rx_rotate),
488                                RXROT(7));
489                 mcasp_set_reg(mcasp, DAVINCI_MCASP_RXMASK_REG, mask);
490         }
491
492         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXMASK_REG, mask);
493
494         return 0;
495 }
496
497 static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
498                                  int period_words, int channels)
499 {
500         struct davinci_pcm_dma_params *dma_params = &mcasp->dma_params[stream];
501         struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
502         int i;
503         u8 tx_ser = 0;
504         u8 rx_ser = 0;
505         u8 slots = mcasp->tdm_slots;
506         u8 max_active_serializers = (channels + slots - 1) / slots;
507         int active_serializers, numevt, n;
508         u32 reg;
509         /* Default configuration */
510         if (mcasp->version < MCASP_VERSION_3)
511                 mcasp_set_bits(mcasp, DAVINCI_MCASP_PWREMUMGT_REG, MCASP_SOFT);
512
513         /* All PINS as McASP */
514         mcasp_set_reg(mcasp, DAVINCI_MCASP_PFUNC_REG, 0x00000000);
515
516         if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
517                 mcasp_set_reg(mcasp, DAVINCI_MCASP_TXSTAT_REG, 0xFFFFFFFF);
518                 mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
519         } else {
520                 mcasp_set_reg(mcasp, DAVINCI_MCASP_RXSTAT_REG, 0xFFFFFFFF);
521                 mcasp_clr_bits(mcasp, DAVINCI_MCASP_REVTCTL_REG, RXDATADMADIS);
522         }
523
524         for (i = 0; i < mcasp->num_serializer; i++) {
525                 mcasp_set_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
526                                mcasp->serial_dir[i]);
527                 if (mcasp->serial_dir[i] == TX_MODE &&
528                                         tx_ser < max_active_serializers) {
529                         mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
530                         tx_ser++;
531                 } else if (mcasp->serial_dir[i] == RX_MODE &&
532                                         rx_ser < max_active_serializers) {
533                         mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
534                         rx_ser++;
535                 } else {
536                         mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
537                                        SRMOD_INACTIVE, SRMOD_MASK);
538                 }
539         }
540
541         if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
542                 active_serializers = tx_ser;
543                 numevt = mcasp->txnumevt;
544                 reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET;
545         } else {
546                 active_serializers = rx_ser;
547                 numevt = mcasp->rxnumevt;
548                 reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET;
549         }
550
551         if (active_serializers < max_active_serializers) {
552                 dev_warn(mcasp->dev, "stream has more channels (%d) than are "
553                          "enabled in mcasp (%d)\n", channels,
554                          active_serializers * slots);
555                 return -EINVAL;
556         }
557
558         /* AFIFO is not in use */
559         if (!numevt) {
560                 /* Configure the burst size for platform drivers */
561                 if (active_serializers > 1) {
562                         /*
563                          * If more than one serializers are in use we have one
564                          * DMA request to provide data for all serializers.
565                          * For example if three serializers are enabled the DMA
566                          * need to transfer three words per DMA request.
567                          */
568                         dma_params->fifo_level = active_serializers;
569                         dma_data->maxburst = active_serializers;
570                 } else {
571                         dma_params->fifo_level = 0;
572                         dma_data->maxburst = 0;
573                 }
574                 return 0;
575         }
576
577         if (period_words % active_serializers) {
578                 dev_err(mcasp->dev, "Invalid combination of period words and "
579                         "active serializers: %d, %d\n", period_words,
580                         active_serializers);
581                 return -EINVAL;
582         }
583
584         /*
585          * Calculate the optimal AFIFO depth for platform side:
586          * The number of words for numevt need to be in steps of active
587          * serializers.
588          */
589         n = numevt % active_serializers;
590         if (n)
591                 numevt += (active_serializers - n);
592         while (period_words % numevt && numevt > 0)
593                 numevt -= active_serializers;
594         if (numevt <= 0)
595                 numevt = active_serializers;
596
597         mcasp_mod_bits(mcasp, reg, active_serializers, NUMDMA_MASK);
598         mcasp_mod_bits(mcasp, reg, NUMEVT(numevt), NUMEVT_MASK);
599
600         /* Configure the burst size for platform drivers */
601         if (numevt == 1)
602                 numevt = 0;
603         dma_params->fifo_level = numevt;
604         dma_data->maxburst = numevt;
605
606         return 0;
607 }
608
609 static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream)
610 {
611         int i, active_slots;
612         u32 mask = 0;
613         u32 busel = 0;
614
615         if ((mcasp->tdm_slots < 2) || (mcasp->tdm_slots > 32)) {
616                 dev_err(mcasp->dev, "tdm slot %d not supported\n",
617                         mcasp->tdm_slots);
618                 return -EINVAL;
619         }
620
621         active_slots = (mcasp->tdm_slots > 31) ? 32 : mcasp->tdm_slots;
622         for (i = 0; i < active_slots; i++)
623                 mask |= (1 << i);
624
625         mcasp_clr_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, TX_ASYNC);
626
627         if (!mcasp->dat_port)
628                 busel = TXSEL;
629
630         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, mask);
631         mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, busel | TXORD);
632         mcasp_mod_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG,
633                        FSXMOD(mcasp->tdm_slots), FSXMOD(0x1FF));
634
635         mcasp_set_reg(mcasp, DAVINCI_MCASP_RXTDM_REG, mask);
636         mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, busel | RXORD);
637         mcasp_mod_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG,
638                        FSRMOD(mcasp->tdm_slots), FSRMOD(0x1FF));
639
640         return 0;
641 }
642
643 /* S/PDIF */
644 static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp,
645                               unsigned int rate)
646 {
647         u32 cs_value = 0;
648         u8 *cs_bytes = (u8*) &cs_value;
649
650         /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
651            and LSB first */
652         mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15));
653
654         /* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
655         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, AFSXE | FSXMOD(0x180));
656
657         /* Set the TX tdm : for all the slots */
658         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXTDM_REG, 0xFFFFFFFF);
659
660         /* Set the TX clock controls : div = 1 and internal */
661         mcasp_set_bits(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, ACLKXE | TX_ASYNC);
662
663         mcasp_clr_bits(mcasp, DAVINCI_MCASP_XEVTCTL_REG, TXDATADMADIS);
664
665         /* Only 44100 and 48000 are valid, both have the same setting */
666         mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3));
667
668         /* Enable the DIT */
669         mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN);
670
671         /* Set S/PDIF channel status bits */
672         cs_bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
673         cs_bytes[1] = IEC958_AES1_CON_PCM_CODER;
674
675         switch (rate) {
676         case 22050:
677                 cs_bytes[3] |= IEC958_AES3_CON_FS_22050;
678                 break;
679         case 24000:
680                 cs_bytes[3] |= IEC958_AES3_CON_FS_24000;
681                 break;
682         case 32000:
683                 cs_bytes[3] |= IEC958_AES3_CON_FS_32000;
684                 break;
685         case 44100:
686                 cs_bytes[3] |= IEC958_AES3_CON_FS_44100;
687                 break;
688         case 48000:
689                 cs_bytes[3] |= IEC958_AES3_CON_FS_48000;
690                 break;
691         case 88200:
692                 cs_bytes[3] |= IEC958_AES3_CON_FS_88200;
693                 break;
694         case 96000:
695                 cs_bytes[3] |= IEC958_AES3_CON_FS_96000;
696                 break;
697         case 176400:
698                 cs_bytes[3] |= IEC958_AES3_CON_FS_176400;
699                 break;
700         case 192000:
701                 cs_bytes[3] |= IEC958_AES3_CON_FS_192000;
702                 break;
703         default:
704                 printk(KERN_WARNING "unsupported sampling rate: %d\n", rate);
705                 return -EINVAL;
706         }
707
708         mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, cs_value);
709         mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, cs_value);
710
711         return 0;
712 }
713
714 static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
715                                         struct snd_pcm_hw_params *params,
716                                         struct snd_soc_dai *cpu_dai)
717 {
718         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
719         struct davinci_pcm_dma_params *dma_params =
720                                         &mcasp->dma_params[substream->stream];
721         int word_length;
722         int channels = params_channels(params);
723         int period_size = params_period_size(params);
724         int ret;
725
726         /*
727          * If mcasp is BCLK master, and a BCLK divider was not provided by
728          * the machine driver, we need to calculate the ratio.
729          */
730         if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) {
731                 unsigned int bclk_freq = snd_soc_params_to_bclk(params);
732                 unsigned int div = mcasp->sysclk_freq / bclk_freq;
733                 if (mcasp->sysclk_freq % bclk_freq != 0) {
734                         if (((mcasp->sysclk_freq / div) - bclk_freq) >
735                             (bclk_freq - (mcasp->sysclk_freq / (div+1))))
736                                 div++;
737                         dev_warn(mcasp->dev,
738                                  "Inaccurate BCLK: %u Hz / %u != %u Hz\n",
739                                  mcasp->sysclk_freq, div, bclk_freq);
740                 }
741                 davinci_mcasp_set_clkdiv(cpu_dai, 1, div);
742         }
743
744         ret = mcasp_common_hw_param(mcasp, substream->stream,
745                                     period_size * channels, channels);
746         if (ret)
747                 return ret;
748
749         if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE)
750                 ret = mcasp_dit_hw_param(mcasp, params_rate(params));
751         else
752                 ret = mcasp_i2s_hw_param(mcasp, substream->stream);
753
754         if (ret)
755                 return ret;
756
757         switch (params_format(params)) {
758         case SNDRV_PCM_FORMAT_U8:
759         case SNDRV_PCM_FORMAT_S8:
760                 dma_params->data_type = 1;
761                 word_length = 8;
762                 break;
763
764         case SNDRV_PCM_FORMAT_U16_LE:
765         case SNDRV_PCM_FORMAT_S16_LE:
766                 dma_params->data_type = 2;
767                 word_length = 16;
768                 break;
769
770         case SNDRV_PCM_FORMAT_U24_3LE:
771         case SNDRV_PCM_FORMAT_S24_3LE:
772                 dma_params->data_type = 3;
773                 word_length = 24;
774                 break;
775
776         case SNDRV_PCM_FORMAT_U24_LE:
777         case SNDRV_PCM_FORMAT_S24_LE:
778                 dma_params->data_type = 4;
779                 word_length = 24;
780                 break;
781
782         case SNDRV_PCM_FORMAT_U32_LE:
783         case SNDRV_PCM_FORMAT_S32_LE:
784                 dma_params->data_type = 4;
785                 word_length = 32;
786                 break;
787
788         default:
789                 printk(KERN_WARNING "davinci-mcasp: unsupported PCM format");
790                 return -EINVAL;
791         }
792
793         if (mcasp->version == MCASP_VERSION_2 && !dma_params->fifo_level)
794                 dma_params->acnt = 4;
795         else
796                 dma_params->acnt = dma_params->data_type;
797
798         davinci_config_channel_size(mcasp, word_length);
799
800         return 0;
801 }
802
803 static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
804                                      int cmd, struct snd_soc_dai *cpu_dai)
805 {
806         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
807         int ret = 0;
808
809         switch (cmd) {
810         case SNDRV_PCM_TRIGGER_RESUME:
811         case SNDRV_PCM_TRIGGER_START:
812         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
813                 davinci_mcasp_start(mcasp, substream->stream);
814                 break;
815         case SNDRV_PCM_TRIGGER_SUSPEND:
816         case SNDRV_PCM_TRIGGER_STOP:
817         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
818                 davinci_mcasp_stop(mcasp, substream->stream);
819                 break;
820
821         default:
822                 ret = -EINVAL;
823         }
824
825         return ret;
826 }
827
828 static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
829         .trigger        = davinci_mcasp_trigger,
830         .hw_params      = davinci_mcasp_hw_params,
831         .set_fmt        = davinci_mcasp_set_dai_fmt,
832         .set_clkdiv     = davinci_mcasp_set_clkdiv,
833         .set_sysclk     = davinci_mcasp_set_sysclk,
834 };
835
836 static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
837 {
838         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
839
840         if (mcasp->version >= MCASP_VERSION_3) {
841                 /* Using dmaengine PCM */
842                 dai->playback_dma_data =
843                                 &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
844                 dai->capture_dma_data =
845                                 &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
846         } else {
847                 /* Using davinci-pcm */
848                 dai->playback_dma_data = mcasp->dma_params;
849                 dai->capture_dma_data = mcasp->dma_params;
850         }
851
852         return 0;
853 }
854
855 #ifdef CONFIG_PM_SLEEP
856 static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
857 {
858         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
859         struct davinci_mcasp_context *context = &mcasp->context;
860
861         context->txfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG);
862         context->rxfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG);
863         context->txfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMT_REG);
864         context->rxfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMT_REG);
865         context->aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG);
866         context->aclkrctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG);
867         context->pdir = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDIR_REG);
868
869         return 0;
870 }
871
872 static int davinci_mcasp_resume(struct snd_soc_dai *dai)
873 {
874         struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
875         struct davinci_mcasp_context *context = &mcasp->context;
876
877         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG, context->txfmtctl);
878         mcasp_set_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG, context->rxfmtctl);
879         mcasp_set_reg(mcasp, DAVINCI_MCASP_TXFMT_REG, context->txfmt);
880         mcasp_set_reg(mcasp, DAVINCI_MCASP_RXFMT_REG, context->rxfmt);
881         mcasp_set_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG, context->aclkxctl);
882         mcasp_set_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, context->aclkrctl);
883         mcasp_set_reg(mcasp, DAVINCI_MCASP_PDIR_REG, context->pdir);
884
885         return 0;
886 }
887 #else
888 #define davinci_mcasp_suspend NULL
889 #define davinci_mcasp_resume NULL
890 #endif
891
892 #define DAVINCI_MCASP_RATES     SNDRV_PCM_RATE_8000_192000
893
894 #define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
895                                 SNDRV_PCM_FMTBIT_U8 | \
896                                 SNDRV_PCM_FMTBIT_S16_LE | \
897                                 SNDRV_PCM_FMTBIT_U16_LE | \
898                                 SNDRV_PCM_FMTBIT_S24_LE | \
899                                 SNDRV_PCM_FMTBIT_U24_LE | \
900                                 SNDRV_PCM_FMTBIT_S24_3LE | \
901                                 SNDRV_PCM_FMTBIT_U24_3LE | \
902                                 SNDRV_PCM_FMTBIT_S32_LE | \
903                                 SNDRV_PCM_FMTBIT_U32_LE)
904
905 static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
906         {
907                 .name           = "davinci-mcasp.0",
908                 .probe          = davinci_mcasp_dai_probe,
909                 .suspend        = davinci_mcasp_suspend,
910                 .resume         = davinci_mcasp_resume,
911                 .playback       = {
912                         .channels_min   = 2,
913                         .channels_max   = 32 * 16,
914                         .rates          = DAVINCI_MCASP_RATES,
915                         .formats        = DAVINCI_MCASP_PCM_FMTS,
916                 },
917                 .capture        = {
918                         .channels_min   = 2,
919                         .channels_max   = 32 * 16,
920                         .rates          = DAVINCI_MCASP_RATES,
921                         .formats        = DAVINCI_MCASP_PCM_FMTS,
922                 },
923                 .ops            = &davinci_mcasp_dai_ops,
924
925         },
926         {
927                 .name           = "davinci-mcasp.1",
928                 .probe          = davinci_mcasp_dai_probe,
929                 .playback       = {
930                         .channels_min   = 1,
931                         .channels_max   = 384,
932                         .rates          = DAVINCI_MCASP_RATES,
933                         .formats        = DAVINCI_MCASP_PCM_FMTS,
934                 },
935                 .ops            = &davinci_mcasp_dai_ops,
936         },
937
938 };
939
940 static const struct snd_soc_component_driver davinci_mcasp_component = {
941         .name           = "davinci-mcasp",
942 };
943
944 /* Some HW specific values and defaults. The rest is filled in from DT. */
945 static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
946         .tx_dma_offset = 0x400,
947         .rx_dma_offset = 0x400,
948         .asp_chan_q = EVENTQ_0,
949         .version = MCASP_VERSION_1,
950 };
951
952 static struct davinci_mcasp_pdata da830_mcasp_pdata = {
953         .tx_dma_offset = 0x2000,
954         .rx_dma_offset = 0x2000,
955         .asp_chan_q = EVENTQ_0,
956         .version = MCASP_VERSION_2,
957 };
958
959 static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
960         .tx_dma_offset = 0,
961         .rx_dma_offset = 0,
962         .asp_chan_q = EVENTQ_0,
963         .version = MCASP_VERSION_3,
964 };
965
966 static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
967         .tx_dma_offset = 0x200,
968         .rx_dma_offset = 0x284,
969         .asp_chan_q = EVENTQ_0,
970         .version = MCASP_VERSION_4,
971 };
972
973 static const struct of_device_id mcasp_dt_ids[] = {
974         {
975                 .compatible = "ti,dm646x-mcasp-audio",
976                 .data = &dm646x_mcasp_pdata,
977         },
978         {
979                 .compatible = "ti,da830-mcasp-audio",
980                 .data = &da830_mcasp_pdata,
981         },
982         {
983                 .compatible = "ti,am33xx-mcasp-audio",
984                 .data = &am33xx_mcasp_pdata,
985         },
986         {
987                 .compatible = "ti,dra7-mcasp-audio",
988                 .data = &dra7_mcasp_pdata,
989         },
990         { /* sentinel */ }
991 };
992 MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
993
994 static int mcasp_reparent_fck(struct platform_device *pdev)
995 {
996         struct device_node *node = pdev->dev.of_node;
997         struct clk *gfclk, *parent_clk;
998         const char *parent_name;
999         int ret;
1000
1001         if (!node)
1002                 return 0;
1003
1004         parent_name = of_get_property(node, "fck_parent", NULL);
1005         if (!parent_name)
1006                 return 0;
1007
1008         gfclk = clk_get(&pdev->dev, "fck");
1009         if (IS_ERR(gfclk)) {
1010                 dev_err(&pdev->dev, "failed to get fck\n");
1011                 return PTR_ERR(gfclk);
1012         }
1013
1014         parent_clk = clk_get(NULL, parent_name);
1015         if (IS_ERR(parent_clk)) {
1016                 dev_err(&pdev->dev, "failed to get parent clock\n");
1017                 ret = PTR_ERR(parent_clk);
1018                 goto err1;
1019         }
1020
1021         ret = clk_set_parent(gfclk, parent_clk);
1022         if (ret) {
1023                 dev_err(&pdev->dev, "failed to reparent fck\n");
1024                 goto err2;
1025         }
1026
1027 err2:
1028         clk_put(parent_clk);
1029 err1:
1030         clk_put(gfclk);
1031         return ret;
1032 }
1033
1034 static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
1035                                                 struct platform_device *pdev)
1036 {
1037         struct device_node *np = pdev->dev.of_node;
1038         struct davinci_mcasp_pdata *pdata = NULL;
1039         const struct of_device_id *match =
1040                         of_match_device(mcasp_dt_ids, &pdev->dev);
1041         struct of_phandle_args dma_spec;
1042
1043         const u32 *of_serial_dir32;
1044         u32 val;
1045         int i, ret = 0;
1046
1047         if (pdev->dev.platform_data) {
1048                 pdata = pdev->dev.platform_data;
1049                 return pdata;
1050         } else if (match) {
1051                 pdata = (struct davinci_mcasp_pdata*) match->data;
1052         } else {
1053                 /* control shouldn't reach here. something is wrong */
1054                 ret = -EINVAL;
1055                 goto nodata;
1056         }
1057
1058         ret = of_property_read_u32(np, "op-mode", &val);
1059         if (ret >= 0)
1060                 pdata->op_mode = val;
1061
1062         ret = of_property_read_u32(np, "tdm-slots", &val);
1063         if (ret >= 0) {
1064                 if (val < 2 || val > 32) {
1065                         dev_err(&pdev->dev,
1066                                 "tdm-slots must be in rage [2-32]\n");
1067                         ret = -EINVAL;
1068                         goto nodata;
1069                 }
1070
1071                 pdata->tdm_slots = val;
1072         }
1073
1074         of_serial_dir32 = of_get_property(np, "serial-dir", &val);
1075         val /= sizeof(u32);
1076         if (of_serial_dir32) {
1077                 u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
1078                                                  (sizeof(*of_serial_dir) * val),
1079                                                  GFP_KERNEL);
1080                 if (!of_serial_dir) {
1081                         ret = -ENOMEM;
1082                         goto nodata;
1083                 }
1084
1085                 for (i = 0; i < val; i++)
1086                         of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
1087
1088                 pdata->num_serializer = val;
1089                 pdata->serial_dir = of_serial_dir;
1090         }
1091
1092         ret = of_property_match_string(np, "dma-names", "tx");
1093         if (ret < 0)
1094                 goto nodata;
1095
1096         ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
1097                                          &dma_spec);
1098         if (ret < 0)
1099                 goto nodata;
1100
1101         pdata->tx_dma_channel = dma_spec.args[0];
1102
1103         ret = of_property_match_string(np, "dma-names", "rx");
1104         if (ret < 0)
1105                 goto nodata;
1106
1107         ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
1108                                          &dma_spec);
1109         if (ret < 0)
1110                 goto nodata;
1111
1112         pdata->rx_dma_channel = dma_spec.args[0];
1113
1114         ret = of_property_read_u32(np, "tx-num-evt", &val);
1115         if (ret >= 0)
1116                 pdata->txnumevt = val;
1117
1118         ret = of_property_read_u32(np, "rx-num-evt", &val);
1119         if (ret >= 0)
1120                 pdata->rxnumevt = val;
1121
1122         ret = of_property_read_u32(np, "sram-size-playback", &val);
1123         if (ret >= 0)
1124                 pdata->sram_size_playback = val;
1125
1126         ret = of_property_read_u32(np, "sram-size-capture", &val);
1127         if (ret >= 0)
1128                 pdata->sram_size_capture = val;
1129
1130         return  pdata;
1131
1132 nodata:
1133         if (ret < 0) {
1134                 dev_err(&pdev->dev, "Error populating platform data, err %d\n",
1135                         ret);
1136                 pdata = NULL;
1137         }
1138         return  pdata;
1139 }
1140
1141 static int davinci_mcasp_probe(struct platform_device *pdev)
1142 {
1143         struct davinci_pcm_dma_params *dma_params;
1144         struct snd_dmaengine_dai_dma_data *dma_data;
1145         struct resource *mem, *ioarea, *res, *dat;
1146         struct davinci_mcasp_pdata *pdata;
1147         struct davinci_mcasp *mcasp;
1148         int ret;
1149
1150         if (!pdev->dev.platform_data && !pdev->dev.of_node) {
1151                 dev_err(&pdev->dev, "No platform data supplied\n");
1152                 return -EINVAL;
1153         }
1154
1155         mcasp = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcasp),
1156                            GFP_KERNEL);
1157         if (!mcasp)
1158                 return  -ENOMEM;
1159
1160         pdata = davinci_mcasp_set_pdata_from_of(pdev);
1161         if (!pdata) {
1162                 dev_err(&pdev->dev, "no platform data\n");
1163                 return -EINVAL;
1164         }
1165
1166         mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
1167         if (!mem) {
1168                 dev_warn(mcasp->dev,
1169                          "\"mpu\" mem resource not found, using index 0\n");
1170                 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1171                 if (!mem) {
1172                         dev_err(&pdev->dev, "no mem resource?\n");
1173                         return -ENODEV;
1174                 }
1175         }
1176
1177         ioarea = devm_request_mem_region(&pdev->dev, mem->start,
1178                         resource_size(mem), pdev->name);
1179         if (!ioarea) {
1180                 dev_err(&pdev->dev, "Audio region already claimed\n");
1181                 return -EBUSY;
1182         }
1183
1184         pm_runtime_enable(&pdev->dev);
1185
1186         ret = pm_runtime_get_sync(&pdev->dev);
1187         if (IS_ERR_VALUE(ret)) {
1188                 dev_err(&pdev->dev, "pm_runtime_get_sync() failed\n");
1189                 return ret;
1190         }
1191
1192         mcasp->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
1193         if (!mcasp->base) {
1194                 dev_err(&pdev->dev, "ioremap failed\n");
1195                 ret = -ENOMEM;
1196                 goto err;
1197         }
1198
1199         mcasp->op_mode = pdata->op_mode;
1200         mcasp->tdm_slots = pdata->tdm_slots;
1201         mcasp->num_serializer = pdata->num_serializer;
1202         mcasp->serial_dir = pdata->serial_dir;
1203         mcasp->version = pdata->version;
1204         mcasp->txnumevt = pdata->txnumevt;
1205         mcasp->rxnumevt = pdata->rxnumevt;
1206
1207         mcasp->dev = &pdev->dev;
1208
1209         dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
1210         if (dat)
1211                 mcasp->dat_port = true;
1212
1213         dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_PLAYBACK];
1214         dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
1215         dma_params->asp_chan_q = pdata->asp_chan_q;
1216         dma_params->ram_chan_q = pdata->ram_chan_q;
1217         dma_params->sram_pool = pdata->sram_pool;
1218         dma_params->sram_size = pdata->sram_size_playback;
1219         if (dat)
1220                 dma_params->dma_addr = dat->start;
1221         else
1222                 dma_params->dma_addr = mem->start + pdata->tx_dma_offset;
1223
1224         /* Unconditional dmaengine stuff */
1225         dma_data->addr = dma_params->dma_addr;
1226
1227         res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
1228         if (res)
1229                 dma_params->channel = res->start;
1230         else
1231                 dma_params->channel = pdata->tx_dma_channel;
1232
1233         /* dmaengine filter data for DT and non-DT boot */
1234         if (pdev->dev.of_node)
1235                 dma_data->filter_data = "tx";
1236         else
1237                 dma_data->filter_data = &dma_params->channel;
1238
1239         dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_CAPTURE];
1240         dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
1241         dma_params->asp_chan_q = pdata->asp_chan_q;
1242         dma_params->ram_chan_q = pdata->ram_chan_q;
1243         dma_params->sram_pool = pdata->sram_pool;
1244         dma_params->sram_size = pdata->sram_size_capture;
1245         if (dat)
1246                 dma_params->dma_addr = dat->start;
1247         else
1248                 dma_params->dma_addr = mem->start + pdata->rx_dma_offset;
1249
1250         /* Unconditional dmaengine stuff */
1251         dma_data->addr = dma_params->dma_addr;
1252
1253         if (mcasp->version < MCASP_VERSION_3) {
1254                 mcasp->fifo_base = DAVINCI_MCASP_V2_AFIFO_BASE;
1255                 /* dma_params->dma_addr is pointing to the data port address */
1256                 mcasp->dat_port = true;
1257         } else {
1258                 mcasp->fifo_base = DAVINCI_MCASP_V3_AFIFO_BASE;
1259         }
1260
1261         res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
1262         if (res)
1263                 dma_params->channel = res->start;
1264         else
1265                 dma_params->channel = pdata->rx_dma_channel;
1266
1267         /* dmaengine filter data for DT and non-DT boot */
1268         if (pdev->dev.of_node)
1269                 dma_data->filter_data = "rx";
1270         else
1271                 dma_data->filter_data = &dma_params->channel;
1272
1273         dev_set_drvdata(&pdev->dev, mcasp);
1274
1275         mcasp_reparent_fck(pdev);
1276
1277         ret = devm_snd_soc_register_component(&pdev->dev,
1278                                         &davinci_mcasp_component,
1279                                         &davinci_mcasp_dai[pdata->op_mode], 1);
1280
1281         if (ret != 0)
1282                 goto err;
1283
1284         switch (mcasp->version) {
1285 #if IS_BUILTIN(CONFIG_SND_DAVINCI_SOC) || \
1286         (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
1287          IS_MODULE(CONFIG_SND_DAVINCI_SOC))
1288         case MCASP_VERSION_1:
1289         case MCASP_VERSION_2:
1290                 ret = davinci_soc_platform_register(&pdev->dev);
1291                 break;
1292 #endif
1293 #if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
1294         (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
1295          IS_MODULE(CONFIG_SND_EDMA_SOC))
1296         case MCASP_VERSION_3:
1297                 ret = edma_pcm_platform_register(&pdev->dev);
1298                 break;
1299 #endif
1300 #if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
1301         (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
1302          IS_MODULE(CONFIG_SND_OMAP_SOC))
1303         case MCASP_VERSION_4:
1304                 ret = omap_pcm_platform_register(&pdev->dev);
1305                 break;
1306 #endif
1307         default:
1308                 dev_err(&pdev->dev, "Invalid McASP version: %d\n",
1309                         mcasp->version);
1310                 ret = -EINVAL;
1311                 break;
1312         }
1313
1314         if (ret) {
1315                 dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
1316                 goto err;
1317         }
1318
1319         return 0;
1320
1321 err:
1322         pm_runtime_put_sync(&pdev->dev);
1323         pm_runtime_disable(&pdev->dev);
1324         return ret;
1325 }
1326
1327 static int davinci_mcasp_remove(struct platform_device *pdev)
1328 {
1329         pm_runtime_put_sync(&pdev->dev);
1330         pm_runtime_disable(&pdev->dev);
1331
1332         return 0;
1333 }
1334
1335 static struct platform_driver davinci_mcasp_driver = {
1336         .probe          = davinci_mcasp_probe,
1337         .remove         = davinci_mcasp_remove,
1338         .driver         = {
1339                 .name   = "davinci-mcasp",
1340                 .owner  = THIS_MODULE,
1341                 .of_match_table = mcasp_dt_ids,
1342         },
1343 };
1344
1345 module_platform_driver(davinci_mcasp_driver);
1346
1347 MODULE_AUTHOR("Steve Chen");
1348 MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
1349 MODULE_LICENSE("GPL");