From d7f52210e75db306d5d0158dfc7ea9ac09cc73f0 Mon Sep 17 00:00:00 2001 From: jerem Date: Tue, 16 Jun 2026 10:32:29 +0200 Subject: [PATCH] =?UTF-8?q?Kobo:=20r=C3=A9glages=20suspend=20post-validati?= =?UTF-8?q?on=20+=20log=20batterie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validé sur une nuit (34 cycles, 34 suspends pleins ~901s) : - délai de décharge VEE 8 -> 12s : le suspend réussit dès la 1re tentative (les logs montraient tentative=1 KO / tentative=2 OK vers ~12s), un cycle suspend/resume gâché en moins par itération. Retry conservé comme filet. - DIAG verbeux remplacé par un filet compact (alim + dmesg PM/epdc), ne se déclenche qu'en cas d'échec total des retries. - log de la capacité batterie à chaque itération (CAP|CHG) pour suivre le drain réel en %/h sur les prochaines sessions. --- kobo/monitorinkloop.sh | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/kobo/monitorinkloop.sh b/kobo/monitorinkloop.sh index 6d9d623..b4b5036 100755 --- a/kobo/monitorinkloop.sh +++ b/kobo/monitorinkloop.sh @@ -123,38 +123,16 @@ frontlight_off() { DIAG_DONE=0 suspend_diag() { - # DIAGNOSTIC (one-shot) : quand un suspend échoue sur batterie, capture la raison - # du veto noyau dans le log. À retirer une fois la cause identifiée. + # Filet (one-shot) : si le suspend échoue malgré les retries (anormal), capture une fois + # l'état alim + la raison du veto noyau (dmesg) pour diagnostic. [ "$DIAG_DONE" = 1 ] && return DIAG_DONE=1 - log "===== DIAG suspend (one-shot) =====" + log "===== DIAG suspend =====" for d in /sys/class/power_supply/*/; do - n=$(basename "$d") - log " $n: status=$(cat "${d}status" 2>/dev/null) online=$(cat "${d}online" 2>/dev/null) present=$(cat "${d}present" 2>/dev/null)" + log " $(basename "$d"): status=$(cat "${d}status" 2>/dev/null) online=$(cat "${d}online" 2>/dev/null)" done - log " wakeup_count=$(cat /sys/power/wakeup_count 2>/dev/null) state-extended=$(cat /sys/power/state-extended 2>/dev/null)" - # IRQ responsable du DERNIER réveil — la clé du mystère. - log " pm_wakeup_irq=$(cat /sys/power/pm_wakeup_irq 2>/dev/null) last_resume_reason=$(cat /sys/kernel/debug/wakeup/last_resume_reason 2>/dev/null)" - # Quels devices d'entrée sont armés comme source de réveil (1=oui). - log " -- input devices (name | wakeup) --" - for inp in /sys/class/input/input*/; do - nm=$(cat "${inp}name" 2>/dev/null) - wk=$(cat "${inp}power/wakeup" 2>/dev/null) - [ -n "$nm" ] && log " $(basename "$inp"): \"$nm\" wakeup=$wk" - done - # debugfs (souvent non monté) -> wakeup_sources triés par nb d'évènements. - mount -t debugfs none /sys/kernel/debug 2>/dev/null - if [ -r /sys/kernel/debug/wakeup_sources ]; then - log " -- top wakeup_sources (event_count) --" - awk 'NR>1 && ($3+0)>0 {print $3"\t"$1}' /sys/kernel/debug/wakeup_sources 2>/dev/null \ - | sort -rn | head -8 | while IFS= read -r l; do log " $l"; done - fi - # Les IRQ qui montent = source matérielle qui spamme (touch elan, gpio, etc.). - log " -- /proc/interrupts (lignes non nulles) --" - awk 'NR>1 && ($2+0)>0 {print $0}' /proc/interrupts 2>/dev/null \ - | sort -t: -k2 -rn 2>/dev/null | head -12 | while IFS= read -r l; do log " $l"; done - log " -- dmesg : lignes PM/wakeup/elan/gpio (40 dernières) --" - dmesg 2>/dev/null | grep -iE 'PM:|wakeup|abort|suspend|elan|gpio|irq' | tail -40 \ + log " -- dmesg (PM/epdc/suspend) --" + dmesg 2>/dev/null | grep -iE 'PM:|epdc|suspend|abort|wakeup' | tail -15 \ | while IFS= read -r l; do log " $l"; done log "===== /DIAG =====" } @@ -170,7 +148,8 @@ suspend_for() { # le suspend jusqu'à ce qu'il prenne. secs="$1" sync - sleep 8 # laisse l'EPDC couper ses rails (VEE) ~10s après le refresh + sleep 12 # laisse l'EPDC couper ses rails (VEE) : ~12s suffisent pour + # réussir dès la 1re tentative (mesuré), retry = filet attempt=0 while [ "$attempt" -lt 6 ]; do attempt=$((attempt + 1)) @@ -219,7 +198,7 @@ frontlight_off FIRST=1 # 1er cycle après lancement -> demande un full refresh (reset=1) au backend while true; do - log "--- itération ---" + log "--- itération --- batterie=$(read_battery)" # CAP|CHG, pour suivre le drain frontlight_off # réaffirme après chaque réveil ./scripts/ledToggle.sh on 2>/dev/null