1 // SPDX-License-Identifier: GPL-2.0+
4 #include <dm/device_compat.h>
14 static int gpio_wdt_reset(struct udevice *dev)
16 struct gpio_wdt_priv *priv = dev_get_priv(dev);
18 priv->state = !priv->state;
20 return dm_gpio_set_value(&priv->gpio, priv->state);
23 static int gpio_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
25 struct gpio_wdt_priv *priv = dev_get_priv(dev);
27 if (priv->always_running)
33 static int dm_probe(struct udevice *dev)
35 struct gpio_wdt_priv *priv = dev_get_priv(dev);
38 priv->always_running = dev_read_bool(dev, "always-running");
39 ret = gpio_request_by_name(dev, "gpios", 0, &priv->gpio, GPIOD_IS_OUT);
41 dev_err(dev, "Request for wdt gpio failed: %d\n", ret);
45 if (priv->always_running)
46 ret = gpio_wdt_reset(dev);
51 static const struct wdt_ops gpio_wdt_ops = {
52 .start = gpio_wdt_start,
53 .reset = gpio_wdt_reset,
56 static const struct udevice_id gpio_wdt_ids[] = {
57 { .compatible = "linux,wdt-gpio" },
61 U_BOOT_DRIVER(wdt_gpio) = {
64 .of_match = gpio_wdt_ids,
67 .priv_auto = sizeof(struct gpio_wdt_priv),