[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250225222500.23535-7-kuurtb@gmail.com>
Date: Tue, 25 Feb 2025 17:24:56 -0500
From: Kurt Borja <kuurtb@...il.com>
To: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>,
"Armin Wolf" <W_Armin@....de>
Cc: platform-driver-x86@...r.kernel.org,
"Hans de Goede" <hdegoede@...hat.com>,
Dell.Client.Kernel@...l.com,
linux-kernel@...r.kernel.org,
Kurt Borja <kuurtb@...il.com>
Subject: [PATCH v2 06/10] platform/x86: alienware-wmi-wmax: Add support for the "custom" thermal profile
All models with the "AWCC" WMAX device support a "custom" thermal
profile. In some models this profile signals user-space that the user
wants to manually control the fans, which are always unlocked. In other
models it actually unlocks manual fan control.
Signed-off-by: Kurt Borja <kuurtb@...il.com>
Reviewed-by: Armin Wolf <W_Armin@....de>
---
.../platform/x86/dell/alienware-wmi-wmax.c | 23 +++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c
index 965b427f8f0a..bbe87f91fcb6 100644
--- a/drivers/platform/x86/dell/alienware-wmi-wmax.c
+++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c
@@ -29,8 +29,6 @@
#define AWCC_METHOD_THERMAL_CONTROL 0x15
#define AWCC_METHOD_GAME_SHIFT_STATUS 0x25
-#define AWCC_THERMAL_MODE_GMODE 0xAB
-
#define AWCC_FAILURE_CODE 0xFFFFFFFF
#define AWCC_FAILURE_CODE_2 0xFFFFFFFE
#define AWCC_THERMAL_TABLE_MASK GENMASK(7, 4)
@@ -176,6 +174,11 @@ enum AWCC_THERMAL_TABLES {
AWCC_THERMAL_TABLE_USTT = 0xA,
};
+enum AWCC_SPECIAL_THERMAL_CODES {
+ AWCC_SPECIAL_PROFILE_CUSTOM = 0x00,
+ AWCC_SPECIAL_PROFILE_GMODE = 0xAB,
+};
+
enum awcc_thermal_profile {
AWCC_PROFILE_USTT_BALANCED,
AWCC_PROFILE_USTT_BALANCED_PERFORMANCE,
@@ -578,9 +581,15 @@ static int awcc_platform_profile_get(struct device *dev,
if (ret < 0)
return ret;
- if (out_data == AWCC_THERMAL_MODE_GMODE) {
+ switch (out_data) {
+ case AWCC_SPECIAL_PROFILE_CUSTOM:
+ *profile = PLATFORM_PROFILE_CUSTOM;
+ return 0;
+ case AWCC_SPECIAL_PROFILE_GMODE:
*profile = PLATFORM_PROFILE_PERFORMANCE;
return 0;
+ default:
+ break;
}
if (!is_awcc_thermal_profile_id(out_data))
@@ -670,11 +679,17 @@ static int awcc_platform_profile_probe(void *drvdata, unsigned long *choices)
if (awcc->gmode) {
priv->supported_profiles[PLATFORM_PROFILE_PERFORMANCE] =
- AWCC_THERMAL_MODE_GMODE;
+ AWCC_SPECIAL_PROFILE_GMODE;
__set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
}
+ /* Every model supports the "custom" profile */
+ priv->supported_profiles[PLATFORM_PROFILE_CUSTOM] =
+ AWCC_SPECIAL_PROFILE_CUSTOM;
+
+ __set_bit(PLATFORM_PROFILE_CUSTOM, choices);
+
return 0;
}
--
2.48.1
Powered by blists - more mailing lists