mirror of https://gitee.com/openkylin/linux.git
ALSA: hda - Don't set indep_hp flag for old AD codecs
Some old AD codecs don't like the independent HP handling, either it contains a single DAC (AD1981) or it mandates the mixer routing (AD1986A). This patch removes the indep_hp flag for such codecs. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=68081 Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
80ab8eae70
commit
cbd209f41e
|
@ -185,7 +185,7 @@ static const struct hda_codec_ops ad198x_auto_patch_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static int ad198x_parse_auto_config(struct hda_codec *codec)
|
static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
|
||||||
{
|
{
|
||||||
struct ad198x_spec *spec = codec->spec;
|
struct ad198x_spec *spec = codec->spec;
|
||||||
struct auto_pin_cfg *cfg = &spec->gen.autocfg;
|
struct auto_pin_cfg *cfg = &spec->gen.autocfg;
|
||||||
|
@ -195,7 +195,7 @@ static int ad198x_parse_auto_config(struct hda_codec *codec)
|
||||||
codec->no_trigger_sense = 1;
|
codec->no_trigger_sense = 1;
|
||||||
codec->no_sticky_stream = 1;
|
codec->no_sticky_stream = 1;
|
||||||
|
|
||||||
spec->gen.indep_hp = 1;
|
spec->gen.indep_hp = indep_hp;
|
||||||
spec->gen.add_stereo_mix_input = 1;
|
spec->gen.add_stereo_mix_input = 1;
|
||||||
|
|
||||||
err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
|
err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
|
||||||
|
@ -379,7 +379,7 @@ static int patch_ad1986a(struct hda_codec *codec)
|
||||||
ad1986a_fixups);
|
ad1986a_fixups);
|
||||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
||||||
|
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, false);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
snd_hda_gen_free(codec);
|
snd_hda_gen_free(codec);
|
||||||
return err;
|
return err;
|
||||||
|
@ -481,7 +481,7 @@ static int patch_ad1983(struct hda_codec *codec)
|
||||||
|
|
||||||
spec->gen.beep_nid = 0x10;
|
spec->gen.beep_nid = 0x10;
|
||||||
set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
|
set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, false);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
err = ad1983_add_spdif_mux_ctl(codec);
|
err = ad1983_add_spdif_mux_ctl(codec);
|
||||||
|
@ -568,7 +568,7 @@ static int patch_ad1981(struct hda_codec *codec)
|
||||||
snd_hda_pick_fixup(codec, NULL, ad1981_fixup_tbl, ad1981_fixups);
|
snd_hda_pick_fixup(codec, NULL, ad1981_fixup_tbl, ad1981_fixups);
|
||||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
||||||
|
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, false);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
err = ad1983_add_spdif_mux_ctl(codec);
|
err = ad1983_add_spdif_mux_ctl(codec);
|
||||||
|
@ -894,7 +894,7 @@ static int patch_ad1988(struct hda_codec *codec)
|
||||||
snd_hda_pick_fixup(codec, ad1988_fixup_models, NULL, ad1988_fixups);
|
snd_hda_pick_fixup(codec, ad1988_fixup_models, NULL, ad1988_fixups);
|
||||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
||||||
|
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, true);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
err = ad1988_add_spdif_mux_ctl(codec);
|
err = ad1988_add_spdif_mux_ctl(codec);
|
||||||
|
@ -1071,7 +1071,7 @@ static int patch_ad1884(struct hda_codec *codec)
|
||||||
snd_hda_pick_fixup(codec, NULL, ad1884_fixup_tbl, ad1884_fixups);
|
snd_hda_pick_fixup(codec, NULL, ad1884_fixup_tbl, ad1884_fixups);
|
||||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
||||||
|
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, true);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
err = ad1983_add_spdif_mux_ctl(codec);
|
err = ad1983_add_spdif_mux_ctl(codec);
|
||||||
|
@ -1113,7 +1113,7 @@ static int patch_ad1882(struct hda_codec *codec)
|
||||||
spec->gen.mixer_merge_nid = 0x21;
|
spec->gen.mixer_merge_nid = 0x21;
|
||||||
spec->gen.beep_nid = 0x10;
|
spec->gen.beep_nid = 0x10;
|
||||||
set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
|
set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
|
||||||
err = ad198x_parse_auto_config(codec);
|
err = ad198x_parse_auto_config(codec, true);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
err = ad1988_add_spdif_mux_ctl(codec);
|
err = ad1988_add_spdif_mux_ctl(codec);
|
||||||
|
|
Loading…
Reference in New Issue