MLK-11429-8: ASoC: dmaengine: Add two function for dmaengine_pcm
authorShengjiu Wang <b02247@freescale.com>
Mon, 14 Apr 2014 06:58:05 +0000 (14:58 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:48:10 +0000 (14:48 -0500)
cherry-pick below patch from imx_3.14.y
ENGR00307835-2 ASoC: dmaengine: Add two function for dmaengine_pcm

Add check_xrun and device_reset for dmaengine_pcm

Signed-off-by: Shengjiu Wang <b02247@freescale.com>
(cherry picked from commit 405588f31e432e5c6634a0817e4d804ead87882b)

include/sound/dmaengine_pcm.h
sound/core/pcm_dmaengine.c

index 67be244..57eadbe 100644 (file)
@@ -74,6 +74,8 @@ struct dma_chan *snd_dmaengine_pcm_get_chan(struct snd_pcm_substream *substream)
  * @chan_name: Custom channel name to use when requesting DMA channel.
  * @fifo_size: FIFO size of the DAI controller in bytes
  * @flags: PCM_DAI flags, only SND_DMAENGINE_PCM_DAI_FLAG_PACK for now
+ * @check_xrun: check if hardware xrun happen in the cpu dai.
+ * @device_reset: if xrun happened, then do cpu dai reset.
  */
 struct snd_dmaengine_dai_dma_data {
        dma_addr_t addr;
@@ -84,6 +86,16 @@ struct snd_dmaengine_dai_dma_data {
        const char *chan_name;
        unsigned int fifo_size;
        unsigned int flags;
+       bool (*check_xrun)(struct snd_pcm_substream *substream);
+       void (*device_reset)(struct snd_pcm_substream *substream, bool stop);
+};
+
+struct dmaengine_pcm_runtime_data {
+       struct dma_chan *dma_chan;
+       dma_cookie_t cookie;
+
+       unsigned int pos;
+       dma_async_tx_callback callback;
 };
 
 void snd_dmaengine_pcm_set_config_from_dai_data(
index 8eb58c7..99abc91 100644 (file)
@@ -5,6 +5,7 @@
  *  Based on:
  *     imx-pcm-dma-mx2.c, Copyright 2009 Sascha Hauer <s.hauer@pengutronix.de>
  *     mxs-pcm.c, Copyright (C) 2011 Freescale Semiconductor, Inc.
+ *     imx-pcm-dma.c, Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
  *     ep93xx-pcm.c, Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
  *                   Copyright (C) 2006 Applied Data Systems
  *
 
 #include <sound/dmaengine_pcm.h>
 
-struct dmaengine_pcm_runtime_data {
-       struct dma_chan *dma_chan;
-       dma_cookie_t cookie;
-
-       unsigned int pos;
-};
-
 static inline struct dmaengine_pcm_runtime_data *substream_to_prtd(
        const struct snd_pcm_substream *substream)
 {
@@ -171,7 +165,10 @@ static int dmaengine_pcm_prepare_and_submit(struct snd_pcm_substream *substream)
        if (!desc)
                return -ENOMEM;
 
-       desc->callback = dmaengine_pcm_dma_complete;
+       if (prtd->callback)
+               desc->callback = prtd->callback;
+       else
+               desc->callback = dmaengine_pcm_dma_complete;
        desc->callback_param = substream;
        prtd->cookie = dmaengine_submit(desc);