On Sun, Dec 07, 2008 at 06:38:25PM +0100, Daniel Mack wrote:
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.
What exactly do you mean when you say "I2S clock input" here? An I2S link has two clocks, a bit clock and a frame clock and most codecs also use a third, master, clock which is not associated directly with an I2S link. I suspect that the requirement is for the master clock...
The clocking is the responsibility of the board driver - often the clocks are disabled while the link is inctive but this up to the board driver (and ultimately the hardware design).
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?
You'll be able to get there since the card is accessible but it's unacceptable for the codec driver to go fiddling with other parts of the link like you're suggesting here - it doesn't have enough information about the system to know what to do. The clocking for the bus could be shared with other devices, the clocks could be provided by other devices or the codec itself could be the clock master.
Is there a sane way to address this problem?
It does depend on what the actual requirement is here. Which clock or clocks are the issue?