Unverified Commit 3dde0ae1 authored by Kurt Borja's avatar Kurt Borja Committed by Ilpo Järvinen
Browse files

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: default avatarArmin Wolf <W_Armin@gmx.de>
Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarKurt Borja <kuurtb@gmail.com>
Link: https://lore.kernel.org/r/20250329-hwm-v7-6-a14ea39d8a94@gmail.com


Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent 32b6372d
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -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;
}