Devices can now set drvdata to the class device, thus passing the
platform_profile_handler to callbacks is unnecessary. Instead pass the
class device.
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
drivers/acpi/platform_profile.c | 6 ++--
.../surface/surface_platform_profile.c | 18 ++++++------
drivers/platform/x86/acer-wmi.c | 16 +++++------
drivers/platform/x86/amd/pmf/sps.c | 16 +++++------
drivers/platform/x86/asus-wmi.c | 16 +++++------
drivers/platform/x86/dell/alienware-wmi.c | 12 ++++----
drivers/platform/x86/dell/dell-pc.c | 14 +++++-----
drivers/platform/x86/hp/hp-wmi.c | 28 +++++++++----------
drivers/platform/x86/ideapad-laptop.c | 16 +++++------
.../platform/x86/inspur_platform_profile.c | 16 +++++------
drivers/platform/x86/thinkpad_acpi.c | 12 ++++----
include/linux/platform_profile.h | 8 ++----
12 files changed, 88 insertions(+), 90 deletions(-)
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index fdf79b81b62e..8d034d928e32 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -67,7 +67,7 @@ static int _store_class_profile(struct device *dev, void *data)
if (!test_bit(*bit, handler->choices))
return -EOPNOTSUPP;
- return handler->ops->profile_set(handler, *bit);
+ return handler->ops->profile_set(dev, *bit);
}
/**
@@ -104,7 +104,7 @@ static int get_class_profile(struct device *dev,
lockdep_assert_held(&profile_lock);
handler = to_pprof_handler(dev);
- err = handler->ops->profile_get(handler, &val);
+ err = handler->ops->profile_get(dev, &val);
if (err) {
pr_err("Failed to get profile for handler %s\n", handler->name);
return err;
@@ -490,7 +490,7 @@ struct device *platform_profile_register(struct device *dev, const char *name,
if (!pprof)
return ERR_PTR(-ENOMEM);
- err = ops->choices(pprof);
+ err = ops->choices(drvdata, pprof->choices);
if (err < 0)
return ERR_PTR(err);
diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
index 965940223892..0d059986cc5c 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)
@@ -201,12 +201,12 @@ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
return tp;
}
-static int ssam_platform_profile_choices(struct platform_profile_handler *pprof)
+static int ssam_platform_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->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;
}
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index 2059b29dd36b..2900ba060cc4 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -1827,7 +1827,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;
@@ -1862,7 +1862,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 tp;
@@ -1901,13 +1901,13 @@ acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
}
static int
-acer_predator_v4_platform_profile_choices(struct platform_profile_handler *pprof)
+acer_predator_v4_platform_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
return 0;
}
diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
index e8d2de9bb646..700a6ef39201 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;
@@ -387,11 +387,11 @@ static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
return 0;
}
-static int amd_pmf_profile_choices(struct platform_profile_handler *pprof)
+static int amd_pmf_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 809ab0353b68..11e5fcecf3a4 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:
@@ -3852,11 +3852,11 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
return throttle_thermal_policy_write(asus);
}
-static int asus_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
+static int asus_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index 1eaa746eb4f1..19b7cd95018c 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -1055,7 +1055,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;
@@ -1081,7 +1081,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) {
@@ -1107,7 +1107,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,
return wmax_thermal_control(supported_thermal_profiles[profile]);
}
-static int thermal_profile_choices(struct platform_profile_handler *pprof)
+static int thermal_profile_choices(void *drvdata, unsigned long *choices)
{
u32 out_data;
u8 sys_desc[4];
@@ -1140,17 +1140,17 @@ static int thermal_profile_choices(struct platform_profile_handler *pprof)
profile = wmax_mode_to_platform_profile[mode];
supported_thermal_profiles[profile] = out_data;
- set_bit(profile, pprof->choices);
+ set_bit(profile, choices);
}
- if (bitmap_empty(pprof->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, pprof->choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
}
return 0;
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index 4ff80ed4f157..1ba2e58451e1 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -184,7 +184,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) {
@@ -201,7 +201,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;
@@ -230,16 +230,16 @@ static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int thermal_platform_profile_choices(struct platform_profile_handler *pprof)
+static int thermal_platform_profile_choices(void *drvdata, unsigned long *choices)
{
if (supported_modes & DELL_QUIET)
- set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
if (supported_modes & DELL_COOL_BOTTOM)
- set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
+ set_bit(PLATFORM_PROFILE_COOL, choices);
if (supported_modes & DELL_BALANCED)
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
if (supported_modes & DELL_PERFORMANCE)
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 1b9e176f8d6f..3849cf761a46 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;
@@ -1488,19 +1488,19 @@ static int platform_profile_victus_set(struct platform_profile_handler *pprof,
return 0;
}
-static int hp_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
+static int hp_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
{
if (is_omen_thermal_profile()) {
- set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
+ set_bit(PLATFORM_PROFILE_COOL, choices);
} else if (is_victus_thermal_profile()) {
- set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
} else {
- set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
- set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
+ set_bit(PLATFORM_PROFILE_QUIET, choices);
+ set_bit(PLATFORM_PROFILE_COOL, choices);
}
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index 55aac0190624..1937a2f00bec 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;
@@ -1023,11 +1023,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
return -EINTR;
}
-static int dytc_profile_choices(struct platform_profile_handler *pprof)
+static int dytc_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
index 9e2f24de0207..3d45df807b8b 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;
@@ -164,11 +164,11 @@ static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
return 0;
}
-static int inspur_platform_profile_choices(struct platform_profile_handler *pprof)
+static int inspur_platform_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 964f842ef756..2e9740b7e328 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;
@@ -10539,11 +10539,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
return err;
}
-static int dytc_profile_choices(struct platform_profile_handler *pprof)
+static int dytc_profile_choices(void *drvdata, unsigned long *choices)
{
- set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
- set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
- set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
+ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
return 0;
}
diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
index 97ce9bd476ab..0824a12b9998 100644
--- a/include/linux/platform_profile.h
+++ b/include/linux/platform_profile.h
@@ -31,11 +31,9 @@ enum platform_profile_option {
struct platform_profile_handler;
struct platform_profile_ops {
- 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 (*choices)(struct platform_profile_handler *pprof);
+ int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
+ int (*profile_set)(struct device *dev, enum platform_profile_option profile);
+ int (*choices)(void *drvdata, unsigned long *choices);
};
struct platform_profile_handler {
--
2.47.1
On 1/9/2025 09:06, 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.
>
If not too hard; could you bring this earlier in the series?
If so it would avoid some ping-ponging on some of the files from when
you introduced the choices callback.
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
> drivers/acpi/platform_profile.c | 6 ++--
> .../surface/surface_platform_profile.c | 18 ++++++------
> drivers/platform/x86/acer-wmi.c | 16 +++++------
> drivers/platform/x86/amd/pmf/sps.c | 16 +++++------
> drivers/platform/x86/asus-wmi.c | 16 +++++------
> drivers/platform/x86/dell/alienware-wmi.c | 12 ++++----
> drivers/platform/x86/dell/dell-pc.c | 14 +++++-----
> drivers/platform/x86/hp/hp-wmi.c | 28 +++++++++----------
> drivers/platform/x86/ideapad-laptop.c | 16 +++++------
> .../platform/x86/inspur_platform_profile.c | 16 +++++------
> drivers/platform/x86/thinkpad_acpi.c | 12 ++++----
> include/linux/platform_profile.h | 8 ++----
> 12 files changed, 88 insertions(+), 90 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index fdf79b81b62e..8d034d928e32 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -67,7 +67,7 @@ static int _store_class_profile(struct device *dev, void *data)
> if (!test_bit(*bit, handler->choices))
> return -EOPNOTSUPP;
>
> - return handler->ops->profile_set(handler, *bit);
> + return handler->ops->profile_set(dev, *bit);
> }
>
> /**
> @@ -104,7 +104,7 @@ static int get_class_profile(struct device *dev,
>
> lockdep_assert_held(&profile_lock);
> handler = to_pprof_handler(dev);
> - err = handler->ops->profile_get(handler, &val);
> + err = handler->ops->profile_get(dev, &val);
> if (err) {
> pr_err("Failed to get profile for handler %s\n", handler->name);
> return err;
> @@ -490,7 +490,7 @@ struct device *platform_profile_register(struct device *dev, const char *name,
> if (!pprof)
> return ERR_PTR(-ENOMEM);
>
> - err = ops->choices(pprof);
> + err = ops->choices(drvdata, pprof->choices);
> if (err < 0)
> return ERR_PTR(err);
>
> diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> index 965940223892..0d059986cc5c 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)
> @@ -201,12 +201,12 @@ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
> return tp;
> }
>
> -static int ssam_platform_profile_choices(struct platform_profile_handler *pprof)
> +static int ssam_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->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;
> }
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 2059b29dd36b..2900ba060cc4 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -1827,7 +1827,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;
> @@ -1862,7 +1862,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 tp;
> @@ -1901,13 +1901,13 @@ acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
> }
>
> static int
> -acer_predator_v4_platform_profile_choices(struct platform_profile_handler *pprof)
> +acer_predator_v4_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> index e8d2de9bb646..700a6ef39201 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;
> @@ -387,11 +387,11 @@ static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int amd_pmf_profile_choices(struct platform_profile_handler *pprof)
> +static int amd_pmf_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 809ab0353b68..11e5fcecf3a4 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:
> @@ -3852,11 +3852,11 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
> return throttle_thermal_policy_write(asus);
> }
>
> -static int asus_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
> +static int asus_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> index 1eaa746eb4f1..19b7cd95018c 100644
> --- a/drivers/platform/x86/dell/alienware-wmi.c
> +++ b/drivers/platform/x86/dell/alienware-wmi.c
> @@ -1055,7 +1055,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;
> @@ -1081,7 +1081,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) {
> @@ -1107,7 +1107,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,
> return wmax_thermal_control(supported_thermal_profiles[profile]);
> }
>
> -static int thermal_profile_choices(struct platform_profile_handler *pprof)
> +static int thermal_profile_choices(void *drvdata, unsigned long *choices)
> {
> u32 out_data;
> u8 sys_desc[4];
> @@ -1140,17 +1140,17 @@ static int thermal_profile_choices(struct platform_profile_handler *pprof)
> profile = wmax_mode_to_platform_profile[mode];
> supported_thermal_profiles[profile] = out_data;
>
> - set_bit(profile, pprof->choices);
> + set_bit(profile, choices);
> }
>
> - if (bitmap_empty(pprof->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, pprof->choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> }
>
> return 0;
> diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> index 4ff80ed4f157..1ba2e58451e1 100644
> --- a/drivers/platform/x86/dell/dell-pc.c
> +++ b/drivers/platform/x86/dell/dell-pc.c
> @@ -184,7 +184,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) {
> @@ -201,7 +201,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;
> @@ -230,16 +230,16 @@ static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int thermal_platform_profile_choices(struct platform_profile_handler *pprof)
> +static int thermal_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> if (supported_modes & DELL_QUIET)
> - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> if (supported_modes & DELL_COOL_BOTTOM)
> - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> if (supported_modes & DELL_BALANCED)
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> if (supported_modes & DELL_PERFORMANCE)
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 1b9e176f8d6f..3849cf761a46 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;
> @@ -1488,19 +1488,19 @@ static int platform_profile_victus_set(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int hp_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
> +static int hp_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> if (is_omen_thermal_profile()) {
> - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> } else if (is_victus_thermal_profile()) {
> - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> } else {
> - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> + set_bit(PLATFORM_PROFILE_QUIET, choices);
> + set_bit(PLATFORM_PROFILE_COOL, choices);
> }
>
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index 55aac0190624..1937a2f00bec 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;
> @@ -1023,11 +1023,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
> return -EINTR;
> }
>
> -static int dytc_profile_choices(struct platform_profile_handler *pprof)
> +static int dytc_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> index 9e2f24de0207..3d45df807b8b 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;
>
> @@ -164,11 +164,11 @@ static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
> return 0;
> }
>
> -static int inspur_platform_profile_choices(struct platform_profile_handler *pprof)
> +static int inspur_platform_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 964f842ef756..2e9740b7e328 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;
> @@ -10539,11 +10539,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
> return err;
> }
>
> -static int dytc_profile_choices(struct platform_profile_handler *pprof)
> +static int dytc_profile_choices(void *drvdata, unsigned long *choices)
> {
> - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>
> return 0;
> }
> diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> index 97ce9bd476ab..0824a12b9998 100644
> --- a/include/linux/platform_profile.h
> +++ b/include/linux/platform_profile.h
> @@ -31,11 +31,9 @@ enum platform_profile_option {
> struct platform_profile_handler;
>
> struct platform_profile_ops {
> - 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 (*choices)(struct platform_profile_handler *pprof);
> + int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
> + int (*profile_set)(struct device *dev, enum platform_profile_option profile);
> + int (*choices)(void *drvdata, unsigned long *choices);
> };
>
> struct platform_profile_handler {
On Thu, Jan 09, 2025 at 10:42:01AM -0600, Mario Limonciello wrote:
> On 1/9/2025 09:06, 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.
> >
> If not too hard; could you bring this earlier in the series?
>
> If so it would avoid some ping-ponging on some of the files from when you
> introduced the choices callback.
Sure! This can be moved to 5/18 with some modifications.
>
> > Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> > ---
> > drivers/acpi/platform_profile.c | 6 ++--
> > .../surface/surface_platform_profile.c | 18 ++++++------
> > drivers/platform/x86/acer-wmi.c | 16 +++++------
> > drivers/platform/x86/amd/pmf/sps.c | 16 +++++------
> > drivers/platform/x86/asus-wmi.c | 16 +++++------
> > drivers/platform/x86/dell/alienware-wmi.c | 12 ++++----
> > drivers/platform/x86/dell/dell-pc.c | 14 +++++-----
> > drivers/platform/x86/hp/hp-wmi.c | 28 +++++++++----------
> > drivers/platform/x86/ideapad-laptop.c | 16 +++++------
> > .../platform/x86/inspur_platform_profile.c | 16 +++++------
> > drivers/platform/x86/thinkpad_acpi.c | 12 ++++----
> > include/linux/platform_profile.h | 8 ++----
> > 12 files changed, 88 insertions(+), 90 deletions(-)
> >
> > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> > index fdf79b81b62e..8d034d928e32 100644
> > --- a/drivers/acpi/platform_profile.c
> > +++ b/drivers/acpi/platform_profile.c
> > @@ -67,7 +67,7 @@ static int _store_class_profile(struct device *dev, void *data)
> > if (!test_bit(*bit, handler->choices))
> > return -EOPNOTSUPP;
> > - return handler->ops->profile_set(handler, *bit);
> > + return handler->ops->profile_set(dev, *bit);
> > }
> > /**
> > @@ -104,7 +104,7 @@ static int get_class_profile(struct device *dev,
> > lockdep_assert_held(&profile_lock);
> > handler = to_pprof_handler(dev);
> > - err = handler->ops->profile_get(handler, &val);
> > + err = handler->ops->profile_get(dev, &val);
> > if (err) {
> > pr_err("Failed to get profile for handler %s\n", handler->name);
> > return err;
> > @@ -490,7 +490,7 @@ struct device *platform_profile_register(struct device *dev, const char *name,
> > if (!pprof)
> > return ERR_PTR(-ENOMEM);
> > - err = ops->choices(pprof);
> > + err = ops->choices(drvdata, pprof->choices);
> > if (err < 0)
> > return ERR_PTR(err);
> > diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
> > index 965940223892..0d059986cc5c 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)
> > @@ -201,12 +201,12 @@ static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
> > return tp;
> > }
> > -static int ssam_platform_profile_choices(struct platform_profile_handler *pprof)
> > +static int ssam_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->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;
> > }
> > diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> > index 2059b29dd36b..2900ba060cc4 100644
> > --- a/drivers/platform/x86/acer-wmi.c
> > +++ b/drivers/platform/x86/acer-wmi.c
> > @@ -1827,7 +1827,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;
> > @@ -1862,7 +1862,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 tp;
> > @@ -1901,13 +1901,13 @@ acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
> > }
> > static int
> > -acer_predator_v4_platform_profile_choices(struct platform_profile_handler *pprof)
> > +acer_predator_v4_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_QUIET, choices);
> > + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/amd/pmf/sps.c b/drivers/platform/x86/amd/pmf/sps.c
> > index e8d2de9bb646..700a6ef39201 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;
> > @@ -387,11 +387,11 @@ static int amd_pmf_profile_set(struct platform_profile_handler *pprof,
> > return 0;
> > }
> > -static int amd_pmf_profile_choices(struct platform_profile_handler *pprof)
> > +static int amd_pmf_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> > index 809ab0353b68..11e5fcecf3a4 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:
> > @@ -3852,11 +3852,11 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof,
> > return throttle_thermal_policy_write(asus);
> > }
> > -static int asus_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
> > +static int asus_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_QUIET, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
> > index 1eaa746eb4f1..19b7cd95018c 100644
> > --- a/drivers/platform/x86/dell/alienware-wmi.c
> > +++ b/drivers/platform/x86/dell/alienware-wmi.c
> > @@ -1055,7 +1055,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;
> > @@ -1081,7 +1081,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) {
> > @@ -1107,7 +1107,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,
> > return wmax_thermal_control(supported_thermal_profiles[profile]);
> > }
> > -static int thermal_profile_choices(struct platform_profile_handler *pprof)
> > +static int thermal_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > u32 out_data;
> > u8 sys_desc[4];
> > @@ -1140,17 +1140,17 @@ static int thermal_profile_choices(struct platform_profile_handler *pprof)
> > profile = wmax_mode_to_platform_profile[mode];
> > supported_thermal_profiles[profile] = out_data;
> > - set_bit(profile, pprof->choices);
> > + set_bit(profile, choices);
> > }
> > - if (bitmap_empty(pprof->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, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > }
> > return 0;
> > diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
> > index 4ff80ed4f157..1ba2e58451e1 100644
> > --- a/drivers/platform/x86/dell/dell-pc.c
> > +++ b/drivers/platform/x86/dell/dell-pc.c
> > @@ -184,7 +184,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) {
> > @@ -201,7 +201,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;
> > @@ -230,16 +230,16 @@ static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
> > return 0;
> > }
> > -static int thermal_platform_profile_choices(struct platform_profile_handler *pprof)
> > +static int thermal_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > if (supported_modes & DELL_QUIET)
> > - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_QUIET, choices);
> > if (supported_modes & DELL_COOL_BOTTOM)
> > - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_COOL, choices);
> > if (supported_modes & DELL_BALANCED)
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > if (supported_modes & DELL_PERFORMANCE)
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> > index 1b9e176f8d6f..3849cf761a46 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;
> > @@ -1488,19 +1488,19 @@ static int platform_profile_victus_set(struct platform_profile_handler *pprof,
> > return 0;
> > }
> > -static int hp_wmi_platform_profile_choices(struct platform_profile_handler *pprof)
> > +static int hp_wmi_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > if (is_omen_thermal_profile()) {
> > - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_COOL, choices);
> > } else if (is_victus_thermal_profile()) {
> > - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_QUIET, choices);
> > } else {
> > - set_bit(PLATFORM_PROFILE_QUIET, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_COOL, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_QUIET, choices);
> > + set_bit(PLATFORM_PROFILE_COOL, choices);
> > }
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> > index 55aac0190624..1937a2f00bec 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;
> > @@ -1023,11 +1023,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
> > return -EINTR;
> > }
> > -static int dytc_profile_choices(struct platform_profile_handler *pprof)
> > +static int dytc_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/inspur_platform_profile.c b/drivers/platform/x86/inspur_platform_profile.c
> > index 9e2f24de0207..3d45df807b8b 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;
> > @@ -164,11 +164,11 @@ static int inspur_platform_profile_get(struct platform_profile_handler *pprof,
> > return 0;
> > }
> > -static int inspur_platform_profile_choices(struct platform_profile_handler *pprof)
> > +static int inspur_platform_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> > index 964f842ef756..2e9740b7e328 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;
> > @@ -10539,11 +10539,11 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
> > return err;
> > }
> > -static int dytc_profile_choices(struct platform_profile_handler *pprof)
> > +static int dytc_profile_choices(void *drvdata, unsigned long *choices)
> > {
> > - set_bit(PLATFORM_PROFILE_LOW_POWER, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_BALANCED, pprof->choices);
> > - set_bit(PLATFORM_PROFILE_PERFORMANCE, pprof->choices);
> > + set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
> > + set_bit(PLATFORM_PROFILE_BALANCED, choices);
> > + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
> > return 0;
> > }
> > diff --git a/include/linux/platform_profile.h b/include/linux/platform_profile.h
> > index 97ce9bd476ab..0824a12b9998 100644
> > --- a/include/linux/platform_profile.h
> > +++ b/include/linux/platform_profile.h
> > @@ -31,11 +31,9 @@ enum platform_profile_option {
> > struct platform_profile_handler;
> > struct platform_profile_ops {
> > - 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 (*choices)(struct platform_profile_handler *pprof);
> > + int (*profile_get)(struct device *dev, enum platform_profile_option *profile);
> > + int (*profile_set)(struct device *dev, enum platform_profile_option profile);
> > + int (*choices)(void *drvdata, unsigned long *choices);
> > };
> > struct platform_profile_handler {
>
© 2016 - 2025 Red Hat, Inc.