提交 0e7adbe2 编写于 作者: T Takashi Iwai

ALSA: hda - Disable sticky PCM stream assignment for AD codecs

The sticky PCM stream assignment introduced in 2.6.36 kernel seems
causing problems on AD codecs.  At some time later, the streaming no
longer works by unknown reason.  A simple workaround is to disable
sticky-assignment for these codecs.
Tested-by: NVasily Khoruzhick <anarsoul@gmail.com>
Cc: <stable@kernel.org>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 62b7e5e0
...@@ -1284,6 +1284,9 @@ void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid, ...@@ -1284,6 +1284,9 @@ void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
if (!nid) if (!nid)
return; return;
if (codec->no_sticky_stream)
do_now = 1;
snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
p = get_hda_cvt_setup(codec, nid); p = get_hda_cvt_setup(codec, nid);
if (p) { if (p) {
......
...@@ -850,6 +850,7 @@ struct hda_codec { ...@@ -850,6 +850,7 @@ struct hda_codec {
unsigned int pin_amp_workaround:1; /* pin out-amp takes index unsigned int pin_amp_workaround:1; /* pin out-amp takes index
* (e.g. Conexant codecs) * (e.g. Conexant codecs)
*/ */
unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */
unsigned int pins_shutup:1; /* pins are shut up */ unsigned int pins_shutup:1; /* pins are shut up */
unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */ unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
......
...@@ -1276,6 +1276,7 @@ static int patch_ad1986a(struct hda_codec *codec) ...@@ -1276,6 +1276,7 @@ static int patch_ad1986a(struct hda_codec *codec)
spec->multiout.no_share_stream = 1; spec->multiout.no_share_stream = 1;
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -1463,6 +1464,7 @@ static int patch_ad1983(struct hda_codec *codec) ...@@ -1463,6 +1464,7 @@ static int patch_ad1983(struct hda_codec *codec)
codec->patch_ops = ad198x_patch_ops; codec->patch_ops = ad198x_patch_ops;
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -1917,6 +1919,7 @@ static int patch_ad1981(struct hda_codec *codec) ...@@ -1917,6 +1919,7 @@ static int patch_ad1981(struct hda_codec *codec)
} }
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -3236,6 +3239,7 @@ static int patch_ad1988(struct hda_codec *codec) ...@@ -3236,6 +3239,7 @@ static int patch_ad1988(struct hda_codec *codec)
spec->vmaster_nid = 0x04; spec->vmaster_nid = 0x04;
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -3450,6 +3454,7 @@ static int patch_ad1884(struct hda_codec *codec) ...@@ -3450,6 +3454,7 @@ static int patch_ad1884(struct hda_codec *codec)
codec->patch_ops = ad198x_patch_ops; codec->patch_ops = ad198x_patch_ops;
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -4423,6 +4428,7 @@ static int patch_ad1884a(struct hda_codec *codec) ...@@ -4423,6 +4428,7 @@ static int patch_ad1884a(struct hda_codec *codec)
} }
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
...@@ -4762,6 +4768,7 @@ static int patch_ad1882(struct hda_codec *codec) ...@@ -4762,6 +4768,7 @@ static int patch_ad1882(struct hda_codec *codec)
} }
codec->no_trigger_sense = 1; codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册