I have setup a machine driver and device tree to connect the in-tree Maxim 98357a codec driver to SSI1 via the AUD3 external port (see attached files) on a Boundary Devices Nitrogen6x SOM V2, starting with the Boundary Devices 4.9.x kernel and the machine driver in the thread here. The card is successfully registered, but when I use speaker-test or aplay I can see that the TXD signal is constant low even though the TXC and TXFS signals are toggling at the expected rates. Here's where I currently stand:
- The aplay and speaker-test apps enter a 'hung' state after starting playback and when I send SIGINT (CTRL-C) they indicate that the pcm_write system call was interrupted.
- By adding prints to fsl_ssi.c, I can see that the start of playback correctly results in a call to fsl_ssi_config, where the code reports that there are a few entries in the FIFO before setting the TE bit in SCR (as confirmed by a readback of the register).
- I'm not sure whether FIQ mode is fully supported, but when I try it (by setting fsl,fiq-stream-filter in the device tree) the aplay and speaker-test calls result in same phenomenon with the TXD, TXC and TXFS signals, and the application reports a continual string of 'underrun' messages instead of getting hung up.
So it currently appears that the SSI simply isn't pulling from the FIFOs into the shift register. This obviously would prevent data from appearing on TXD and would be consistent with the DMA buffer filling up and causing the pcm_write call to block. I would expect overrun instead of underruns with FIQ mode, but I haven't explored that in detail. Regardless, it isn't clear to me what could cause this situation to arise. As noted, the TE bit is definitely being set in SCR.
Please advise if you see anything amiss or have any suggestions on additional ideas to review. Thanks in advance.