On Wed, Nov 25, 2009 at 03:01:39PM +0000, Mark Brown wrote:
On Wed, Nov 25, 2009 at 03:36:27PM +0100, Daniel Mack wrote:
static int cs4270_dai_mute(struct snd_soc_dai *dai, int mute) { struct snd_soc_codec *codec = dai->codec; struct cs4270_private *cs4270 = codec->private_data;
- int reg6;
int reg6, err;
reg6 = snd_soc_read(codec, CS4270_MUTE);
if (mute) reg6 |= CS4270_MUTE_DAC_A | CS4270_MUTE_DAC_B; else {
if (cs4270->va_reg)
regulator_enable(cs4270->va_reg);
This looks wrong - why is the power being controlled in the mute function? If nothing else this is going to break recording since the CODEC will only be unmuted during playback which means power will be cut during record.
Ok - which place would you suggest for it? Is there an ASoC callback I can hook on to tell me when the whole codec isn't used anymore? I can only see startup/shutdown, but I would need to my own snd_pc_substream handling login in there. Other drivers do that in the probe/remove functions, but that won't suffice for my board as we want VA disabled whenever possible.
Daniel