Re: [PATCH v6 06/12] platform/x86: alienware-wmi-wmax: Add support for the "custom" thermal profile
From: Ilpo Järvinen
Date: Fri Mar 28 2025 - 11:06:29 EST
On Thu, 13 Mar 2025, Kurt Borja wrote:
> 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@xxxxxx>
> Signed-off-by: Kurt Borja <kuurtb@xxxxxxxxx>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
--
i.
> ---
> drivers/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 0530f25b956f73f47c0354f40dac2910448c894e..3b37e4456482bc284b8e867c1c5b6255fc6c8ef2 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)
> @@ -177,6 +175,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,
> @@ -589,9 +592,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))
> @@ -679,11 +688,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;
> }
>
>
>