You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Device: ASUS ROG Xbox Ally X (RC73XA), BIOS RC73XA.317 (latest as of Aug 2026)
OS: SteamOS 3.8.16 stable, kernel 6.16.12-valve24.5 — but all measurements below were made by writing the asus_custom_fan_curve hwmon directly via sysfs, i.e. the exact interface adjustor/drivers/asus uses, so they should apply to hhd on any distro.
Why this issue:
src/adjustor/drivers/asus/__init__.py still carries the commented-out per-profile minimums (min_val = 17 quiet / 45 balanced / 60 performance) with # TODO: Get the exact limits. / # FIXME: Revisit limits, and the fan-curve UI ships the "Asus hardware limits the minimum fan curve depending on TDP mode" disclaimer. I characterized those limits on the ROG Xbox Ally X while building a small Decky fan-curve plugin that writes the same hwmon — posting the numbers here in case they are useful for revisiting that block.
Measurements (RC73XA):
With custom curves enabled (pwm1_enable/pwm2_enable = 1), the effective minimum is ~50% duty (~4100–4300 RPM on both fans; ceiling ~8200 RPM).
Writing low curve points (e.g. 45/255 ≈ 18%) still yields ~4100 RPM: the stored curve reads back exactly as written, but the fans never drop below the floor — the clamp is EC-side, invisible to sysfs.
The floor is the same in every platform_profile: tested low-power, balanced and performance, always ~50%. So unlike the RC71-era estimates in the commented code (17/45/60), on RC73XA the minimum does not scale with the profile.
With firmware auto (pwmX_enable = 2) the fans DO fully stop (0 RPM, stop-and-go cycling at light load) — the floor only exists in custom-curve mode.
Profile note: on RC73XA platform_profile_choices is low-power balanced performance (no quiet).
The Windows side matches: an RC73XA owner on the ROG forum (Jan 2026) reports no manual Armoury Crate curve can be made as quiet as the factory presets, and Armoury's curve editor on this device locks the low points (~29%/39% UI minimums per fan) — consistent with an EC/BIOS-enforced floor rather than anything OS-side.
Other RC73XA observations, in case they are useful:
Any platform_profile change silently wipes the active custom curve (a re-apply watchdog is needed).
After suspend/resume the curve must be re-applied: readback can still show the old curve while the EC is no longer honoring it.
Happy to run additional sweeps (specific duty values per fan/per profile) if that helps pin the exact limits.
Device: ASUS ROG Xbox Ally X (RC73XA), BIOS RC73XA.317 (latest as of Aug 2026)
OS: SteamOS 3.8.16 stable, kernel 6.16.12-valve24.5 — but all measurements below were made by writing the
asus_custom_fan_curvehwmon directly via sysfs, i.e. the exact interfaceadjustor/drivers/asususes, so they should apply to hhd on any distro.src/adjustor/drivers/asus/__init__.pystill carries the commented-out per-profile minimums (min_val = 17quiet /45balanced /60performance) with# TODO: Get the exact limits./# FIXME: Revisit limits, and the fan-curve UI ships the "Asus hardware limits the minimum fan curve depending on TDP mode" disclaimer. I characterized those limits on the ROG Xbox Ally X while building a small Decky fan-curve plugin that writes the same hwmon — posting the numbers here in case they are useful for revisiting that block.Measurements (RC73XA):
With custom curves enabled (
pwm1_enable/pwm2_enable= 1), the effective minimum is ~50% duty (~4100–4300 RPM on both fans; ceiling ~8200 RPM).Writing low curve points (e.g. 45/255 ≈ 18%) still yields ~4100 RPM: the stored curve reads back exactly as written, but the fans never drop below the floor — the clamp is EC-side, invisible to sysfs.
The floor is the same in every
platform_profile: testedlow-power,balancedandperformance, always ~50%. So unlike the RC71-era estimates in the commented code (17/45/60), on RC73XA the minimum does not scale with the profile.With firmware auto (
pwmX_enable= 2) the fans DO fully stop (0 RPM, stop-and-go cycling at light load) — the floor only exists in custom-curve mode.Profile note: on RC73XA
platform_profile_choicesislow-power balanced performance(noquiet).-Cross-checks:
An independent characterization on another RC73XA unit (hpd-handheld-power-daemon, Decouple power from cooling + Xbox Ally X AC fix, fan retune & docs CiroDev-Git/hpd-handheld-power-daemon#14) reports "~3700 RPM floor and ~8400 RPM ceiling", so the exact level may vary a bit per unit/conditions, but the wall itself is consistent.
The Windows side matches: an RC73XA owner on the ROG forum (Jan 2026) reports no manual Armoury Crate curve can be made as quiet as the factory presets, and Armoury's curve editor on this device locks the low points (~29%/39% UI minimums per fan) — consistent with an EC/BIOS-enforced floor rather than anything OS-side.
Other RC73XA observations, in case they are useful:
Any
platform_profilechange silently wipes the active custom curve (a re-apply watchdog is needed).After suspend/resume the curve must be re-applied: readback can still show the old curve while the EC is no longer honoring it.
Happy to run additional sweeps (specific duty values per fan/per profile) if that helps pin the exact limits.