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 <[email protected]>
> Signed-off-by: Hui Wang <[email protected]>
> ---
>  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
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to