I opened bug 0005235 in the bug tracking system regarding no output from my laptop's (Asus U50F) mini-TOSLINK jack, even though ALSA was detecting and providing a SPDIF output device. Using the alsa-info output, somebody was able to diagnose the issue, and I was able to confirm the problem. It looks like the CX20585 has two digital outputs:
Node 0x12 [Audio Output] wcaps 0x611: Stereo Digital Node 0x21 [Audio Output] wcaps 0x611: Stereo Digital
Since the CX20585 uses the CXT5066 patch in ALSA, node 0x21 is used for the SPDIF device. However, at least in the case of my laptop, that digital output is connected to a pin complex which is N/A:
Pin Default 0x400001f0: [N/A] Line Out at Ext N/A
However, node 0x12 IS connected to the optical out jack:
Pin Default 0x034511f0: [Jack] SPDIF Out at Ext Left
So, in this case, ALSA should use node 0x12 instead of node 0x21 for SPDIF out. I confirmed this with the latest snapshot by changing the digital output from 0x21 to 0x12, and that solved the problem.
If there are no volunteers that want to take a look at a "real" solution for this :-), I might take a crack at it myself, but I'm not all that familiar with the driver right now. There seems to be different ways this could be handled: (1) Introduce a model that would use 0x12 instead of 0x21 as the digital output (2) Check the pin complexes associated with outputs 0x12 and 0x21 to determine which one is actually connected to a jack, and use that output as the SPDIF device instead of always choosing 0x21 (3) What if both digital outputs are connected to a valid jack? Should ALSA then create devices for both? As of now, it's not even creating a device for 0x12 even though it's a valid audio output.
Any comments or suggestions are welcome.