Takashi Iwai 932469
From 1f680609bf1beac20e2a31ddcb1b88874123c39f Mon Sep 17 00:00:00 2001
Takashi Iwai 932469
From: Yuchi Yang <yangyuchi66@gmail.com>
Takashi Iwai 932469
Date: Fri, 30 Dec 2022 15:22:25 +0800
Takashi Iwai 932469
Subject: [PATCH] ALSA: hda/realtek - Turn on power early
Takashi Iwai 932469
Git-commit: 1f680609bf1beac20e2a31ddcb1b88874123c39f
Takashi Iwai 932469
Patch-mainline: v6.2-rc4
Takashi Iwai 932469
References: git-fixes
Takashi Iwai 932469
Takashi Iwai 932469
Turn on power early to avoid wrong state for power relation register.
Takashi Iwai 932469
This can earlier update JD state when resume back.
Takashi Iwai 932469
Takashi Iwai 932469
Signed-off-by: Yuchi Yang <yangyuchi66@gmail.com>
Takashi Iwai 932469
Cc: <stable@vger.kernel.org>
Takashi Iwai 932469
Link: https://lore.kernel.org/r/e35d8f4fa18f4448a2315cc7d4a3715f@realtek.com
Takashi Iwai 932469
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 932469
Takashi Iwai 932469
---
Takashi Iwai 932469
 sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++--------------
Takashi Iwai 932469
 1 file changed, 16 insertions(+), 14 deletions(-)
Takashi Iwai 932469
Takashi Iwai 932469
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
Takashi Iwai 932469
index 3794b522c222..937b227e17c5 100644
Takashi Iwai 932469
--- a/sound/pci/hda/patch_realtek.c
Takashi Iwai 932469
+++ b/sound/pci/hda/patch_realtek.c
Takashi Iwai 932469
@@ -3564,6 +3564,15 @@ static void alc256_init(struct hda_codec *codec)
Takashi Iwai 932469
 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
Takashi Iwai 932469
 	bool hp_pin_sense;
Takashi Iwai 932469
 
Takashi Iwai 932469
+	if (spec->ultra_low_power) {
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x08, 7<<4, 0);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x3b, 1<<15, 0);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
Takashi Iwai 932469
+		msleep(30);
Takashi Iwai 932469
+	}
Takashi Iwai 932469
+
Takashi Iwai 932469
 	if (!hp_pin)
Takashi Iwai 932469
 		hp_pin = 0x21;
Takashi Iwai 932469
 
Takashi Iwai 932469
@@ -3575,14 +3584,6 @@ static void alc256_init(struct hda_codec *codec)
Takashi Iwai 932469
 		msleep(2);
Takashi Iwai 932469
 
Takashi Iwai 932469
 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
Takashi Iwai 932469
-	if (spec->ultra_low_power) {
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x08, 7<<4, 0);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x3b, 1<<15, 0);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
Takashi Iwai 932469
-		msleep(30);
Takashi Iwai 932469
-	}
Takashi Iwai 932469
 
Takashi Iwai 932469
 	snd_hda_codec_write(codec, hp_pin, 0,
Takashi Iwai 932469
 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
Takashi Iwai 932469
@@ -3713,6 +3714,13 @@ static void alc225_init(struct hda_codec *codec)
Takashi Iwai 932469
 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
Takashi Iwai 932469
 	bool hp1_pin_sense, hp2_pin_sense;
Takashi Iwai 932469
 
Takashi Iwai 932469
+	if (spec->ultra_low_power) {
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
Takashi Iwai 932469
+		alc_update_coef_idx(codec, 0x33, 1<<11, 0);
Takashi Iwai 932469
+		msleep(30);
Takashi Iwai 932469
+	}
Takashi Iwai 932469
+
Takashi Iwai 932469
 	if (spec->codec_variant != ALC269_TYPE_ALC287 &&
Takashi Iwai 932469
 		spec->codec_variant != ALC269_TYPE_ALC245)
Takashi Iwai 932469
 		/* required only at boot or S3 and S4 resume time */
Takashi Iwai 932469
@@ -3734,12 +3742,6 @@ static void alc225_init(struct hda_codec *codec)
Takashi Iwai 932469
 		msleep(2);
Takashi Iwai 932469
 
Takashi Iwai 932469
 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
Takashi Iwai 932469
-	if (spec->ultra_low_power) {
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
Takashi Iwai 932469
-		alc_update_coef_idx(codec, 0x33, 1<<11, 0);
Takashi Iwai 932469
-		msleep(30);
Takashi Iwai 932469
-	}
Takashi Iwai 932469
 
Takashi Iwai 932469
 	if (hp1_pin_sense || spec->ultra_low_power)
Takashi Iwai 932469
 		snd_hda_codec_write(codec, hp_pin, 0,
Takashi Iwai 932469
-- 
Takashi Iwai 932469
2.35.3
Takashi Iwai 932469