I am using the SSI ports on the imx6 as ALSA sound cards. I have taken the fsl_ssi.c as a reference and created a modified version for the different I2S clocking used on the hardware. The sound card is working fine, except when playback is stopped, there is an audible and disturbing popping noise at the speakers. I have looked at the output of the SSI port when this happens, and I have confirmed that the SSI output goes abruptly to an all 1 state (as if a 0xFFFFFF sample is being output).
For now, as a workaround, I am not turning off SSI transmit when audio playback is stopped. This causes the last audio sample to continue to be transmitted and avoids the pop noise. But while this eliminates the pop noise at the end of audio playback, it cause a slighter, less audible pop at the beginning of audio playback, because the beginning of the audio file is usually silent, so the SSI output goes from the last sample value to almost zero instantly. This pop is much less disturbing, but still, it is there.
So my question is, what do I need to do so that the SSI port's output doesn't go to an all FFFFFF state, but instead goes to a state of all zeros? I am still looking and analyzing the ASoC and the DMA engine source code in the kernel, so any pointers as to where to focus would be appreciated.