]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform/x86: hp-wmi: Add support for OMEN MAX 16-ak0xxx (8D87)
authorKrishna Chomal <krishna.chomal108@gmail.com>
Fri, 10 Apr 2026 19:10:37 +0000 (00:40 +0530)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 14 Apr 2026 16:00:14 +0000 (19:00 +0300)
The HP OMEN MAX 16-ak0xxx (8D87) requires the same WMI queries as other
Victus S devices, hence it has been added to the corresponding list.

For this reason, platform_profile_victus_s_get_ec() will be called
during thermal_profile_setup() and victus_s_powersource_event() to
obtain hardware state (platform profile) by reading from the Embedded
Controller, however, this particular board's EC does not seem to expose
the platform profile value, unlike other boards. Hence EC readback is
disabled.

Testing on board 8D87 confirmed that platform profile is registered
successfully and fan RPMs are readable and controllable.

Tested-by: Jinyang Zhu <Jakie101@proton.me>
Signed-off-by: Krishna Chomal <krishna.chomal108@gmail.com>
Link: https://patch.msgid.link/20260410191039.125659-3-krishna.chomal108@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/hp/hp-wmi.c

index 205a7bf4cbf76db78925b80ff53d4b7bb2212f79..9460e07202bd294209f97639e21f766adb70f42d 100644 (file)
@@ -48,6 +48,7 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45E9-BE91-3D44E2C707E4");
 
 enum hp_ec_offsets {
        HP_EC_OFFSET_UNKNOWN                            = 0x00,
+       HP_NO_THERMAL_PROFILE_OFFSET                    = 0x01,
        HP_VICTUS_S_EC_THERMAL_PROFILE_OFFSET           = 0x59,
        HP_OMEN_EC_THERMAL_PROFILE_FLAGS_OFFSET         = 0x62,
        HP_OMEN_EC_THERMAL_PROFILE_TIMER_OFFSET         = 0x63,
@@ -127,6 +128,13 @@ static const struct thermal_profile_params omen_v1_legacy_thermal_params = {
        .ec_tp_offset   = HP_OMEN_EC_THERMAL_PROFILE_OFFSET,
 };
 
+static const struct thermal_profile_params omen_v1_no_ec_thermal_params = {
+       .performance    = HP_OMEN_V1_THERMAL_PROFILE_PERFORMANCE,
+       .balanced       = HP_OMEN_V1_THERMAL_PROFILE_DEFAULT,
+       .low_power      = HP_OMEN_V1_THERMAL_PROFILE_DEFAULT,
+       .ec_tp_offset   = HP_NO_THERMAL_PROFILE_OFFSET,
+};
+
 /*
  * A generic pointer for the currently-active board's thermal profile
  * parameters.
@@ -231,6 +239,10 @@ static const struct dmi_system_id victus_s_thermal_profile_boards[] __initconst
                .matches = { DMI_MATCH(DMI_BOARD_NAME, "8D41") },
                .driver_data = (void *)&victus_s_thermal_params,
        },
+       {
+               .matches = { DMI_MATCH(DMI_BOARD_NAME, "8D87") },
+               .driver_data = (void *)&omen_v1_no_ec_thermal_params,
+       },
        {},
 };
 
@@ -1837,7 +1849,8 @@ static int platform_profile_victus_s_get_ec(enum platform_profile_option *profil
        const struct thermal_profile_params *params;
 
        params = active_thermal_profile_params;
-       if (params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN) {
+       if (params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN ||
+           params->ec_tp_offset == HP_NO_THERMAL_PROFILE_OFFSET) {
                *profile = active_platform_profile;
                return 0;
        }
@@ -2192,7 +2205,8 @@ static int thermal_profile_setup(struct platform_device *device)
                 * behaves like a wrapper around active_platform_profile, to avoid using
                 * uninitialized data, we default to PLATFORM_PROFILE_BALANCED.
                 */
-               if (active_thermal_profile_params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN) {
+               if (active_thermal_profile_params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN ||
+                   active_thermal_profile_params->ec_tp_offset == HP_NO_THERMAL_PROFILE_OFFSET) {
                        active_platform_profile = PLATFORM_PROFILE_BALANCED;
                } else {
                        err = platform_profile_victus_s_get_ec(&active_platform_profile);