Lines Matching refs:wdt

56 static void mlxreg_wdt_check_card_reset(struct mlxreg_wdt *wdt)
62 if (wdt->reset_idx == -EINVAL)
65 if (!(wdt->wdd.info->options & WDIOF_CARDRESET))
68 reg_data = &wdt->pdata->data[wdt->reset_idx];
69 rc = regmap_read(wdt->regmap, reg_data->reg, &regval);
72 wdt->wdd.bootstatus = WDIOF_CARDRESET;
73 dev_info(wdt->wdd.parent,
81 struct mlxreg_wdt *wdt = watchdog_get_drvdata(wdd);
82 struct mlxreg_core_data *reg_data = &wdt->pdata->data[wdt->action_idx];
84 return regmap_update_bits(wdt->regmap, reg_data->reg, ~reg_data->mask,
90 struct mlxreg_wdt *wdt = watchdog_get_drvdata(wdd);
91 struct mlxreg_core_data *reg_data = &wdt->pdata->data[wdt->action_idx];
93 return regmap_update_bits(wdt->regmap, reg_data->reg, ~reg_data->mask,
99 struct mlxreg_wdt *wdt = watchdog_get_drvdata(wdd);
100 struct mlxreg_core_data *reg_data = &wdt->pdata->data[wdt->ping_idx];
102 return regmap_write_bits(wdt->regmap, reg_data->reg, ~reg_data->mask,
109 struct mlxreg_wdt *wdt = watchdog_get_drvdata(wdd);
110 struct mlxreg_core_data *reg_data = &wdt->pdata->data[wdt->timeout_idx];
114 switch (wdt->wdt_type) {
116 rc = regmap_read(wdt->regmap, reg_data->reg, &regval);
124 rc = regmap_write(wdt->regmap, reg_data->reg, regval);
128 rc = regmap_write(wdt->regmap, reg_data->reg, timeout);
133 if (wdt->regmap_val_sz == 1) {
135 rc = regmap_write(wdt->regmap, reg_data->reg, regval);
138 rc = regmap_write(wdt->regmap,
142 rc = regmap_write(wdt->regmap, reg_data->reg, timeout);
167 struct mlxreg_wdt *wdt = watchdog_get_drvdata(wdd);
168 struct mlxreg_core_data *reg_data = &wdt->pdata->data[wdt->tleft_idx];
172 if (wdt->wdt_type == MLX_WDT_TYPE2) {
173 rc = regmap_read(wdt->regmap, reg_data->reg, &regval);
176 if (wdt->regmap_val_sz == 1) {
177 rc = regmap_read(wdt->regmap, reg_data->reg, &lsb);
179 rc = regmap_read(wdt->regmap,
184 rc = regmap_read(wdt->regmap, reg_data->reg, &regval);
212 .identity = "mlx-wdt-main",
218 .identity = "mlx-wdt-aux",
221 static void mlxreg_wdt_config(struct mlxreg_wdt *wdt,
227 wdt->reset_idx = -EINVAL;
230 wdt->action_idx = i;
232 wdt->timeout_idx = i;
234 wdt->tleft_idx = i;
236 wdt->ping_idx = i;
238 wdt->reset_idx = i;
241 wdt->pdata = pdata;
244 wdt->wdd.info = &mlxreg_wdt_main_info;
246 wdt->wdd.info = &mlxreg_wdt_aux_info;
248 wdt->wdt_type = pdata->version;
249 switch (wdt->wdt_type) {
251 wdt->wdd.ops = &mlxreg_wdt_ops_type1;
252 wdt->wdd.max_timeout = MLXREG_WDT_MAX_TIMEOUT_TYPE1;
255 wdt->wdd.ops = &mlxreg_wdt_ops_type2;
256 wdt->wdd.max_timeout = MLXREG_WDT_MAX_TIMEOUT_TYPE2;
259 wdt->wdd.ops = &mlxreg_wdt_ops_type2;
260 wdt->wdd.max_timeout = MLXREG_WDT_MAX_TIMEOUT_TYPE3;
266 wdt->wdd.min_timeout = MLXREG_WDT_MIN_TIMEOUT;
269 static int mlxreg_wdt_init_timeout(struct mlxreg_wdt *wdt,
274 timeout = pdata->data[wdt->timeout_idx].health_cntr;
275 return mlxreg_wdt_set_timeout(&wdt->wdd, timeout);
282 struct mlxreg_wdt *wdt;
290 wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL);
291 if (!wdt)
294 wdt->wdd.parent = dev;
295 wdt->regmap = pdata->regmap;
296 rc = regmap_get_val_bytes(wdt->regmap);
300 wdt->regmap_val_sz = rc;
301 mlxreg_wdt_config(wdt, pdata);
304 watchdog_set_nowayout(&wdt->wdd, WATCHDOG_NOWAYOUT);
305 watchdog_stop_on_reboot(&wdt->wdd);
306 watchdog_stop_on_unregister(&wdt->wdd);
307 watchdog_set_drvdata(&wdt->wdd, wdt);
308 rc = mlxreg_wdt_init_timeout(wdt, pdata);
313 rc = mlxreg_wdt_start(&wdt->wdd);
316 set_bit(WDOG_HW_RUNNING, &wdt->wdd.status);
318 mlxreg_wdt_check_card_reset(wdt);
319 rc = devm_watchdog_register_device(dev, &wdt->wdd);
330 .name = "mlx-wdt",
339 MODULE_ALIAS("platform:mlx-wdt");