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

View file

@ -59,3 +59,15 @@ ipq806x_board_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
}
blink_led() {
. /etc/diag.sh; set_state upgrade
}
append sysupgrade_pre_upgrade blink_led

View file

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

View file

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