Fan curves ignored by EC — ROG Control Center settings not applied (GA402RK)

Hi all,

I’m running Bazzite (F44.20260515) on an ASUS ROG Zephyrus G14 (GA402RK) and having an issue where fan curves set through ROG Control Center are being ignored by the EC firmware.

System specs:

  • Model: ROG Zephyrus G14 GA402RK
  • BIOS: GA402RK.319 (latest)
  • Kernel: 6.19.14-ogc5.1.fc44.x86_64 (Bazzite gaming kernel)
  • CPU: AMD Ryzen 9 6900HS (Rembrandt)
  • dGPU: AMD Radeon RX 6800S (Navi 23) — amdgpu driver
  • iGPU: AMD Radeon 680M (Rembrandt)
  • DE: KDE Plasma 6 (Wayland)
  • asusd: v6.3.7 (from ublue-asusctl)
  • rog-control-center: from linuxbrew

The problem:

I previously ran CachyOS and other Arch-based distros where fan curves set via ROG Control Center worked perfectly — quiet, balanced, and performance profiles each had their own custom curves and the fans responded accordingly.

On Bazzite, the fan curves appear to be ignored by the EC:

  • asusd correctly writes the curves to the asus_armoury kernel module (confirmed via logs)
  • throttle_thermal_policy switches correctly between profiles
  • CPU EPP switches correctly (Performance/BalancePower/Power)
  • But fan RPMs don’t match the curves — they’re capped at ~3000 RPM even on performance mode with 100% CPU load across all 16 cores
  • CPU reaches 75–91°C with fans at mid-speed instead of ramping to full blast (~6000 RPM)
  • pwm_enable on asus_custom_fan_curve reverts to 2 (EC auto) even after asusd sets it to 1 (manual)

What I’ve verified:

  • fw-fanctrl (Framework fan control) is installed but masked/inactive — not the cause
  • thermald failed at boot (“unsupported CPU”) — not running
  • tuned with throughput-performance-bazzite profile only sets CPU governor, not fans
  • Fan curve data IS stored on the EC (auto_point values match what asusd wrote)
  • Writing directly to hwmon8 auto_point values has no effect — EC reverts pwm_enable to 2

What works on Arch but not on Bazzite:

On CachyOS with the same hardware, I used asusctl + ROG Control Center to set custom fan curves per profile, and fans would ramp up aggressively on performance mode.

The same setup on Bazzite produces capped, conservative fan behavior.

Key difference:

Bazzite ships with the asus_armoury kernel module (recently upstreamed into 6.14+), while older distros used the asus-wmi fan curve driver.

It seems the EC firmware on this unit doesn’t honor the curves written through the asus_armoury code path.

Questions:

  1. Has anyone else experienced fan curves being ignored on ROG laptops with Bazzite?
  2. Is there a way to use the older asus-wmi fan curve driver instead of asus_armoury?
  3. Could the asus_armoury module be using a different ACPI method that this BIOS version doesn’t support?
  4. Any known workarounds to get proper fan control on GA402RK?

Happy to provide any additional logs or run diagnostic commands. This is the only issue I have with Bazzite — everything else works great.

Thanks!

UPDATE: Fixed

On the Performance profile, asusd 6.3.7 was handing fan control to the firmware auto-mode instead of your custom curve. In driver terms: the asus_custom_fan_curve flag pwm_enable was sitting at 2 (firmware-auto) instead of 1 (custom curve). Firmware-auto badly undercools — it held ~2900 RPM even at 96 °C. Your curve was loaded but never engaged. And asusd flips it back to firmware-auto every time Performance is (re)applied, so it could never stick on its own.

A second, separate bug: asusd was set to auto-force a profile by power source (change_platform_profile_on_ac), so switching to Balanced/Quiet snapped you back to Performance.

The fix (three parts)

  1. g14-fancurve.service — a small guard that, only while on Performance, re-asserts pwm_enable=1 so the custom curve actually drives the fans (and re-applies it whenever asusd reverts). Quiet/Balanced are left alone.
  2. An aggressive Performance curve — ramps to ~95% by 78 °C and 100% by 84 °C (the old default only maxed at 90 °C).
  3. Disabled the auto-profile-switch (change_platform_profile_on_ac/battery = false) so your manual Quiet/Balanced/Performance choices stick.

Result: on Performance the fan now drives to the real hardware ceiling (~6000 RPM, which your G-Helper data confirmed is the GA402RK max).