diff options
Diffstat (limited to 'arch/arm/mach-tegra/common.c')
-rw-r--r-- | arch/arm/mach-tegra/common.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index 4504624cc1fd..84fc70387222 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -24,6 +24,9 @@ #include <linux/delay.h> #include <linux/highmem.h> #include <linux/memblock.h> +#include <linux/notifier.h> +#include <linux/reboot.h> +#include <linux/mqueue.h> #include <asm/hardware/cache-l2x0.h> #include <asm/system.h> @@ -128,17 +131,19 @@ static void __init tegra_init_power(void) static bool console_flushed; -static void tegra_pm_flush_console(void) +static int tegra_pm_flush_console(struct notifier_block *this, + unsigned long code, + void *unused) { if (console_flushed) - return; + return NOTIFY_NONE; console_flushed = true; printk("\n"); pr_emerg("Restarting %s\n", linux_banner); if (!try_acquire_console_sem()) { release_console_sem(); - return; + return NOTIFY_NONE; } mdelay(50); @@ -149,17 +154,23 @@ static void tegra_pm_flush_console(void) else pr_emerg("tegra_restart: Console was locked!\n"); release_console_sem(); + + return NOTIFY_NONE; } static void tegra_pm_restart(char mode, const char *cmd) { - tegra_pm_flush_console(); arm_machine_restart(mode, cmd); } +static struct notifier_block tegra_reboot_notifier = { + .notifier_call = tegra_pm_flush_console, +}; + void __init tegra_common_init(void) { arm_pm_restart = tegra_pm_restart; + register_reboot_notifier(&tegra_reboot_notifier); tegra_init_fuse(); tegra_init_clock(); tegra_clk_init_from_table(common_clk_init_table); |