* [PATCH v4 00/19] Hide platform_profile_handler from consumers
@ 2025-01-16 0:27 Kurt Borja
2025-01-16 0:27 ` [PATCH v4 01/19] ACPI: platform_profile: Replace *class_dev member with class_dev Kurt Borja
` (20 more replies)
0 siblings, 21 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Hi :)
The merge window is about to open, so I rebased this patchset on top of
pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
manage to squeeze this into v6.14.
~ Kurt
---
v3 -> v4:
[09/19]
- Replace error message with a user-friendly one
v3: https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
Kurt Borja (19):
ACPI: platform_profile: Replace *class_dev member with class_dev
ACPI: platform_profile: Let drivers set drvdata to the class device
ACPI: platform_profile: Remove platform_profile_handler from callbacks
ACPI: platform_profile: Add `ops` member to handlers
ACPI: platform_profile: Add `probe` to platform_profile_ops
platform/surface: surface_platform_profile: Use
devm_platform_profile_register()
platform/x86: acer-wmi: Use devm_platform_profile_register()
platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
platform/x86: asus-wmi: Use devm_platform_profile_register()
platform/x86: dell-pc: Use devm_platform_profile_register()
platform/x86: ideapad-laptop: Use devm_platform_profile_register()
platform/x86: hp-wmi: Use devm_platform_profile_register()
platform/x86: inspur_platform_profile: Use
devm_platform_profile_register()
platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
ACPI: platform_profile: Remove platform_profile_handler from exported
symbols
ACPI: platform_profile: Move platform_profile_handler
ACPI: platform_profile: Clean platform_profile_handler
ACPI: platform_profile: Add documentation
ACPI: platform_profile: Add a prefix to log messages
.../ABI/testing/sysfs-class-platform-profile | 44 +++++
drivers/acpi/platform_profile.c | 172 +++++++++++++-----
.../surface/surface_platform_profile.c | 48 ++---
drivers/platform/x86/acer-wmi.c | 114 ++++++------
drivers/platform/x86/amd/pmf/core.c | 1 -
drivers/platform/x86/amd/pmf/pmf.h | 3 +-
drivers/platform/x86/amd/pmf/sps.c | 51 +++---
drivers/platform/x86/asus-wmi.c | 55 +++---
drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
drivers/platform/x86/dell/dell-pc.c | 60 +++---
drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
drivers/platform/x86/ideapad-laptop.c | 45 +++--
.../platform/x86/inspur_platform_profile.c | 48 +++--
drivers/platform/x86/thinkpad_acpi.c | 37 ++--
include/linux/platform_profile.h | 37 ++--
15 files changed, 495 insertions(+), 337 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
--
2.48.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v4 01/19] ACPI: platform_profile: Replace *class_dev member with class_dev
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device Kurt Borja
` (19 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Instead of holding a reference to the class device, embed it the
platform_profile_handler. This involves manually creating and
registering the device and replacing dev_get_drvdata() with the newly
created to_pprof_handler() macro.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 37 +++++++++++++++++---------------
include/linux/platform_profile.h | 3 ++-
2 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 4c4200a0b1a6..15f24adc57d4 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -5,11 +5,12 @@
#include <linux/acpi.h>
#include <linux/bits.h>
#include <linux/init.h>
-#include <linux/kdev_t.h>
#include <linux/mutex.h>
#include <linux/platform_profile.h>
#include <linux/sysfs.h>
+#define to_pprof_handler(d) (container_of(d, struct platform_profile_handler, class_dev))
+
static DEFINE_MUTEX(profile_lock);
static const char * const profile_names[] = {
@@ -60,7 +61,7 @@ static int _store_class_profile(struct device *dev, void *data)
int *bit = (int *)data;
lockdep_assert_held(&profile_lock);
- handler = dev_get_drvdata(dev);
+ handler = to_pprof_handler(dev);
if (!test_bit(*bit, handler->choices))
return -EOPNOTSUPP;
@@ -76,11 +77,11 @@ static int _store_class_profile(struct device *dev, void *data)
*/
static int _notify_class_profile(struct device *dev, void *data)
{
- struct platform_profile_handler *handler = dev_get_drvdata(dev);
+ struct platform_profile_handler *handler = to_pprof_handler(dev);
lockdep_assert_held(&profile_lock);
- sysfs_notify(&handler->class_dev->kobj, NULL, "profile");
- kobject_uevent(&handler->class_dev->kobj, KOBJ_CHANGE);
+ sysfs_notify(&handler->class_dev.kobj, NULL, "profile");
+ kobject_uevent(&handler->class_dev.kobj, KOBJ_CHANGE);
return 0;
}
@@ -100,7 +101,7 @@ static int get_class_profile(struct device *dev,
int err;
lockdep_assert_held(&profile_lock);
- handler = dev_get_drvdata(dev);
+ handler = to_pprof_handler(dev);
err = handler->profile_get(handler, &val);
if (err) {
pr_err("Failed to get profile for handler %s\n", handler->name);
@@ -124,7 +125,7 @@ static int get_class_profile(struct device *dev,
*/
static ssize_t name_show(struct device *dev, struct device_attribute *attr, char *buf)
{
- struct platform_profile_handler *handler = dev_get_drvdata(dev);
+ struct platform_profile_handler *handler = to_pprof_handler(dev);
return sysfs_emit(buf, "%s\n", handler->name);
}
@@ -142,7 +143,7 @@ static ssize_t choices_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
- struct platform_profile_handler *handler = dev_get_drvdata(dev);
+ struct platform_profile_handler *handler = to_pprof_handler(dev);
return _commmon_choices_show(handler->choices, buf);
}
@@ -229,7 +230,7 @@ static int _aggregate_choices(struct device *dev, void *data)
unsigned long *aggregate = data;
lockdep_assert_held(&profile_lock);
- handler = dev_get_drvdata(dev);
+ handler = to_pprof_handler(dev);
if (test_bit(PLATFORM_PROFILE_LAST, aggregate))
bitmap_copy(aggregate, handler->choices, PLATFORM_PROFILE_LAST);
else
@@ -410,7 +411,7 @@ static const struct attribute_group platform_profile_group = {
void platform_profile_notify(struct platform_profile_handler *pprof)
{
scoped_cond_guard(mutex_intr, return, &profile_lock) {
- _notify_class_profile(pprof->class_dev, NULL);
+ _notify_class_profile(&pprof->class_dev, NULL);
}
sysfs_notify(acpi_kobj, NULL, "platform_profile");
}
@@ -476,11 +477,13 @@ int platform_profile_register(struct platform_profile_handler *pprof)
pprof->minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
if (pprof->minor < 0)
return pprof->minor;
- pprof->class_dev = device_create(&platform_profile_class, pprof->dev,
- MKDEV(0, 0), pprof, "platform-profile-%d",
- pprof->minor);
- if (IS_ERR(pprof->class_dev)) {
- err = PTR_ERR(pprof->class_dev);
+
+ pprof->class_dev.class = &platform_profile_class;
+ pprof->class_dev.parent = pprof->dev;
+ dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
+ err = device_register(&pprof->class_dev);
+ if (err) {
+ put_device(&pprof->class_dev);
goto cleanup_ida;
}
@@ -493,7 +496,7 @@ int platform_profile_register(struct platform_profile_handler *pprof)
return 0;
cleanup_cur:
- device_unregister(pprof->class_dev);
+ device_unregister(&pprof->class_dev);
cleanup_ida:
ida_free(&platform_profile_ida, pprof->minor);
@@ -508,7 +511,7 @@ int platform_profile_remove(struct platform_profile_handler *pprof)
guard(mutex)(&profile_lock);
id = pprof->minor;
- device_unregister(pprof->class_dev);
+ device_unregister(&pprof->class_dev);
ida_free(&platform_profile_ida, id);
sysfs_notify(acpi_kobj, NULL, "platform_profile");
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index f1cd4b65e351..8a9b8754f9ac 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -9,6 +9,7 @@
#ifndef _PLATFORM_PROFILE_H_
#define _PLATFORM_PROFILE_H_
+#include <linux/device.h>
#include <linux/bitops.h>
/*
@@ -30,7 +31,7 @@ enum platform_profile_option {
struct platform_profile_handler {
const char *name;
struct device *dev;
- struct device *class_dev;
+ struct device class_dev;
int minor;
unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
int (*profile_get)(struct platform_profile_handler *pprof,
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
2025-01-16 0:27 ` [PATCH v4 01/19] ACPI: platform_profile: Replace *class_dev member with class_dev Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 14:55 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks Kurt Borja
` (18 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Add *drvdata to platform_profile_register() signature and assign it to
the class device.
While at it, pass specific driver state as drvdata to replace uses of
container_of() with dev_get_drvdata().
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 7 ++++---
drivers/platform/surface/surface_platform_profile.c | 6 +++---
drivers/platform/x86/acer-wmi.c | 2 +-
drivers/platform/x86/amd/pmf/sps.c | 6 +++---
drivers/platform/x86/asus-wmi.c | 6 +++---
drivers/platform/x86/dell/alienware-wmi.c | 2 +-
drivers/platform/x86/dell/dell-pc.c | 2 +-
drivers/platform/x86/hp/hp-wmi.c | 2 +-
drivers/platform/x86/ideapad-laptop.c | 6 +++---
drivers/platform/x86/inspur_platform_profile.c | 8 +++-----
drivers/platform/x86/thinkpad_acpi.c | 2 +-
include/linux/platform_profile.h | 4 ++--
12 files changed, 26 insertions(+), 27 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 15f24adc57d4..689541d2e66c 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -460,7 +460,7 @@ int platform_profile_cycle(void)
}
EXPORT_SYMBOL_GPL(platform_profile_cycle);
-int platform_profile_register(struct platform_profile_handler *pprof)
+int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
{
int err;
@@ -480,6 +480,7 @@ int platform_profile_register(struct platform_profile_handler *pprof)
pprof->class_dev.class = &platform_profile_class;
pprof->class_dev.parent = pprof->dev;
+ dev_set_drvdata(&pprof->class_dev, drvdata);
dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
err = device_register(&pprof->class_dev);
if (err) {
@@ -529,7 +530,7 @@ static void devm_platform_profile_release(struct device *dev, void *res)
platform_profile_remove(*pprof);
}
-int devm_platform_profile_register(struct platform_profile_handler *pprof)
+int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
{
struct platform_profile_handler **dr;
int ret;
@@ -538,7 +539,7 @@ int devm_platform_profile_register(struct platform_profile_handler *pprof)
if (!dr)
return -ENOMEM;
- ret = platform_profile_register(pprof);
+ ret = platform_profile_register(pprof, drvdata);
if (ret) {
devres_free(dr);
return ret;
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index 6c87e982bfc8..edb9362003a4 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -161,7 +161,7 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
enum ssam_tmp_profile tp;
int status;
- tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
+ tpd = dev_get_drvdata(&pprof->class_dev);
status = ssam_tmp_profile_get(tpd->sdev, &tp);
if (status)
@@ -181,7 +181,7 @@ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
struct ssam_platform_profile_device *tpd;
int tp;
- tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
+ tpd = dev_get_drvdata(&pprof->class_dev);
tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
if (tp < 0)
@@ -224,7 +224,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
- return platform_profile_register(&tpd->handler);
+ return platform_profile_register(&tpd->handler, tpd);
}
static void surface_platform_profile_remove(struct ssam_device *sdev)
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index acf610d59168..1aedf0ef4189 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -2073,7 +2073,7 @@ static int acer_platform_profile_setup(struct platform_device *device)
ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
}
- err = platform_profile_register(&platform_profile_handler);
+ err = platform_profile_register(&platform_profile_handler, NULL);
if (err)
return err;
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index bd2bd6cfc39a..259a598acd3e 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -285,7 +285,7 @@ bool is_pprof_balanced(struct amd_pmf_dev *pmf)
static int amd_pmf_profile_get(struct platform_profile_handler *pprof,
enum platform_profile_option *profile)
{
- struct amd_pmf_dev *pmf = container_of(pprof, struct amd_pmf_dev, pprof);
+ struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
*profile = pmf->current_profile;
return 0;
@@ -366,7 +366,7 @@ int amd_pmf_power_slider_update_event(struct amd_pmf_dev *dev)
static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
enum platform_profile_option profile)
{
- struct amd_pmf_dev *pmf = container_of(pprof, struct amd_pmf_dev, pprof);
+ struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
int ret = 0;
pmf->current_profile = profile;
@@ -416,7 +416,7 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
set_bit(PLATFORM_PROFILE_PERFORMANCE, dev->pprof.choices);
/* Create platform_profile structure and register */
- err = platform_profile_register(&dev->pprof);
+ err = platform_profile_register(&dev->pprof, dev);
if (err)
dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %d\n",
err);
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 6c674de60ec0..f91099792cb9 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3806,7 +3806,7 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
struct asus_wmi *asus;
int tp;
- asus = container_of(pprof, struct asus_wmi, platform_profile_handler);
+ asus = dev_get_drvdata(&pprof->class_dev);
tp = asus->throttle_thermal_policy_mode;
switch (tp) {
@@ -3832,7 +3832,7 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
struct asus_wmi *asus;
int tp;
- asus = container_of(pprof, struct asus_wmi, platform_profile_handler);
+ asus = dev_get_drvdata(&pprof->class_dev);
switch (profile) {
case PLATFORM_PROFILE_PERFORMANCE:
@@ -3887,7 +3887,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
set_bit(PLATFORM_PROFILE_PERFORMANCE,
asus->platform_profile_handler.choices);
- err = platform_profile_register(&asus->platform_profile_handler);
+ err = platform_profile_register(&asus->platform_profile_handler, asus);
if (err == -EEXIST) {
pr_warn("%s, a platform_profile handler is already registered\n", __func__);
return 0;
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index d7f577e0d146..154c417a438c 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -1129,7 +1129,7 @@ static int create_thermal_profile(struct platform_device *platform_device)
pp_handler.name = "alienware-wmi";
pp_handler.dev = &platform_device->dev;
- return devm_platform_profile_register(&pp_handler);
+ return devm_platform_profile_register(&pp_handler, NULL);
}
/*
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 3797a5721dbd..1a0a721d706f 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -271,7 +271,7 @@ static int thermal_init(void)
set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices);
/* Clean up if failed */
- ret = platform_profile_register(thermal_handler);
+ ret = platform_profile_register(thermal_handler, NULL);
if (ret)
goto cleanup_thermal_handler;
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 6d6e13a0c6e2..8e5e1422e024 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1629,7 +1629,7 @@ static int thermal_profile_setup(struct platform_device *device)
set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
set_bit(PLATFORM_PROFILE_PERFORMANCE, platform_profile_handler.choices);
- err = platform_profile_register(&platform_profile_handler);
+ err = platform_profile_register(&platform_profile_handler, NULL);
if (err)
return err;
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index dc98f862a06d..ed0d880a07a9 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -936,7 +936,7 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
static int dytc_profile_get(struct platform_profile_handler *pprof,
enum platform_profile_option *profile)
{
- struct ideapad_dytc_priv *dytc = container_of(pprof, struct ideapad_dytc_priv, pprof);
+ struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
*profile = dytc->current_profile;
return 0;
@@ -989,7 +989,7 @@ static int dytc_cql_command(struct ideapad_private *priv, unsigned long cmd,
static int dytc_profile_set(struct platform_profile_handler *pprof,
enum platform_profile_option profile)
{
- struct ideapad_dytc_priv *dytc = container_of(pprof, struct ideapad_dytc_priv, pprof);
+ struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
struct ideapad_private *priv = dytc->priv;
unsigned long output;
int err;
@@ -1114,7 +1114,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->dytc->pprof.choices);
/* Create platform_profile structure and register */
- err = platform_profile_register(&priv->dytc->pprof);
+ err = platform_profile_register(&priv->dytc->pprof, &priv->dytc);
if (err)
goto pp_reg_failed;
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index 53af73a7fbf7..471fca50d1c9 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -87,8 +87,7 @@ static int inspur_wmi_perform_query(struct wmi_device *wdev,
static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
enum platform_profile_option profile)
{
- struct inspur_wmi_priv *priv = container_of(pprof, struct inspur_wmi_priv,
- handler);
+ struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
u8 ret_code[4] = {0, 0, 0, 0};
int ret;
@@ -135,8 +134,7 @@ static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
enum platform_profile_option *profile)
{
- struct inspur_wmi_priv *priv = container_of(pprof, struct inspur_wmi_priv,
- handler);
+ struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
u8 ret_code[4] = {0, 0, 0, 0};
int ret;
@@ -186,7 +184,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->handler.choices);
- return platform_profile_register(&priv->handler);
+ return platform_profile_register(&priv->handler, priv);
}
static void inspur_wmi_remove(struct wmi_device *wdev)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index d99573e7a983..8be3f4e5366d 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10641,7 +10641,7 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
dytc_profile.dev = &tpacpi_pdev->dev;
/* Create platform_profile structure and register */
- err = platform_profile_register(&dytc_profile);
+ err = platform_profile_register(&dytc_profile, NULL);
/*
* If for some reason platform_profiles aren't enabled
* don't quit terminally.
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 8a9b8754f9ac..1c8fdda51eaa 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -40,9 +40,9 @@ struct platform_profile_handler {
enum platform_profile_option profile);
};
-int platform_profile_register(struct platform_profile_handler *pprof);
+int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
int platform_profile_remove(struct platform_profile_handler *pprof);
-int devm_platform_profile_register(struct platform_profile_handler *pprof);
+int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
int platform_profile_cycle(void);
void platform_profile_notify(struct platform_profile_handler *pprof);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
2025-01-16 0:27 ` [PATCH v4 01/19] ACPI: platform_profile: Replace *class_dev member with class_dev Kurt Borja
2025-01-16 0:27 ` [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 14:57 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers Kurt Borja
` (17 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Devices can now set drvdata to the class device, thus passing the
platform_profile_handler to callbacks is unnecessary. Instead pass the
class device.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 4 ++--
.../platform/surface/surface_platform_profile.c | 8 ++++----
drivers/platform/x86/acer-wmi.c | 4 ++--
drivers/platform/x86/amd/pmf/sps.c | 8 ++++----
drivers/platform/x86/asus-wmi.c | 8 ++++----
drivers/platform/x86/dell/alienware-wmi.c | 4 ++--
drivers/platform/x86/dell/dell-pc.c | 4 ++--
drivers/platform/x86/hp/hp-wmi.c | 14 +++++++-------
drivers/platform/x86/ideapad-laptop.c | 8 ++++----
drivers/platform/x86/inspur_platform_profile.c | 8 ++++----
drivers/platform/x86/thinkpad_acpi.c | 4 ++--
include/linux/platform_profile.h | 6 ++----
12 files changed, 39 insertions(+), 41 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 689541d2e66c..bd90aa4e8371 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -65,7 +65,7 @@ static int _store_class_profile(struct device *dev, void *data)
if (!test_bit(*bit, handler->choices))
return -EOPNOTSUPP;
- return handler->profile_set(handler, *bit);
+ return handler->profile_set(dev, *bit);
}
/**
@@ -102,7 +102,7 @@ static int get_class_profile(struct device *dev,
lockdep_assert_held(&profile_lock);
handler = to_pprof_handler(dev);
- err = handler->profile_get(handler, &val);
+ err = handler->profile_get(dev, &val);
if (err) {
pr_err("Failed to get profile for handler %s\n", handler->name);
return err;
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index edb9362003a4..26c1230e75df 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -154,14 +154,14 @@ static int convert_profile_to_ssam_fan(struct ssam_device *sdev, enum platform_p
}
}
-static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
+static int ssam_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
struct ssam_platform_profile_device *tpd;
enum ssam_tmp_profile tp;
int status;
- tpd = dev_get_drvdata(&pprof->class_dev);
+ tpd = dev_get_drvdata(dev);
status = ssam_tmp_profile_get(tpd->sdev, &tp);
if (status)
@@ -175,13 +175,13 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
+static int ssam_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
struct ssam_platform_profile_device *tpd;
int tp;
- tpd = dev_get_drvdata(&pprof->class_dev);
+ tpd = dev_get_drvdata(dev);
tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
if (tp < 0)
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index 1aedf0ef4189..c68c0d744a69 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -1950,7 +1950,7 @@ static int acer_toggle_turbo(void)
}
static int
-acer_predator_v4_platform_profile_get(struct platform_profile_handler *pprof,
+acer_predator_v4_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
u8 tp;
@@ -1984,7 +1984,7 @@ acer_predator_v4_platform_profile_get(struct platform_profile_handler *pprof,
}
static int
-acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
+acer_predator_v4_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
int err, tp;
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index 259a598acd3e..cf2e51f67787 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -282,10 +282,10 @@ bool is_pprof_balanced(struct amd_pmf_dev *pmf)
return (pmf->current_profile == PLATFORM_PROFILE_BALANCED) ? true : false;
}
-static int amd_pmf_profile_get(struct platform_profile_handler *pprof,
+static int amd_pmf_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
- struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
+ struct amd_pmf_dev *pmf = dev_get_drvdata(dev);
*profile = pmf->current_profile;
return 0;
@@ -363,10 +363,10 @@ int amd_pmf_power_slider_update_event(struct amd_pmf_dev *dev)
return 0;
}
-static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
+static int amd_pmf_profile_set(struct device *dev,
enum platform_profile_option profile)
{
- struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
+ struct amd_pmf_dev *pmf = dev_get_drvdata(dev);
int ret = 0;
pmf->current_profile = profile;
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index f91099792cb9..6b8b30551d36 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3800,13 +3800,13 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
static DEVICE_ATTR_RW(throttle_thermal_policy);
/* Platform profile ***********************************************************/
-static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
+static int asus_wmi_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
struct asus_wmi *asus;
int tp;
- asus = dev_get_drvdata(&pprof->class_dev);
+ asus = dev_get_drvdata(dev);
tp = asus->throttle_thermal_policy_mode;
switch (tp) {
@@ -3826,13 +3826,13 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
+static int asus_wmi_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
struct asus_wmi *asus;
int tp;
- asus = dev_get_drvdata(&pprof->class_dev);
+ asus = dev_get_drvdata(dev);
switch (profile) {
case PLATFORM_PROFILE_PERFORMANCE:
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index 154c417a438c..0346f8e88bf8 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -1026,7 +1026,7 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data)
return 0;
}
-static int thermal_profile_get(struct platform_profile_handler *pprof,
+static int thermal_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
u32 out_data;
@@ -1052,7 +1052,7 @@ static int thermal_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int thermal_profile_set(struct platform_profile_handler *pprof,
+static int thermal_profile_set(struct device *dev,
enum platform_profile_option profile)
{
if (quirks->gmode) {
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 1a0a721d706f..c86b05b5a1cb 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -185,7 +185,7 @@ static int thermal_set_mode(enum thermal_mode_bits state)
return dell_send_request(&buffer, CLASS_INFO, SELECT_THERMAL_MANAGEMENT);
}
-static int thermal_platform_profile_set(struct platform_profile_handler *pprof,
+static int thermal_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
switch (profile) {
@@ -202,7 +202,7 @@ static int thermal_platform_profile_set(struct platform_profile_handler *pprof,
}
}
-static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
+static int thermal_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
int ret;
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 8e5e1422e024..b8e62dc9cecd 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1221,7 +1221,7 @@ static int platform_profile_omen_get_ec(enum platform_profile_option *profile)
return 0;
}
-static int platform_profile_omen_get(struct platform_profile_handler *pprof,
+static int platform_profile_omen_get(struct device *dev,
enum platform_profile_option *profile)
{
/*
@@ -1318,7 +1318,7 @@ static int platform_profile_omen_set_ec(enum platform_profile_option profile)
return 0;
}
-static int platform_profile_omen_set(struct platform_profile_handler *pprof,
+static int platform_profile_omen_set(struct device *dev,
enum platform_profile_option profile)
{
int err;
@@ -1345,7 +1345,7 @@ static int thermal_profile_set(int thermal_profile)
sizeof(thermal_profile), 0);
}
-static int hp_wmi_platform_profile_get(struct platform_profile_handler *pprof,
+static int hp_wmi_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
int tp;
@@ -1374,7 +1374,7 @@ static int hp_wmi_platform_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int hp_wmi_platform_profile_set(struct platform_profile_handler *pprof,
+static int hp_wmi_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
int err, tp;
@@ -1440,11 +1440,11 @@ static int platform_profile_victus_get_ec(enum platform_profile_option *profile)
return 0;
}
-static int platform_profile_victus_get(struct platform_profile_handler *pprof,
+static int platform_profile_victus_get(struct device *dev,
enum platform_profile_option *profile)
{
/* Same behaviour as platform_profile_omen_get */
- return platform_profile_omen_get(pprof, profile);
+ return platform_profile_omen_get(dev, profile);
}
static int platform_profile_victus_set_ec(enum platform_profile_option profile)
@@ -1472,7 +1472,7 @@ static int platform_profile_victus_set_ec(enum platform_profile_option profile)
return 0;
}
-static int platform_profile_victus_set(struct platform_profile_handler *pprof,
+static int platform_profile_victus_set(struct device *dev,
enum platform_profile_option profile)
{
int err;
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index ed0d880a07a9..fc317f42bb82 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -933,10 +933,10 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
* dytc_profile_get: Function to register with platform_profile
* handler. Returns current platform profile.
*/
-static int dytc_profile_get(struct platform_profile_handler *pprof,
+static int dytc_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
- struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
+ struct ideapad_dytc_priv *dytc = dev_get_drvdata(dev);
*profile = dytc->current_profile;
return 0;
@@ -986,10 +986,10 @@ static int dytc_cql_command(struct ideapad_private *priv, unsigned long cmd,
* dytc_profile_set: Function to register with platform_profile
* handler. Sets current platform profile.
*/
-static int dytc_profile_set(struct platform_profile_handler *pprof,
+static int dytc_profile_set(struct device *dev,
enum platform_profile_option profile)
{
- struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
+ struct ideapad_dytc_priv *dytc = dev_get_drvdata(dev);
struct ideapad_private *priv = dytc->priv;
unsigned long output;
int err;
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index 471fca50d1c9..47d2dbbf3392 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -84,10 +84,10 @@ static int inspur_wmi_perform_query(struct wmi_device *wdev,
* 0x0: No Error
* 0x1: Error
*/
-static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
+static int inspur_platform_profile_set(struct device *dev,
enum platform_profile_option profile)
{
- struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
+ struct inspur_wmi_priv *priv = dev_get_drvdata(dev);
u8 ret_code[4] = {0, 0, 0, 0};
int ret;
@@ -131,10 +131,10 @@ static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
* 0x1: Performance Mode
* 0x2: Power Saver Mode
*/
-static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
+static int inspur_platform_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
- struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
+ struct inspur_wmi_priv *priv = dev_get_drvdata(dev);
u8 ret_code[4] = {0, 0, 0, 0};
int ret;
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 8be3f4e5366d..0abe22228fdb 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10415,7 +10415,7 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
* dytc_profile_get: Function to register with platform_profile
* handler. Returns current platform profile.
*/
-static int dytc_profile_get(struct platform_profile_handler *pprof,
+static int dytc_profile_get(struct device *dev,
enum platform_profile_option *profile)
{
*profile = dytc_current_profile;
@@ -10490,7 +10490,7 @@ static int dytc_cql_command(int command, int *output)
* dytc_profile_set: Function to register with platform_profile
* handler. Sets current platform profile.
*/
-static int dytc_profile_set(struct platform_profile_handler *pprof,
+static int dytc_profile_set(struct device *dev,
enum platform_profile_option profile)
{
int perfmode;
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 1c8fdda51eaa..5296d886c243 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -34,10 +34,8 @@ struct platform_profile_handler {
struct device class_dev;
int minor;
unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
- int (*profile_get)(struct platform_profile_handler *pprof,
- enum platform_profile_option *profile);
- int (*profile_set)(struct platform_profile_handler *pprof,
- enum platform_profile_option profile);
+ int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
+ int (*profile_set)(struct device *dev, enum platform_profile_option profile);
};
int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (2 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 14:58 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops Kurt Borja
` (16 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace *profile_get and *profile_set members with a general *ops
member.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 6 ++---
.../surface/surface_platform_profile.c | 8 +++++--
drivers/platform/x86/acer-wmi.c | 11 +++++----
drivers/platform/x86/amd/pmf/sps.c | 8 +++++--
drivers/platform/x86/asus-wmi.c | 8 +++++--
drivers/platform/x86/dell/alienware-wmi.c | 8 +++++--
drivers/platform/x86/dell/dell-pc.c | 8 +++++--
drivers/platform/x86/hp/hp-wmi.c | 24 ++++++++++++++-----
drivers/platform/x86/ideapad-laptop.c | 8 +++++--
.../platform/x86/inspur_platform_profile.c | 8 +++++--
drivers/platform/x86/thinkpad_acpi.c | 8 +++++--
include/linux/platform_profile.h | 10 ++++++--
12 files changed, 84 insertions(+), 31 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index bd90aa4e8371..161a05d57b0f 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -65,7 +65,7 @@ static int _store_class_profile(struct device *dev, void *data)
if (!test_bit(*bit, handler->choices))
return -EOPNOTSUPP;
- return handler->profile_set(dev, *bit);
+ return handler->ops->profile_set(dev, *bit);
}
/**
@@ -102,7 +102,7 @@ static int get_class_profile(struct device *dev,
lockdep_assert_held(&profile_lock);
handler = to_pprof_handler(dev);
- err = handler->profile_get(dev, &val);
+ err = handler->ops->profile_get(dev, &val);
if (err) {
pr_err("Failed to get profile for handler %s\n", handler->name);
return err;
@@ -466,7 +466,7 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
/* Sanity check the profile handler */
if (!pprof || bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST) ||
- !pprof->profile_set || !pprof->profile_get) {
+ !pprof->ops->profile_set || !pprof->ops->profile_get) {
pr_err("platform_profile: handler is invalid\n");
return -EINVAL;
}
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index 26c1230e75df..76967bfeeef8 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -201,6 +201,11 @@ static int ssam_platform_profile_set(struct device *dev,
return tp;
}
+static const struct platform_profile_ops ssam_platform_profile_ops = {
+ .profile_get = ssam_platform_profile_get,
+ .profile_set = ssam_platform_profile_set,
+};
+
static int surface_platform_profile_probe(struct ssam_device *sdev)
{
struct ssam_platform_profile_device *tpd;
@@ -214,8 +219,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
tpd->handler.name = "Surface Platform Profile";
tpd->handler.dev = &sdev->dev;
- tpd->handler.profile_get = ssam_platform_profile_get;
- tpd->handler.profile_set = ssam_platform_profile_set;
+ tpd->handler.ops = &ssam_platform_profile_ops;
tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index c68c0d744a69..63e6bd1fe339 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -2019,6 +2019,11 @@ acer_predator_v4_platform_profile_set(struct device *dev,
return 0;
}
+static const struct platform_profile_ops acer_predator_v4_platform_profile_ops = {
+ .profile_get = acer_predator_v4_platform_profile_get,
+ .profile_set = acer_predator_v4_platform_profile_set,
+};
+
static int acer_platform_profile_setup(struct platform_device *device)
{
if (quirks->predator_v4) {
@@ -2027,10 +2032,8 @@ static int acer_platform_profile_setup(struct platform_device *device)
platform_profile_handler.name = "acer-wmi";
platform_profile_handler.dev = &device->dev;
- platform_profile_handler.profile_get =
- acer_predator_v4_platform_profile_get;
- platform_profile_handler.profile_set =
- acer_predator_v4_platform_profile_set;
+ platform_profile_handler.ops =
+ &acer_predator_v4_platform_profile_ops;
err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
(u8 *)&supported_profiles);
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index cf2e51f67787..6ae82ae86d22 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -387,6 +387,11 @@ static int amd_pmf_profile_set(struct device *dev,
return 0;
}
+static const struct platform_profile_ops amd_pmf_profile_ops = {
+ .profile_get = amd_pmf_profile_get,
+ .profile_set = amd_pmf_profile_set,
+};
+
int amd_pmf_init_sps(struct amd_pmf_dev *dev)
{
int err;
@@ -407,8 +412,7 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
dev->pprof.name = "amd-pmf";
dev->pprof.dev = dev->dev;
- dev->pprof.profile_get = amd_pmf_profile_get;
- dev->pprof.profile_set = amd_pmf_profile_set;
+ dev->pprof.ops = &amd_pmf_profile_ops;
/* Setup supported modes */
set_bit(PLATFORM_PROFILE_LOW_POWER, dev->pprof.choices);
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 6b8b30551d36..992956c89d38 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3852,6 +3852,11 @@ static int asus_wmi_platform_profile_set(struct device *dev,
return throttle_thermal_policy_write(asus);
}
+static const struct platform_profile_ops asus_wmi_platform_profile_ops = {
+ .profile_get = asus_wmi_platform_profile_get,
+ .profile_set = asus_wmi_platform_profile_set,
+};
+
static int platform_profile_setup(struct asus_wmi *asus)
{
struct device *dev = &asus->platform_device->dev;
@@ -3878,8 +3883,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
asus->platform_profile_handler.name = "asus-wmi";
asus->platform_profile_handler.dev = dev;
- asus->platform_profile_handler.profile_get = asus_wmi_platform_profile_get;
- asus->platform_profile_handler.profile_set = asus_wmi_platform_profile_set;
+ asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
set_bit(PLATFORM_PROFILE_QUIET, asus->platform_profile_handler.choices);
set_bit(PLATFORM_PROFILE_BALANCED,
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index 0346f8e88bf8..b8359b177a0f 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -1078,6 +1078,11 @@ static int thermal_profile_set(struct device *dev,
return wmax_thermal_control(supported_thermal_profiles[profile]);
}
+static const struct platform_profile_ops awcc_platform_profile_ops = {
+ .profile_get = thermal_profile_get,
+ .profile_set = thermal_profile_set,
+};
+
static int create_thermal_profile(struct platform_device *platform_device)
{
enum platform_profile_option profile;
@@ -1124,10 +1129,9 @@ static int create_thermal_profile(struct platform_device *platform_device)
set_bit(PLATFORM_PROFILE_PERFORMANCE, pp_handler.choices);
}
- pp_handler.profile_get = thermal_profile_get;
- pp_handler.profile_set = thermal_profile_set;
pp_handler.name = "alienware-wmi";
pp_handler.dev = &platform_device->dev;
+ pp_handler.ops = &awcc_platform_profile_ops;
return devm_platform_profile_register(&pp_handler, NULL);
}
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index c86b05b5a1cb..9010a231f209 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -231,6 +231,11 @@ static int thermal_platform_profile_get(struct device *dev,
return 0;
}
+static const struct platform_profile_ops dell_pc_platform_profile_ops = {
+ .profile_get = thermal_platform_profile_get,
+ .profile_set = thermal_platform_profile_set,
+};
+
static int thermal_init(void)
{
int ret;
@@ -258,8 +263,7 @@ static int thermal_init(void)
}
thermal_handler->name = "dell-pc";
thermal_handler->dev = &platform_device->dev;
- thermal_handler->profile_get = thermal_platform_profile_get;
- thermal_handler->profile_set = thermal_platform_profile_set;
+ thermal_handler->ops = &dell_pc_platform_profile_ops;
if (supported_modes & DELL_QUIET)
set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices);
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index b8e62dc9cecd..60328b35be74 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1565,6 +1565,21 @@ static inline void omen_unregister_powersource_event_handler(void)
unregister_acpi_notifier(&platform_power_source_nb);
}
+static const struct platform_profile_ops platform_profile_omen_ops = {
+ .profile_get = platform_profile_omen_get,
+ .profile_set = platform_profile_omen_set,
+};
+
+static const struct platform_profile_ops platform_profile_victus_ops = {
+ .profile_get = platform_profile_victus_get,
+ .profile_set = platform_profile_victus_set,
+};
+
+static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
+ .profile_get = hp_wmi_platform_profile_get,
+ .profile_set = hp_wmi_platform_profile_set,
+};
+
static int thermal_profile_setup(struct platform_device *device)
{
int err, tp;
@@ -1582,8 +1597,7 @@ static int thermal_profile_setup(struct platform_device *device)
if (err < 0)
return err;
- platform_profile_handler.profile_get = platform_profile_omen_get;
- platform_profile_handler.profile_set = platform_profile_omen_set;
+ platform_profile_handler.ops = &platform_profile_omen_ops;
set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
} else if (is_victus_thermal_profile()) {
@@ -1599,8 +1613,7 @@ static int thermal_profile_setup(struct platform_device *device)
if (err < 0)
return err;
- platform_profile_handler.profile_get = platform_profile_victus_get;
- platform_profile_handler.profile_set = platform_profile_victus_set;
+ platform_profile_handler.ops = &platform_profile_victus_ops;
set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
} else {
@@ -1617,8 +1630,7 @@ static int thermal_profile_setup(struct platform_device *device)
if (err)
return err;
- platform_profile_handler.profile_get = hp_wmi_platform_profile_get;
- platform_profile_handler.profile_set = hp_wmi_platform_profile_set;
+ platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index fc317f42bb82..96e99513b0b5 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -1063,6 +1063,11 @@ static const struct dmi_system_id ideapad_dytc_v4_allow_table[] = {
{}
};
+static const struct platform_profile_ops dytc_profile_ops = {
+ .profile_get = dytc_profile_get,
+ .profile_set = dytc_profile_set,
+};
+
static int ideapad_dytc_profile_init(struct ideapad_private *priv)
{
int err, dytc_version;
@@ -1105,8 +1110,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
priv->dytc->pprof.name = "ideapad-laptop";
priv->dytc->pprof.dev = &priv->platform_device->dev;
priv->dytc->priv = priv;
- priv->dytc->pprof.profile_get = dytc_profile_get;
- priv->dytc->pprof.profile_set = dytc_profile_set;
+ priv->dytc->pprof.ops = &dytc_profile_ops;
/* Setup supported modes */
set_bit(PLATFORM_PROFILE_LOW_POWER, priv->dytc->pprof.choices);
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index 47d2dbbf3392..d0a8e4eebffa 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -164,6 +164,11 @@ static int inspur_platform_profile_get(struct device *dev,
return 0;
}
+static const struct platform_profile_ops inspur_platform_profile_ops = {
+ .profile_get = inspur_platform_profile_get,
+ .profile_set = inspur_platform_profile_set,
+};
+
static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
{
struct inspur_wmi_priv *priv;
@@ -177,8 +182,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
priv->handler.name = "inspur-wmi";
priv->handler.dev = &wdev->dev;
- priv->handler.profile_get = inspur_platform_profile_get;
- priv->handler.profile_set = inspur_platform_profile_set;
+ priv->handler.ops = &inspur_platform_profile_ops;
set_bit(PLATFORM_PROFILE_LOW_POWER, priv->handler.choices);
set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 0abe22228fdb..9e26f5670fc7 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10539,12 +10539,16 @@ static int dytc_profile_set(struct device *dev,
return err;
}
-static struct platform_profile_handler dytc_profile = {
- .name = "thinkpad-acpi",
+static const struct platform_profile_ops dytc_profile_ops = {
.profile_get = dytc_profile_get,
.profile_set = dytc_profile_set,
};
+static struct platform_profile_handler dytc_profile = {
+ .name = "thinkpad-acpi",
+ .ops = &dytc_profile_ops,
+};
+
static void dytc_profile_refresh(void)
{
enum platform_profile_option profile;
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 5296d886c243..6013c05d7b86 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -28,14 +28,20 @@ enum platform_profile_option {
PLATFORM_PROFILE_LAST, /*must always be last */
};
+struct platform_profile_handler;
+
+struct platform_profile_ops {
+ int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
+ int (*profile_set)(struct device *dev, enum platform_profile_option profile);
+};
+
struct platform_profile_handler {
const char *name;
struct device *dev;
struct device class_dev;
int minor;
unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
- int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
- int (*profile_set)(struct device *dev, enum platform_profile_option profile);
+ const struct platform_profile_ops *ops;
};
int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (3 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 15:00 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register() Kurt Borja
` (15 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Add a `probe` callback to platform_profile_ops, which lets drivers
initialize the choices member manually.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 15 +++-
.../surface/surface_platform_profile.c | 16 ++--
drivers/platform/x86/acer-wmi.c | 88 ++++++++++---------
drivers/platform/x86/amd/pmf/sps.c | 15 ++--
drivers/platform/x86/asus-wmi.c | 16 ++--
drivers/platform/x86/dell/alienware-wmi.c | 24 +++--
drivers/platform/x86/dell/dell-pc.c | 26 +++---
drivers/platform/x86/hp/hp-wmi.c | 29 ++++--
drivers/platform/x86/ideapad-laptop.c | 15 ++--
.../platform/x86/inspur_platform_profile.c | 14 ++-
drivers/platform/x86/thinkpad_acpi.c | 15 ++--
include/linux/platform_profile.h | 1 +
12 files changed, 172 insertions(+), 102 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 161a05d57b0f..120f8402facd 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -465,12 +465,23 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
int err;
/* Sanity check the profile handler */
- if (!pprof || bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST) ||
- !pprof->ops->profile_set || !pprof->ops->profile_get) {
+ if (!pprof || !pprof->ops->profile_set || !pprof->ops->profile_get ||
+ !pprof->ops->probe) {
pr_err("platform_profile: handler is invalid\n");
return -EINVAL;
}
+ err = pprof->ops->probe(drvdata, pprof->choices);
+ if (err) {
+ dev_err(pprof->dev, "platform_profile probe failed\n");
+ return err;
+ }
+
+ if (bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST)) {
+ dev_err(pprof->dev, "Failed to register a platform_profile class device with empty choices\n");
+ return -EINVAL;
+ }
+
guard(mutex)(&profile_lock);
/* create class interface for individual handler */
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index 76967bfeeef8..48cfe9cb89c8 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -201,7 +201,18 @@ static int ssam_platform_profile_set(struct device *dev,
return tp;
}
+static int ssam_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops ssam_platform_profile_ops = {
+ .probe = ssam_platform_profile_probe,
.profile_get = ssam_platform_profile_get,
.profile_set = ssam_platform_profile_set,
};
@@ -223,11 +234,6 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
- set_bit(PLATFORM_PROFILE_LOW_POWER, tpd->handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, tpd->handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
-
return platform_profile_register(&tpd->handler, tpd);
}
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index 63e6bd1fe339..4d62a61cb241 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -2019,7 +2019,53 @@ acer_predator_v4_platform_profile_set(struct device *dev,
return 0;
}
+static int
+acer_predator_v4_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ unsigned long supported_profiles;
+ int err;
+
+ err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
+ (u8 *)&supported_profiles);
+ if (err)
+ return err;
+
+ /* Iterate through supported profiles in order of increasing performance */
+ if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_ECO, &supported_profiles)) {
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ acer_predator_v4_max_perf =
+ ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
+ }
+
+ if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET, &supported_profiles)) {
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ acer_predator_v4_max_perf =
+ ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET;
+ }
+
+ if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED, &supported_profiles)) {
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ acer_predator_v4_max_perf =
+ ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
+ }
+
+ if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE, &supported_profiles)) {
+ set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
+ acer_predator_v4_max_perf =
+ ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE;
+ }
+
+ if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO, &supported_profiles)) {
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+ acer_predator_v4_max_perf =
+ ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
+ }
+
+ return 0;
+}
+
static const struct platform_profile_ops acer_predator_v4_platform_profile_ops = {
+ .probe = acer_predator_v4_platform_profile_probe,
.profile_get = acer_predator_v4_platform_profile_get,
.profile_set = acer_predator_v4_platform_profile_set,
};
@@ -2027,7 +2073,6 @@ static const struct platform_profile_ops acer_predator_v4_platform_profile_ops =
static int acer_platform_profile_setup(struct platform_device *device)
{
if (quirks->predator_v4) {
- unsigned long supported_profiles;
int err;
platform_profile_handler.name = "acer-wmi";
@@ -2035,47 +2080,6 @@ static int acer_platform_profile_setup(struct platform_device *device)
platform_profile_handler.ops =
&acer_predator_v4_platform_profile_ops;
- err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
- (u8 *)&supported_profiles);
- if (err)
- return err;
-
- /* Iterate through supported profiles in order of increasing performance */
- if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_ECO, &supported_profiles)) {
- set_bit(PLATFORM_PROFILE_LOW_POWER,
- platform_profile_handler.choices);
- acer_predator_v4_max_perf =
- ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
- }
-
- if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET, &supported_profiles)) {
- set_bit(PLATFORM_PROFILE_QUIET,
- platform_profile_handler.choices);
- acer_predator_v4_max_perf =
- ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET;
- }
-
- if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED, &supported_profiles)) {
- set_bit(PLATFORM_PROFILE_BALANCED,
- platform_profile_handler.choices);
- acer_predator_v4_max_perf =
- ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
- }
-
- if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE, &supported_profiles)) {
- set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE,
- platform_profile_handler.choices);
- acer_predator_v4_max_perf =
- ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE;
- }
-
- if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO, &supported_profiles)) {
- set_bit(PLATFORM_PROFILE_PERFORMANCE,
- platform_profile_handler.choices);
- acer_predator_v4_max_perf =
- ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
- }
-
err = platform_profile_register(&platform_profile_handler, NULL);
if (err)
return err;
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index 6ae82ae86d22..e710405b581f 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -387,7 +387,17 @@ static int amd_pmf_profile_set(struct device *dev,
return 0;
}
+static int amd_pmf_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops amd_pmf_profile_ops = {
+ .probe = amd_pmf_profile_probe,
.profile_get = amd_pmf_profile_get,
.profile_set = amd_pmf_profile_set,
};
@@ -414,11 +424,6 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
dev->pprof.dev = dev->dev;
dev->pprof.ops = &amd_pmf_profile_ops;
- /* Setup supported modes */
- set_bit(PLATFORM_PROFILE_LOW_POWER, dev->pprof.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, dev->pprof.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, dev->pprof.choices);
-
/* Create platform_profile structure and register */
err = platform_profile_register(&dev->pprof, dev);
if (err)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 992956c89d38..e775ec7371ce 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3852,7 +3852,17 @@ static int asus_wmi_platform_profile_set(struct device *dev,
return throttle_thermal_policy_write(asus);
}
+static int asus_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops asus_wmi_platform_profile_ops = {
+ .probe = asus_wmi_platform_profile_probe,
.profile_get = asus_wmi_platform_profile_get,
.profile_set = asus_wmi_platform_profile_set,
};
@@ -3885,12 +3895,6 @@ static int platform_profile_setup(struct asus_wmi *asus)
asus->platform_profile_handler.dev = dev;
asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
- set_bit(PLATFORM_PROFILE_QUIET, asus->platform_profile_handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED,
- asus->platform_profile_handler.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE,
- asus->platform_profile_handler.choices);
-
err = platform_profile_register(&asus->platform_profile_handler, asus);
if (err == -EEXIST) {
pr_warn("%s, a platform_profile handler is already registered\n", __func__);
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index b8359b177a0f..e7209863e7dc 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -1078,12 +1078,7 @@ static int thermal_profile_set(struct device *dev,
return wmax_thermal_control(supported_thermal_profiles[profile]);
}
-static const struct platform_profile_ops awcc_platform_profile_ops = {
- .profile_get = thermal_profile_get,
- .profile_set = thermal_profile_set,
-};
-
-static int create_thermal_profile(struct platform_device *platform_device)
+static int thermal_profile_probe(void *drvdata, unsigned long *choices)
{
enum platform_profile_option profile;
enum wmax_thermal_mode mode;
@@ -1116,19 +1111,30 @@ static int create_thermal_profile(struct platform_device *platform_device)
profile = wmax_mode_to_platform_profile[mode];
supported_thermal_profiles[profile] = out_data;
- set_bit(profile, pp_handler.choices);
+ set_bit(profile, choices);
}
- if (bitmap_empty(pp_handler.choices, PLATFORM_PROFILE_LAST))
+ if (bitmap_empty(choices, PLATFORM_PROFILE_LAST))
return -ENODEV;
if (quirks->gmode) {
supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =
WMAX_THERMAL_MODE_GMODE;
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pp_handler.choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
}
+ return 0;
+}
+
+static const struct platform_profile_ops awcc_platform_profile_ops = {
+ .probe = thermal_profile_probe,
+ .profile_get = thermal_profile_get,
+ .profile_set = thermal_profile_set,
+};
+
+static int create_thermal_profile(struct platform_device *platform_device)
+{
pp_handler.name = "alienware-wmi";
pp_handler.dev = &platform_device->dev;
pp_handler.ops = &awcc_platform_profile_ops;
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 9010a231f209..32b3be0723f8 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -24,6 +24,7 @@
#include "dell-smbios.h"
static struct platform_device *platform_device;
+static int supported_modes;
static const struct dmi_system_id dell_device_table[] __initconst = {
{
@@ -231,7 +232,22 @@ static int thermal_platform_profile_get(struct device *dev,
return 0;
}
+static int thermal_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ if (supported_modes & DELL_QUIET)
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ if (supported_modes & DELL_COOL_BOTTOM)
+ set_bit(PLATFORM_PROFILE_COOL, choices);
+ if (supported_modes & DELL_BALANCED)
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ if (supported_modes & DELL_PERFORMANCE)
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops dell_pc_platform_profile_ops = {
+ .probe = thermal_platform_profile_probe,
.profile_get = thermal_platform_profile_get,
.profile_set = thermal_platform_profile_set,
};
@@ -239,7 +255,6 @@ static const struct platform_profile_ops dell_pc_platform_profile_ops = {
static int thermal_init(void)
{
int ret;
- int supported_modes;
/* If thermal commands are not supported, exit without error */
if (!dell_smbios_class_is_supported(CLASS_INFO))
@@ -265,15 +280,6 @@ static int thermal_init(void)
thermal_handler->dev = &platform_device->dev;
thermal_handler->ops = &dell_pc_platform_profile_ops;
- if (supported_modes & DELL_QUIET)
- set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices);
- if (supported_modes & DELL_COOL_BOTTOM)
- set_bit(PLATFORM_PROFILE_COOL, thermal_handler->choices);
- if (supported_modes & DELL_BALANCED)
- set_bit(PLATFORM_PROFILE_BALANCED, thermal_handler->choices);
- if (supported_modes & DELL_PERFORMANCE)
- set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices);
-
/* Clean up if failed */
ret = platform_profile_register(thermal_handler, NULL);
if (ret)
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 60328b35be74..75bcd8460e7c 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1488,6 +1488,23 @@ static int platform_profile_victus_set(struct device *dev,
return 0;
}
+static int hp_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ if (is_omen_thermal_profile()) {
+ set_bit(PLATFORM_PROFILE_COOL, choices);
+ } else if (is_victus_thermal_profile()) {
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ } else {
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ set_bit(PLATFORM_PROFILE_COOL, choices);
+ }
+
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static int omen_powersource_event(struct notifier_block *nb,
unsigned long value,
void *data)
@@ -1566,16 +1583,19 @@ static inline void omen_unregister_powersource_event_handler(void)
}
static const struct platform_profile_ops platform_profile_omen_ops = {
+ .probe = hp_wmi_platform_profile_probe,
.profile_get = platform_profile_omen_get,
.profile_set = platform_profile_omen_set,
};
static const struct platform_profile_ops platform_profile_victus_ops = {
+ .probe = hp_wmi_platform_profile_probe,
.profile_get = platform_profile_victus_get,
.profile_set = platform_profile_victus_set,
};
static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
+ .probe = hp_wmi_platform_profile_probe,
.profile_get = hp_wmi_platform_profile_get,
.profile_set = hp_wmi_platform_profile_set,
};
@@ -1598,8 +1618,6 @@ static int thermal_profile_setup(struct platform_device *device)
return err;
platform_profile_handler.ops = &platform_profile_omen_ops;
-
- set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
} else if (is_victus_thermal_profile()) {
err = platform_profile_victus_get_ec(&active_platform_profile);
if (err < 0)
@@ -1614,8 +1632,6 @@ static int thermal_profile_setup(struct platform_device *device)
return err;
platform_profile_handler.ops = &platform_profile_victus_ops;
-
- set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
} else {
tp = thermal_profile_get();
@@ -1631,15 +1647,10 @@ static int thermal_profile_setup(struct platform_device *device)
return err;
platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
-
- set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
- set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
}
platform_profile_handler.name = "hp-wmi";
platform_profile_handler.dev = &device->dev;
- set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, platform_profile_handler.choices);
err = platform_profile_register(&platform_profile_handler, NULL);
if (err)
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index 96e99513b0b5..050919a28d2b 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -1023,6 +1023,15 @@ static int dytc_profile_set(struct device *dev,
return -EINTR;
}
+static int dytc_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static void dytc_profile_refresh(struct ideapad_private *priv)
{
enum platform_profile_option profile;
@@ -1064,6 +1073,7 @@ static const struct dmi_system_id ideapad_dytc_v4_allow_table[] = {
};
static const struct platform_profile_ops dytc_profile_ops = {
+ .probe = dytc_profile_probe,
.profile_get = dytc_profile_get,
.profile_set = dytc_profile_set,
};
@@ -1112,11 +1122,6 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
priv->dytc->priv = priv;
priv->dytc->pprof.ops = &dytc_profile_ops;
- /* Setup supported modes */
- set_bit(PLATFORM_PROFILE_LOW_POWER, priv->dytc->pprof.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, priv->dytc->pprof.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->dytc->pprof.choices);
-
/* Create platform_profile structure and register */
err = platform_profile_register(&priv->dytc->pprof, &priv->dytc);
if (err)
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index d0a8e4eebffa..06df3aae9a56 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -164,7 +164,17 @@ static int inspur_platform_profile_get(struct device *dev,
return 0;
}
+static int inspur_platform_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops inspur_platform_profile_ops = {
+ .probe = inspur_platform_profile_probe,
.profile_get = inspur_platform_profile_get,
.profile_set = inspur_platform_profile_set,
};
@@ -184,10 +194,6 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
priv->handler.dev = &wdev->dev;
priv->handler.ops = &inspur_platform_profile_ops;
- set_bit(PLATFORM_PROFILE_LOW_POWER, priv->handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->handler.choices);
-
return platform_profile_register(&priv->handler, priv);
}
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 9e26f5670fc7..62b2ddfe7c0a 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10539,7 +10539,17 @@ static int dytc_profile_set(struct device *dev,
return err;
}
+static int dytc_profile_probe(void *drvdata, unsigned long *choices)
+{
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+ return 0;
+}
+
static const struct platform_profile_ops dytc_profile_ops = {
+ .probe = dytc_profile_probe,
.profile_get = dytc_profile_get,
.profile_set = dytc_profile_set,
};
@@ -10585,11 +10595,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
{
int err, output;
- /* Setup supported modes */
- set_bit(PLATFORM_PROFILE_LOW_POWER, dytc_profile.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, dytc_profile.choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, dytc_profile.choices);
-
err = dytc_command(DYTC_CMD_QUERY, &output);
if (err)
return err;
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 6013c05d7b86..5ad1ab7b75e4 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -31,6 +31,7 @@ enum platform_profile_option {
struct platform_profile_handler;
struct platform_profile_ops {
+ 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
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (4 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 15:01 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 07/19] platform/x86: acer-wmi: " Kurt Borja
` (14 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/surface/surface_platform_profile.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index 48cfe9cb89c8..bbdc873cb788 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -234,15 +234,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
- return platform_profile_register(&tpd->handler, tpd);
-}
-
-static void surface_platform_profile_remove(struct ssam_device *sdev)
-{
- struct ssam_platform_profile_device *tpd;
-
- tpd = ssam_device_get_drvdata(sdev);
- platform_profile_remove(&tpd->handler);
+ return devm_platform_profile_register(&tpd->handler, tpd);
}
static const struct ssam_device_id ssam_platform_profile_match[] = {
@@ -253,7 +245,6 @@ MODULE_DEVICE_TABLE(ssam, ssam_platform_profile_match);
static struct ssam_device_driver surface_platform_profile = {
.probe = surface_platform_profile_probe,
- .remove = surface_platform_profile_remove,
.match_table = ssam_platform_profile_match,
.driver = {
.name = "surface_platform_profile",
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 07/19] platform/x86: acer-wmi: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (5 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register() Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 08/19] platform/x86: amd: pmf: sps: " Kurt Borja
` (13 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/acer-wmi.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index 4d62a61cb241..d201ca0e01d6 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -2080,7 +2080,7 @@ static int acer_platform_profile_setup(struct platform_device *device)
platform_profile_handler.ops =
&acer_predator_v4_platform_profile_ops;
- err = platform_profile_register(&platform_profile_handler, NULL);
+ err = devm_platform_profile_register(&platform_profile_handler, NULL);
if (err)
return err;
@@ -2684,8 +2684,6 @@ static int acer_platform_probe(struct platform_device *device)
return 0;
error_hwmon:
- if (platform_profile_support)
- platform_profile_remove(&platform_profile_handler);
error_platform_profile:
acer_rfkill_exit();
error_rfkill:
@@ -2706,9 +2704,6 @@ static void acer_platform_remove(struct platform_device *device)
acer_backlight_exit();
acer_rfkill_exit();
-
- if (platform_profile_support)
- platform_profile_remove(&platform_profile_handler);
}
#ifdef CONFIG_PM_SLEEP
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 08/19] platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (6 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 07/19] platform/x86: acer-wmi: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 09/19] platform/x86: asus-wmi: " Kurt Borja
` (12 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/amd/pmf/core.c | 1 -
drivers/platform/x86/amd/pmf/pmf.h | 1 -
drivers/platform/x86/amd/pmf/sps.c | 7 +------
3 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/drivers/platform/x86/amd/pmf/core.c b/drivers/platform/x86/amd/pmf/core.c
index 57ee95a327be..1211a753fee8 100644
--- a/drivers/platform/x86/amd/pmf/core.c
+++ b/drivers/platform/x86/amd/pmf/core.c
@@ -371,7 +371,6 @@ static void amd_pmf_deinit_features(struct amd_pmf_dev *dev)
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR) ||
is_apmf_func_supported(dev, APMF_FUNC_OS_POWER_SLIDER_UPDATE)) {
power_supply_unreg_notifier(&dev->pwr_src_notifier);
- amd_pmf_deinit_sps(dev);
}
if (dev->smart_pc_enabled) {
diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h
index 080818dd173b..d99b3556205b 100644
--- a/drivers/platform/x86/amd/pmf/pmf.h
+++ b/drivers/platform/x86/amd/pmf/pmf.h
@@ -780,7 +780,6 @@ int amd_pmf_get_pprof_modes(struct amd_pmf_dev *pmf);
void amd_pmf_update_slider(struct amd_pmf_dev *dev, bool op, int idx,
struct amd_pmf_static_slider_granular *table);
int amd_pmf_init_sps(struct amd_pmf_dev *dev);
-void amd_pmf_deinit_sps(struct amd_pmf_dev *dev);
int apmf_get_static_slider_granular(struct amd_pmf_dev *pdev,
struct apmf_static_slider_granular_output *output);
bool is_pprof_balanced(struct amd_pmf_dev *pmf);
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index e710405b581f..7c7ed2b9de01 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -425,15 +425,10 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
dev->pprof.ops = &amd_pmf_profile_ops;
/* Create platform_profile structure and register */
- err = platform_profile_register(&dev->pprof, dev);
+ err = devm_platform_profile_register(&dev->pprof, dev);
if (err)
dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %d\n",
err);
return err;
}
-
-void amd_pmf_deinit_sps(struct amd_pmf_dev *dev)
-{
- platform_profile_remove(&dev->pprof);
-}
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 09/19] platform/x86: asus-wmi: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (7 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 08/19] platform/x86: amd: pmf: sps: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 10/19] platform/x86: dell-pc: " Kurt Borja
` (11 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Also replace pr_err with dev_err in case of error and make the error
message more user-friendly.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/asus-wmi.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index e775ec7371ce..dc713a5d8042 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3895,12 +3895,9 @@ static int platform_profile_setup(struct asus_wmi *asus)
asus->platform_profile_handler.dev = dev;
asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
- err = platform_profile_register(&asus->platform_profile_handler, asus);
- if (err == -EEXIST) {
- pr_warn("%s, a platform_profile handler is already registered\n", __func__);
- return 0;
- } else if (err) {
- pr_err("%s, failed at platform_profile_register: %d\n", __func__, err);
+ err = devm_platform_profile_register(&asus->platform_profile_handler, asus);
+ if (err) {
+ dev_err(dev, "Failed to register a platform_profile class device");
return err;
}
@@ -4859,8 +4856,6 @@ static int asus_wmi_add(struct platform_device *pdev)
fail_sysfs:
fail_custom_fan_curve:
fail_platform_profile_setup:
- if (asus->platform_profile_support)
- platform_profile_remove(&asus->platform_profile_handler);
fail_fan_boost_mode:
fail_platform:
kfree(asus);
@@ -4886,9 +4881,6 @@ static void asus_wmi_remove(struct platform_device *device)
throttle_thermal_policy_set_default(asus);
asus_wmi_battery_exit(asus);
- if (asus->platform_profile_support)
- platform_profile_remove(&asus->platform_profile_handler);
-
kfree(asus);
}
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 10/19] platform/x86: dell-pc: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (8 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 09/19] platform/x86: asus-wmi: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 11/19] platform/x86: ideapad-laptop: " Kurt Borja
` (10 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/dell/dell-pc.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 32b3be0723f8..2759bb608b1a 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -281,7 +281,7 @@ static int thermal_init(void)
thermal_handler->ops = &dell_pc_platform_profile_ops;
/* Clean up if failed */
- ret = platform_profile_register(thermal_handler, NULL);
+ ret = devm_platform_profile_register(thermal_handler, NULL);
if (ret)
goto cleanup_thermal_handler;
@@ -298,8 +298,6 @@ static int thermal_init(void)
static void thermal_cleanup(void)
{
- if (thermal_handler)
- platform_profile_remove(thermal_handler);
platform_device_unregister(platform_device);
}
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 11/19] platform/x86: ideapad-laptop: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (9 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 10/19] platform/x86: dell-pc: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 12/19] platform/x86: hp-wmi: " Kurt Borja
` (9 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/ideapad-laptop.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index 050919a28d2b..87c1e087770a 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -1123,7 +1123,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
priv->dytc->pprof.ops = &dytc_profile_ops;
/* Create platform_profile structure and register */
- err = platform_profile_register(&priv->dytc->pprof, &priv->dytc);
+ err = devm_platform_profile_register(&priv->dytc->pprof, &priv->dytc);
if (err)
goto pp_reg_failed;
@@ -1145,7 +1145,6 @@ static void ideapad_dytc_profile_exit(struct ideapad_private *priv)
if (!priv->dytc)
return;
- platform_profile_remove(&priv->dytc->pprof);
mutex_destroy(&priv->dytc->mutex);
kfree(priv->dytc);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 12/19] platform/x86: hp-wmi: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (10 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 11/19] platform/x86: ideapad-laptop: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 13/19] platform/x86: inspur_platform_profile: " Kurt Borja
` (8 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/hp/hp-wmi.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 75bcd8460e7c..1304dfc65aab 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -1652,7 +1652,7 @@ static int thermal_profile_setup(struct platform_device *device)
platform_profile_handler.name = "hp-wmi";
platform_profile_handler.dev = &device->dev;
- err = platform_profile_register(&platform_profile_handler, NULL);
+ err = devm_platform_profile_register(&platform_profile_handler, NULL);
if (err)
return err;
@@ -1714,9 +1714,6 @@ static void __exit hp_wmi_bios_remove(struct platform_device *device)
rfkill_unregister(wwan_rfkill);
rfkill_destroy(wwan_rfkill);
}
-
- if (platform_profile_support)
- platform_profile_remove(&platform_profile_handler);
}
static int hp_wmi_resume_handler(struct device *device)
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 13/19] platform/x86: inspur_platform_profile: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (11 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 12/19] platform/x86: hp-wmi: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 14/19] platform/x86: thinkpad_acpi: " Kurt Borja
` (7 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
While at it, pass inspur_wmi_priv to the class device as drvdata and
replace uses of container_of() with dev_get_drvdata().
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/inspur_platform_profile.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index 06df3aae9a56..e1631de6ad86 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -194,15 +194,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
priv->handler.dev = &wdev->dev;
priv->handler.ops = &inspur_platform_profile_ops;
- return platform_profile_register(&priv->handler, priv);
-}
-
-static void inspur_wmi_remove(struct wmi_device *wdev)
-{
- struct inspur_wmi_priv *priv;
-
- priv = dev_get_drvdata(&wdev->dev);
- platform_profile_remove(&priv->handler);
+ return devm_platform_profile_register(&priv->handler, priv);
}
static const struct wmi_device_id inspur_wmi_id_table[] = {
@@ -219,7 +211,6 @@ static struct wmi_driver inspur_wmi_driver = {
},
.id_table = inspur_wmi_id_table,
.probe = inspur_wmi_probe,
- .remove = inspur_wmi_remove,
.no_singleton = true,
};
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 14/19] platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (12 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 13/19] platform/x86: inspur_platform_profile: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols Kurt Borja
` (6 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Replace platform_profile_register() with it's device managed version.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/platform/x86/thinkpad_acpi.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 62b2ddfe7c0a..c9226e8dc713 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10650,7 +10650,7 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
dytc_profile.dev = &tpacpi_pdev->dev;
/* Create platform_profile structure and register */
- err = platform_profile_register(&dytc_profile, NULL);
+ err = devm_platform_profile_register(&dytc_profile, NULL);
/*
* If for some reason platform_profiles aren't enabled
* don't quit terminally.
@@ -10668,14 +10668,8 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
return 0;
}
-static void dytc_profile_exit(void)
-{
- platform_profile_remove(&dytc_profile);
-}
-
static struct ibm_struct dytc_profile_driver_data = {
.name = "dytc-profile",
- .exit = dytc_profile_exit,
};
/*************************************************************************
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (13 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 14/19] platform/x86: thinkpad_acpi: " Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-19 15:04 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 16/19] ACPI: platform_profile: Move platform_profile_handler Kurt Borja
` (5 subsequent siblings)
20 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
In order to protect the platform_profile_handler from API consumers,
allocate it in platform_profile_register() and modify it's signature
accordingly.
Remove the platform_profile_handler from all consumer drivers and
replace them with a pointer to the class device, which is
now returned from platform_profile_register().
Replace *pprof with a pointer to the class device in the rest of
exported symbols.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 98 ++++++++++++-------
.../surface/surface_platform_profile.c | 11 +--
drivers/platform/x86/acer-wmi.c | 18 ++--
drivers/platform/x86/amd/pmf/pmf.h | 2 +-
drivers/platform/x86/amd/pmf/sps.c | 17 ++--
drivers/platform/x86/asus-wmi.c | 15 ++-
drivers/platform/x86/dell/alienware-wmi.c | 10 +-
drivers/platform/x86/dell/dell-pc.c | 22 ++---
drivers/platform/x86/hp/hp-wmi.c | 19 ++--
drivers/platform/x86/ideapad-laptop.c | 15 +--
.../platform/x86/inspur_platform_profile.c | 9 +-
drivers/platform/x86/thinkpad_acpi.c | 14 +--
include/linux/platform_profile.h | 12 ++-
13 files changed, 130 insertions(+), 132 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 120f8402facd..a1dfa168f51f 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -4,6 +4,7 @@
#include <linux/acpi.h>
#include <linux/bits.h>
+#include <linux/cleanup.h>
#include <linux/init.h>
#include <linux/mutex.h>
#include <linux/platform_profile.h>
@@ -212,9 +213,17 @@ static struct attribute *profile_attrs[] = {
};
ATTRIBUTE_GROUPS(profile);
+static void pprof_device_release(struct device *dev)
+{
+ struct platform_profile_handler *pprof = to_pprof_handler(dev);
+
+ kfree(pprof);
+}
+
static const struct class platform_profile_class = {
.name = "platform-profile",
.dev_groups = profile_groups,
+ .dev_release = pprof_device_release,
};
/**
@@ -408,10 +417,10 @@ static const struct attribute_group platform_profile_group = {
.is_visible = profile_class_is_visible,
};
-void platform_profile_notify(struct platform_profile_handler *pprof)
+void platform_profile_notify(struct device *dev)
{
scoped_cond_guard(mutex_intr, return, &profile_lock) {
- _notify_class_profile(&pprof->class_dev, NULL);
+ _notify_class_profile(dev, NULL);
}
sysfs_notify(acpi_kobj, NULL, "platform_profile");
}
@@ -460,42 +469,54 @@ int platform_profile_cycle(void)
}
EXPORT_SYMBOL_GPL(platform_profile_cycle);
-int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
+struct device *platform_profile_register(struct device *dev, const char *name,
+ void *drvdata,
+ const struct platform_profile_ops *ops)
{
+ struct device *ppdev;
+ int minor;
int err;
- /* Sanity check the profile handler */
- if (!pprof || !pprof->ops->profile_set || !pprof->ops->profile_get ||
- !pprof->ops->probe) {
- pr_err("platform_profile: handler is invalid\n");
- return -EINVAL;
- }
+ /* Sanity check */
+ if (WARN_ON_ONCE(!dev || !name || !ops || !ops->profile_get ||
+ !ops->profile_set || !ops->probe))
+ return ERR_PTR(-EINVAL);
+
+ struct platform_profile_handler *pprof __free(kfree) = kzalloc(
+ sizeof(*pprof), GFP_KERNEL);
+ if (!pprof)
+ return ERR_PTR(-ENOMEM);
- err = pprof->ops->probe(drvdata, pprof->choices);
+ err = ops->probe(drvdata, pprof->choices);
if (err) {
- dev_err(pprof->dev, "platform_profile probe failed\n");
- return err;
+ dev_err(dev, "platform_profile probe failed\n");
+ return ERR_PTR(err);
}
if (bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST)) {
- dev_err(pprof->dev, "Failed to register a platform_profile class device with empty choices\n");
- return -EINVAL;
+ dev_err(dev, "Failed to register platform_profile class device with empty choices\n");
+ return ERR_PTR(-EINVAL);
}
guard(mutex)(&profile_lock);
/* create class interface for individual handler */
- pprof->minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
- if (pprof->minor < 0)
- return pprof->minor;
+ minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
+ if (minor < 0)
+ return ERR_PTR(minor);
+ pprof->name = name;
+ pprof->ops = ops;
+ pprof->minor = minor;
pprof->class_dev.class = &platform_profile_class;
- pprof->class_dev.parent = pprof->dev;
+ pprof->class_dev.parent = dev;
dev_set_drvdata(&pprof->class_dev, drvdata);
dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
- err = device_register(&pprof->class_dev);
+ /* device_register() takes ownership of ppdev */
+ ppdev = &no_free_ptr(pprof)->class_dev;
+ err = device_register(ppdev);
if (err) {
- put_device(&pprof->class_dev);
+ put_device(ppdev);
goto cleanup_ida;
}
@@ -505,20 +526,21 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
if (err)
goto cleanup_cur;
- return 0;
+ return ppdev;
cleanup_cur:
- device_unregister(&pprof->class_dev);
+ device_unregister(ppdev);
cleanup_ida:
- ida_free(&platform_profile_ida, pprof->minor);
+ ida_free(&platform_profile_ida, minor);
- return err;
+ return ERR_PTR(err);
}
EXPORT_SYMBOL_GPL(platform_profile_register);
-int platform_profile_remove(struct platform_profile_handler *pprof)
+int platform_profile_remove(struct device *dev)
{
+ struct platform_profile_handler *pprof = to_pprof_handler(dev);
int id;
guard(mutex)(&profile_lock);
@@ -536,30 +558,32 @@ EXPORT_SYMBOL_GPL(platform_profile_remove);
static void devm_platform_profile_release(struct device *dev, void *res)
{
- struct platform_profile_handler **pprof = res;
+ struct device **ppdev = res;
- platform_profile_remove(*pprof);
+ platform_profile_remove(*ppdev);
}
-int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
+struct device *devm_platform_profile_register(struct device *dev, const char *name,
+ void *drvdata,
+ const struct platform_profile_ops *ops)
{
- struct platform_profile_handler **dr;
- int ret;
+ struct device *ppdev;
+ struct device **dr;
dr = devres_alloc(devm_platform_profile_release, sizeof(*dr), GFP_KERNEL);
if (!dr)
- return -ENOMEM;
+ return ERR_PTR(-ENOMEM);
- ret = platform_profile_register(pprof, drvdata);
- if (ret) {
+ ppdev = platform_profile_register(dev, name, drvdata, ops);
+ if (IS_ERR(ppdev)) {
devres_free(dr);
- return ret;
+ return ppdev;
}
- *dr = pprof;
- devres_add(pprof->dev, dr);
+ *dr = ppdev;
+ devres_add(dev, dr);
- return 0;
+ return ppdev;
}
EXPORT_SYMBOL_GPL(devm_platform_profile_register);
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index bbdc873cb788..0e479e35e66e 100644
--- a/drivers/platform/surface/surface_platform_profile.c
+++ b/drivers/platform/surface/surface_platform_profile.c
@@ -40,7 +40,7 @@ struct ssam_tmp_profile_info {
struct ssam_platform_profile_device {
struct ssam_device *sdev;
- struct platform_profile_handler handler;
+ struct device *ppdev;
bool has_fan;
};
@@ -228,13 +228,12 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
tpd->sdev = sdev;
ssam_device_set_drvdata(sdev, tpd);
- tpd->handler.name = "Surface Platform Profile";
- tpd->handler.dev = &sdev->dev;
- tpd->handler.ops = &ssam_platform_profile_ops;
-
tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
- return devm_platform_profile_register(&tpd->handler, tpd);
+ tpd->ppdev = devm_platform_profile_register(&sdev->dev, "Surface Platform Profile",
+ tpd, &ssam_platform_profile_ops);
+
+ return PTR_ERR_OR_ZERO(tpd->ppdev);
}
static const struct ssam_device_id ssam_platform_profile_match[] = {
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index d201ca0e01d6..ae2a7c93ab72 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -784,7 +784,7 @@ static const struct dmi_system_id non_acer_quirks[] __initconst = {
{}
};
-static struct platform_profile_handler platform_profile_handler;
+static struct device *platform_profile_device;
static bool platform_profile_support;
/*
@@ -2073,16 +2073,10 @@ static const struct platform_profile_ops acer_predator_v4_platform_profile_ops =
static int acer_platform_profile_setup(struct platform_device *device)
{
if (quirks->predator_v4) {
- int err;
-
- platform_profile_handler.name = "acer-wmi";
- platform_profile_handler.dev = &device->dev;
- platform_profile_handler.ops =
- &acer_predator_v4_platform_profile_ops;
-
- err = devm_platform_profile_register(&platform_profile_handler, NULL);
- if (err)
- return err;
+ platform_profile_device = devm_platform_profile_register(
+ &device->dev, "acer-wmi", NULL, &acer_predator_v4_platform_profile_ops);
+ if (IS_ERR(platform_profile_device))
+ return PTR_ERR(platform_profile_device);
platform_profile_support = true;
@@ -2125,7 +2119,7 @@ static int acer_thermal_profile_change(void)
if (current_tp != acer_predator_v4_max_perf)
last_non_turbo_profile = current_tp;
- platform_profile_notify(&platform_profile_handler);
+ platform_profile_notify(platform_profile_device);
}
}
diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h
index d99b3556205b..41b2b91b8fdc 100644
--- a/drivers/platform/x86/amd/pmf/pmf.h
+++ b/drivers/platform/x86/amd/pmf/pmf.h
@@ -338,7 +338,7 @@ struct amd_pmf_dev {
struct mutex lock; /* protects the PMF interface */
u32 supported_func;
enum platform_profile_option current_profile;
- struct platform_profile_handler pprof;
+ struct device *ppdev; /* platform profile class device */
struct dentry *dbgfs_dir;
int hb_interval; /* SBIOS heartbeat interval */
struct delayed_work heart_beat;
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index 7c7ed2b9de01..e6cf0b22dac3 100644
--- a/drivers/platform/x86/amd/pmf/sps.c
+++ b/drivers/platform/x86/amd/pmf/sps.c
@@ -404,8 +404,6 @@ static const struct platform_profile_ops amd_pmf_profile_ops = {
int amd_pmf_init_sps(struct amd_pmf_dev *dev)
{
- int err;
-
dev->current_profile = PLATFORM_PROFILE_BALANCED;
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
@@ -420,15 +418,12 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
amd_pmf_set_sps_power_limits(dev);
}
- dev->pprof.name = "amd-pmf";
- dev->pprof.dev = dev->dev;
- dev->pprof.ops = &amd_pmf_profile_ops;
-
/* Create platform_profile structure and register */
- err = devm_platform_profile_register(&dev->pprof, dev);
- if (err)
- dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %d\n",
- err);
+ dev->ppdev = devm_platform_profile_register(dev->dev, "amd-pmf", dev,
+ &amd_pmf_profile_ops);
+ if (IS_ERR(dev->ppdev))
+ dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %ld\n",
+ PTR_ERR(dev->ppdev));
- return err;
+ return PTR_ERR_OR_ZERO(dev->ppdev);
}
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index dc713a5d8042..9a485f777591 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -313,7 +313,7 @@ struct asus_wmi {
bool mid_fan_curve_available;
struct fan_curve_data custom_fan_curves[3];
- struct platform_profile_handler platform_profile_handler;
+ struct device *ppdev;
bool platform_profile_support;
// The RSOC controls the maximum charging percentage.
@@ -3789,7 +3789,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
* Ensure that platform_profile updates userspace with the change to ensure
* that platform_profile and throttle_thermal_policy_mode are in sync.
*/
- platform_profile_notify(&asus->platform_profile_handler);
+ platform_profile_notify(asus->ppdev);
return count;
}
@@ -3891,14 +3891,11 @@ static int platform_profile_setup(struct asus_wmi *asus)
dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");
- asus->platform_profile_handler.name = "asus-wmi";
- asus->platform_profile_handler.dev = dev;
- asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
-
- err = devm_platform_profile_register(&asus->platform_profile_handler, asus);
- if (err) {
+ asus->ppdev = devm_platform_profile_register(dev, "asus-wmi", asus,
+ &asus_wmi_platform_profile_ops);
+ if (IS_ERR(asus->ppdev)) {
dev_err(dev, "Failed to register a platform_profile class device");
- return err;
+ return PTR_ERR(asus->ppdev);
}
asus->platform_profile_support = true;
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index e7209863e7dc..63cf016bc912 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -406,7 +406,6 @@ struct wmax_u32_args {
static struct platform_device *platform_device;
static struct color_platform colors[4];
-static struct platform_profile_handler pp_handler;
static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST];
static u8 interface;
@@ -1135,11 +1134,12 @@ static const struct platform_profile_ops awcc_platform_profile_ops = {
static int create_thermal_profile(struct platform_device *platform_device)
{
- pp_handler.name = "alienware-wmi";
- pp_handler.dev = &platform_device->dev;
- pp_handler.ops = &awcc_platform_profile_ops;
+ struct device *ppdev;
- return devm_platform_profile_register(&pp_handler, NULL);
+ ppdev = devm_platform_profile_register(&platform_device->dev, "alienware-wmi",
+ NULL, &awcc_platform_profile_ops);
+
+ return PTR_ERR_OR_ZERO(ppdev);
}
/*
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 2759bb608b1a..1874d4adfb8a 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -109,8 +109,6 @@ MODULE_DEVICE_TABLE(dmi, dell_device_table);
#define DELL_ACC_SET_FIELD GENMASK(11, 8)
#define DELL_THERMAL_SUPPORTED GENMASK(3, 0)
-static struct platform_profile_handler *thermal_handler;
-
enum thermal_mode_bits {
DELL_BALANCED = BIT(0),
DELL_COOL_BOTTOM = BIT(1),
@@ -254,6 +252,7 @@ static const struct platform_profile_ops dell_pc_platform_profile_ops = {
static int thermal_init(void)
{
+ struct device *ppdev;
int ret;
/* If thermal commands are not supported, exit without error */
@@ -271,26 +270,17 @@ static int thermal_init(void)
if (IS_ERR(platform_device))
return PTR_ERR(platform_device);
- thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL);
- if (!thermal_handler) {
- ret = -ENOMEM;
- goto cleanup_platform_device;
- }
- thermal_handler->name = "dell-pc";
- thermal_handler->dev = &platform_device->dev;
- thermal_handler->ops = &dell_pc_platform_profile_ops;
-
/* Clean up if failed */
- ret = devm_platform_profile_register(thermal_handler, NULL);
- if (ret)
+ ppdev = devm_platform_profile_register(&platform_device->dev, "dell-pc",
+ NULL, &dell_pc_platform_profile_ops);
+ if (IS_ERR(ppdev)) {
+ ret = PTR_ERR(ppdev);
goto cleanup_thermal_handler;
+ }
return 0;
cleanup_thermal_handler:
- thermal_handler = NULL;
-
-cleanup_platform_device:
platform_device_unregister(platform_device);
return ret;
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 1304dfc65aab..435e3ef2e3e7 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -273,7 +273,7 @@ static DEFINE_MUTEX(active_platform_profile_lock);
static struct input_dev *hp_wmi_input_dev;
static struct input_dev *camera_shutter_input_dev;
static struct platform_device *hp_wmi_platform_dev;
-static struct platform_profile_handler platform_profile_handler;
+static struct device *platform_profile_device;
static struct notifier_block platform_power_source_nb;
static enum platform_profile_option active_platform_profile;
static bool platform_profile_support;
@@ -1602,6 +1602,7 @@ static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
static int thermal_profile_setup(struct platform_device *device)
{
+ const struct platform_profile_ops *ops;
int err, tp;
if (is_omen_thermal_profile()) {
@@ -1617,7 +1618,7 @@ static int thermal_profile_setup(struct platform_device *device)
if (err < 0)
return err;
- platform_profile_handler.ops = &platform_profile_omen_ops;
+ ops = &platform_profile_omen_ops;
} else if (is_victus_thermal_profile()) {
err = platform_profile_victus_get_ec(&active_platform_profile);
if (err < 0)
@@ -1631,7 +1632,7 @@ static int thermal_profile_setup(struct platform_device *device)
if (err < 0)
return err;
- platform_profile_handler.ops = &platform_profile_victus_ops;
+ ops = &platform_profile_victus_ops;
} else {
tp = thermal_profile_get();
@@ -1646,15 +1647,13 @@ static int thermal_profile_setup(struct platform_device *device)
if (err)
return err;
- platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
+ ops = &hp_wmi_platform_profile_ops;
}
- platform_profile_handler.name = "hp-wmi";
- platform_profile_handler.dev = &device->dev;
-
- err = devm_platform_profile_register(&platform_profile_handler, NULL);
- if (err)
- return err;
+ platform_profile_device = devm_platform_profile_register(&device->dev, "hp-wmi",
+ NULL, ops);
+ if (IS_ERR(platform_profile_device))
+ return PTR_ERR(platform_profile_device);
platform_profile_support = true;
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index 87c1e087770a..dfb5d4b8c046 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -142,7 +142,7 @@ enum {
struct ideapad_dytc_priv {
enum platform_profile_option current_profile;
- struct platform_profile_handler pprof;
+ struct device *ppdev; /* platform profile device */
struct mutex mutex; /* protects the DYTC interface */
struct ideapad_private *priv;
};
@@ -1050,7 +1050,7 @@ static void dytc_profile_refresh(struct ideapad_private *priv)
if (profile != priv->dytc->current_profile) {
priv->dytc->current_profile = profile;
- platform_profile_notify(&priv->dytc->pprof);
+ platform_profile_notify(priv->dytc->ppdev);
}
}
@@ -1117,15 +1117,16 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
mutex_init(&priv->dytc->mutex);
- priv->dytc->pprof.name = "ideapad-laptop";
- priv->dytc->pprof.dev = &priv->platform_device->dev;
priv->dytc->priv = priv;
- priv->dytc->pprof.ops = &dytc_profile_ops;
/* Create platform_profile structure and register */
- err = devm_platform_profile_register(&priv->dytc->pprof, &priv->dytc);
- if (err)
+ priv->dytc->ppdev = devm_platform_profile_register(&priv->platform_device->dev,
+ "ideapad-laptop", &priv->dytc,
+ &dytc_profile_ops);
+ if (IS_ERR(priv->dytc->ppdev)) {
+ err = PTR_ERR(priv->dytc->ppdev);
goto pp_reg_failed;
+ }
/* Ensure initial values are correct */
dytc_profile_refresh(priv);
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index e1631de6ad86..e02f5a55a6c5 100644
--- a/drivers/platform/x86/inspur_platform_profile.c
+++ b/drivers/platform/x86/inspur_platform_profile.c
@@ -32,7 +32,7 @@ enum inspur_tmp_profile {
struct inspur_wmi_priv {
struct wmi_device *wdev;
- struct platform_profile_handler handler;
+ struct device *ppdev;
};
static int inspur_wmi_perform_query(struct wmi_device *wdev,
@@ -190,11 +190,10 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
priv->wdev = wdev;
dev_set_drvdata(&wdev->dev, priv);
- priv->handler.name = "inspur-wmi";
- priv->handler.dev = &wdev->dev;
- priv->handler.ops = &inspur_platform_profile_ops;
+ priv->ppdev = devm_platform_profile_register(&wdev->dev, "inspur-wmi", priv,
+ &inspur_platform_profile_ops);
- return devm_platform_profile_register(&priv->handler, priv);
+ return PTR_ERR_OR_ZERO(priv->ppdev);
}
static const struct wmi_device_id inspur_wmi_id_table[] = {
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index c9226e8dc713..56c57cb45a76 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -962,6 +962,7 @@ static const struct proc_ops dispatch_proc_ops = {
static struct platform_device *tpacpi_pdev;
static struct platform_device *tpacpi_sensors_pdev;
static struct device *tpacpi_hwmon;
+static struct device *tpacpi_pprof;
static struct input_dev *tpacpi_inputdev;
static struct mutex tpacpi_inputdev_send_mutex;
static LIST_HEAD(tpacpi_all_drivers);
@@ -10554,11 +10555,6 @@ static const struct platform_profile_ops dytc_profile_ops = {
.profile_set = dytc_profile_set,
};
-static struct platform_profile_handler dytc_profile = {
- .name = "thinkpad-acpi",
- .ops = &dytc_profile_ops,
-};
-
static void dytc_profile_refresh(void)
{
enum platform_profile_option profile;
@@ -10587,7 +10583,7 @@ static void dytc_profile_refresh(void)
err = convert_dytc_to_profile(funcmode, perfmode, &profile);
if (!err && profile != dytc_current_profile) {
dytc_current_profile = profile;
- platform_profile_notify(&dytc_profile);
+ platform_profile_notify(tpacpi_pprof);
}
}
@@ -10648,14 +10644,14 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
dbg_printk(TPACPI_DBG_INIT,
"DYTC version %d: thermal mode available\n", dytc_version);
- dytc_profile.dev = &tpacpi_pdev->dev;
/* Create platform_profile structure and register */
- err = devm_platform_profile_register(&dytc_profile, NULL);
+ tpacpi_pprof = devm_platform_profile_register(&tpacpi_pdev->dev, "thinkpad-acpi",
+ NULL, &dytc_profile_ops);
/*
* If for some reason platform_profiles aren't enabled
* don't quit terminally.
*/
- if (err)
+ if (IS_ERR(tpacpi_pprof))
return -ENODEV;
/* Ensure initial values are correct */
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 5ad1ab7b75e4..778d4c661c3c 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -45,10 +45,14 @@ struct platform_profile_handler {
const struct platform_profile_ops *ops;
};
-int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
-int platform_profile_remove(struct platform_profile_handler *pprof);
-int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
+struct device *platform_profile_register(struct device *dev, const char *name,
+ void *drvdata,
+ const struct platform_profile_ops *ops);
+int platform_profile_remove(struct device *dev);
+struct device *devm_platform_profile_register(struct device *dev, const char *name,
+ void *drvdata,
+ const struct platform_profile_ops *ops);
int platform_profile_cycle(void);
-void platform_profile_notify(struct platform_profile_handler *pprof);
+void platform_profile_notify(struct device *dev);
#endif /*_PLATFORM_PROFILE_H_*/
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 16/19] ACPI: platform_profile: Move platform_profile_handler
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (14 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 17/19] ACPI: platform_profile: Clean platform_profile_handler Kurt Borja
` (4 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
platform_profile_handler is now an internal structure. Move it to
platform_profile.c.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 9 +++++++++
include/linux/platform_profile.h | 11 -----------
2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index a1dfa168f51f..f27005a267a1 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -14,6 +14,15 @@
static DEFINE_MUTEX(profile_lock);
+struct platform_profile_handler {
+ const char *name;
+ struct device *dev;
+ struct device class_dev;
+ int minor;
+ unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
+ const struct platform_profile_ops *ops;
+};
+
static const char * const profile_names[] = {
[PLATFORM_PROFILE_LOW_POWER] = "low-power",
[PLATFORM_PROFILE_COOL] = "cool",
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 778d4c661c3c..eea1daf85616 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -28,23 +28,12 @@ enum platform_profile_option {
PLATFORM_PROFILE_LAST, /*must always be last */
};
-struct platform_profile_handler;
-
struct platform_profile_ops {
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);
};
-struct platform_profile_handler {
- const char *name;
- struct device *dev;
- struct device class_dev;
- int minor;
- unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
- const struct platform_profile_ops *ops;
-};
-
struct device *platform_profile_register(struct device *dev, const char *name,
void *drvdata,
const struct platform_profile_ops *ops);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 17/19] ACPI: platform_profile: Clean platform_profile_handler
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (15 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 16/19] ACPI: platform_profile: Move platform_profile_handler Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 18/19] ACPI: platform_profile: Add documentation Kurt Borja
` (3 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Remove parent device *dev from platform_profile_handler, as it's no
longer accessed directly. Rename class_dev -> dev.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index f27005a267a1..8a1454e66cf1 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -10,14 +10,13 @@
#include <linux/platform_profile.h>
#include <linux/sysfs.h>
-#define to_pprof_handler(d) (container_of(d, struct platform_profile_handler, class_dev))
+#define to_pprof_handler(d) (container_of(d, struct platform_profile_handler, dev))
static DEFINE_MUTEX(profile_lock);
struct platform_profile_handler {
const char *name;
- struct device *dev;
- struct device class_dev;
+ struct device dev;
int minor;
unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
const struct platform_profile_ops *ops;
@@ -90,8 +89,8 @@ static int _notify_class_profile(struct device *dev, void *data)
struct platform_profile_handler *handler = to_pprof_handler(dev);
lockdep_assert_held(&profile_lock);
- sysfs_notify(&handler->class_dev.kobj, NULL, "profile");
- kobject_uevent(&handler->class_dev.kobj, KOBJ_CHANGE);
+ sysfs_notify(&handler->dev.kobj, NULL, "profile");
+ kobject_uevent(&handler->dev.kobj, KOBJ_CHANGE);
return 0;
}
@@ -517,12 +516,12 @@ struct device *platform_profile_register(struct device *dev, const char *name,
pprof->name = name;
pprof->ops = ops;
pprof->minor = minor;
- pprof->class_dev.class = &platform_profile_class;
- pprof->class_dev.parent = dev;
- dev_set_drvdata(&pprof->class_dev, drvdata);
- dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
+ pprof->dev.class = &platform_profile_class;
+ pprof->dev.parent = dev;
+ dev_set_drvdata(&pprof->dev, drvdata);
+ dev_set_name(&pprof->dev, "platform-profile-%d", pprof->minor);
/* device_register() takes ownership of ppdev */
- ppdev = &no_free_ptr(pprof)->class_dev;
+ ppdev = &no_free_ptr(pprof)->dev;
err = device_register(ppdev);
if (err) {
put_device(ppdev);
@@ -554,7 +553,7 @@ int platform_profile_remove(struct device *dev)
guard(mutex)(&profile_lock);
id = pprof->minor;
- device_unregister(&pprof->class_dev);
+ device_unregister(&pprof->dev);
ida_free(&platform_profile_ida, id);
sysfs_notify(acpi_kobj, NULL, "platform_profile");
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 18/19] ACPI: platform_profile: Add documentation
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (16 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 17/19] ACPI: platform_profile: Clean platform_profile_handler Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 0:27 ` [PATCH v4 19/19] ACPI: platform_profile: Add a prefix to log messages Kurt Borja
` (2 subsequent siblings)
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Add kerneldoc and sysfs class documentation.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
.../ABI/testing/sysfs-class-platform-profile | 44 +++++++++++++++++++
drivers/acpi/platform_profile.c | 33 ++++++++++++++
include/linux/platform_profile.h | 10 +++++
3 files changed, 87 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
diff --git a/Documentation/ABI/testing/sysfs-class-platform-profile b/Documentation/ABI/testing/sysfs-class-platform-profile
new file mode 100644
index 000000000000..b5a3600080bc
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-platform-profile
@@ -0,0 +1,44 @@
+What: /sys/class/platform-profile/platform-profile-X/name
+Date: January 2025
+Description: Name of the class device given by the driver.
+
+ RO
+
+What: /sys/class/platform-profile/platform-profile-X/choices
+Date: January 2025
+Description: This file contains a space-separated list of profiles supported for this device.
+
+ Drivers must use the following standard profile-names:
+
+ ==================== ========================================
+ low-power Low power consumption
+ cool Cooler operation
+ quiet Quieter operation
+ balanced Balance between low power consumption
+ and performance
+ balanced-performance Balance between performance and low
+ power consumption with a slight bias
+ towards performance
+ performance High performance operation
+ custom Driver defined custom profile
+ ==================== ========================================
+
+ RO
+
+What: /sys/class/platform-profile/platform-profile-X/profile
+Date: January 2025
+Description: Reading this file gives the current selected profile for this
+ device. Writing this file with one of the strings from
+ platform_profile_choices changes the profile to the new value.
+
+ This file can be monitored for changes by polling for POLLPRI,
+ POLLPRI will be signaled on any changes, independent of those
+ changes coming from a userspace write; or coming from another
+ source such as e.g. a hotkey triggered profile change handled
+ either directly by the embedded-controller or fully handled
+ inside the kernel.
+
+ This file may also emit the string 'custom' to indicate
+ that the driver is using a driver defined custom profile.
+
+ RW
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 8a1454e66cf1..4895f37dd549 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -425,6 +425,10 @@ static const struct attribute_group platform_profile_group = {
.is_visible = profile_class_is_visible,
};
+/**
+ * platform_profile_notify - Notify class device and legacy sysfs interface
+ * @dev: The class device
+ */
void platform_profile_notify(struct device *dev)
{
scoped_cond_guard(mutex_intr, return, &profile_lock) {
@@ -434,6 +438,11 @@ void platform_profile_notify(struct device *dev)
}
EXPORT_SYMBOL_GPL(platform_profile_notify);
+/**
+ * platform_profile_cycle - Cycles profiles available on all registered class devices
+ *
+ * Return: 0 on success, -errno on failure
+ */
int platform_profile_cycle(void)
{
enum platform_profile_option next = PLATFORM_PROFILE_LAST;
@@ -477,6 +486,15 @@ int platform_profile_cycle(void)
}
EXPORT_SYMBOL_GPL(platform_profile_cycle);
+/**
+ * platform_profile_register - Creates and registers a platform profile class device
+ * @dev: Parent device
+ * @name: Name of the class device
+ * @drvdata: Driver data that will be attached to the class device
+ * @ops: Platform profile's mandatory operations
+ *
+ * Return: pointer to the new class device on success, ERR_PTR on failure
+ */
struct device *platform_profile_register(struct device *dev, const char *name,
void *drvdata,
const struct platform_profile_ops *ops)
@@ -546,6 +564,12 @@ struct device *platform_profile_register(struct device *dev, const char *name,
}
EXPORT_SYMBOL_GPL(platform_profile_register);
+/**
+ * platform_profile_remove - Unregisters a platform profile class device
+ * @dev: Class device
+ *
+ * Return: 0
+ */
int platform_profile_remove(struct device *dev)
{
struct platform_profile_handler *pprof = to_pprof_handler(dev);
@@ -571,6 +595,15 @@ static void devm_platform_profile_release(struct device *dev, void *res)
platform_profile_remove(*ppdev);
}
+/**
+ * devm_platform_profile_register - Device managed version of platform_profile_register
+ * @dev: Parent device
+ * @name: Name of the class device
+ * @drvdata: Driver data that will be attached to the class device
+ * @ops: Platform profile's mandatory operations
+ *
+ * Return: pointer to the new class device on success, ERR_PTR on failure
+ */
struct device *devm_platform_profile_register(struct device *dev, const char *name,
void *drvdata,
const struct platform_profile_ops *ops)
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index eea1daf85616..8ab5b0e8eb2c 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -28,6 +28,16 @@ enum platform_profile_option {
PLATFORM_PROFILE_LAST, /*must always be last */
};
+/**
+ * struct platform_profile_ops - platform profile operations
+ * @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.
+ * @profile_get: Callback that will be called when showing the current platform
+ * profile in sysfs.
+ * @profile_set: Callback that will be called when storing a new platform
+ * profile in sysfs.
+ */
struct platform_profile_ops {
int (*probe)(void *drvdata, unsigned long *choices);
int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 19/19] ACPI: platform_profile: Add a prefix to log messages
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (17 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 18/19] ACPI: platform_profile: Add documentation Kurt Borja
@ 2025-01-16 0:27 ` Kurt Borja
2025-01-16 16:09 ` [PATCH v4 00/19] Hide platform_profile_handler from consumers Ilpo Järvinen
2025-01-16 22:20 ` Mark Pearson
20 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-16 0:27 UTC (permalink / raw)
To: platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Kurt Borja, Maximilian Luz,
Lee, Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D. Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Mark Pearson, Alexis Belmonte, Ai Chao, Gergo Koteles,
Dell.Client.Kernel, ibm-acpi-devel
Declare a pr_fmt prefix.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 4895f37dd549..c9e46b6e27da 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -2,6 +2,8 @@
/* Platform profile sysfs interface */
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <linux/acpi.h>
#include <linux/bits.h>
#include <linux/cleanup.h>
--
2.48.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (18 preceding siblings ...)
2025-01-16 0:27 ` [PATCH v4 19/19] ACPI: platform_profile: Add a prefix to log messages Kurt Borja
@ 2025-01-16 16:09 ` Ilpo Järvinen
2025-01-17 4:16 ` Kurt Borja
2025-01-16 22:20 ` Mark Pearson
20 siblings, 1 reply; 37+ messages in thread
From: Ilpo Järvinen @ 2025-01-16 16:09 UTC (permalink / raw)
To: Kurt Borja
Cc: platform-driver-x86, Rafael J. Wysocki, Len Brown, linux-acpi,
LKML, Mario Limonciello, Armin Wolf, Joshua Grisham,
Derek J. Clark, Hans de Goede, Maximilian Luz, Lee, Chun-Yi,
Shyam Sundar S K, Corentin Chary, Luke D. Jones, Lyndon Sanche,
Ike Panhc, Henrique de Moraes Holschuh, Mark Pearson,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
On Wed, 15 Jan 2025, Kurt Borja wrote:
> The merge window is about to open, so I rebased this patchset on top of
> pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> manage to squeeze this into v6.14.
Hi all,
I was hoping to finish this in this cycle since it has been so close and
has only required minor tweaks recently.
I went to review the changes once again and ended up applying this now
into the review-ilpo-next branch. Thank you all who worked on to improve
this series! :-)
There were minor nits, however, I hadto address while applying. I added
the justification into 5/19 commit message and changed a few trivial
things in the code. Please check that the diff compared with your series
w/o any modifications makes sense:
diff --git a/Documentation/ABI/testing/sysfs-class-platform-profile b/Documentation/ABI/testing/sysfs-class-platform-profile
index b5a3600080bc..dc72adfb830a 100644
--- a/Documentation/ABI/testing/sysfs-class-platform-profile
+++ b/Documentation/ABI/testing/sysfs-class-platform-profile
@@ -1,12 +1,15 @@
What: /sys/class/platform-profile/platform-profile-X/name
-Date: January 2025
+Date: March 2025
+KernelVersion: 6.14
Description: Name of the class device given by the driver.
RO
What: /sys/class/platform-profile/platform-profile-X/choices
-Date: January 2025
-Description: This file contains a space-separated list of profiles supported for this device.
+Date: March 2025
+KernelVersion: 6.14
+Description: This file contains a space-separated list of profiles supported
+ for this device.
Drivers must use the following standard profile-names:
@@ -26,7 +29,8 @@ Description: This file contains a space-separated list of profiles supported for
RO
What: /sys/class/platform-profile/platform-profile-X/profile
-Date: January 2025
+Date: March 2025
+KernelVersion: 6.14
Description: Reading this file gives the current selected profile for this
device. Writing this file with one of the strings from
platform_profile_choices changes the profile to the new value.
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index c9e46b6e27da..fc92e43d0fe9 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -540,7 +540,7 @@ struct device *platform_profile_register(struct device *dev, const char *name,
pprof->dev.parent = dev;
dev_set_drvdata(&pprof->dev, drvdata);
dev_set_name(&pprof->dev, "platform-profile-%d", pprof->minor);
- /* device_register() takes ownership of ppdev */
+ /* device_register() takes ownership of pprof/ppdev */
ppdev = &no_free_ptr(pprof)->dev;
err = device_register(ppdev);
if (err) {
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 9a485f777591..1032c0e84e3d 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -3894,7 +3894,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
asus->ppdev = devm_platform_profile_register(dev, "asus-wmi", asus,
&asus_wmi_platform_profile_ops);
if (IS_ERR(asus->ppdev)) {
- dev_err(dev, "Failed to register a platform_profile class device");
+ dev_err(dev, "Failed to register a platform_profile class device\n");
return PTR_ERR(asus->ppdev);
}
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 1874d4adfb8a..483240bb36e7 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -270,17 +270,16 @@ static int thermal_init(void)
if (IS_ERR(platform_device))
return PTR_ERR(platform_device);
- /* Clean up if failed */
ppdev = devm_platform_profile_register(&platform_device->dev, "dell-pc",
NULL, &dell_pc_platform_profile_ops);
if (IS_ERR(ppdev)) {
ret = PTR_ERR(ppdev);
- goto cleanup_thermal_handler;
+ goto cleanup_platform_device;
}
return 0;
-cleanup_thermal_handler:
+cleanup_platform_device:
platform_device_unregister(platform_device);
return ret;
>
> ~ Kurt
> ---
> v3 -> v4:
>
> [09/19]
> - Replace error message with a user-friendly one
>
> v3: https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
>
> Kurt Borja (19):
> ACPI: platform_profile: Replace *class_dev member with class_dev
> ACPI: platform_profile: Let drivers set drvdata to the class device
> ACPI: platform_profile: Remove platform_profile_handler from callbacks
> ACPI: platform_profile: Add `ops` member to handlers
> ACPI: platform_profile: Add `probe` to platform_profile_ops
> platform/surface: surface_platform_profile: Use
> devm_platform_profile_register()
> platform/x86: acer-wmi: Use devm_platform_profile_register()
> platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> platform/x86: asus-wmi: Use devm_platform_profile_register()
> platform/x86: dell-pc: Use devm_platform_profile_register()
> platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> platform/x86: hp-wmi: Use devm_platform_profile_register()
> platform/x86: inspur_platform_profile: Use
> devm_platform_profile_register()
> platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> ACPI: platform_profile: Remove platform_profile_handler from exported
> symbols
> ACPI: platform_profile: Move platform_profile_handler
> ACPI: platform_profile: Clean platform_profile_handler
> ACPI: platform_profile: Add documentation
> ACPI: platform_profile: Add a prefix to log messages
>
> .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> .../surface/surface_platform_profile.c | 48 ++---
> drivers/platform/x86/acer-wmi.c | 114 ++++++------
> drivers/platform/x86/amd/pmf/core.c | 1 -
> drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> drivers/platform/x86/asus-wmi.c | 55 +++---
> drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> drivers/platform/x86/dell/dell-pc.c | 60 +++---
> drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> drivers/platform/x86/ideapad-laptop.c | 45 +++--
> .../platform/x86/inspur_platform_profile.c | 48 +++--
> drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> include/linux/platform_profile.h | 37 ++--
> 15 files changed, 495 insertions(+), 337 deletions(-)
> create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
>
>
> base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
>
--
i.
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
` (19 preceding siblings ...)
2025-01-16 16:09 ` [PATCH v4 00/19] Hide platform_profile_handler from consumers Ilpo Järvinen
@ 2025-01-16 22:20 ` Mark Pearson
2025-01-17 4:27 ` Kurt Borja
2025-01-17 16:42 ` Ilpo Järvinen
20 siblings, 2 replies; 37+ messages in thread
From: Mark Pearson @ 2025-01-16 22:20 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86@vger.kernel.org
Cc: Rafael J. Wysocki, Len Brown, linux-acpi@vger.kernel.org,
linux-kernel, Limonciello, Mario, Armin Wolf, Joshua Grisham,
Derek J . Clark, Ilpo Järvinen, Hans de Goede,
Maximilian Luz, Lee Chun-Yi, Shyam Sundar S K, Corentin Chary,
Luke D . Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Alexis Belmonte, Ai Chao,
Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
Hi
On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> Hi :)
>
> The merge window is about to open, so I rebased this patchset on top of
> pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> manage to squeeze this into v6.14.
>
> ~ Kurt
> ---
> v3 -> v4:
>
> [09/19]
> - Replace error message with a user-friendly one
>
> v3:
> https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
>
> Kurt Borja (19):
> ACPI: platform_profile: Replace *class_dev member with class_dev
> ACPI: platform_profile: Let drivers set drvdata to the class device
> ACPI: platform_profile: Remove platform_profile_handler from callbacks
> ACPI: platform_profile: Add `ops` member to handlers
> ACPI: platform_profile: Add `probe` to platform_profile_ops
> platform/surface: surface_platform_profile: Use
> devm_platform_profile_register()
> platform/x86: acer-wmi: Use devm_platform_profile_register()
> platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> platform/x86: asus-wmi: Use devm_platform_profile_register()
> platform/x86: dell-pc: Use devm_platform_profile_register()
> platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> platform/x86: hp-wmi: Use devm_platform_profile_register()
> platform/x86: inspur_platform_profile: Use
> devm_platform_profile_register()
> platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> ACPI: platform_profile: Remove platform_profile_handler from exported
> symbols
> ACPI: platform_profile: Move platform_profile_handler
> ACPI: platform_profile: Clean platform_profile_handler
> ACPI: platform_profile: Add documentation
> ACPI: platform_profile: Add a prefix to log messages
>
> .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> .../surface/surface_platform_profile.c | 48 ++---
> drivers/platform/x86/acer-wmi.c | 114 ++++++------
> drivers/platform/x86/amd/pmf/core.c | 1 -
> drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> drivers/platform/x86/asus-wmi.c | 55 +++---
> drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> drivers/platform/x86/dell/dell-pc.c | 60 +++---
> drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> drivers/platform/x86/ideapad-laptop.c | 45 +++--
> .../platform/x86/inspur_platform_profile.c | 48 +++--
> drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> include/linux/platform_profile.h | 37 ++--
> 15 files changed, 495 insertions(+), 337 deletions(-)
> create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
>
>
> base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> --
> 2.48.1
For the series up to v4 commit 15/19:
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
I need to go over the last few commits just once more, as there a few pieces I need to get my head around - and I'm not going to get it done this evening. Hope it's OK to add review for the bits that I have done.
Thanks
Mark
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-16 16:09 ` [PATCH v4 00/19] Hide platform_profile_handler from consumers Ilpo Järvinen
@ 2025-01-17 4:16 ` Kurt Borja
0 siblings, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-17 4:16 UTC (permalink / raw)
To: Ilpo Järvinen
Cc: platform-driver-x86, Rafael J. Wysocki, Len Brown, linux-acpi,
LKML, Mario Limonciello, Armin Wolf, Joshua Grisham,
Derek J. Clark, Hans de Goede, Maximilian Luz, Lee, Chun-Yi,
Shyam Sundar S K, Corentin Chary, Luke D. Jones, Lyndon Sanche,
Ike Panhc, Henrique de Moraes Holschuh, Mark Pearson,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
On Thursday, January 16, 2025 11:09:49 AM Colombia Standard Time Ilpo Järvinen
wrote:
> On Wed, 15 Jan 2025, Kurt Borja wrote:
>
> > The merge window is about to open, so I rebased this patchset on top of
> > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> > manage to squeeze this into v6.14.
>
> Hi all,
>
> I was hoping to finish this in this cycle since it has been so close and
> has only required minor tweaks recently.
>
> I went to review the changes once again and ended up applying this now
> into the review-ilpo-next branch. Thank you all who worked on to improve
> this series! :-)
Thank you Mario, Ilpo and Mark for reviewing this :)
>
> There were minor nits, however, I hadto address while applying. I added
> the justification into 5/19 commit message and changed a few trivial
> things in the code. Please check that the diff compared with your series
> w/o any modifications makes sense:
>
>
> diff --git a/Documentation/ABI/testing/sysfs-class-platform-profile b/
Documentation/ABI/testing/sysfs-class-platform-profile
> index b5a3600080bc..dc72adfb830a 100644
> --- a/Documentation/ABI/testing/sysfs-class-platform-profile
> +++ b/Documentation/ABI/testing/sysfs-class-platform-profile
> @@ -1,12 +1,15 @@
> What: /sys/class/platform-profile/platform-profile-X/name
> -Date: January 2025
> +Date: March 2025
> +KernelVersion: 6.14
> Description: Name of the class device given by the driver.
>
> RO
>
> What: /sys/class/platform-profile/platform-profile-X/choices
> -Date: January 2025
> -Description: This file contains a space-separated list of profiles
supported for this device.
> +Date: March 2025
> +KernelVersion: 6.14
> +Description: This file contains a space-separated list of profiles
supported
> + for this device.
>
> Drivers must use the following standard profile-names:
>
> @@ -26,7 +29,8 @@ Description: This file contains a space-separated list
of profiles supported for
> RO
>
> What: /sys/class/platform-profile/platform-profile-X/profile
> -Date: January 2025
> +Date: March 2025
> +KernelVersion: 6.14
> Description: Reading this file gives the current selected profile
for this
> device. Writing this file with one of the strings from
> platform_profile_choices changes the profile to the new
value.
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index c9e46b6e27da..fc92e43d0fe9 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -540,7 +540,7 @@ struct device *platform_profile_register(struct device
*dev, const char *name,
> pprof->dev.parent = dev;
> dev_set_drvdata(&pprof->dev, drvdata);
> dev_set_name(&pprof->dev, "platform-profile-%d", pprof->minor);
> - /* device_register() takes ownership of ppdev */
> + /* device_register() takes ownership of pprof/ppdev */
> ppdev = &no_free_ptr(pprof)->dev;
> err = device_register(ppdev);
> if (err) {
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-
wmi.c
> index 9a485f777591..1032c0e84e3d 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -3894,7 +3894,7 @@ static int platform_profile_setup(struct asus_wmi
*asus)
> asus->ppdev = devm_platform_profile_register(dev, "asus-wmi", asus,
>
&asus_wmi_platform_profile_ops);
> if (IS_ERR(asus->ppdev)) {
> - dev_err(dev, "Failed to register a platform_profile
class device");
> + dev_err(dev, "Failed to register a platform_profile class
device\n");
> return PTR_ERR(asus->ppdev);
> }
>
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/
dell-pc.c
> index 1874d4adfb8a..483240bb36e7 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -270,17 +270,16 @@ static int thermal_init(void)
> if (IS_ERR(platform_device))
> return PTR_ERR(platform_device);
>
> - /* Clean up if failed */
> ppdev = devm_platform_profile_register(&platform_device->dev,
"dell-pc",
> NULL,
&dell_pc_platform_profile_ops);
> if (IS_ERR(ppdev)) {
> ret = PTR_ERR(ppdev);
> - goto cleanup_thermal_handler;
> + goto cleanup_platform_device;
> }
>
> return 0;
>
> -cleanup_thermal_handler:
> +cleanup_platform_device:
> platform_device_unregister(platform_device);
>
> return ret;
Changes LGTM, thanks.
~ Kurt
>
>
> >
> > ~ Kurt
> > ---
> > v3 -> v4:
> >
> > [09/19]
> > - Replace error message with a user-friendly one
> >
> > v3: https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> >
> > Kurt Borja (19):
> > ACPI: platform_profile: Replace *class_dev member with class_dev
> > ACPI: platform_profile: Let drivers set drvdata to the class device
> > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> > ACPI: platform_profile: Add `ops` member to handlers
> > ACPI: platform_profile: Add `probe` to platform_profile_ops
> > platform/surface: surface_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: acer-wmi: Use devm_platform_profile_register()
> > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> > platform/x86: asus-wmi: Use devm_platform_profile_register()
> > platform/x86: dell-pc: Use devm_platform_profile_register()
> > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> > platform/x86: hp-wmi: Use devm_platform_profile_register()
> > platform/x86: inspur_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> > ACPI: platform_profile: Remove platform_profile_handler from exported
> > symbols
> > ACPI: platform_profile: Move platform_profile_handler
> > ACPI: platform_profile: Clean platform_profile_handler
> > ACPI: platform_profile: Add documentation
> > ACPI: platform_profile: Add a prefix to log messages
> >
> > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> > .../surface/surface_platform_profile.c | 48 ++---
> > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> > drivers/platform/x86/amd/pmf/core.c | 1 -
> > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> > drivers/platform/x86/asus-wmi.c | 55 +++---
> > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> > .../platform/x86/inspur_platform_profile.c | 48 +++--
> > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> > include/linux/platform_profile.h | 37 ++--
> > 15 files changed, 495 insertions(+), 337 deletions(-)
> > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> >
> >
> > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> >
>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-16 22:20 ` Mark Pearson
@ 2025-01-17 4:27 ` Kurt Borja
2025-01-17 16:42 ` Ilpo Järvinen
1 sibling, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-17 4:27 UTC (permalink / raw)
To: Mark Pearson, platform-driver-x86@vger.kernel.org
Cc: Rafael J. Wysocki, Len Brown, linux-acpi@vger.kernel.org,
linux-kernel, Limonciello, Mario, Armin Wolf, Joshua Grisham,
Derek J . Clark, Ilpo Järvinen, Hans de Goede,
Maximilian Luz, Lee Chun-Yi, Shyam Sundar S K, Corentin Chary,
Luke D . Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Alexis Belmonte, Ai Chao,
Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On Thu Jan 16, 2025 at 5:20 PM -05, Mark Pearson wrote:
> Hi
>
> On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> > Hi :)
> >
> > The merge window is about to open, so I rebased this patchset on top of
> > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> > manage to squeeze this into v6.14.
> >
> > ~ Kurt
> > ---
> > v3 -> v4:
> >
> > [09/19]
> > - Replace error message with a user-friendly one
> >
> > v3:
> > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> >
> > Kurt Borja (19):
> > ACPI: platform_profile: Replace *class_dev member with class_dev
> > ACPI: platform_profile: Let drivers set drvdata to the class device
> > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> > ACPI: platform_profile: Add `ops` member to handlers
> > ACPI: platform_profile: Add `probe` to platform_profile_ops
> > platform/surface: surface_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: acer-wmi: Use devm_platform_profile_register()
> > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> > platform/x86: asus-wmi: Use devm_platform_profile_register()
> > platform/x86: dell-pc: Use devm_platform_profile_register()
> > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> > platform/x86: hp-wmi: Use devm_platform_profile_register()
> > platform/x86: inspur_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> > ACPI: platform_profile: Remove platform_profile_handler from exported
> > symbols
> > ACPI: platform_profile: Move platform_profile_handler
> > ACPI: platform_profile: Clean platform_profile_handler
> > ACPI: platform_profile: Add documentation
> > ACPI: platform_profile: Add a prefix to log messages
> >
> > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> > .../surface/surface_platform_profile.c | 48 ++---
> > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> > drivers/platform/x86/amd/pmf/core.c | 1 -
> > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> > drivers/platform/x86/asus-wmi.c | 55 +++---
> > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> > .../platform/x86/inspur_platform_profile.c | 48 +++--
> > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> > include/linux/platform_profile.h | 37 ++--
> > 15 files changed, 495 insertions(+), 337 deletions(-)
> > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> >
> >
> > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> > --
> > 2.48.1
>
> For the series up to v4 commit 15/19:
> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
This covers the most important patches, thank you very much!
~ Kurt
>
> I need to go over the last few commits just once more, as there a few pieces I need to get my head around - and I'm not going to get it done this evening. Hope it's OK to add review for the bits that I have done.
>
> Thanks
> Mark
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-16 22:20 ` Mark Pearson
2025-01-17 4:27 ` Kurt Borja
@ 2025-01-17 16:42 ` Ilpo Järvinen
2025-01-17 17:13 ` Kurt Borja
1 sibling, 1 reply; 37+ messages in thread
From: Ilpo Järvinen @ 2025-01-17 16:42 UTC (permalink / raw)
To: Mark Pearson
Cc: Kurt Borja, platform-driver-x86@vger.kernel.org,
Rafael J. Wysocki, Len Brown, linux-acpi@vger.kernel.org, LKML,
Limonciello, Mario, Armin Wolf, Joshua Grisham, Derek J . Clark,
Hans de Goede, Maximilian Luz, Lee Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D . Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Alexis Belmonte, Ai Chao,
Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On Thu, 16 Jan 2025, Mark Pearson wrote:
> Hi
>
> On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> > Hi :)
> >
> > The merge window is about to open, so I rebased this patchset on top of
> > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> > manage to squeeze this into v6.14.
> >
> > ~ Kurt
> > ---
> > v3 -> v4:
> >
> > [09/19]
> > - Replace error message with a user-friendly one
> >
> > v3:
> > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> >
> > Kurt Borja (19):
> > ACPI: platform_profile: Replace *class_dev member with class_dev
> > ACPI: platform_profile: Let drivers set drvdata to the class device
> > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> > ACPI: platform_profile: Add `ops` member to handlers
> > ACPI: platform_profile: Add `probe` to platform_profile_ops
> > platform/surface: surface_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: acer-wmi: Use devm_platform_profile_register()
> > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> > platform/x86: asus-wmi: Use devm_platform_profile_register()
> > platform/x86: dell-pc: Use devm_platform_profile_register()
> > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> > platform/x86: hp-wmi: Use devm_platform_profile_register()
> > platform/x86: inspur_platform_profile: Use
> > devm_platform_profile_register()
> > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> > ACPI: platform_profile: Remove platform_profile_handler from exported
> > symbols
> > ACPI: platform_profile: Move platform_profile_handler
> > ACPI: platform_profile: Clean platform_profile_handler
> > ACPI: platform_profile: Add documentation
> > ACPI: platform_profile: Add a prefix to log messages
> >
> > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> > .../surface/surface_platform_profile.c | 48 ++---
> > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> > drivers/platform/x86/amd/pmf/core.c | 1 -
> > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> > drivers/platform/x86/asus-wmi.c | 55 +++---
> > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> > .../platform/x86/inspur_platform_profile.c | 48 +++--
> > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> > include/linux/platform_profile.h | 37 ++--
> > 15 files changed, 495 insertions(+), 337 deletions(-)
> > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> >
> >
> > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> > --
> > 2.48.1
>
> For the series up to v4 commit 15/19:
> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>
> I need to go over the last few commits just once more, as there a few
> pieces I need to get my head around - and I'm not going to get it done
> this evening. Hope it's OK to add review for the bits that I have done.
I, for the first time ever, tested filter-branch and after some initial
hickups on how to specify the commit range, got your Reviewed-bys added
with single command :-).
While at it, I also managed to catch one rev-by line without any
name+email (I assume it was b4 messing something up).
I'll soon want to merge fixes branch into for-next though, and after that
adding any rev-bys will not be as easy as it was now.
--
i.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-17 16:42 ` Ilpo Järvinen
@ 2025-01-17 17:13 ` Kurt Borja
2025-01-17 17:19 ` Ilpo Järvinen
0 siblings, 1 reply; 37+ messages in thread
From: Kurt Borja @ 2025-01-17 17:13 UTC (permalink / raw)
To: Ilpo Järvinen, Mark Pearson
Cc: platform-driver-x86@vger.kernel.org, Rafael J. Wysocki, Len Brown,
linux-acpi@vger.kernel.org, LKML, Limonciello, Mario, Armin Wolf,
Joshua Grisham, Derek J . Clark, Hans de Goede, Maximilian Luz,
Lee Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D . Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
> On Thu, 16 Jan 2025, Mark Pearson wrote:
>
> > Hi
> >
> > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> > > Hi :)
> > >
> > > The merge window is about to open, so I rebased this patchset on top of
> > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> > > manage to squeeze this into v6.14.
> > >
> > > ~ Kurt
> > > ---
> > > v3 -> v4:
> > >
> > > [09/19]
> > > - Replace error message with a user-friendly one
> > >
> > > v3:
> > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> > >
> > > Kurt Borja (19):
> > > ACPI: platform_profile: Replace *class_dev member with class_dev
> > > ACPI: platform_profile: Let drivers set drvdata to the class device
> > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> > > ACPI: platform_profile: Add `ops` member to handlers
> > > ACPI: platform_profile: Add `probe` to platform_profile_ops
> > > platform/surface: surface_platform_profile: Use
> > > devm_platform_profile_register()
> > > platform/x86: acer-wmi: Use devm_platform_profile_register()
> > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> > > platform/x86: asus-wmi: Use devm_platform_profile_register()
> > > platform/x86: dell-pc: Use devm_platform_profile_register()
> > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> > > platform/x86: hp-wmi: Use devm_platform_profile_register()
> > > platform/x86: inspur_platform_profile: Use
> > > devm_platform_profile_register()
> > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> > > ACPI: platform_profile: Remove platform_profile_handler from exported
> > > symbols
> > > ACPI: platform_profile: Move platform_profile_handler
> > > ACPI: platform_profile: Clean platform_profile_handler
> > > ACPI: platform_profile: Add documentation
> > > ACPI: platform_profile: Add a prefix to log messages
> > >
> > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> > > .../surface/surface_platform_profile.c | 48 ++---
> > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> > > drivers/platform/x86/amd/pmf/core.c | 1 -
> > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> > > drivers/platform/x86/asus-wmi.c | 55 +++---
> > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> > > .../platform/x86/inspur_platform_profile.c | 48 +++--
> > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> > > include/linux/platform_profile.h | 37 ++--
> > > 15 files changed, 495 insertions(+), 337 deletions(-)
> > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> > >
> > >
> > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> > > --
> > > 2.48.1
> >
> > For the series up to v4 commit 15/19:
> > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> >
> > I need to go over the last few commits just once more, as there a few
> > pieces I need to get my head around - and I'm not going to get it done
> > this evening. Hope it's OK to add review for the bits that I have done.
>
> I, for the first time ever, tested filter-branch and after some initial
> hickups on how to specify the commit range, got your Reviewed-bys added
> with single command :-).
Awesome! I believe commit 15/19
a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
is still missing a rev-by by Mark, if there is still time.
~ Kurt
>
> While at it, I also managed to catch one rev-by line without any
> name+email (I assume it was b4 messing something up).
>
> I'll soon want to merge fixes branch into for-next though, and after that
> adding any rev-bys will not be as easy as it was now.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-17 17:13 ` Kurt Borja
@ 2025-01-17 17:19 ` Ilpo Järvinen
2025-01-17 20:45 ` Mark Pearson
0 siblings, 1 reply; 37+ messages in thread
From: Ilpo Järvinen @ 2025-01-17 17:19 UTC (permalink / raw)
To: Kurt Borja
Cc: Mark Pearson, platform-driver-x86@vger.kernel.org,
Rafael J. Wysocki, Len Brown, linux-acpi@vger.kernel.org, LKML,
Limonciello, Mario, Armin Wolf, Joshua Grisham, Derek J . Clark,
Hans de Goede, Maximilian Luz, Lee Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D . Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Alexis Belmonte, Ai Chao,
Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
[-- Attachment #1: Type: text/plain, Size: 4368 bytes --]
On Fri, 17 Jan 2025, Kurt Borja wrote:
> On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
> > On Thu, 16 Jan 2025, Mark Pearson wrote:
> >
> > > Hi
> > >
> > > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> > > > Hi :)
> > > >
> > > > The merge window is about to open, so I rebased this patchset on top of
> > > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> > > > manage to squeeze this into v6.14.
> > > >
> > > > ~ Kurt
> > > > ---
> > > > v3 -> v4:
> > > >
> > > > [09/19]
> > > > - Replace error message with a user-friendly one
> > > >
> > > > v3:
> > > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> > > >
> > > > Kurt Borja (19):
> > > > ACPI: platform_profile: Replace *class_dev member with class_dev
> > > > ACPI: platform_profile: Let drivers set drvdata to the class device
> > > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> > > > ACPI: platform_profile: Add `ops` member to handlers
> > > > ACPI: platform_profile: Add `probe` to platform_profile_ops
> > > > platform/surface: surface_platform_profile: Use
> > > > devm_platform_profile_register()
> > > > platform/x86: acer-wmi: Use devm_platform_profile_register()
> > > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> > > > platform/x86: asus-wmi: Use devm_platform_profile_register()
> > > > platform/x86: dell-pc: Use devm_platform_profile_register()
> > > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> > > > platform/x86: hp-wmi: Use devm_platform_profile_register()
> > > > platform/x86: inspur_platform_profile: Use
> > > > devm_platform_profile_register()
> > > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> > > > ACPI: platform_profile: Remove platform_profile_handler from exported
> > > > symbols
> > > > ACPI: platform_profile: Move platform_profile_handler
> > > > ACPI: platform_profile: Clean platform_profile_handler
> > > > ACPI: platform_profile: Add documentation
> > > > ACPI: platform_profile: Add a prefix to log messages
> > > >
> > > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> > > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> > > > .../surface/surface_platform_profile.c | 48 ++---
> > > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> > > > drivers/platform/x86/amd/pmf/core.c | 1 -
> > > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> > > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> > > > drivers/platform/x86/asus-wmi.c | 55 +++---
> > > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> > > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> > > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> > > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> > > > .../platform/x86/inspur_platform_profile.c | 48 +++--
> > > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> > > > include/linux/platform_profile.h | 37 ++--
> > > > 15 files changed, 495 insertions(+), 337 deletions(-)
> > > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> > > >
> > > >
> > > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> > > > --
> > > > 2.48.1
> > >
> > > For the series up to v4 commit 15/19:
> > > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> > >
> > > I need to go over the last few commits just once more, as there a few
> > > pieces I need to get my head around - and I'm not going to get it done
> > > this evening. Hope it's OK to add review for the bits that I have done.
> >
> > I, for the first time ever, tested filter-branch and after some initial
> > hickups on how to specify the commit range, got your Reviewed-bys added
> > with single command :-).
>
> Awesome! I believe commit 15/19
>
> a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
>
> is still missing a rev-by by Mark, if there is still time.
Thanks for noticing this. I just recalled the patch numbering wrong.
It should be fixed now.
--
i.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-17 17:19 ` Ilpo Järvinen
@ 2025-01-17 20:45 ` Mark Pearson
2025-01-18 1:33 ` Mark Pearson
0 siblings, 1 reply; 37+ messages in thread
From: Mark Pearson @ 2025-01-17 20:45 UTC (permalink / raw)
To: Ilpo Järvinen, Kurt Borja
Cc: platform-driver-x86@vger.kernel.org, Rafael J. Wysocki, Len Brown,
linux-acpi@vger.kernel.org, LKML, Limonciello, Mario, Armin Wolf,
Joshua Grisham, Derek J . Clark, Hans de Goede, Maximilian Luz,
Lee Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D . Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
Hi,
On Fri, Jan 17, 2025, at 12:19 PM, Ilpo Järvinen wrote:
> On Fri, 17 Jan 2025, Kurt Borja wrote:
>
>> On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
>> > On Thu, 16 Jan 2025, Mark Pearson wrote:
>> >
>> > > Hi
>> > >
>> > > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
>> > > > Hi :)
>> > > >
>> > > > The merge window is about to open, so I rebased this patchset on top of
>> > > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
>> > > > manage to squeeze this into v6.14.
>> > > >
>> > > > ~ Kurt
>> > > > ---
>> > > > v3 -> v4:
>> > > >
>> > > > [09/19]
>> > > > - Replace error message with a user-friendly one
>> > > >
>> > > > v3:
>> > > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
>> > > >
>> > > > Kurt Borja (19):
>> > > > ACPI: platform_profile: Replace *class_dev member with class_dev
>> > > > ACPI: platform_profile: Let drivers set drvdata to the class device
>> > > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
>> > > > ACPI: platform_profile: Add `ops` member to handlers
>> > > > ACPI: platform_profile: Add `probe` to platform_profile_ops
>> > > > platform/surface: surface_platform_profile: Use
>> > > > devm_platform_profile_register()
>> > > > platform/x86: acer-wmi: Use devm_platform_profile_register()
>> > > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
>> > > > platform/x86: asus-wmi: Use devm_platform_profile_register()
>> > > > platform/x86: dell-pc: Use devm_platform_profile_register()
>> > > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
>> > > > platform/x86: hp-wmi: Use devm_platform_profile_register()
>> > > > platform/x86: inspur_platform_profile: Use
>> > > > devm_platform_profile_register()
>> > > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
>> > > > ACPI: platform_profile: Remove platform_profile_handler from exported
>> > > > symbols
>> > > > ACPI: platform_profile: Move platform_profile_handler
>> > > > ACPI: platform_profile: Clean platform_profile_handler
>> > > > ACPI: platform_profile: Add documentation
>> > > > ACPI: platform_profile: Add a prefix to log messages
>> > > >
>> > > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
>> > > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
>> > > > .../surface/surface_platform_profile.c | 48 ++---
>> > > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
>> > > > drivers/platform/x86/amd/pmf/core.c | 1 -
>> > > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
>> > > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
>> > > > drivers/platform/x86/asus-wmi.c | 55 +++---
>> > > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
>> > > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
>> > > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
>> > > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
>> > > > .../platform/x86/inspur_platform_profile.c | 48 +++--
>> > > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
>> > > > include/linux/platform_profile.h | 37 ++--
>> > > > 15 files changed, 495 insertions(+), 337 deletions(-)
>> > > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
>> > > >
>> > > >
>> > > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
>> > > > --
>> > > > 2.48.1
>> > >
>> > > For the series up to v4 commit 15/19:
>> > > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>> > >
>> > > I need to go over the last few commits just once more, as there a few
>> > > pieces I need to get my head around - and I'm not going to get it done
>> > > this evening. Hope it's OK to add review for the bits that I have done.
>> >
>> > I, for the first time ever, tested filter-branch and after some initial
>> > hickups on how to specify the commit range, got your Reviewed-bys added
>> > with single command :-).
>>
>> Awesome! I believe commit 15/19
>>
>> a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
>>
>> is still missing a rev-by by Mark, if there is still time.
>
> Thanks for noticing this. I just recalled the patch numbering wrong.
>
> It should be fixed now.
>
> --
> i.
I finished my review, and no concerns. For the series:
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Note - I'm building and will give it a sniff test too, but that will take a bit longer.
Thanks for your work on this Kurt
Mark
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-17 20:45 ` Mark Pearson
@ 2025-01-18 1:33 ` Mark Pearson
2025-01-18 7:16 ` Kurt Borja
2025-01-20 12:28 ` Ilpo Järvinen
0 siblings, 2 replies; 37+ messages in thread
From: Mark Pearson @ 2025-01-18 1:33 UTC (permalink / raw)
To: Ilpo Järvinen, Kurt Borja
Cc: platform-driver-x86@vger.kernel.org, Rafael J. Wysocki, Len Brown,
linux-acpi@vger.kernel.org, LKML, Limonciello, Mario, Armin Wolf,
Joshua Grisham, Derek J . Clark, Hans de Goede, Maximilian Luz,
Lee Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D . Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
On Fri, Jan 17, 2025, at 3:45 PM, Mark Pearson wrote:
> Hi,
>
> On Fri, Jan 17, 2025, at 12:19 PM, Ilpo Järvinen wrote:
>> On Fri, 17 Jan 2025, Kurt Borja wrote:
>>
>>> On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
>>> > On Thu, 16 Jan 2025, Mark Pearson wrote:
>>> >
>>> > > Hi
>>> > >
>>> > > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
>>> > > > Hi :)
>>> > > >
>>> > > > The merge window is about to open, so I rebased this patchset on top of
>>> > > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
>>> > > > manage to squeeze this into v6.14.
>>> > > >
>>> > > > ~ Kurt
>>> > > > ---
>>> > > > v3 -> v4:
>>> > > >
>>> > > > [09/19]
>>> > > > - Replace error message with a user-friendly one
>>> > > >
>>> > > > v3:
>>> > > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
>>> > > >
>>> > > > Kurt Borja (19):
>>> > > > ACPI: platform_profile: Replace *class_dev member with class_dev
>>> > > > ACPI: platform_profile: Let drivers set drvdata to the class device
>>> > > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
>>> > > > ACPI: platform_profile: Add `ops` member to handlers
>>> > > > ACPI: platform_profile: Add `probe` to platform_profile_ops
>>> > > > platform/surface: surface_platform_profile: Use
>>> > > > devm_platform_profile_register()
>>> > > > platform/x86: acer-wmi: Use devm_platform_profile_register()
>>> > > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
>>> > > > platform/x86: asus-wmi: Use devm_platform_profile_register()
>>> > > > platform/x86: dell-pc: Use devm_platform_profile_register()
>>> > > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
>>> > > > platform/x86: hp-wmi: Use devm_platform_profile_register()
>>> > > > platform/x86: inspur_platform_profile: Use
>>> > > > devm_platform_profile_register()
>>> > > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
>>> > > > ACPI: platform_profile: Remove platform_profile_handler from exported
>>> > > > symbols
>>> > > > ACPI: platform_profile: Move platform_profile_handler
>>> > > > ACPI: platform_profile: Clean platform_profile_handler
>>> > > > ACPI: platform_profile: Add documentation
>>> > > > ACPI: platform_profile: Add a prefix to log messages
>>> > > >
>>> > > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
>>> > > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
>>> > > > .../surface/surface_platform_profile.c | 48 ++---
>>> > > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
>>> > > > drivers/platform/x86/amd/pmf/core.c | 1 -
>>> > > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
>>> > > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
>>> > > > drivers/platform/x86/asus-wmi.c | 55 +++---
>>> > > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
>>> > > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
>>> > > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
>>> > > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
>>> > > > .../platform/x86/inspur_platform_profile.c | 48 +++--
>>> > > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
>>> > > > include/linux/platform_profile.h | 37 ++--
>>> > > > 15 files changed, 495 insertions(+), 337 deletions(-)
>>> > > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
>>> > > >
>>> > > >
>>> > > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
>>> > > > --
>>> > > > 2.48.1
>>> > >
>>> > > For the series up to v4 commit 15/19:
>>> > > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>>> > >
>>> > > I need to go over the last few commits just once more, as there a few
>>> > > pieces I need to get my head around - and I'm not going to get it done
>>> > > this evening. Hope it's OK to add review for the bits that I have done.
>>> >
>>> > I, for the first time ever, tested filter-branch and after some initial
>>> > hickups on how to specify the commit range, got your Reviewed-bys added
>>> > with single command :-).
>>>
>>> Awesome! I believe commit 15/19
>>>
>>> a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
>>>
>>> is still missing a rev-by by Mark, if there is still time.
>>
>> Thanks for noticing this. I just recalled the patch numbering wrong.
>>
>> It should be fixed now.
>>
>> --
>> i.
>
> I finished my review, and no concerns. For the series:
> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>
> Note - I'm building and will give it a sniff test too, but that will
> take a bit longer.
>
> Thanks for your work on this Kurt
>
Ran the series on an X1 Carbon G12 and profiles working well. Was able to check the new class and didn't find any issues.
For the series:
Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-18 1:33 ` Mark Pearson
@ 2025-01-18 7:16 ` Kurt Borja
2025-01-20 12:28 ` Ilpo Järvinen
1 sibling, 0 replies; 37+ messages in thread
From: Kurt Borja @ 2025-01-18 7:16 UTC (permalink / raw)
To: Mark Pearson, Ilpo Järvinen
Cc: platform-driver-x86@vger.kernel.org, Rafael J. Wysocki, Len Brown,
linux-acpi@vger.kernel.org, LKML, Limonciello, Mario, Armin Wolf,
Joshua Grisham, Derek J . Clark, Hans de Goede, Maximilian Luz,
Lee Chun-Yi, Shyam Sundar S K, Corentin Chary, Luke D . Jones,
Lyndon Sanche, Ike Panhc, Henrique de Moraes Holschuh,
Alexis Belmonte, Ai Chao, Gergo Koteles, Dell.Client.Kernel,
ibm-acpi-devel
On Fri Jan 17, 2025 at 8:33 PM -05, Mark Pearson wrote:
>
>
> On Fri, Jan 17, 2025, at 3:45 PM, Mark Pearson wrote:
> > Hi,
> >
> > On Fri, Jan 17, 2025, at 12:19 PM, Ilpo Järvinen wrote:
> >> On Fri, 17 Jan 2025, Kurt Borja wrote:
> >>
> >>> On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
> >>> > On Thu, 16 Jan 2025, Mark Pearson wrote:
> >>> >
> >>> > > Hi
> >>> > >
> >>> > > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> >>> > > > Hi :)
> >>> > > >
> >>> > > > The merge window is about to open, so I rebased this patchset on top of
> >>> > > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> >>> > > > manage to squeeze this into v6.14.
> >>> > > >
> >>> > > > ~ Kurt
> >>> > > > ---
> >>> > > > v3 -> v4:
> >>> > > >
> >>> > > > [09/19]
> >>> > > > - Replace error message with a user-friendly one
> >>> > > >
> >>> > > > v3:
> >>> > > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> >>> > > >
> >>> > > > Kurt Borja (19):
> >>> > > > ACPI: platform_profile: Replace *class_dev member with class_dev
> >>> > > > ACPI: platform_profile: Let drivers set drvdata to the class device
> >>> > > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> >>> > > > ACPI: platform_profile: Add `ops` member to handlers
> >>> > > > ACPI: platform_profile: Add `probe` to platform_profile_ops
> >>> > > > platform/surface: surface_platform_profile: Use
> >>> > > > devm_platform_profile_register()
> >>> > > > platform/x86: acer-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> >>> > > > platform/x86: asus-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: dell-pc: Use devm_platform_profile_register()
> >>> > > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> >>> > > > platform/x86: hp-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: inspur_platform_profile: Use
> >>> > > > devm_platform_profile_register()
> >>> > > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> >>> > > > ACPI: platform_profile: Remove platform_profile_handler from exported
> >>> > > > symbols
> >>> > > > ACPI: platform_profile: Move platform_profile_handler
> >>> > > > ACPI: platform_profile: Clean platform_profile_handler
> >>> > > > ACPI: platform_profile: Add documentation
> >>> > > > ACPI: platform_profile: Add a prefix to log messages
> >>> > > >
> >>> > > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> >>> > > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> >>> > > > .../surface/surface_platform_profile.c | 48 ++---
> >>> > > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> >>> > > > drivers/platform/x86/amd/pmf/core.c | 1 -
> >>> > > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> >>> > > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> >>> > > > drivers/platform/x86/asus-wmi.c | 55 +++---
> >>> > > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> >>> > > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> >>> > > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> >>> > > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> >>> > > > .../platform/x86/inspur_platform_profile.c | 48 +++--
> >>> > > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> >>> > > > include/linux/platform_profile.h | 37 ++--
> >>> > > > 15 files changed, 495 insertions(+), 337 deletions(-)
> >>> > > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> >>> > > >
> >>> > > >
> >>> > > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> >>> > > > --
> >>> > > > 2.48.1
> >>> > >
> >>> > > For the series up to v4 commit 15/19:
> >>> > > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> >>> > >
> >>> > > I need to go over the last few commits just once more, as there a few
> >>> > > pieces I need to get my head around - and I'm not going to get it done
> >>> > > this evening. Hope it's OK to add review for the bits that I have done.
> >>> >
> >>> > I, for the first time ever, tested filter-branch and after some initial
> >>> > hickups on how to specify the commit range, got your Reviewed-bys added
> >>> > with single command :-).
> >>>
> >>> Awesome! I believe commit 15/19
> >>>
> >>> a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
> >>>
> >>> is still missing a rev-by by Mark, if there is still time.
> >>
> >> Thanks for noticing this. I just recalled the patch numbering wrong.
> >>
> >> It should be fixed now.
> >>
> >> --
> >> i.
> >
> > I finished my review, and no concerns. For the series:
> > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> >
> > Note - I'm building and will give it a sniff test too, but that will
> > take a bit longer.
> >
> > Thanks for your work on this Kurt
> >
> Ran the series on an X1 Carbon G12 and profiles working well. Was able to check the new class and didn't find any issues.
> For the series:
> Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Thank you so much for testing this too! This gives me a lot of peace of
mind :)
~ Kurt
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device
2025-01-16 0:27 ` [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device Kurt Borja
@ 2025-01-19 14:55 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 14:55 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> Add *drvdata to platform_profile_register() signature and assign it to
> the class device.
>
> While at it, pass specific driver state as drvdata to replace uses of
> container_of() with dev_get_drvdata().
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 7 ++++---
> drivers/platform/surface/surface_platform_profile.c | 6 +++---
> drivers/platform/x86/acer-wmi.c | 2 +-
> drivers/platform/x86/amd/pmf/sps.c | 6 +++---
> drivers/platform/x86/asus-wmi.c | 6 +++---
> drivers/platform/x86/dell/alienware-wmi.c | 2 +-
> drivers/platform/x86/dell/dell-pc.c | 2 +-
> drivers/platform/x86/hp/hp-wmi.c | 2 +-
> drivers/platform/x86/ideapad-laptop.c | 6 +++---
> drivers/platform/x86/inspur_platform_profile.c | 8 +++-----
> drivers/platform/x86/thinkpad_acpi.c | 2 +-
> include/linux/platform_profile.h | 4 ++--
> 12 files changed, 26 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index 15f24adc57d4..689541d2e66c 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -460,7 +460,7 @@ int platform_profile_cycle(void)
> }
> EXPORT_SYMBOL_GPL(platform_profile_cycle);
>
> -int platform_profile_register(struct platform_profile_handler *pprof)
> +int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
> {
> int err;
>
> @@ -480,6 +480,7 @@ int platform_profile_register(struct platform_profile_handler *pprof)
>
> pprof->class_dev.class = &platform_profile_class;
> pprof->class_dev.parent = pprof->dev;
> + dev_set_drvdata(&pprof->class_dev, drvdata);
> dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
> err = device_register(&pprof->class_dev);
> if (err) {
> @@ -529,7 +530,7 @@ static void devm_platform_profile_release(struct device *dev, void *res)
> platform_profile_remove(*pprof);
> }
>
> -int devm_platform_profile_register(struct platform_profile_handler *pprof)
> +int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
> {
> struct platform_profile_handler **dr;
> int ret;
> @@ -538,7 +539,7 @@ int devm_platform_profile_register(struct platform_profile_handler *pprof)
> if (!dr)
> return -ENOMEM;
>
> - ret = platform_profile_register(pprof);
> + ret = platform_profile_register(pprof, drvdata);
> if (ret) {
> devres_free(dr);
> return ret;
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index 6c87e982bfc8..edb9362003a4 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -161,7 +161,7 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
> enum ssam_tmp_profile tp;
> int status;
>
> - tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
> + tpd = dev_get_drvdata(&pprof->class_dev);
>
> status = ssam_tmp_profile_get(tpd->sdev, &tp);
> if (status)
> @@ -181,7 +181,7 @@ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
> struct ssam_platform_profile_device *tpd;
> int tp;
>
> - tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
> + tpd = dev_get_drvdata(&pprof->class_dev);
>
> tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
> if (tp < 0)
> @@ -224,7 +224,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
> set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
> set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
>
> - return platform_profile_register(&tpd->handler);
> + return platform_profile_register(&tpd->handler, tpd);
> }
>
> static void surface_platform_profile_remove(struct ssam_device *sdev)
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index acf610d59168..1aedf0ef4189 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -2073,7 +2073,7 @@ static int acer_platform_profile_setup(struct platform_device *device)
> ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
> }
>
> - err = platform_profile_register(&platform_profile_handler);
> + err = platform_profile_register(&platform_profile_handler, NULL);
> if (err)
> return err;
>
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index bd2bd6cfc39a..259a598acd3e 100644
> --- a/drivers/platform/x86/amd/pmf/sps.c
> +++ b/drivers/platform/x86/amd/pmf/sps.c
> @@ -285,7 +285,7 @@ bool is_pprof_balanced(struct amd_pmf_dev *pmf)
> static int amd_pmf_profile_get(struct platform_profile_handler *pprof,
> enum platform_profile_option *profile)
> {
> - struct amd_pmf_dev *pmf = container_of(pprof, struct amd_pmf_dev, pprof);
> + struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
>
> *profile = pmf->current_profile;
> return 0;
> @@ -366,7 +366,7 @@ int amd_pmf_power_slider_update_event(struct amd_pmf_dev *dev)
> static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
> enum platform_profile_option profile)
> {
> - struct amd_pmf_dev *pmf = container_of(pprof, struct amd_pmf_dev, pprof);
> + struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
> int ret = 0;
>
> pmf->current_profile = profile;
> @@ -416,7 +416,7 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
> set_bit(PLATFORM_PROFILE_PERFORMANCE, dev->pprof.choices);
>
> /* Create platform_profile structure and register */
> - err = platform_profile_register(&dev->pprof);
> + err = platform_profile_register(&dev->pprof, dev);
> if (err)
> dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %d\n",
> err);
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 6c674de60ec0..f91099792cb9 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -3806,7 +3806,7 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
> struct asus_wmi *asus;
> int tp;
>
> - asus = container_of(pprof, struct asus_wmi, platform_profile_handler);
> + asus = dev_get_drvdata(&pprof->class_dev);
> tp = asus->throttle_thermal_policy_mode;
>
> switch (tp) {
> @@ -3832,7 +3832,7 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
> struct asus_wmi *asus;
> int tp;
>
> - asus = container_of(pprof, struct asus_wmi, platform_profile_handler);
> + asus = dev_get_drvdata(&pprof->class_dev);
>
> switch (profile) {
> case PLATFORM_PROFILE_PERFORMANCE:
> @@ -3887,7 +3887,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
> set_bit(PLATFORM_PROFILE_PERFORMANCE,
> asus->platform_profile_handler.choices);
>
> - err = platform_profile_register(&asus->platform_profile_handler);
> + err = platform_profile_register(&asus->platform_profile_handler, asus);
> if (err == -EEXIST) {
> pr_warn("%s, a platform_profile handler is already registered\n", __func__);
> return 0;
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index d7f577e0d146..154c417a438c 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -1129,7 +1129,7 @@ static int create_thermal_profile(struct platform_device *platform_device)
> pp_handler.name = "alienware-wmi";
> pp_handler.dev = &platform_device->dev;
>
> - return devm_platform_profile_register(&pp_handler);
> + return devm_platform_profile_register(&pp_handler, NULL);
> }
>
> /*
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index 3797a5721dbd..1a0a721d706f 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -271,7 +271,7 @@ static int thermal_init(void)
> set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices);
>
> /* Clean up if failed */
> - ret = platform_profile_register(thermal_handler);
> + ret = platform_profile_register(thermal_handler, NULL);
> if (ret)
> goto cleanup_thermal_handler;
>
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 6d6e13a0c6e2..8e5e1422e024 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -1629,7 +1629,7 @@ static int thermal_profile_setup(struct platform_device *device)
> set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
> set_bit(PLATFORM_PROFILE_PERFORMANCE, platform_profile_handler.choices);
>
> - err = platform_profile_register(&platform_profile_handler);
> + err = platform_profile_register(&platform_profile_handler, NULL);
> if (err)
> return err;
>
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index dc98f862a06d..ed0d880a07a9 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -936,7 +936,7 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
> static int dytc_profile_get(struct platform_profile_handler *pprof,
> enum platform_profile_option *profile)
> {
> - struct ideapad_dytc_priv *dytc = container_of(pprof, struct ideapad_dytc_priv, pprof);
> + struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
>
> *profile = dytc->current_profile;
> return 0;
> @@ -989,7 +989,7 @@ static int dytc_cql_command(struct ideapad_private *priv, unsigned long cmd,
> static int dytc_profile_set(struct platform_profile_handler *pprof,
> enum platform_profile_option profile)
> {
> - struct ideapad_dytc_priv *dytc = container_of(pprof, struct ideapad_dytc_priv, pprof);
> + struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
> struct ideapad_private *priv = dytc->priv;
> unsigned long output;
> int err;
> @@ -1114,7 +1114,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
> set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->dytc->pprof.choices);
>
> /* Create platform_profile structure and register */
> - err = platform_profile_register(&priv->dytc->pprof);
> + err = platform_profile_register(&priv->dytc->pprof, &priv->dytc);
> if (err)
> goto pp_reg_failed;
>
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index 53af73a7fbf7..471fca50d1c9 100644
> --- a/drivers/platform/x86/inspur_platform_profile.c
> +++ b/drivers/platform/x86/inspur_platform_profile.c
> @@ -87,8 +87,7 @@ static int inspur_wmi_perform_query(struct wmi_device *wdev,
> static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
> enum platform_profile_option profile)
> {
> - struct inspur_wmi_priv *priv = container_of(pprof, struct inspur_wmi_priv,
> - handler);
> + struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
> u8 ret_code[4] = {0, 0, 0, 0};
> int ret;
>
> @@ -135,8 +134,7 @@ static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
> static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
> enum platform_profile_option *profile)
> {
> - struct inspur_wmi_priv *priv = container_of(pprof, struct inspur_wmi_priv,
> - handler);
> + struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
> u8 ret_code[4] = {0, 0, 0, 0};
> int ret;
>
> @@ -186,7 +184,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
> set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
> set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->handler.choices);
>
> - return platform_profile_register(&priv->handler);
> + return platform_profile_register(&priv->handler, priv);
> }
>
> static void inspur_wmi_remove(struct wmi_device *wdev)
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index d99573e7a983..8be3f4e5366d 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10641,7 +10641,7 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
>
> dytc_profile.dev = &tpacpi_pdev->dev;
> /* Create platform_profile structure and register */
> - err = platform_profile_register(&dytc_profile);
> + err = platform_profile_register(&dytc_profile, NULL);
> /*
> * If for some reason platform_profiles aren't enabled
> * don't quit terminally.
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 8a9b8754f9ac..1c8fdda51eaa 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -40,9 +40,9 @@ struct platform_profile_handler {
> enum platform_profile_option profile);
> };
>
> -int platform_profile_register(struct platform_profile_handler *pprof);
> +int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
> int platform_profile_remove(struct platform_profile_handler *pprof);
> -int devm_platform_profile_register(struct platform_profile_handler *pprof);
> +int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
> int platform_profile_cycle(void);
> void platform_profile_notify(struct platform_profile_handler *pprof);
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks
2025-01-16 0:27 ` [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks Kurt Borja
@ 2025-01-19 14:57 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 14:57 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> Devices can now set drvdata to the class device, thus passing the
> platform_profile_handler to callbacks is unnecessary. Instead pass the
> class device.
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 4 ++--
> .../platform/surface/surface_platform_profile.c | 8 ++++----
> drivers/platform/x86/acer-wmi.c | 4 ++--
> drivers/platform/x86/amd/pmf/sps.c | 8 ++++----
> drivers/platform/x86/asus-wmi.c | 8 ++++----
> drivers/platform/x86/dell/alienware-wmi.c | 4 ++--
> drivers/platform/x86/dell/dell-pc.c | 4 ++--
> drivers/platform/x86/hp/hp-wmi.c | 14 +++++++-------
> drivers/platform/x86/ideapad-laptop.c | 8 ++++----
> drivers/platform/x86/inspur_platform_profile.c | 8 ++++----
> drivers/platform/x86/thinkpad_acpi.c | 4 ++--
> include/linux/platform_profile.h | 6 ++----
> 12 files changed, 39 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index 689541d2e66c..bd90aa4e8371 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -65,7 +65,7 @@ static int _store_class_profile(struct device *dev, void *data)
> if (!test_bit(*bit, handler->choices))
> return -EOPNOTSUPP;
>
> - return handler->profile_set(handler, *bit);
> + return handler->profile_set(dev, *bit);
> }
>
> /**
> @@ -102,7 +102,7 @@ static int get_class_profile(struct device *dev,
>
> lockdep_assert_held(&profile_lock);
> handler = to_pprof_handler(dev);
> - err = handler->profile_get(handler, &val);
> + err = handler->profile_get(dev, &val);
> if (err) {
> pr_err("Failed to get profile for handler %s\n", handler->name);
> return err;
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index edb9362003a4..26c1230e75df 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -154,14 +154,14 @@ static int convert_profile_to_ssam_fan(struct ssam_device *sdev, enum platform_p
> }
> }
>
> -static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
> +static int ssam_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> struct ssam_platform_profile_device *tpd;
> enum ssam_tmp_profile tp;
> int status;
>
> - tpd = dev_get_drvdata(&pprof->class_dev);
> + tpd = dev_get_drvdata(dev);
>
> status = ssam_tmp_profile_get(tpd->sdev, &tp);
> if (status)
> @@ -175,13 +175,13 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
> +static int ssam_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> struct ssam_platform_profile_device *tpd;
> int tp;
>
> - tpd = dev_get_drvdata(&pprof->class_dev);
> + tpd = dev_get_drvdata(dev);
>
> tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
> if (tp < 0)
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 1aedf0ef4189..c68c0d744a69 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -1950,7 +1950,7 @@ static int acer_toggle_turbo(void)
> }
>
> static int
> -acer_predator_v4_platform_profile_get(struct platform_profile_handler *pprof,
> +acer_predator_v4_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> u8 tp;
> @@ -1984,7 +1984,7 @@ acer_predator_v4_platform_profile_get(struct platform_profile_handler *pprof,
> }
>
> static int
> -acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
> +acer_predator_v4_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> int err, tp;
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index 259a598acd3e..cf2e51f67787 100644
> --- a/drivers/platform/x86/amd/pmf/sps.c
> +++ b/drivers/platform/x86/amd/pmf/sps.c
> @@ -282,10 +282,10 @@ bool is_pprof_balanced(struct amd_pmf_dev *pmf)
> return (pmf->current_profile == PLATFORM_PROFILE_BALANCED) ? true : false;
> }
>
> -static int amd_pmf_profile_get(struct platform_profile_handler *pprof,
> +static int amd_pmf_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> - struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
> + struct amd_pmf_dev *pmf = dev_get_drvdata(dev);
>
> *profile = pmf->current_profile;
> return 0;
> @@ -363,10 +363,10 @@ int amd_pmf_power_slider_update_event(struct amd_pmf_dev *dev)
> return 0;
> }
>
> -static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
> +static int amd_pmf_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> - struct amd_pmf_dev *pmf = dev_get_drvdata(&pprof->class_dev);
> + struct amd_pmf_dev *pmf = dev_get_drvdata(dev);
> int ret = 0;
>
> pmf->current_profile = profile;
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index f91099792cb9..6b8b30551d36 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -3800,13 +3800,13 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
> static DEVICE_ATTR_RW(throttle_thermal_policy);
>
> /* Platform profile ***********************************************************/
> -static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
> +static int asus_wmi_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> struct asus_wmi *asus;
> int tp;
>
> - asus = dev_get_drvdata(&pprof->class_dev);
> + asus = dev_get_drvdata(dev);
> tp = asus->throttle_thermal_policy_mode;
>
> switch (tp) {
> @@ -3826,13 +3826,13 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
> +static int asus_wmi_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> struct asus_wmi *asus;
> int tp;
>
> - asus = dev_get_drvdata(&pprof->class_dev);
> + asus = dev_get_drvdata(dev);
>
> switch (profile) {
> case PLATFORM_PROFILE_PERFORMANCE:
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index 154c417a438c..0346f8e88bf8 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -1026,7 +1026,7 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data)
> return 0;
> }
>
> -static int thermal_profile_get(struct platform_profile_handler *pprof,
> +static int thermal_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> u32 out_data;
> @@ -1052,7 +1052,7 @@ static int thermal_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int thermal_profile_set(struct platform_profile_handler *pprof,
> +static int thermal_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> if (quirks->gmode) {
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index 1a0a721d706f..c86b05b5a1cb 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -185,7 +185,7 @@ static int thermal_set_mode(enum thermal_mode_bits state)
> return dell_send_request(&buffer, CLASS_INFO, SELECT_THERMAL_MANAGEMENT);
> }
>
> -static int thermal_platform_profile_set(struct platform_profile_handler *pprof,
> +static int thermal_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> switch (profile) {
> @@ -202,7 +202,7 @@ static int thermal_platform_profile_set(struct platform_profile_handler *pprof,
> }
> }
>
> -static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
> +static int thermal_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> int ret;
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 8e5e1422e024..b8e62dc9cecd 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -1221,7 +1221,7 @@ static int platform_profile_omen_get_ec(enum platform_profile_option *profile)
> return 0;
> }
>
> -static int platform_profile_omen_get(struct platform_profile_handler *pprof,
> +static int platform_profile_omen_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> /*
> @@ -1318,7 +1318,7 @@ static int platform_profile_omen_set_ec(enum platform_profile_option profile)
> return 0;
> }
>
> -static int platform_profile_omen_set(struct platform_profile_handler *pprof,
> +static int platform_profile_omen_set(struct device *dev,
> enum platform_profile_option profile)
> {
> int err;
> @@ -1345,7 +1345,7 @@ static int thermal_profile_set(int thermal_profile)
> sizeof(thermal_profile), 0);
> }
>
> -static int hp_wmi_platform_profile_get(struct platform_profile_handler *pprof,
> +static int hp_wmi_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> int tp;
> @@ -1374,7 +1374,7 @@ static int hp_wmi_platform_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int hp_wmi_platform_profile_set(struct platform_profile_handler *pprof,
> +static int hp_wmi_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> int err, tp;
> @@ -1440,11 +1440,11 @@ static int platform_profile_victus_get_ec(enum platform_profile_option *profile)
> return 0;
> }
>
> -static int platform_profile_victus_get(struct platform_profile_handler *pprof,
> +static int platform_profile_victus_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> /* Same behaviour as platform_profile_omen_get */
> - return platform_profile_omen_get(pprof, profile);
> + return platform_profile_omen_get(dev, profile);
> }
>
> static int platform_profile_victus_set_ec(enum platform_profile_option profile)
> @@ -1472,7 +1472,7 @@ static int platform_profile_victus_set_ec(enum platform_profile_option profile)
> return 0;
> }
>
> -static int platform_profile_victus_set(struct platform_profile_handler *pprof,
> +static int platform_profile_victus_set(struct device *dev,
> enum platform_profile_option profile)
> {
> int err;
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index ed0d880a07a9..fc317f42bb82 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -933,10 +933,10 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
> * dytc_profile_get: Function to register with platform_profile
> * handler. Returns current platform profile.
> */
> -static int dytc_profile_get(struct platform_profile_handler *pprof,
> +static int dytc_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> - struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
> + struct ideapad_dytc_priv *dytc = dev_get_drvdata(dev);
>
> *profile = dytc->current_profile;
> return 0;
> @@ -986,10 +986,10 @@ static int dytc_cql_command(struct ideapad_private *priv, unsigned long cmd,
> * dytc_profile_set: Function to register with platform_profile
> * handler. Sets current platform profile.
> */
> -static int dytc_profile_set(struct platform_profile_handler *pprof,
> +static int dytc_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> - struct ideapad_dytc_priv *dytc = dev_get_drvdata(&pprof->class_dev);
> + struct ideapad_dytc_priv *dytc = dev_get_drvdata(dev);
> struct ideapad_private *priv = dytc->priv;
> unsigned long output;
> int err;
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index 471fca50d1c9..47d2dbbf3392 100644
> --- a/drivers/platform/x86/inspur_platform_profile.c
> +++ b/drivers/platform/x86/inspur_platform_profile.c
> @@ -84,10 +84,10 @@ static int inspur_wmi_perform_query(struct wmi_device *wdev,
> * 0x0: No Error
> * 0x1: Error
> */
> -static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
> +static int inspur_platform_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> - struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
> + struct inspur_wmi_priv *priv = dev_get_drvdata(dev);
> u8 ret_code[4] = {0, 0, 0, 0};
> int ret;
>
> @@ -131,10 +131,10 @@ static int inspur_platform_profile_set(struct platform_profile_handler *pprof,
> * 0x1: Performance Mode
> * 0x2: Power Saver Mode
> */
> -static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
> +static int inspur_platform_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> - struct inspur_wmi_priv *priv = dev_get_drvdata(&pprof->class_dev);
> + struct inspur_wmi_priv *priv = dev_get_drvdata(dev);
> u8 ret_code[4] = {0, 0, 0, 0};
> int ret;
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 8be3f4e5366d..0abe22228fdb 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10415,7 +10415,7 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe
> * dytc_profile_get: Function to register with platform_profile
> * handler. Returns current platform profile.
> */
> -static int dytc_profile_get(struct platform_profile_handler *pprof,
> +static int dytc_profile_get(struct device *dev,
> enum platform_profile_option *profile)
> {
> *profile = dytc_current_profile;
> @@ -10490,7 +10490,7 @@ static int dytc_cql_command(int command, int *output)
> * dytc_profile_set: Function to register with platform_profile
> * handler. Sets current platform profile.
> */
> -static int dytc_profile_set(struct platform_profile_handler *pprof,
> +static int dytc_profile_set(struct device *dev,
> enum platform_profile_option profile)
> {
> int perfmode;
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 1c8fdda51eaa..5296d886c243 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -34,10 +34,8 @@ struct platform_profile_handler {
> struct device class_dev;
> int minor;
> unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
> - int (*profile_get)(struct platform_profile_handler *pprof,
> - enum platform_profile_option *profile);
> - int (*profile_set)(struct platform_profile_handler *pprof,
> - enum platform_profile_option profile);
> + int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
> + int (*profile_set)(struct device *dev, enum platform_profile_option profile);
> };
>
> int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers
2025-01-16 0:27 ` [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers Kurt Borja
@ 2025-01-19 14:58 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 14:58 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> Replace *profile_get and *profile_set members with a general *ops
> member.
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 6 ++---
> .../surface/surface_platform_profile.c | 8 +++++--
> drivers/platform/x86/acer-wmi.c | 11 +++++----
> drivers/platform/x86/amd/pmf/sps.c | 8 +++++--
> drivers/platform/x86/asus-wmi.c | 8 +++++--
> drivers/platform/x86/dell/alienware-wmi.c | 8 +++++--
> drivers/platform/x86/dell/dell-pc.c | 8 +++++--
> drivers/platform/x86/hp/hp-wmi.c | 24 ++++++++++++++-----
> drivers/platform/x86/ideapad-laptop.c | 8 +++++--
> .../platform/x86/inspur_platform_profile.c | 8 +++++--
> drivers/platform/x86/thinkpad_acpi.c | 8 +++++--
> include/linux/platform_profile.h | 10 ++++++--
> 12 files changed, 84 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index bd90aa4e8371..161a05d57b0f 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -65,7 +65,7 @@ static int _store_class_profile(struct device *dev, void *data)
> if (!test_bit(*bit, handler->choices))
> return -EOPNOTSUPP;
>
> - return handler->profile_set(dev, *bit);
> + return handler->ops->profile_set(dev, *bit);
> }
>
> /**
> @@ -102,7 +102,7 @@ static int get_class_profile(struct device *dev,
>
> lockdep_assert_held(&profile_lock);
> handler = to_pprof_handler(dev);
> - err = handler->profile_get(dev, &val);
> + err = handler->ops->profile_get(dev, &val);
> if (err) {
> pr_err("Failed to get profile for handler %s\n", handler->name);
> return err;
> @@ -466,7 +466,7 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
>
> /* Sanity check the profile handler */
> if (!pprof || bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST) ||
> - !pprof->profile_set || !pprof->profile_get) {
> + !pprof->ops->profile_set || !pprof->ops->profile_get) {
> pr_err("platform_profile: handler is invalid\n");
> return -EINVAL;
> }
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index 26c1230e75df..76967bfeeef8 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -201,6 +201,11 @@ static int ssam_platform_profile_set(struct device *dev,
> return tp;
> }
>
> +static const struct platform_profile_ops ssam_platform_profile_ops = {
> + .profile_get = ssam_platform_profile_get,
> + .profile_set = ssam_platform_profile_set,
> +};
> +
> static int surface_platform_profile_probe(struct ssam_device *sdev)
> {
> struct ssam_platform_profile_device *tpd;
> @@ -214,8 +219,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
>
> tpd->handler.name = "Surface Platform Profile";
> tpd->handler.dev = &sdev->dev;
> - tpd->handler.profile_get = ssam_platform_profile_get;
> - tpd->handler.profile_set = ssam_platform_profile_set;
> + tpd->handler.ops = &ssam_platform_profile_ops;
>
> tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
>
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index c68c0d744a69..63e6bd1fe339 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -2019,6 +2019,11 @@ acer_predator_v4_platform_profile_set(struct device *dev,
> return 0;
> }
>
> +static const struct platform_profile_ops acer_predator_v4_platform_profile_ops = {
> + .profile_get = acer_predator_v4_platform_profile_get,
> + .profile_set = acer_predator_v4_platform_profile_set,
> +};
> +
> static int acer_platform_profile_setup(struct platform_device *device)
> {
> if (quirks->predator_v4) {
> @@ -2027,10 +2032,8 @@ static int acer_platform_profile_setup(struct platform_device *device)
>
> platform_profile_handler.name = "acer-wmi";
> platform_profile_handler.dev = &device->dev;
> - platform_profile_handler.profile_get =
> - acer_predator_v4_platform_profile_get;
> - platform_profile_handler.profile_set =
> - acer_predator_v4_platform_profile_set;
> + platform_profile_handler.ops =
> + &acer_predator_v4_platform_profile_ops;
>
> err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
> (u8 *)&supported_profiles);
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index cf2e51f67787..6ae82ae86d22 100644
> --- a/drivers/platform/x86/amd/pmf/sps.c
> +++ b/drivers/platform/x86/amd/pmf/sps.c
> @@ -387,6 +387,11 @@ static int amd_pmf_profile_set(struct device *dev,
> return 0;
> }
>
> +static const struct platform_profile_ops amd_pmf_profile_ops = {
> + .profile_get = amd_pmf_profile_get,
> + .profile_set = amd_pmf_profile_set,
> +};
> +
> int amd_pmf_init_sps(struct amd_pmf_dev *dev)
> {
> int err;
> @@ -407,8 +412,7 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
>
> dev->pprof.name = "amd-pmf";
> dev->pprof.dev = dev->dev;
> - dev->pprof.profile_get = amd_pmf_profile_get;
> - dev->pprof.profile_set = amd_pmf_profile_set;
> + dev->pprof.ops = &amd_pmf_profile_ops;
>
> /* Setup supported modes */
> set_bit(PLATFORM_PROFILE_LOW_POWER, dev->pprof.choices);
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 6b8b30551d36..992956c89d38 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -3852,6 +3852,11 @@ static int asus_wmi_platform_profile_set(struct device *dev,
> return throttle_thermal_policy_write(asus);
> }
>
> +static const struct platform_profile_ops asus_wmi_platform_profile_ops = {
> + .profile_get = asus_wmi_platform_profile_get,
> + .profile_set = asus_wmi_platform_profile_set,
> +};
> +
> static int platform_profile_setup(struct asus_wmi *asus)
> {
> struct device *dev = &asus->platform_device->dev;
> @@ -3878,8 +3883,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
>
> asus->platform_profile_handler.name = "asus-wmi";
> asus->platform_profile_handler.dev = dev;
> - asus->platform_profile_handler.profile_get = asus_wmi_platform_profile_get;
> - asus->platform_profile_handler.profile_set = asus_wmi_platform_profile_set;
> + asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
>
> set_bit(PLATFORM_PROFILE_QUIET, asus->platform_profile_handler.choices);
> set_bit(PLATFORM_PROFILE_BALANCED,
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index 0346f8e88bf8..b8359b177a0f 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -1078,6 +1078,11 @@ static int thermal_profile_set(struct device *dev,
> return wmax_thermal_control(supported_thermal_profiles[profile]);
> }
>
> +static const struct platform_profile_ops awcc_platform_profile_ops = {
> + .profile_get = thermal_profile_get,
> + .profile_set = thermal_profile_set,
> +};
> +
> static int create_thermal_profile(struct platform_device *platform_device)
> {
> enum platform_profile_option profile;
> @@ -1124,10 +1129,9 @@ static int create_thermal_profile(struct platform_device *platform_device)
> set_bit(PLATFORM_PROFILE_PERFORMANCE, pp_handler.choices);
> }
>
> - pp_handler.profile_get = thermal_profile_get;
> - pp_handler.profile_set = thermal_profile_set;
> pp_handler.name = "alienware-wmi";
> pp_handler.dev = &platform_device->dev;
> + pp_handler.ops = &awcc_platform_profile_ops;
>
> return devm_platform_profile_register(&pp_handler, NULL);
> }
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index c86b05b5a1cb..9010a231f209 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -231,6 +231,11 @@ static int thermal_platform_profile_get(struct device *dev,
> return 0;
> }
>
> +static const struct platform_profile_ops dell_pc_platform_profile_ops = {
> + .profile_get = thermal_platform_profile_get,
> + .profile_set = thermal_platform_profile_set,
> +};
> +
> static int thermal_init(void)
> {
> int ret;
> @@ -258,8 +263,7 @@ static int thermal_init(void)
> }
> thermal_handler->name = "dell-pc";
> thermal_handler->dev = &platform_device->dev;
> - thermal_handler->profile_get = thermal_platform_profile_get;
> - thermal_handler->profile_set = thermal_platform_profile_set;
> + thermal_handler->ops = &dell_pc_platform_profile_ops;
>
> if (supported_modes & DELL_QUIET)
> set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices);
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index b8e62dc9cecd..60328b35be74 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -1565,6 +1565,21 @@ static inline void omen_unregister_powersource_event_handler(void)
> unregister_acpi_notifier(&platform_power_source_nb);
> }
>
> +static const struct platform_profile_ops platform_profile_omen_ops = {
> + .profile_get = platform_profile_omen_get,
> + .profile_set = platform_profile_omen_set,
> +};
> +
> +static const struct platform_profile_ops platform_profile_victus_ops = {
> + .profile_get = platform_profile_victus_get,
> + .profile_set = platform_profile_victus_set,
> +};
> +
> +static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
> + .profile_get = hp_wmi_platform_profile_get,
> + .profile_set = hp_wmi_platform_profile_set,
> +};
> +
> static int thermal_profile_setup(struct platform_device *device)
> {
> int err, tp;
> @@ -1582,8 +1597,7 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err < 0)
> return err;
>
> - platform_profile_handler.profile_get = platform_profile_omen_get;
> - platform_profile_handler.profile_set = platform_profile_omen_set;
> + platform_profile_handler.ops = &platform_profile_omen_ops;
>
> set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
> } else if (is_victus_thermal_profile()) {
> @@ -1599,8 +1613,7 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err < 0)
> return err;
>
> - platform_profile_handler.profile_get = platform_profile_victus_get;
> - platform_profile_handler.profile_set = platform_profile_victus_set;
> + platform_profile_handler.ops = &platform_profile_victus_ops;
>
> set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
> } else {
> @@ -1617,8 +1630,7 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err)
> return err;
>
> - platform_profile_handler.profile_get = hp_wmi_platform_profile_get;
> - platform_profile_handler.profile_set = hp_wmi_platform_profile_set;
> + platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
>
> set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
> set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index fc317f42bb82..96e99513b0b5 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -1063,6 +1063,11 @@ static const struct dmi_system_id ideapad_dytc_v4_allow_table[] = {
> {}
> };
>
> +static const struct platform_profile_ops dytc_profile_ops = {
> + .profile_get = dytc_profile_get,
> + .profile_set = dytc_profile_set,
> +};
> +
> static int ideapad_dytc_profile_init(struct ideapad_private *priv)
> {
> int err, dytc_version;
> @@ -1105,8 +1110,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
> priv->dytc->pprof.name = "ideapad-laptop";
> priv->dytc->pprof.dev = &priv->platform_device->dev;
> priv->dytc->priv = priv;
> - priv->dytc->pprof.profile_get = dytc_profile_get;
> - priv->dytc->pprof.profile_set = dytc_profile_set;
> + priv->dytc->pprof.ops = &dytc_profile_ops;
>
> /* Setup supported modes */
> set_bit(PLATFORM_PROFILE_LOW_POWER, priv->dytc->pprof.choices);
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index 47d2dbbf3392..d0a8e4eebffa 100644
> --- a/drivers/platform/x86/inspur_platform_profile.c
> +++ b/drivers/platform/x86/inspur_platform_profile.c
> @@ -164,6 +164,11 @@ static int inspur_platform_profile_get(struct device *dev,
> return 0;
> }
>
> +static const struct platform_profile_ops inspur_platform_profile_ops = {
> + .profile_get = inspur_platform_profile_get,
> + .profile_set = inspur_platform_profile_set,
> +};
> +
> static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
> {
> struct inspur_wmi_priv *priv;
> @@ -177,8 +182,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
>
> priv->handler.name = "inspur-wmi";
> priv->handler.dev = &wdev->dev;
> - priv->handler.profile_get = inspur_platform_profile_get;
> - priv->handler.profile_set = inspur_platform_profile_set;
> + priv->handler.ops = &inspur_platform_profile_ops;
>
> set_bit(PLATFORM_PROFILE_LOW_POWER, priv->handler.choices);
> set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 0abe22228fdb..9e26f5670fc7 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10539,12 +10539,16 @@ static int dytc_profile_set(struct device *dev,
> return err;
> }
>
> -static struct platform_profile_handler dytc_profile = {
> - .name = "thinkpad-acpi",
> +static const struct platform_profile_ops dytc_profile_ops = {
> .profile_get = dytc_profile_get,
> .profile_set = dytc_profile_set,
> };
>
> +static struct platform_profile_handler dytc_profile = {
> + .name = "thinkpad-acpi",
> + .ops = &dytc_profile_ops,
> +};
> +
> static void dytc_profile_refresh(void)
> {
> enum platform_profile_option profile;
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 5296d886c243..6013c05d7b86 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -28,14 +28,20 @@ enum platform_profile_option {
> PLATFORM_PROFILE_LAST, /*must always be last */
> };
>
> +struct platform_profile_handler;
> +
> +struct platform_profile_ops {
> + int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
> + int (*profile_set)(struct device *dev, enum platform_profile_option profile);
> +};
> +
> struct platform_profile_handler {
> const char *name;
> struct device *dev;
> struct device class_dev;
> int minor;
> unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
> - int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
> - int (*profile_set)(struct device *dev, enum platform_profile_option profile);
> + const struct platform_profile_ops *ops;
> };
>
> int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops
2025-01-16 0:27 ` [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops Kurt Borja
@ 2025-01-19 15:00 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 15:00 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> Add a `probe` callback to platform_profile_ops, which lets drivers
> initialize the choices member manually.
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 15 +++-
> .../surface/surface_platform_profile.c | 16 ++--
> drivers/platform/x86/acer-wmi.c | 88 ++++++++++---------
> drivers/platform/x86/amd/pmf/sps.c | 15 ++--
> drivers/platform/x86/asus-wmi.c | 16 ++--
> drivers/platform/x86/dell/alienware-wmi.c | 24 +++--
> drivers/platform/x86/dell/dell-pc.c | 26 +++---
> drivers/platform/x86/hp/hp-wmi.c | 29 ++++--
> drivers/platform/x86/ideapad-laptop.c | 15 ++--
> .../platform/x86/inspur_platform_profile.c | 14 ++-
> drivers/platform/x86/thinkpad_acpi.c | 15 ++--
> include/linux/platform_profile.h | 1 +
> 12 files changed, 172 insertions(+), 102 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index 161a05d57b0f..120f8402facd 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -465,12 +465,23 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
> int err;
>
> /* Sanity check the profile handler */
> - if (!pprof || bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST) ||
> - !pprof->ops->profile_set || !pprof->ops->profile_get) {
> + if (!pprof || !pprof->ops->profile_set || !pprof->ops->profile_get ||
> + !pprof->ops->probe) {
> pr_err("platform_profile: handler is invalid\n");
> return -EINVAL;
> }
>
> + err = pprof->ops->probe(drvdata, pprof->choices);
> + if (err) {
> + dev_err(pprof->dev, "platform_profile probe failed\n");
> + return err;
> + }
> +
> + if (bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST)) {
> + dev_err(pprof->dev, "Failed to register a platform_profile class device with empty choices\n");
> + return -EINVAL;
> + }
> +
> guard(mutex)(&profile_lock);
>
> /* create class interface for individual handler */
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index 76967bfeeef8..48cfe9cb89c8 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -201,7 +201,18 @@ static int ssam_platform_profile_set(struct device *dev,
> return tp;
> }
>
> +static int ssam_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops ssam_platform_profile_ops = {
> + .probe = ssam_platform_profile_probe,
> .profile_get = ssam_platform_profile_get,
> .profile_set = ssam_platform_profile_set,
> };
> @@ -223,11 +234,6 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
>
> tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
>
> - set_bit(PLATFORM_PROFILE_LOW_POWER, tpd->handler.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, tpd->handler.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
> -
> return platform_profile_register(&tpd->handler, tpd);
> }
>
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 63e6bd1fe339..4d62a61cb241 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -2019,7 +2019,53 @@ acer_predator_v4_platform_profile_set(struct device *dev,
> return 0;
> }
>
> +static int
> +acer_predator_v4_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + unsigned long supported_profiles;
> + int err;
> +
> + err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
> + (u8 *)&supported_profiles);
> + if (err)
> + return err;
> +
> + /* Iterate through supported profiles in order of increasing performance */
> + if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_ECO, &supported_profiles)) {
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + acer_predator_v4_max_perf =
> + ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
> + }
> +
> + if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET, &supported_profiles)) {
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + acer_predator_v4_max_perf =
> + ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET;
> + }
> +
> + if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED, &supported_profiles)) {
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + acer_predator_v4_max_perf =
> + ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
> + }
> +
> + if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE, &supported_profiles)) {
> + set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
> + acer_predator_v4_max_perf =
> + ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE;
> + }
> +
> + if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO, &supported_profiles)) {
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> + acer_predator_v4_max_perf =
> + ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
> + }
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops acer_predator_v4_platform_profile_ops = {
> + .probe = acer_predator_v4_platform_profile_probe,
> .profile_get = acer_predator_v4_platform_profile_get,
> .profile_set = acer_predator_v4_platform_profile_set,
> };
> @@ -2027,7 +2073,6 @@ static const struct platform_profile_ops acer_predator_v4_platform_profile_ops =
> static int acer_platform_profile_setup(struct platform_device *device)
> {
> if (quirks->predator_v4) {
> - unsigned long supported_profiles;
> int err;
>
> platform_profile_handler.name = "acer-wmi";
> @@ -2035,47 +2080,6 @@ static int acer_platform_profile_setup(struct platform_device *device)
> platform_profile_handler.ops =
> &acer_predator_v4_platform_profile_ops;
>
> - err = WMID_gaming_get_misc_setting(ACER_WMID_MISC_SETTING_SUPPORTED_PROFILES,
> - (u8 *)&supported_profiles);
> - if (err)
> - return err;
> -
> - /* Iterate through supported profiles in order of increasing performance */
> - if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_ECO, &supported_profiles)) {
> - set_bit(PLATFORM_PROFILE_LOW_POWER,
> - platform_profile_handler.choices);
> - acer_predator_v4_max_perf =
> - ACER_PREDATOR_V4_THERMAL_PROFILE_ECO;
> - }
> -
> - if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET, &supported_profiles)) {
> - set_bit(PLATFORM_PROFILE_QUIET,
> - platform_profile_handler.choices);
> - acer_predator_v4_max_perf =
> - ACER_PREDATOR_V4_THERMAL_PROFILE_QUIET;
> - }
> -
> - if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED, &supported_profiles)) {
> - set_bit(PLATFORM_PROFILE_BALANCED,
> - platform_profile_handler.choices);
> - acer_predator_v4_max_perf =
> - ACER_PREDATOR_V4_THERMAL_PROFILE_BALANCED;
> - }
> -
> - if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE, &supported_profiles)) {
> - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE,
> - platform_profile_handler.choices);
> - acer_predator_v4_max_perf =
> - ACER_PREDATOR_V4_THERMAL_PROFILE_PERFORMANCE;
> - }
> -
> - if (test_bit(ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO, &supported_profiles)) {
> - set_bit(PLATFORM_PROFILE_PERFORMANCE,
> - platform_profile_handler.choices);
> - acer_predator_v4_max_perf =
> - ACER_PREDATOR_V4_THERMAL_PROFILE_TURBO;
> - }
> -
> err = platform_profile_register(&platform_profile_handler, NULL);
> if (err)
> return err;
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index 6ae82ae86d22..e710405b581f 100644
> --- a/drivers/platform/x86/amd/pmf/sps.c
> +++ b/drivers/platform/x86/amd/pmf/sps.c
> @@ -387,7 +387,17 @@ static int amd_pmf_profile_set(struct device *dev,
> return 0;
> }
>
> +static int amd_pmf_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops amd_pmf_profile_ops = {
> + .probe = amd_pmf_profile_probe,
> .profile_get = amd_pmf_profile_get,
> .profile_set = amd_pmf_profile_set,
> };
> @@ -414,11 +424,6 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
> dev->pprof.dev = dev->dev;
> dev->pprof.ops = &amd_pmf_profile_ops;
>
> - /* Setup supported modes */
> - set_bit(PLATFORM_PROFILE_LOW_POWER, dev->pprof.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, dev->pprof.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, dev->pprof.choices);
> -
> /* Create platform_profile structure and register */
> err = platform_profile_register(&dev->pprof, dev);
> if (err)
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 992956c89d38..e775ec7371ce 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -3852,7 +3852,17 @@ static int asus_wmi_platform_profile_set(struct device *dev,
> return throttle_thermal_policy_write(asus);
> }
>
> +static int asus_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops asus_wmi_platform_profile_ops = {
> + .probe = asus_wmi_platform_profile_probe,
> .profile_get = asus_wmi_platform_profile_get,
> .profile_set = asus_wmi_platform_profile_set,
> };
> @@ -3885,12 +3895,6 @@ static int platform_profile_setup(struct asus_wmi *asus)
> asus->platform_profile_handler.dev = dev;
> asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
>
> - set_bit(PLATFORM_PROFILE_QUIET, asus->platform_profile_handler.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED,
> - asus->platform_profile_handler.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE,
> - asus->platform_profile_handler.choices);
> -
> err = platform_profile_register(&asus->platform_profile_handler, asus);
> if (err == -EEXIST) {
> pr_warn("%s, a platform_profile handler is already registered\n", __func__);
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index b8359b177a0f..e7209863e7dc 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -1078,12 +1078,7 @@ static int thermal_profile_set(struct device *dev,
> return wmax_thermal_control(supported_thermal_profiles[profile]);
> }
>
> -static const struct platform_profile_ops awcc_platform_profile_ops = {
> - .profile_get = thermal_profile_get,
> - .profile_set = thermal_profile_set,
> -};
> -
> -static int create_thermal_profile(struct platform_device *platform_device)
> +static int thermal_profile_probe(void *drvdata, unsigned long *choices)
> {
> enum platform_profile_option profile;
> enum wmax_thermal_mode mode;
> @@ -1116,19 +1111,30 @@ static int create_thermal_profile(struct platform_device *platform_device)
> profile = wmax_mode_to_platform_profile[mode];
> supported_thermal_profiles[profile] = out_data;
>
> - set_bit(profile, pp_handler.choices);
> + set_bit(profile, choices);
> }
>
> - if (bitmap_empty(pp_handler.choices, PLATFORM_PROFILE_LAST))
> + if (bitmap_empty(choices, PLATFORM_PROFILE_LAST))
> return -ENODEV;
>
> if (quirks->gmode) {
> supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =
> WMAX_THERMAL_MODE_GMODE;
>
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pp_handler.choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> }
>
> + return 0;
> +}
> +
> +static const struct platform_profile_ops awcc_platform_profile_ops = {
> + .probe = thermal_profile_probe,
> + .profile_get = thermal_profile_get,
> + .profile_set = thermal_profile_set,
> +};
> +
> +static int create_thermal_profile(struct platform_device *platform_device)
> +{
> pp_handler.name = "alienware-wmi";
> pp_handler.dev = &platform_device->dev;
> pp_handler.ops = &awcc_platform_profile_ops;
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index 9010a231f209..32b3be0723f8 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -24,6 +24,7 @@
> #include "dell-smbios.h"
>
> static struct platform_device *platform_device;
> +static int supported_modes;
>
> static const struct dmi_system_id dell_device_table[] __initconst = {
> {
> @@ -231,7 +232,22 @@ static int thermal_platform_profile_get(struct device *dev,
> return 0;
> }
>
> +static int thermal_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + if (supported_modes & DELL_QUIET)
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + if (supported_modes & DELL_COOL_BOTTOM)
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> + if (supported_modes & DELL_BALANCED)
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + if (supported_modes & DELL_PERFORMANCE)
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops dell_pc_platform_profile_ops = {
> + .probe = thermal_platform_profile_probe,
> .profile_get = thermal_platform_profile_get,
> .profile_set = thermal_platform_profile_set,
> };
> @@ -239,7 +255,6 @@ static const struct platform_profile_ops dell_pc_platform_profile_ops = {
> static int thermal_init(void)
> {
> int ret;
> - int supported_modes;
>
> /* If thermal commands are not supported, exit without error */
> if (!dell_smbios_class_is_supported(CLASS_INFO))
> @@ -265,15 +280,6 @@ static int thermal_init(void)
> thermal_handler->dev = &platform_device->dev;
> thermal_handler->ops = &dell_pc_platform_profile_ops;
>
> - if (supported_modes & DELL_QUIET)
> - set_bit(PLATFORM_PROFILE_QUIET, thermal_handler->choices);
> - if (supported_modes & DELL_COOL_BOTTOM)
> - set_bit(PLATFORM_PROFILE_COOL, thermal_handler->choices);
> - if (supported_modes & DELL_BALANCED)
> - set_bit(PLATFORM_PROFILE_BALANCED, thermal_handler->choices);
> - if (supported_modes & DELL_PERFORMANCE)
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, thermal_handler->choices);
> -
> /* Clean up if failed */
> ret = platform_profile_register(thermal_handler, NULL);
> if (ret)
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 60328b35be74..75bcd8460e7c 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -1488,6 +1488,23 @@ static int platform_profile_victus_set(struct device *dev,
> return 0;
> }
>
> +static int hp_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + if (is_omen_thermal_profile()) {
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> + } else if (is_victus_thermal_profile()) {
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + } else {
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> + }
> +
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static int omen_powersource_event(struct notifier_block *nb,
> unsigned long value,
> void *data)
> @@ -1566,16 +1583,19 @@ static inline void omen_unregister_powersource_event_handler(void)
> }
>
> static const struct platform_profile_ops platform_profile_omen_ops = {
> + .probe = hp_wmi_platform_profile_probe,
> .profile_get = platform_profile_omen_get,
> .profile_set = platform_profile_omen_set,
> };
>
> static const struct platform_profile_ops platform_profile_victus_ops = {
> + .probe = hp_wmi_platform_profile_probe,
> .profile_get = platform_profile_victus_get,
> .profile_set = platform_profile_victus_set,
> };
>
> static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
> + .probe = hp_wmi_platform_profile_probe,
> .profile_get = hp_wmi_platform_profile_get,
> .profile_set = hp_wmi_platform_profile_set,
> };
> @@ -1598,8 +1618,6 @@ static int thermal_profile_setup(struct platform_device *device)
> return err;
>
> platform_profile_handler.ops = &platform_profile_omen_ops;
> -
> - set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
> } else if (is_victus_thermal_profile()) {
> err = platform_profile_victus_get_ec(&active_platform_profile);
> if (err < 0)
> @@ -1614,8 +1632,6 @@ static int thermal_profile_setup(struct platform_device *device)
> return err;
>
> platform_profile_handler.ops = &platform_profile_victus_ops;
> -
> - set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
> } else {
> tp = thermal_profile_get();
>
> @@ -1631,15 +1647,10 @@ static int thermal_profile_setup(struct platform_device *device)
> return err;
>
> platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
> -
> - set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
> - set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
> }
>
> platform_profile_handler.name = "hp-wmi";
> platform_profile_handler.dev = &device->dev;
> - set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, platform_profile_handler.choices);
>
> err = platform_profile_register(&platform_profile_handler, NULL);
> if (err)
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index 96e99513b0b5..050919a28d2b 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -1023,6 +1023,15 @@ static int dytc_profile_set(struct device *dev,
> return -EINTR;
> }
>
> +static int dytc_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static void dytc_profile_refresh(struct ideapad_private *priv)
> {
> enum platform_profile_option profile;
> @@ -1064,6 +1073,7 @@ static const struct dmi_system_id ideapad_dytc_v4_allow_table[] = {
> };
>
> static const struct platform_profile_ops dytc_profile_ops = {
> + .probe = dytc_profile_probe,
> .profile_get = dytc_profile_get,
> .profile_set = dytc_profile_set,
> };
> @@ -1112,11 +1122,6 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
> priv->dytc->priv = priv;
> priv->dytc->pprof.ops = &dytc_profile_ops;
>
> - /* Setup supported modes */
> - set_bit(PLATFORM_PROFILE_LOW_POWER, priv->dytc->pprof.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, priv->dytc->pprof.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->dytc->pprof.choices);
> -
> /* Create platform_profile structure and register */
> err = platform_profile_register(&priv->dytc->pprof, &priv->dytc);
> if (err)
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index d0a8e4eebffa..06df3aae9a56 100644
> --- a/drivers/platform/x86/inspur_platform_profile.c
> +++ b/drivers/platform/x86/inspur_platform_profile.c
> @@ -164,7 +164,17 @@ static int inspur_platform_profile_get(struct device *dev,
> return 0;
> }
>
> +static int inspur_platform_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops inspur_platform_profile_ops = {
> + .probe = inspur_platform_profile_probe,
> .profile_get = inspur_platform_profile_get,
> .profile_set = inspur_platform_profile_set,
> };
> @@ -184,10 +194,6 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
> priv->handler.dev = &wdev->dev;
> priv->handler.ops = &inspur_platform_profile_ops;
>
> - set_bit(PLATFORM_PROFILE_LOW_POWER, priv->handler.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, priv->handler.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->handler.choices);
> -
> return platform_profile_register(&priv->handler, priv);
> }
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 9e26f5670fc7..62b2ddfe7c0a 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10539,7 +10539,17 @@ static int dytc_profile_set(struct device *dev,
> return err;
> }
>
> +static int dytc_profile_probe(void *drvdata, unsigned long *choices)
> +{
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> +
> + return 0;
> +}
> +
> static const struct platform_profile_ops dytc_profile_ops = {
> + .probe = dytc_profile_probe,
> .profile_get = dytc_profile_get,
> .profile_set = dytc_profile_set,
> };
> @@ -10585,11 +10595,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
> {
> int err, output;
>
> - /* Setup supported modes */
> - set_bit(PLATFORM_PROFILE_LOW_POWER, dytc_profile.choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, dytc_profile.choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, dytc_profile.choices);
> -
> err = dytc_command(DYTC_CMD_QUERY, &output);
> if (err)
> return err;
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 6013c05d7b86..5ad1ab7b75e4 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -31,6 +31,7 @@ enum platform_profile_option {
> struct platform_profile_handler;
>
> struct platform_profile_ops {
> + 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);
> };
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register()
2025-01-16 0:27 ` [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register() Kurt Borja
@ 2025-01-19 15:01 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 15:01 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> Replace platform_profile_register() with it's device managed version.
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Makes sense, thanks!
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/platform/surface/surface_platform_profile.c | 11 +----------
> 1 file changed, 1 insertion(+), 10 deletions(-)
>
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index 48cfe9cb89c8..bbdc873cb788 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -234,15 +234,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
>
> tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
>
> - return platform_profile_register(&tpd->handler, tpd);
> -}
> -
> -static void surface_platform_profile_remove(struct ssam_device *sdev)
> -{
> - struct ssam_platform_profile_device *tpd;
> -
> - tpd = ssam_device_get_drvdata(sdev);
> - platform_profile_remove(&tpd->handler);
> + return devm_platform_profile_register(&tpd->handler, tpd);
> }
>
> static const struct ssam_device_id ssam_platform_profile_match[] = {
> @@ -253,7 +245,6 @@ MODULE_DEVICE_TABLE(ssam, ssam_platform_profile_match);
>
> static struct ssam_device_driver surface_platform_profile = {
> .probe = surface_platform_profile_probe,
> - .remove = surface_platform_profile_remove,
> .match_table = ssam_platform_profile_match,
> .driver = {
> .name = "surface_platform_profile",
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols
2025-01-16 0:27 ` [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols Kurt Borja
@ 2025-01-19 15:04 ` Maximilian Luz
0 siblings, 0 replies; 37+ messages in thread
From: Maximilian Luz @ 2025-01-19 15:04 UTC (permalink / raw)
To: Kurt Borja, platform-driver-x86
Cc: Rafael J. Wysocki, Len Brown, linux-acpi, linux-kernel,
Mario Limonciello, Armin Wolf, Joshua Grisham, Derek J. Clark,
Ilpo Järvinen, Hans de Goede, Lee, Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D. Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Mark Pearson, Alexis Belmonte,
Ai Chao, Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
On 1/16/25 1:27 AM, Kurt Borja wrote:
> In order to protect the platform_profile_handler from API consumers,
> allocate it in platform_profile_register() and modify it's signature
> accordingly.
>
> Remove the platform_profile_handler from all consumer drivers and
> replace them with a pointer to the class device, which is
> now returned from platform_profile_register().
>
> Replace *pprof with a pointer to the class device in the rest of
> exported symbols.
>
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 98 ++++++++++++-------
> .../surface/surface_platform_profile.c | 11 +--
> drivers/platform/x86/acer-wmi.c | 18 ++--
> drivers/platform/x86/amd/pmf/pmf.h | 2 +-
> drivers/platform/x86/amd/pmf/sps.c | 17 ++--
> drivers/platform/x86/asus-wmi.c | 15 ++-
> drivers/platform/x86/dell/alienware-wmi.c | 10 +-
> drivers/platform/x86/dell/dell-pc.c | 22 ++---
> drivers/platform/x86/hp/hp-wmi.c | 19 ++--
> drivers/platform/x86/ideapad-laptop.c | 15 +--
> .../platform/x86/inspur_platform_profile.c | 9 +-
> drivers/platform/x86/thinkpad_acpi.c | 14 +--
> include/linux/platform_profile.h | 12 ++-
> 13 files changed, 130 insertions(+), 132 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index 120f8402facd..a1dfa168f51f 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -4,6 +4,7 @@
>
> #include <linux/acpi.h>
> #include <linux/bits.h>
> +#include <linux/cleanup.h>
> #include <linux/init.h>
> #include <linux/mutex.h>
> #include <linux/platform_profile.h>
> @@ -212,9 +213,17 @@ static struct attribute *profile_attrs[] = {
> };
> ATTRIBUTE_GROUPS(profile);
>
> +static void pprof_device_release(struct device *dev)
> +{
> + struct platform_profile_handler *pprof = to_pprof_handler(dev);
> +
> + kfree(pprof);
> +}
> +
> static const struct class platform_profile_class = {
> .name = "platform-profile",
> .dev_groups = profile_groups,
> + .dev_release = pprof_device_release,
> };
>
> /**
> @@ -408,10 +417,10 @@ static const struct attribute_group platform_profile_group = {
> .is_visible = profile_class_is_visible,
> };
>
> -void platform_profile_notify(struct platform_profile_handler *pprof)
> +void platform_profile_notify(struct device *dev)
> {
> scoped_cond_guard(mutex_intr, return, &profile_lock) {
> - _notify_class_profile(&pprof->class_dev, NULL);
> + _notify_class_profile(dev, NULL);
> }
> sysfs_notify(acpi_kobj, NULL, "platform_profile");
> }
> @@ -460,42 +469,54 @@ int platform_profile_cycle(void)
> }
> EXPORT_SYMBOL_GPL(platform_profile_cycle);
>
> -int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
> +struct device *platform_profile_register(struct device *dev, const char *name,
> + void *drvdata,
> + const struct platform_profile_ops *ops)
> {
> + struct device *ppdev;
> + int minor;
> int err;
>
> - /* Sanity check the profile handler */
> - if (!pprof || !pprof->ops->profile_set || !pprof->ops->profile_get ||
> - !pprof->ops->probe) {
> - pr_err("platform_profile: handler is invalid\n");
> - return -EINVAL;
> - }
> + /* Sanity check */
> + if (WARN_ON_ONCE(!dev || !name || !ops || !ops->profile_get ||
> + !ops->profile_set || !ops->probe))
> + return ERR_PTR(-EINVAL);
> +
> + struct platform_profile_handler *pprof __free(kfree) = kzalloc(
> + sizeof(*pprof), GFP_KERNEL);
> + if (!pprof)
> + return ERR_PTR(-ENOMEM);
>
> - err = pprof->ops->probe(drvdata, pprof->choices);
> + err = ops->probe(drvdata, pprof->choices);
> if (err) {
> - dev_err(pprof->dev, "platform_profile probe failed\n");
> - return err;
> + dev_err(dev, "platform_profile probe failed\n");
> + return ERR_PTR(err);
> }
>
> if (bitmap_empty(pprof->choices, PLATFORM_PROFILE_LAST)) {
> - dev_err(pprof->dev, "Failed to register a platform_profile class device with empty choices\n");
> - return -EINVAL;
> + dev_err(dev, "Failed to register platform_profile class device with empty choices\n");
> + return ERR_PTR(-EINVAL);
> }
>
> guard(mutex)(&profile_lock);
>
> /* create class interface for individual handler */
> - pprof->minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
> - if (pprof->minor < 0)
> - return pprof->minor;
> + minor = ida_alloc(&platform_profile_ida, GFP_KERNEL);
> + if (minor < 0)
> + return ERR_PTR(minor);
>
> + pprof->name = name;
> + pprof->ops = ops;
> + pprof->minor = minor;
> pprof->class_dev.class = &platform_profile_class;
> - pprof->class_dev.parent = pprof->dev;
> + pprof->class_dev.parent = dev;
> dev_set_drvdata(&pprof->class_dev, drvdata);
> dev_set_name(&pprof->class_dev, "platform-profile-%d", pprof->minor);
> - err = device_register(&pprof->class_dev);
> + /* device_register() takes ownership of ppdev */
> + ppdev = &no_free_ptr(pprof)->class_dev;
> + err = device_register(ppdev);
> if (err) {
> - put_device(&pprof->class_dev);
> + put_device(ppdev);
> goto cleanup_ida;
> }
>
> @@ -505,20 +526,21 @@ int platform_profile_register(struct platform_profile_handler *pprof, void *drvd
> if (err)
> goto cleanup_cur;
>
> - return 0;
> + return ppdev;
>
> cleanup_cur:
> - device_unregister(&pprof->class_dev);
> + device_unregister(ppdev);
>
> cleanup_ida:
> - ida_free(&platform_profile_ida, pprof->minor);
> + ida_free(&platform_profile_ida, minor);
>
> - return err;
> + return ERR_PTR(err);
> }
> EXPORT_SYMBOL_GPL(platform_profile_register);
>
> -int platform_profile_remove(struct platform_profile_handler *pprof)
> +int platform_profile_remove(struct device *dev)
> {
> + struct platform_profile_handler *pprof = to_pprof_handler(dev);
> int id;
> guard(mutex)(&profile_lock);
>
> @@ -536,30 +558,32 @@ EXPORT_SYMBOL_GPL(platform_profile_remove);
>
> static void devm_platform_profile_release(struct device *dev, void *res)
> {
> - struct platform_profile_handler **pprof = res;
> + struct device **ppdev = res;
>
> - platform_profile_remove(*pprof);
> + platform_profile_remove(*ppdev);
> }
>
> -int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata)
> +struct device *devm_platform_profile_register(struct device *dev, const char *name,
> + void *drvdata,
> + const struct platform_profile_ops *ops)
> {
> - struct platform_profile_handler **dr;
> - int ret;
> + struct device *ppdev;
> + struct device **dr;
>
> dr = devres_alloc(devm_platform_profile_release, sizeof(*dr), GFP_KERNEL);
> if (!dr)
> - return -ENOMEM;
> + return ERR_PTR(-ENOMEM);
>
> - ret = platform_profile_register(pprof, drvdata);
> - if (ret) {
> + ppdev = platform_profile_register(dev, name, drvdata, ops);
> + if (IS_ERR(ppdev)) {
> devres_free(dr);
> - return ret;
> + return ppdev;
> }
>
> - *dr = pprof;
> - devres_add(pprof->dev, dr);
> + *dr = ppdev;
> + devres_add(dev, dr);
>
> - return 0;
> + return ppdev;
> }
> EXPORT_SYMBOL_GPL(devm_platform_profile_register);
>
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index bbdc873cb788..0e479e35e66e 100644
> --- a/drivers/platform/surface/surface_platform_profile.c
> +++ b/drivers/platform/surface/surface_platform_profile.c
> @@ -40,7 +40,7 @@ struct ssam_tmp_profile_info {
>
> struct ssam_platform_profile_device {
> struct ssam_device *sdev;
> - struct platform_profile_handler handler;
> + struct device *ppdev;
> bool has_fan;
> };
>
> @@ -228,13 +228,12 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
> tpd->sdev = sdev;
> ssam_device_set_drvdata(sdev, tpd);
>
> - tpd->handler.name = "Surface Platform Profile";
> - tpd->handler.dev = &sdev->dev;
> - tpd->handler.ops = &ssam_platform_profile_ops;
> -
> tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
>
> - return devm_platform_profile_register(&tpd->handler, tpd);
> + tpd->ppdev = devm_platform_profile_register(&sdev->dev, "Surface Platform Profile",
> + tpd, &ssam_platform_profile_ops);
> +
> + return PTR_ERR_OR_ZERO(tpd->ppdev);
> }
>
> static const struct ssam_device_id ssam_platform_profile_match[] = {
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index d201ca0e01d6..ae2a7c93ab72 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -784,7 +784,7 @@ static const struct dmi_system_id non_acer_quirks[] __initconst = {
> {}
> };
>
> -static struct platform_profile_handler platform_profile_handler;
> +static struct device *platform_profile_device;
> static bool platform_profile_support;
>
> /*
> @@ -2073,16 +2073,10 @@ static const struct platform_profile_ops acer_predator_v4_platform_profile_ops =
> static int acer_platform_profile_setup(struct platform_device *device)
> {
> if (quirks->predator_v4) {
> - int err;
> -
> - platform_profile_handler.name = "acer-wmi";
> - platform_profile_handler.dev = &device->dev;
> - platform_profile_handler.ops =
> - &acer_predator_v4_platform_profile_ops;
> -
> - err = devm_platform_profile_register(&platform_profile_handler, NULL);
> - if (err)
> - return err;
> + platform_profile_device = devm_platform_profile_register(
> + &device->dev, "acer-wmi", NULL, &acer_predator_v4_platform_profile_ops);
> + if (IS_ERR(platform_profile_device))
> + return PTR_ERR(platform_profile_device);
>
> platform_profile_support = true;
>
> @@ -2125,7 +2119,7 @@ static int acer_thermal_profile_change(void)
> if (current_tp != acer_predator_v4_max_perf)
> last_non_turbo_profile = current_tp;
>
> - platform_profile_notify(&platform_profile_handler);
> + platform_profile_notify(platform_profile_device);
> }
> }
>
> diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h
> index d99b3556205b..41b2b91b8fdc 100644
> --- a/drivers/platform/x86/amd/pmf/pmf.h
> +++ b/drivers/platform/x86/amd/pmf/pmf.h
> @@ -338,7 +338,7 @@ struct amd_pmf_dev {
> struct mutex lock; /* protects the PMF interface */
> u32 supported_func;
> enum platform_profile_option current_profile;
> - struct platform_profile_handler pprof;
> + struct device *ppdev; /* platform profile class device */
> struct dentry *dbgfs_dir;
> int hb_interval; /* SBIOS heartbeat interval */
> struct delayed_work heart_beat;
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index 7c7ed2b9de01..e6cf0b22dac3 100644
> --- a/drivers/platform/x86/amd/pmf/sps.c
> +++ b/drivers/platform/x86/amd/pmf/sps.c
> @@ -404,8 +404,6 @@ static const struct platform_profile_ops amd_pmf_profile_ops = {
>
> int amd_pmf_init_sps(struct amd_pmf_dev *dev)
> {
> - int err;
> -
> dev->current_profile = PLATFORM_PROFILE_BALANCED;
>
> if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
> @@ -420,15 +418,12 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
> amd_pmf_set_sps_power_limits(dev);
> }
>
> - dev->pprof.name = "amd-pmf";
> - dev->pprof.dev = dev->dev;
> - dev->pprof.ops = &amd_pmf_profile_ops;
> -
> /* Create platform_profile structure and register */
> - err = devm_platform_profile_register(&dev->pprof, dev);
> - if (err)
> - dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %d\n",
> - err);
> + dev->ppdev = devm_platform_profile_register(dev->dev, "amd-pmf", dev,
> + &amd_pmf_profile_ops);
> + if (IS_ERR(dev->ppdev))
> + dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %ld\n",
> + PTR_ERR(dev->ppdev));
>
> - return err;
> + return PTR_ERR_OR_ZERO(dev->ppdev);
> }
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index dc713a5d8042..9a485f777591 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -313,7 +313,7 @@ struct asus_wmi {
> bool mid_fan_curve_available;
> struct fan_curve_data custom_fan_curves[3];
>
> - struct platform_profile_handler platform_profile_handler;
> + struct device *ppdev;
> bool platform_profile_support;
>
> // The RSOC controls the maximum charging percentage.
> @@ -3789,7 +3789,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
> * Ensure that platform_profile updates userspace with the change to ensure
> * that platform_profile and throttle_thermal_policy_mode are in sync.
> */
> - platform_profile_notify(&asus->platform_profile_handler);
> + platform_profile_notify(asus->ppdev);
>
> return count;
> }
> @@ -3891,14 +3891,11 @@ static int platform_profile_setup(struct asus_wmi *asus)
>
> dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");
>
> - asus->platform_profile_handler.name = "asus-wmi";
> - asus->platform_profile_handler.dev = dev;
> - asus->platform_profile_handler.ops = &asus_wmi_platform_profile_ops;
> -
> - err = devm_platform_profile_register(&asus->platform_profile_handler, asus);
> - if (err) {
> + asus->ppdev = devm_platform_profile_register(dev, "asus-wmi", asus,
> + &asus_wmi_platform_profile_ops);
> + if (IS_ERR(asus->ppdev)) {
> dev_err(dev, "Failed to register a platform_profile class device");
> - return err;
> + return PTR_ERR(asus->ppdev);
> }
>
> asus->platform_profile_support = true;
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index e7209863e7dc..63cf016bc912 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -406,7 +406,6 @@ struct wmax_u32_args {
>
> static struct platform_device *platform_device;
> static struct color_platform colors[4];
> -static struct platform_profile_handler pp_handler;
> static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST];
>
> static u8 interface;
> @@ -1135,11 +1134,12 @@ static const struct platform_profile_ops awcc_platform_profile_ops = {
>
> static int create_thermal_profile(struct platform_device *platform_device)
> {
> - pp_handler.name = "alienware-wmi";
> - pp_handler.dev = &platform_device->dev;
> - pp_handler.ops = &awcc_platform_profile_ops;
> + struct device *ppdev;
>
> - return devm_platform_profile_register(&pp_handler, NULL);
> + ppdev = devm_platform_profile_register(&platform_device->dev, "alienware-wmi",
> + NULL, &awcc_platform_profile_ops);
> +
> + return PTR_ERR_OR_ZERO(ppdev);
> }
>
> /*
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index 2759bb608b1a..1874d4adfb8a 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -109,8 +109,6 @@ MODULE_DEVICE_TABLE(dmi, dell_device_table);
> #define DELL_ACC_SET_FIELD GENMASK(11, 8)
> #define DELL_THERMAL_SUPPORTED GENMASK(3, 0)
>
> -static struct platform_profile_handler *thermal_handler;
> -
> enum thermal_mode_bits {
> DELL_BALANCED = BIT(0),
> DELL_COOL_BOTTOM = BIT(1),
> @@ -254,6 +252,7 @@ static const struct platform_profile_ops dell_pc_platform_profile_ops = {
>
> static int thermal_init(void)
> {
> + struct device *ppdev;
> int ret;
>
> /* If thermal commands are not supported, exit without error */
> @@ -271,26 +270,17 @@ static int thermal_init(void)
> if (IS_ERR(platform_device))
> return PTR_ERR(platform_device);
>
> - thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL);
> - if (!thermal_handler) {
> - ret = -ENOMEM;
> - goto cleanup_platform_device;
> - }
> - thermal_handler->name = "dell-pc";
> - thermal_handler->dev = &platform_device->dev;
> - thermal_handler->ops = &dell_pc_platform_profile_ops;
> -
> /* Clean up if failed */
> - ret = devm_platform_profile_register(thermal_handler, NULL);
> - if (ret)
> + ppdev = devm_platform_profile_register(&platform_device->dev, "dell-pc",
> + NULL, &dell_pc_platform_profile_ops);
> + if (IS_ERR(ppdev)) {
> + ret = PTR_ERR(ppdev);
> goto cleanup_thermal_handler;
> + }
>
> return 0;
>
> cleanup_thermal_handler:
> - thermal_handler = NULL;
> -
> -cleanup_platform_device:
> platform_device_unregister(platform_device);
>
> return ret;
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 1304dfc65aab..435e3ef2e3e7 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -273,7 +273,7 @@ static DEFINE_MUTEX(active_platform_profile_lock);
> static struct input_dev *hp_wmi_input_dev;
> static struct input_dev *camera_shutter_input_dev;
> static struct platform_device *hp_wmi_platform_dev;
> -static struct platform_profile_handler platform_profile_handler;
> +static struct device *platform_profile_device;
> static struct notifier_block platform_power_source_nb;
> static enum platform_profile_option active_platform_profile;
> static bool platform_profile_support;
> @@ -1602,6 +1602,7 @@ static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
>
> static int thermal_profile_setup(struct platform_device *device)
> {
> + const struct platform_profile_ops *ops;
> int err, tp;
>
> if (is_omen_thermal_profile()) {
> @@ -1617,7 +1618,7 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err < 0)
> return err;
>
> - platform_profile_handler.ops = &platform_profile_omen_ops;
> + ops = &platform_profile_omen_ops;
> } else if (is_victus_thermal_profile()) {
> err = platform_profile_victus_get_ec(&active_platform_profile);
> if (err < 0)
> @@ -1631,7 +1632,7 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err < 0)
> return err;
>
> - platform_profile_handler.ops = &platform_profile_victus_ops;
> + ops = &platform_profile_victus_ops;
> } else {
> tp = thermal_profile_get();
>
> @@ -1646,15 +1647,13 @@ static int thermal_profile_setup(struct platform_device *device)
> if (err)
> return err;
>
> - platform_profile_handler.ops = &hp_wmi_platform_profile_ops;
> + ops = &hp_wmi_platform_profile_ops;
> }
>
> - platform_profile_handler.name = "hp-wmi";
> - platform_profile_handler.dev = &device->dev;
> -
> - err = devm_platform_profile_register(&platform_profile_handler, NULL);
> - if (err)
> - return err;
> + platform_profile_device = devm_platform_profile_register(&device->dev, "hp-wmi",
> + NULL, ops);
> + if (IS_ERR(platform_profile_device))
> + return PTR_ERR(platform_profile_device);
>
> platform_profile_support = true;
>
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index 87c1e087770a..dfb5d4b8c046 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -142,7 +142,7 @@ enum {
>
> struct ideapad_dytc_priv {
> enum platform_profile_option current_profile;
> - struct platform_profile_handler pprof;
> + struct device *ppdev; /* platform profile device */
> struct mutex mutex; /* protects the DYTC interface */
> struct ideapad_private *priv;
> };
> @@ -1050,7 +1050,7 @@ static void dytc_profile_refresh(struct ideapad_private *priv)
>
> if (profile != priv->dytc->current_profile) {
> priv->dytc->current_profile = profile;
> - platform_profile_notify(&priv->dytc->pprof);
> + platform_profile_notify(priv->dytc->ppdev);
> }
> }
>
> @@ -1117,15 +1117,16 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
>
> mutex_init(&priv->dytc->mutex);
>
> - priv->dytc->pprof.name = "ideapad-laptop";
> - priv->dytc->pprof.dev = &priv->platform_device->dev;
> priv->dytc->priv = priv;
> - priv->dytc->pprof.ops = &dytc_profile_ops;
>
> /* Create platform_profile structure and register */
> - err = devm_platform_profile_register(&priv->dytc->pprof, &priv->dytc);
> - if (err)
> + priv->dytc->ppdev = devm_platform_profile_register(&priv->platform_device->dev,
> + "ideapad-laptop", &priv->dytc,
> + &dytc_profile_ops);
> + if (IS_ERR(priv->dytc->ppdev)) {
> + err = PTR_ERR(priv->dytc->ppdev);
> goto pp_reg_failed;
> + }
>
> /* Ensure initial values are correct */
> dytc_profile_refresh(priv);
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index e1631de6ad86..e02f5a55a6c5 100644
> --- a/drivers/platform/x86/inspur_platform_profile.c
> +++ b/drivers/platform/x86/inspur_platform_profile.c
> @@ -32,7 +32,7 @@ enum inspur_tmp_profile {
>
> struct inspur_wmi_priv {
> struct wmi_device *wdev;
> - struct platform_profile_handler handler;
> + struct device *ppdev;
> };
>
> static int inspur_wmi_perform_query(struct wmi_device *wdev,
> @@ -190,11 +190,10 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
> priv->wdev = wdev;
> dev_set_drvdata(&wdev->dev, priv);
>
> - priv->handler.name = "inspur-wmi";
> - priv->handler.dev = &wdev->dev;
> - priv->handler.ops = &inspur_platform_profile_ops;
> + priv->ppdev = devm_platform_profile_register(&wdev->dev, "inspur-wmi", priv,
> + &inspur_platform_profile_ops);
>
> - return devm_platform_profile_register(&priv->handler, priv);
> + return PTR_ERR_OR_ZERO(priv->ppdev);
> }
>
> static const struct wmi_device_id inspur_wmi_id_table[] = {
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index c9226e8dc713..56c57cb45a76 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -962,6 +962,7 @@ static const struct proc_ops dispatch_proc_ops = {
> static struct platform_device *tpacpi_pdev;
> static struct platform_device *tpacpi_sensors_pdev;
> static struct device *tpacpi_hwmon;
> +static struct device *tpacpi_pprof;
> static struct input_dev *tpacpi_inputdev;
> static struct mutex tpacpi_inputdev_send_mutex;
> static LIST_HEAD(tpacpi_all_drivers);
> @@ -10554,11 +10555,6 @@ static const struct platform_profile_ops dytc_profile_ops = {
> .profile_set = dytc_profile_set,
> };
>
> -static struct platform_profile_handler dytc_profile = {
> - .name = "thinkpad-acpi",
> - .ops = &dytc_profile_ops,
> -};
> -
> static void dytc_profile_refresh(void)
> {
> enum platform_profile_option profile;
> @@ -10587,7 +10583,7 @@ static void dytc_profile_refresh(void)
> err = convert_dytc_to_profile(funcmode, perfmode, &profile);
> if (!err && profile != dytc_current_profile) {
> dytc_current_profile = profile;
> - platform_profile_notify(&dytc_profile);
> + platform_profile_notify(tpacpi_pprof);
> }
> }
>
> @@ -10648,14 +10644,14 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
> dbg_printk(TPACPI_DBG_INIT,
> "DYTC version %d: thermal mode available\n", dytc_version);
>
> - dytc_profile.dev = &tpacpi_pdev->dev;
> /* Create platform_profile structure and register */
> - err = devm_platform_profile_register(&dytc_profile, NULL);
> + tpacpi_pprof = devm_platform_profile_register(&tpacpi_pdev->dev, "thinkpad-acpi",
> + NULL, &dytc_profile_ops);
> /*
> * If for some reason platform_profiles aren't enabled
> * don't quit terminally.
> */
> - if (err)
> + if (IS_ERR(tpacpi_pprof))
> return -ENODEV;
>
> /* Ensure initial values are correct */
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 5ad1ab7b75e4..778d4c661c3c 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -45,10 +45,14 @@ struct platform_profile_handler {
> const struct platform_profile_ops *ops;
> };
>
> -int platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
> -int platform_profile_remove(struct platform_profile_handler *pprof);
> -int devm_platform_profile_register(struct platform_profile_handler *pprof, void *drvdata);
> +struct device *platform_profile_register(struct device *dev, const char *name,
> + void *drvdata,
> + const struct platform_profile_ops *ops);
> +int platform_profile_remove(struct device *dev);
> +struct device *devm_platform_profile_register(struct device *dev, const char *name,
> + void *drvdata,
> + const struct platform_profile_ops *ops);
> int platform_profile_cycle(void);
> -void platform_profile_notify(struct platform_profile_handler *pprof);
> +void platform_profile_notify(struct device *dev);
>
> #endif /*_PLATFORM_PROFILE_H_*/
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v4 00/19] Hide platform_profile_handler from consumers
2025-01-18 1:33 ` Mark Pearson
2025-01-18 7:16 ` Kurt Borja
@ 2025-01-20 12:28 ` Ilpo Järvinen
1 sibling, 0 replies; 37+ messages in thread
From: Ilpo Järvinen @ 2025-01-20 12:28 UTC (permalink / raw)
To: Mark Pearson
Cc: Kurt Borja, platform-driver-x86@vger.kernel.org,
Rafael J. Wysocki, Len Brown, linux-acpi@vger.kernel.org, LKML,
Limonciello, Mario, Armin Wolf, Joshua Grisham, Derek J . Clark,
Hans de Goede, Maximilian Luz, Lee Chun-Yi, Shyam Sundar S K,
Corentin Chary, Luke D . Jones, Lyndon Sanche, Ike Panhc,
Henrique de Moraes Holschuh, Alexis Belmonte, Ai Chao,
Gergo Koteles, Dell.Client.Kernel, ibm-acpi-devel
[-- Attachment #1: Type: text/plain, Size: 5502 bytes --]
On Fri, 17 Jan 2025, Mark Pearson wrote:
>
>
> On Fri, Jan 17, 2025, at 3:45 PM, Mark Pearson wrote:
> > Hi,
> >
> > On Fri, Jan 17, 2025, at 12:19 PM, Ilpo Järvinen wrote:
> >> On Fri, 17 Jan 2025, Kurt Borja wrote:
> >>
> >>> On Fri Jan 17, 2025 at 11:42 AM -05, Ilpo Järvinen wrote:
> >>> > On Thu, 16 Jan 2025, Mark Pearson wrote:
> >>> >
> >>> > > Hi
> >>> > >
> >>> > > On Wed, Jan 15, 2025, at 7:27 PM, Kurt Borja wrote:
> >>> > > > Hi :)
> >>> > > >
> >>> > > > The merge window is about to open, so I rebased this patchset on top of
> >>> > > > pdx86/review-ilpo-next to pick up acer-wmi latest commits, in case we
> >>> > > > manage to squeeze this into v6.14.
> >>> > > >
> >>> > > > ~ Kurt
> >>> > > > ---
> >>> > > > v3 -> v4:
> >>> > > >
> >>> > > > [09/19]
> >>> > > > - Replace error message with a user-friendly one
> >>> > > >
> >>> > > > v3:
> >>> > > > https://lore.kernel.org/platform-driver-x86/20250115071022.4815-1-kuurtb@gmail.com/
> >>> > > >
> >>> > > > Kurt Borja (19):
> >>> > > > ACPI: platform_profile: Replace *class_dev member with class_dev
> >>> > > > ACPI: platform_profile: Let drivers set drvdata to the class device
> >>> > > > ACPI: platform_profile: Remove platform_profile_handler from callbacks
> >>> > > > ACPI: platform_profile: Add `ops` member to handlers
> >>> > > > ACPI: platform_profile: Add `probe` to platform_profile_ops
> >>> > > > platform/surface: surface_platform_profile: Use
> >>> > > > devm_platform_profile_register()
> >>> > > > platform/x86: acer-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: amd: pmf: sps: Use devm_platform_profile_register()
> >>> > > > platform/x86: asus-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: dell-pc: Use devm_platform_profile_register()
> >>> > > > platform/x86: ideapad-laptop: Use devm_platform_profile_register()
> >>> > > > platform/x86: hp-wmi: Use devm_platform_profile_register()
> >>> > > > platform/x86: inspur_platform_profile: Use
> >>> > > > devm_platform_profile_register()
> >>> > > > platform/x86: thinkpad_acpi: Use devm_platform_profile_register()
> >>> > > > ACPI: platform_profile: Remove platform_profile_handler from exported
> >>> > > > symbols
> >>> > > > ACPI: platform_profile: Move platform_profile_handler
> >>> > > > ACPI: platform_profile: Clean platform_profile_handler
> >>> > > > ACPI: platform_profile: Add documentation
> >>> > > > ACPI: platform_profile: Add a prefix to log messages
> >>> > > >
> >>> > > > .../ABI/testing/sysfs-class-platform-profile | 44 +++++
> >>> > > > drivers/acpi/platform_profile.c | 172 +++++++++++++-----
> >>> > > > .../surface/surface_platform_profile.c | 48 ++---
> >>> > > > drivers/platform/x86/acer-wmi.c | 114 ++++++------
> >>> > > > drivers/platform/x86/amd/pmf/core.c | 1 -
> >>> > > > drivers/platform/x86/amd/pmf/pmf.h | 3 +-
> >>> > > > drivers/platform/x86/amd/pmf/sps.c | 51 +++---
> >>> > > > drivers/platform/x86/asus-wmi.c | 55 +++---
> >>> > > > drivers/platform/x86/dell/alienware-wmi.c | 34 ++--
> >>> > > > drivers/platform/x86/dell/dell-pc.c | 60 +++---
> >>> > > > drivers/platform/x86/hp/hp-wmi.c | 83 +++++----
> >>> > > > drivers/platform/x86/ideapad-laptop.c | 45 +++--
> >>> > > > .../platform/x86/inspur_platform_profile.c | 48 +++--
> >>> > > > drivers/platform/x86/thinkpad_acpi.c | 37 ++--
> >>> > > > include/linux/platform_profile.h | 37 ++--
> >>> > > > 15 files changed, 495 insertions(+), 337 deletions(-)
> >>> > > > create mode 100644 Documentation/ABI/testing/sysfs-class-platform-profile
> >>> > > >
> >>> > > >
> >>> > > > base-commit: d98bf6a6ed61a8047e199495b0887cce392f8e5b
> >>> > > > --
> >>> > > > 2.48.1
> >>> > >
> >>> > > For the series up to v4 commit 15/19:
> >>> > > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> >>> > >
> >>> > > I need to go over the last few commits just once more, as there a few
> >>> > > pieces I need to get my head around - and I'm not going to get it done
> >>> > > this evening. Hope it's OK to add review for the bits that I have done.
> >>> >
> >>> > I, for the first time ever, tested filter-branch and after some initial
> >>> > hickups on how to specify the commit range, got your Reviewed-bys added
> >>> > with single command :-).
> >>>
> >>> Awesome! I believe commit 15/19
> >>>
> >>> a213108c01e0 ("ACPI: platform_profile: Remove platform_profile_handler from exported symbols")
> >>>
> >>> is still missing a rev-by by Mark, if there is still time.
> >>
> >> Thanks for noticing this. I just recalled the patch numbering wrong.
> >>
> >> It should be fixed now.
> >>
> >> --
> >> i.
> >
> > I finished my review, and no concerns. For the series:
> > Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> >
> > Note - I'm building and will give it a sniff test too, but that will
> > take a bit longer.
> >
> > Thanks for your work on this Kurt
> >
> Ran the series on an X1 Carbon G12 and profiles working well. Was able to check the new class and didn't find any issues.
> For the series:
> Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Thanks a lot for testing this! I've added you tags into the entire series
now.
--
i.
^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2025-01-20 12:28 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-16 0:27 [PATCH v4 00/19] Hide platform_profile_handler from consumers Kurt Borja
2025-01-16 0:27 ` [PATCH v4 01/19] ACPI: platform_profile: Replace *class_dev member with class_dev Kurt Borja
2025-01-16 0:27 ` [PATCH v4 02/19] ACPI: platform_profile: Let drivers set drvdata to the class device Kurt Borja
2025-01-19 14:55 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 03/19] ACPI: platform_profile: Remove platform_profile_handler from callbacks Kurt Borja
2025-01-19 14:57 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 04/19] ACPI: platform_profile: Add `ops` member to handlers Kurt Borja
2025-01-19 14:58 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 05/19] ACPI: platform_profile: Add `probe` to platform_profile_ops Kurt Borja
2025-01-19 15:00 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 06/19] platform/surface: surface_platform_profile: Use devm_platform_profile_register() Kurt Borja
2025-01-19 15:01 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 07/19] platform/x86: acer-wmi: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 08/19] platform/x86: amd: pmf: sps: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 09/19] platform/x86: asus-wmi: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 10/19] platform/x86: dell-pc: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 11/19] platform/x86: ideapad-laptop: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 12/19] platform/x86: hp-wmi: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 13/19] platform/x86: inspur_platform_profile: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 14/19] platform/x86: thinkpad_acpi: " Kurt Borja
2025-01-16 0:27 ` [PATCH v4 15/19] ACPI: platform_profile: Remove platform_profile_handler from exported symbols Kurt Borja
2025-01-19 15:04 ` Maximilian Luz
2025-01-16 0:27 ` [PATCH v4 16/19] ACPI: platform_profile: Move platform_profile_handler Kurt Borja
2025-01-16 0:27 ` [PATCH v4 17/19] ACPI: platform_profile: Clean platform_profile_handler Kurt Borja
2025-01-16 0:27 ` [PATCH v4 18/19] ACPI: platform_profile: Add documentation Kurt Borja
2025-01-16 0:27 ` [PATCH v4 19/19] ACPI: platform_profile: Add a prefix to log messages Kurt Borja
2025-01-16 16:09 ` [PATCH v4 00/19] Hide platform_profile_handler from consumers Ilpo Järvinen
2025-01-17 4:16 ` Kurt Borja
2025-01-16 22:20 ` Mark Pearson
2025-01-17 4:27 ` Kurt Borja
2025-01-17 16:42 ` Ilpo Järvinen
2025-01-17 17:13 ` Kurt Borja
2025-01-17 17:19 ` Ilpo Järvinen
2025-01-17 20:45 ` Mark Pearson
2025-01-18 1:33 ` Mark Pearson
2025-01-18 7:16 ` Kurt Borja
2025-01-20 12:28 ` Ilpo Järvinen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).