x86: Enable DIAG LED on Geos

Based on a patch from Chris Blake <chrisrblake93@gmail.com>, except let's
do it by using the LED configuration instead of hard-coding it for each
board type. And try using /bin/board_detect to do the default behaviour,
on the first boot where the config hasn't yet been generated.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
David Woodhouse 2017-02-13 13:38:33 +00:00 committed by John Crispin
parent 27a635f0b4
commit add465f1be
2 changed files with 79 additions and 1 deletions

View file

@ -13,7 +13,7 @@ case "$board" in
traverse-technologies-geos)
ucidef_set_led_netdev "lan" "LAN" "geos:1" "br-lan" "tx rx"
ucidef_set_led_netdev "wlan" "WiFi" "geos:2" "phy0tpt"
ucidef_set_led_default "diag" "DIAG" "geos:3" "0"
ucidef_set_led_default "diag" "DIAG" "geos:3" "1"
;;
esac
board_config_flush

View file

@ -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
}