From: Kurt Borja Date: Sat, 29 Mar 2025 07:32:23 +0000 (-0300) Subject: platform/x86: alienware-wmi-wmax: Add support for the "custom" thermal profile X-Git-Tag: v6.16-rc1~125^2~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3dde0ae1eb5f00c1d61959d1fcce2b1b46ccc199;p=thirdparty%2Flinux.git 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. Reviewed-by: Armin Wolf Reviewed-by: Ilpo Järvinen Signed-off-by: Kurt Borja Link: https://lore.kernel.org/r/20250329-hwm-v7-6-a14ea39d8a94@gmail.com Signed-off-by: Ilpo Järvinen --- diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c index cd4234a282cbd..5bf8264a1063b 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 @@ -179,6 +177,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, @@ -599,9 +602,15 @@ static int awcc_platform_profile_get(struct device *dev, if (ret) 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)) @@ -686,11 +695,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; }