On Thu, 2 Jul 2009, Harsha, Priya wrote:
Why is runtime->hw_ptr_jiffies updated in hw_ptr()? This should be only updated in the interrupt context right?
The idea of hw_ptr_jiffies is to have a check if real-time clock in sync with the DMA buffer position. If your hardware does block transfers and is not able to return fine position in period set SNDRV_PCM_INFO_BATCH flag. But it's rather a workaround than a proper fix, because timestamps are updated but the ring buffer position is not moved (which brokes the idea to have a relation between the ring buffer position and the real-time clock).
I think that this sort of drivers might require to implement the SNDRV_PCM_POS_KEEP return value in case when position does not change from last read to notify midlevel PCM code that they're not able to handle fine pointer resolution.
Also, hardware with large FIFOs should update properly runtime->delay value now.
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.