may be I finally nailed down the SPDIF problem with the TerraTec EWX 24/96. The problem is caused by the execution of a second CS8427 reset in the snd_cs8427_iec958_pcm() function in the cs8427.c file, exactly in the following lines of code:
... reset = chip->rate != rate; snd_i2c_unlock(cs8427->bus); if (reset) snd_cs8427_reset(cs8427); ...
Anyway, I think the problem arise elsewhere, within the ice1712.c file, in the snd_ice1712_playback_pro_hw_params(), where there are the following lines of code:
... if (ice->spdif.ops.setup_rate) ice->spdif.ops.setup_rate(ice, params_rate(hw_params)); ...
where the spdif rate is changed without checking if the rate is locked or not, i.e. without verifying if the is_pro_rate_locked() function returns true. Attached to this e-mail there's the obvious patch for this problem, changing the previous line into:
... if (ice->spdif.ops.setup_rate && !is_pro_rate_locked(ice)) ice->spdif.ops.setup_rate(ice, params_rate(hw_params)); ...
With this patch my EWX works flawless with ALSA 0.9.7, anyway I can't check if it is going to cause problems with other ICE1712 based soundcards. I hope this change is the right one, and not something that makes just my soundcard work.
Bye,
ice1712.dif
Description: Binary data
-- Denis Sbragion InfoTecna Tel: +39 0362 805396, Fax: +39 0362 805404 URL: http://www.infotecna.it