sound/hda/codecs/realtek/alc269.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
The headset mic on the AN515-57 was shown as unplugged after resuming
from S3/S4, requiring a reboot to recover.
Signed-off-by: Breno Baptista <brenomb07@gmail.com>
---
sound/hda/codecs/realtek/alc269.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 11d0ea8ed859..449a5ab3b0d0 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -3578,6 +3578,16 @@ static void alc2xx_fixup_headset_mic(struct hda_codec *codec,
alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
break;
+ case HDA_FIXUP_ACT_INIT:
+ /*
+ * COEF 0x45 (CTIA combo jack mode) is not preserved across suspend.
+ * Restore it before restarting HP JD so the headset is re-detected.
+ */
+ if (is_s3_resume(codec) || is_s4_resume(codec)) {
+ alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
+ alc_combo_jack_hp_jd_restart(codec);
+ }
+ break;
}
}
--
2.54.0
On Fri, 08 May 2026 23:57:46 +0200,
Breno Baptista wrote:
>
> The headset mic on the AN515-57 was shown as unplugged after resuming
> from S3/S4, requiring a reboot to recover.
>
> Signed-off-by: Breno Baptista <brenomb07@gmail.com>
> ---
> sound/hda/codecs/realtek/alc269.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
> index 11d0ea8ed859..449a5ab3b0d0 100644
> --- a/sound/hda/codecs/realtek/alc269.c
> +++ b/sound/hda/codecs/realtek/alc269.c
> @@ -3578,6 +3578,16 @@ static void alc2xx_fixup_headset_mic(struct hda_codec *codec,
> alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
> spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
> break;
> + case HDA_FIXUP_ACT_INIT:
> + /*
> + * COEF 0x45 (CTIA combo jack mode) is not preserved across suspend.
> + * Restore it before restarting HP JD so the headset is re-detected.
> + */
> + if (is_s3_resume(codec) || is_s4_resume(codec)) {
> + alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
> + alc_combo_jack_hp_jd_restart(codec);
> + }
> + break;
> }
> }
The code change itself looks OK, but I'd like to confirm that it's the
expected behavior.
Kailang, could you verify this please?
thanks,
Takashi
© 2016 - 2026 Red Hat, Inc.