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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user