Lines Matching refs:wdt

83 	struct sprd_wdt *wdt = (struct sprd_wdt *)dev_id;
85 sprd_wdt_unlock(wdt->base);
86 writel_relaxed(SPRD_WDT_INT_CLEAR_BIT, wdt->base + SPRD_WDT_INT_CLR);
87 sprd_wdt_lock(wdt->base);
88 watchdog_notify_pretimeout(&wdt->wdd);
92 static u32 sprd_wdt_get_cnt_value(struct sprd_wdt *wdt)
96 val = readl_relaxed(wdt->base + SPRD_WDT_CNT_HIGH) <<
98 val |= readl_relaxed(wdt->base + SPRD_WDT_CNT_LOW) &
104 static int sprd_wdt_load_value(struct sprd_wdt *wdt, u32 timeout,
116 val = readl_relaxed(wdt->base + SPRD_WDT_INT_RAW);
126 sprd_wdt_unlock(wdt->base);
128 SPRD_WDT_LOW_VALUE_MASK, wdt->base + SPRD_WDT_LOAD_HIGH);
130 wdt->base + SPRD_WDT_LOAD_LOW);
133 wdt->base + SPRD_WDT_IRQ_LOAD_HIGH);
135 wdt->base + SPRD_WDT_IRQ_LOAD_LOW);
136 sprd_wdt_lock(wdt->base);
141 static int sprd_wdt_enable(struct sprd_wdt *wdt)
146 ret = clk_prepare_enable(wdt->enable);
149 ret = clk_prepare_enable(wdt->rtc_enable);
151 clk_disable_unprepare(wdt->enable);
155 sprd_wdt_unlock(wdt->base);
156 val = readl_relaxed(wdt->base + SPRD_WDT_CTRL);
158 writel_relaxed(val, wdt->base + SPRD_WDT_CTRL);
159 sprd_wdt_lock(wdt->base);
165 struct sprd_wdt *wdt = _data;
167 sprd_wdt_unlock(wdt->base);
168 writel_relaxed(0x0, wdt->base + SPRD_WDT_CTRL);
169 sprd_wdt_lock(wdt->base);
171 clk_disable_unprepare(wdt->rtc_enable);
172 clk_disable_unprepare(wdt->enable);
177 struct sprd_wdt *wdt = to_sprd_wdt(wdd);
181 ret = sprd_wdt_load_value(wdt, wdd->timeout, wdd->pretimeout);
185 sprd_wdt_unlock(wdt->base);
186 val = readl_relaxed(wdt->base + SPRD_WDT_CTRL);
188 writel_relaxed(val, wdt->base + SPRD_WDT_CTRL);
189 sprd_wdt_lock(wdt->base);
197 struct sprd_wdt *wdt = to_sprd_wdt(wdd);
200 sprd_wdt_unlock(wdt->base);
201 val = readl_relaxed(wdt->base + SPRD_WDT_CTRL);
204 writel_relaxed(val, wdt->base + SPRD_WDT_CTRL);
205 sprd_wdt_lock(wdt->base);
212 struct sprd_wdt *wdt = to_sprd_wdt(wdd);
219 return sprd_wdt_load_value(wdt, timeout, wdd->pretimeout);
225 struct sprd_wdt *wdt = to_sprd_wdt(wdd);
232 return sprd_wdt_load_value(wdt, wdd->timeout, new_pretimeout);
237 struct sprd_wdt *wdt = to_sprd_wdt(wdd);
240 val = sprd_wdt_get_cnt_value(wdt);
264 struct sprd_wdt *wdt;
267 wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL);
268 if (!wdt)
271 wdt->base = devm_platform_ioremap_resource(pdev, 0);
272 if (IS_ERR(wdt->base))
273 return PTR_ERR(wdt->base);
275 wdt->enable = devm_clk_get(dev, "enable");
276 if (IS_ERR(wdt->enable)) {
278 return PTR_ERR(wdt->enable);
281 wdt->rtc_enable = devm_clk_get(dev, "rtc_enable");
282 if (IS_ERR(wdt->rtc_enable)) {
284 return PTR_ERR(wdt->rtc_enable);
287 wdt->irq = platform_get_irq(pdev, 0);
288 if (wdt->irq < 0)
289 return wdt->irq;
291 ret = devm_request_irq(dev, wdt->irq, sprd_wdt_isr, IRQF_NO_SUSPEND,
292 "sprd-wdt", (void *)wdt);
298 wdt->wdd.info = &sprd_wdt_info;
299 wdt->wdd.ops = &sprd_wdt_ops;
300 wdt->wdd.parent = dev;
301 wdt->wdd.min_timeout = SPRD_WDT_MIN_TIMEOUT;
302 wdt->wdd.max_timeout = SPRD_WDT_MAX_TIMEOUT;
303 wdt->wdd.timeout = SPRD_WDT_MAX_TIMEOUT;
305 ret = sprd_wdt_enable(wdt);
307 dev_err(dev, "failed to enable wdt\n");
310 ret = devm_add_action_or_reset(dev, sprd_wdt_disable, wdt);
312 dev_err(dev, "Failed to add wdt disable action\n");
316 watchdog_set_nowayout(&wdt->wdd, WATCHDOG_NOWAYOUT);
317 watchdog_init_timeout(&wdt->wdd, 0, dev);
319 ret = devm_watchdog_register_device(dev, &wdt->wdd);
321 sprd_wdt_disable(wdt);
324 platform_set_drvdata(pdev, wdt);
331 struct sprd_wdt *wdt = dev_get_drvdata(dev);
333 if (watchdog_active(&wdt->wdd))
334 sprd_wdt_stop(&wdt->wdd);
335 sprd_wdt_disable(wdt);
342 struct sprd_wdt *wdt = dev_get_drvdata(dev);
345 ret = sprd_wdt_enable(wdt);
349 if (watchdog_active(&wdt->wdd))
350 ret = sprd_wdt_start(&wdt->wdd);
361 { .compatible = "sprd,sp9860-wdt", },
369 .name = "sprd-wdt",