Comment 14 for bug 939593

Revision history for this message
Ramesh Chandrasekaran (ramesh-chandrasekaran) wrote :

Root cause of the issue:

Since pulse audio, tries to use, bigger audio period size, with minimum fragments to improve the performance, using timer based scheduling, it request the audio driver maximum period size supported and minimum fragment number supported.

When a bigger period size greater than 131070 bytes (that is greater than 32767 frames), the dma driver in snowball, could not carry out such a bigger chunk in one shot (hardware limitation), so it tries to split the transaction in to two and raises interrupt for it. Either The interrupt at inappropriate time to audio driver before the actual buffer is flushed to i2s (or) due to dma limitation, there may be some data lost in deliviering to msp i2s buffer.

The way choosen here to handle the problem was to limit the period size to maximum dma limited segment size in audio driver(so that dma never goes for splitting the single period transaction), instead of fixing the actual dma driver for multiple split transaction which could take more effort. The period size of 32676 frames, needs to be more than sufficient for the pulse audio's bigger buffer requirement.

The Fix is sent for review.