Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/tasks/09-suspend-resume-fts.md
Fimeg adce4441cc tasks: log 07-21 findings (culver A/B/D/E, mic wedge, overview, keyboard); add 19-23
Records what the 2026-07-21/22 sessions actually found and shipped,
so the ledger matches reality:

- TASK-16: A, B, D landed; C (contact card) implemented, phone
  acceptance pending; new unit E (history-fill boot amnesia) done.
- TASK-08: shell-side state projection exists; add the maintenance-
  lease requirement so a deploy can never race the idle lock again
  (root cause of the 19:29 auto-lock-during-deploy crash).
- TASK-09: stale-lock incident — panel/IRQ alive, session-lock
  routing stale; capture both in the resume test.
- TASK-14: expand to the Auxo-style running-app surface and an
  unconditional Home tap; folds in the GLES OpacityMask and
  workspace-ratchet findings.
- TASK-17: pin the iOS-like keyboard target and the Hyprland
  key-safety hammer test.
- Mic trace path corrected to its new home.

New: TASK-19 (settings control center), TASK-20 (player video +
agent control), TASK-21 (reboot-to-Android confirmation), TASK-22
(settings/fullscreen tweaks), TASK-23 (culver locked-notification
nudge).
2026-07-24 10:21:44 -04:00

2.1 KiB

TASK 09 — Suspend-resume FTS calibration race

Status: interim fix shipped 2026-07-17 (Pixel3Arch c4fd047 — hypridle suspend listener disabled). The real fix is open.

Goal

dt2w wake from s2idle suspend wedges the FTS touch controller (continuous invalid "Force cal" spew, dead swipe on the lockscreen). The 73d0cd0 serialization only covered DPMS off/on, not the suspend-resume path.

The race

s2idle exit re-runs panel-prepare → FTS reset → Sense ON unpaced. The controller calibrates against a half-ramped panel and wedges. Recovery (echo 2-0049 > /sys/bus/i2c/drivers/fts/unbind && sleep 1 && bind) worked once but did NOT hold on a re-wedge.

Candidates

  • Kernel-side pacing. Android is the reference — it paces the FTS bring-up after resume. Look at the downstream driver for the delay.
  • Post-resume rebind hook. Careful: rebind with the panel off may drop dt2w flags. Must be panel-aware.

Context

  • ~/Projects/SouveraineOS/docs/LOCK-DPMS-LESSONS.md §3 — the FTS controller: deaf signature, rebind recovery, suspend-resume race OPEN.
  • Interim: idle stops at screen-off (600s blueline-screen-toggle off). Gadget/ssh survive idle. Suspend is fully off the table until this closes.
  • The "Android is the reference" rule (android-is-the-reference-rule): mimic Android for the pacing; don't invent.
  • 2026-07-21 stale-lock incident: Hyprland still listed fts-1; five harmless taps produced five valid evdev down/up pairs and the FTS IRQ advanced, while the secure lock surface received none. A cold reboot restored native PIN touch immediately. Kernel logs still contained the known Force-calibration warnings. This proves the panel/IRQ can be alive while the compositor → session-lock routing is stale; capture both evdev and secure-surface delivery in the resume test, not merely hyprctl devices.

Acceptance

dt2w wake from suspend → touch works, no Force cal spew. Repeated suspend/wake cycles stay healthy. Then re-enable the suspend tier in TASK-08.

Connects to

TASK-08 (suspend is an idle tier once this is safe), DPMS lessons §3. Cold boots only while iterating.