On Sun, 2006-10-29 at 15:19 +1100, Paul Mackerras wrote: > This fixes the problem of getting extra bytes inserted at the > beginning of a recording when using the Apple i2s interface and DBDMA > controller. It turns out that we can't just abort the DMA; we have to > let it stop at the end of a command, and then wait for the S7 bit to > be set before turning off the DBDMA controller. Doing that for > playback doesn't seem to be necessary, but doesn't hurt either. > > We use the technique used by the Darwin driver: make each transfer > command branch to a stop command if the S0 status bit is set. Thus we > can ask the DMA controller to stop at the end of the current command > by setting S0. > > The interrupt routine now looks at and clears the status word of the > DBDMA command ring. This is necessary so it can know when the DBDMA > controller has seen that S0 is set, and so when it should look for the > DBDMA controller being stopped and S7 being set. This also ended up > simplifying the calculation in i2sbus_pcm_pointer. > > Tested on a 15 inch albook. Great! > + if (in_le32(&pi->dbdma->status) & ACTIVE) { > + /* possible race here? */ > + udelay(10); > + if (in_le32(&pi->dbdma->status) & ACTIVE) > + goto out_unlock; /* keep running */ Maybe we should clear the S0 bit and then check if it's active? Clearing the S0 bit when the DMA engine has already stopped doesn't make a difference, and when it is still active we want to clear S0 in this 'play again case' anyway. Then if we clear it and check the ACTIVE bit afterwards we can be sure that if it is still set the engine will continue running. Other than that, looks great to me, thanks a lot! johannes
Attachment:
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/alsa-devel