Message ID | 20250208051614.10644-7-kuurtb@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | HWMON support + DebugFS + Improvements | expand |
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 --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); }
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(-)