Re: [alsa-devel] ASoC: tegra: Does the PCM_TRIGGER_{PAUSE, RESUME} emulation really work?
On 03/23/2013 02:16 PM, Laxman Dewangan wrote:
On Saturday 23 March 2013 05:05 AM, Stephen Warren wrote:
On 03/22/2013 10:26 AM, Lars-Peter Clausen wrote:
Hi,
The tegra pcm driver tries to emulate SNDRV_PCM_TRIGGER_PAUSE and SNDRV_PCM_TRIGGER_RESUME. By passing SNDRV_PCM_TRIGGER_START and SNDRV_PCM_TRIGGER_STOP to snd_dmaengine_pcm_trigger. But does this really work? The old non-dmaengine based driver implemented this properly. I'd reset the dma position pointer for SNDRV_PCM_TRIGGER_START, but keep it where it was for SNDRV_PCM_TRIGGER_RESUME. But as far as I can see with the dmaengine based driver the pointer always gets reset to 0 for both SNDRV_PCM_TRIGGER_START and SNDRV_PCM_TRIGGER_RESUME.
It's quite possible this hasn't been tested, or tested recently. I don't recall how to test PAUSE/RESUME. Can you enlighten me?
Laxman, can you comment here?
The tegra20/Tegra30 does not support the pause of the channel. It was through global pause. hence the pause and resume is implemented like stop transfer and again restart transfer. hence you are seeing this as the reset pointer as 0.
Yea, but in that case you shouldn't implement pause/resume at all. You've changed the semantics on pause/resume on which applications rely. If pause/resume are not implemented applications usually workaround it.
- Lars
So pause is stop and resume is the start again.
If it is require to implement the dmaengine_pause/resume() then it can not be done truely, it can be done atelast in resolution of one buffer transfer. We can not stop dma in mid of buffer transfer and start from there. We can do cancel of current buffer transfer and then start from begining of current buffer, not from the point it was paused.
However, tegra114 support this pause and resume truely.
participants (1)
-
Lars-Peter Clausen