/** * watchdog_init_timeout() - initialize the timeout field * @timeout_parm: timeout module parameter * @dev: Device that stores the timeout-sec property * * Initialize the timeout field of the watchdog_device struct with either the * timeout module parameter (if it is valid value) or the timeout-sec property * (only if it is a valid value and the timeout_parm is out of bounds). * If none of them are valid then we keep the old value (which should normally * be the default timeout value. * * A zero is returned on success and -EINVAL for failure. */ int watchdog_init_timeout(struct watchdog_device *wdd, unsigned int timeout_parm, struct device *dev) { unsigned int t = 0; int ret = 0; watchdog_check_min_max_timeout(wdd); /* try to get the timeout module parameter first */ if (!watchdog_timeout_invalid(wdd, timeout_parm) && timeout_parm) { wdd->timeout = timeout_parm; return ret; } if (timeout_parm) ret = -EINVAL; /* try to get the timeout_sec property */ if (dev == NULL || dev->of_node == NULL) return ret; of_property_read_u32(dev->of_node, "timeout-sec", &t); if (!watchdog_timeout_invalid(wdd, t) && t) wdd->timeout = t; else ret = -EINVAL; return ret; }
static int watchdog_set_timeout(struct watchdog_device *wdd, unsigned int timeout) { int err = 0; if (!(wdd->info->options & WDIOF_SETTIMEOUT)) return -EOPNOTSUPP; if (watchdog_timeout_invalid(wdd, timeout)) return -EINVAL; if (wdd->ops->set_timeout) err = wdd->ops->set_timeout(wdd, timeout); else wdd->timeout = timeout; watchdog_update_worker(wdd); return err; }
static int watchdog_set_timeout(struct watchdog_device *wdd, unsigned int timeout) { int err; if (!wdd->ops->set_timeout || !(wdd->info->options & WDIOF_SETTIMEOUT)) return -EOPNOTSUPP; if (watchdog_timeout_invalid(wdd, timeout)) return -EINVAL; mutex_lock(&wdd->lock); if (test_bit(WDOG_UNREGISTERED, &wdd->status)) { err = -ENODEV; goto out_timeout; } err = wdd->ops->set_timeout(wdd, timeout); out_timeout: mutex_unlock(&wdd->lock); return err; }
static int watchdog_set_timeout(struct watchdog_device *wdd, unsigned int timeout) { int err = 0; if (!(wdd->info->options & WDIOF_SETTIMEOUT)) return -EOPNOTSUPP; if (watchdog_timeout_invalid(wdd, timeout)) return -EINVAL; if (wdd->ops->set_timeout) { err = wdd->ops->set_timeout(wdd, timeout); } else { wdd->timeout = timeout; /* Disable pretimeout if it doesn't fit the new timeout */ if (wdd->pretimeout >= wdd->timeout) wdd->pretimeout = 0; } watchdog_update_worker(wdd); return err; }