Read-only fan & CPU-temp support for Snapdragon Zenbook A16 (UX3607OA, ARM64)#5448
Open
agentseo wants to merge 1 commit into
Open
Read-only fan & CPU-temp support for Snapdragon Zenbook A16 (UX3607OA, ARM64)#5448agentseo wants to merge 1 commit into
agentseo wants to merge 1 commit into
Conversation
- AsusACPI.GetFan: decode packed CPU_Fan value (status in high word,
RPM/100 in low word); route Mid slot to working tach 0x00110035 on UX3607
- HardwareControl: fall back to MSAcpi_ThermalZoneTemperature when ACPI
Temp_CPU returns 0; prefer TZ33 (only live zone) on UX3607
- All changes gated behind ContainsModel("UX3607"); x86 path unchanged
- Read-only: firmware lacks DEVS fan-write endpoints, so no fan control
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
Read-only monitoring (fans + CPU temperature) for the ASUS Zenbook A16 UX3607OA — a Snapdragon X2 (ARM64) Copilot+ laptop. On stock g-helper this model shows no CPU temperature and only one mis-decoded fan. All changes are gated behind
AppConfig.ContainsModel("UX3607"), so the x86 code path is completely untouched.This is monitoring only — see "Why no fan control" below.
Changes
app/AsusACPI.cs—GetFan()CPU_Fan(0x00110013) returns a packed value: a status/mode field in the high word and the speed (hundreds of RPM) in the low word. Real fan readings never exceed0xFFFF, so values above that are masked to the low word. Gated by magnitude, not model, so it's a no-op on normal hardware.Mid_FanID (0x00110031) returns 0 for it. The working tach lives at a non-standard ID0x00110035. A model-gated field_midFanReadIdroutes the "Mid" slot to that ID on UX3607 only (Mid_Faneverywhere else).app/HardwareControl.cs— CPU temperatureTemp_CPU(0x00120094) returns 0 on this model (ASUS didn't wire the ATK temp endpoint on this ARM SKU). When the existing temp read is<= 0, fall back toMSAcpi_ThermalZoneTemperatureover WMI.QCOM*zones report static, baked-in values (~41 °C, frozen, never move under load).TZ33is the only zone that tracks real SoC temperature. Verified by load test: ~34 °C idle → ~43 °C under GPU load → ~48–56 °C under CPU load, cross-checked against HWiNFO. Without this, max-of-zones would pin to the fake QCOM reading. Gated by_preferTZ33(UX3607 only); other models keep max-of-zones behaviour.Why no fan control
Fan control is impossible on this firmware: the DEVS fan-write endpoints present on x86 ASUS laptops (
DevsCPUFan0x00110022,DevsCPUFanCurve0x00110024,FanHysteresis0x00110034) are absent in this model's firmware (confirmed via the built-in ACPI scan). So this PR deliberately does not attempt any fan write — it only reads.Scope & safety
ContainsModel("UX3607")) or a value-range check; no behaviour change on any existing device.Testing
Verified on the actual UX3607OA hardware:
Notes for the maintainer
This is a niche ARM SKU and I understand if Snapdragon support is out of scope for the project. The change is intentionally small, self-contained and opt-in so it carries near-zero risk for existing users. Happy to adjust the model gate, naming, or split the commits if you'd prefer.
🤖 Generated with Claude Code