linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).