base-files: leds: do reverse lookup in get_dt_led()
[openwrt/staging/chunkeey.git] / package / base-files / files / lib / functions / leds.sh
index a7532faa2fd553f2ebc6555cad2001fc84297e6f..936b165e1cf9298dffe7cfa38e58b05c58391394 100644 (file)
@@ -13,13 +13,26 @@ get_dt_led_path() {
 
 get_dt_led() {
        local label
 
 get_dt_led() {
        local label
+       local of_path
        local ledpath=$(get_dt_led_path $1)
 
        local ledpath=$(get_dt_led_path $1)
 
-       [ -n "$ledpath" ] && \
+       [ -n "$ledpath" ] && {
                label=$(cat "$ledpath/label" 2>/dev/null) || \
                label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
                label=$(basename "$ledpath")
 
                label=$(cat "$ledpath/label" 2>/dev/null) || \
                label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
                label=$(basename "$ledpath")
 
+               [ -d "/sys/class/leds/$label" ] || {
+                       label=""
+                       for node in /sys/class/leds/*; do
+                               of_path=$(grep OF_FULLNAME "$node/uevent" | cut -f2 -d'=')
+                               [ "/proc/device-tree$of_path" = "$ledpath" ] && {
+                                       label=$(basename "$node")
+                                       break
+                               }
+                       done
+               }
+       }
+
        echo "$label"
 }
 
        echo "$label"
 }