aboutsummaryrefslogtreecommitdiffstats
path: root/package/base-files/files
diff options
context:
space:
mode:
authorPiotr Dymacz <pepe2k@gmail.com>2020-01-31 15:22:54 +0100
committerPiotr Dymacz <pepe2k@gmail.com>2020-02-24 23:27:50 +0100
commita422b171ac17edde296b48e2b3e9c9845d773609 (patch)
tree5f783975960ec819789b2ebc2b2834a26f08c420 /package/base-files/files
parent2d113f89d230c2d337ce03217b3b9c1ca22975ea (diff)
downloadupstream-a422b171ac17edde296b48e2b3e9c9845d773609.tar.gz
upstream-a422b171ac17edde296b48e2b3e9c9845d773609.tar.bz2
upstream-a422b171ac17edde296b48e2b3e9c9845d773609.zip
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. 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>
Diffstat (limited to 'package/base-files/files')
-rw-r--r--package/base-files/files/etc/diag.sh2
-rw-r--r--package/base-files/files/lib/functions/leds.sh27
2 files changed, 25 insertions, 4 deletions
diff --git a/package/base-files/files/etc/diag.sh b/package/base-files/files/etc/diag.sh
index 8eb36c6feb..37a8ec758e 100644
--- 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 8a1d21caef..43b2fe02ed 100644
--- a/package/base-files/files/lib/functions/leds.sh
+++ b/package/base-files/files/lib/functions/leds.sh
@@ -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"