|
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 |
|