Lines Matching full:timer

34 #include <clocksource/timer-ti-dm.h>
37 * timer errata flags
41 * timer counter register is never read. For more details please refer to
158 * dmtimer_read - read timer registers in posted and non-posted mode
159 * @timer: timer pointer over which read operation to perform
166 static inline u32 dmtimer_read(struct dmtimer *timer, u32 reg) in dmtimer_read() argument
174 if (wp && timer->posted) in dmtimer_read()
175 while (readl_relaxed(timer->pend) & wp) in dmtimer_read()
178 return readl_relaxed(timer->func_base + offset); in dmtimer_read()
182 * dmtimer_write - write timer registers in posted and non-posted mode
183 * @timer: timer pointer over which write operation is to perform
191 static inline void dmtimer_write(struct dmtimer *timer, u32 reg, u32 val) in dmtimer_write() argument
199 if (wp && timer->posted) in dmtimer_write()
200 while (readl_relaxed(timer->pend) & wp) in dmtimer_write()
203 writel_relaxed(val, timer->func_base + offset); in dmtimer_write()
206 static inline void __omap_dm_timer_init_regs(struct dmtimer *timer) in __omap_dm_timer_init_regs() argument
211 tidr = readl_relaxed(timer->io_base); in __omap_dm_timer_init_regs()
213 timer->revision = 1; in __omap_dm_timer_init_regs()
214 timer->irq_stat = OMAP_TIMER_V1_STAT_OFFSET; in __omap_dm_timer_init_regs()
215 timer->irq_ena = OMAP_TIMER_V1_INT_EN_OFFSET; in __omap_dm_timer_init_regs()
216 timer->irq_dis = OMAP_TIMER_V1_INT_EN_OFFSET; in __omap_dm_timer_init_regs()
217 timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET; in __omap_dm_timer_init_regs()
218 timer->func_base = timer->io_base; in __omap_dm_timer_init_regs()
220 timer->revision = 2; in __omap_dm_timer_init_regs()
221 timer->irq_stat = OMAP_TIMER_V2_IRQSTATUS - OMAP_TIMER_V2_FUNC_OFFSET; in __omap_dm_timer_init_regs()
222 timer->irq_ena = OMAP_TIMER_V2_IRQENABLE_SET - OMAP_TIMER_V2_FUNC_OFFSET; in __omap_dm_timer_init_regs()
223 timer->irq_dis = OMAP_TIMER_V2_IRQENABLE_CLR - OMAP_TIMER_V2_FUNC_OFFSET; in __omap_dm_timer_init_regs()
224 timer->pend = timer->io_base + in __omap_dm_timer_init_regs()
227 timer->func_base = timer->io_base + OMAP_TIMER_V2_FUNC_OFFSET; in __omap_dm_timer_init_regs()
233 * @timer: pointer to timer instance handle
235 * Enables the write posted mode for the timer. When posted mode is enabled
236 * writes to certain timer registers are immediately acknowledged by the
239 * timer registers.
241 static inline void __omap_dm_timer_enable_posted(struct dmtimer *timer) in __omap_dm_timer_enable_posted() argument
243 if (timer->posted) in __omap_dm_timer_enable_posted()
246 if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) { in __omap_dm_timer_enable_posted()
247 timer->posted = OMAP_TIMER_NONPOSTED; in __omap_dm_timer_enable_posted()
248 dmtimer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0); in __omap_dm_timer_enable_posted()
252 dmtimer_write(timer, OMAP_TIMER_IF_CTRL_REG, OMAP_TIMER_CTRL_POSTED); in __omap_dm_timer_enable_posted()
253 timer->context.tsicr = OMAP_TIMER_CTRL_POSTED; in __omap_dm_timer_enable_posted()
254 timer->posted = OMAP_TIMER_POSTED; in __omap_dm_timer_enable_posted()
257 static inline void __omap_dm_timer_stop(struct dmtimer *timer, in __omap_dm_timer_stop() argument
262 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in __omap_dm_timer_stop()
265 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, l); in __omap_dm_timer_stop()
268 dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in __omap_dm_timer_stop()
271 * timer is stopped in __omap_dm_timer_stop()
278 dmtimer_write(timer, timer->irq_stat, OMAP_TIMER_INT_OVERFLOW); in __omap_dm_timer_stop()
281 static inline void __omap_dm_timer_int_enable(struct dmtimer *timer, in __omap_dm_timer_int_enable() argument
284 dmtimer_write(timer, timer->irq_ena, value); in __omap_dm_timer_int_enable()
285 dmtimer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, value); in __omap_dm_timer_int_enable()
289 __omap_dm_timer_read_counter(struct dmtimer *timer) in __omap_dm_timer_read_counter() argument
291 return dmtimer_read(timer, OMAP_TIMER_COUNTER_REG); in __omap_dm_timer_read_counter()
294 static inline void __omap_dm_timer_write_status(struct dmtimer *timer, in __omap_dm_timer_write_status() argument
297 dmtimer_write(timer, timer->irq_stat, value); in __omap_dm_timer_write_status()
300 static void omap_timer_restore_context(struct dmtimer *timer) in omap_timer_restore_context() argument
302 dmtimer_write(timer, OMAP_TIMER_OCP_CFG_OFFSET, timer->context.ocp_cfg); in omap_timer_restore_context()
304 dmtimer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, timer->context.twer); in omap_timer_restore_context()
305 dmtimer_write(timer, OMAP_TIMER_COUNTER_REG, timer->context.tcrr); in omap_timer_restore_context()
306 dmtimer_write(timer, OMAP_TIMER_LOAD_REG, timer->context.tldr); in omap_timer_restore_context()
307 dmtimer_write(timer, OMAP_TIMER_MATCH_REG, timer->context.tmar); in omap_timer_restore_context()
308 dmtimer_write(timer, OMAP_TIMER_IF_CTRL_REG, timer->context.tsicr); in omap_timer_restore_context()
309 dmtimer_write(timer, timer->irq_ena, timer->context.tier); in omap_timer_restore_context()
310 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, timer->context.tclr); in omap_timer_restore_context()
313 static void omap_timer_save_context(struct dmtimer *timer) in omap_timer_save_context() argument
315 timer->context.ocp_cfg = dmtimer_read(timer, OMAP_TIMER_OCP_CFG_OFFSET); in omap_timer_save_context()
317 timer->context.tclr = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_timer_save_context()
318 timer->context.twer = dmtimer_read(timer, OMAP_TIMER_WAKEUP_EN_REG); in omap_timer_save_context()
319 timer->context.tldr = dmtimer_read(timer, OMAP_TIMER_LOAD_REG); in omap_timer_save_context()
320 timer->context.tmar = dmtimer_read(timer, OMAP_TIMER_MATCH_REG); in omap_timer_save_context()
321 timer->context.tier = dmtimer_read(timer, timer->irq_ena); in omap_timer_save_context()
322 timer->context.tsicr = dmtimer_read(timer, OMAP_TIMER_IF_CTRL_REG); in omap_timer_save_context()
328 struct dmtimer *timer; in omap_timer_context_notifier() local
330 timer = container_of(nb, struct dmtimer, nb); in omap_timer_context_notifier()
334 if ((timer->capability & OMAP_TIMER_ALWON) || in omap_timer_context_notifier()
335 !atomic_read(&timer->enabled)) in omap_timer_context_notifier()
337 omap_timer_save_context(timer); in omap_timer_context_notifier()
342 if ((timer->capability & OMAP_TIMER_ALWON) || in omap_timer_context_notifier()
343 !atomic_read(&timer->enabled)) in omap_timer_context_notifier()
345 omap_timer_restore_context(timer); in omap_timer_context_notifier()
352 static int omap_dm_timer_reset(struct dmtimer *timer) in omap_dm_timer_reset() argument
356 if (timer->revision != 1) in omap_dm_timer_reset()
359 dmtimer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0x06); in omap_dm_timer_reset()
362 l = dmtimer_read(timer, OMAP_TIMER_V1_SYS_STAT_OFFSET); in omap_dm_timer_reset()
366 dev_err(&timer->pdev->dev, "Timer failed to reset\n"); in omap_dm_timer_reset()
370 /* Configure timer for smart-idle mode */ in omap_dm_timer_reset()
371 l = dmtimer_read(timer, OMAP_TIMER_OCP_CFG_OFFSET); in omap_dm_timer_reset()
373 dmtimer_write(timer, OMAP_TIMER_OCP_CFG_OFFSET, l); in omap_dm_timer_reset()
375 timer->posted = 0; in omap_dm_timer_reset()
400 struct dmtimer *timer; in omap_dm_timer_set_source() local
402 timer = to_dmtimer(cookie); in omap_dm_timer_set_source()
403 if (unlikely(!timer) || IS_ERR(timer->fclk)) in omap_dm_timer_set_source()
420 pdata = timer->pdev->dev.platform_data; in omap_dm_timer_set_source()
427 if (timer->omap1 && pdata && pdata->set_timer_src) in omap_dm_timer_set_source()
428 return pdata->set_timer_src(timer->pdev, source); in omap_dm_timer_set_source()
432 if (clk_hw_get_num_parents(__clk_get_hw(timer->fclk)) < 2) in omap_dm_timer_set_source()
436 parent = clk_get(&timer->pdev->dev, parent_name); in omap_dm_timer_set_source()
442 ret = clk_set_parent(timer->fclk, parent); in omap_dm_timer_set_source()
454 struct dmtimer *timer = to_dmtimer(cookie); in omap_dm_timer_enable() local
455 struct device *dev = &timer->pdev->dev; in omap_dm_timer_enable()
460 dev_err(dev, "could not enable timer\n"); in omap_dm_timer_enable()
465 struct dmtimer *timer = to_dmtimer(cookie); in omap_dm_timer_disable() local
466 struct device *dev = &timer->pdev->dev; in omap_dm_timer_disable()
471 static int omap_dm_timer_prepare(struct dmtimer *timer) in omap_dm_timer_prepare() argument
473 struct device *dev = &timer->pdev->dev; in omap_dm_timer_prepare()
480 if (timer->capability & OMAP_TIMER_NEEDS_RESET) { in omap_dm_timer_prepare()
481 rc = omap_dm_timer_reset(timer); in omap_dm_timer_prepare()
488 __omap_dm_timer_enable_posted(timer); in omap_dm_timer_prepare()
501 struct dmtimer *timer = NULL, *t; in _omap_dm_timer_request() local
530 timer = t; in _omap_dm_timer_request()
531 timer->reserved = 1; in _omap_dm_timer_request()
538 * If timer is not NULL, we have already found in _omap_dm_timer_request()
539 * one timer. But it was not an exact match in _omap_dm_timer_request()
542 * timer found and see if this one is a better in _omap_dm_timer_request()
545 if (timer) in _omap_dm_timer_request()
546 timer->reserved = 0; in _omap_dm_timer_request()
547 timer = t; in _omap_dm_timer_request()
548 timer->reserved = 1; in _omap_dm_timer_request()
557 timer = t; in _omap_dm_timer_request()
558 timer->reserved = 1; in _omap_dm_timer_request()
564 timer = t; in _omap_dm_timer_request()
565 timer->reserved = 1; in _omap_dm_timer_request()
572 if (timer && omap_dm_timer_prepare(timer)) { in _omap_dm_timer_request()
573 timer->reserved = 0; in _omap_dm_timer_request()
574 timer = NULL; in _omap_dm_timer_request()
577 if (!timer) in _omap_dm_timer_request()
578 pr_debug("%s: timer request failed!\n", __func__); in _omap_dm_timer_request()
580 return timer; in _omap_dm_timer_request()
585 struct dmtimer *timer; in omap_dm_timer_request() local
587 timer = _omap_dm_timer_request(REQUEST_ANY, NULL); in omap_dm_timer_request()
588 if (!timer) in omap_dm_timer_request()
591 return &timer->cookie; in omap_dm_timer_request()
596 struct dmtimer *timer; in omap_dm_timer_request_specific() local
598 /* Requesting timer by ID is not supported when device tree is used */ in omap_dm_timer_request_specific()
605 timer = _omap_dm_timer_request(REQUEST_BY_ID, &id); in omap_dm_timer_request_specific()
606 if (!timer) in omap_dm_timer_request_specific()
609 return &timer->cookie; in omap_dm_timer_request_specific()
613 * omap_dm_timer_request_by_node - Request a timer by device-tree node
614 * @np: Pointer to device-tree timer node
616 * Request a timer based upon a device node pointer. Returns pointer to
617 * timer handle on success and a NULL pointer on failure.
621 struct dmtimer *timer; in omap_dm_timer_request_by_node() local
626 timer = _omap_dm_timer_request(REQUEST_BY_NODE, np); in omap_dm_timer_request_by_node()
627 if (!timer) in omap_dm_timer_request_by_node()
630 return &timer->cookie; in omap_dm_timer_request_by_node()
635 struct dmtimer *timer; in omap_dm_timer_free() local
637 timer = to_dmtimer(cookie); in omap_dm_timer_free()
638 if (unlikely(!timer)) in omap_dm_timer_free()
641 WARN_ON(!timer->reserved); in omap_dm_timer_free()
642 timer->reserved = 0; in omap_dm_timer_free()
648 struct dmtimer *timer = to_dmtimer(cookie); in omap_dm_timer_get_irq() local
649 if (timer) in omap_dm_timer_get_irq()
650 return timer->irq; in omap_dm_timer_get_irq()
669 struct dmtimer *timer = NULL; in omap_dm_timer_modify_idlect_mask() local
676 /* If any active timer is using ARMXOR return modified mask */ in omap_dm_timer_modify_idlect_mask()
678 list_for_each_entry(timer, &omap_timer_list, node) { in omap_dm_timer_modify_idlect_mask()
681 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_modify_idlect_mask()
699 struct dmtimer *timer = to_dmtimer(cookie); in omap_dm_timer_get_fclk() local
701 if (timer && !IS_ERR(timer->fclk)) in omap_dm_timer_get_fclk()
702 return timer->fclk; in omap_dm_timer_get_fclk()
717 struct dmtimer *timer; in omap_dm_timer_start() local
722 timer = to_dmtimer(cookie); in omap_dm_timer_start()
723 if (unlikely(!timer)) in omap_dm_timer_start()
726 dev = &timer->pdev->dev; in omap_dm_timer_start()
732 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_start()
735 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, l); in omap_dm_timer_start()
743 struct dmtimer *timer; in omap_dm_timer_stop() local
747 timer = to_dmtimer(cookie); in omap_dm_timer_stop()
748 if (unlikely(!timer)) in omap_dm_timer_stop()
751 dev = &timer->pdev->dev; in omap_dm_timer_stop()
753 if (!timer->omap1) in omap_dm_timer_stop()
754 rate = clk_get_rate(timer->fclk); in omap_dm_timer_stop()
756 __omap_dm_timer_stop(timer, rate); in omap_dm_timer_stop()
766 struct dmtimer *timer; in omap_dm_timer_set_load() local
770 timer = to_dmtimer(cookie); in omap_dm_timer_set_load()
771 if (unlikely(!timer)) in omap_dm_timer_set_load()
774 dev = &timer->pdev->dev; in omap_dm_timer_set_load()
779 dmtimer_write(timer, OMAP_TIMER_LOAD_REG, load); in omap_dm_timer_set_load()
789 struct dmtimer *timer; in omap_dm_timer_set_match() local
794 timer = to_dmtimer(cookie); in omap_dm_timer_set_match()
795 if (unlikely(!timer)) in omap_dm_timer_set_match()
798 dev = &timer->pdev->dev; in omap_dm_timer_set_match()
803 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_set_match()
808 dmtimer_write(timer, OMAP_TIMER_MATCH_REG, match); in omap_dm_timer_set_match()
809 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, l); in omap_dm_timer_set_match()
819 struct dmtimer *timer; in omap_dm_timer_set_pwm() local
824 timer = to_dmtimer(cookie); in omap_dm_timer_set_pwm()
825 if (unlikely(!timer)) in omap_dm_timer_set_pwm()
828 dev = &timer->pdev->dev; in omap_dm_timer_set_pwm()
833 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_set_pwm()
843 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, l); in omap_dm_timer_set_pwm()
852 struct dmtimer *timer; in omap_dm_timer_get_pwm_status() local
857 timer = to_dmtimer(cookie); in omap_dm_timer_get_pwm_status()
858 if (unlikely(!timer)) in omap_dm_timer_get_pwm_status()
861 dev = &timer->pdev->dev; in omap_dm_timer_get_pwm_status()
866 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_get_pwm_status()
876 struct dmtimer *timer; in omap_dm_timer_set_prescaler() local
881 timer = to_dmtimer(cookie); in omap_dm_timer_set_prescaler()
882 if (unlikely(!timer) || prescaler < -1 || prescaler > 7) in omap_dm_timer_set_prescaler()
885 dev = &timer->pdev->dev; in omap_dm_timer_set_prescaler()
890 l = dmtimer_read(timer, OMAP_TIMER_CTRL_REG); in omap_dm_timer_set_prescaler()
896 dmtimer_write(timer, OMAP_TIMER_CTRL_REG, l); in omap_dm_timer_set_prescaler()
906 struct dmtimer *timer; in omap_dm_timer_set_int_enable() local
910 timer = to_dmtimer(cookie); in omap_dm_timer_set_int_enable()
911 if (unlikely(!timer)) in omap_dm_timer_set_int_enable()
914 dev = &timer->pdev->dev; in omap_dm_timer_set_int_enable()
919 __omap_dm_timer_int_enable(timer, value); in omap_dm_timer_set_int_enable()
927 * omap_dm_timer_set_int_disable - disable timer interrupts
928 * @timer: pointer to timer handle
931 * Disables the specified timer interrupts for a timer.
935 struct dmtimer *timer; in omap_dm_timer_set_int_disable() local
940 timer = to_dmtimer(cookie); in omap_dm_timer_set_int_disable()
941 if (unlikely(!timer)) in omap_dm_timer_set_int_disable()
944 dev = &timer->pdev->dev; in omap_dm_timer_set_int_disable()
949 if (timer->revision == 1) in omap_dm_timer_set_int_disable()
950 l = dmtimer_read(timer, timer->irq_ena) & ~mask; in omap_dm_timer_set_int_disable()
952 dmtimer_write(timer, timer->irq_dis, l); in omap_dm_timer_set_int_disable()
953 l = dmtimer_read(timer, OMAP_TIMER_WAKEUP_EN_REG) & ~mask; in omap_dm_timer_set_int_disable()
954 dmtimer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, l); in omap_dm_timer_set_int_disable()
963 struct dmtimer *timer; in omap_dm_timer_read_status() local
966 timer = to_dmtimer(cookie); in omap_dm_timer_read_status()
967 if (unlikely(!timer || !atomic_read(&timer->enabled))) { in omap_dm_timer_read_status()
968 pr_err("%s: timer not available or enabled.\n", __func__); in omap_dm_timer_read_status()
972 l = dmtimer_read(timer, timer->irq_stat); in omap_dm_timer_read_status()
979 struct dmtimer *timer; in omap_dm_timer_write_status() local
981 timer = to_dmtimer(cookie); in omap_dm_timer_write_status()
982 if (unlikely(!timer || !atomic_read(&timer->enabled))) in omap_dm_timer_write_status()
985 __omap_dm_timer_write_status(timer, value); in omap_dm_timer_write_status()
992 struct dmtimer *timer; in omap_dm_timer_read_counter() local
994 timer = to_dmtimer(cookie); in omap_dm_timer_read_counter()
995 if (unlikely(!timer || !atomic_read(&timer->enabled))) { in omap_dm_timer_read_counter()
996 pr_err("%s: timer not iavailable or enabled.\n", __func__); in omap_dm_timer_read_counter()
1000 return __omap_dm_timer_read_counter(timer); in omap_dm_timer_read_counter()
1005 struct dmtimer *timer; in omap_dm_timer_write_counter() local
1007 timer = to_dmtimer(cookie); in omap_dm_timer_write_counter()
1008 if (unlikely(!timer || !atomic_read(&timer->enabled))) { in omap_dm_timer_write_counter()
1009 pr_err("%s: timer not available or enabled.\n", __func__); in omap_dm_timer_write_counter()
1013 dmtimer_write(timer, OMAP_TIMER_COUNTER_REG, value); in omap_dm_timer_write_counter()
1016 timer->context.tcrr = value; in omap_dm_timer_write_counter()
1022 struct dmtimer *timer = dev_get_drvdata(dev); in omap_dm_timer_runtime_suspend() local
1024 atomic_set(&timer->enabled, 0); in omap_dm_timer_runtime_suspend()
1026 if (timer->capability & OMAP_TIMER_ALWON || !timer->func_base) in omap_dm_timer_runtime_suspend()
1029 omap_timer_save_context(timer); in omap_dm_timer_runtime_suspend()
1036 struct dmtimer *timer = dev_get_drvdata(dev); in omap_dm_timer_runtime_resume() local
1038 if (!(timer->capability & OMAP_TIMER_ALWON) && timer->func_base) in omap_dm_timer_runtime_resume()
1039 omap_timer_restore_context(timer); in omap_dm_timer_runtime_resume()
1041 atomic_set(&timer->enabled, 1); in omap_dm_timer_runtime_resume()
1055 * @pdev: pointer to current timer platform device
1058 * timer devices.
1063 struct dmtimer *timer; in omap_dm_timer_probe() local
1079 timer = devm_kzalloc(dev, sizeof(*timer), GFP_KERNEL); in omap_dm_timer_probe()
1080 if (!timer) in omap_dm_timer_probe()
1083 timer->irq = platform_get_irq(pdev, 0); in omap_dm_timer_probe()
1084 if (timer->irq < 0) in omap_dm_timer_probe()
1085 return timer->irq; in omap_dm_timer_probe()
1087 timer->io_base = devm_platform_ioremap_resource(pdev, 0); in omap_dm_timer_probe()
1088 if (IS_ERR(timer->io_base)) in omap_dm_timer_probe()
1089 return PTR_ERR(timer->io_base); in omap_dm_timer_probe()
1091 platform_set_drvdata(pdev, timer); in omap_dm_timer_probe()
1094 if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) in omap_dm_timer_probe()
1095 timer->capability |= OMAP_TIMER_ALWON; in omap_dm_timer_probe()
1096 if (of_find_property(dev->of_node, "ti,timer-dsp", NULL)) in omap_dm_timer_probe()
1097 timer->capability |= OMAP_TIMER_HAS_DSP_IRQ; in omap_dm_timer_probe()
1098 if (of_find_property(dev->of_node, "ti,timer-pwm", NULL)) in omap_dm_timer_probe()
1099 timer->capability |= OMAP_TIMER_HAS_PWM; in omap_dm_timer_probe()
1100 if (of_find_property(dev->of_node, "ti,timer-secure", NULL)) in omap_dm_timer_probe()
1101 timer->capability |= OMAP_TIMER_SECURE; in omap_dm_timer_probe()
1103 timer->id = pdev->id; in omap_dm_timer_probe()
1104 timer->capability = pdata->timer_capability; in omap_dm_timer_probe()
1105 timer->reserved = omap_dm_timer_reserved_systimer(timer->id); in omap_dm_timer_probe()
1108 timer->omap1 = timer->capability & OMAP_TIMER_NEEDS_RESET; in omap_dm_timer_probe()
1111 if (!timer->omap1) { in omap_dm_timer_probe()
1112 timer->fclk = devm_clk_get(dev, "fck"); in omap_dm_timer_probe()
1113 if (IS_ERR(timer->fclk)) in omap_dm_timer_probe()
1114 return PTR_ERR(timer->fclk); in omap_dm_timer_probe()
1116 timer->fclk = ERR_PTR(-ENODEV); in omap_dm_timer_probe()
1119 if (!(timer->capability & OMAP_TIMER_ALWON)) { in omap_dm_timer_probe()
1120 timer->nb.notifier_call = omap_timer_context_notifier; in omap_dm_timer_probe()
1121 cpu_pm_register_notifier(&timer->nb); in omap_dm_timer_probe()
1124 timer->errata = pdata->timer_errata; in omap_dm_timer_probe()
1126 timer->pdev = pdev; in omap_dm_timer_probe()
1130 if (!timer->reserved) { in omap_dm_timer_probe()
1137 __omap_dm_timer_init_regs(timer); in omap_dm_timer_probe()
1141 /* add the timer element to the list */ in omap_dm_timer_probe()
1143 list_add_tail(&timer->node, &omap_timer_list); in omap_dm_timer_probe()
1156 * omap_dm_timer_remove - cleanup a registered timer device
1157 * @pdev: pointer to current timer platform device
1159 * Called by driver framework whenever a timer device is unregistered.
1160 * In addition to freeing platform resources it also deletes the timer
1165 struct dmtimer *timer; in omap_dm_timer_remove() local
1170 list_for_each_entry(timer, &omap_timer_list, node) in omap_dm_timer_remove()
1171 if (!strcmp(dev_name(&timer->pdev->dev), in omap_dm_timer_remove()
1173 if (!(timer->capability & OMAP_TIMER_ALWON)) in omap_dm_timer_remove()
1174 cpu_pm_unregister_notifier(&timer->nb); in omap_dm_timer_remove()
1175 list_del(&timer->node); in omap_dm_timer_remove()
1222 .compatible = "ti,omap2420-timer",
1225 .compatible = "ti,omap3430-timer",
1229 .compatible = "ti,omap4430-timer",
1233 .compatible = "ti,omap5430-timer",
1237 .compatible = "ti,am335x-timer",
1241 .compatible = "ti,am335x-timer-1ms",
1245 .compatible = "ti,dm816-timer",
1249 .compatible = "ti,am654-timer",
1268 MODULE_DESCRIPTION("OMAP Dual-Mode Timer Driver");