At Sat, 16 Aug 2008 00:45:33 +1000, Ben Stanley wrote:
On Thu, 2008-08-14 at 17:19 +0200, Takashi Iwai wrote:
Some drivers have the independent PCM IEC958 status bits while many have only the default IEC958 status bits. In the former case, the driver resets automatically the status bits after closing the PCM stream. Your case is the latter one, which doesn't reset. In this case, usually alsa-lib takes the old setting back. But when the program crashes (or aborted unexpectedly), the new setting is kept even after that, as you described in the above.
Could you please clarify 'independent PCM IEC958 status bits' vs 'default IEC958 status bits', perhaps by pointing out some drivers implementing each type?
Run the following: grep -r 'IEC958.*PCM_STREAM' sound/pci
These drivers have "IEC958 Playback PCM Stream" controls. These controls are assigned to PCM streams, and changed individually from the "IEC958 Playback Default" control. When the PCM stream is closed, it's back to the status of "IEC958 Playback Default".
Could someone set me straight here so that I can try to produce a permanent fix for this?
You can change the status easily via iecset program in alsa-utils.
I note here that iecset does not accept --device=hw:0,1 for example. Any reason for this?
Because it's invalid. The --device option is for a control device, not for a PCM device. If you want to change the secondary control (i.e. "IEC958 Playback Default" with index=1), pass "-n 1" to iecset.
Takashi