ipq806x: add support for indicating the boot and upgrade state using four leds
authorHenryk Heisig <hyniu@o2.pl>
Fri, 30 Sep 2016 19:36:50 +0000 (21:36 +0200)
committerJohn Crispin <john@phrozen.org>
Sat, 15 Oct 2016 09:36:50 +0000 (11:36 +0200)
Signed-off-by: Henryk Heisig hyniu@o2.pl
target/linux/ipq806x/base-files/etc/diag.sh
target/linux/ipq806x/base-files/lib/ipq806x.sh
target/linux/ipq806x/base-files/lib/upgrade/platform.sh
target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts

index 0bf5934..7c9a9d0 100755 (executable)
@@ -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
 }
index 0b11b72..ea45381 100644 (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"
+}
index 7726abb..8768930 100644 (file)
@@ -59,3 +59,9 @@ platform_do_upgrade() {
                ;;
        esac
 }
+
+blink_led() {
+       . /etc/diag.sh; set_state upgrade
+}
+
+append sysupgrade_pre_upgrade blink_led
index 96c5c5d..c0a8a44 100644 (file)
        aliases {
                serial0 = &uart4;
                mdio-gpio0 = &mdio0;
+
+               led-boot = &power;
+               led-failsafe = &ledgnr;
+               led-running = &power;
+               led-upgrade = &ledgnr;
        };
 
        chosen {
                        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>;
                };
index 1bcbc9f..96e4acf 100644 (file)
        aliases {
                serial0 = &uart4;
                mdio-gpio0 = &mdio0;
+
+               led-boot = &power;
+               led-failsafe = &power;
+               led-running = &power;
+               led-upgrade = &power;
        };
 
        chosen {
                        default-state = "off";
                };
 
-               power {
+               power: power {
                        label = "ea8500:white:power";
                        gpios = <&qcom_pinmux 6 1>;
                        default-state = "off";