* [PATCH 1/2] platform/x86: hp-wmi: Only use the low byte of the thermal profile
2026-11-12 2:54 [PATCH 0/2] platform/x86: hp-wmi: HP OmniBook Ultra 14-kd0xxx (8EB4) fixes Samuel Wheeler via B4 Relay
@ 2026-11-12 2:54 ` Samuel Wheeler via B4 Relay
2026-11-12 2:54 ` [PATCH 2/2] platform/x86: hp-wmi: Add charge_behaviour quirk for OmniBook Ultra 14 Samuel Wheeler via B4 Relay
1 sibling, 0 replies; 3+ messages in thread
From: Samuel Wheeler via B4 Relay @ 2026-11-12 2:54 UTC (permalink / raw)
To: Hans de Goede, Ilpo Järvinen
Cc: platform-driver-x86, linux-kernel, Shang En Sim, Samuel Wheeler
From: Samuel Wheeler <swheel33@gmail.com>
On the HP OmniBook Ultra Laptop 14-kd0xxx (board 8EB4, BIOS F.06), the
HPWMI_THERMAL_PROFILE_QUERY read returns the active profile in byte 0,
followed by status flags and a constant. With the "default" profile
active the four bytes are 01 11 04 00. thermal_profile_get() returns the
whole 32-bit value (0x041101), which matches none of the
HP_THERMAL_PROFILE_* values, so reading the platform profile always
fails with -EINVAL:
platform_profile: Failed to get profile for handler hp-wmi
and /sys/firmware/acpi/platform_profile returns "Invalid argument".
The firmware's GTPS method (in the SSDT that defines \_SB.WMID) fills
byte 0 from the EC field GFCM (0-5), byte 1 with status flags (ONTB,
INBG, DPIN, PWDN, IBGE, MSFG) and byte 2 with 0x04. Setting a profile
already works: GFCM becomes 0, 1, 2 and 3 for performance, default, cool
and quiet.
Mask the value to its low byte. This also stops
thermal_profile_setup() from writing the status bytes back through
thermal_profile_set(tp) at probe time. That write was harmless on this
firmware, whose STPS method only reads byte 0, but it was not intended.
On firmware that already returns a zero-extended value the mask changes
nothing.
Tested on the OmniBook Ultra 14-kd0xxx: platform_profile reads
"balanced" instead of failing, and each profile reads back after being
set.
This patch was prepared with an AI coding assistant (Claude, by
Anthropic). It decompiled the ACPI tables, traced the WMI query, wrote
the change and this description, and ran the tests on my laptop under
my direction. I reviewed the change and the test results.
Signed-off-by: Samuel Wheeler <swheel33@gmail.com>
---
drivers/platform/x86/hp/hp-wmi.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 0069af86800e..46c9a5a532ba 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -2117,7 +2117,16 @@ static int platform_profile_omen_set(struct device *dev,
static int thermal_profile_get(void)
{
- return hp_wmi_read_int(HPWMI_THERMAL_PROFILE_QUERY);
+ int tp = hp_wmi_read_int(HPWMI_THERMAL_PROFILE_QUERY);
+
+ if (tp < 0)
+ return tp;
+
+ /*
+ * The profile is in the low byte. Some firmware (e.g. board 8EB4)
+ * returns status flags and a constant in the upper bytes.
+ */
+ return tp & 0xff;
}
static int thermal_profile_set(int thermal_profile)
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 2/2] platform/x86: hp-wmi: Add charge_behaviour quirk for OmniBook Ultra 14
2026-11-12 2:54 [PATCH 0/2] platform/x86: hp-wmi: HP OmniBook Ultra 14-kd0xxx (8EB4) fixes Samuel Wheeler via B4 Relay
2026-11-12 2:54 ` [PATCH 1/2] platform/x86: hp-wmi: Only use the low byte of the thermal profile Samuel Wheeler via B4 Relay
@ 2026-11-12 2:54 ` Samuel Wheeler via B4 Relay
1 sibling, 0 replies; 3+ messages in thread
From: Samuel Wheeler via B4 Relay @ 2026-11-12 2:54 UTC (permalink / raw)
To: Hans de Goede, Ilpo Järvinen
Cc: platform-driver-x86, linux-kernel, Shang En Sim, Samuel Wheeler
From: Samuel Wheeler <swheel33@gmail.com>
The HP OmniBook Ultra Laptop 14-kd0xxx (board 8EB4) implements the same
battery charge mode interface as the Spectre x360 boards supported since
commit 929433336e0a ("platform/x86: hp-wmi: add charge_behaviour support
for Spectre 8C15/8C17").
Reading HPWMI_BATTERY_CHARGE_MODE returns the mode in byte 0
(00 ff 01 ff with automatic charging). The write handler (SBCC in the
SSDT that defines \_SB.WMID) takes the mode from byte 1, accepts values
0-7 and passes it to EC command 0xbb. That matches the layout the driver
already uses.
Add the board to hp_wmi_charge_control_quirks.
Tested on the OmniBook Ultra 14-kd0xxx (BIOS F.06) with AC connected:
writing inhibit-charge to charge_behaviour changes the battery status to
"Not charging" with zero current, and writing auto resumes charging.
force-discharge was not tested.
This patch was prepared with an AI coding assistant (Claude, by
Anthropic). It read the firmware's WMI methods, wrote the change and this
description, and ran the tests on my laptop under my direction. I
reviewed the change and the test results.
Signed-off-by: Samuel Wheeler <swheel33@gmail.com>
---
drivers/platform/x86/hp/hp-wmi.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index 46c9a5a532ba..bf68a1c46c03 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -634,6 +634,13 @@ static const struct dmi_system_id hp_wmi_charge_control_quirks[] __initconst = {
DMI_MATCH(DMI_BOARD_NAME, "8C15"),
},
},
+ {
+ /* HP OmniBook Ultra Laptop 14-kd0xxx */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8EB4"),
+ },
+ },
{}
};
#endif
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread