[PATCH 0/2] hwmon: (asus_rog_ryujin) Ryujin III pump control source
From: Zac Lanzon
Date: Sun Sep 27 2026 - 08:09:49 EST
The RYUJIN III pump either runs at the duty set over USB or is handed
to its internal controller, which follows the PWM of the motherboard
header its 4-pin cable is plugged into. Byte 2 of the set cooler duty
command selects which. The driver sends 1 there with every duty write,
so a pwm2 write takes the pump away from its internal controller, and
after power-on a pwm1 write of the reported 40% leaves the pump at full
speed. Patch 1 fixes both. Patch 2 adds pwm1_enable to switch between
the two and to report which one is in control.
Patch 1 fixes a user-visible bug and applies to v7.3-rc4 as well as to
hwmon-next. On v7.3-rc4 the driver does not bind the base RYUJIN III
360, whose ID is only in hwmon-next, so there patch 1 changes behavior
for the EXTREME, EVA and WHITE EDITION, none of which I could test.
Edward Blair's analysis of the WHITE EDITION firmware shows the same
pump control source. Patch 2 is a new feature for hwmon-next.
Tested on a RYUJIN III 360, firmware AURJ2-S750-0108, with out-of-tree
builds of drivers/hwmon/asus_rog_ryujin.c on 7.0.0-34-generic:
hwmon-next 9edd5ab2656 as is, with patch 1, and with both patches. The
pump cable is on AIO_PUMP (nct6799 pwm7, set by hand for the tests); it
was on CPU_FAN at the time of the first comments in the linked issue.
Pump rpm at header 50% / 80%, then the reported source:
before patch 1 patches 1-2
a on header, pwm2 = 40% 1710/1710 1 2100/3060 0 2145/3090 0
b on header, pwm1 = 40% 1725/1740 1 1740/1740 1 1740/1740 1
c pwm1 = 60%, then 40% 2460, 1740 2460, 1740 2475, 1740
d then pwm2 = 40% 1740/1740 1 1740/1740 1 1740/1740 1
e1 reload with the pump on USB 1740/1740 1 1740/1740 1 1740/1740 1
then pwm2, pwm1 = 40% 1740, 1740 1755, 1740 1740, 1755
e2 reload with the pump on header 2160/3090 0 2160/3090 0 2160/3105 0
then pwm2 = 40% 1740/1740 1 2130/3090 0 2130/3090 0
then pwm1 = 60% 2475 1 2460 1 2475 1
f pwm1_enable = 2 2130/3090 0
pwm1_enable = 1 1740/1740 1
pwm1_enable = 0, 3 -EINVAL
"On header" is the state after EC 1A 00 28 1E, which leaves the pump on
its internal controller. The internal fan followed pwm2 in every column
(40%: 1545 to 1590 rpm).
Written back to back, 2 runs each, final state:
pwm1 = 60%, pwm2 = 40% (patch 1) source 1, pump 60%, fan 40%
pwm1 = 40%, pwm1 = 60% (patch 1) source 1, pump 60%
pwm1_enable = 2, pwm1 = 60% source 1, pump 60%
pwm1_enable = 1, 2, 1 source 1
pwm1 = 60%, pwm1_enable = 2 source 0
The failure in the linked issue needs the power-on state, which a USB
reset does not bring back, so it was measured from power-on (PSU
switched off), once per column, with the header at 100%. Source,
byte 9 of the status report (the duty the pump runs at) and pump rpm:
before patch 1 patches 1-2
no write yet 0 100 3570 0 100 3570 0 100 3570
pwm2 = 40% 1 100 3570 0 100 3570 0 100 3570
pwm1 = 40% (reported) 1 100 3570 1 40 1710 1 40 1710
pwm1 = 60% 1 60 2430
pwm1 = 40% 1 40 1725
pwm1_enable = 2 0 100 3585
The two writes that patch 1 sends for a pwm1 write of the reported duty
reached the requested duty in all 19 trials, 9 with raw commands and 10
through the driver.
The commit in the Fixes: tag, cd258aca0dc4, first appeared in v7.3-rc1.
Zac Lanzon (2):
hwmon: (asus_rog_ryujin) Fix pump control source on the Ryujin III
hwmon: (asus_rog_ryujin) Add pwm1_enable for the Ryujin III pump
Documentation/hwmon/asus_rog_ryujin.rst | 10 ++
drivers/hwmon/asus_rog_ryujin.c | 164 +++++++++++++++++++++++-
2 files changed, 171 insertions(+), 3 deletions(-)
base-commit: 9edd5ab2656f040d726b5388f49ceac10bb2944f
--
2.53.0