[alsa-devel] [PATCH 1/3] add API to allow disabling period interrupts
Jaroslav Kysela
perex at perex.cz
Mon May 17 18:54:46 CEST 2010
On Mon, 17 May 2010, pl bossart wrote:
>>>> 2) The avail_min parameter in sw_params was overlooked. The lowlevel
>>>> drivers can use this value to compute the wake-up point and set hw
>>>> appropriately, to do wake-up at requested time. We can add a support
>>>> functions like "return how many samples are expected to be transferred
>>>> for next wake-up point" to linux/sound/pcm.h. In case when this value
>>>> is high, no interrupts (wake ups) will be processed in the driver. If
>>>> hardware cannot do the precise transfers, we can program a system
>>>> timer as the wake-up source.
>>>
>>> Isn't the interrupt-related behavior defined when you setup the DMA
>>> linked list. i.e when hw_params are frozen? The problem with sw_params
>>> is that they can change at any time, and the hardware may not support
>>> this. I have no idea how you would modify the HDAudio controller
>>> behavior dynamically for example.
>>
>> Look my last sentence - we should use another timing source like system
>> timer in this case.
>
> Sorry, I misunderstood what you meant by 'precise transfers'. If we
> use a system timer, we would need to keep track of the drift between
> audio clock and system time as PulseAudio does it. Would your proposal
> entail moving this interpolation code into the kernel and let
> PulseAudio only program avail_min?
I think that this is not job for the driver. The driver should just
obtain the current DMA position at the wake-up time and eventually store
the monotonic clock for a drift handling in the user space. Note that
even with IRQs, the actual DMA position can be delayed a bit (irq
processing).
Jaroslav
-----
Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.
More information about the Alsa-devel
mailing list