[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
<CAGwozwHdsJ8RJNMA6QsU0M2KpB0+a+sttH=1Kx5Ecf1jOjF9DQ@mail.gmail.com>
Date: Tue, 27 Jan 2026 21:05:45 +0100
From: Antheas Kapenekakis <lkml@...heas.dev>
To: Jakob Riemenschneider <riemenschneiderjakob@...il.com>
Cc: "Rafael J . Wysocki" <rafael@...nel.org>, Len Brown <lenb@...nel.org>,
linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org, Antheas Kapenekakis <antheas@...heas.dev>
Subject: Re: [PATCH v2] ACPI: x86: s2idle: Invoke Microsoft _DSM Function 9
(Turn On Display)
On Tue, 27 Jan 2026 at 21:01, Jakob Riemenschneider
<riemenschneiderjakob@...il.com> wrote:
>
> Windows 11, version 22H2 introduced a new function index (Function 9) to
> the Microsoft LPS0 _DSM, titled "Turn On Display Notification".
>
> According to Microsoft documentation, this function signals to the system
> firmware that the OS intends to turn on the display when exiting Modern
> Standby. This allows the firmware to release Power Limits (PLx) earlier.
>
> Crucially, this patch fixes a functional issue observed on the Lenovo Yoga
> Slim 7i Aura (15ILL9), where system fans and keyboard backlights fail to
> resume after suspend. Investigation linked shows the EC on this device
> turns off these components during sleep but requires the Function 9
> notification to wake them up again.
>
> This patch defines the new function index (ACPI_MS_TURN_ON_DISPLAY) and
> invokes it in acpi_s2idle_restore_early_lps0(). The execution order is
> updated to match the logic of an "intent" signal:
>
> 1. LPS0 Exit (Function 6)
> 2. Turn On Display Intent (Function 9)
> 3. Modern Standby Exit (Function 8)
> 4. Screen On (Function 4)
>
> Invoking Function 9 before the Modern Standby Exit ensures the firmware
> has time to restore power rails and functionality (like fans) before the
> software fully exits the sleep state.
>
> Link: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-firmware-notifications#turn-on-display-notification-function-9
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=220505
> Suggested-by: Antheas Kapenekakis <antheas@...heas.dev>
LGTM, no need for rby, sby covers it.
Consider closes + reported by from bugzilla if there is a V3, I
typically use lkml@...heas.dev but that is small.
I will defer to Rafael now
Best,
Antheas
> Signed-off-by: Jakob Riemenschneider <riemenschneiderjakob@...il.com>
> ---
> v2:
> - Renamed constant from ACPI_LPS0_MS_DISPLAY_ON to ACPI_MS_TURN_ON_DISPLAY per feedback.
> - Moved the Function 9 call to occur before MS Exit (Function 8) to act as an intent signal.
>
> drivers/acpi/x86/s2idle.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index 6d4d06236..de94b57f7 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -45,6 +45,7 @@ static const struct acpi_device_id lps0_device_ids[] = {
> #define ACPI_LPS0_EXIT 6
> #define ACPI_LPS0_MS_ENTRY 7
> #define ACPI_LPS0_MS_EXIT 8
> +#define ACPI_MS_TURN_ON_DISPLAY 9
>
> /* AMD */
> #define ACPI_LPS0_DSM_UUID_AMD "e3f32452-febc-43ce-9039-932122d37721"
> @@ -352,6 +353,8 @@ static const char *acpi_sleep_dsm_state_to_str(unsigned int state)
> return "lps0 ms entry";
> case ACPI_LPS0_MS_EXIT:
> return "lps0 ms exit";
> + case ACPI_MS_TURN_ON_DISPLAY:
> + return "lps0 ms turn on display";
> }
> } else {
> switch (state) {
> @@ -612,6 +615,9 @@ static void acpi_s2idle_restore_early_lps0(void)
> if (lps0_dsm_func_mask_microsoft > 0) {
> acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
> lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
> + /* Intent to turn on display */
> + acpi_sleep_run_lps0_dsm(ACPI_MS_TURN_ON_DISPLAY,
> + lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
> /* Modern Standby exit */
> acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
> lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
> --
> 2.52.0
>
>
Powered by blists - more mailing lists