Lines Matching refs:st_wdog
45 struct st_wdog { struct
102 static void st_wdog_setup(struct st_wdog *st_wdog, bool enable) in st_wdog_setup() argument
105 if (st_wdog->syscfg->reset_type_reg) in st_wdog_setup()
106 regmap_update_bits(st_wdog->regmap, in st_wdog_setup()
107 st_wdog->syscfg->reset_type_reg, in st_wdog_setup()
108 st_wdog->syscfg->reset_type_mask, in st_wdog_setup()
109 st_wdog->warm_reset); in st_wdog_setup()
112 regmap_update_bits(st_wdog->regmap, in st_wdog_setup()
113 st_wdog->syscfg->enable_reg, in st_wdog_setup()
114 st_wdog->syscfg->enable_mask, in st_wdog_setup()
115 enable ? 0 : st_wdog->syscfg->enable_mask); in st_wdog_setup()
118 static void st_wdog_load_timer(struct st_wdog *st_wdog, unsigned int timeout) in st_wdog_load_timer() argument
120 unsigned long clkrate = st_wdog->clkrate; in st_wdog_load_timer()
122 writel_relaxed(timeout * clkrate, st_wdog->base + LPC_LPA_LSB_OFF); in st_wdog_load_timer()
123 writel_relaxed(1, st_wdog->base + LPC_LPA_START_OFF); in st_wdog_load_timer()
128 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_start() local
130 writel_relaxed(1, st_wdog->base + LPC_WDT_OFF); in st_wdog_start()
137 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_stop() local
139 writel_relaxed(0, st_wdog->base + LPC_WDT_OFF); in st_wdog_stop()
147 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_set_timeout() local
150 st_wdog_load_timer(st_wdog, timeout); in st_wdog_set_timeout()
157 struct st_wdog *st_wdog = watchdog_get_drvdata(wdd); in st_wdog_keepalive() local
159 st_wdog_load_timer(st_wdog, wdd->timeout); in st_wdog_keepalive()
186 struct st_wdog *st_wdog; in st_wdog_probe() local
204 st_wdog = devm_kzalloc(&pdev->dev, sizeof(*st_wdog), GFP_KERNEL); in st_wdog_probe()
205 if (!st_wdog) in st_wdog_probe()
213 st_wdog->syscfg = (struct st_wdog_syscfg *)match->data; in st_wdog_probe()
232 st_wdog->dev = &pdev->dev; in st_wdog_probe()
233 st_wdog->base = base; in st_wdog_probe()
234 st_wdog->clk = clk; in st_wdog_probe()
235 st_wdog->regmap = regmap; in st_wdog_probe()
236 st_wdog->warm_reset = of_property_read_bool(np, "st,warm_reset"); in st_wdog_probe()
237 st_wdog->clkrate = clk_get_rate(st_wdog->clk); in st_wdog_probe()
239 if (!st_wdog->clkrate) { in st_wdog_probe()
243 st_wdog_dev.max_timeout = 0xFFFFFFFF / st_wdog->clkrate; in st_wdog_probe()
252 watchdog_set_drvdata(&st_wdog_dev, st_wdog); in st_wdog_probe()
270 st_wdog_setup(st_wdog, true); in st_wdog_probe()
273 st_wdog->warm_reset ? "warm" : "cold"); in st_wdog_probe()
280 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_remove() local
282 st_wdog_setup(st_wdog, false); in st_wdog_remove()
284 clk_disable_unprepare(st_wdog->clk); in st_wdog_remove()
292 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_suspend() local
297 st_wdog_setup(st_wdog, false); in st_wdog_suspend()
299 clk_disable(st_wdog->clk); in st_wdog_suspend()
306 struct st_wdog *st_wdog = watchdog_get_drvdata(&st_wdog_dev); in st_wdog_resume() local
309 ret = clk_enable(st_wdog->clk); in st_wdog_resume()
313 clk_unprepare(st_wdog->clk); in st_wdog_resume()
317 st_wdog_setup(st_wdog, true); in st_wdog_resume()
320 st_wdog_load_timer(st_wdog, st_wdog_dev.timeout); in st_wdog_resume()