base-files: add new application led trigger backend
[openwrt/staging/rmilecki.git] / package / base-files / files / etc / init.d / led
index 9a793e9a9574ca696aedf872169d8b50a764a900..51cb8b51784a675405e77da1fbbfb14adf69606d 100755 (executable)
@@ -19,8 +19,9 @@ load_led() {
        config_get name $1 name "$sysfs"
        config_get trigger $1 trigger "none"
        config_get dev $1 dev
-       config_get mode $1 mode "link"
-       config_get_bool default $1 default "nil"
+       config_get ports $1 port
+       config_get mode $1 mode
+       config_get_bool default $1 default "0"
        config_get delayon $1 delayon
        config_get delayoff $1 delayoff
        config_get interval $1 interval "50"
@@ -30,10 +31,11 @@ load_led() {
        config_get gpio $1 gpio "0"
        config_get inverted $1 inverted "0"
 
-       if [ "$trigger" = "rssi" ]; then
-               # handled by rssileds userspace process
-               return
-       fi
+       # execute application led trigger
+       [ -f "/usr/libexec/led-trigger/${trigger}" ] && {
+               . "/usr/libexec/led-trigger/${trigger}"
+               return 0
+       }
 
        [ "$trigger" = "usbdev" ] && {
                # Backward compatibility: translate to the new trigger
@@ -70,7 +72,11 @@ load_led() {
                "netdev")
                        [ -n "$dev" ] && {
                                echo $dev > /sys/class/leds/${sysfs}/device_name
-                               echo $mode > /sys/class/leds/${sysfs}/mode
+                               for m in $mode; do
+                                       [ -e "/sys/class/leds/${sysfs}/$m" ] && \
+                                               echo 1 > /sys/class/leds/${sysfs}/$m
+                               done
+                               echo $interval > /sys/class/leds/${sysfs}/interval
                        }
                        ;;
 
@@ -108,6 +114,8 @@ load_led() {
                        config_get speed_mask $1 speed_mask
                        [ -n "$speed_mask" ] && \
                                echo $speed_mask > /sys/class/leds/${sysfs}/speed_mask
+                       [ -n "$mode" ] && \
+                               echo "$mode" > /sys/class/leds/${sysfs}/mode
                        ;;
                esac
        }