https://bugzilla.kernel.org/show_bug.cgi?id=220505
--- Comment #25 from tropicaal ([email protected]) --- @Jakob Microsoft's docs are written in some (very) broken English, but my general reading of it makes it seem as if they want the "Turn On Display notification" to be invoked before the "Display On Notification". For this laptop, that doesn't seem to matter, but some edgecases with OEM implementations on other hardware could maybe result in this causing problems. > This _DSM is invoked when the system intends to turn on the display when > exiting Modern Standby. For example, if any OEM design were intentionally put > device to lower Power Limit (PLx) when after sleep entry (Function 7), but > that specific design be complained resume time longer than other devices. > That Function 9 is a signal to help system firmware earlier release PL to > improve resume time from Modern Standby when ONLY intends to turn on display. > (Functions 9 have been added in Windows 11 version 22H2.) I'm interpreting this as the OS sharing an "intent" to firmware that ACPI_LPS0_SCREEN_ON will be invoked at a later point during resume. This is what I threw together (though it's untested). diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c index 6d4d06236f61..9f8eb6defab2 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_LPS0_MS_TURN_ON_SCREEN 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_LPS0_MS_TURN_ON_SCREEN: + return "lps0 ms turn on screen"; } } else { switch (state) { @@ -617,10 +620,15 @@ static void acpi_s2idle_restore_early_lps0(void) lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); } - /* Screen on */ - if (lps0_dsm_func_mask_microsoft > 0) + if (lps0_dsm_func_mask_microsoft > 0) { + /* Turn on screen */ + acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_TURN_ON_SCREEN, + lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); + /* Screen on */ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON, lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); + } + if (lps0_dsm_func_mask > 0) acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ? ACPI_LPS0_SCREEN_ON_AMD : -- You may reply to this email to add a comment. You are receiving this mail because: You are watching the assignee of the bug. _______________________________________________ acpi-bugzilla mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla
