diff mbox series

[06/10] platform/x86: alienware-wmi-wmax: Add support for the "custom" thermal profile

Message ID 20250208051614.10644-7-kuurtb@gmail.com (mailing list archive)
State New
Headers show
Series HWMON support + DebugFS + Improvements | expand

Commit Message

Kurt Borja Feb. 8, 2025, 5:16 a.m. UTC
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@gmail.com>
---
 .../platform/x86/dell/alienware-wmi-wmax.c    | 23 +++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

Comments

Armin Wolf Feb. 16, 2025, 5:59 a.m. UTC | #1
Am 08.02.25 um 06:16 schrieb Kurt Borja:

> 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.

Reviewed-by: Armin Wolf <W_Armin@gmx.de>

> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
>   .../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 e8fe16da036a..0d31156f43bb 100644
> --- a/drivers/platform/x86/dell/alienware-wmi-wmax.c
> +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c
> @@ -30,8 +30,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)
> @@ -174,6 +172,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,
> @@ -576,9 +579,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))
> @@ -666,9 +675,15 @@ static int awcc_platform_profile_probe(void *drvdata, unsigned long *choices)
>   	if (bitmap_empty(choices, PLATFORM_PROFILE_LAST))
>   		return -ENODEV;
>
> +	/* Every model supports the "custom" profile */
> +	priv->supported_profiles[PLATFORM_PROFILE_CUSTOM] =
> +		AWCC_SPECIAL_PROFILE_CUSTOM;
> +
> +	set_bit(PLATFORM_PROFILE_CUSTOM, choices);
> +
>   	if (awcc->gmode) {
>   		priv->supported_profiles[PLATFORM_PROFILE_PERFORMANCE] =
> -			AWCC_THERMAL_MODE_GMODE;
> +			AWCC_SPECIAL_PROFILE_GMODE;
>
>   		set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
>   	}
diff mbox series

Patch

diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c
index e8fe16da036a..0d31156f43bb 100644
--- a/drivers/platform/x86/dell/alienware-wmi-wmax.c
+++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c
@@ -30,8 +30,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)
@@ -174,6 +172,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,
@@ -576,9 +579,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))
@@ -666,9 +675,15 @@  static int awcc_platform_profile_probe(void *drvdata, unsigned long *choices)
 	if (bitmap_empty(choices, PLATFORM_PROFILE_LAST))
 		return -ENODEV;
 
+	/* Every model supports the "custom" profile */
+	priv->supported_profiles[PLATFORM_PROFILE_CUSTOM] =
+		AWCC_SPECIAL_PROFILE_CUSTOM;
+
+	set_bit(PLATFORM_PROFILE_CUSTOM, choices);
+
 	if (awcc->gmode) {
 		priv->supported_profiles[PLATFORM_PROFILE_PERFORMANCE] =
-			AWCC_THERMAL_MODE_GMODE;
+			AWCC_SPECIAL_PROFILE_GMODE;
 
 		set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
 	}