Skip to content

Fan curve floor characterization on ROG Xbox Ally X (RC73XA): ~50% duty minimum in every platform profile #337

Description

@pippopapera

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).

-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_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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions