Commit 97a26570 authored by Kailang Yang's avatar Kailang Yang Committed by Takashi Iwai

ALSA: hda/realtek - Remove depop delay for suspend and resume if applicable

This patch defines a flag "no_depop_delay" in alc_spec. If this flag is set,
delay in alc_eapd_shutup and alc_resume will be skipped.

Machine-specific fixup can set this flag to reduce suspend/resume time, if
the codec and hardware analog design can avoid pop noise without this delay.
Signed-off-by: default avatarKailang Yang <kailang@realtek.com>
Signed-off-by: default avatarMengdong Lin <mengdong.lin@intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 4b016931
...@@ -118,7 +118,8 @@ struct alc_spec { ...@@ -118,7 +118,8 @@ struct alc_spec {
int init_amp; int init_amp;
int codec_variant; /* flag for other variants */ int codec_variant; /* flag for other variants */
bool has_alc5505_dsp; unsigned int has_alc5505_dsp:1;
unsigned int no_depop_delay:1;
/* for PLL fix */ /* for PLL fix */
hda_nid_t pll_nid; hda_nid_t pll_nid;
...@@ -280,8 +281,11 @@ static void alc_auto_setup_eapd(struct hda_codec *codec, bool on) ...@@ -280,8 +281,11 @@ static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
*/ */
static void alc_eapd_shutup(struct hda_codec *codec) static void alc_eapd_shutup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec;
alc_auto_setup_eapd(codec, false); alc_auto_setup_eapd(codec, false);
msleep(200); if (!spec->no_depop_delay)
msleep(200);
snd_hda_shutup_pins(codec); snd_hda_shutup_pins(codec);
} }
...@@ -863,7 +867,10 @@ static int alc_suspend(struct hda_codec *codec) ...@@ -863,7 +867,10 @@ static int alc_suspend(struct hda_codec *codec)
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int alc_resume(struct hda_codec *codec) static int alc_resume(struct hda_codec *codec)
{ {
msleep(150); /* to avoid pop noise */ struct alc_spec *spec = codec->spec;
if (!spec->no_depop_delay)
msleep(150); /* to avoid pop noise */
codec->patch_ops.init(codec); codec->patch_ops.init(codec);
snd_hda_codec_resume_amp(codec); snd_hda_codec_resume_amp(codec);
snd_hda_codec_resume_cache(codec); snd_hda_codec_resume_cache(codec);
...@@ -4457,7 +4464,7 @@ static int patch_alc269(struct hda_codec *codec) ...@@ -4457,7 +4464,7 @@ static int patch_alc269(struct hda_codec *codec)
} }
if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) { if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
spec->has_alc5505_dsp = true; spec->has_alc5505_dsp = 1;
spec->init_hook = alc5505_dsp_init; spec->init_hook = alc5505_dsp_init;
} }
......
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