Configure I2S port to be 24-bit, 48kHz, 2 channel Transmit

I have been digging through the kernel trying to configure an I2S line to be 24-bit, 48kHz, 2 channel transmit so I can send I2S data to an external DSP. The DSP is expecting such a format but everything I have tried to change has resulted in it always putting 16-bit, 48kHz, 2 channel audio.

If I try to use aplay it says my only format supported is S16_LE unless I use the alsa plug plug-in on the hardware device. When I use the plug plug-in the audio plays but not at 24-bit but 16 bit. The TRM says the I2S can support 8,16,24,28,32 bit signals. So, why can’t I configure it to be 24-bit. I must be missing a register somewhere in the audio interface.

Can anyone give me at least a direction on where to look in the linux 4 tegra source code?

I’m away from my documentation at the moment, but as I recall there may be part of the i2s which locks in its details when first initialized…possibly what you see is the inability to change dynamically while running. I’m not sure how many ways there are to initialize or reset i2s, but I’d suggest looking into that and what needs to be done to set your required values at that moment.