[alsa-devel] Trigger problems while writing Alsa Shim
I am writing a shim from alsa to our own sound card drivers. I was able to get the init driver working and our sound card recognized. Things seem to be set up correctly. When I do aplay to my device (USB device works find), it calls my copy callback twice and then it calls the trigger and fails. The call that fails is in pcm_write (writei_func) with a -5. I know that my callback returns zero but there must be something else under the covers since that gets to be zero. Any help would be appreciated. T
At Fri, 07 Mar 2008 10:10:05 -0600, bruce@azbarclay.com wrote:
I am writing a shim from alsa to our own sound card drivers. I was able to get the init driver working and our sound card recognized. Things seem to be set up correctly. When I do aplay to my device (USB device works find), it calls my copy callback twice and then it calls the trigger and fails. The call that fails is in pcm_write (writei_func) with a -5. I know that my callback returns zero but there must be something else under the covers since that gets to be zero. Any help would be appreciated.
The error -5 is -EIO. Typically it indicates that the data isn't handled properly by the PCM core.
ALSA PCM core needs proper (asynchronous) notification via snd_pcm_period_elapsed(). Otherwise the internals won't be updated and you'll have the error. Usually this is called from the irq handler.
snd_pcm_period_elapsed() is supposed to be issued at the time when the last period (fragment, chunk) has been processed -- meaning the sound is really played back. It doesn't mean that the data is fed to the hardware.
Once after snd_pcm_period_elapsed() is called, PCM core calls the pointer callback and updates the internals including the current position. Then it wakes up the pending tasks, which will restart writing to the buffer, etc.
Takashi
participants (2)
-
bruceļ¼ azbarclay.com
-
Takashi Iwai