Lines Matching +full:da830 +full:- +full:timer
1 // SPDX-License-Identifier: GPL-2.0-only
20 #include <clocksource/timer-davinci.h>
76 return readl_relaxed(clockevent->base + reg); in davinci_clockevent_read()
82 writel_relaxed(val, clockevent->base + reg); in davinci_clockevent_write()
92 * This function is only ever called if we're using both timer in davinci_tim12_shutdown()
121 davinci_tim12_shutdown(clockevent->base); in davinci_clockevent_shutdown()
132 davinci_tim12_set_oneshot(clockevent->base); in davinci_clockevent_set_oneshot()
163 clockevent->cmp_off, curr_time + cycles); in davinci_clockevent_set_next_event_cmp()
172 if (!clockevent_state_oneshot(&clockevent->dev)) in davinci_timer_irq_timer()
173 davinci_tim12_shutdown(clockevent->base); in davinci_timer_irq_timer()
175 clockevent->dev.event_handler(&clockevent->dev); in davinci_timer_irq_timer()
192 * Standard use-case: we're using tim12 for clockevent and tim34 for
211 * Special use-case on da830: the DSP may use tim34. We're using tim12 for
232 * Reset both 32-bit timers, set no prescaler for timer 34, set the in davinci_timer_init()
233 * timer to dual 32-bit unchained mode, unreset both 32-bit timers. in davinci_timer_init()
252 pr_err("Unable to prepare and enable the timer clock\n"); in davinci_timer_register()
256 if (!request_mem_region(timer_cfg->reg.start, in davinci_timer_register()
257 resource_size(&timer_cfg->reg), in davinci_timer_register()
258 "davinci-timer")) { in davinci_timer_register()
260 rv = -EBUSY; in davinci_timer_register()
264 base = ioremap(timer_cfg->reg.start, resource_size(&timer_cfg->reg)); in davinci_timer_register()
267 rv = -ENOMEM; in davinci_timer_register()
276 rv = -ENOMEM; in davinci_timer_register()
280 clockevent->dev.name = "tim12"; in davinci_timer_register()
281 clockevent->dev.features = CLOCK_EVT_FEAT_ONESHOT; in davinci_timer_register()
282 clockevent->dev.cpumask = cpumask_of(0); in davinci_timer_register()
283 clockevent->base = base; in davinci_timer_register()
285 if (timer_cfg->cmp_off) { in davinci_timer_register()
286 clockevent->cmp_off = timer_cfg->cmp_off; in davinci_timer_register()
287 clockevent->dev.set_next_event = in davinci_timer_register()
290 clockevent->dev.set_next_event = in davinci_timer_register()
292 clockevent->dev.set_state_oneshot = in davinci_timer_register()
294 clockevent->dev.set_state_shutdown = in davinci_timer_register()
298 rv = request_irq(timer_cfg->irq[DAVINCI_TIMER_CLOCKEVENT_IRQ].start, in davinci_timer_register()
313 if (timer_cfg->cmp_off) { in davinci_timer_register()
323 clockevents_config_and_register(&clockevent->dev, tick_rate, in davinci_timer_register()
339 free_irq(timer_cfg->irq[DAVINCI_TIMER_CLOCKEVENT_IRQ].start, in davinci_timer_register()
346 release_mem_region(timer_cfg->reg.start, in davinci_timer_register()
347 resource_size(&timer_cfg->reg)); in davinci_timer_register()
361 pr_err("Unable to get the register range for timer\n"); in of_davinci_timer_register()
368 pr_err("Unable to get the interrupts for timer\n"); in of_davinci_timer_register()
374 pr_err("Unable to get the timer clock\n"); in of_davinci_timer_register()
384 TIMER_OF_DECLARE(davinci_timer, "ti,da830-timer", of_davinci_timer_register);