From d6860f8f9a66ee4046d60c3abf03ae5b9aeeddab Mon Sep 17 00:00:00 2001 From: Piotr Dymacz Date: Fri, 31 Jan 2020 15:22:54 +0100 Subject: [PATCH] base-files: diag: restore default trigger for 'boot' LED For devices without a dedicated 'diag' LED, we use sometimes one of other LEDs for indicating at least 'boot', 'failsafe' and 'upgrade' stages. In some cases, at the same time these LEDs have defined default triggers in DTS using 'linux,default-trigger' property. Current 'diag' setup removes the trigger and turns off 'boot' LED after bootup. This patch extends 'diag.sh' and 'leds.sh' scripts to make sure default trigger defined in DTS is restored for 'diag' LED which isn't used for indicating 'running' stage. Acked-by: Adrian Schmutzler Signed-off-by: Piotr Dymacz --- package/base-files/Makefile | 2 +- package/base-files/files/etc/diag.sh | 2 ++ .../base-files/files/lib/functions/leds.sh | 29 +++++++++++++++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 4dec9291d7..74ca8426a3 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk include $(INCLUDE_DIR)/feeds.mk PKG_NAME:=base-files -PKG_RELEASE:=202 +PKG_RELEASE:=203 PKG_FLAGS:=nonshared PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ diff --git a/package/base-files/files/etc/diag.sh b/package/base-files/files/etc/diag.sh index 8eb36c6feb..37a8ec758e 100755 --- a/package/base-files/files/etc/diag.sh +++ b/package/base-files/files/etc/diag.sh @@ -37,6 +37,8 @@ set_led_state() { ;; done) status_led_off + [ "$status_led" != "$running" ] && \ + status_led_restore_trigger "boot" [ -n "$running" ] && { status_led="$running" status_led_on diff --git a/package/base-files/files/lib/functions/leds.sh b/package/base-files/files/lib/functions/leds.sh index 5b51e70b0a..14baeb37b4 100755 --- a/package/base-files/files/lib/functions/leds.sh +++ b/package/base-files/files/lib/functions/leds.sh @@ -1,17 +1,25 @@ #!/bin/sh # Copyright (C) 2013 OpenWrt.org -get_dt_led() { - local label +get_dt_led_path() { local ledpath local basepath="/proc/device-tree" local nodepath="$basepath/aliases/led-$1" [ -f "$nodepath" ] && ledpath=$(cat "$nodepath") + [ -n "$ledpath" ] && ledpath="$basepath$ledpath" + + echo "$ledpath" +} + +get_dt_led() { + local label + local ledpath=$(get_dt_led_path $1) + [ -n "$ledpath" ] && \ - label=$(cat "$basepath$ledpath/label" 2>/dev/null) || \ - label=$(cat "$basepath$ledpath/chan-name" 2>/dev/null) || \ - label=$(basename "$basepath$ledpath") + label=$(cat "$ledpath/label" 2>/dev/null) || \ + label=$(cat "$ledpath/chan-name" 2>/dev/null) || \ + label=$(basename "$ledpath") echo "$label" } @@ -36,6 +44,17 @@ led_off() { led_set_attr $1 "brightness" 0 } +status_led_restore_trigger() { + local trigger + local ledpath=$(get_dt_led_path $1) + + [ -n "$ledpath" ] && \ + trigger=$(cat "$ledpath/linux,default-trigger" 2>/dev/null) + + [ -n "$trigger" ] && \ + led_set_attr "$(get_dt_led $1)" "trigger" "$trigger" +} + status_led_set_timer() { led_timer $status_led "$1" "$2" [ -n "$status_led2" ] && led_timer $status_led2 "$1" "$2"