#!/bin/sh # Panel NT37705: el ABL deja el subsistema de display encendido (mdss_gdsc on) # y a veces el primer encendido de msm sobre ese estado no arranca el panel # (lecturas DCS -61, pantalla negra). Lo unico que lo revive es apagar # mdss_gdsc, cosa que pasa con un blank/unblank del framebuffer. # # El initfs-hook hace lo mismo, pero msm suele enganchar el display recien # despues del switch_root (no hay fb0 en el initramfs), asi que aca se # repite desde el rootfs. Solo actua si el panel esta muerto: con el panel # vivo actual_brightness devuelve el valor; muerto, falla con ENODATA (la # lectura DCS del driver da -61). # # Tiene que correr antes que cualquier cliente DRM (cage): con un DRM # master activo el blank de fbdev no hace nada. BL=/sys/class/backlight/ae94000.dsi.0 FB=/sys/class/graphics/fb0 log() { echo "rtwo-panel: $*" > /dev/kmsg } panel_alive() { cat "$BL/actual_brightness" > /dev/null 2>&1 } i=0 while [ ! -e "$BL/actual_brightness" ] || [ ! -e "$FB/blank" ]; do i=$((i + 1)) if [ "$i" -gt 60 ]; then log "sin backlight/fb0 tras 30 s, nada que hacer" exit 0 fi sleep 0.5 done # Dar tiempo al primer prepare/enable del panel. sleep 1 if panel_alive; then log "panel vivo, sin cambios" exit 0 fi for try in 1 2 3; do log "panel muerto, blank/unblank (intento $try)" echo 1 > "$FB/blank" sleep 1 echo 0 > "$FB/blank" sleep 1 if panel_alive; then log "panel revivido en el intento $try" exit 0 fi done log "el panel sigue muerto tras 3 intentos" exit 1