summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShiji Yang2023-10-31 10:47:49 +0000
committerRafał Miłecki2023-12-06 21:13:25 +0000
commit7606dac661f60d378d2cf42c6434811e6234f252 (patch)
treee8b1a2b0e7bd1ca8392b3e3191bd94868378f213
parent6261ae12e1161ebefa94f61a1c96f9febd7ed985 (diff)
downloadopenwrt-7606dac661f60d378d2cf42c6434811e6234f252.tar.gz
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@qq.com> (cherry picked from commit e814acc59948943c776ac319a348f72c0d19f33c)
-rw-r--r--package/base-files/files/lib/functions/leds.sh31
1 files changed, 31 insertions, 0 deletions
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"