mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
watchdog: wdt-uclass.c: add wdt_stop_all() helper
Since the watchdog_dev member of struct global_data is going away in favor of the wdt-uclass handling all watchdog devices, prepare for that by adding a helper to call wdt_stop() on all known devices. If an error is encountered, still do wdt_stop() on remaining devices, but remember and return the first error seen. Initially, this will only be used in one single place (board/alliedtelesis/x530/x530.c). Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
This commit is contained in:
parent
815529ebe1
commit
90555dc83e
2 changed files with 33 additions and 0 deletions
|
@ -116,6 +116,31 @@ int wdt_stop(struct udevice *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int wdt_stop_all(void)
|
||||
{
|
||||
struct wdt_priv *priv;
|
||||
struct udevice *dev;
|
||||
struct uclass *uc;
|
||||
int ret, err;
|
||||
|
||||
ret = uclass_get(UCLASS_WDT, &uc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
uclass_foreach_dev(dev, uc) {
|
||||
if (!device_active(dev))
|
||||
continue;
|
||||
priv = dev_get_uclass_priv(dev);
|
||||
if (!priv->running)
|
||||
continue;
|
||||
err = wdt_stop(dev);
|
||||
if (!ret)
|
||||
ret = err;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wdt_reset(struct udevice *dev)
|
||||
{
|
||||
const struct wdt_ops *ops = device_get_ops(dev);
|
||||
|
|
|
@ -37,6 +37,14 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags);
|
|||
*/
|
||||
int wdt_stop(struct udevice *dev);
|
||||
|
||||
/*
|
||||
* Stop all registered watchdog devices.
|
||||
*
|
||||
* @return: 0 if ok, first error encountered otherwise (but wdt_stop()
|
||||
* is still called on following devices)
|
||||
*/
|
||||
int wdt_stop_all(void);
|
||||
|
||||
/*
|
||||
* Reset the timer, typically restoring the counter to
|
||||
* the value configured by start()
|
||||
|
|
Loading…
Reference in a new issue