Lines Matching refs:st_wdog
41 struct st_wdog { struct
65 static void st_wdog_setup(struct st_wdog *st_wdog, bool enable) in st_wdog_setup() argument
68 if (st_wdog->syscfg->reset_type_reg) in st_wdog_setup()
69 regmap_update_bits(st_wdog->regmap, in st_wdog_setup()
70 st_wdog->syscfg->reset_type_reg, in st_wdog_setup()
71 st_wdog->syscfg->reset_type_mask, in st_wdog_setup()
72 st_wdog->warm_reset); in st_wdog_setup()
75 regmap_update_bits(st_wdog->regmap, in st_wdog_setup()
76 st_wdog->syscfg->enable_reg, in st_wdog_setup()
77 st_wdog->syscfg->enable_mask, in st_wdog_setup()
78 enable ? 0 : st_wdog->syscfg->enable_mask); in st_wdog_setup()
81 static void st_wdog_load_timer(struct st_wdog *st_wdog, unsigned int timeout) in st_wdog_load_timer() argument
83 unsigned long clkrate = st_wdog->clkrate; in st_wdog_load_timer()
85 writel_relaxed(timeout * clkrate, st_wdog->base + LPC_LPA_LSB_OFF); in st_wdog_load_timer()
86 writel_relaxed(1, st_wdog->base + LPC_LPA_START_OFF); in st_wdog_load_timer()
91 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_start() local
93 writel_relaxed(1, st_wdog->base + LPC_WDT_OFF); in st_wdog_start()
100 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_stop() local
102 writel_relaxed(0, st_wdog->base + LPC_WDT_OFF); in st_wdog_stop()
110 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_set_timeout() local
113 st_wdog_load_timer(st_wdog, timeout); in st_wdog_set_timeout()
120 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_keepalive() local
122 st_wdog_load_timer(st_wdog, wdd->timeout); in st_wdog_keepalive()
155 struct st_wdog *st_wdog; in st_wdog_probe() local
172 st_wdog = devm_kzalloc(dev, sizeof(*st_wdog), GFP_KERNEL); in st_wdog_probe()
173 if (!st_wdog) in st_wdog_probe()
181 st_wdog->syscfg = (struct st_wdog_syscfg *)match->data; in st_wdog_probe()
199 st_wdog->dev = dev; in st_wdog_probe()
200 st_wdog->base = base; in st_wdog_probe()
201 st_wdog->clk = clk; in st_wdog_probe()
202 st_wdog->regmap = regmap; in st_wdog_probe()
203 st_wdog->warm_reset = of_property_read_bool(np, "st,warm_reset"); in st_wdog_probe()
204 st_wdog->clkrate = clk_get_rate(st_wdog->clk); in st_wdog_probe()
206 if (!st_wdog->clkrate) { in st_wdog_probe()
210 st_wdog_dev.max_timeout = 0xFFFFFFFF / st_wdog->clkrate; in st_wdog_probe()
222 watchdog_set_drvdata(&st_wdog_dev, st_wdog); in st_wdog_probe()
234 st_wdog_setup(st_wdog, true); in st_wdog_probe()
237 st_wdog->warm_reset ? "warm" : "cold"); in st_wdog_probe()
244 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_remove() local
246 st_wdog_setup(st_wdog, false); in st_wdog_remove()
251 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_suspend() local
256 st_wdog_setup(st_wdog, false); in st_wdog_suspend()
258 clk_disable(st_wdog->clk); in st_wdog_suspend()
265 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_resume() local
268 ret = clk_enable(st_wdog->clk); in st_wdog_resume()
272 clk_unprepare(st_wdog->clk); in st_wdog_resume()
276 st_wdog_setup(st_wdog, true); in st_wdog_resume()
279 st_wdog_load_timer(st_wdog, st_wdog_dev.timeout); in st_wdog_resume()