Commit 3e1b0c4a authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Fix click noise at start on Dell XPS13

Dell XPS13 produces a click noise at boot up, and Gabriele spotted out
that it's triggered by the initial pin control of the mic (NID 0x19).
This has to be set to Hi-Z Vref while the driver initializes to Vref
80% as a normal mic.

This patch fixes the generic parser code not to override the target
vref if it has been already set by the driver, and adds a proper
initialization of the target vref for this pin in the Realtek driver
side.
Reported-and-tested-by: default avatarGabriele Mazzotta <gabriele.mzt@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b787f68c
...@@ -3259,7 +3259,8 @@ static int create_input_ctls(struct hda_codec *codec) ...@@ -3259,7 +3259,8 @@ static int create_input_ctls(struct hda_codec *codec)
val = PIN_IN; val = PIN_IN;
if (cfg->inputs[i].type == AUTO_PIN_MIC) if (cfg->inputs[i].type == AUTO_PIN_MIC)
val |= snd_hda_get_default_vref(codec, pin); val |= snd_hda_get_default_vref(codec, pin);
if (pin != spec->hp_mic_pin) if (pin != spec->hp_mic_pin &&
!snd_hda_codec_get_pin_target(codec, pin))
set_pin_target(codec, pin, val, false); set_pin_target(codec, pin, val, false);
if (mixer) { if (mixer) {
......
...@@ -4190,11 +4190,18 @@ static void alc_shutup_dell_xps13(struct hda_codec *codec) ...@@ -4190,11 +4190,18 @@ static void alc_shutup_dell_xps13(struct hda_codec *codec)
static void alc_fixup_dell_xps13(struct hda_codec *codec, static void alc_fixup_dell_xps13(struct hda_codec *codec,
const struct hda_fixup *fix, int action) const struct hda_fixup *fix, int action)
{ {
if (action == HDA_FIXUP_ACT_PROBE) {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
struct hda_input_mux *imux = &spec->gen.input_mux; struct hda_input_mux *imux = &spec->gen.input_mux;
int i; int i;
switch (action) {
case HDA_FIXUP_ACT_PRE_PROBE:
/* mic pin 0x19 must be initialized with Vref Hi-Z, otherwise
* it causes a click noise at start up
*/
snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
break;
case HDA_FIXUP_ACT_PROBE:
spec->shutup = alc_shutup_dell_xps13; spec->shutup = alc_shutup_dell_xps13;
/* Make the internal mic the default input source. */ /* Make the internal mic the default input source. */
...@@ -4204,6 +4211,7 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec, ...@@ -4204,6 +4211,7 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec,
break; break;
} }
} }
break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment