diff options
author | Mark Brown <broonie@kernel.org> | 2018-10-19 14:31:41 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-10-19 14:31:41 +0200 |
commit | 7ece50c9f790270e82b77589d34e54547c895a66 (patch) | |
tree | 871ccdc59063eb9f9ec2b76a13da69fb54b1a6a6 /sound/soc/amd | |
parent | ASoC: wm_adsp: Log addresses as 8 digits in wm_adsp_buffer_populate (diff) | |
parent | ASoC: sta32x: set ->component pointer in private struct (diff) | |
download | linux-7ece50c9f790270e82b77589d34e54547c895a66.tar.xz linux-7ece50c9f790270e82b77589d34e54547c895a66.zip |
Merge remote-tracking branch 'asoc/for-4.19' into asoc-4.20
Diffstat (limited to 'sound/soc/amd')
-rw-r--r-- | sound/soc/amd/acp-pcm-dma.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c index c7e972b17c90..cdebab2f8ce5 100644 --- a/sound/soc/amd/acp-pcm-dma.c +++ b/sound/soc/amd/acp-pcm-dma.c @@ -1040,16 +1040,22 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream) if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { period_bytes = frames_to_bytes(runtime, runtime->period_size); - dscr = acp_reg_read(rtd->acp_mmio, rtd->dma_curr_dscr); - if (dscr == rtd->dma_dscr_idx_1) - pos = period_bytes; - else - pos = 0; bytescount = acp_get_byte_count(rtd); - if (bytescount > rtd->bytescount) + if (bytescount >= rtd->bytescount) bytescount -= rtd->bytescount; - delay = do_div(bytescount, period_bytes); - runtime->delay = bytes_to_frames(runtime, delay); + if (bytescount < period_bytes) { + pos = 0; + } else { + dscr = acp_reg_read(rtd->acp_mmio, rtd->dma_curr_dscr); + if (dscr == rtd->dma_dscr_idx_1) + pos = period_bytes; + else + pos = 0; + } + if (bytescount > 0) { + delay = do_div(bytescount, period_bytes); + runtime->delay = bytes_to_frames(runtime, delay); + } } else { buffersize = frames_to_bytes(runtime, runtime->buffer_size); bytescount = acp_get_byte_count(rtd); |