[openwrt/openwrt] base-files: support parse DT LED color and function

LEDE Commits lede-commits at lists.infradead.org
Wed Dec 6 13:25:44 PST 2023


rmilecki pushed a commit to openwrt/openwrt.git, branch openwrt-23.05:
https://git.openwrt.org/7606dac661f60d378d2cf42c6434811e6234f252

commit 7606dac661f60d378d2cf42c6434811e6234f252
Author: Shiji Yang <yangshiji66 at qq.com>
AuthorDate: Tue Oct 31 18:47:49 2023 +0800

    base-files: support parse DT LED color and function
    
    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 at qq.com>
    (cherry picked from commit e814acc59948943c776ac319a348f72c0d19f33c)
---
 package/base-files/files/lib/functions/leds.sh | 31 ++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/package/base-files/files/lib/functions/leds.sh b/package/base-files/files/lib/functions/leds.sh
index a7532faa2f..333d900df0 100644
--- a/package/base-files/files/lib/functions/leds.sh
+++ b/package/base-files/files/lib/functions/leds.sh
@@ -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"




More information about the lede-commits mailing list