summaryrefslogtreecommitdiff
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2007-10-26 14:35:56 +0400
committerJaroslav Kysela <perex@perex.cz>2007-11-19 20:38:32 +0300
commitd29240ce57d96db7300360d1e6f18357810a5c2b (patch)
tree5e095bde9f0180962481bbf330fd5a7de0bb8fd5 /sound/pci/hda/hda_codec.c
parent2ffbb8377c7a0713baf6644e285adc27a5654582 (diff)
downloadlinux-d29240ce57d96db7300360d1e6f18357810a5c2b.tar.xz
[ALSA] hda-codec - Disable shared stream on AD1986A
AD1986A has a hardware problem that it cannot share a stream with multiple pins properly. The problem occurs e.g. when a volume is changed during playback. So far, hda-intel driver unconditionally assigns the stream to multiple output pins in copy-front mode, and this should be avoided for AD1986A codec. The original fix patch was by zhejiang <zhe.jiang@intel.com>. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index ad4cb38109fc..b52f56ffedf4 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -2485,13 +2485,14 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
/* front */
snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
0, format);
- if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
+ if (!mout->no_share_stream &&
+ mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
/* headphone out will just decode front left/right (stereo) */
snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
0, format);
/* extra outputs copied from front */
for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
- if (mout->extra_out_nid[i])
+ if (!mout->no_share_stream && mout->extra_out_nid[i])
snd_hda_codec_setup_stream(codec,
mout->extra_out_nid[i],
stream_tag, 0, format);
@@ -2501,7 +2502,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
if (chs >= (i + 1) * 2) /* independent out */
snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
i * 2, format);
- else /* copy front */
+ else if (!mout->no_share_stream) /* copy front */
snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
0, format);
}