diff options
Diffstat (limited to 'arch/sandbox/board/power.c')
-rw-r--r-- | arch/sandbox/board/power.c | 24 |
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, |