ASoC: stm32: Use managed buffer allocation
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, as well as the superfluous snd_pcm_lib_preallocate_free_for_all() call. As of the result, hw_free and pcm_destruct ops became empty and got removed. Cc: Olivier Moysan <olivier.moysan@st.com> Cc: Arnaud Pouliquen <arnaud.pouliquen@st.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20191210142614.19405-13-tiwai@suse.de Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
d708c2b36b
commit
6f7aff352e
|
@ -252,7 +252,6 @@ static int stm32_adfsdm_pcm_close(struct snd_soc_component *component,
|
|||
struct stm32_adfsdm_priv *priv =
|
||||
snd_soc_dai_get_drvdata(rtd->cpu_dai);
|
||||
|
||||
snd_pcm_lib_free_pages(substream);
|
||||
priv->substream = NULL;
|
||||
|
||||
return 0;
|
||||
|
@ -276,25 +275,13 @@ static int stm32_adfsdm_pcm_hw_params(struct snd_soc_component *component,
|
|||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct stm32_adfsdm_priv *priv =
|
||||
snd_soc_dai_get_drvdata(rtd->cpu_dai);
|
||||
int ret;
|
||||
|
||||
ret = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
priv->pcm_buff = substream->runtime->dma_area;
|
||||
|
||||
return iio_channel_cb_set_buffer_watermark(priv->iio_cb,
|
||||
params_period_size(params));
|
||||
}
|
||||
|
||||
static int stm32_adfsdm_pcm_hw_free(struct snd_soc_component *component,
|
||||
struct snd_pcm_substream *substream)
|
||||
{
|
||||
snd_pcm_lib_free_pages(substream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stm32_adfsdm_pcm_new(struct snd_soc_component *component,
|
||||
struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
|
@ -303,30 +290,18 @@ static int stm32_adfsdm_pcm_new(struct snd_soc_component *component,
|
|||
snd_soc_dai_get_drvdata(rtd->cpu_dai);
|
||||
unsigned int size = DFSDM_MAX_PERIODS * DFSDM_MAX_PERIOD_SIZE;
|
||||
|
||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
|
||||
priv->dev, size, size);
|
||||
snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV,
|
||||
priv->dev, size, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void stm32_adfsdm_pcm_free(struct snd_soc_component *component,
|
||||
struct snd_pcm *pcm)
|
||||
{
|
||||
struct snd_pcm_substream *substream;
|
||||
|
||||
substream = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream;
|
||||
if (substream)
|
||||
snd_pcm_lib_preallocate_free_for_all(pcm);
|
||||
}
|
||||
|
||||
static struct snd_soc_component_driver stm32_adfsdm_soc_platform = {
|
||||
.open = stm32_adfsdm_pcm_open,
|
||||
.close = stm32_adfsdm_pcm_close,
|
||||
.hw_params = stm32_adfsdm_pcm_hw_params,
|
||||
.hw_free = stm32_adfsdm_pcm_hw_free,
|
||||
.trigger = stm32_adfsdm_trigger,
|
||||
.pointer = stm32_adfsdm_pcm_pointer,
|
||||
.pcm_construct = stm32_adfsdm_pcm_new,
|
||||
.pcm_destruct = stm32_adfsdm_pcm_free,
|
||||
};
|
||||
|
||||
static const struct of_device_id stm32_adfsdm_of_match[] = {
|
||||
|
|
Loading…
Reference in New Issue