ASoC: fsl: imx-pcm-fiq: Use managed buffer allocation
authorTakashi Iwai <tiwai@suse.de>
Mon, 2 Aug 2021 07:28:07 +0000 (09:28 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 4 Aug 2021 06:08:42 +0000 (08:08 +0200)
As the standard buffer allocation helper supports WC pages now, we can
convert imx-pcm-fiq driver to use that.  This allows us to remove lots
of superfluous code.

Cc: Nicolin Chen <nicoleotsuka@gmail.com>
Cc: Xiubo Li <Xiubo.Lee@gmail.com>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Shengjiu Wang <shengjiu.wang@gmail.com>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20210802072815.13551-8-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/soc/fsl/imx-pcm-fiq.c

index f20d5b1c3848e5b03666c5d4968769b23150cc42..0d124002678ebdf2e6e8ec4da78c39d76b97fa53 100644 (file)
@@ -81,7 +81,6 @@ static int snd_imx_pcm_hw_params(struct snd_soc_component *component,
        iprtd->offset = 0;
        iprtd->poll_time_ns = 1000000000 / params_rate(params) *
                                params_period_size(params);
-       snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
 
        return 0;
 }
@@ -213,40 +212,6 @@ static int snd_imx_close(struct snd_soc_component *component,
        return 0;
 }
 
-static int snd_imx_pcm_mmap(struct snd_soc_component *component,
-                           struct snd_pcm_substream *substream,
-                           struct vm_area_struct *vma)
-{
-       struct snd_pcm_runtime *runtime = substream->runtime;
-       int ret;
-
-       ret = dma_mmap_wc(substream->pcm->card->dev, vma, runtime->dma_area,
-                         runtime->dma_addr, runtime->dma_bytes);
-
-       pr_debug("%s: ret: %d %p %pad 0x%08zx\n", __func__, ret,
-                       runtime->dma_area,
-                       &runtime->dma_addr,
-                       runtime->dma_bytes);
-       return ret;
-}
-
-static int imx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
-{
-       struct snd_pcm_substream *substream = pcm->streams[stream].substream;
-       struct snd_dma_buffer *buf = &substream->dma_buffer;
-       size_t size = IMX_SSI_DMABUF_SIZE;
-
-       buf->dev.type = SNDRV_DMA_TYPE_DEV;
-       buf->dev.dev = pcm->card->dev;
-       buf->private_data = NULL;
-       buf->area = dma_alloc_wc(pcm->card->dev, size, &buf->addr, GFP_KERNEL);
-       if (!buf->area)
-               return -ENOMEM;
-       buf->bytes = size;
-
-       return 0;
-}
-
 static int imx_pcm_new(struct snd_soc_pcm_runtime *rtd)
 {
        struct snd_card *card = rtd->card->snd_card;
@@ -257,21 +222,9 @@ static int imx_pcm_new(struct snd_soc_pcm_runtime *rtd)
        if (ret)
                return ret;
 
-       if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
-               ret = imx_pcm_preallocate_dma_buffer(pcm,
-                       SNDRV_PCM_STREAM_PLAYBACK);
-               if (ret)
-                       return ret;
-       }
-
-       if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
-               ret = imx_pcm_preallocate_dma_buffer(pcm,
-                       SNDRV_PCM_STREAM_CAPTURE);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
+       return snd_pcm_set_fixed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV_WC,
+                                           pcm->card->dev,
+                                           IMX_SSI_DMABUF_SIZE);
 }
 
 static int ssi_irq;
@@ -307,32 +260,11 @@ static int snd_imx_pcm_new(struct snd_soc_component *component,
        return 0;
 }
 
-static void imx_pcm_free(struct snd_pcm *pcm)
-{
-       struct snd_pcm_substream *substream;
-       struct snd_dma_buffer *buf;
-       int stream;
-
-       for (stream = 0; stream < 2; stream++) {
-               substream = pcm->streams[stream].substream;
-               if (!substream)
-                       continue;
-
-               buf = &substream->dma_buffer;
-               if (!buf->area)
-                       continue;
-
-               dma_free_wc(pcm->card->dev, buf->bytes, buf->area, buf->addr);
-               buf->area = NULL;
-       }
-}
-
 static void snd_imx_pcm_free(struct snd_soc_component *component,
                             struct snd_pcm *pcm)
 {
        mxc_set_irq_fiq(ssi_irq, 0);
        release_fiq(&fh);
-       imx_pcm_free(pcm);
 }
 
 static const struct snd_soc_component_driver imx_soc_component_fiq = {
@@ -342,7 +274,6 @@ static const struct snd_soc_component_driver imx_soc_component_fiq = {
        .prepare        = snd_imx_pcm_prepare,
        .trigger        = snd_imx_pcm_trigger,
        .pointer        = snd_imx_pcm_pointer,
-       .mmap           = snd_imx_pcm_mmap,
        .pcm_construct  = snd_imx_pcm_new,
        .pcm_destruct   = snd_imx_pcm_free,
 };