I2S is very standard way to interface high quality audio codec to you project. few days back i have published a little board with
Texas Instruments TLV320AIC23B Board. I had built the Breakout board with TI TLV320AIC23B specifically to test I2S in the embedded linux Environment and DSP (TMS320C5515) .
most linux SOC now a days have on chip sound ouput and input capability, only a few processor has onchip sound you need good quality codec quality of on chip sound is not very best. like Beaglebone white does not have any direct audio output ,Beaglebone black has audio output but it is only connected to NXP HDMI Chipset and only available with HDMI, Raspberry Pi has SOC that support Sound but only sound output is available , there is no input.
the simple solution to add sound to your linux machine can be USB sound card, but USB sound card has few issues , like cheap USB sound card are crap and good USB sound card are not cheap. cheap USB sound card comes with very crap quality driver which will misbehave time to time , like when you are running under heavy load , USB need at least some amount of processing power to keep up with with devices and host. i have seen USB sound card crashing when board’s cpu got high amount load. you will consume you precious USB port just for the sake of the sound card.
there may be many other ways , but I2S audio codes are fairly common and used widely in all sorts of electronics , including consumer goods. so they have proven reliability.
The Hardware,
for this particular test we are going to use the good Raspberry Pi 1 Model A+ but this will work any Raspberry Pi or any other Board with little or no changes , if it has required ALSA support and etc.
Schematic
Linux Kernel
making this I2S card work we need to add new source to existing kernel and also modify few already existing files.