base-files: maintain LED config state
authorJo-Philipp Wich <jo@mein.io>
Wed, 8 Jun 2016 08:14:27 +0000 (10:14 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 8 Jun 2016 08:34:50 +0000 (10:34 +0200)
Record the state of any hardware LED configured through UCI and use that
information to revert the state when applying updated settings while
maintaining default behaviour of system LEDs.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
package/base-files/files/etc/init.d/led

index a6be788a5e0569368b164cb62acd4a9775489b34..1d10f723d0ce11bff6828661dfa7385b825791a1 100755 (executable)
@@ -37,6 +37,12 @@ load_led() {
        [ -e /sys/class/leds/${sysfs}/brightness ] && {
                echo "setting up led ${name}"
 
+               printf "%s %s %d\n" \
+                       "$sysfs" \
+                       "$(sed -ne 's/^.*\[\(.*\)\].*$/\1/p' /sys/class/leds/${sysfs}/trigger)" \
+                       "$(cat /sys/class/leds/${sysfs}/brightness)" \
+                               >> /var/run/led.state
+
                [ "$default" = 0 ] &&
                        echo 0 >/sys/class/leds/${sysfs}/brightness
 
@@ -103,11 +109,17 @@ load_led() {
 
 start() {
        [ -e /sys/class/leds/ ] && {
-               local led
-               for led in /sys/class/leds/*; do
-                       [ -e "$led/trigger" ] && echo "none" > "$led/trigger"
-                       [ -e "$led/brightness" ] && echo "0" > "$led/brightness"
-               done
+               [ -s /var/run/led.state ] && {
+                       local led trigger brightness
+                       while read led trigger brightness; do
+                               [ -e "/sys/class/leds/$led/trigger" ] && \
+                                       echo "$trigger" > "/sys/class/leds/$led/trigger"
+
+                               [ -e "/sys/class/leds/$led/brightness" ] && \
+                                       echo "$brightness" > "/sys/class/leds/$led/brightness"
+                       done < /var/run/led.state
+                       rm /var/run/led.state
+               }
 
                config_load system
                config_foreach load_led led