/* * "If the value of TWD needs to be changed, clear the system * watchdog timer first [...], then change the value of TWD." * (MAX77714 datasheet but applies to MAX77620 too)
*/
ret = regmap_update_bits(wdt->rmap, wdt->drv_data->reg_cnfg_glbl3,
wdt->drv_data->wdtc_mask, 0x1); if (ret < 0) return ret;
ret = regmap_update_bits(wdt->rmap, wdt->drv_data->reg_cnfg_glbl2,
MAX77620_TWD_MASK, regval); if (ret < 0) return ret;
/* Enable WD_RST_WK - WDT expire results in a restart */
ret = regmap_update_bits(wdt->rmap, wdt->drv_data->reg_onoff_cnfg2,
wdt->drv_data->bit_wd_rst_wk,
wdt->drv_data->bit_wd_rst_wk); if (ret < 0) {
dev_err(wdt->dev, "Failed to set WD_RST_WK: %d\n", ret); return ret;
}
/* Set the "auto WDT clear" bits available on the chip */
ret = regmap_update_bits(wdt->rmap, wdt->drv_data->reg_cnfg_glbl2,
wdt->drv_data->cnfg_glbl2_cfg_bits,
wdt->drv_data->cnfg_glbl2_cfg_bits); if (ret < 0) {
dev_err(wdt->dev, "Failed to set WDT OFF mode: %d\n", ret); return ret;
}
/* Check if WDT running and if yes then set flags properly */
ret = regmap_read(wdt->rmap, wdt->drv_data->reg_cnfg_glbl2, ®val); if (ret < 0) {
dev_err(wdt->dev, "Failed to read WDT CFG register: %d\n", ret); return ret;
}
switch (regval & MAX77620_TWD_MASK) { case MAX77620_TWD_2s:
wdt_dev->timeout = 2; break; case MAX77620_TWD_16s:
wdt_dev->timeout = 16; break; case MAX77620_TWD_64s:
wdt_dev->timeout = 64; break; default:
wdt_dev->timeout = 128; break;
}
if (regval & MAX77620_WDTEN)
set_bit(WDOG_HW_RUNNING, &wdt_dev->status);
module_param(nowayout, bool, 0);
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started " "(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.