base-files: diag: restore default trigger for 'boot' LED
authorPiotr Dymacz <pepe2k@gmail.com>
Fri, 31 Jan 2020 14:22:54 +0000 (15:22 +0100)
committerPiotr Dymacz <pepe2k@gmail.com>
Mon, 24 Feb 2020 22:27:50 +0000 (23:27 +0100)
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.

One of the examples of such device is TP-Link TL-WR841N v14 (ramips)
which uses 'wlan' LED with defined 'linux,default-trigger' for 'diag':

aliases {
        led-boot = &led_wlan;
        led-failsafe = &led_wlan;
        led-upgrade = &led_wlan;
};

[...]

led_wlan: wlan {
        label = "tl-wr841n-v14:green:wlan";
        gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
        linux,default-trigger = "phy0tpt";
};

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 <freifunk@adrianschmutzler.de>
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
package/base-files/Makefile
package/base-files/files/etc/diag.sh
package/base-files/files/lib/functions/leds.sh

index e389148d47ea0ab14fe1a5c0b0ed51d24908d683..18325564dc29b5fc11046b18f46828bf5ec53412 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=213
+PKG_RELEASE:=214
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index 8eb36c6feb17f0c6c910927194e1df5fa1dd1ff6..37a8ec758ed030944b1f372278bd9f852f3502ff 100644 (file)
@@ -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
index 8a1d21caeff382a5bdbb79f492a133ec0a1b31a4..43b2fe02ed8fba4bffb28fff9ec142f0ea25928e 100644 (file)
@@ -1,16 +1,24 @@
 #!/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=$(cat "$ledpath/label" 2>/dev/null) || \
+               label=$(cat "$ledpath/chan-name" 2>/dev/null)
 
        echo "$label"
 }
@@ -35,6 +43,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"