Synchronized led trigger

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

I couldn't find any synchronized led triggers in the kernel. The timer trigger was blinking in random when I tried to set our 5 leds. :-)

So i created this led trigger, which can blink with a half and one hz.

Is there any place for something like this upstream? I'm prepared to make changes so it can be configured by the dtb or some other way.

Cheers
Sean Nyekjær
From 2a20ac5b7bd56958b39e9e385a2a99c4047c9e7d Mon Sep 17 00:00:00 2001
From: Sean Nyekjaer <sean.nyekjaer@xxxxxxxxx>
Date: Wed, 12 Aug 2015 14:54:38 +0200
Subject: [PATCH 1/1] Added synchronized ledtrigger driver for half and one HZ
 blinking

---
 drivers/leds/trigger/Kconfig        |  6 ++++
 drivers/leds/trigger/Makefile       |  1 +
 drivers/leds/trigger/ledtrig-sync.c | 69 +++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 drivers/leds/trigger/ledtrig-sync.c

diff --git a/drivers/leds/trigger/Kconfig b/drivers/leds/trigger/Kconfig
index 49794b4..9021f03 100644
--- a/drivers/leds/trigger/Kconfig
+++ b/drivers/leds/trigger/Kconfig
@@ -108,4 +108,10 @@ config LEDS_TRIGGER_CAMERA
 	  This enables direct flash/torch on/off by the driver, kernel space.
 	  If unsure, say Y.
 
+config LEDS_TRIGGER_SYNC
+	tristate "LED Synchronized Trigger"
+	depends on LEDS_TRIGGERS
+	help
+	  This allows LEDS to be synchronized agains a kernel timer to a half or one HZ.
+
 endif # LEDS_TRIGGERS
diff --git a/drivers/leds/trigger/Makefile b/drivers/leds/trigger/Makefile
index 1abf48d..d8f6369 100644
--- a/drivers/leds/trigger/Makefile
+++ b/drivers/leds/trigger/Makefile
@@ -8,3 +8,4 @@ obj-$(CONFIG_LEDS_TRIGGER_CPU)		+= ledtrig-cpu.o
 obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON)	+= ledtrig-default-on.o
 obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT)	+= ledtrig-transient.o
 obj-$(CONFIG_LEDS_TRIGGER_CAMERA)	+= ledtrig-camera.o
+obj-$(CONFIG_LEDS_TRIGGER_SYNC)	+= ledtrig-sync.o
diff --git a/drivers/leds/trigger/ledtrig-sync.c b/drivers/leds/trigger/ledtrig-sync.c
new file mode 100644
index 0000000..bc0467e
--- /dev/null
+++ b/drivers/leds/trigger/ledtrig-sync.c
@@ -0,0 +1,69 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/leds.h>
+#include <linux/timer.h>
+
+struct sync_led_data {
+	struct led_trigger *onehz;
+	struct led_trigger *halfhz;
+	bool on;
+	char skip;
+} sync_data;
+
+static struct timer_list check_timer;
+
+static void timer_callback(unsigned long data)
+{
+	unsigned long j = jiffies;
+	switch (sync_data.skip) {
+	case 0:
+		led_trigger_event(sync_data.onehz, LED_FULL);
+		led_trigger_event(sync_data.halfhz, LED_FULL);
+		break;
+	case 1:
+		led_trigger_event(sync_data.halfhz, LED_OFF);
+		break;
+	case 2:
+		led_trigger_event(sync_data.onehz, LED_OFF);
+		led_trigger_event(sync_data.halfhz, LED_FULL);
+		break;
+	case 3:
+		led_trigger_event(sync_data.halfhz, LED_OFF);
+		break;
+	default:
+		led_trigger_event(sync_data.onehz, LED_OFF);
+		led_trigger_event(sync_data.halfhz, LED_OFF);
+	}
+	sync_data.skip++;
+	if(sync_data.skip == 4)
+		sync_data.skip = 0;
+	mod_timer(&check_timer, jiffies + msecs_to_jiffies(500) -(jiffies - j) );
+}
+
+static int __init sync_trig_init(void)
+{
+	sync_data.on = false;
+
+	led_trigger_register_simple("halfhz", &sync_data.halfhz);
+	led_trigger_register_simple("onehz", &sync_data.onehz);
+
+	init_timer(&check_timer);
+	setup_timer( &check_timer, timer_callback, 0 );
+	mod_timer(&check_timer, jiffies + msecs_to_jiffies(500) );
+
+	return 0;
+}
+
+static void __exit sync_trig_exit(void)
+{
+	del_timer_sync(&check_timer);
+	led_trigger_unregister_simple(sync_data.halfhz);
+	led_trigger_unregister_simple(sync_data.onehz);
+}
+
+module_init(sync_trig_init);
+module_exit(sync_trig_exit);
+
+MODULE_DESCRIPTION("Half and One HZ timer led trigger");
+MODULE_AUTHOR("Prevas A/S");
+MODULE_LICENSE("GPL");
-- 
2.5.0


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux