ASoC: amd: acp-pcm-dma: add .delay support
Now ALSA SoC supports .delay for component. This patch uses it, and not update runtime->delay on .pointer directly / secretly. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/8735nwy25o.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
403f830e7a
Коммит
feea640aaf
|
@ -1003,6 +1003,7 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_soc_component *component,
|
|||
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct audio_substream_data *rtd = runtime->private_data;
|
||||
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
|
||||
|
||||
if (!rtd)
|
||||
return -EINVAL;
|
||||
|
@ -1023,7 +1024,7 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_soc_component *component,
|
|||
}
|
||||
if (bytescount > 0) {
|
||||
delay = do_div(bytescount, period_bytes);
|
||||
runtime->delay = bytes_to_frames(runtime, delay);
|
||||
adata->delay += bytes_to_frames(runtime, delay);
|
||||
}
|
||||
} else {
|
||||
buffersize = frames_to_bytes(runtime, runtime->buffer_size);
|
||||
|
@ -1035,6 +1036,17 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_soc_component *component,
|
|||
return bytes_to_frames(runtime, pos);
|
||||
}
|
||||
|
||||
static snd_pcm_sframes_t acp_dma_delay(struct snd_soc_component *component,
|
||||
struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
|
||||
snd_pcm_sframes_t delay = adata->delay;
|
||||
|
||||
adata->delay = 0;
|
||||
|
||||
return delay;
|
||||
}
|
||||
|
||||
static int acp_dma_prepare(struct snd_soc_component *component,
|
||||
struct snd_pcm_substream *substream)
|
||||
{
|
||||
|
@ -1198,6 +1210,7 @@ static const struct snd_soc_component_driver acp_asoc_platform = {
|
|||
.hw_params = acp_dma_hw_params,
|
||||
.trigger = acp_dma_trigger,
|
||||
.pointer = acp_dma_pointer,
|
||||
.delay = acp_dma_delay,
|
||||
.prepare = acp_dma_prepare,
|
||||
.pcm_construct = acp_dma_new,
|
||||
};
|
||||
|
|
|
@ -151,6 +151,7 @@ struct audio_drv_data {
|
|||
struct snd_pcm_substream *capture_i2sbt_stream;
|
||||
void __iomem *acp_mmio;
|
||||
u32 asic_type;
|
||||
snd_pcm_sframes_t delay;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче