summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorShiji Yang <yangshiji66@qq.com>2023-10-31 18:47:49 +0800
committerChristian Lamparter <chunkeey@gmail.com>2023-12-02 19:46:14 +0100
commite814acc59948943c776ac319a348f72c0d19f33c (patch)
treeab8432ac808dfa3bc20d1a01296c553734644761 /package
parent6c41c585e37c44e25bc8d63c216635285aa05461 (diff)
downloadopenwrt-e814acc59948943c776ac319a348f72c0d19f33c.tar.gz
openwrt-e814acc59948943c776ac319a348f72c0d19f33c.tar.bz2
openwrt-e814acc59948943c776ac319a348f72c0d19f33c.zip
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>
Diffstat (limited to 'package')
-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"