2010/5/4 Timur Tabi timur@freescale.com
In my 8610 ASoC driver, I'm seeing the DMA driver's .hw_free function being called twice whenever playback ends. I've added some printk's to demonstrate:
snd_pcm_common_ioctl1:2543 snd_pcm_hw_free:543 soc_pcm_hw_free:761 c023983c fsl_dma_hw_free:720 substream=df029d00 dma_private=df440000 stream=0 snd_pcm_release_substream:2022 soc_pcm_hw_free:761 c023983c fsl_dma_hw_free:720 substream=df029d00 dma_private=df440000 stream=0 fsl_dma_close:759 substream=df029d00 dma_private=df440000
So the ioctl is being called only once, but the both snd_pcm_hw_free() and snd_pcm_release_substream() are calling the .hw_free function.
Is this normal? I don't know how to handle this, other than to add some boolean to my private data structure that indicates whether the resources have been freed or not.
-- Timur Tabi Linux kernel developer at Freescale
http://www.alsa-project.org/~tiwai/writing-an-alsa-driver/ch05s06.html#pcm-i...
This function is always called before the close callback is called. Also, the callback may be called multiple times, too. Keep track whether the resource was already released.