aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorHenryk Heisig <hyniu@o2.pl>2016-09-30 21:36:50 +0200
committerJohn Crispin <john@phrozen.org>2016-10-15 11:36:50 +0200
commit4bdf615878dd98106b3fdb9e092f7349b1a8d39f (patch)
tree865935e331bc8d3435a2fd0ed14107d12c12d1d3 /target/linux
parent36afaae847135144611962eafd33e9c69ff5e1e2 (diff)
downloadupstream-4bdf615878dd98106b3fdb9e092f7349b1a8d39f.tar.gz
upstream-4bdf615878dd98106b3fdb9e092f7349b1a8d39f.tar.bz2
upstream-4bdf615878dd98106b3fdb9e092f7349b1a8d39f.zip
ipq806x: add support for indicating the boot and upgrade state using four leds
Signed-off-by: Henryk Heisig hyniu@o2.pl
Diffstat (limited to 'target/linux')
-rwxr-xr-xtarget/linux/ipq806x/base-files/etc/diag.sh35
-rw-r--r--target/linux/ipq806x/base-files/lib/ipq806x.sh12
-rw-r--r--target/linux/ipq806x/base-files/lib/upgrade/platform.sh6
-rw-r--r--target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts9
-rw-r--r--target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts7
5 files changed, 54 insertions, 15 deletions
diff --git a/target/linux/ipq806x/base-files/etc/diag.sh b/target/linux/ipq806x/base-files/etc/diag.sh
index 0bf5934ae1..7c9a9d082c 100755
--- a/target/linux/ipq806x/base-files/etc/diag.sh
+++ b/target/linux/ipq806x/base-files/etc/diag.sh
@@ -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
}
diff --git a/target/linux/ipq806x/base-files/lib/ipq806x.sh b/target/linux/ipq806x/base-files/lib/ipq806x.sh
index 0b11b721a7..ea45381d91 100644
--- a/target/linux/ipq806x/base-files/lib/ipq806x.sh
+++ b/target/linux/ipq806x/base-files/lib/ipq806x.sh
@@ -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"
+}
diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
index 7726abb91f..8768930653 100644
--- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
@@ -59,3 +59,9 @@ platform_do_upgrade() {
;;
esac
}
+
+blink_led() {
+ . /etc/diag.sh; set_state upgrade
+}
+
+append sysupgrade_pre_upgrade blink_led
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
index 96c5c5d94e..c0a8a442ab 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
@@ -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>;
};
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
index 1bcbc9f80e..96e4acf1a8 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
@@ -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";