ASoC: amd: Use managed buffer allocation
authorTakashi Iwai <tiwai@suse.de>
Tue, 10 Dec 2019 14:25:52 +0000 (15:25 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 11 Dec 2019 15:55:09 +0000 (15:55 +0000)
Clean up the drivers with the new managed buffer allocation API.
The superfluous snd_pcm_lib_malloc_pages() and
snd_pcm_lib_free_pages() calls are dropped.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20191210142614.19405-2-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/acp-pcm-dma.c
sound/soc/amd/raven/acp3x-pcm-dma.c

index 4b9a27e..98400aa 100644 (file)
@@ -836,7 +836,6 @@ static int acp_dma_hw_params(struct snd_soc_component *component,
                             struct snd_pcm_substream *substream,
                             struct snd_pcm_hw_params *params)
 {
-       int status;
        uint64_t size;
        u32 val = 0;
        struct snd_pcm_runtime *runtime;
@@ -967,35 +966,19 @@ static int acp_dma_hw_params(struct snd_soc_component *component,
        }
 
        size = params_buffer_bytes(params);
-       status = snd_pcm_lib_malloc_pages(substream, size);
-       if (status < 0)
-               return status;
-
-       memset(substream->runtime->dma_area, 0, params_buffer_bytes(params));
 
-       if (substream->dma_buffer.area) {
-               acp_set_sram_bank_state(rtd->acp_mmio, 0, true);
-               /* Save for runtime private data */
-               rtd->dma_addr = substream->dma_buffer.addr;
-               rtd->order = get_order(size);
+       acp_set_sram_bank_state(rtd->acp_mmio, 0, true);
+       /* Save for runtime private data */
+       rtd->dma_addr = substream->dma_buffer.addr;
+       rtd->order = get_order(size);
 
-               /* Fill the page table entries in ACP SRAM */
-               rtd->size = size;
-               rtd->num_of_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
-               rtd->direction = substream->stream;
+       /* Fill the page table entries in ACP SRAM */
+       rtd->size = size;
+       rtd->num_of_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
+       rtd->direction = substream->stream;
 
-               config_acp_dma(rtd->acp_mmio, rtd, adata->asic_type);
-               status = 0;
-       } else {
-               status = -ENOMEM;
-       }
-       return status;
-}
-
-static int acp_dma_hw_free(struct snd_soc_component *component,
-                          struct snd_pcm_substream *substream)
-{
-       return snd_pcm_lib_free_pages(substream);
+       config_acp_dma(rtd->acp_mmio, rtd, adata->asic_type);
+       return 0;
 }
 
 static u64 acp_get_byte_count(struct audio_substream_data *rtd)
@@ -1142,18 +1125,18 @@ static int acp_dma_new(struct snd_soc_component *component,
 
        switch (adata->asic_type) {
        case CHIP_STONEY:
-               snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
-                                                     SNDRV_DMA_TYPE_DEV,
-                                                     parent,
-                                                     ST_MIN_BUFFER,
-                                                     ST_MAX_BUFFER);
+               snd_pcm_set_managed_buffer_all(rtd->pcm,
+                                              SNDRV_DMA_TYPE_DEV,
+                                              parent,
+                                              ST_MIN_BUFFER,
+                                              ST_MAX_BUFFER);
                break;
        default:
-               snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
-                                                     SNDRV_DMA_TYPE_DEV,
-                                                     parent,
-                                                     MIN_BUFFER,
-                                                     MAX_BUFFER);
+               snd_pcm_set_managed_buffer_all(rtd->pcm,
+                                              SNDRV_DMA_TYPE_DEV,
+                                              parent,
+                                              MIN_BUFFER,
+                                              MAX_BUFFER);
                break;
        }
        return 0;
@@ -1221,7 +1204,6 @@ static const struct snd_soc_component_driver acp_asoc_platform = {
        .close          = acp_dma_close,
        .ioctl          = snd_soc_pcm_lib_ioctl,
        .hw_params      = acp_dma_hw_params,
-       .hw_free        = acp_dma_hw_free,
        .trigger        = acp_dma_trigger,
        .pointer        = acp_dma_pointer,
        .mmap           = acp_dma_mmap,
index 60709e3..98b76c3 100644 (file)
@@ -334,7 +334,6 @@ static int acp3x_dma_hw_params(struct snd_soc_component *component,
                               struct snd_pcm_substream *substream,
                               struct snd_pcm_hw_params *params)
 {
-       int status;
        u64 size;
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct i2s_stream_instance *rtd = runtime->private_data;
@@ -343,20 +342,10 @@ static int acp3x_dma_hw_params(struct snd_soc_component *component,
                return -EINVAL;
 
        size = params_buffer_bytes(params);
-       status = snd_pcm_lib_malloc_pages(substream, size);
-       if (status < 0)
-               return status;
-
-       memset(substream->runtime->dma_area, 0, params_buffer_bytes(params));
-       if (substream->dma_buffer.area) {
-               rtd->dma_addr = substream->dma_buffer.addr;
-               rtd->num_pages = (PAGE_ALIGN(size) >> PAGE_SHIFT);
-               config_acp3x_dma(rtd, substream->stream);
-               status = 0;
-       } else {
-               status = -ENOMEM;
-       }
-       return status;
+       rtd->dma_addr = substream->dma_buffer.addr;
+       rtd->num_pages = (PAGE_ALIGN(size) >> PAGE_SHIFT);
+       config_acp3x_dma(rtd, substream->stream);
+       return 0;
 }
 
 static snd_pcm_uframes_t acp3x_dma_pointer(struct snd_soc_component *component,
@@ -381,17 +370,11 @@ static int acp3x_dma_new(struct snd_soc_component *component,
                         struct snd_soc_pcm_runtime *rtd)
 {
        struct device *parent = component->dev->parent;
-       snd_pcm_lib_preallocate_pages_for_all(rtd->pcm, SNDRV_DMA_TYPE_DEV,
-                                             parent, MIN_BUFFER, MAX_BUFFER);
+       snd_pcm_set_managed_buffer_all(rtd->pcm, SNDRV_DMA_TYPE_DEV,
+                                      parent, MIN_BUFFER, MAX_BUFFER);
        return 0;
 }
 
-static int acp3x_dma_hw_free(struct snd_soc_component *component,
-                            struct snd_pcm_substream *substream)
-{
-       return snd_pcm_lib_free_pages(substream);
-}
-
 static int acp3x_dma_mmap(struct snd_soc_component *component,
                          struct snd_pcm_substream *substream,
                          struct vm_area_struct *vma)
@@ -601,7 +584,6 @@ static const struct snd_soc_component_driver acp3x_i2s_component = {
        .close          = acp3x_dma_close,
        .ioctl          = snd_soc_pcm_lib_ioctl,
        .hw_params      = acp3x_dma_hw_params,
-       .hw_free        = acp3x_dma_hw_free,
        .pointer        = acp3x_dma_pointer,
        .mmap           = acp3x_dma_mmap,
        .pcm_construct  = acp3x_dma_new,