[PATCH] platform/x86: alienware-wmi-wmax: Add appropriate labels to fans

Kurt Borja posted 1 patch 6 months, 3 weeks ago
drivers/platform/x86/dell/alienware-wmi-wmax.c | 100 ++++++++++++++++---------
1 file changed, 63 insertions(+), 37 deletions(-)
[PATCH] platform/x86: alienware-wmi-wmax: Add appropriate labels to fans
Posted by Kurt Borja 6 months, 3 weeks ago
Add known fan type IDs and match them to an appropriate label in
awcc_hwmon_read_string().

Additionally, add the AWCC_TEMP_SENSOR_FRONT type, which was inferred
from it's related fan type in supported systems.

Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
 drivers/platform/x86/dell/alienware-wmi-wmax.c | 100 ++++++++++++++++---------
 1 file changed, 63 insertions(+), 37 deletions(-)

diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c
index c42f9228b0b255fe962b735ac96486824e83945f..b25eb3225d8e5385384880a9cb480aaf3cb4d0a8 100644
--- a/drivers/platform/x86/dell/alienware-wmi-wmax.c
+++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c
@@ -273,9 +273,29 @@ enum AWCC_SPECIAL_THERMAL_CODES {
 
 enum AWCC_TEMP_SENSOR_TYPES {
 	AWCC_TEMP_SENSOR_CPU			= 0x01,
+	AWCC_TEMP_SENSOR_FRONT			= 0x03,
 	AWCC_TEMP_SENSOR_GPU			= 0x06,
 };
 
+enum AWCC_FAN_TYPES {
+	AWCC_FAN_CPU_1				= 0x32,
+	AWCC_FAN_GPU_1				= 0x33,
+	AWCC_FAN_PCI				= 0x34,
+	AWCC_FAN_MID				= 0x35,
+	AWCC_FAN_TOP_1				= 0x36,
+	AWCC_FAN_SIDE				= 0x37,
+	AWCC_FAN_U2_1				= 0x38,
+	AWCC_FAN_U2_2				= 0x39,
+	AWCC_FAN_FRONT_1			= 0x3A,
+	AWCC_FAN_CPU_2				= 0x3B,
+	AWCC_FAN_GPU_2				= 0x3C,
+	AWCC_FAN_TOP_2				= 0x3D,
+	AWCC_FAN_TOP_3				= 0x3E,
+	AWCC_FAN_FRONT_2			= 0x3F,
+	AWCC_FAN_BOTTOM_1			= 0x40,
+	AWCC_FAN_BOTTOM_2			= 0x41,
+};
+
 enum awcc_thermal_profile {
 	AWCC_PROFILE_USTT_BALANCED,
 	AWCC_PROFILE_USTT_BALANCED_PERFORMANCE,
@@ -314,7 +334,6 @@ struct wmax_u32_args {
 
 struct awcc_fan_data {
 	unsigned long auto_channels_temp;
-	const char *label;
 	u32 min_rpm;
 	u32 max_rpm;
 	u8 suspend_cache;
@@ -896,6 +915,9 @@ static int awcc_hwmon_read_string(struct device *dev, enum hwmon_sensor_types ty
 		case AWCC_TEMP_SENSOR_CPU:
 			*str = "CPU";
 			break;
+		case AWCC_TEMP_SENSOR_FRONT:
+			*str = "Front";
+			break;
 		case AWCC_TEMP_SENSOR_GPU:
 			*str = "GPU";
 			break;
@@ -906,7 +928,46 @@ static int awcc_hwmon_read_string(struct device *dev, enum hwmon_sensor_types ty
 
 		break;
 	case hwmon_fan:
-		*str = priv->fan_data[channel]->label;
+		switch (priv->fan_data[channel]->id) {
+		case AWCC_FAN_CPU_1:
+		case AWCC_FAN_CPU_2:
+			*str = "CPU Fan";
+			break;
+		case AWCC_FAN_GPU_1:
+		case AWCC_FAN_GPU_2:
+			*str = "GPU Fan";
+			break;
+		case AWCC_FAN_PCI:
+			*str = "PCI Fan";
+			break;
+		case AWCC_FAN_MID:
+			*str = "Mid Fan";
+			break;
+		case AWCC_FAN_TOP_1:
+		case AWCC_FAN_TOP_2:
+		case AWCC_FAN_TOP_3:
+			*str = "Top Fan";
+			break;
+		case AWCC_FAN_SIDE:
+			*str = "Side Fan";
+			break;
+		case AWCC_FAN_U2_1:
+		case AWCC_FAN_U2_2:
+			*str = "U.2 Fan";
+			break;
+		case AWCC_FAN_FRONT_1:
+		case AWCC_FAN_FRONT_2:
+			*str = "Front Fan";
+			break;
+		case AWCC_FAN_BOTTOM_1:
+		case AWCC_FAN_BOTTOM_2:
+			*str = "Bottom Fan";
+			break;
+		default:
+			*str = "Unknown Fan";
+			break;
+		}
+
 		break;
 	default:
 		return -EOPNOTSUPP;
@@ -1051,40 +1112,6 @@ static int awcc_hwmon_temps_init(struct wmi_device *wdev)
 	return 0;
 }
 
-static char *awcc_get_fan_label(unsigned long *fan_temps)
-{
-	unsigned int temp_count = bitmap_weight(fan_temps, AWCC_ID_BITMAP_SIZE);
-	char *label;
-	u8 temp_id;
-
-	switch (temp_count) {
-	case 0:
-		label = "Independent Fan";
-		break;
-	case 1:
-		temp_id = find_first_bit(fan_temps, AWCC_ID_BITMAP_SIZE);
-
-		switch (temp_id) {
-		case AWCC_TEMP_SENSOR_CPU:
-			label = "Processor Fan";
-			break;
-		case AWCC_TEMP_SENSOR_GPU:
-			label = "Video Fan";
-			break;
-		default:
-			label = "Unknown Fan";
-			break;
-		}
-
-		break;
-	default:
-		label = "Shared Fan";
-		break;
-	}
-
-	return label;
-}
-
 static int awcc_hwmon_fans_init(struct wmi_device *wdev)
 {
 	struct awcc_priv *priv = dev_get_drvdata(&wdev->dev);
@@ -1138,7 +1165,6 @@ static int awcc_hwmon_fans_init(struct wmi_device *wdev)
 		fan_data->id = id;
 		fan_data->min_rpm = min_rpm;
 		fan_data->max_rpm = max_rpm;
-		fan_data->label = awcc_get_fan_label(fan_temps);
 		bitmap_gather(gather, fan_temps, priv->temp_sensors, AWCC_ID_BITMAP_SIZE);
 		bitmap_copy(&fan_data->auto_channels_temp, gather, BITS_PER_LONG);
 		priv->fan_data[i] = fan_data;

---
base-commit: 9c96808f10d84156b5e98e16176b725ec5a1386f
change-id: 20250528-awcc-labels-372162572ad7
-- 
 ~ Kurt
Re: [PATCH] platform/x86: alienware-wmi-wmax: Add appropriate labels to fans
Posted by Ilpo Järvinen 6 months, 1 week ago
On Wed, 28 May 2025 07:47:22 -0300, Kurt Borja wrote:

> Add known fan type IDs and match them to an appropriate label in
> awcc_hwmon_read_string().
> 
> Additionally, add the AWCC_TEMP_SENSOR_FRONT type, which was inferred
> from it's related fan type in supported systems.
> 
> 
> [...]


Thank you for your contribution, it has been applied to my local
review-ilpo-next branch. Note it will show up in the public
platform-drivers-x86/review-ilpo-next branch only once I've pushed my
local branch there, which might take a while.

The list of commits applied:
[1/1] platform/x86: alienware-wmi-wmax: Add appropriate labels to fans
      commit: 844d8e4c7f9a3eeb681493f12c55de0392510fe3

--
 i.
Re: [PATCH] platform/x86: alienware-wmi-wmax: Add appropriate labels to fans
Posted by Armin Wolf 6 months, 3 weeks ago
Am 28.05.25 um 12:47 schrieb Kurt Borja:

> Add known fan type IDs and match them to an appropriate label in
> awcc_hwmon_read_string().
>
> Additionally, add the AWCC_TEMP_SENSOR_FRONT type, which was inferred
> from it's related fan type in supported systems.

Reviewed-by: Armin Wolf <W_Armin@gmx.de>

> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
>   drivers/platform/x86/dell/alienware-wmi-wmax.c | 100 ++++++++++++++++---------
>   1 file changed, 63 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c
> index c42f9228b0b255fe962b735ac96486824e83945f..b25eb3225d8e5385384880a9cb480aaf3cb4d0a8 100644
> --- a/drivers/platform/x86/dell/alienware-wmi-wmax.c
> +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c
> @@ -273,9 +273,29 @@ enum AWCC_SPECIAL_THERMAL_CODES {
>   
>   enum AWCC_TEMP_SENSOR_TYPES {
>   	AWCC_TEMP_SENSOR_CPU			= 0x01,
> +	AWCC_TEMP_SENSOR_FRONT			= 0x03,
>   	AWCC_TEMP_SENSOR_GPU			= 0x06,
>   };
>   
> +enum AWCC_FAN_TYPES {
> +	AWCC_FAN_CPU_1				= 0x32,
> +	AWCC_FAN_GPU_1				= 0x33,
> +	AWCC_FAN_PCI				= 0x34,
> +	AWCC_FAN_MID				= 0x35,
> +	AWCC_FAN_TOP_1				= 0x36,
> +	AWCC_FAN_SIDE				= 0x37,
> +	AWCC_FAN_U2_1				= 0x38,
> +	AWCC_FAN_U2_2				= 0x39,
> +	AWCC_FAN_FRONT_1			= 0x3A,
> +	AWCC_FAN_CPU_2				= 0x3B,
> +	AWCC_FAN_GPU_2				= 0x3C,
> +	AWCC_FAN_TOP_2				= 0x3D,
> +	AWCC_FAN_TOP_3				= 0x3E,
> +	AWCC_FAN_FRONT_2			= 0x3F,
> +	AWCC_FAN_BOTTOM_1			= 0x40,
> +	AWCC_FAN_BOTTOM_2			= 0x41,
> +};
> +
>   enum awcc_thermal_profile {
>   	AWCC_PROFILE_USTT_BALANCED,
>   	AWCC_PROFILE_USTT_BALANCED_PERFORMANCE,
> @@ -314,7 +334,6 @@ struct wmax_u32_args {
>   
>   struct awcc_fan_data {
>   	unsigned long auto_channels_temp;
> -	const char *label;
>   	u32 min_rpm;
>   	u32 max_rpm;
>   	u8 suspend_cache;
> @@ -896,6 +915,9 @@ static int awcc_hwmon_read_string(struct device *dev, enum hwmon_sensor_types ty
>   		case AWCC_TEMP_SENSOR_CPU:
>   			*str = "CPU";
>   			break;
> +		case AWCC_TEMP_SENSOR_FRONT:
> +			*str = "Front";
> +			break;
>   		case AWCC_TEMP_SENSOR_GPU:
>   			*str = "GPU";
>   			break;
> @@ -906,7 +928,46 @@ static int awcc_hwmon_read_string(struct device *dev, enum hwmon_sensor_types ty
>   
>   		break;
>   	case hwmon_fan:
> -		*str = priv->fan_data[channel]->label;
> +		switch (priv->fan_data[channel]->id) {
> +		case AWCC_FAN_CPU_1:
> +		case AWCC_FAN_CPU_2:
> +			*str = "CPU Fan";
> +			break;
> +		case AWCC_FAN_GPU_1:
> +		case AWCC_FAN_GPU_2:
> +			*str = "GPU Fan";
> +			break;
> +		case AWCC_FAN_PCI:
> +			*str = "PCI Fan";
> +			break;
> +		case AWCC_FAN_MID:
> +			*str = "Mid Fan";
> +			break;
> +		case AWCC_FAN_TOP_1:
> +		case AWCC_FAN_TOP_2:
> +		case AWCC_FAN_TOP_3:
> +			*str = "Top Fan";
> +			break;
> +		case AWCC_FAN_SIDE:
> +			*str = "Side Fan";
> +			break;
> +		case AWCC_FAN_U2_1:
> +		case AWCC_FAN_U2_2:
> +			*str = "U.2 Fan";
> +			break;
> +		case AWCC_FAN_FRONT_1:
> +		case AWCC_FAN_FRONT_2:
> +			*str = "Front Fan";
> +			break;
> +		case AWCC_FAN_BOTTOM_1:
> +		case AWCC_FAN_BOTTOM_2:
> +			*str = "Bottom Fan";
> +			break;
> +		default:
> +			*str = "Unknown Fan";
> +			break;
> +		}
> +
>   		break;
>   	default:
>   		return -EOPNOTSUPP;
> @@ -1051,40 +1112,6 @@ static int awcc_hwmon_temps_init(struct wmi_device *wdev)
>   	return 0;
>   }
>   
> -static char *awcc_get_fan_label(unsigned long *fan_temps)
> -{
> -	unsigned int temp_count = bitmap_weight(fan_temps, AWCC_ID_BITMAP_SIZE);
> -	char *label;
> -	u8 temp_id;
> -
> -	switch (temp_count) {
> -	case 0:
> -		label = "Independent Fan";
> -		break;
> -	case 1:
> -		temp_id = find_first_bit(fan_temps, AWCC_ID_BITMAP_SIZE);
> -
> -		switch (temp_id) {
> -		case AWCC_TEMP_SENSOR_CPU:
> -			label = "Processor Fan";
> -			break;
> -		case AWCC_TEMP_SENSOR_GPU:
> -			label = "Video Fan";
> -			break;
> -		default:
> -			label = "Unknown Fan";
> -			break;
> -		}
> -
> -		break;
> -	default:
> -		label = "Shared Fan";
> -		break;
> -	}
> -
> -	return label;
> -}
> -
>   static int awcc_hwmon_fans_init(struct wmi_device *wdev)
>   {
>   	struct awcc_priv *priv = dev_get_drvdata(&wdev->dev);
> @@ -1138,7 +1165,6 @@ static int awcc_hwmon_fans_init(struct wmi_device *wdev)
>   		fan_data->id = id;
>   		fan_data->min_rpm = min_rpm;
>   		fan_data->max_rpm = max_rpm;
> -		fan_data->label = awcc_get_fan_label(fan_temps);
>   		bitmap_gather(gather, fan_temps, priv->temp_sensors, AWCC_ID_BITMAP_SIZE);
>   		bitmap_copy(&fan_data->auto_channels_temp, gather, BITS_PER_LONG);
>   		priv->fan_data[i] = fan_data;
>
> ---
> base-commit: 9c96808f10d84156b5e98e16176b725ec5a1386f
> change-id: 20250528-awcc-labels-372162572ad7