• Home
  • Raw
  • Download

Lines Matching full:timer

52 static inline void brcmstb_waketmr_clear_alarm(struct brcmstb_waketmr *timer)  in brcmstb_waketmr_clear_alarm()  argument
54 writel_relaxed(1, timer->base + BRCMSTB_WKTMR_EVENT); in brcmstb_waketmr_clear_alarm()
55 (void)readl_relaxed(timer->base + BRCMSTB_WKTMR_EVENT); in brcmstb_waketmr_clear_alarm()
58 static void brcmstb_waketmr_set_alarm(struct brcmstb_waketmr *timer, in brcmstb_waketmr_set_alarm() argument
61 brcmstb_waketmr_clear_alarm(timer); in brcmstb_waketmr_set_alarm()
64 writel_relaxed(timer->rate, timer->base + BRCMSTB_WKTMR_PRESCALER); in brcmstb_waketmr_set_alarm()
66 writel_relaxed(secs + 1, timer->base + BRCMSTB_WKTMR_ALARM); in brcmstb_waketmr_set_alarm()
71 struct brcmstb_waketmr *timer = data; in brcmstb_waketmr_irq() local
73 pm_wakeup_event(timer->dev, 0); in brcmstb_waketmr_irq()
83 static void wktmr_read(struct brcmstb_waketmr *timer, in wktmr_read() argument
89 t->sec = readl_relaxed(timer->base + BRCMSTB_WKTMR_COUNTER); in wktmr_read()
90 tmp = readl_relaxed(timer->base + BRCMSTB_WKTMR_PRESCALER_VAL); in wktmr_read()
91 } while (tmp >= timer->rate); in wktmr_read()
93 t->pre = timer->rate - tmp; in wktmr_read()
96 static int brcmstb_waketmr_prepare_suspend(struct brcmstb_waketmr *timer) in brcmstb_waketmr_prepare_suspend() argument
98 struct device *dev = timer->dev; in brcmstb_waketmr_prepare_suspend()
102 ret = enable_irq_wake(timer->irq); in brcmstb_waketmr_prepare_suspend()
112 /* If enabled as a wakeup-source, arm the timer when powering off */
116 struct brcmstb_waketmr *timer; in brcmstb_waketmr_reboot() local
118 timer = container_of(nb, struct brcmstb_waketmr, reboot_notifier); in brcmstb_waketmr_reboot()
120 /* Set timer for cold boot */ in brcmstb_waketmr_reboot()
122 brcmstb_waketmr_prepare_suspend(timer); in brcmstb_waketmr_reboot()
130 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_gettime() local
133 wktmr_read(timer, &now); in brcmstb_waketmr_gettime()
143 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_settime() local
148 writel_relaxed(sec, timer->base + BRCMSTB_WKTMR_COUNTER); in brcmstb_waketmr_settime()
156 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_getalarm() local
160 sec = readl_relaxed(timer->base + BRCMSTB_WKTMR_ALARM); in brcmstb_waketmr_getalarm()
167 reg = readl_relaxed(timer->base + BRCMSTB_WKTMR_EVENT); in brcmstb_waketmr_getalarm()
176 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_setalarm() local
184 brcmstb_waketmr_set_alarm(timer, sec); in brcmstb_waketmr_setalarm()
210 struct brcmstb_waketmr *timer; in brcmstb_waketmr_probe() local
214 timer = devm_kzalloc(dev, sizeof(*timer), GFP_KERNEL); in brcmstb_waketmr_probe()
215 if (!timer) in brcmstb_waketmr_probe()
218 platform_set_drvdata(pdev, timer); in brcmstb_waketmr_probe()
219 timer->dev = dev; in brcmstb_waketmr_probe()
222 timer->base = devm_ioremap_resource(dev, res); in brcmstb_waketmr_probe()
223 if (IS_ERR(timer->base)) in brcmstb_waketmr_probe()
224 return PTR_ERR(timer->base); in brcmstb_waketmr_probe()
226 timer->rtc = devm_rtc_allocate_device(dev); in brcmstb_waketmr_probe()
227 if (IS_ERR(timer->rtc)) in brcmstb_waketmr_probe()
228 return PTR_ERR(timer->rtc); in brcmstb_waketmr_probe()
237 timer->irq = platform_get_irq(pdev, 0); in brcmstb_waketmr_probe()
238 if (timer->irq < 0) in brcmstb_waketmr_probe()
241 timer->clk = devm_clk_get(dev, NULL); in brcmstb_waketmr_probe()
242 if (!IS_ERR(timer->clk)) { in brcmstb_waketmr_probe()
243 ret = clk_prepare_enable(timer->clk); in brcmstb_waketmr_probe()
246 timer->rate = clk_get_rate(timer->clk); in brcmstb_waketmr_probe()
247 if (!timer->rate) in brcmstb_waketmr_probe()
248 timer->rate = BRCMSTB_WKTMR_DEFAULT_FREQ; in brcmstb_waketmr_probe()
250 timer->rate = BRCMSTB_WKTMR_DEFAULT_FREQ; in brcmstb_waketmr_probe()
251 timer->clk = NULL; in brcmstb_waketmr_probe()
254 ret = devm_request_irq(dev, timer->irq, brcmstb_waketmr_irq, 0, in brcmstb_waketmr_probe()
255 "brcmstb-waketimer", timer); in brcmstb_waketmr_probe()
259 timer->reboot_notifier.notifier_call = brcmstb_waketmr_reboot; in brcmstb_waketmr_probe()
260 register_reboot_notifier(&timer->reboot_notifier); in brcmstb_waketmr_probe()
262 timer->rtc->ops = &brcmstb_waketmr_ops; in brcmstb_waketmr_probe()
263 timer->rtc->range_max = U32_MAX; in brcmstb_waketmr_probe()
265 ret = rtc_register_device(timer->rtc); in brcmstb_waketmr_probe()
271 dev_info(dev, "registered, with irq %d\n", timer->irq); in brcmstb_waketmr_probe()
276 unregister_reboot_notifier(&timer->reboot_notifier); in brcmstb_waketmr_probe()
279 if (timer->clk) in brcmstb_waketmr_probe()
280 clk_disable_unprepare(timer->clk); in brcmstb_waketmr_probe()
287 struct brcmstb_waketmr *timer = dev_get_drvdata(&pdev->dev); in brcmstb_waketmr_remove() local
289 unregister_reboot_notifier(&timer->reboot_notifier); in brcmstb_waketmr_remove()
290 clk_disable_unprepare(timer->clk); in brcmstb_waketmr_remove()
298 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_suspend() local
300 return brcmstb_waketmr_prepare_suspend(timer); in brcmstb_waketmr_suspend()
305 struct brcmstb_waketmr *timer = dev_get_drvdata(dev); in brcmstb_waketmr_resume() local
311 ret = disable_irq_wake(timer->irq); in brcmstb_waketmr_resume()
313 brcmstb_waketmr_clear_alarm(timer); in brcmstb_waketmr_resume()
341 MODULE_DESCRIPTION("Wake-up timer driver for STB chips");