|
@@ -1261,12 +1261,17 @@ void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
|
|
|
}
|
|
|
EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
|
|
|
|
|
|
+static void really_cleanup_stream(struct hda_codec *codec,
|
|
|
+ struct hda_cvt_setup *q);
|
|
|
+
|
|
|
/**
|
|
|
- * snd_hda_codec_cleanup_stream - clean up the codec for closing
|
|
|
+ * __snd_hda_codec_cleanup_stream - clean up the codec for closing
|
|
|
* @codec: the CODEC to clean up
|
|
|
* @nid: the NID to clean up
|
|
|
+ * @do_now: really clean up the stream instead of clearing the active flag
|
|
|
*/
|
|
|
-void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
|
|
|
+void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
|
|
|
+ int do_now)
|
|
|
{
|
|
|
struct hda_cvt_setup *p;
|
|
|
|
|
@@ -1274,14 +1279,19 @@ void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
|
|
|
return;
|
|
|
|
|
|
snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
|
|
|
- /* here we just clear the active flag; actual clean-ups will be done
|
|
|
- * in purify_inactive_streams()
|
|
|
- */
|
|
|
p = get_hda_cvt_setup(codec, nid);
|
|
|
- if (p)
|
|
|
- p->active = 0;
|
|
|
+ if (p) {
|
|
|
+ /* here we just clear the active flag when do_now isn't set;
|
|
|
+ * actual clean-ups will be done later in
|
|
|
+ * purify_inactive_streams() called from snd_hda_codec_prpapre()
|
|
|
+ */
|
|
|
+ if (do_now)
|
|
|
+ really_cleanup_stream(codec, p);
|
|
|
+ else
|
|
|
+ p->active = 0;
|
|
|
+ }
|
|
|
}
|
|
|
-EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
|
|
|
+EXPORT_SYMBOL_HDA(__snd_hda_codec_cleanup_stream);
|
|
|
|
|
|
static void really_cleanup_stream(struct hda_codec *codec,
|
|
|
struct hda_cvt_setup *q)
|