Lines Matching refs:wdt
89 struct stm32_iwdg *wdt = watchdog_get_drvdata(wdd); in stm32_iwdg_start() local
98 presc = DIV_ROUND_UP(tout * wdt->rate, RLR_MAX + 1); in stm32_iwdg_start()
103 iwdg_rlr = ((tout * wdt->rate) / presc) - 1; in stm32_iwdg_start()
106 reg_write(wdt->regs, IWDG_KR, KR_KEY_EWA); in stm32_iwdg_start()
109 reg_write(wdt->regs, IWDG_PR, iwdg_pr); in stm32_iwdg_start()
110 reg_write(wdt->regs, IWDG_RLR, iwdg_rlr); in stm32_iwdg_start()
111 reg_write(wdt->regs, IWDG_KR, KR_KEY_ENABLE); in stm32_iwdg_start()
114 ret = readl_relaxed_poll_timeout(wdt->regs + IWDG_SR, iwdg_sr, in stm32_iwdg_start()
123 reg_write(wdt->regs, IWDG_KR, KR_KEY_RELOAD); in stm32_iwdg_start()
130 struct stm32_iwdg *wdt = watchdog_get_drvdata(wdd); in stm32_iwdg_ping() local
135 reg_write(wdt->regs, IWDG_KR, KR_KEY_RELOAD); in stm32_iwdg_ping()
159 struct stm32_iwdg *wdt) in stm32_iwdg_clk_init() argument
164 wdt->clk_lsi = devm_clk_get(dev, "lsi"); in stm32_iwdg_clk_init()
165 if (IS_ERR(wdt->clk_lsi)) in stm32_iwdg_clk_init()
166 return dev_err_probe(dev, PTR_ERR(wdt->clk_lsi), "Unable to get lsi clock\n"); in stm32_iwdg_clk_init()
169 if (wdt->data->has_pclk) { in stm32_iwdg_clk_init()
170 wdt->clk_pclk = devm_clk_get(dev, "pclk"); in stm32_iwdg_clk_init()
171 if (IS_ERR(wdt->clk_pclk)) in stm32_iwdg_clk_init()
172 return dev_err_probe(dev, PTR_ERR(wdt->clk_pclk), in stm32_iwdg_clk_init()
175 ret = clk_prepare_enable(wdt->clk_pclk); in stm32_iwdg_clk_init()
182 wdt->clk_pclk); in stm32_iwdg_clk_init()
187 ret = clk_prepare_enable(wdt->clk_lsi); in stm32_iwdg_clk_init()
193 wdt->clk_lsi); in stm32_iwdg_clk_init()
197 wdt->rate = clk_get_rate(wdt->clk_lsi); in stm32_iwdg_clk_init()
227 struct stm32_iwdg *wdt; in stm32_iwdg_probe() local
230 wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); in stm32_iwdg_probe()
231 if (!wdt) in stm32_iwdg_probe()
234 wdt->data = of_device_get_match_data(&pdev->dev); in stm32_iwdg_probe()
235 if (!wdt->data) in stm32_iwdg_probe()
239 wdt->regs = devm_platform_ioremap_resource(pdev, 0); in stm32_iwdg_probe()
240 if (IS_ERR(wdt->regs)) in stm32_iwdg_probe()
241 return PTR_ERR(wdt->regs); in stm32_iwdg_probe()
243 ret = stm32_iwdg_clk_init(pdev, wdt); in stm32_iwdg_probe()
248 wdd = &wdt->wdd; in stm32_iwdg_probe()
252 wdd->min_timeout = DIV_ROUND_UP((RLR_MIN + 1) * PR_MIN, wdt->rate); in stm32_iwdg_probe()
253 wdd->max_hw_heartbeat_ms = ((RLR_MAX + 1) * wdt->data->max_prescaler * in stm32_iwdg_probe()
254 1000) / wdt->rate; in stm32_iwdg_probe()
256 watchdog_set_drvdata(wdd, wdt); in stm32_iwdg_probe()
282 platform_set_drvdata(pdev, wdt); in stm32_iwdg_probe()