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 > Signed-off-by: Kurt Borja Reviewed-by: Ilpo Järvinen -- 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; > } > > >