Lines Matching +full:watchdog +full:- +full:timeout +full:- +full:ms
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * MEN 14F021P00 Board Management Controller (BMC) Watchdog Driver.
11 #include <linux/watchdog.h>
30 MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
42 rst_rsn = i2c_smbus_read_byte_data(data->i2c_client, BMC_CMD_RST_RSN); in menf21bmc_wdt_set_bootstatus()
47 data->wdt.bootstatus |= WDIOF_CARDRESET; in menf21bmc_wdt_set_bootstatus()
49 data->wdt.bootstatus |= WDIOF_EXTERN1; in menf21bmc_wdt_set_bootstatus()
51 data->wdt.bootstatus |= WDIOF_EXTERN2; in menf21bmc_wdt_set_bootstatus()
53 data->wdt.bootstatus |= WDIOF_POWERUNDER; in menf21bmc_wdt_set_bootstatus()
62 return i2c_smbus_write_byte(drv_data->i2c_client, BMC_CMD_WD_ON); in menf21bmc_wdt_start()
69 return i2c_smbus_write_byte_data(drv_data->i2c_client, in menf21bmc_wdt_stop()
74 menf21bmc_wdt_settimeout(struct watchdog_device *wdt, unsigned int timeout) in menf21bmc_wdt_settimeout() argument
80 * BMC Watchdog does have a resolution of 100ms. in menf21bmc_wdt_settimeout()
81 * Watchdog API defines the timeout in seconds, so we have to in menf21bmc_wdt_settimeout()
84 ret = i2c_smbus_write_word_data(drv_data->i2c_client, in menf21bmc_wdt_settimeout()
85 BMC_CMD_WD_TIME, timeout * 10); in menf21bmc_wdt_settimeout()
89 wdt->timeout = timeout; in menf21bmc_wdt_settimeout()
98 return i2c_smbus_write_byte(drv_data->i2c_client, BMC_CMD_WD_TRIG); in menf21bmc_wdt_ping()
116 struct device *dev = &pdev->dev; in menf21bmc_wdt_probe()
119 struct i2c_client *i2c_client = to_i2c_client(dev->parent); in menf21bmc_wdt_probe()
123 return -ENOMEM; in menf21bmc_wdt_probe()
125 drv_data->wdt.ops = &menf21bmc_wdt_ops; in menf21bmc_wdt_probe()
126 drv_data->wdt.info = &menf21bmc_wdt_info; in menf21bmc_wdt_probe()
127 drv_data->wdt.min_timeout = BMC_WD_TIMEOUT_MIN; in menf21bmc_wdt_probe()
128 drv_data->wdt.max_timeout = BMC_WD_TIMEOUT_MAX; in menf21bmc_wdt_probe()
129 drv_data->wdt.parent = dev; in menf21bmc_wdt_probe()
130 drv_data->i2c_client = i2c_client; in menf21bmc_wdt_probe()
133 * Get the current wdt timeout value from the BMC because in menf21bmc_wdt_probe()
136 bmc_timeout = i2c_smbus_read_word_data(drv_data->i2c_client, in menf21bmc_wdt_probe()
139 dev_err(dev, "failed to get current WDT timeout\n"); in menf21bmc_wdt_probe()
143 watchdog_init_timeout(&drv_data->wdt, bmc_timeout / 10, dev); in menf21bmc_wdt_probe()
144 watchdog_set_nowayout(&drv_data->wdt, nowayout); in menf21bmc_wdt_probe()
145 watchdog_set_drvdata(&drv_data->wdt, drv_data); in menf21bmc_wdt_probe()
150 dev_err(dev, "failed to set Watchdog bootstatus\n"); in menf21bmc_wdt_probe()
154 ret = devm_watchdog_register_device(dev, &drv_data->wdt); in menf21bmc_wdt_probe()
158 dev_info(dev, "MEN 14F021P00 BMC Watchdog device enabled\n"); in menf21bmc_wdt_probe()
167 i2c_smbus_write_word_data(drv_data->i2c_client, in menf21bmc_wdt_shutdown()
181 MODULE_DESCRIPTION("MEN 14F021P00 BMC Watchdog driver");