Conversation
|
im going to move this back to draft - there is definitely a driver dependency but performance seems intermittent maybe from policy changes. need to test more. |
Independent verification + hybrid hardening (2026-08-18)Tested on a Pocket EVO with the hybrid build: this policy + the kernel pieces from armada-os/armada-packages#35 (0901 + 0063 + 0903 + 0904). Full cycle run from a 10% SOC start, including an 11-minute deep suspend. Confirmed working
Fixes this test run found (now in the PR branches)
Honest numbers
Remaining
|
4bdd526 to
dd6db44
Compare
|
Guard debounce added after cold-boot verification (2026-08-18) During a cold-boot test the policy auto-started a session and ramped normally (2.43 → 2.89 → 3.02 A), then a single 0.5 s sample at 3.058 A (8 mA, ~0.3 % over the 3.05 A combined-input guard) ended the session — the controller was already pulling the PPS target back at that point. The 3.05 A guard value is correct (it must sit above the 2.88–2.95 A control band and below the 3 A PD contract), but a one-sample tripwire is too trigger-happy for a settling ramp. The guard now requires 3 consecutive out-of-range samples (~1.5 s) before tearing down; a sustained overdraw still ends the session immediately. Verified on-device: the restart ramp crossed the same window and held ~26 W without a trip. |
dd6db44 to
70667ae
Compare
|
Tier 1 update — 30.5 W at the wall, validated on-device (2026-08-18) Raised the PPS target cap to 10.5 V with matching VIN guards. Software-only: the driver's 10 V VIN enable gate in armada-packages#35 is checked only at enable time, and this policy enables the pumps at ≤9.2 V, so no kernel rebuild was needed. Measured (3 A PD contract, kernel 7.2.0-rc7):
Key calibration finding: the HL7139 pump ADC over-reads current by ~4% (wall meter 2.93 A vs 3.05 A sysfs at 9.85 V). The 3 A contract reads ~3.12 A in sysfs, so the combined-input guard (3.12 A, 3-sample debounce) and ramp band (3.08 A) are calibrated to the meter, not the raw sysfs value — the original 3.05 A guard fired on sysfs noise and capped the ramp at ~9.9 V. Battery-current ramp gates (back-step 5.5 → 6.5 A, ramp 5.0 → 6.5 A) were raised to match Tier 1's ~6.2–6.5 A idle battery draw; the old gates would stall the ramp at ~29 W when the device is idle and the battery wants full current. Note: an idle low-SOC (below ~70%) soak at 10.5 V is still outstanding — current data covers loaded (75–90%) and idle (89%) states. |
|
Thanks for putting this together and for sharing the detailed Pocket EVO test results. I own an EVO myself, so I took a closer look at the safety and recovery paths before this becomes part of a normal Armada image.
|
9e5b878 to
64c7bd3
Compare
|
Thanks for the thorough review — all items are addressed in the updated head (64c7bd3):
On-device verification (Pocket EVO, hotfix of this branch): PPS writes outside 3.3–10.5 V or off the 20 mV grid rejected; ICL > 3 A rejected; simulated stuck-pump cleanup fails closed; SIGKILL'd daemon leaves pumps off, no auto-restart; s2idle suspend/resume clean. Charger-attached session tests (non-PPS charger, mid-session cable pulls) to follow. |
64c7bd3 to
705c1d2
Compare
|
Live-session test results (PD-PPS charger attached):
New firmware behavior discovered (needs more investigation): the 13 mA input-current-limit handoff write consistently wedges the battery-manager firmware when issued as part of a session start — the PD-PPS contract stays up (rail holds 8.8–9.9 V) but the charging engine drops ( Two policy fixes came out of this (in this push):
The firmware wedge on the handoff write persists with both write orderings, so the next step is comparing the exact property sequence Android's charger HAL uses on this device (possibly a dedicated PD current-request property rather than ICL, or a required settle window). The direct-charge session itself never engaged the pumps because the guard correctly refused to enable them into an unverified source state. |
705c1d2 to
85be1f0
Compare
|
Follow-up: the handoff is solved — sustained 30 W-class direct charging confirmed on-device. Root cause of the "cable removed" guards: three separate issues stacked on top of each other, none of them safety failures:
Also: Validated results (Pocket EVO, this branch, PD-PPS charger):
Both PR heads now carry the complete, live-validated stack (armada 85be1f0, armada-packages cb0f6d2). |
85be1f0 to
de8c796
Compare
|
On discoverability of the opt-in (follow-up to item 1): Agreed that a flag file nobody knows about would make the feature dead on arrival. The opt-in is now exposed through a user-facing CLI that ships in the image:
Kept as a CLI rather than a GUI toggle for now: it matches the existing I would defer to @virtudude on how we would put a charging toggle in armada-control for device specific hooks like this, but this can be the source for him to pull from |
de8c796 to
038a11a
Compare
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
038a11a to
f32e964
Compare
|
Two fixes folded in (2026-09-06), both found on-device:
|
f32e964 to
9e509d9
Compare
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
…licy Carried from armada-os#258 (single squashed PR commit) onto upstream main for the jesherman fork build. Contents: armada-charge-toggle, armada-pocketevo-charge-policy.service + policy/cleanup scripts, pocketevo-charge-policy-test.sh. Opt-in direct charge: fail-closed cleanup, latched faults, PPS rail raised before 13 mA handoff, WatchdogSec=600 inline feeding. Validated live: 27-28.5 W adapter sessions, zero guard trips.
dc9aa04 to
7b79e99
Compare
Add an opt-in policy for the Pocket EVO's paired HL7139 charge pumps. The daemon raises the PPS rail before quiescing the Qualcomm buck, enables and monitors both pumps, tapers near the battery limit, and restores the normal charger only after verified pump shutdown. Fail closed on electrical, thermal, telemetry, I2C, or asymmetric-pump faults. A fault remains latched until VBUS is absent at both pumps. Use the portable WATCHDOG=1 notification because systemd 259 does not support the older helper flag. Battery-manager voltage readback can lag or defer requested PPS voltage under load, so accept a safe 8-10.5 V rail and validate coherence between USB and pump VIN measurements. Cable removal is still caught when VBUS collapses toward the default 5 V level. Wait for late ADSP and I2C supplies in the daemon rather than with a fixed unit delay. The service has no sleep.target dependency, so charging startup cannot delay NetworkManager resume. Restart remains disabled so watchdog and control failures cannot automatically re-arm direct charging. Steam retains its pre-suspend inactivity duration and may request another suspend immediately after a power-button wake. Start a five-second sleep inhibitor from the post-suspend hook to reject only that stale request while retaining normal explicit suspend behavior afterward. Also identify downstream images as Armada:EVO and select the fork registry through a small configuration file while retaining the standard Armada update implementation. Hardware validation reached 30 W source power, balanced pump currents, verified pump shutdown across s2idle, and reliable Qualcomm charger restoration.
7b79e99 to
80dc08e
Compare
power: enable 30 W charging on Pocket EVO via direct-charge policy
Adds the Pocket EVO userspace charging policy for armada-os/armada-packages#35.
The kernel support exposes the required controls, but the charge pumps still need a sequenced handoff. This service:
Tier 1: raises the PPS target cap to 10.5 V with matching VIN guards, so a 3 A PD contract delivers ~31 W instead of ~26 W. Software-only — no kernel rebuild (the driver's 10 V VIN enable gate is checked only at enable time, and pumps are enabled at <=9.2 V; the ramp to 10.5 V never re-triggers it).
Measured results (Pocket EVO, kernel 7.2.0-rc7, 3 A PD contract)
Key calibration finding
The HL7139 pump ADC over-reads current by ~4% (wall meter 2.93 A vs 3.05 A sysfs at 9.85 V). The 3 A PD contract therefore reads ~3.12 A in sysfs. The combined-input guard (3.12 A, 3-sample debounce) and the ramp/back-step band (3.08 A) are calibrated against that offset — the original 3.05 A guard fired on sysfs noise and never let the ramp pass ~9.9 V.
Notes
usb_typegrep gate could never match. The kernel setter checks the raw adapter type and rejects non-PPS adapters itself