diff options
author | Samuel Holland <samuel@sholland.org> | 2021-11-03 22:55:14 -0500 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2021-11-04 08:57:19 +0100 |
commit | a8f63d18bbb0a3e1456ac833e748d68f0ea1eece (patch) | |
tree | 982a721594127f1ddf473b18fd76da2f76c34220 /drivers/sysreset/sysreset_watchdog.c | |
parent | 5544a0114258ec4eba2a361fc975e91c419b227e (diff) |
watchdog: Automatically register device with sysreset
Add an option to automatically register watchdog devices with the
wdt_reboot driver for use with sysreset. This allows sysreset to be a
drop-in replacement for platform-specific watchdog reset code, without
needing any device tree changes.
Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'drivers/sysreset/sysreset_watchdog.c')
-rw-r--r-- | drivers/sysreset/sysreset_watchdog.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/sysreset/sysreset_watchdog.c b/drivers/sysreset/sysreset_watchdog.c index b723f5647c..35efcac59d 100644 --- a/drivers/sysreset/sysreset_watchdog.c +++ b/drivers/sysreset/sysreset_watchdog.c @@ -5,7 +5,9 @@ #include <common.h> #include <dm.h> +#include <dm/device-internal.h> #include <errno.h> +#include <malloc.h> #include <sysreset.h> #include <wdt.h> @@ -57,3 +59,25 @@ U_BOOT_DRIVER(wdt_reboot) = { .plat_auto = sizeof(struct wdt_reboot_plat), .ops = &wdt_reboot_ops, }; + +#if IS_ENABLED(CONFIG_SYSRESET_WATCHDOG_AUTO) +int sysreset_register_wdt(struct udevice *dev) +{ + struct wdt_reboot_plat *plat = malloc(sizeof(*plat)); + int ret; + + if (!plat) + return -ENOMEM; + + plat->wdt = dev; + + ret = device_bind(dev, DM_DRIVER_GET(wdt_reboot), + dev->name, plat, ofnode_null(), NULL); + if (ret) { + free(plat); + return ret; + } + + return 0; +} +#endif |