ALSA: dmaengine_pcm: Consider DMA cache caused delay in pointer callback
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Mon, 10 Feb 2020 15:33:36 +0000 (17:33 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 11 Feb 2020 15:42:31 +0000 (15:42 +0000)
Some DMA engines can have big FIFOs which adds to the latency.
The DMAengine framework can report the FIFO utilization in bytes. Use this
information for the delay reporting.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200210153336.10218-1-peter.ujfalusi@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/core/pcm_dmaengine.c

index d8be7b4..6852bb6 100644 (file)
@@ -240,6 +240,7 @@ EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_pointer_no_residue);
 snd_pcm_uframes_t snd_dmaengine_pcm_pointer(struct snd_pcm_substream *substream)
 {
        struct dmaengine_pcm_runtime_data *prtd = substream_to_prtd(substream);
+       struct snd_pcm_runtime *runtime = substream->runtime;
        struct dma_tx_state state;
        enum dma_status status;
        unsigned int buf_size;
@@ -257,7 +258,7 @@ snd_pcm_uframes_t snd_dmaengine_pcm_pointer(struct snd_pcm_substream *substream)
                                                 state.in_flight_bytes);
        }
 
-       return bytes_to_frames(substream->runtime, pos);
+       return bytes_to_frames(runtime, pos);
 }
 EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_pointer);