ipq806x: add support for indicating the boot and upgrade state using four leds

Signed-off-by: Henryk Heisig hyniu@o2.pl
This commit is contained in:
Henryk Heisig 2016-09-30 21:36:50 +02:00 committed by John Crispin
parent 36afaae847
commit 4bdf615878
5 changed files with 54 additions and 15 deletions

View file

@ -1,34 +1,45 @@
#!/bin/sh #!/bin/sh
# Copyright (C) 2016 Henryk Heisig hyniu@o2.pl
. /lib/functions/leds.sh . /lib/functions/leds.sh
. /lib/ipq806x.sh . /lib/ipq806x.sh
get_status_led() { boot="$(ipq806x_get_dt_led boot)"
case $(ipq806x_board_name) in failsafe="$(ipq806x_get_dt_led failsafe)"
c2600) running="$(ipq806x_get_dt_led running)"
status_led="c2600:blue:status" upgrade="$(ipq806x_get_dt_led upgrade)"
;;
ea8500)
status_led="ea8500:white:power"
;;
esac
}
set_state() { set_state() {
get_status_led status_led="$boot"
case "$1" in case "$1" in
preinit) preinit)
status_led_blink_preinit status_led_blink_preinit
;; ;;
failsafe) failsafe)
status_led_off
[ -n "$running" ] && {
status_led="$running"
status_led_off
}
status_led="$failsafe"
status_led_blink_failsafe status_led_blink_failsafe
;; ;;
preinit_regular) preinit_regular)
status_led_blink_preinit_regular status_led_blink_preinit_regular
;; ;;
upgrade)
[ -n "$running" ] && {
status_led="$upgrade"
status_led_blink_preinit_regular
}
;;
done) done)
status_led_off
[ -n "$running" ] && {
status_led="$running"
status_led_on status_led_on
}
;; ;;
esac esac
} }

View file

@ -59,3 +59,15 @@ ipq806x_board_name() {
echo "$name" echo "$name"
} }
ipq806x_get_dt_led() {
local label
local ledpath
local basepath="/sys/firmware/devicetree/base"
local nodepath="$basepath/aliases/led-$1"
[ -f "$nodepath" ] && ledpath=$(cat "$nodepath")
[ -n "$ledpath" ] && label=$(cat "$basepath$ledpath/label")
echo "$label"
}

View file

@ -59,3 +59,9 @@ platform_do_upgrade() {
;; ;;
esac esac
} }
blink_led() {
. /etc/diag.sh; set_state upgrade
}
append sysupgrade_pre_upgrade blink_led

View file

@ -23,6 +23,11 @@
aliases { aliases {
serial0 = &uart4; serial0 = &uart4;
mdio-gpio0 = &mdio0; mdio-gpio0 = &mdio0;
led-boot = &power;
led-failsafe = &ledgnr;
led-running = &power;
led-upgrade = &ledgnr;
}; };
chosen { chosen {
@ -395,12 +400,12 @@
label = "c2600:blue:wan"; label = "c2600:blue:wan";
gpios = <&qcom_pinmux 33 1>; gpios = <&qcom_pinmux 33 1>;
}; };
status { power: status {
label = "c2600:blue:status"; label = "c2600:blue:status";
gpios = <&qcom_pinmux 53 0>; gpios = <&qcom_pinmux 53 0>;
default-state = "on"; default-state = "on";
}; };
ledgnr { ledgnr: ledgnr {
label = "c2600:blue:ledgnr"; label = "c2600:blue:ledgnr";
gpios = <&qcom_pinmux 66 0>; gpios = <&qcom_pinmux 66 0>;
}; };

View file

@ -24,6 +24,11 @@
aliases { aliases {
serial0 = &uart4; serial0 = &uart4;
mdio-gpio0 = &mdio0; mdio-gpio0 = &mdio0;
led-boot = &power;
led-failsafe = &power;
led-running = &power;
led-upgrade = &power;
}; };
chosen { chosen {
@ -365,7 +370,7 @@
default-state = "off"; default-state = "off";
}; };
power { power: power {
label = "ea8500:white:power"; label = "ea8500:white:power";
gpios = <&qcom_pinmux 6 1>; gpios = <&qcom_pinmux 6 1>;
default-state = "off"; default-state = "off";