With this commit users are able to configure all extra features of the
Turris Omnia LED driver (global brightness, individual LED color,
individual autonomous flag). For example:

uci set omnia_led.main.global_brightness='6'
uci set omnia_led.power.color='255 0 0'
service omnia_led start
uci commit

This is achieved by the /etc/init.d/omnia_led script, which generates its
own default configuration /etc/config/omnia_led upon the first boot.

In the default configuration, all LAN and PCI LEDs (5+3) function
autonomously. The remaining 4 LEDs are driven by software
(autonomous=0) and have sensible UCI defaults.

The WAN LED uses the netdev trigger (benefit: this also works with SFP).

Signed-off-by: Klaus Kudielka <[email protected]>
---
 .../mvebu/base-files/etc/board.d/01_leds      |  6 ++
 .../mvebu/base-files/etc/init.d/omnia_led     | 90 +++++++++++++++++++
 2 files changed, 96 insertions(+)
 create mode 100755 target/linux/mvebu/base-files/etc/init.d/omnia_led

diff --git a/target/linux/mvebu/base-files/etc/board.d/01_leds 
b/target/linux/mvebu/base-files/etc/board.d/01_leds
index ff8d4a21c0..96723d0295 100755
--- a/target/linux/mvebu/base-files/etc/board.d/01_leds
+++ b/target/linux/mvebu/base-files/etc/board.d/01_leds
@@ -41,6 +41,12 @@ armada-385-linksys-venom)
        ucidef_set_led_usbport "usb2" "USB 2" "pca963x:venom:blue:usb3_1" 
"usb2-port1" "usb3-port1"
        ucidef_set_led_usbport "usb2_ss" "USB 2 SS" "pca963x:venom:blue:usb3_2" 
"usb3-port1"
        ;;
+armada-385-turris-omnia)
+       ucidef_set_led_default "power" "POWER" "omnia-led:power" "1"
+       ucidef_set_led_netdev "wan" "WAN" "omnia-led:wan" "eth2"
+       ucidef_set_led_default "user1" "A" "omnia-led:user1" "0"
+       ucidef_set_led_default "user2" "B" "omnia-led:user2" "0"
+       ;;
 armada-xp-linksys-mamba)
        ucidef_set_led_netdev "wan" "WAN" "mamba:white:wan" "eth1"
        ucidef_set_led_usbport "usb1" "USB 1" "mamba:white:usb2" "usb1-port1"
diff --git a/target/linux/mvebu/base-files/etc/init.d/omnia_led 
b/target/linux/mvebu/base-files/etc/init.d/omnia_led
new file mode 100755
index 0000000000..bbe605d75a
--- /dev/null
+++ b/target/linux/mvebu/base-files/etc/init.d/omnia_led
@@ -0,0 +1,90 @@
+#!/bin/sh /etc/rc.common
+
+START=96
+
+. /lib/functions/leds.sh
+
+config=omnia_led
+
+omnia_set() {
+       local type
+       local sect
+
+       type=$1
+       sect=$2
+       uci set $config.$sect=$type
+       shift
+       shift
+       while [ -n "$1" ]; do
+               uci set $config.$sect.$1="$2"
+               shift
+               shift
+       done
+}
+
+omnia_generate_config() {
+       echo "Generating /etc/config/$config"
+       touch /etc/config/$config
+       omnia_set controller main global_brightness 100
+       omnia_set led all sysfs omnia-led:all color "255 255 255"
+       omnia_set led power sysfs omnia-led:power autonomous 0
+       omnia_set led lan0 sysfs omnia-led:lan0 autonomous 1
+       omnia_set led lan1 sysfs omnia-led:lan1 autonomous 1
+       omnia_set led lan2 sysfs omnia-led:lan2 autonomous 1
+       omnia_set led lan3 sysfs omnia-led:lan3 autonomous 1
+       omnia_set led lan4 sysfs omnia-led:lan4 autonomous 1
+       omnia_set led wan sysfs omnia-led:wan autonomous 0
+       omnia_set led pci1 sysfs omnia-led:pci1 autonomous 1
+       omnia_set led pci2 sysfs omnia-led:pci2 autonomous 1
+       omnia_set led pci3 sysfs omnia-led:pci3 autonomous 1
+       omnia_set led user1 sysfs omnia-led:user1 autonomous 0
+       omnia_set led user2 sysfs omnia-led:user2 autonomous 0
+       uci commit $config
+}
+
+omnia_load_global_brightness() {
+       local path
+       local global_brightness
+
+       path=/sys/bus/i2c/devices/1-002b
+       config_get global_brightness main global_brightness 100
+
+       [ -d $path ] && {
+               echo "Setting up led controller"
+               echo "$global_brightness" >$path/global_brightness 2>/dev/null 
||
+               echo "   Failed to set global_brightness to 
'$global_brightness'"
+       } || echo "Could not find led controller at $path"
+}
+
+omnia_load_led() {
+       local sysfs
+       local color
+       local autonomous
+
+       config_get sysfs $1 sysfs
+       config_get color $1 color
+       config_get autonomous $1 autonomous
+
+       [ -n "$sysfs" ] && {
+               [ -d "/sys/class/leds/$sysfs" ] && {
+                       echo "Setting up $sysfs"
+                       [ -n "$color" ] && {
+                               led_set_attr "$sysfs" color "$color" 
2>/dev/null ||
+                               echo "   Failed to set color to '$color'"
+                       } || true
+                       [ -n "$autonomous" ] && {
+                               led_set_attr "$sysfs" autonomous "$autonomous" 
2>/dev/null ||
+                               echo "   Failed to set autonomous to 
'$autonomous'"
+                       } || true
+               } || echo "Could not find $sysfs in /sys/class/leds"
+       } || echo "Could not find sysfs option in led section '$1'"
+}
+
+start() {
+       [ $(board_name) = armada-385-turris-omnia -a -d 
/sys/bus/i2c/drivers/leds-omnia ] && {
+               [ ! -s /etc/config/$config ] && omnia_generate_config
+               config_load $config
+               omnia_load_global_brightness
+               config_foreach omnia_load_led led
+       }
+}
-- 
2.17.1


_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to