Kobo: réglages suspend post-validation + log batterie

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.
This commit is contained in:
jerem
2026-06-16 10:32:29 +02:00
parent 15754fb05c
commit d7f52210e7

View File

@@ -123,38 +123,16 @@ frontlight_off() {
DIAG_DONE=0 DIAG_DONE=0
suspend_diag() { suspend_diag() {
# DIAGNOSTIC (one-shot) : quand un suspend échoue sur batterie, capture la raison # Filet (one-shot) : si le suspend échoue malgré les retries (anormal), capture une fois
# du veto noyau dans le log. À retirer une fois la cause identifiée. # l'état alim + la raison du veto noyau (dmesg) pour diagnostic.
[ "$DIAG_DONE" = 1 ] && return [ "$DIAG_DONE" = 1 ] && return
DIAG_DONE=1 DIAG_DONE=1
log "===== DIAG suspend (one-shot) =====" log "===== DIAG suspend ====="
for d in /sys/class/power_supply/*/; do for d in /sys/class/power_supply/*/; do
n=$(basename "$d") log " $(basename "$d"): status=$(cat "${d}status" 2>/dev/null) online=$(cat "${d}online" 2>/dev/null)"
log " $n: status=$(cat "${d}status" 2>/dev/null) online=$(cat "${d}online" 2>/dev/null) present=$(cat "${d}present" 2>/dev/null)"
done done
log " wakeup_count=$(cat /sys/power/wakeup_count 2>/dev/null) state-extended=$(cat /sys/power/state-extended 2>/dev/null)" log " -- dmesg (PM/epdc/suspend) --"
# IRQ responsable du DERNIER réveil — la clé du mystère. dmesg 2>/dev/null | grep -iE 'PM:|epdc|suspend|abort|wakeup' | tail -15 \
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 \
| while IFS= read -r l; do log " $l"; done | while IFS= read -r l; do log " $l"; done
log "===== /DIAG =====" log "===== /DIAG ====="
} }
@@ -170,7 +148,8 @@ suspend_for() {
# le suspend jusqu'à ce qu'il prenne. # le suspend jusqu'à ce qu'il prenne.
secs="$1" secs="$1"
sync 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 attempt=0
while [ "$attempt" -lt 6 ]; do while [ "$attempt" -lt 6 ]; do
attempt=$((attempt + 1)) attempt=$((attempt + 1))
@@ -219,7 +198,7 @@ frontlight_off
FIRST=1 # 1er cycle après lancement -> demande un full refresh (reset=1) au backend FIRST=1 # 1er cycle après lancement -> demande un full refresh (reset=1) au backend
while true; do 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 frontlight_off # réaffirme après chaque réveil
./scripts/ledToggle.sh on 2>/dev/null ./scripts/ledToggle.sh on 2>/dev/null