[PATCH v2 0/2] asus-armoury: gate PPT writes on active fan curves

From: Ahmed Yaseen

Date: Wed May 13 2026 - 12:09:55 EST


My first kernel patch series, posted in agreement with Denis Benato (Cc'd).

On 28 ASUS ROG laptop models flagged with requires_fan_curve in the
asus-armoury DMI power_data table, the BIOS ACPI method SPLX silently
discards Package Power Tracking (PPT) writes unless the fan mode is
set to Manual (FANM=4). FANM is set to 4 by the DEFC method when a
custom fan curve is written. Until then, the WMI DEVS call returns
success but the firmware ignores the value, so userspace sees no
effect from writes to ppt_pl1_spl, ppt_pl2_sppt, ppt_pl3_fppt,
ppt_apu_sppt or ppt_platform_sppt.

The requires_fan_curve flag has existed in the per-model power_data
entries for some time but was never read. This series wires it up:

Patch 1: Adds the actual gate. Exports
asus_wmi_custom_fan_curve_is_enabled() from asus-wmi so
asus-armoury can query fan-curve state across module boundaries,
and returns -EBUSY with a pr_warn() from the PPT write path on
affected models when no fan curve is active.

Patch 2: Exposes the same flag to userspace as a read-only sysfs
attribute (requires_fan_curve) so tools like asusctl and rogcc
can surface the prerequisite to the user before issuing PPT
writes. Documented in
Documentation/ABI/testing/sysfs-class-firmware-attributes.

Testing:
Verified on G835LW (ROG Strix SCAR 18 2025, requires_fan_curve=true):
- With no fan curve active, writes to ppt_pl1_spl return -EBUSY
and the cached value is unchanged.
- With pwm1_enable=1 on /sys/class/hwmon/.../asus_custom_fan_curve,
PPT writes succeed and readback matches.
- The pr_warn fires exactly once per rejected write.

I do not have access to the other 27 affected models. Testers from
any of these would be appreciated: FX507VI, FX507VV, FX507Z,
GA402X, GA403UI, GA403UV, GA403WM, GA403WR, GA403WW, GA605W,
GU605CR, GU605CW, GU605CX, GU605M, G513I, G513QM, G513QY, G513R,
G614J, G615LR, G634J, G713PV, G733C, G733P, G814J, G834J, G835LR.

Changes since v1:
- Return EBUSY instead of ENODEV for userspace clarity
(Suggested by Derek J. Clark)
- Update ABI Documents to reflect the change to EBUSY

Ahmed Yaseen (2):
platform/x86: asus-armoury: gate PPT writes behind active fan curve
platform/x86: asus-armoury: expose requires_fan_curve via sysfs

.../testing/sysfs-class-firmware-attributes | 25 +++++++++++++
drivers/platform/x86/asus-armoury.c | 35 +++++++++++++++++++
drivers/platform/x86/asus-wmi.c | 28 +++++++++++++++
include/linux/platform_data/x86/asus-wmi.h | 5 +++
4 files changed, 93 insertions(+)

--
2.54.0