soc/tegra: pmc: move to using a restart handler

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 <[email protected]>
[[email protected]: Rebased]
Signed-off-by: Tomeu Vizoso <[email protected]>
Acked-by: Stephen Warren <[email protected]>
Reviewed-by: Alexandre Courbot <[email protected]>
[[email protected]: minor cleanups]
Signed-off-by: Thierry Reding <[email protected]>
This commit is contained in:
David Riley 2015-03-18 10:52:25 +01:00 • committed by Thierry Reding
commit 7892158a96
3 changed files with 17 additions and 9 deletions

View file

@ -377,13 +377,10 @@ 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 action, void *data)
{
const char *cmd = data;
u32 value;
value = tegra_pmc_readl(PMC_SCRATCH0);
@ -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;
}