As many of you may have noticed since the first version of 0.99.4 beta for Raspberry Pi 2, I stated that I had patched the linux kernel and had fixed some issues with 24 bit and i2s dacs. After a lot o research it appears that the patch I applied did nothing. Let me give you some history:
Since the beginning of Rpi kernels and i2s dacs there were two modules: bcm2708-i2s (from the source of Raspberry Pi foundation) and bcm2835-i2s (from the tree tha Linus Torvalds maintains). When these two sources merged, both modules continued existing although the only module that was needed for i2s connectivity was bcm2708-i2s. In latest dev Raspberry Pi kernels (If I remember correctly 4.4.y) the devs decided to merge these modules keeping only the name of bcm2835-i2s.
Later, a patch appeared that corrected the code for 24 bit playback . I found the code that was patching bcm2835-i2s (this is the one used in 4.4 and 4.5 and the patch was needed there) and without having understood that in 4.1.17 and 4.1.18 this module is in reality useless, I decided to patch it and offer a custom kernel package for Archphile.
As you understand my custom kernel was fixing a module that does nothing in these versions. In 4.1.18 that was the kernel of 0.99.4b, the only module used was bcm2708-i2s which is 100% ok with 24 bit playback.
In order to be able to fully understand all of the above, I decided to ask the man behind the code of these modules, Florian Meier. He was very quick and to the point explaining me that my patch was in fact doing nothing:
the bcm2835-i2s is coming from upstream (i.e. the kernel as maintained by Torvalds),
while the bcm2708-i2s is coming from downstream(i.e. the kernel maintained by the
Raspberry Pi Foundation). In principle they both perform the same task. At the time
of development there was a disagreement about how to name the platform so it was
different for upstream and downstream.
Unfortunately when merging the upstream kernel and the downstream kernel no one
thought about merging these files. It would be best to merge all recent changes to
the bcm2708-i2s into the bcm2835-i2s and replace the usage of the bcm2708-i2s with
the usage of the bcm2835-i2s everywhere.
I would like to apologize for spreading the community that I made a kernel package that solved a problem that did not exist. For this reason I decided to make an image again, this time using the default archlinuxARM kernel package 4.1.18. I hope this is the final image for now. You can donwload it here:
I hope you will have my feedback very soon regarding the Raspberry Pi 3 and Odroid C2!