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
- ba1
- cwc4630
- cwcasync
- cwcbinhack
- cwcdma
- cwcsnoop
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
- Sometimes the card sounds tinny until the sound gets restarted by the application. It's rare, but it happens.
- The card distorts the sound if the volume is set too high. For my ears this can be worked around by pulling either „DAC“ or „PCM“ down until the music sounds good and using only the remaining control to set the volume from then on. This can be tested with
speaker-test -t sine -f 440 -c 2
(play with the frequency).
Links to free Hardware (Don't make the same mistake twice)
Licensed under the Creative Commons Attribution-Share Alike 3.0 License.