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
