[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