base-files: support label-property-less in get_dt_leds
[openwrt/staging/mkresin.git] / package / base-files / files / lib / functions / leds.sh
1 #!/bin/sh
2 # Copyright (C) 2013 OpenWrt.org
3
4 get_dt_led_path() {
5 local ledpath
6 local basepath="/proc/device-tree"
7 local nodepath="$basepath/aliases/led-$1"
8
9 [ -f "$nodepath" ] && ledpath=$(cat "$nodepath")
10 [ -n "$ledpath" ] && ledpath="$basepath$ledpath"
11
12 echo "$ledpath"
13 }
14
15 get_dt_led() {
16 local label
17 local ledpath=$(get_dt_led_path $1)
18
19 [ -n "$ledpath" ] && \
20 label=$(cat "$ledpath/label" 2>/dev/null) || \
21 label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
22 label=$(basename "$ledpath")
23
24 echo "$label"
25 }
26
27 led_set_attr() {
28 [ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
29 }
30
31 led_timer() {
32 led_set_attr $1 "trigger" "timer"
33 led_set_attr $1 "delay_on" "$2"
34 led_set_attr $1 "delay_off" "$3"
35 }
36
37 led_on() {
38 led_set_attr $1 "trigger" "none"
39 led_set_attr $1 "brightness" 255
40 }
41
42 led_off() {
43 led_set_attr $1 "trigger" "none"
44 led_set_attr $1 "brightness" 0
45 }
46
47 status_led_restore_trigger() {
48 local trigger
49 local ledpath=$(get_dt_led_path $1)
50
51 [ -n "$ledpath" ] && \
52 trigger=$(cat "$ledpath/linux,default-trigger" 2>/dev/null)
53
54 [ -n "$trigger" ] && \
55 led_set_attr "$(get_dt_led $1)" "trigger" "$trigger"
56 }
57
58 status_led_set_timer() {
59 led_timer $status_led "$1" "$2"
60 [ -n "$status_led2" ] && led_timer $status_led2 "$1" "$2"
61 }
62
63 status_led_set_heartbeat() {
64 led_set_attr $status_led "trigger" "heartbeat"
65 }
66
67 status_led_on() {
68 led_on $status_led
69 [ -n "$status_led2" ] && led_on $status_led2
70 }
71
72 status_led_off() {
73 led_off $status_led
74 [ -n "$status_led2" ] && led_off $status_led2
75 }
76
77 status_led_blink_slow() {
78 led_timer $status_led 1000 1000
79 }
80
81 status_led_blink_fast() {
82 led_timer $status_led 100 100
83 }
84
85 status_led_blink_preinit() {
86 led_timer $status_led 100 100
87 }
88
89 status_led_blink_failsafe() {
90 led_timer $status_led 50 50
91 }
92
93 status_led_blink_preinit_regular() {
94 led_timer $status_led 200 200
95 }