提交 35b26722 编写于 作者: T Takashi Iwai 提交者: Jaroslav Kysela

[ALSA] hda-codec - Fix AD1988 SPDIF playback route control

Fix AD1988 SPDIF playback route control for selecting ADC1-3.
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
Signed-off-by: NJaroslav Kysela <perex@suse.cz>
上级 713fb939
...@@ -1898,8 +1898,9 @@ static int ad1988_spdif_playback_source_get(struct snd_kcontrol *kcontrol, ...@@ -1898,8 +1898,9 @@ static int ad1988_spdif_playback_source_get(struct snd_kcontrol *kcontrol,
sel = snd_hda_codec_read(codec, 0x02, 0, AC_VERB_GET_CONNECT_SEL, 0); sel = snd_hda_codec_read(codec, 0x02, 0, AC_VERB_GET_CONNECT_SEL, 0);
if (sel > 0) { if (sel > 0) {
sel = snd_hda_codec_read(codec, 0x0b, 0, AC_VERB_GET_CONNECT_SEL, 0); sel = snd_hda_codec_read(codec, 0x0b, 0,
if (sel <= 3) AC_VERB_GET_CONNECT_SEL, 0);
if (sel < 3)
sel++; sel++;
else else
sel = 0; sel = 0;
...@@ -1912,23 +1913,27 @@ static int ad1988_spdif_playback_source_put(struct snd_kcontrol *kcontrol, ...@@ -1912,23 +1913,27 @@ static int ad1988_spdif_playback_source_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
{ {
struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
unsigned int sel; unsigned int val, sel;
int change; int change;
val = ucontrol->value.enumerated.item[0];
sel = snd_hda_codec_read(codec, 0x02, 0, AC_VERB_GET_CONNECT_SEL, 0); sel = snd_hda_codec_read(codec, 0x02, 0, AC_VERB_GET_CONNECT_SEL, 0);
if (! ucontrol->value.enumerated.item[0]) { if (!val) {
change = sel != 0; change = sel != 0;
if (change) if (change || codec->in_resume)
snd_hda_codec_write(codec, 0x02, 0, AC_VERB_SET_CONNECT_SEL, 0); snd_hda_codec_write(codec, 0x02, 0,
AC_VERB_SET_CONNECT_SEL, 0);
} else { } else {
change = sel == 0; change = sel == 0;
if (change) if (change || codec->in_resume)
snd_hda_codec_write(codec, 0x02, 0, AC_VERB_SET_CONNECT_SEL, 1); snd_hda_codec_write(codec, 0x02, 0,
sel = snd_hda_codec_read(codec, 0x0b, 0, AC_VERB_GET_CONNECT_SEL, 0) + 1; AC_VERB_SET_CONNECT_SEL, 1);
change |= sel == ucontrol->value.enumerated.item[0]; sel = snd_hda_codec_read(codec, 0x0b, 0,
if (change) AC_VERB_GET_CONNECT_SEL, 0) + 1;
snd_hda_codec_write(codec, 0x02, 0, AC_VERB_SET_CONNECT_SEL, change |= sel != val;
ucontrol->value.enumerated.item[0] - 1); if (change || codec->in_resume)
snd_hda_codec_write(codec, 0x0b, 0,
AC_VERB_SET_CONNECT_SEL, val - 1);
} }
return change; return change;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册