Hi,
Codecs like the tlv320aic3x family have soft volume controls to smoothly drive up and down mixer elements in order to prevent clicks and pops. In fact, most of the controls on this chip are implemented as such. For the mixers to work, however, the I2S input clock is needed which is currently only true when the DAC/ACD elements are active but not when the chip is just operating as an analog mixer.
To allow this functionality, the I2S clock must be present for a short period after each volume control update to the codec and disabled again after some milliseconds. It should, however, not be enabled if it's already running and of course, it must not be disabled if the ADC/DAC is still running.
Adding a hook to struct snd_soc_codec which is called from snd_soc_update_bits() isn't a big deal, but the problem is the abstraction layers in this case - for good reasons, the cpu_dai is not accessible from the codec dai. Or did I miss a link?
Is there a sane way to address this problem?
Thanks and best regards, Daniel