From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Trigger problems while writing Alsa Shim Date: Thu, 13 Mar 2008 11:57:48 +0100 Message-ID: References: <20080307101005.vg3idkwoyokco84w@69.49.230.6> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (ns2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id EA20024465 for ; Thu, 13 Mar 2008 11:57:48 +0100 (CET) In-Reply-To: <20080307101005.vg3idkwoyokco84w@69.49.230.6> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: bruce@azbarclay.com Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org 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