diff options
Diffstat (limited to 'drivers/leds')
| -rw-r--r-- | drivers/leds/ledtrig-heartbeat.c | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/leds/ledtrig-heartbeat.c b/drivers/leds/ledtrig-heartbeat.c index 41dc76db431..a019fbb7088 100644 --- a/drivers/leds/ledtrig-heartbeat.c +++ b/drivers/leds/ledtrig-heartbeat.c @@ -21,6 +21,8 @@  #include <linux/reboot.h>  #include "leds.h" +static int panic_heartbeats; +  struct heartbeat_trig_data {  	unsigned int phase;  	unsigned int period; @@ -34,6 +36,11 @@ static void led_heartbeat_function(unsigned long data)  	unsigned long brightness = LED_OFF;  	unsigned long delay = 0; +	if (unlikely(panic_heartbeats)) { +		led_set_brightness(led_cdev, LED_OFF); +		return; +	} +  	/* acts like an actual heart beat -- ie thump-thump-pause... */  	switch (heartbeat_data->phase) {  	case 0: @@ -111,12 +118,19 @@ static int heartbeat_reboot_notifier(struct notifier_block *nb,  	return NOTIFY_DONE;  } +static int heartbeat_panic_notifier(struct notifier_block *nb, +				     unsigned long code, void *unused) +{ +	panic_heartbeats = 1; +	return NOTIFY_DONE; +} +  static struct notifier_block heartbeat_reboot_nb = {  	.notifier_call = heartbeat_reboot_notifier,  };  static struct notifier_block heartbeat_panic_nb = { -	.notifier_call = heartbeat_reboot_notifier, +	.notifier_call = heartbeat_panic_notifier,  };  static int __init heartbeat_trig_init(void)  |