[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250224195059.10185-2-lkml@antheas.dev>
Date: Mon, 24 Feb 2025 20:50:57 +0100
From: Antheas Kapenekakis <lkml@...heas.dev>
To: mario.limonciello@....com,
mpearson-lenovo@...ebb.ca
Cc: ilpo.jarvinen@...ux.intel.com,
lenb@...nel.org,
linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org,
platform-driver-x86@...r.kernel.org,
rafael@...nel.org,
hdegoede@...hat.com,
me@...egospodneti.ch,
Antheas Kapenekakis <lkml@...heas.dev>
Subject: [PATCH 1/3] ACPI: platform_profile: Add support for secondary
handlers
Currently, only the subset of supported profiles are exposed when
using platform profile. This is a big problem when e.g., asus-wmi
and amd-pmf are loaded together, as they have conflicting low
power options. This causes ppd and tuned to miss the low power
option increasing power consumption.
Therefore, add the secondary variable. Profile handlers with it should
accept all profile options always. Only when they are the sole
handler, their probe function will be used to expose available profiles.
Signed-off-by: Antheas Kapenekakis <lkml@...heas.dev>
---
drivers/platform/x86/amd/pmf/sps.c | 1 +
include/linux/platform_profile.h | 7 +++++++
2 files changed, 8 insertions(+)
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index e6cf0b22dac3..424b146d3574 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -397,6 +397,7 @@ static int amd_pmf_profile_probe(void *drvdata, unsigned long *choices)
}
static const struct platform_profile_ops amd_pmf_profile_ops = {
+ .secondary = true,
.probe = amd_pmf_profile_probe,
.profile_get = amd_pmf_profile_get,
.profile_set = amd_pmf_profile_set,
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 8ab5b0e8eb2c..fef5f2404e9f 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -30,6 +30,12 @@ enum platform_profile_option {
/**
* struct platform_profile_ops - platform profile operations
+ * @secondary: Set the platform handler as a secondary. Secondary handlers
+ * should be able to accept all profile options. This way, they do
+ * not obscure the primary handler's profile options (such as amdpmf
+ * having cool and asus-wmi having quiet). When a secondary handler
+ * is the only handler available, its probe function is still used
+ * to avoid showing all profiles.
* @probe: Callback to setup choices available to the new class device. These
* choices will only be enforced when setting a new profile, not when
* getting the current one.
@@ -39,6 +45,7 @@ enum platform_profile_option {
* profile in sysfs.
*/
struct platform_profile_ops {
+ bool secondary;
int (*probe)(void *drvdata, unsigned long *choices);
int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
int (*profile_set)(struct device *dev, enum platform_profile_option profile);
--
2.48.1
Powered by blists - more mailing lists