All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kurt Borja <kuurtb@gmail.com>
To: platform-driver-x86@vger.kernel.org
Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de,
	mario.limonciello@amd.com, hdegoede@redhat.com,
	Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org,
	Kurt Borja <kuurtb@gmail.com>, Armin Wolf <W_Armin@gmx.de>
Subject: [PATCH v3 09/20] platform/x86: alienware-wmi: Add a state container for thermal control methods
Date: Sun,  5 Jan 2025 10:30:09 -0500	[thread overview]
Message-ID: <20250105153019.19206-11-kuurtb@gmail.com> (raw)
In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com>

Refactor all thermal control methods to use the newly defined awcc_priv
state container instead of global variables.

Reviewed-by: Armin Wolf <W_Armin@gmx.de>
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
 drivers/platform/x86/dell/alienware-wmi.c | 50 ++++++++++++++++-------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index d7b322be6c19..da8a9592b1da 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -403,6 +403,12 @@ struct wmax_u32_args {
 	u8 arg3;
 };
 
+struct awcc_priv {
+	struct wmi_device *wdev;
+	struct platform_profile_handler pp_handler;
+	enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST];
+};
+
 struct alienfx_priv {
 	struct platform_device *pdev;
 	struct led_classdev global_led;
@@ -415,9 +421,6 @@ struct alienfx_platdata {
 	struct wmi_device *wdev;
 };
 
-static struct platform_profile_handler pp_handler;
-static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST];
-
 static u8 interface;
 
 /*
@@ -1047,6 +1050,8 @@ static int thermal_profile_get(struct platform_profile_handler *pprof,
 static int thermal_profile_set(struct platform_profile_handler *pprof,
 			       enum platform_profile_option profile)
 {
+	struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler);
+
 	if (quirks->gmode) {
 		u32 gmode_status;
 		int ret;
@@ -1067,11 +1072,12 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,
 		}
 	}
 
-	return wmax_thermal_control(supported_thermal_profiles[profile]);
+	return wmax_thermal_control(priv->supported_thermal_profiles[profile]);
 }
 
 static int create_thermal_profile(struct wmi_device *wdev)
 {
+	struct awcc_priv *priv = dev_get_drvdata(&wdev->dev);
 	enum platform_profile_option profile;
 	enum wmax_thermal_mode mode;
 	u8 sys_desc[4];
@@ -1101,27 +1107,41 @@ static int create_thermal_profile(struct wmi_device *wdev)
 
 		mode = out_data & WMAX_THERMAL_MODE_MASK;
 		profile = wmax_mode_to_platform_profile[mode];
-		supported_thermal_profiles[profile] = out_data;
+		priv->supported_thermal_profiles[profile] = out_data;
 
-		set_bit(profile, pp_handler.choices);
+		set_bit(profile, priv->pp_handler.choices);
 	}
 
-	if (bitmap_empty(pp_handler.choices, PLATFORM_PROFILE_LAST))
+	if (bitmap_empty(priv->pp_handler.choices, PLATFORM_PROFILE_LAST))
 		return -ENODEV;
 
 	if (quirks->gmode) {
-		supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =
+		priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =
 			WMAX_THERMAL_MODE_GMODE;
 
-		set_bit(PLATFORM_PROFILE_PERFORMANCE, pp_handler.choices);
+		set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->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 = &wdev->dev;
+	priv->pp_handler.profile_get = thermal_profile_get;
+	priv->pp_handler.profile_set = thermal_profile_set;
+	priv->pp_handler.name = "alienware-wmi";
+	priv->pp_handler.dev = &wdev->dev;
+
+	return devm_platform_profile_register(&priv->pp_handler);
+}
+
+static int alienware_awcc_setup(struct wmi_device *wdev)
+{
+	struct awcc_priv *priv;
+
+	priv = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	dev_set_drvdata(&wdev->dev, priv);
+	priv->wdev = wdev;
 
-	return devm_platform_profile_register(&pp_handler);
+	return create_thermal_profile(wdev);
 }
 
 /*
@@ -1259,7 +1279,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context)
 	int ret;
 
 	if (quirks->thermal) {
-		return create_thermal_profile(wdev);
+		return alienware_awcc_setup(wdev);
 	} else {
 		ret = alienware_alienfx_setup(&pdata);
 		if (ret < 0)
-- 
2.47.1


  parent reply	other threads:[~2025-01-05 15:31 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-05 15:30 [PATCH v3 00/20] platform/x86: alienware-wmi driver rework Kurt Borja
2025-01-05 15:30 ` [PATCH v3 01/20] platform/x86: alienware-wmi: Remove unnecessary check at module exit Kurt Borja
2025-01-05 15:30 ` [PATCH v3 02/20] platform/x86: alienware-wmi: Move Lighting Control State Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 03/20] platform/x86: alienware-wmi: Modify parse_rgb() signature Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 04/20] platform/x86: alienware-wmi: Improve hdmi_mux, amplifier and deepslp group creation Kurt Borja
2025-01-05 15:30 ` [PATCH v3 05/20] platform/x86: alienware-wmi: Improve rgb-zones " Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 06/20] platform/x86: alienware_wmi: General cleanup of WMAX methods Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-08 12:10   ` Ilpo Järvinen
2025-01-08 13:16     ` Kurt Borja
2025-01-05 15:30 ` [PATCH v3 07/20] platform/x86: alienware-wmi: Add a state container for LED control feature Kurt Borja
2025-01-05 15:30 ` [PATCH v3 08/20] platform/x86: alienware-wmi: Add WMI Drivers Kurt Borja
2025-01-05 15:30 ` Kurt Borja [this message]
2025-01-05 15:30 ` [PATCH v3 10/20] platform/x86: alienware-wmi: Refactor LED control methods Kurt Borja
2025-01-05 15:30 ` [PATCH v3 11/20] platform/x86: alienware-wmi: Refactor hdmi, amplifier, deepslp methods Kurt Borja
2025-01-05 15:30 ` [PATCH v3 12/20] platform/x86: alienware-wmi: Refactor thermal control methods Kurt Borja
2025-01-07 21:29   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 13/20] platform/x86: alienware-wmi: Split DMI table Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 14/20] MAINTAINERS: Update ALIENWARE WMI DRIVER entry Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 15/20] platform/x86: Rename alienware-wmi.c Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 16/20] platform/x86: Add alienware-wmi.h Kurt Borja
2025-01-05 19:44   ` kernel test robot
2025-01-05 15:30 ` [PATCH v3 17/20] platform/x86: Split the alienware-wmi driver Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 18/20] platform/x86: dell: Modify Makefile alignment Kurt Borja
2025-01-07 21:29   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 19/20] platform/x86: Update alienware-wmi config entries Kurt Borja
2025-01-07 21:29   ` Mario Limonciello
2025-01-05 15:30 ` [PATCH v3 20/20] platform/x86: alienware-wmi: Update header and module information Kurt Borja
2025-01-07 21:30   ` Mario Limonciello
2025-01-07 23:55     ` Kurt Borja
2025-01-16 22:39 ` [PATCH v3 00/20] platform/x86: alienware-wmi driver rework Armin Wolf
2025-01-17  4:33   ` Kurt Borja

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20250105153019.19206-11-kuurtb@gmail.com \
    --to=kuurtb@gmail.com \
    --cc=Dell.Client.Kernel@dell.com \
    --cc=hdegoede@redhat.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=w_armin@gmx.de \
    /path/to/YOUR_REPLY

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

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