2 * ALSA SoC McASP Audio Layer for TI DAVINCI processor
4 * Multi-channel Audio Serial Port Driver
6 * Author: Nirmal Pandey <n-pandey@ti.com>,
7 * Suresh Rajashekara <suresh.r@ti.com>
8 * Steve Chen <schen@.mvista.com>
10 * Copyright: (C) 2009 MontaVista Software, Inc., <source@mvista.com>
11 * Copyright: (C) 2009 Texas Instruments, India
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.
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>
24 #include <linux/clk.h>
25 #include <linux/pm_runtime.h>
27 #include <linux/of_platform.h>
28 #include <linux/of_device.h>
29 #include <linux/platform_data/davinci_asp.h>
30 #include <linux/math64.h>
32 #include <sound/asoundef.h>
33 #include <sound/core.h>
34 #include <sound/pcm.h>
35 #include <sound/pcm_params.h>
36 #include <sound/initval.h>
37 #include <sound/soc.h>
38 #include <sound/dmaengine_pcm.h>
39 #include <sound/omap-pcm.h>
42 #include "davinci-mcasp.h"
44 #define MCASP_MAX_AFIFO_DEPTH 64
47 static u32 context_regs
[] = {
48 DAVINCI_MCASP_TXFMCTL_REG
,
49 DAVINCI_MCASP_RXFMCTL_REG
,
50 DAVINCI_MCASP_TXFMT_REG
,
51 DAVINCI_MCASP_RXFMT_REG
,
52 DAVINCI_MCASP_ACLKXCTL_REG
,
53 DAVINCI_MCASP_ACLKRCTL_REG
,
54 DAVINCI_MCASP_AHCLKXCTL_REG
,
55 DAVINCI_MCASP_AHCLKRCTL_REG
,
56 DAVINCI_MCASP_PDIR_REG
,
57 DAVINCI_MCASP_RXMASK_REG
,
58 DAVINCI_MCASP_TXMASK_REG
,
59 DAVINCI_MCASP_RXTDM_REG
,
60 DAVINCI_MCASP_TXTDM_REG
,
63 struct davinci_mcasp_context
{
64 u32 config_regs
[ARRAY_SIZE(context_regs
)];
65 u32 afifo_regs
[2]; /* for read/write fifo control registers */
66 u32
*xrsr_regs
; /* for serializer configuration */
71 struct davinci_mcasp_ruledata
{
72 struct davinci_mcasp
*mcasp
;
76 struct davinci_mcasp
{
77 struct snd_dmaengine_dai_dma_data dma_data
[2];
81 struct snd_pcm_substream
*substreams
[2];
84 /* McASP specific data */
100 /* McASP FIFO related */
106 /* Used for comstraint setting on the second stream */
109 #ifdef CONFIG_PM_SLEEP
110 struct davinci_mcasp_context context
;
113 struct davinci_mcasp_ruledata ruledata
[2];
114 struct snd_pcm_hw_constraint_list chconstr
[2];
117 static inline void mcasp_set_bits(struct davinci_mcasp
*mcasp
, u32 offset
,
120 void __iomem
*reg
= mcasp
->base
+ offset
;
121 __raw_writel(__raw_readl(reg
) | val
, reg
);
124 static inline void mcasp_clr_bits(struct davinci_mcasp
*mcasp
, u32 offset
,
127 void __iomem
*reg
= mcasp
->base
+ offset
;
128 __raw_writel((__raw_readl(reg
) & ~(val
)), reg
);
131 static inline void mcasp_mod_bits(struct davinci_mcasp
*mcasp
, u32 offset
,
134 void __iomem
*reg
= mcasp
->base
+ offset
;
135 __raw_writel((__raw_readl(reg
) & ~mask
) | val
, reg
);
138 static inline void mcasp_set_reg(struct davinci_mcasp
*mcasp
, u32 offset
,
141 __raw_writel(val
, mcasp
->base
+ offset
);
144 static inline u32
mcasp_get_reg(struct davinci_mcasp
*mcasp
, u32 offset
)
146 return (u32
)__raw_readl(mcasp
->base
+ offset
);
149 static void mcasp_set_ctl_reg(struct davinci_mcasp
*mcasp
, u32 ctl_reg
, u32 val
)
153 mcasp_set_bits(mcasp
, ctl_reg
, val
);
155 /* programming GBLCTL needs to read back from GBLCTL and verfiy */
156 /* loop count is to avoid the lock-up */
157 for (i
= 0; i
< 1000; i
++) {
158 if ((mcasp_get_reg(mcasp
, ctl_reg
) & val
) == val
)
162 if (i
== 1000 && ((mcasp_get_reg(mcasp
, ctl_reg
) & val
) != val
))
163 printk(KERN_ERR
"GBLCTL write error\n");
166 static bool mcasp_is_synchronous(struct davinci_mcasp
*mcasp
)
168 u32 rxfmctl
= mcasp_get_reg(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
);
169 u32 aclkxctl
= mcasp_get_reg(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
);
171 return !(aclkxctl
& TX_ASYNC
) && rxfmctl
& AFSRE
;
174 static void mcasp_start_rx(struct davinci_mcasp
*mcasp
)
176 if (mcasp
->rxnumevt
) { /* enable FIFO */
177 u32 reg
= mcasp
->fifo_base
+ MCASP_RFIFOCTL_OFFSET
;
179 mcasp_clr_bits(mcasp
, reg
, FIFO_ENABLE
);
180 mcasp_set_bits(mcasp
, reg
, FIFO_ENABLE
);
184 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, RXHCLKRST
);
185 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, RXCLKRST
);
187 * When ASYNC == 0 the transmit and receive sections operate
188 * synchronously from the transmit clock and frame sync. We need to make
189 * sure that the TX signlas are enabled when starting reception.
191 if (mcasp_is_synchronous(mcasp
)) {
192 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXHCLKRST
);
193 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXCLKRST
);
196 /* Activate serializer(s) */
197 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, RXSERCLR
);
198 /* Release RX state machine */
199 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, RXSMRST
);
200 /* Release Frame Sync generator */
201 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, RXFSRST
);
202 if (mcasp_is_synchronous(mcasp
))
203 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXFSRST
);
205 /* enable receive IRQs */
206 mcasp_set_bits(mcasp
, DAVINCI_MCASP_EVTCTLR_REG
,
207 mcasp
->irq_request
[SNDRV_PCM_STREAM_CAPTURE
]);
210 static void mcasp_start_tx(struct davinci_mcasp
*mcasp
)
214 if (mcasp
->txnumevt
) { /* enable FIFO */
215 u32 reg
= mcasp
->fifo_base
+ MCASP_WFIFOCTL_OFFSET
;
217 mcasp_clr_bits(mcasp
, reg
, FIFO_ENABLE
);
218 mcasp_set_bits(mcasp
, reg
, FIFO_ENABLE
);
222 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXHCLKRST
);
223 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXCLKRST
);
224 /* Activate serializer(s) */
225 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXSERCLR
);
227 /* wait for XDATA to be cleared */
229 while ((mcasp_get_reg(mcasp
, DAVINCI_MCASP_TXSTAT_REG
) & XRDATA
) &&
233 /* Release TX state machine */
234 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXSMRST
);
235 /* Release Frame Sync generator */
236 mcasp_set_ctl_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, TXFSRST
);
238 /* enable transmit IRQs */
239 mcasp_set_bits(mcasp
, DAVINCI_MCASP_EVTCTLX_REG
,
240 mcasp
->irq_request
[SNDRV_PCM_STREAM_PLAYBACK
]);
243 static void davinci_mcasp_start(struct davinci_mcasp
*mcasp
, int stream
)
247 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
)
248 mcasp_start_tx(mcasp
);
250 mcasp_start_rx(mcasp
);
253 static void mcasp_stop_rx(struct davinci_mcasp
*mcasp
)
255 /* disable IRQ sources */
256 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_EVTCTLR_REG
,
257 mcasp
->irq_request
[SNDRV_PCM_STREAM_CAPTURE
]);
260 * In synchronous mode stop the TX clocks if no other stream is
263 if (mcasp_is_synchronous(mcasp
) && !mcasp
->streams
)
264 mcasp_set_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, 0);
266 mcasp_set_reg(mcasp
, DAVINCI_MCASP_GBLCTLR_REG
, 0);
267 mcasp_set_reg(mcasp
, DAVINCI_MCASP_RXSTAT_REG
, 0xFFFFFFFF);
269 if (mcasp
->rxnumevt
) { /* disable FIFO */
270 u32 reg
= mcasp
->fifo_base
+ MCASP_RFIFOCTL_OFFSET
;
272 mcasp_clr_bits(mcasp
, reg
, FIFO_ENABLE
);
276 static void mcasp_stop_tx(struct davinci_mcasp
*mcasp
)
280 /* disable IRQ sources */
281 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_EVTCTLX_REG
,
282 mcasp
->irq_request
[SNDRV_PCM_STREAM_PLAYBACK
]);
285 * In synchronous mode keep TX clocks running if the capture stream is
288 if (mcasp_is_synchronous(mcasp
) && mcasp
->streams
)
289 val
= TXHCLKRST
| TXCLKRST
| TXFSRST
;
291 mcasp_set_reg(mcasp
, DAVINCI_MCASP_GBLCTLX_REG
, val
);
292 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXSTAT_REG
, 0xFFFFFFFF);
294 if (mcasp
->txnumevt
) { /* disable FIFO */
295 u32 reg
= mcasp
->fifo_base
+ MCASP_WFIFOCTL_OFFSET
;
297 mcasp_clr_bits(mcasp
, reg
, FIFO_ENABLE
);
301 static void davinci_mcasp_stop(struct davinci_mcasp
*mcasp
, int stream
)
305 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
)
306 mcasp_stop_tx(mcasp
);
308 mcasp_stop_rx(mcasp
);
311 static irqreturn_t
davinci_mcasp_tx_irq_handler(int irq
, void *data
)
313 struct davinci_mcasp
*mcasp
= (struct davinci_mcasp
*)data
;
314 struct snd_pcm_substream
*substream
;
315 u32 irq_mask
= mcasp
->irq_request
[SNDRV_PCM_STREAM_PLAYBACK
];
316 u32 handled_mask
= 0;
319 stat
= mcasp_get_reg(mcasp
, DAVINCI_MCASP_TXSTAT_REG
);
320 if (stat
& XUNDRN
& irq_mask
) {
321 dev_warn(mcasp
->dev
, "Transmit buffer underflow\n");
322 handled_mask
|= XUNDRN
;
324 substream
= mcasp
->substreams
[SNDRV_PCM_STREAM_PLAYBACK
];
326 snd_pcm_stream_lock_irq(substream
);
327 if (snd_pcm_running(substream
))
328 snd_pcm_stop(substream
, SNDRV_PCM_STATE_XRUN
);
329 snd_pcm_stream_unlock_irq(substream
);
334 dev_warn(mcasp
->dev
, "unhandled tx event. txstat: 0x%08x\n",
338 handled_mask
|= XRERR
;
340 /* Ack the handled event only */
341 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXSTAT_REG
, handled_mask
);
343 return IRQ_RETVAL(handled_mask
);
346 static irqreturn_t
davinci_mcasp_rx_irq_handler(int irq
, void *data
)
348 struct davinci_mcasp
*mcasp
= (struct davinci_mcasp
*)data
;
349 struct snd_pcm_substream
*substream
;
350 u32 irq_mask
= mcasp
->irq_request
[SNDRV_PCM_STREAM_CAPTURE
];
351 u32 handled_mask
= 0;
354 stat
= mcasp_get_reg(mcasp
, DAVINCI_MCASP_RXSTAT_REG
);
355 if (stat
& ROVRN
& irq_mask
) {
356 dev_warn(mcasp
->dev
, "Receive buffer overflow\n");
357 handled_mask
|= ROVRN
;
359 substream
= mcasp
->substreams
[SNDRV_PCM_STREAM_CAPTURE
];
361 snd_pcm_stream_lock_irq(substream
);
362 if (snd_pcm_running(substream
))
363 snd_pcm_stop(substream
, SNDRV_PCM_STATE_XRUN
);
364 snd_pcm_stream_unlock_irq(substream
);
369 dev_warn(mcasp
->dev
, "unhandled rx event. rxstat: 0x%08x\n",
373 handled_mask
|= XRERR
;
375 /* Ack the handled event only */
376 mcasp_set_reg(mcasp
, DAVINCI_MCASP_RXSTAT_REG
, handled_mask
);
378 return IRQ_RETVAL(handled_mask
);
381 static irqreturn_t
davinci_mcasp_common_irq_handler(int irq
, void *data
)
383 struct davinci_mcasp
*mcasp
= (struct davinci_mcasp
*)data
;
384 irqreturn_t ret
= IRQ_NONE
;
386 if (mcasp
->substreams
[SNDRV_PCM_STREAM_PLAYBACK
])
387 ret
= davinci_mcasp_tx_irq_handler(irq
, data
);
389 if (mcasp
->substreams
[SNDRV_PCM_STREAM_CAPTURE
])
390 ret
|= davinci_mcasp_rx_irq_handler(irq
, data
);
395 static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai
*cpu_dai
,
398 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(cpu_dai
);
407 pm_runtime_get_sync(mcasp
->dev
);
408 switch (fmt
& SND_SOC_DAIFMT_FORMAT_MASK
) {
409 case SND_SOC_DAIFMT_DSP_A
:
410 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXDUR
);
411 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRDUR
);
412 /* 1st data bit occur one ACLK cycle after the frame sync */
415 case SND_SOC_DAIFMT_DSP_B
:
416 case SND_SOC_DAIFMT_AC97
:
417 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXDUR
);
418 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRDUR
);
419 /* No delay after FS */
422 case SND_SOC_DAIFMT_I2S
:
423 /* configure a full-word SYNC pulse (LRCLK) */
424 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXDUR
);
425 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRDUR
);
426 /* 1st data bit occur one ACLK cycle after the frame sync */
428 /* FS need to be inverted */
431 case SND_SOC_DAIFMT_LEFT_J
:
432 /* configure a full-word SYNC pulse (LRCLK) */
433 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXDUR
);
434 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRDUR
);
435 /* No delay after FS */
443 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_TXFMT_REG
, FSXDLY(data_delay
),
445 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_RXFMT_REG
, FSRDLY(data_delay
),
448 switch (fmt
& SND_SOC_DAIFMT_MASTER_MASK
) {
449 case SND_SOC_DAIFMT_CBS_CFS
:
450 /* codec is clock and frame slave */
451 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXE
);
452 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, AFSXE
);
454 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRE
);
455 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, AFSRE
);
457 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, ACLKX
| ACLKR
);
458 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AFSX
| AFSR
);
459 mcasp
->bclk_master
= 1;
461 case SND_SOC_DAIFMT_CBS_CFM
:
462 /* codec is clock slave and frame master */
463 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXE
);
464 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, AFSXE
);
466 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRE
);
467 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, AFSRE
);
469 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, ACLKX
| ACLKR
);
470 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AFSX
| AFSR
);
471 mcasp
->bclk_master
= 1;
473 case SND_SOC_DAIFMT_CBM_CFS
:
474 /* codec is clock master and frame slave */
475 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXE
);
476 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, AFSXE
);
478 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRE
);
479 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, AFSRE
);
481 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, ACLKX
| ACLKR
);
482 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AFSX
| AFSR
);
483 mcasp
->bclk_master
= 0;
485 case SND_SOC_DAIFMT_CBM_CFM
:
486 /* codec is clock and frame master */
487 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXE
);
488 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, AFSXE
);
490 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRE
);
491 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, AFSRE
);
493 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
,
494 ACLKX
| AFSX
| ACLKR
| AHCLKR
| AFSR
);
495 mcasp
->bclk_master
= 0;
502 switch (fmt
& SND_SOC_DAIFMT_INV_MASK
) {
503 case SND_SOC_DAIFMT_IB_NF
:
504 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXPOL
);
505 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRPOL
);
506 fs_pol_rising
= true;
508 case SND_SOC_DAIFMT_NB_IF
:
509 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXPOL
);
510 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRPOL
);
511 fs_pol_rising
= false;
513 case SND_SOC_DAIFMT_IB_IF
:
514 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXPOL
);
515 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRPOL
);
516 fs_pol_rising
= false;
518 case SND_SOC_DAIFMT_NB_NF
:
519 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXPOL
);
520 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
, ACLKRPOL
);
521 fs_pol_rising
= true;
529 fs_pol_rising
= !fs_pol_rising
;
532 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXPOL
);
533 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRPOL
);
535 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, FSXPOL
);
536 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
, FSRPOL
);
539 mcasp
->dai_fmt
= fmt
;
541 pm_runtime_put(mcasp
->dev
);
545 static int __davinci_mcasp_set_clkdiv(struct davinci_mcasp
*mcasp
, int div_id
,
546 int div
, bool explicit)
548 pm_runtime_get_sync(mcasp
->dev
);
550 case MCASP_CLKDIV_AUXCLK
: /* MCLK divider */
551 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_AHCLKXCTL_REG
,
552 AHCLKXDIV(div
- 1), AHCLKXDIV_MASK
);
553 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_AHCLKRCTL_REG
,
554 AHCLKRDIV(div
- 1), AHCLKRDIV_MASK
);
557 case MCASP_CLKDIV_BCLK
: /* BCLK divider */
558 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
,
559 ACLKXDIV(div
- 1), ACLKXDIV_MASK
);
560 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_ACLKRCTL_REG
,
561 ACLKRDIV(div
- 1), ACLKRDIV_MASK
);
563 mcasp
->bclk_div
= div
;
566 case MCASP_CLKDIV_BCLK_FS_RATIO
:
568 * BCLK/LRCLK ratio descries how many bit-clock cycles
569 * fit into one frame. The clock ratio is given for a
570 * full period of data (for I2S format both left and
571 * right channels), so it has to be divided by number
572 * of tdm-slots (for I2S - divided by 2).
573 * Instead of storing this ratio, we calculate a new
574 * tdm_slot width by dividing the the ratio by the
575 * number of configured tdm slots.
577 mcasp
->slot_width
= div
/ mcasp
->tdm_slots
;
578 if (div
% mcasp
->tdm_slots
)
580 "%s(): BCLK/LRCLK %d is not divisible by %d tdm slots",
581 __func__
, div
, mcasp
->tdm_slots
);
588 pm_runtime_put(mcasp
->dev
);
592 static int davinci_mcasp_set_clkdiv(struct snd_soc_dai
*dai
, int div_id
,
595 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
597 return __davinci_mcasp_set_clkdiv(mcasp
, div_id
, div
, 1);
600 static int davinci_mcasp_set_sysclk(struct snd_soc_dai
*dai
, int clk_id
,
601 unsigned int freq
, int dir
)
603 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
605 pm_runtime_get_sync(mcasp
->dev
);
606 if (dir
== SND_SOC_CLOCK_OUT
) {
607 mcasp_set_bits(mcasp
, DAVINCI_MCASP_AHCLKXCTL_REG
, AHCLKXE
);
608 mcasp_set_bits(mcasp
, DAVINCI_MCASP_AHCLKRCTL_REG
, AHCLKRE
);
609 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AHCLKX
);
611 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_AHCLKXCTL_REG
, AHCLKXE
);
612 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_AHCLKRCTL_REG
, AHCLKRE
);
613 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AHCLKX
);
616 mcasp
->sysclk_freq
= freq
;
618 pm_runtime_put(mcasp
->dev
);
622 /* All serializers must have equal number of channels */
623 static int davinci_mcasp_ch_constraint(struct davinci_mcasp
*mcasp
, int stream
,
626 struct snd_pcm_hw_constraint_list
*cl
= &mcasp
->chconstr
[stream
];
627 unsigned int *list
= (unsigned int *) cl
->list
;
628 int slots
= mcasp
->tdm_slots
;
631 if (mcasp
->tdm_mask
[stream
])
632 slots
= hweight32(mcasp
->tdm_mask
[stream
]);
634 for (i
= 2; i
<= slots
; i
++)
637 for (i
= 2; i
<= serializers
; i
++)
638 list
[count
++] = i
*slots
;
645 static int davinci_mcasp_set_ch_constraints(struct davinci_mcasp
*mcasp
)
647 int rx_serializers
= 0, tx_serializers
= 0, ret
, i
;
649 for (i
= 0; i
< mcasp
->num_serializer
; i
++)
650 if (mcasp
->serial_dir
[i
] == TX_MODE
)
652 else if (mcasp
->serial_dir
[i
] == RX_MODE
)
655 ret
= davinci_mcasp_ch_constraint(mcasp
, SNDRV_PCM_STREAM_PLAYBACK
,
660 ret
= davinci_mcasp_ch_constraint(mcasp
, SNDRV_PCM_STREAM_CAPTURE
,
667 static int davinci_mcasp_set_tdm_slot(struct snd_soc_dai
*dai
,
668 unsigned int tx_mask
,
669 unsigned int rx_mask
,
670 int slots
, int slot_width
)
672 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
675 "%s() tx_mask 0x%08x rx_mask 0x%08x slots %d width %d\n",
676 __func__
, tx_mask
, rx_mask
, slots
, slot_width
);
678 if (tx_mask
>= (1<<slots
) || rx_mask
>= (1<<slots
)) {
680 "Bad tdm mask tx: 0x%08x rx: 0x%08x slots %d\n",
681 tx_mask
, rx_mask
, slots
);
686 (slot_width
< 8 || slot_width
> 32 || slot_width
% 4 != 0)) {
687 dev_err(mcasp
->dev
, "%s: Unsupported slot_width %d\n",
688 __func__
, slot_width
);
692 mcasp
->tdm_slots
= slots
;
693 mcasp
->tdm_mask
[SNDRV_PCM_STREAM_PLAYBACK
] = tx_mask
;
694 mcasp
->tdm_mask
[SNDRV_PCM_STREAM_CAPTURE
] = rx_mask
;
695 mcasp
->slot_width
= slot_width
;
697 return davinci_mcasp_set_ch_constraints(mcasp
);
700 static int davinci_config_channel_size(struct davinci_mcasp
*mcasp
,
704 u32 tx_rotate
= (sample_width
/ 4) & 0x7;
705 u32 mask
= (1ULL << sample_width
) - 1;
706 u32 slot_width
= sample_width
;
709 * For captured data we should not rotate, inversion and masking is
710 * enoguh to get the data to the right position:
711 * Format data from bus after reverse (XRBUF)
712 * S16_LE: |LSB|MSB|xxx|xxx| |xxx|xxx|MSB|LSB|
713 * S24_3LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
714 * S24_LE: |LSB|DAT|MSB|xxx| |xxx|MSB|DAT|LSB|
715 * S32_LE: |LSB|DAT|DAT|MSB| |MSB|DAT|DAT|LSB|
720 * Setting the tdm slot width either with set_clkdiv() or
721 * set_tdm_slot() allows us to for example send 32 bits per
722 * channel to the codec, while only 16 of them carry audio
725 if (mcasp
->slot_width
) {
727 * When we have more bclk then it is needed for the
728 * data, we need to use the rotation to move the
729 * received samples to have correct alignment.
731 slot_width
= mcasp
->slot_width
;
732 rx_rotate
= (slot_width
- sample_width
) / 4;
735 /* mapping of the XSSZ bit-field as described in the datasheet */
736 fmt
= (slot_width
>> 1) - 1;
738 if (mcasp
->op_mode
!= DAVINCI_MCASP_DIT_MODE
) {
739 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_RXFMT_REG
, RXSSZ(fmt
),
741 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_TXFMT_REG
, TXSSZ(fmt
),
743 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_TXFMT_REG
, TXROT(tx_rotate
),
745 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_RXFMT_REG
, RXROT(rx_rotate
),
747 mcasp_set_reg(mcasp
, DAVINCI_MCASP_RXMASK_REG
, mask
);
750 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXMASK_REG
, mask
);
755 static int mcasp_common_hw_param(struct davinci_mcasp
*mcasp
, int stream
,
756 int period_words
, int channels
)
758 struct snd_dmaengine_dai_dma_data
*dma_data
= &mcasp
->dma_data
[stream
];
762 u8 slots
= mcasp
->tdm_slots
;
763 u8 max_active_serializers
= (channels
+ slots
- 1) / slots
;
764 int active_serializers
, numevt
;
766 /* Default configuration */
767 if (mcasp
->version
< MCASP_VERSION_3
)
768 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PWREMUMGT_REG
, MCASP_SOFT
);
770 /* All PINS as McASP */
771 mcasp_set_reg(mcasp
, DAVINCI_MCASP_PFUNC_REG
, 0x00000000);
773 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
774 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXSTAT_REG
, 0xFFFFFFFF);
775 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_XEVTCTL_REG
, TXDATADMADIS
);
777 mcasp_set_reg(mcasp
, DAVINCI_MCASP_RXSTAT_REG
, 0xFFFFFFFF);
778 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_REVTCTL_REG
, RXDATADMADIS
);
781 for (i
= 0; i
< mcasp
->num_serializer
; i
++) {
782 mcasp_set_bits(mcasp
, DAVINCI_MCASP_XRSRCTL_REG(i
),
783 mcasp
->serial_dir
[i
]);
784 if (mcasp
->serial_dir
[i
] == TX_MODE
&&
785 tx_ser
< max_active_serializers
) {
786 mcasp_set_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AXR(i
));
787 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_XRSRCTL_REG(i
),
788 DISMOD_LOW
, DISMOD_MASK
);
790 } else if (mcasp
->serial_dir
[i
] == RX_MODE
&&
791 rx_ser
< max_active_serializers
) {
792 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_PDIR_REG
, AXR(i
));
795 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_XRSRCTL_REG(i
),
796 SRMOD_INACTIVE
, SRMOD_MASK
);
800 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
801 active_serializers
= tx_ser
;
802 numevt
= mcasp
->txnumevt
;
803 reg
= mcasp
->fifo_base
+ MCASP_WFIFOCTL_OFFSET
;
805 active_serializers
= rx_ser
;
806 numevt
= mcasp
->rxnumevt
;
807 reg
= mcasp
->fifo_base
+ MCASP_RFIFOCTL_OFFSET
;
810 if (active_serializers
< max_active_serializers
) {
811 dev_warn(mcasp
->dev
, "stream has more channels (%d) than are "
812 "enabled in mcasp (%d)\n", channels
,
813 active_serializers
* slots
);
817 /* AFIFO is not in use */
819 /* Configure the burst size for platform drivers */
820 if (active_serializers
> 1) {
822 * If more than one serializers are in use we have one
823 * DMA request to provide data for all serializers.
824 * For example if three serializers are enabled the DMA
825 * need to transfer three words per DMA request.
827 dma_data
->maxburst
= active_serializers
;
829 dma_data
->maxburst
= 0;
834 if (period_words
% active_serializers
) {
835 dev_err(mcasp
->dev
, "Invalid combination of period words and "
836 "active serializers: %d, %d\n", period_words
,
842 * Calculate the optimal AFIFO depth for platform side:
843 * The number of words for numevt need to be in steps of active
846 numevt
= (numevt
/ active_serializers
) * active_serializers
;
848 while (period_words
% numevt
&& numevt
> 0)
849 numevt
-= active_serializers
;
851 numevt
= active_serializers
;
853 mcasp_mod_bits(mcasp
, reg
, active_serializers
, NUMDMA_MASK
);
854 mcasp_mod_bits(mcasp
, reg
, NUMEVT(numevt
), NUMEVT_MASK
);
856 /* Configure the burst size for platform drivers */
859 dma_data
->maxburst
= numevt
;
864 static int mcasp_i2s_hw_param(struct davinci_mcasp
*mcasp
, int stream
,
869 int active_serializers
;
873 total_slots
= mcasp
->tdm_slots
;
876 * If more than one serializer is needed, then use them with
877 * all the specified tdm_slots. Otherwise, one serializer can
878 * cope with the transaction using just as many slots as there
879 * are channels in the stream.
881 if (mcasp
->tdm_mask
[stream
]) {
882 active_slots
= hweight32(mcasp
->tdm_mask
[stream
]);
883 active_serializers
= (channels
+ active_slots
- 1) /
885 if (active_serializers
== 1) {
886 active_slots
= channels
;
887 for (i
= 0; i
< total_slots
; i
++) {
888 if ((1 << i
) & mcasp
->tdm_mask
[stream
]) {
890 if (--active_slots
<= 0)
896 active_serializers
= (channels
+ total_slots
- 1) / total_slots
;
897 if (active_serializers
== 1)
898 active_slots
= channels
;
900 active_slots
= total_slots
;
902 for (i
= 0; i
< active_slots
; i
++)
905 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, TX_ASYNC
);
907 if (!mcasp
->dat_port
)
910 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
911 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXTDM_REG
, mask
);
912 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMT_REG
, busel
| TXORD
);
913 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
,
914 FSXMOD(total_slots
), FSXMOD(0x1FF));
915 } else if (stream
== SNDRV_PCM_STREAM_CAPTURE
) {
916 mcasp_set_reg(mcasp
, DAVINCI_MCASP_RXTDM_REG
, mask
);
917 mcasp_set_bits(mcasp
, DAVINCI_MCASP_RXFMT_REG
, busel
| RXORD
);
918 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_RXFMCTL_REG
,
919 FSRMOD(total_slots
), FSRMOD(0x1FF));
921 * If McASP is set to be TX/RX synchronous and the playback is
922 * not running already we need to configure the TX slots in
923 * order to have correct FSX on the bus
925 if (mcasp_is_synchronous(mcasp
) && !mcasp
->channels
)
926 mcasp_mod_bits(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
,
927 FSXMOD(total_slots
), FSXMOD(0x1FF));
934 static int mcasp_dit_hw_param(struct davinci_mcasp
*mcasp
,
938 u8
*cs_bytes
= (u8
*) &cs_value
;
940 /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0
942 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXFMT_REG
, TXROT(6) | TXSSZ(15));
944 /* Set TX frame synch : DIT Mode, 1 bit width, internal, rising edge */
945 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXFMCTL_REG
, AFSXE
| FSXMOD(0x180));
947 /* Set the TX tdm : for all the slots */
948 mcasp_set_reg(mcasp
, DAVINCI_MCASP_TXTDM_REG
, 0xFFFFFFFF);
950 /* Set the TX clock controls : div = 1 and internal */
951 mcasp_set_bits(mcasp
, DAVINCI_MCASP_ACLKXCTL_REG
, ACLKXE
| TX_ASYNC
);
953 mcasp_clr_bits(mcasp
, DAVINCI_MCASP_XEVTCTL_REG
, TXDATADMADIS
);
955 /* Only 44100 and 48000 are valid, both have the same setting */
956 mcasp_set_bits(mcasp
, DAVINCI_MCASP_AHCLKXCTL_REG
, AHCLKXDIV(3));
959 mcasp_set_bits(mcasp
, DAVINCI_MCASP_TXDITCTL_REG
, DITEN
);
961 /* Set S/PDIF channel status bits */
962 cs_bytes
[0] = IEC958_AES0_CON_NOT_COPYRIGHT
;
963 cs_bytes
[1] = IEC958_AES1_CON_PCM_CODER
;
967 cs_bytes
[3] |= IEC958_AES3_CON_FS_22050
;
970 cs_bytes
[3] |= IEC958_AES3_CON_FS_24000
;
973 cs_bytes
[3] |= IEC958_AES3_CON_FS_32000
;
976 cs_bytes
[3] |= IEC958_AES3_CON_FS_44100
;
979 cs_bytes
[3] |= IEC958_AES3_CON_FS_48000
;
982 cs_bytes
[3] |= IEC958_AES3_CON_FS_88200
;
985 cs_bytes
[3] |= IEC958_AES3_CON_FS_96000
;
988 cs_bytes
[3] |= IEC958_AES3_CON_FS_176400
;
991 cs_bytes
[3] |= IEC958_AES3_CON_FS_192000
;
994 printk(KERN_WARNING
"unsupported sampling rate: %d\n", rate
);
998 mcasp_set_reg(mcasp
, DAVINCI_MCASP_DITCSRA_REG
, cs_value
);
999 mcasp_set_reg(mcasp
, DAVINCI_MCASP_DITCSRB_REG
, cs_value
);
1004 static int davinci_mcasp_calc_clk_div(struct davinci_mcasp
*mcasp
,
1005 unsigned int bclk_freq
, bool set
)
1008 unsigned int sysclk_freq
= mcasp
->sysclk_freq
;
1009 u32 reg
= mcasp_get_reg(mcasp
, DAVINCI_MCASP_AHCLKXCTL_REG
);
1010 int div
= sysclk_freq
/ bclk_freq
;
1011 int rem
= sysclk_freq
% bclk_freq
;
1014 if (div
> (ACLKXDIV_MASK
+ 1)) {
1015 if (reg
& AHCLKXE
) {
1016 aux_div
= div
/ (ACLKXDIV_MASK
+ 1);
1017 if (div
% (ACLKXDIV_MASK
+ 1))
1020 sysclk_freq
/= aux_div
;
1021 div
= sysclk_freq
/ bclk_freq
;
1022 rem
= sysclk_freq
% bclk_freq
;
1024 dev_warn(mcasp
->dev
, "Too fast reference clock (%u)\n",
1031 ((sysclk_freq
/ div
) - bclk_freq
) >
1032 (bclk_freq
- (sysclk_freq
/ (div
+1)))) {
1034 rem
= rem
- bclk_freq
;
1037 error_ppm
= (div
*1000000 + (int)div64_long(1000000LL*rem
,
1038 (int)bclk_freq
)) / div
- 1000000;
1042 dev_info(mcasp
->dev
, "Sample-rate is off by %d PPM\n",
1045 __davinci_mcasp_set_clkdiv(mcasp
, MCASP_CLKDIV_BCLK
, div
, 0);
1047 __davinci_mcasp_set_clkdiv(mcasp
, MCASP_CLKDIV_AUXCLK
,
1054 static int davinci_mcasp_hw_params(struct snd_pcm_substream
*substream
,
1055 struct snd_pcm_hw_params
*params
,
1056 struct snd_soc_dai
*cpu_dai
)
1058 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(cpu_dai
);
1060 int channels
= params_channels(params
);
1061 int period_size
= params_period_size(params
);
1064 ret
= davinci_mcasp_set_dai_fmt(cpu_dai
, mcasp
->dai_fmt
);
1069 * If mcasp is BCLK master, and a BCLK divider was not provided by
1070 * the machine driver, we need to calculate the ratio.
1072 if (mcasp
->bclk_master
&& mcasp
->bclk_div
== 0 && mcasp
->sysclk_freq
) {
1073 int slots
= mcasp
->tdm_slots
;
1074 int rate
= params_rate(params
);
1075 int sbits
= params_width(params
);
1077 if (mcasp
->slot_width
)
1078 sbits
= mcasp
->slot_width
;
1080 davinci_mcasp_calc_clk_div(mcasp
, rate
* sbits
* slots
, true);
1083 ret
= mcasp_common_hw_param(mcasp
, substream
->stream
,
1084 period_size
* channels
, channels
);
1088 if (mcasp
->op_mode
== DAVINCI_MCASP_DIT_MODE
)
1089 ret
= mcasp_dit_hw_param(mcasp
, params_rate(params
));
1091 ret
= mcasp_i2s_hw_param(mcasp
, substream
->stream
,
1097 switch (params_format(params
)) {
1098 case SNDRV_PCM_FORMAT_U8
:
1099 case SNDRV_PCM_FORMAT_S8
:
1103 case SNDRV_PCM_FORMAT_U16_LE
:
1104 case SNDRV_PCM_FORMAT_S16_LE
:
1108 case SNDRV_PCM_FORMAT_U24_3LE
:
1109 case SNDRV_PCM_FORMAT_S24_3LE
:
1113 case SNDRV_PCM_FORMAT_U24_LE
:
1114 case SNDRV_PCM_FORMAT_S24_LE
:
1118 case SNDRV_PCM_FORMAT_U32_LE
:
1119 case SNDRV_PCM_FORMAT_S32_LE
:
1124 printk(KERN_WARNING
"davinci-mcasp: unsupported PCM format");
1128 davinci_config_channel_size(mcasp
, word_length
);
1130 if (mcasp
->op_mode
== DAVINCI_MCASP_IIS_MODE
)
1131 mcasp
->channels
= channels
;
1136 static int davinci_mcasp_trigger(struct snd_pcm_substream
*substream
,
1137 int cmd
, struct snd_soc_dai
*cpu_dai
)
1139 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(cpu_dai
);
1143 case SNDRV_PCM_TRIGGER_RESUME
:
1144 case SNDRV_PCM_TRIGGER_START
:
1145 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
1146 davinci_mcasp_start(mcasp
, substream
->stream
);
1148 case SNDRV_PCM_TRIGGER_SUSPEND
:
1149 case SNDRV_PCM_TRIGGER_STOP
:
1150 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
1151 davinci_mcasp_stop(mcasp
, substream
->stream
);
1161 static int davinci_mcasp_hw_rule_slot_width(struct snd_pcm_hw_params
*params
,
1162 struct snd_pcm_hw_rule
*rule
)
1164 struct davinci_mcasp_ruledata
*rd
= rule
->private;
1165 struct snd_mask
*fmt
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
1166 struct snd_mask nfmt
;
1169 snd_mask_none(&nfmt
);
1170 slot_width
= rd
->mcasp
->slot_width
;
1172 for (i
= 0; i
<= SNDRV_PCM_FORMAT_LAST
; i
++) {
1173 if (snd_mask_test(fmt
, i
)) {
1174 if (snd_pcm_format_width(i
) <= slot_width
) {
1175 snd_mask_set(&nfmt
, i
);
1180 return snd_mask_refine(fmt
, &nfmt
);
1183 static const unsigned int davinci_mcasp_dai_rates
[] = {
1184 8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000,
1185 88200, 96000, 176400, 192000,
1188 #define DAVINCI_MAX_RATE_ERROR_PPM 1000
1190 static int davinci_mcasp_hw_rule_rate(struct snd_pcm_hw_params
*params
,
1191 struct snd_pcm_hw_rule
*rule
)
1193 struct davinci_mcasp_ruledata
*rd
= rule
->private;
1194 struct snd_interval
*ri
=
1195 hw_param_interval(params
, SNDRV_PCM_HW_PARAM_RATE
);
1196 int sbits
= params_width(params
);
1197 int slots
= rd
->mcasp
->tdm_slots
;
1198 struct snd_interval range
;
1201 if (rd
->mcasp
->slot_width
)
1202 sbits
= rd
->mcasp
->slot_width
;
1204 snd_interval_any(&range
);
1207 for (i
= 0; i
< ARRAY_SIZE(davinci_mcasp_dai_rates
); i
++) {
1208 if (snd_interval_test(ri
, davinci_mcasp_dai_rates
[i
])) {
1209 uint bclk_freq
= sbits
*slots
*
1210 davinci_mcasp_dai_rates
[i
];
1213 ppm
= davinci_mcasp_calc_clk_div(rd
->mcasp
, bclk_freq
,
1215 if (abs(ppm
) < DAVINCI_MAX_RATE_ERROR_PPM
) {
1217 range
.min
= davinci_mcasp_dai_rates
[i
];
1220 range
.max
= davinci_mcasp_dai_rates
[i
];
1225 dev_dbg(rd
->mcasp
->dev
,
1226 "Frequencies %d-%d -> %d-%d for %d sbits and %d tdm slots\n",
1227 ri
->min
, ri
->max
, range
.min
, range
.max
, sbits
, slots
);
1229 return snd_interval_refine(hw_param_interval(params
, rule
->var
),
1233 static int davinci_mcasp_hw_rule_format(struct snd_pcm_hw_params
*params
,
1234 struct snd_pcm_hw_rule
*rule
)
1236 struct davinci_mcasp_ruledata
*rd
= rule
->private;
1237 struct snd_mask
*fmt
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
1238 struct snd_mask nfmt
;
1239 int rate
= params_rate(params
);
1240 int slots
= rd
->mcasp
->tdm_slots
;
1243 snd_mask_none(&nfmt
);
1245 for (i
= 0; i
<= SNDRV_PCM_FORMAT_LAST
; i
++) {
1246 if (snd_mask_test(fmt
, i
)) {
1247 uint sbits
= snd_pcm_format_width(i
);
1250 if (rd
->mcasp
->slot_width
)
1251 sbits
= rd
->mcasp
->slot_width
;
1253 ppm
= davinci_mcasp_calc_clk_div(rd
->mcasp
,
1254 sbits
* slots
* rate
,
1256 if (abs(ppm
) < DAVINCI_MAX_RATE_ERROR_PPM
) {
1257 snd_mask_set(&nfmt
, i
);
1262 dev_dbg(rd
->mcasp
->dev
,
1263 "%d possible sample format for %d Hz and %d tdm slots\n",
1264 count
, rate
, slots
);
1266 return snd_mask_refine(fmt
, &nfmt
);
1269 static int davinci_mcasp_startup(struct snd_pcm_substream
*substream
,
1270 struct snd_soc_dai
*cpu_dai
)
1272 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(cpu_dai
);
1273 struct davinci_mcasp_ruledata
*ruledata
=
1274 &mcasp
->ruledata
[substream
->stream
];
1275 u32 max_channels
= 0;
1277 int tdm_slots
= mcasp
->tdm_slots
;
1279 /* Do not allow more then one stream per direction */
1280 if (mcasp
->substreams
[substream
->stream
])
1283 mcasp
->substreams
[substream
->stream
] = substream
;
1285 if (mcasp
->tdm_mask
[substream
->stream
])
1286 tdm_slots
= hweight32(mcasp
->tdm_mask
[substream
->stream
]);
1288 if (mcasp
->op_mode
== DAVINCI_MCASP_DIT_MODE
)
1292 * Limit the maximum allowed channels for the first stream:
1293 * number of serializers for the direction * tdm slots per serializer
1295 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
1300 for (i
= 0; i
< mcasp
->num_serializer
; i
++) {
1301 if (mcasp
->serial_dir
[i
] == dir
)
1304 ruledata
->serializers
= max_channels
;
1305 ruledata
->mcasp
= mcasp
;
1306 max_channels
*= tdm_slots
;
1308 * If the already active stream has less channels than the calculated
1309 * limnit based on the seirializers * tdm_slots, we need to use that as
1310 * a constraint for the second stream.
1311 * Otherwise (first stream or less allowed channels) we use the
1312 * calculated constraint.
1314 if (mcasp
->channels
&& mcasp
->channels
< max_channels
)
1315 max_channels
= mcasp
->channels
;
1317 * But we can always allow channels upto the amount of
1318 * the available tdm_slots.
1320 if (max_channels
< tdm_slots
)
1321 max_channels
= tdm_slots
;
1323 snd_pcm_hw_constraint_minmax(substream
->runtime
,
1324 SNDRV_PCM_HW_PARAM_CHANNELS
,
1327 snd_pcm_hw_constraint_list(substream
->runtime
,
1328 0, SNDRV_PCM_HW_PARAM_CHANNELS
,
1329 &mcasp
->chconstr
[substream
->stream
]);
1331 if (mcasp
->slot_width
) {
1332 /* Only allow formats require <= slot_width bits on the bus */
1333 ret
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
1334 SNDRV_PCM_HW_PARAM_FORMAT
,
1335 davinci_mcasp_hw_rule_slot_width
,
1337 SNDRV_PCM_HW_PARAM_FORMAT
, -1);
1343 * If we rely on implicit BCLK divider setting we should
1344 * set constraints based on what we can provide.
1346 if (mcasp
->bclk_master
&& mcasp
->bclk_div
== 0 && mcasp
->sysclk_freq
) {
1347 ret
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
1348 SNDRV_PCM_HW_PARAM_RATE
,
1349 davinci_mcasp_hw_rule_rate
,
1351 SNDRV_PCM_HW_PARAM_FORMAT
, -1);
1354 ret
= snd_pcm_hw_rule_add(substream
->runtime
, 0,
1355 SNDRV_PCM_HW_PARAM_FORMAT
,
1356 davinci_mcasp_hw_rule_format
,
1358 SNDRV_PCM_HW_PARAM_RATE
, -1);
1366 static void davinci_mcasp_shutdown(struct snd_pcm_substream
*substream
,
1367 struct snd_soc_dai
*cpu_dai
)
1369 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(cpu_dai
);
1371 mcasp
->substreams
[substream
->stream
] = NULL
;
1373 if (mcasp
->op_mode
== DAVINCI_MCASP_DIT_MODE
)
1376 if (!cpu_dai
->active
)
1377 mcasp
->channels
= 0;
1380 static const struct snd_soc_dai_ops davinci_mcasp_dai_ops
= {
1381 .startup
= davinci_mcasp_startup
,
1382 .shutdown
= davinci_mcasp_shutdown
,
1383 .trigger
= davinci_mcasp_trigger
,
1384 .hw_params
= davinci_mcasp_hw_params
,
1385 .set_fmt
= davinci_mcasp_set_dai_fmt
,
1386 .set_clkdiv
= davinci_mcasp_set_clkdiv
,
1387 .set_sysclk
= davinci_mcasp_set_sysclk
,
1388 .set_tdm_slot
= davinci_mcasp_set_tdm_slot
,
1391 static int davinci_mcasp_dai_probe(struct snd_soc_dai
*dai
)
1393 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
1395 dai
->playback_dma_data
= &mcasp
->dma_data
[SNDRV_PCM_STREAM_PLAYBACK
];
1396 dai
->capture_dma_data
= &mcasp
->dma_data
[SNDRV_PCM_STREAM_CAPTURE
];
1401 #ifdef CONFIG_PM_SLEEP
1402 static int davinci_mcasp_suspend(struct snd_soc_dai
*dai
)
1404 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
1405 struct davinci_mcasp_context
*context
= &mcasp
->context
;
1409 context
->pm_state
= pm_runtime_active(mcasp
->dev
);
1410 if (!context
->pm_state
)
1411 pm_runtime_get_sync(mcasp
->dev
);
1413 for (i
= 0; i
< ARRAY_SIZE(context_regs
); i
++)
1414 context
->config_regs
[i
] = mcasp_get_reg(mcasp
, context_regs
[i
]);
1416 if (mcasp
->txnumevt
) {
1417 reg
= mcasp
->fifo_base
+ MCASP_WFIFOCTL_OFFSET
;
1418 context
->afifo_regs
[0] = mcasp_get_reg(mcasp
, reg
);
1420 if (mcasp
->rxnumevt
) {
1421 reg
= mcasp
->fifo_base
+ MCASP_RFIFOCTL_OFFSET
;
1422 context
->afifo_regs
[1] = mcasp_get_reg(mcasp
, reg
);
1425 for (i
= 0; i
< mcasp
->num_serializer
; i
++)
1426 context
->xrsr_regs
[i
] = mcasp_get_reg(mcasp
,
1427 DAVINCI_MCASP_XRSRCTL_REG(i
));
1429 pm_runtime_put_sync(mcasp
->dev
);
1434 static int davinci_mcasp_resume(struct snd_soc_dai
*dai
)
1436 struct davinci_mcasp
*mcasp
= snd_soc_dai_get_drvdata(dai
);
1437 struct davinci_mcasp_context
*context
= &mcasp
->context
;
1441 pm_runtime_get_sync(mcasp
->dev
);
1443 for (i
= 0; i
< ARRAY_SIZE(context_regs
); i
++)
1444 mcasp_set_reg(mcasp
, context_regs
[i
], context
->config_regs
[i
]);
1446 if (mcasp
->txnumevt
) {
1447 reg
= mcasp
->fifo_base
+ MCASP_WFIFOCTL_OFFSET
;
1448 mcasp_set_reg(mcasp
, reg
, context
->afifo_regs
[0]);
1450 if (mcasp
->rxnumevt
) {
1451 reg
= mcasp
->fifo_base
+ MCASP_RFIFOCTL_OFFSET
;
1452 mcasp_set_reg(mcasp
, reg
, context
->afifo_regs
[1]);
1455 for (i
= 0; i
< mcasp
->num_serializer
; i
++)
1456 mcasp_set_reg(mcasp
, DAVINCI_MCASP_XRSRCTL_REG(i
),
1457 context
->xrsr_regs
[i
]);
1459 if (!context
->pm_state
)
1460 pm_runtime_put_sync(mcasp
->dev
);
1465 #define davinci_mcasp_suspend NULL
1466 #define davinci_mcasp_resume NULL
1469 #define DAVINCI_MCASP_RATES SNDRV_PCM_RATE_8000_192000
1471 #define DAVINCI_MCASP_PCM_FMTS (SNDRV_PCM_FMTBIT_S8 | \
1472 SNDRV_PCM_FMTBIT_U8 | \
1473 SNDRV_PCM_FMTBIT_S16_LE | \
1474 SNDRV_PCM_FMTBIT_U16_LE | \
1475 SNDRV_PCM_FMTBIT_S24_LE | \
1476 SNDRV_PCM_FMTBIT_U24_LE | \
1477 SNDRV_PCM_FMTBIT_S24_3LE | \
1478 SNDRV_PCM_FMTBIT_U24_3LE | \
1479 SNDRV_PCM_FMTBIT_S32_LE | \
1480 SNDRV_PCM_FMTBIT_U32_LE)
1482 static struct snd_soc_dai_driver davinci_mcasp_dai
[] = {
1484 .name
= "davinci-mcasp.0",
1485 .probe
= davinci_mcasp_dai_probe
,
1486 .suspend
= davinci_mcasp_suspend
,
1487 .resume
= davinci_mcasp_resume
,
1490 .channels_max
= 32 * 16,
1491 .rates
= DAVINCI_MCASP_RATES
,
1492 .formats
= DAVINCI_MCASP_PCM_FMTS
,
1496 .channels_max
= 32 * 16,
1497 .rates
= DAVINCI_MCASP_RATES
,
1498 .formats
= DAVINCI_MCASP_PCM_FMTS
,
1500 .ops
= &davinci_mcasp_dai_ops
,
1502 .symmetric_samplebits
= 1,
1503 .symmetric_rates
= 1,
1506 .name
= "davinci-mcasp.1",
1507 .probe
= davinci_mcasp_dai_probe
,
1510 .channels_max
= 384,
1511 .rates
= DAVINCI_MCASP_RATES
,
1512 .formats
= DAVINCI_MCASP_PCM_FMTS
,
1514 .ops
= &davinci_mcasp_dai_ops
,
1519 static const struct snd_soc_component_driver davinci_mcasp_component
= {
1520 .name
= "davinci-mcasp",
1523 /* Some HW specific values and defaults. The rest is filled in from DT. */
1524 static struct davinci_mcasp_pdata dm646x_mcasp_pdata
= {
1525 .tx_dma_offset
= 0x400,
1526 .rx_dma_offset
= 0x400,
1527 .version
= MCASP_VERSION_1
,
1530 static struct davinci_mcasp_pdata da830_mcasp_pdata
= {
1531 .tx_dma_offset
= 0x2000,
1532 .rx_dma_offset
= 0x2000,
1533 .version
= MCASP_VERSION_2
,
1536 static struct davinci_mcasp_pdata am33xx_mcasp_pdata
= {
1539 .version
= MCASP_VERSION_3
,
1542 static struct davinci_mcasp_pdata dra7_mcasp_pdata
= {
1543 /* The CFG port offset will be calculated if it is needed */
1546 .version
= MCASP_VERSION_4
,
1549 static const struct of_device_id mcasp_dt_ids
[] = {
1551 .compatible
= "ti,dm646x-mcasp-audio",
1552 .data
= &dm646x_mcasp_pdata
,
1555 .compatible
= "ti,da830-mcasp-audio",
1556 .data
= &da830_mcasp_pdata
,
1559 .compatible
= "ti,am33xx-mcasp-audio",
1560 .data
= &am33xx_mcasp_pdata
,
1563 .compatible
= "ti,dra7-mcasp-audio",
1564 .data
= &dra7_mcasp_pdata
,
1568 MODULE_DEVICE_TABLE(of
, mcasp_dt_ids
);
1570 static int mcasp_reparent_fck(struct platform_device
*pdev
)
1572 struct device_node
*node
= pdev
->dev
.of_node
;
1573 struct clk
*gfclk
, *parent_clk
;
1574 const char *parent_name
;
1580 parent_name
= of_get_property(node
, "fck_parent", NULL
);
1584 dev_warn(&pdev
->dev
, "Update the bindings to use assigned-clocks!\n");
1586 gfclk
= clk_get(&pdev
->dev
, "fck");
1587 if (IS_ERR(gfclk
)) {
1588 dev_err(&pdev
->dev
, "failed to get fck\n");
1589 return PTR_ERR(gfclk
);
1592 parent_clk
= clk_get(NULL
, parent_name
);
1593 if (IS_ERR(parent_clk
)) {
1594 dev_err(&pdev
->dev
, "failed to get parent clock\n");
1595 ret
= PTR_ERR(parent_clk
);
1599 ret
= clk_set_parent(gfclk
, parent_clk
);
1601 dev_err(&pdev
->dev
, "failed to reparent fck\n");
1606 clk_put(parent_clk
);
1612 static struct davinci_mcasp_pdata
*davinci_mcasp_set_pdata_from_of(
1613 struct platform_device
*pdev
)
1615 struct device_node
*np
= pdev
->dev
.of_node
;
1616 struct davinci_mcasp_pdata
*pdata
= NULL
;
1617 const struct of_device_id
*match
=
1618 of_match_device(mcasp_dt_ids
, &pdev
->dev
);
1619 struct of_phandle_args dma_spec
;
1621 const u32
*of_serial_dir32
;
1625 if (pdev
->dev
.platform_data
) {
1626 pdata
= pdev
->dev
.platform_data
;
1629 pdata
= devm_kmemdup(&pdev
->dev
, match
->data
, sizeof(*pdata
),
1633 "Failed to allocate memory for pdata\n");
1638 /* control shouldn't reach here. something is wrong */
1643 ret
= of_property_read_u32(np
, "op-mode", &val
);
1645 pdata
->op_mode
= val
;
1647 ret
= of_property_read_u32(np
, "tdm-slots", &val
);
1649 if (val
< 2 || val
> 32) {
1651 "tdm-slots must be in rage [2-32]\n");
1656 pdata
->tdm_slots
= val
;
1659 of_serial_dir32
= of_get_property(np
, "serial-dir", &val
);
1661 if (of_serial_dir32
) {
1662 u8
*of_serial_dir
= devm_kzalloc(&pdev
->dev
,
1663 (sizeof(*of_serial_dir
) * val
),
1665 if (!of_serial_dir
) {
1670 for (i
= 0; i
< val
; i
++)
1671 of_serial_dir
[i
] = be32_to_cpup(&of_serial_dir32
[i
]);
1673 pdata
->num_serializer
= val
;
1674 pdata
->serial_dir
= of_serial_dir
;
1677 ret
= of_property_match_string(np
, "dma-names", "tx");
1681 ret
= of_parse_phandle_with_args(np
, "dmas", "#dma-cells", ret
,
1686 pdata
->tx_dma_channel
= dma_spec
.args
[0];
1688 /* RX is not valid in DIT mode */
1689 if (pdata
->op_mode
!= DAVINCI_MCASP_DIT_MODE
) {
1690 ret
= of_property_match_string(np
, "dma-names", "rx");
1694 ret
= of_parse_phandle_with_args(np
, "dmas", "#dma-cells", ret
,
1699 pdata
->rx_dma_channel
= dma_spec
.args
[0];
1702 ret
= of_property_read_u32(np
, "tx-num-evt", &val
);
1704 pdata
->txnumevt
= val
;
1706 ret
= of_property_read_u32(np
, "rx-num-evt", &val
);
1708 pdata
->rxnumevt
= val
;
1710 ret
= of_property_read_u32(np
, "sram-size-playback", &val
);
1712 pdata
->sram_size_playback
= val
;
1714 ret
= of_property_read_u32(np
, "sram-size-capture", &val
);
1716 pdata
->sram_size_capture
= val
;
1722 dev_err(&pdev
->dev
, "Error populating platform data, err %d\n",
1733 static const char *sdma_prefix
= "ti,omap";
1735 static int davinci_mcasp_get_dma_type(struct davinci_mcasp
*mcasp
)
1737 struct dma_chan
*chan
;
1741 if (!mcasp
->dev
->of_node
)
1744 tmp
= mcasp
->dma_data
[SNDRV_PCM_STREAM_PLAYBACK
].filter_data
;
1745 chan
= dma_request_slave_channel_reason(mcasp
->dev
, tmp
);
1747 if (PTR_ERR(chan
) != -EPROBE_DEFER
)
1749 "Can't verify DMA configuration (%ld)\n",
1751 return PTR_ERR(chan
);
1753 BUG_ON(!chan
->device
|| !chan
->device
->dev
);
1755 if (chan
->device
->dev
->of_node
)
1756 ret
= of_property_read_string(chan
->device
->dev
->of_node
,
1757 "compatible", &tmp
);
1759 dev_dbg(mcasp
->dev
, "DMA controller has no of-node\n");
1761 dma_release_channel(chan
);
1765 dev_dbg(mcasp
->dev
, "DMA controller compatible = \"%s\"\n", tmp
);
1766 if (!strncmp(tmp
, sdma_prefix
, strlen(sdma_prefix
)))
1772 static u32
davinci_mcasp_txdma_offset(struct davinci_mcasp_pdata
*pdata
)
1777 if (pdata
->version
!= MCASP_VERSION_4
)
1778 return pdata
->tx_dma_offset
;
1780 for (i
= 0; i
< pdata
->num_serializer
; i
++) {
1781 if (pdata
->serial_dir
[i
] == TX_MODE
) {
1783 offset
= DAVINCI_MCASP_TXBUF_REG(i
);
1785 pr_err("%s: Only one serializer allowed!\n",
1795 static u32
davinci_mcasp_rxdma_offset(struct davinci_mcasp_pdata
*pdata
)
1800 if (pdata
->version
!= MCASP_VERSION_4
)
1801 return pdata
->rx_dma_offset
;
1803 for (i
= 0; i
< pdata
->num_serializer
; i
++) {
1804 if (pdata
->serial_dir
[i
] == RX_MODE
) {
1806 offset
= DAVINCI_MCASP_RXBUF_REG(i
);
1808 pr_err("%s: Only one serializer allowed!\n",
1818 static int davinci_mcasp_probe(struct platform_device
*pdev
)
1820 struct snd_dmaengine_dai_dma_data
*dma_data
;
1821 struct resource
*mem
, *res
, *dat
;
1822 struct davinci_mcasp_pdata
*pdata
;
1823 struct davinci_mcasp
*mcasp
;
1829 if (!pdev
->dev
.platform_data
&& !pdev
->dev
.of_node
) {
1830 dev_err(&pdev
->dev
, "No platform data supplied\n");
1834 mcasp
= devm_kzalloc(&pdev
->dev
, sizeof(struct davinci_mcasp
),
1839 pdata
= davinci_mcasp_set_pdata_from_of(pdev
);
1841 dev_err(&pdev
->dev
, "no platform data\n");
1845 mem
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "mpu");
1847 dev_warn(mcasp
->dev
,
1848 "\"mpu\" mem resource not found, using index 0\n");
1849 mem
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1851 dev_err(&pdev
->dev
, "no mem resource?\n");
1856 mcasp
->base
= devm_ioremap_resource(&pdev
->dev
, mem
);
1857 if (IS_ERR(mcasp
->base
))
1858 return PTR_ERR(mcasp
->base
);
1860 pm_runtime_enable(&pdev
->dev
);
1862 mcasp
->op_mode
= pdata
->op_mode
;
1863 /* sanity check for tdm slots parameter */
1864 if (mcasp
->op_mode
== DAVINCI_MCASP_IIS_MODE
) {
1865 if (pdata
->tdm_slots
< 2) {
1866 dev_err(&pdev
->dev
, "invalid tdm slots: %d\n",
1868 mcasp
->tdm_slots
= 2;
1869 } else if (pdata
->tdm_slots
> 32) {
1870 dev_err(&pdev
->dev
, "invalid tdm slots: %d\n",
1872 mcasp
->tdm_slots
= 32;
1874 mcasp
->tdm_slots
= pdata
->tdm_slots
;
1878 mcasp
->num_serializer
= pdata
->num_serializer
;
1879 #ifdef CONFIG_PM_SLEEP
1880 mcasp
->context
.xrsr_regs
= devm_kzalloc(&pdev
->dev
,
1881 sizeof(u32
) * mcasp
->num_serializer
,
1884 mcasp
->serial_dir
= pdata
->serial_dir
;
1885 mcasp
->version
= pdata
->version
;
1886 mcasp
->txnumevt
= pdata
->txnumevt
;
1887 mcasp
->rxnumevt
= pdata
->rxnumevt
;
1889 mcasp
->dev
= &pdev
->dev
;
1891 irq
= platform_get_irq_byname(pdev
, "common");
1893 irq_name
= devm_kasprintf(&pdev
->dev
, GFP_KERNEL
, "%s_common",
1894 dev_name(&pdev
->dev
));
1895 ret
= devm_request_threaded_irq(&pdev
->dev
, irq
, NULL
,
1896 davinci_mcasp_common_irq_handler
,
1897 IRQF_ONESHOT
| IRQF_SHARED
,
1900 dev_err(&pdev
->dev
, "common IRQ request failed\n");
1904 mcasp
->irq_request
[SNDRV_PCM_STREAM_PLAYBACK
] = XUNDRN
;
1905 mcasp
->irq_request
[SNDRV_PCM_STREAM_CAPTURE
] = ROVRN
;
1908 irq
= platform_get_irq_byname(pdev
, "rx");
1910 irq_name
= devm_kasprintf(&pdev
->dev
, GFP_KERNEL
, "%s_rx",
1911 dev_name(&pdev
->dev
));
1912 ret
= devm_request_threaded_irq(&pdev
->dev
, irq
, NULL
,
1913 davinci_mcasp_rx_irq_handler
,
1914 IRQF_ONESHOT
, irq_name
, mcasp
);
1916 dev_err(&pdev
->dev
, "RX IRQ request failed\n");
1920 mcasp
->irq_request
[SNDRV_PCM_STREAM_CAPTURE
] = ROVRN
;
1923 irq
= platform_get_irq_byname(pdev
, "tx");
1925 irq_name
= devm_kasprintf(&pdev
->dev
, GFP_KERNEL
, "%s_tx",
1926 dev_name(&pdev
->dev
));
1927 ret
= devm_request_threaded_irq(&pdev
->dev
, irq
, NULL
,
1928 davinci_mcasp_tx_irq_handler
,
1929 IRQF_ONESHOT
, irq_name
, mcasp
);
1931 dev_err(&pdev
->dev
, "TX IRQ request failed\n");
1935 mcasp
->irq_request
[SNDRV_PCM_STREAM_PLAYBACK
] = XUNDRN
;
1938 dat
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "dat");
1940 mcasp
->dat_port
= true;
1942 dma_data
= &mcasp
->dma_data
[SNDRV_PCM_STREAM_PLAYBACK
];
1944 dma_data
->addr
= dat
->start
;
1946 dma_data
->addr
= mem
->start
+ davinci_mcasp_txdma_offset(pdata
);
1948 dma
= &mcasp
->dma_request
[SNDRV_PCM_STREAM_PLAYBACK
];
1949 res
= platform_get_resource(pdev
, IORESOURCE_DMA
, 0);
1953 *dma
= pdata
->tx_dma_channel
;
1955 /* dmaengine filter data for DT and non-DT boot */
1956 if (pdev
->dev
.of_node
)
1957 dma_data
->filter_data
= "tx";
1959 dma_data
->filter_data
= dma
;
1961 /* RX is not valid in DIT mode */
1962 if (mcasp
->op_mode
!= DAVINCI_MCASP_DIT_MODE
) {
1963 dma_data
= &mcasp
->dma_data
[SNDRV_PCM_STREAM_CAPTURE
];
1965 dma_data
->addr
= dat
->start
;
1968 mem
->start
+ davinci_mcasp_rxdma_offset(pdata
);
1970 dma
= &mcasp
->dma_request
[SNDRV_PCM_STREAM_CAPTURE
];
1971 res
= platform_get_resource(pdev
, IORESOURCE_DMA
, 1);
1975 *dma
= pdata
->rx_dma_channel
;
1977 /* dmaengine filter data for DT and non-DT boot */
1978 if (pdev
->dev
.of_node
)
1979 dma_data
->filter_data
= "rx";
1981 dma_data
->filter_data
= dma
;
1984 if (mcasp
->version
< MCASP_VERSION_3
) {
1985 mcasp
->fifo_base
= DAVINCI_MCASP_V2_AFIFO_BASE
;
1986 /* dma_params->dma_addr is pointing to the data port address */
1987 mcasp
->dat_port
= true;
1989 mcasp
->fifo_base
= DAVINCI_MCASP_V3_AFIFO_BASE
;
1992 /* Allocate memory for long enough list for all possible
1993 * scenarios. Maximum number tdm slots is 32 and there cannot
1994 * be more serializers than given in the configuration. The
1995 * serializer directions could be taken into account, but it
1996 * would make code much more complex and save only couple of
1999 mcasp
->chconstr
[SNDRV_PCM_STREAM_PLAYBACK
].list
=
2000 devm_kzalloc(mcasp
->dev
, sizeof(unsigned int) *
2001 (32 + mcasp
->num_serializer
- 2),
2004 mcasp
->chconstr
[SNDRV_PCM_STREAM_CAPTURE
].list
=
2005 devm_kzalloc(mcasp
->dev
, sizeof(unsigned int) *
2006 (32 + mcasp
->num_serializer
- 2),
2009 if (!mcasp
->chconstr
[SNDRV_PCM_STREAM_PLAYBACK
].list
||
2010 !mcasp
->chconstr
[SNDRV_PCM_STREAM_CAPTURE
].list
)
2013 ret
= davinci_mcasp_set_ch_constraints(mcasp
);
2017 dev_set_drvdata(&pdev
->dev
, mcasp
);
2019 mcasp_reparent_fck(pdev
);
2021 ret
= devm_snd_soc_register_component(&pdev
->dev
,
2022 &davinci_mcasp_component
,
2023 &davinci_mcasp_dai
[pdata
->op_mode
], 1);
2028 ret
= davinci_mcasp_get_dma_type(mcasp
);
2031 #if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
2032 (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
2033 IS_MODULE(CONFIG_SND_EDMA_SOC))
2034 ret
= edma_pcm_platform_register(&pdev
->dev
);
2036 dev_err(&pdev
->dev
, "Missing SND_EDMA_SOC\n");
2042 #if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
2043 (IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
2044 IS_MODULE(CONFIG_SND_OMAP_SOC))
2045 ret
= omap_pcm_platform_register(&pdev
->dev
);
2047 dev_err(&pdev
->dev
, "Missing SND_SDMA_SOC\n");
2053 dev_err(&pdev
->dev
, "No DMA controller found (%d)\n", ret
);
2060 dev_err(&pdev
->dev
, "register PCM failed: %d\n", ret
);
2067 pm_runtime_disable(&pdev
->dev
);
2071 static int davinci_mcasp_remove(struct platform_device
*pdev
)
2073 pm_runtime_disable(&pdev
->dev
);
2078 static struct platform_driver davinci_mcasp_driver
= {
2079 .probe
= davinci_mcasp_probe
,
2080 .remove
= davinci_mcasp_remove
,
2082 .name
= "davinci-mcasp",
2083 .of_match_table
= mcasp_dt_ids
,
2087 module_platform_driver(davinci_mcasp_driver
);
2089 MODULE_AUTHOR("Steve Chen");
2090 MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
2091 MODULE_LICENSE("GPL");