936b165e1cf9298dffe7cfa38e58b05c58391394
[openwrt/staging/chunkeey.git] / package / base-files / files / lib / functions / leds.sh
1 # Copyright (C) 2013 OpenWrt.org
2
3 get_dt_led_path() {
4 local ledpath
5 local basepath="/proc/device-tree"
6 local nodepath="$basepath/aliases/led-$1"
7
8 [ -f "$nodepath" ] && ledpath=$(cat "$nodepath")
9 [ -n "$ledpath" ] && ledpath="$basepath$ledpath"
10
11 echo "$ledpath"
12 }
13
14 get_dt_led() {
15 local label
16 local of_path
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 [ -d "/sys/class/leds/$label" ] || {
25 label=""
26 for node in /sys/class/leds/*; do
27 of_path=$(grep OF_FULLNAME "$node/uevent" | cut -f2 -d'=')
28 [ "/proc/device-tree$of_path" = "$ledpath" ] && {
29 label=$(basename "$node")
30 break
31 }
32 done
33 }
34 }
35
36 echo "$label"
37 }
38
39 led_set_attr() {
40 [ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
41 }
42
43 led_timer() {
44 led_set_attr $1 "trigger" "timer"
45 led_set_attr $1 "delay_on" "$2"
46 led_set_attr $1 "delay_off" "$3"
47 }
48
49 led_on() {
50 led_set_attr $1 "trigger" "none"
51 led_set_attr $1 "brightness" 255
52 }
53
54 led_off() {
55 led_set_attr $1 "trigger" "none"
56 led_set_attr $1 "brightness" 0
57 }
58
59 status_led_restore_trigger() {
60 local trigger
61 local ledpath=$(get_dt_led_path $1)
62
63 [ -n "$ledpath" ] && \
64 trigger=$(cat "$ledpath/linux,default-trigger" 2>/dev/null)
65
66 [ -n "$trigger" ] && \
67 led_set_attr "$(get_dt_led $1)" "trigger" "$trigger"
68 }
69
70 status_led_set_timer() {
71 led_timer $status_led "$1" "$2"
72 [ -n "$status_led2" ] && led_timer $status_led2 "$1" "$2"
73 }
74
75 status_led_set_heartbeat() {
76 led_set_attr $status_led "trigger" "heartbeat"
77 }
78
79 status_led_on() {
80 led_on $status_led
81 [ -n "$status_led2" ] && led_on $status_led2
82 }
83
84 status_led_off() {
85 led_off $status_led
86 [ -n "$status_led2" ] && led_off $status_led2
87 }
88
89 status_led_blink_slow() {
90 led_timer $status_led 1000 1000
91 }
92
93 status_led_blink_fast() {
94 led_timer $status_led 100 100
95 }
96
97 status_led_blink_preinit() {
98 led_timer $status_led 100 100
99 }
100
101 status_led_blink_failsafe() {
102 led_timer $status_led 50 50
103 }
104
105 status_led_blink_preinit_regular() {
106 led_timer $status_led 200 200
107 }