x86: Enable DIAG LED on Geos
[openwrt/staging/florian.git] / target / linux / x86 / base-files / etc / diag.sh
diff --git a/target/linux/x86/base-files/etc/diag.sh b/target/linux/x86/base-files/etc/diag.sh
new file mode 100644 (file)
index 0000000..3af4b23
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Copyright © 2017 OpenWrt.org
+#
+
+. /lib/functions.sh
+. /lib/functions/leds.sh
+. /usr/share/libubox/jshn.sh
+
+preinit_match_diag_led() {
+       local CFG keys key cfg name sysfs default
+
+       CFG=/etc/board.json
+       if [ ! -s $CFG ]; then
+               CFG=/tmp/board.json
+               [ -s /tmp/sysinfo/model ] || return
+               /bin/board_detect $CFG || return
+       fi
+
+       json_init
+       json_load "$(cat $CFG)"
+       json_get_keys keys led
+       json_select led
+       for key in $keys; do
+               json_select "$key"
+               json_get_vars name sysfs default
+
+               if [ "$name" = "DIAG" -a "$default" = "1" ]; then
+                       status_led="$sysfs"
+                       return
+               fi
+               json_select ..
+       done
+}
+
+match_diag_led() {
+       local name
+       local default
+       local sysfs
+       config_get name "$1" name
+       config_get default "$1" default
+       config_get sysfs "$1" sysfs
+
+       if [ "$name" = "DIAG" -a "$default" = "1" ]; then
+               status_led="$sysfs"
+       fi
+}
+
+get_status_led() {
+       if [ -s /etc/config/system ]; then
+               config_load system
+               config_foreach match_diag_led led
+       else
+               preinit_match_diag_led
+       fi
+}
+
+set_state() {
+       get_status_led
+
+       case "$1" in
+       preinit)
+               status_led_blink_preinit
+               ;;
+
+       failsafe)
+               status_led_blink_failsafe
+               ;;
+
+       preinit_regular)
+               status_led_blink_preinit_regular
+               ;;
+
+       done)
+               status_led_on
+               ;;
+       esac
+}