[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