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

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>
Reviewed-by: Armin Wolf <W_Armin@gmx.de>
Link: https://lore.kernel.org/r/20250528-awcc-labels-v1-1-6aa39d8e4c3d@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Kurt Borja 2025-05-28 07:47:22 -03:00 committed by Ilpo Järvinen
parent 19272b37aa
commit 844d8e4c7f
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -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;