Linux Power Management development
 help / color / mirror / Atom feed
From: Antheas Kapenekakis <lkml@antheas.dev>
To: linux-pm@vger.kernel.org
Cc: platform-driver-x86@vger.kernel.org, Mario.Limonciello@amd.com,
	luke@ljones.dev, me@kylegospodneti.ch
Subject: [PATCH v1 1/4] acpi/x86: s2idle: add support for screen off and screen on callbacks
Date: Thu, 19 Sep 2024 19:19:49 +0200	[thread overview]
Message-ID: <20240919171952.403745-2-lkml@antheas.dev> (raw)
In-Reply-To: <20240919171952.403745-1-lkml@antheas.dev>

The screen off and screen on firmware functions are meant to signify
the system entering a state where the user is not actively interacting
with it (i.e., in Windows this state is called "Screen Off" and the
system enters it once it turns the screen off e.g., due to inactivity).

In this state, the kernel and userspace are fully active, and the user
might still be interacting with the system somehow (such as with
listening to music or having a hotspot). Userspace is supposed to
minimize non-essential activities, but this is not required.
In addition, there is no requirement of suspending post the screen off
call. If the user interacts with the system, the kernel should call
screen on and resume normal operation.

This patch adds a set of callbacks to allow calling the screen on/off
callbacks outside of the suspend/resume path. It is based on
Mario Limonciello's patch on the superm1/dsm-screen-on-off branch.
However, the intent here is completely different.

Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
---
 include/linux/suspend.h |  5 +++++
 kernel/power/suspend.c  | 12 ++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index da6ebca3ff77..96ceaad07839 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -132,6 +132,7 @@ struct platform_suspend_ops {
 };
 
 struct platform_s2idle_ops {
+	int (*screen_off)(void);
 	int (*begin)(void);
 	int (*prepare)(void);
 	int (*prepare_late)(void);
@@ -140,6 +141,7 @@ struct platform_s2idle_ops {
 	void (*restore_early)(void);
 	void (*restore)(void);
 	void (*end)(void);
+	int (*screen_on)(void);
 };
 
 #ifdef CONFIG_SUSPEND
@@ -160,6 +162,9 @@ extern unsigned int pm_suspend_global_flags;
 #define PM_SUSPEND_FLAG_FW_RESUME	BIT(1)
 #define PM_SUSPEND_FLAG_NO_PLATFORM	BIT(2)
 
+int platform_suspend_screen_off(void);
+int platform_suspend_screen_on(void);
+
 static inline void pm_suspend_clear_flags(void)
 {
 	pm_suspend_global_flags = 0;
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 09f8397bae15..19734b297527 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -254,6 +254,18 @@ static bool sleep_state_supported(suspend_state_t state)
 	       (valid_state(state) && !cxl_mem_active());
 }
 
+int platform_suspend_screen_off(void)
+{
+	return s2idle_ops && s2idle_ops->screen_off ? s2idle_ops->screen_off() : 0;
+}
+EXPORT_SYMBOL_GPL(platform_suspend_screen_off);
+
+int platform_suspend_screen_on(void)
+{
+	return s2idle_ops && s2idle_ops->screen_on ? s2idle_ops->screen_on() : 0;
+}
+EXPORT_SYMBOL_GPL(platform_suspend_screen_on);
+
 static int platform_suspend_prepare(suspend_state_t state)
 {
 	return state != PM_SUSPEND_TO_IDLE && suspend_ops->prepare ?
-- 
2.46.1


  reply	other threads:[~2024-09-19 17:26 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-19 17:19 [PATCH v1 0/4] acpi/x86: s2idle: move Display off/on calls outside suspend (fixes ROG Ally suspend) Antheas Kapenekakis
2024-09-19 17:19 ` Antheas Kapenekakis [this message]
2024-09-19 17:29   ` [PATCH v1 1/4] acpi/x86: s2idle: add support for screen off and screen on callbacks Mario Limonciello
2024-09-19 17:36     ` Antheas Kapenekakis
2024-09-19 20:17       ` Mario Limonciello
2024-09-19 17:19 ` [PATCH v1 2/4] acpi/x86: s2idle: handle screen off/on calls outside of suspend sequence Antheas Kapenekakis
2024-09-19 17:35   ` Mario Limonciello
2024-09-19 18:21     ` Alex Deucher
2024-09-19 18:32       ` Mario Limonciello
2024-09-19 18:35         ` Antheas Kapenekakis
2024-09-19 17:19 ` [PATCH v1 3/4] acpi/x86: s2idle: call screen on and off as part of callbacks Antheas Kapenekakis
2024-09-19 19:01   ` Mario Limonciello
2024-09-19 20:45     ` Antheas Kapenekakis
2024-09-19 20:51       ` Mario Limonciello
2024-09-19 20:54         ` Antheas Kapenekakis
2024-09-21  1:03           ` Denis Benato
2024-09-21  6:22             ` Antheas Kapenekakis
2024-09-21 14:47               ` Denis Benato
2024-09-21 19:44                 ` Antheas Kapenekakis
2024-09-22  2:07                   ` Denis Benato
2024-09-22  7:48                     ` Antheas Kapenekakis
2024-09-19 17:19 ` [PATCH v1 4/4] platform/x86: asus-wmi: remove Ally (1st gen) and Ally X suspend quirk Antheas Kapenekakis
2024-09-19 18:36   ` Mario Limonciello

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240919171952.403745-2-lkml@antheas.dev \
    --to=lkml@antheas.dev \
    --cc=Mario.Limonciello@amd.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=luke@ljones.dev \
    --cc=me@kylegospodneti.ch \
    --cc=platform-driver-x86@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox