clearfog: setup LEDs for SFP and LINE/EXPRESS indication

At first, refactor this so that we only have one single package for
userspace LED control. We're still using two system units because the
"status everything is OK" should only be given at the very end of the
boot. The regular LED setup for, e.g., link state monitoring on the
other hand should be performed ASAP.

There's no support for DTS-based trigger setup, which means that we have
to go via userspace. There's sadly no clear way of obtaining the GPIO#
from userspace (`lsgpio` and `gpiofind` return something else) so we
have to rely on debugfs :(.

Change-Id: I835f7e9232a30a54da6454ab4e342ae5b2384b47
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index 7dfe952..c3ca70d 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -75,7 +75,8 @@
 CZECHLIGHT_CFG_FS_SIZE="256M"
 CZECHLIGHT_CFG_FS_PERSIST_SYSREPO=y
 CZECHLIGHT_CFG_FS_PERSIST_KEYS=y
-BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS_BOOT=y
+BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS=y
+CZECHLIGHT_CLEARFOG_LEDS_BOOT=y
 CZECHLIGHT_RAUC_ROOTFS=y
 CZECHLIGHT_RAUC_COMPATIBLE="czechlight-clearfog"
 CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV="/dev/mmcblk0p1"
diff --git a/package/Config.in b/package/Config.in
index cc97cbe..88752cc 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1,6 +1,6 @@
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/cla-sysrepo/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-cfg-fs/Config.in"
-source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-clearfog-leds-boot/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-clearfog-leds/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-rauc/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-separate-boot/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/grub2-tools/Config.in"
diff --git a/package/czechlight-clearfog-leds-boot/Config.in b/package/czechlight-clearfog-leds-boot/Config.in
deleted file mode 100644
index 88e47ff..0000000
--- a/package/czechlight-clearfog-leds-boot/Config.in
+++ /dev/null
@@ -1,4 +0,0 @@
-config BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS_BOOT
-	bool "Indicate a successful boot via LEDs"
-	depends on CZECHLIGHT_RAUC_ROOTFS
-	depends on BR2_INIT_SYSTEMD
diff --git a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk b/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk
deleted file mode 100644
index 8d0896a..0000000
--- a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds-boot.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-define CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS
-	mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-	$(INSTALL) -D -m 0644 \
-		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service \
-		$(TARGET_DIR)/usr/lib/systemd/system/
-	ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-endef
-
-$(eval $(generic-package))
diff --git a/package/czechlight-clearfog-leds/Config.in b/package/czechlight-clearfog-leds/Config.in
new file mode 100644
index 0000000..5072348
--- /dev/null
+++ b/package/czechlight-clearfog-leds/Config.in
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
+	bool "LED functions for Clearfog-based CzechLight devices"
+	depends on BR2_INIT_SYSTEMD
+	help
+	  Userspace configuration of LEDs for indicating various states.
+
+if BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
+
+config CZECHLIGHT_CLEARFOG_LEDS_BOOT
+	bool "Indicate a successful boot via LEDs"
+	depends on CZECHLIGHT_RAUC_ROOTFS
+	default Y
+
+endif # BR2_PACKAGE_CZECHLIGHT_CLEARFOG_LEDS
diff --git a/package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
similarity index 100%
rename from package/czechlight-clearfog-leds-boot/czechlight-clearfog-leds.service
rename to package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
new file mode 100644
index 0000000..8af2f9b
--- /dev/null
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
@@ -0,0 +1,19 @@
+ifdef CZECHLIGHT_CLEARFOG_LEDS_BOOT
+define CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS
+        $(INSTALL) -D -m 0644 \
+                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds-boot.service \
+                $(TARGET_DIR)/usr/lib/systemd/system/
+        ln -sf ../czechlight-clearfog-leds-boot.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+endef
+endif
+
+define CZECHLIGHT_CLEARFOG_LEDS_INSTALL_TARGET_CMDS
+        mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+        $(INSTALL) -D -m 0644 \
+                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service \
+                $(TARGET_DIR)/usr/lib/systemd/system/
+        ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+	$(CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS)
+endef
+
+$(eval $(generic-package))
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
new file mode 100644
index 0000000..72f0202
--- /dev/null
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Indication of component state via LEDs on Clearfog
+
+[Service]
+Type=oneshot
+# SFP: green lit for "link"
+# SFP: green blinking for activity
+ExecStart=/bin/sh -c 'echo netdev > /sys/class/leds/sfp:green/trigger'
+ExecStart=/bin/sh -c 'echo eth2 > /sys/class/leds/sfp:green/device_name'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/link'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/rx'
+ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/tx'
+# LINE/EXPRESS: green for "we're getting some signal"
+ExecStart=/bin/sh -c 'echo gpio > /sys/class/leds/line:green/trigger'
+ExecStart=/bin/sh -c "sed -En 's/.*gpio-(.*) \\(EDFA1_ST1_IN_LOS_A .*/\\1/p' /sys/kernel/debug/gpio > /sys/class/leds/line:green/gpio"