summaryrefslogtreecommitdiffstats
path: root/arch/sandbox/board/power.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sandbox/board/power.c')
-rw-r--r--arch/sandbox/board/power.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/arch/sandbox/board/power.c b/arch/sandbox/board/power.c
index aa778792c1..8300c589c7 100644
--- a/arch/sandbox/board/power.c
+++ b/arch/sandbox/board/power.c
@@ -1,9 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
#include <common.h>
#include <driver.h>
#include <poweroff.h>
#include <restart.h>
#include <mach/linux.h>
-#include <reset_source.h>
+#include <asm/reset_source.h>
#include <linux/nvmem-consumer.h>
struct sandbox_power {
@@ -16,7 +18,8 @@ static void sandbox_poweroff(struct poweroff_handler *poweroff)
{
struct sandbox_power *power = container_of(poweroff, struct sandbox_power, poweroff);
- nvmem_cell_write(power->reset_source_cell, &(u8) { RESET_POR }, 1);
+ sandbox_save_reset_source(power->reset_source_cell, RESET_POR);
+
linux_exit();
}
@@ -27,16 +30,14 @@ static void sandbox_rst_hang(struct restart_handler *rst)
static void sandbox_rst_reexec(struct restart_handler *rst)
{
- u8 reason = RESET_RST;
struct sandbox_power *power = container_of(rst, struct sandbox_power, rst_reexec);
- if (!IS_ERR(power->reset_source_cell))
- WARN_ON(nvmem_cell_write(power->reset_source_cell, &reason, 1) <= 0);
+ sandbox_save_reset_source(power->reset_source_cell, RESET_RST);
linux_reexec();
}
-static int sandbox_power_probe(struct device_d *dev)
+static int sandbox_power_probe(struct device *dev)
{
struct sandbox_power *power = xzalloc(sizeof(*power));
size_t len;
@@ -64,9 +65,13 @@ static int sandbox_power_probe(struct device_d *dev)
if (IS_ENABLED(CONFIG_SANDBOX_REEXEC))
restart_handler_register(&power->rst_reexec);
- power->reset_source_cell = of_nvmem_cell_get(dev->device_node, "reset-source");
+ power->reset_source_cell = of_nvmem_cell_get(dev->of_node,
+ "reset-source");
if (IS_ERR(power->reset_source_cell)) {
- dev_warn(dev, "No reset source info available: %pe\n", power->reset_source_cell);
+ if (PTR_ERR(power->reset_source_cell) != -EPROBE_DEFER)
+ dev_warn(dev, "No reset source info available: %pe\n",
+ power->reset_source_cell);
+ power->reset_source_cell = NULL;
return 0;
}
@@ -84,8 +89,9 @@ static __maybe_unused struct of_device_id sandbox_power_dt_ids[] = {
{ .compatible = "barebox,sandbox-power" },
{ /* sentinel */ }
};
+MODULE_DEVICE_TABLE(of, sandbox_power_dt_ids);
-static struct driver_d sandbox_power_drv = {
+static struct driver sandbox_power_drv = {
.name = "sandbox-power",
.of_compatible = sandbox_power_dt_ids,
.probe = sandbox_power_probe,