ALSA: hda - Fix wrong dirty check in snd_hda_codec_resume_amp()
authorTakashi Iwai <tiwai@suse.de>
Thu, 20 Dec 2012 11:54:18 +0000 (12:54 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jan 2013 07:34:06 +0000 (08:34 +0100)
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 <tiwai@suse.de>
sound/pci/hda/hda_codec.c

index afc3ccd998f84cf7bd286829b804c0eed1f8d9aa..febadc9ed593a600e648a880f04b61000ad35fa6 100644 (file)
@@ -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]);