Skip to content

Commit

Permalink
ALSA: hda - Disable sticky PCM stream assignment for AD codecs
Browse files Browse the repository at this point in the history
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: Vasily Khoruzhick <anarsoul@gmail.com>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Iwai committed Oct 25, 2010
1 parent 62b7e5e commit 0e7adbe
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 0 deletions.
3 changes: 3 additions & 0 deletions sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,9 @@ void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
if (!nid)
return;

if (codec->no_sticky_stream)
do_now = 1;

snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
p = get_hda_cvt_setup(codec, nid);
if (p) {
Expand Down
1 change: 1 addition & 0 deletions sound/pci/hda/hda_codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,7 @@ struct hda_codec {
unsigned int pin_amp_workaround:1; /* pin out-amp takes index
* (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 no_trigger_sense:1; /* don't trigger at pin-sensing */
#ifdef CONFIG_SND_HDA_POWER_SAVE
Expand Down
7 changes: 7 additions & 0 deletions sound/pci/hda/patch_analog.c
Original file line number Diff line number Diff line change
Expand Up @@ -1276,6 +1276,7 @@ static int patch_ad1986a(struct hda_codec *codec)
spec->multiout.no_share_stream = 1;

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -1463,6 +1464,7 @@ static int patch_ad1983(struct hda_codec *codec)
codec->patch_ops = ad198x_patch_ops;

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -1917,6 +1919,7 @@ static int patch_ad1981(struct hda_codec *codec)
}

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -3236,6 +3239,7 @@ static int patch_ad1988(struct hda_codec *codec)
spec->vmaster_nid = 0x04;

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -3450,6 +3454,7 @@ static int patch_ad1884(struct hda_codec *codec)
codec->patch_ops = ad198x_patch_ops;

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -4423,6 +4428,7 @@ static int patch_ad1884a(struct hda_codec *codec)
}

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down Expand Up @@ -4762,6 +4768,7 @@ static int patch_ad1882(struct hda_codec *codec)
}

codec->no_trigger_sense = 1;
codec->no_sticky_stream = 1;

return 0;
}
Expand Down

0 comments on commit 0e7adbe

Please sign in to comment.