Using the SP/DIF output under linux
Firstly, thanks to Matthew Davison for explaining some of this to me!
My Linux box came with a reasonably nice onboard sound card - apparently it's based around the VIA 823x / Realtec ALC658 chipset, and has optical SP/DIF (or optical digital, as most people know it) inputs and outputs, as well as 6 channel analogue output and the other usual stuff.
After installing Fedora Core 3, I found that while the analogue output worked straight out of the box, the digital one did not.
Here are some hints and tips which might be of some help if you have the same problem!
- The command line utility alsamixer provides a nearly-graphical interface to
the volume control, and seems to work better than the Gnome mixer applet, for me at least.
- Ignore the Master, PCM and so on for controlling the digital output - they have no effect.
- At least when feeding the digital input of my MiniDisc deck (Sony MDS-JB980), I have to have
the IEC958 Playback AC97-SPSA control at minimum. I'm guessing that this is a
mult-channel output, which I know that the MD deck can't understand. I will update this when I've
tested it with my multi-channel amp.
Update: It also needs to be set to minimum for my dolby decoder / processor / amp. Not sure what the higher settings do. - The individual devices are controlled from the various VIA DXS controls - the first
application takes VIA DXS, the second takes VIA DXS 1 and so on - this is
useful for controlling the levels from different applications.
- After setting the required volume levels, run alsactl store as root to store these
values for next time you reboot.
Update: Oops, that wasn't quite enough. You also need to run alsactl restore on startup to restore them! I've now got it set up in an init.d script to save on shutdown and restore on boot.
All these assume you are running the ALSA sound system - older applications running OSS should still get fed into the digital output as normal, via the ALSA driver. I'm not entirely clear on how this works - if you know, please tell me!