diff options
Diffstat (limited to 'drivers/parisc/led.c')
-rw-r--r-- | drivers/parisc/led.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/parisc/led.c b/drivers/parisc/led.c index 3627a2d7f79f..298f2ddb2c17 100644 --- a/drivers/parisc/led.c +++ b/drivers/parisc/led.c | |||
@@ -499,11 +499,16 @@ static int led_halt(struct notifier_block *, unsigned long, void *); | |||
499 | static struct notifier_block led_notifier = { | 499 | static struct notifier_block led_notifier = { |
500 | .notifier_call = led_halt, | 500 | .notifier_call = led_halt, |
501 | }; | 501 | }; |
502 | static int notifier_disabled = 0; | ||
502 | 503 | ||
503 | static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) | 504 | static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) |
504 | { | 505 | { |
505 | char *txt; | 506 | char *txt; |
506 | 507 | ||
508 | if (notifier_disabled) | ||
509 | return NOTIFY_OK; | ||
510 | |||
511 | notifier_disabled = 1; | ||
507 | switch (event) { | 512 | switch (event) { |
508 | case SYS_RESTART: txt = "SYSTEM RESTART"; | 513 | case SYS_RESTART: txt = "SYSTEM RESTART"; |
509 | break; | 514 | break; |
@@ -527,7 +532,6 @@ static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) | |||
527 | if (led_func_ptr) | 532 | if (led_func_ptr) |
528 | led_func_ptr(0xff); /* turn all LEDs ON */ | 533 | led_func_ptr(0xff); /* turn all LEDs ON */ |
529 | 534 | ||
530 | unregister_reboot_notifier(&led_notifier); | ||
531 | return NOTIFY_OK; | 535 | return NOTIFY_OK; |
532 | } | 536 | } |
533 | 537 | ||
@@ -758,6 +762,12 @@ not_found: | |||
758 | return 1; | 762 | return 1; |
759 | } | 763 | } |
760 | 764 | ||
765 | static void __exit led_exit(void) | ||
766 | { | ||
767 | unregister_reboot_notifier(&led_notifier); | ||
768 | return; | ||
769 | } | ||
770 | |||
761 | #ifdef CONFIG_PROC_FS | 771 | #ifdef CONFIG_PROC_FS |
762 | module_init(led_create_procfs) | 772 | module_init(led_create_procfs) |
763 | #endif | 773 | #endif |