[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1423731078-26681-11-git-send-email-tomeu.vizoso@collabora.com>
Date: Thu, 12 Feb 2015 09:51:04 +0100
From: Tomeu Vizoso <tomeu.vizoso@...labora.com>
To: linux-tegra@...r.kernel.org
Cc: Stephen Warren <swarren@...dotorg.org>,
Javier Martinez Canillas <javier.martinez@...labora.co.uk>,
Simon Glass <sjg@...omium.org>,
Dylan Reid <dgreid@...omium.org>,
Andrew Bresticker <abrestic@...omium.org>,
David Riley <davidriley@...omium.org>,
Tomeu Vizoso <tomeu.vizoso@...labora.com>,
Russell King <linux@....linux.org.uk>,
Thierry Reding <thierry.reding@...il.com>,
Alexandre Courbot <gnurou@...il.com>,
Peter De Schrijver <pdeschrijver@...dia.com>,
Paul Walmsley <paul@...an.com>,
Mikko Perttunen <mperttunen@...dia.com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: [PATCH v5 10/11] soc/tegra: pmc: move to using a restart handler
From: David Riley <davidriley@...omium.org>
The pmc driver was previously exporting tegra_pmc_restart, which was
assigned to machine_desc.init_machine, taking precedence over the
restart handlers registered through register_restart_handler().
Signed-off-by: David Riley <davidriley@...omium.org>
[tomeu.vizoso@...labora.com: Rebased]
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@...labora.com>
---
arch/arm/mach-tegra/tegra.c | 1 -
drivers/soc/tegra/pmc.c | 31 +++++++++++++++++++++----------
2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c
index 914341b..4805ef6 100644
--- a/arch/arm/mach-tegra/tegra.c
+++ b/arch/arm/mach-tegra/tegra.c
@@ -164,6 +164,5 @@ DT_MACHINE_START(TEGRA_DT, "NVIDIA Tegra SoC (Flattened Device Tree)")
.init_irq = tegra_dt_init_irq,
.init_machine = tegra_dt_init,
.init_late = tegra_dt_init_late,
- .restart = tegra_pmc_restart,
.dt_compat = tegra_dt_board_compat,
MACHINE_END
diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index c956395..0285b74 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -377,26 +377,23 @@ int tegra_pmc_cpu_remove_clamping(int cpuid)
}
#endif /* CONFIG_SMP */
-/**
- * tegra_pmc_restart() - reboot the system
- * @mode: which mode to reboot in
- * @cmd: reboot command
- */
-void tegra_pmc_restart(enum reboot_mode mode, const char *cmd)
+static int tegra_pmc_restart_notify(struct notifier_block *this,
+ unsigned long mode, void *cmd)
{
u32 value;
+ const char *cmd_str = (const char *) cmd;
value = tegra_pmc_readl(PMC_SCRATCH0);
value &= ~PMC_SCRATCH0_MODE_MASK;
- if (cmd) {
- if (strcmp(cmd, "recovery") == 0)
+ if (cmd_str) {
+ if (strcmp(cmd_str, "recovery") == 0)
value |= PMC_SCRATCH0_MODE_RECOVERY;
- if (strcmp(cmd, "bootloader") == 0)
+ if (strcmp(cmd_str, "bootloader") == 0)
value |= PMC_SCRATCH0_MODE_BOOTLOADER;
- if (strcmp(cmd, "forced-recovery") == 0)
+ if (strcmp(cmd_str, "forced-recovery") == 0)
value |= PMC_SCRATCH0_MODE_RCM;
}
@@ -405,8 +402,15 @@ void tegra_pmc_restart(enum reboot_mode mode, const char *cmd)
value = tegra_pmc_readl(0);
value |= 0x10;
tegra_pmc_writel(value, 0);
+
+ return NOTIFY_DONE;
}
+static struct notifier_block tegra_pmc_restart_handler = {
+ .notifier_call = tegra_pmc_restart_notify,
+ .priority = 128,
+};
+
static int powergate_show(struct seq_file *s, void *data)
{
unsigned int i;
@@ -837,6 +841,13 @@ static int tegra_pmc_probe(struct platform_device *pdev)
return err;
}
+ err = register_restart_handler(&tegra_pmc_restart_handler);
+ if (err) {
+ dev_err(&pdev->dev, "unable to register restart handler, %d\n",
+ err);
+ return err;
+ }
+
return 0;
}
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists