Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 916fe619 authored by Ezequiel Garcia's avatar Ezequiel Garcia Committed by Jacek Anaszewski
Browse files

leds: trigger: Introduce a kernel panic LED trigger



This commit introduces a new LED trigger which allows to configure
a LED to blink on a kernel panic (through panic_blink).

Notice that currently the Openmoko FreeRunner (GTA02) mach code
sets panic_blink to blink a hard-coded LED. The new trigger is
meant to introduce a generic mechanism to achieve this.

Signed-off-by: default avatarEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
parent f55532a0
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -108,4 +108,11 @@ config LEDS_TRIGGER_CAMERA
	  This enables direct flash/torch on/off by the driver, kernel space.
	  If unsure, say Y.

config LEDS_TRIGGER_PANIC
	bool "LED Panic Trigger"
	depends on LEDS_TRIGGERS
	help
	  This allows LEDs to be configured to blink on a kernel panic.
	  If unsure, say Y.

endif # LEDS_TRIGGERS
+1 −0
Original line number Diff line number Diff line
@@ -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_PANIC)	+= ledtrig-panic.o
+30 −0
Original line number Diff line number Diff line
/*
 * Kernel Panic LED Trigger
 *
 * Copyright 2016 Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/leds.h>

static struct led_trigger *trigger;

static long led_panic_blink(int state)
{
	led_trigger_event(trigger, state ? LED_FULL : LED_OFF);
	return 0;
}

static int __init ledtrig_panic_init(void)
{
	led_trigger_register_simple("panic", &trigger);
	panic_blink = led_panic_blink;
	return 0;
}
device_initcall(ledtrig_panic_init);