[alsa-devel] [PATCH] ALSA: hda - Add a de-pop quirk for some HP machines

Takashi Iwai tiwai at suse.de
Fri Aug 29 10:02:49 CEST 2014


At Fri, 29 Aug 2014 15:47:05 +0800,
Hui Wang wrote:
> 
> On some HP machines, there will be pop noise when the machine is
> shutting down, rebooting or booting up from poweroff state.
> 
> Set EAPD enable only when stream starts can help to fix this
> problem.
> 
> [The patch was originally written by Kailang, we tested it and
> rebased it on latest kernel.]
> 
> Signed-off-by: Kailang Yang <kailang at realtek.com>
> Signed-off-by: Hui Wang <hui.wang at canonical.com>
> ---
>  sound/pci/hda/patch_realtek.c | 55 ++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 52 insertions(+), 3 deletions(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 48d6d10..51811a6 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -4282,6 +4282,47 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec,
>  	}
>  }
>  
> +/*
> + * ALC290 PCM hooks
> + */
> +static void alc290_playback_pcm_hook(struct hda_pcm_stream *hinfo,
> +				     struct hda_codec *codec,
> +				     struct snd_pcm_substream *substream,
> +				     int action)
> +{
> +	int val;
> +
> +	switch (action) {
> +	case HDA_GEN_PCM_ACT_OPEN:
> +		val = alc_read_coef_idx(codec, 0x4); /* EAPD manual high */
> +		if ((val & 0xc000) != 0xc000)
> +			alc_write_coef_idx(codec, 0x4, val | (1<<14));
> +		break;
> +	}
> +}
> +
> +static void alc290_fixup_pop_noise(struct hda_codec *codec,
> +				   const struct hda_fixup *fix, int action)
> +{
> +	struct alc_spec *spec = codec->spec;
> +	int val;
> +
> +	switch (action) {
> +	case HDA_FIXUP_ACT_PRE_PROBE:
> +		snd_hda_codec_write(codec, 0x17, 0,
> +				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);

Why do you need this...

> +		val = alc_read_coef_idx(codec, 0x4);
> +		if ((val & 0xc000) != 0xc000)
> +			alc_write_coef_idx(codec, 0x4, val | (3<<14)); /* EAPD low */
> +		spec->gen.pcm_playback_hook = alc290_playback_pcm_hook;
> +		break;
> +	case HDA_FIXUP_ACT_INIT:
> +		snd_hda_codec_write(codec, 0x17, 0,
> +				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);

... and this?  There is no explanation about this change.

Also, can't you just set EAPD low in the shutdown callback instead?

In your patch, if the machine goes shutdown/reboot while playing a
stream (or before runtime PM), it's still EAPD high, so the noise
should be heard, if I understand correctly.


Takashi


More information about the Alsa-devel mailing list