snd_cs46xx soundcards under Linux >= 3.14

The problem

The soundcards driven by the snd_cs46xx module had a binary blob firmware with unknown license directly built into the module up to Linux 3.13. This was a problem for Debian, because they care about Free Software and this collided with their DFSG. The blob was removed from Linux 3.14 (“ALSA: cs46xx: Move DSP blob out of kernel tree”).

Depending on your distribution you might be missing the firmware blobs that now must be loaded from the file system by the kernel firmware loader. If the blobs are missing, dmesg looks something like this

kernel: snd_cs46xx 0000:02:07.0: Direct firmware load failed with error -2
kernel: snd_cs46xx 0000:02:07.0: Falling back to user helper
kernel: firmware load error [cwc4630]
kernel: snd_cs46xx: probe of 0000:02:07.0 failed with error -2
kernel: firmware load error [cwc4630]
kernel: snd_cs46xx: probe of 0000:02:07.0 failed with error -22

The missing files are

The solution

The solution is to simply copy the external firmware files to /lib/firmware/cs46xx/. This is rather trivial, but I had to search for the files for a while and also followed some dead ends. In the end I got the files from an alsa-firmware package that I converted to .tar.gz with rpm2targz.

The sound card

Mine is a Terratec DMX XFire 1024
Multimedia audio controller: Cirrus Logic CS 4614/22/24/30 [CrystalClear SoundFusion Audio Accelerator] (rev 01)
but there are others using this driver.

Apropos: Terratec DMX XFire 1024

Links to free Hardware (Don't make the same mistake twice)

Licensed under the Creative Commons Attribution-Share Alike 3.0 License.