Lines Matching +full:sp7021 +full:- +full:reset

1 // SPDX-License-Identifier: GPL-2.0-only
14 #include <linux/reset.h>
33 #define DEVICE_NAME "sunplus-wdt"
55 void __iomem *base = priv->base; in sp_wdt_restart()
69 void __iomem *base = priv->base; in sp_wdt_ping()
72 if (wdev->timeout > SP_WDT_MAX_TIMEOUT) { in sp_wdt_ping()
73 /* WDT_CONMAX sets the count to the maximum (down-counting). */ in sp_wdt_ping()
78 * Watchdog timer is a 20-bit down-counting based on STC_CLK. in sp_wdt_ping()
82 count = (wdev->timeout * STC_CLK) >> 4; in sp_wdt_ping()
93 void __iomem *base = priv->base; in sp_wdt_stop()
103 void __iomem *base = priv->base; in sp_wdt_start()
113 void __iomem *base = priv->base; in sp_wdt_get_timeleft()
146 struct device *dev = &pdev->dev; in sp_wdt_probe()
152 return -ENOMEM; in sp_wdt_probe()
154 priv->clk = devm_clk_get_enabled(dev, NULL); in sp_wdt_probe()
155 if (IS_ERR(priv->clk)) in sp_wdt_probe()
156 return dev_err_probe(dev, PTR_ERR(priv->clk), "Failed to enable clock\n"); in sp_wdt_probe()
158 /* The timer and watchdog shared the STC reset */ in sp_wdt_probe()
159 priv->rstc = devm_reset_control_get_shared(dev, NULL); in sp_wdt_probe()
160 if (IS_ERR(priv->rstc)) in sp_wdt_probe()
161 return dev_err_probe(dev, PTR_ERR(priv->rstc), "Failed to get reset\n"); in sp_wdt_probe()
163 reset_control_deassert(priv->rstc); in sp_wdt_probe()
165 ret = devm_add_action_or_reset(dev, sp_reset_control_assert, priv->rstc); in sp_wdt_probe()
169 priv->base = devm_platform_ioremap_resource(pdev, 0); in sp_wdt_probe()
170 if (IS_ERR(priv->base)) in sp_wdt_probe()
171 return PTR_ERR(priv->base); in sp_wdt_probe()
173 priv->wdev.info = &sp_wdt_info; in sp_wdt_probe()
174 priv->wdev.ops = &sp_wdt_ops; in sp_wdt_probe()
175 priv->wdev.timeout = SP_WDT_DEFAULT_TIMEOUT; in sp_wdt_probe()
176 priv->wdev.max_hw_heartbeat_ms = SP_WDT_MAX_TIMEOUT * 1000; in sp_wdt_probe()
177 priv->wdev.min_timeout = 1; in sp_wdt_probe()
178 priv->wdev.parent = dev; in sp_wdt_probe()
180 watchdog_set_drvdata(&priv->wdev, priv); in sp_wdt_probe()
181 watchdog_init_timeout(&priv->wdev, timeout, dev); in sp_wdt_probe()
182 watchdog_set_nowayout(&priv->wdev, nowayout); in sp_wdt_probe()
183 watchdog_stop_on_reboot(&priv->wdev); in sp_wdt_probe()
184 watchdog_set_restart_priority(&priv->wdev, 128); in sp_wdt_probe()
186 return devm_watchdog_register_device(dev, &priv->wdev); in sp_wdt_probe()
190 {.compatible = "sunplus,sp7021-wdt", },