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)
committerRafał Miłecki <rafal@milecki.pl>
Wed, 6 Dec 2023 21:13:25 +0000 (22:13 +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>
(cherry picked from commit e814acc59948943c776ac319a348f72c0d19f33c)

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"