From: Takashi Iwai Date: Thu, 20 Dec 2012 11:54:18 +0000 (+0100) Subject: ALSA: hda - Fix wrong dirty check in snd_hda_codec_resume_amp() X-Git-Tag: next-20130218~63^2~62^2~129 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=8565f052c5f696ba095a078ea7dbac32460012be;p=karo-tx-linux.git ALSA: hda - Fix wrong dirty check in snd_hda_codec_resume_amp() The dirty entry has to be checked at the beginning in the loop, not in the inner loop for channels. This caused a regression that the right channel isn't properly written. Signed-off-by: Takashi Iwai --- diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index afc3ccd998f8..febadc9ed593 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -1969,6 +1969,9 @@ void snd_hda_codec_resume_amp(struct hda_codec *codec) unsigned int idx, dir, ch; buffer = snd_array_elem(&codec->amp_cache.buf, i); + if (!buffer->head.dirty) + continue; + buffer->head.dirty = 0; key = buffer->head.key; if (!key) continue; @@ -1978,9 +1981,6 @@ void snd_hda_codec_resume_amp(struct hda_codec *codec) for (ch = 0; ch < 2; ch++) { if (!(buffer->head.val & INFO_AMP_VOL(ch))) continue; - if (!buffer->head.dirty) - continue; - buffer->head.dirty = 0; mutex_unlock(&codec->hash_mutex); put_vol_mute(codec, buffer, nid, ch, dir, idx, buffer->vol[ch]);