[Bug 221149] hp-wmi: Fan control fails and RPM always reads as zero on HP OMEN 16-wf1xxx (Board 8C76)

bugzilla-daemon
2026-02-27T12:59:08Z

--- Comment #3 from Krishna Chomal (krishna.chomal108@gmail.com) ---
(In reply to Enderlava from comment #2)
> Hi Krishna,
>
> I successfully applied your patch to the 7.0-rc1 source and recompiled the
> kernel. Here are the test results for Board 8C76:
>
> 1. Registration: success
> `dmesg` shows `hp_wmi: Registered as platform profile handler`. The previous
> ACPI/WMI errors (error 0x6) are completely gone.
>
> 2. Fan Control (Write): success
> Writing 0 to `pwm1_enable` successfully ramps the fans to maximum speed, and
> writing 2 returns them to auto mode. The physical fan control works
> perfectly.
>
> 3. Thermal Profile / Power Limits: success
> Switching to the performance profile successfully raises the PL1 limit to
> 130W, unlocking the CPU:
> Profile: low-power -> PL1: 55 W | PL2: 130 W
> Profile: balanced -> PL1: 55 W | PL2: 130 W
> Profile: performance -> PL1: 130 W | PL2: 130 W
>

Great! I see that you tested AUTO and MAX fan modes, however with recent
improvements you can now use MANUAL mode as well by writing 1 to pwm1_enable
and using pwm1 file for the fan speed (0 being off and 255 being 100%), please
let me know if that works as well.

> 4. Fan RPM Reading (Read): fails
> Although the fans physically spin up and the control works, reading the
> hwmon nodes (`cat fan1_input`) constantly returns 0 RPM.

This is really strange, could you also try the below patch, read from
fan1_input (when you feel that the fans are spinning and the RPM should not be
0) and paste the dmesg logs.

# dmesg | grep hp_wmi

Thanks

diff --git a/drivers/platform/x86/hp/hp-wmi.c
b/drivers/platform/x86/hp/hp-wmi.c
index 304d9ac63c8a..e58c5f0dfe8e 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -185,6 +185,10 @@ static const struct dmi_system_id
victus_s_thermal_profile_boards[] __initconst
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BD5") },
.driver_data = (void *)&victus_s_thermal_params,
},
+ {
+ .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C76") },
+ .driver_data = (void *)&omen_v1_thermal_params,
+ },
{
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8C78") },
.driver_data = (void *)&omen_v1_thermal_params,
@@ -621,9 +625,12 @@ static int hp_wmi_get_fan_speed_victus_s(int fan)
ret = hp_wmi_perform_query(HPWMI_VICTUS_S_FAN_SPEED_GET_QUERY,
HPWMI_GM, &fan_data, sizeof(u8),
sizeof(fan_data));
- if (ret != 0)
+ if (ret != 0) {
+ pr_info("[read] fan query failed with ret: %#x\n", ret);
return -EINVAL;
+ }

+ pr_info("[read] fan_data: %*ph\n", (int)sizeof(fan_data), fan_data);
return fan_data[fan] * 100;
}