[alsa-devel] [PATCH] dma: pl330: Add support for DMA_PAUSE command

Tushar Behera tushar.behera at linaro.org
Mon May 19 05:10:23 CEST 2014


On 16 May 2014 00:51, Lars-Peter Clausen <lars at metafoo.de> wrote:
> On 05/15/2014 02:01 PM, Tushar Behera wrote:
>>
>> On 14 May 2014 17:54, Lars-Peter Clausen <lars at metafoo.de> wrote:
>>>
>>> On 05/14/2014 02:07 PM, Tushar Behera wrote:
>>>>
>>>>
>>>> On 14 May 2014 17:29, Jassi Brar <jassisinghbrar at gmail.com> wrote:
>>>>>
>>>>>
>>>>> On Wed, May 14, 2014 at 8:53 AM, Tushar Behera
>>>>> <tushar.behera at linaro.org>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> While playing back audio, pmc_dmaengine requests the DMA channel to
>>>>>> stop DMA transmission through DMA_PAUSE command.
>>>>>>
>>>>>> Currently PL330 driver doesn't support DMA pause command, leaving
>>>>>> the DMA state inconsistent when the system resumes. Instead, it would
>>>>>> be better to terminate the DMA transfer during suspend and restart
>>>>>> again during resume.
>>>>>>
>>>>>> Tested with audio playback across a suspend-resume cycle.
>>>>>>
>>>>> What is pmc_dmaengine? How does DMA_PAUSE help, when there is no
>>>>> DMA_RESUME?
>>>>>
>>>>
>>>> Sorry, it is a typo.
>>>>
>>>> sound/core/pcm_dmaengine.c:snd_dmaengine_pcm_trigger() -->
>>>> dmaengine_pause() is called during system suspend.
>>>
>>>
>>>
>>> It is only called if the DMA driver has support for pausing and resuming
>>> DMA
>>> transfers. Or at least that is the intention.
>>>
>>> - Lars
>>
>>
>> During suspend, snd_dmaengine_pcm_trigger():SNDRV_PCM_TRIGGER_SUSPEND
>> is called which unconditionally calls dmaengine_pause(). Should we
>> update snd_dmaengine_pcm_trigger() to check for DMA pause/resume
>> support and call dmaengine_pause() or dmaengine_terminate_all()
>> accordingly?
>
>
> As far as I understand it we do not have to do anything for TRIGGER_SUSPEND
> if we do not set the SNDRV_PCM_INFO_RESUME flag. It looks like
> TRIGGER_SUSPEND is called unconditionally during suspend. But since the
> error code is ignored it should be fine if we just call dmaengine_pause()
> and that return -ENOSYS or similar.
>
> Are you seeing an actual issue that you are trying to fix with your patch?
>
> - Lars
>

Without this patch applied, if audio is playing back while suspend is
triggered, it doesn't playback after resume. Stopping the stream and
replaying works.

-- 
Tushar Behera


More information about the Alsa-devel mailing list