ALSA: hda - Avoid unnecessary verbs to clear PCM formats
authorTakashi Iwai <tiwai@suse.de>
Tue, 27 Sep 2011 15:33:45 +0000 (17:33 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 27 Sep 2011 15:33:45 +0000 (17:33 +0200)
Since really_cleanup_stream() is called from both purity_inactive_streams()
and hda_cleanup_all_streams(), the verbs to clear the PCM channel and
format may be called multiple times unnecessarily.

This patch adds checks to skip these unneeded verbs.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c

index 6b611d50d03fb7a9a5fa4610a69e10d890dfd5ee..e3db1961041140bc25e2bb316935e1384d63f476 100644 (file)
@@ -1491,8 +1491,11 @@ static void really_cleanup_stream(struct hda_codec *codec,
                                  struct hda_cvt_setup *q)
 {
        hda_nid_t nid = q->nid;
-       snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
-       snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
+       if (q->stream_tag || q->channel_id)
+               snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
+       if (q->format_id)
+               snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0
+);
        memset(q, 0, sizeof(*q));
        q->nid = nid;
 }