[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250804030518.424229-2-wangdich9700@163.com>
Date: Mon, 4 Aug 2025 11:05:18 +0800
From: wangdich9700@....com
To: lgirdwood@...il.com,
broonie@...nel.org,
perex@...ex.cz,
tiwai@...e.com
Cc: linux-kernel@...r.kernel.org,
alsa-devel@...a-project.org,
linux-arm-kernel@...ts.infradead.org,
wangdicheng <wangdicheng@...inos.cn>
Subject: [PATCH 2/2] ALSA: hda/realtek: Fix ALC662 codec pop noise on recording
From: wangdicheng <wangdicheng@...inos.cn>
Pop noise originates from unstable mic_vref during power_save transitions.
Remediation: Disable VREF at resume, delay 1000ms before re-enabling to guarantee circuit stabilization pre-capture.
Signed-off-by: wangdicheng <wangdicheng@...inos.cn>
---
sound/pci/hda/patch_realtek.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 88675eae9447..665e291dea75 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -997,16 +997,21 @@ static int alc_suspend(struct hda_codec *codec)
static int alc_resume(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
+ int vref_delay = 0;
if (!spec->no_depop_delay)
msleep(150); /* to avoid pop noise */
codec->patch_ops.init(codec);
- if (codec->core.subsystem_id == 0x10ec1304) {
+ if (codec->core.subsystem_id == 0x10ec1304)
+ vref_delay = 2000;
+ else if (codec->core.subsystem_id == 0x1b505809)
+ vref_delay = 1000;
+ if (vref_delay > 0) {
snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x04);
msleep(50);
snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x44);
- msleep(2000);
+ msleep(vref_delay);
snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80);
}
snd_hda_regmap_sync(codec);
--
2.25.1
Powered by blists - more mailing lists