st_wdog
writel_relaxed(0, st_wdog->base + LPC_WDT_OFF);
struct st_wdog *st_wdog = watchdog_get_drvdata(wdd);
st_wdog_load_timer(st_wdog, timeout);
struct st_wdog *st_wdog = watchdog_get_drvdata(wdd);
st_wdog_load_timer(st_wdog, wdd->timeout);
struct st_wdog *st_wdog;
st_wdog = devm_kzalloc(dev, sizeof(*st_wdog), GFP_KERNEL);
if (!st_wdog)
st_wdog->syscfg = (struct st_wdog_syscfg *)device_get_match_data(dev);
st_wdog->dev = dev;
st_wdog->base = base;
st_wdog->clk = clk;
st_wdog->regmap = regmap;
st_wdog->warm_reset = of_property_read_bool(np, "st,warm_reset");
st_wdog->clkrate = clk_get_rate(st_wdog->clk);
if (!st_wdog->clkrate) {
st_wdog_dev.max_timeout = 0xFFFFFFFF / st_wdog->clkrate;
watchdog_set_drvdata(&st_wdog_dev, st_wdog);
st_wdog_setup(st_wdog, true);
st_wdog->warm_reset ? "warm" : "cold");
struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev);
st_wdog_setup(st_wdog, false);
struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev);
st_wdog_setup(st_wdog, false);
clk_disable(st_wdog->clk);
struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev);
ret = clk_enable(st_wdog->clk);
clk_unprepare(st_wdog->clk);
st_wdog_setup(st_wdog, true);
st_wdog_load_timer(st_wdog, st_wdog_dev.timeout);
static void st_wdog_setup(struct st_wdog *st_wdog, bool enable)
if (st_wdog->syscfg->reset_type_reg)
regmap_update_bits(st_wdog->regmap,
st_wdog->syscfg->reset_type_reg,
st_wdog->syscfg->reset_type_mask,
st_wdog->warm_reset);
regmap_update_bits(st_wdog->regmap,
st_wdog->syscfg->enable_reg,
st_wdog->syscfg->enable_mask,
enable ? 0 : st_wdog->syscfg->enable_mask);
static void st_wdog_load_timer(struct st_wdog *st_wdog, unsigned int timeout)
unsigned long clkrate = st_wdog->clkrate;
writel_relaxed(timeout * clkrate, st_wdog->base + LPC_LPA_LSB_OFF);
writel_relaxed(1, st_wdog->base + LPC_LPA_START_OFF);
struct st_wdog *st_wdog = watchdog_get_drvdata(wdd);
writel_relaxed(1, st_wdog->base + LPC_WDT_OFF);
struct st_wdog *st_wdog = watchdog_get_drvdata(wdd);