From 0facfd99cb1e923762daea4ad9429422188091a6 Mon Sep 17 00:00:00 2001 From: jesherman Date: Tue, 4 Aug 2026 12:42:26 -0400 Subject: [PATCH] Switch the Pocket EVO to real suspend to RAM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The EVO has been on fake suspend because deep suspend did not hold: it woke itself within seconds, and with a Steam session running it failed to resume at all. Both causes are fixed in armada-packages — the SM8550 wake source and UFS resume patches from ROCKNIX PR #2954, plus removal of the fan tacho interrupt on TLMM GPIO 64, which fired ~80 times a second and repeatedly pulled the SoC back out of suspend. Measured on a Pocket EVO with those in place, on battery with a Steam session running: 1202s of uninterrupted deep suspend woken only by the RTC alarm, and standby drain of 27.8mA against 161.8mA for fake suspend. That is 5.8x lower, turning roughly 2 days of standby into 12. Also pin SuspendState to mem. systemd defaults to "mem standby freeze", so a failed deep suspend falls through to s2idle, which has been observed to wedge SM8550 hard enough to need a power-button reset. A failed deep should no-op instead. ROCKNIX pins the same thing for this SoC. This depends on the armada-packages kernel change. Landing it against a kernel without those patches puts EVO devices back in the configuration that hangs on resume, which needs a hold-power recovery — so it should not merge before the kernel is in. Co-Authored-By: Claude Opus 5 --- README.md | 13 +++++++++---- .../usr/lib/armada/devices/ayaneo-pocket-evo.conf | 4 ++++ .../sleep.conf.d/10-armada-suspend-state.conf | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 system_files/usr/lib/systemd/sleep.conf.d/10-armada-suspend-state.conf diff --git a/README.md b/README.md index 64f35982..f03d84b8 100644 --- a/README.md +++ b/README.md @@ -176,10 +176,15 @@ desktop. The **Bazaar** app store and the **Armada Installer** ### Power button and sleep -Pressing the power button does a "fake suspend" (inspired by ROCKNIX) rather than -real S3 sleep: it blanks the screen and freezes the session, and the same press -wakes it. Because the device does not truly sleep, idle battery drain is higher -than it would be with real suspend. +What the power button does depends on the device. + +On the **AYN Odin 3** and **AYANEO Pocket EVO** it is a real suspend to RAM: the +device genuinely powers down and the same press wakes it. Standby drain is much +lower — measured at roughly a fifth of fake suspend on the Pocket EVO. + +Everywhere else it is a "fake suspend" (inspired by ROCKNIX): the screen blanks +and the session freezes, but the device stays powered, so idle battery drain is +higher than it would be with real suspend. ## Updating diff --git a/system_files/usr/lib/armada/devices/ayaneo-pocket-evo.conf b/system_files/usr/lib/armada/devices/ayaneo-pocket-evo.conf index efdea0aa..2f9466db 100644 --- a/system_files/usr/lib/armada/devices/ayaneo-pocket-evo.conf +++ b/system_files/usr/lib/armada/devices/ayaneo-pocket-evo.conf @@ -9,3 +9,7 @@ ARMADA_PANEL_NATIVE_HEIGHT=1920 ARMADA_PANEL_REFRESH_RATES=60,120 ARMADA_GAMESCOPE_USE_ROTATION_SHADER=1 ARMADA_GAMEPAD_QUIRK=ayaneo-xbox +# Requires the SM8550 suspend patches and the fan tacho DTS override from +# armada-packages. Without them this device wakes itself within seconds and +# hard-hangs on resume with a Steam session running. +ARMADA_SUSPEND_MODE=mem diff --git a/system_files/usr/lib/systemd/sleep.conf.d/10-armada-suspend-state.conf b/system_files/usr/lib/systemd/sleep.conf.d/10-armada-suspend-state.conf new file mode 100644 index 00000000..24da7a9f --- /dev/null +++ b/system_files/usr/lib/systemd/sleep.conf.d/10-armada-suspend-state.conf @@ -0,0 +1,6 @@ +[Sleep] +# Only try suspend-to-RAM. systemd's default is "mem standby freeze", so a +# failed deep suspend falls through to s2idle -- which has been observed to +# wedge SM8550 devices hard enough to need a power-button reset. A failed deep +# should no-op instead. Matches what ROCKNIX pins for the same SoC. +SuspendState=mem