Hi Clemens,
The plataform driver and the I2S hardware on the ARM SoC supports sample resolutions of 16, 20 and 24 bits, and word sizes of 16, 20, 24 and 32 bits. Signed, little or big endian.
T
he i2s-DMA plataform driver and hardware, only 8, 16 and 32 bits transfers are possible.
The problem is the CODEC (CS4245 Cirrus Logic), that, for I2S
format, supports only 24 bit resolution in 32 bit words, signed, litle
endian (SNDRV_PCM_FMTBIT_S24_LE).
In the i2s plataform driver, in *_hw_params, when params_format(params)
== SNDRV_PCM_FMTBIT_S24_3LE, it configured the I2S word size to 24
bits, and that didn't work on the CODEC.
I did some printk on the 3 drivers *_hw_param and jack is passing S24_3LE, so I had to change on the i2s driver to configure 32bit word size for S24_3LE to make it work. But I am patching this plataform drivers anyway, it was lacking the capture dma *_pcm_prepare.