base-files: support parse DT LED color and function
authorShiji Yang <yangshiji66@qq.com>
Tue, 31 Oct 2023 10:47:49 +0000 (18:47 +0800)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 2 Dec 2023 18:46:14 +0000 (19:46 +0100)
The 'label' property in led node has been deprecated and we'd better
to avoid using it. This patch allows us to extract DT OF LED name
from the newly introduced LED properties "color", "function" and
"function-enumerator".

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
package/base-files/files/lib/functions/leds.sh

index a7532faa2fd553f2ebc6555cad2001fc84297e6f..333d900df0cab21e39b708d798a26e39157860b6 100644 (file)
@@ -11,6 +11,36 @@ get_dt_led_path() {
        echo "$ledpath"
 }
 
+get_dt_led_color_func() {
+       local enum
+       local func
+       local idx
+       local label
+
+       [ -e "$1/function" ] && func=$(cat "$1/function")
+       [ -e "$1/color" ] && idx=$((0x$(hexdump -n 4 -e '4/1 "%02x"' "$1/color")))
+       [ -e "$1/function-enumerator" ] && \
+               enum=$((0x$(hexdump -n 4 -e '4/1 "%02x"' "$1/function-enumerator")))
+
+       [ -z "$idx" ] && [ -z "$func" ] && return 2
+
+       if [ -n "$idx" ]; then
+               for color in "white" "red" "green" "blue" "amber" \
+                            "violet" "yellow" "ir" "multicolor" "rgb" \
+                            "purple" "orange" "pink" "cyan" "lime"
+               do
+                       [ $idx -eq 0 ] && label="$color" && break
+                       idx=$((idx-1))
+               done
+       fi
+
+       label="$label:$func"
+       [ -n "$enum" ] && label="$label-$enum"
+       echo "$label"
+
+       return 0
+}
+
 get_dt_led() {
        local label
        local ledpath=$(get_dt_led_path $1)
@@ -18,6 +48,7 @@ get_dt_led() {
        [ -n "$ledpath" ] && \
                label=$(cat "$ledpath/label" 2>/dev/null) || \
                label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
+               label=$(get_dt_led_color_func "$ledpath") || \
                label=$(basename "$ledpath")
 
        echo "$label"