blob: a5478f3e8589df8f1cdc476ce0cf47a00122aca5 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Daniel Lezcanodc11bae2017-06-05 00:18:43 +02002#ifndef __TIMER_OF_H__
3#define __TIMER_OF_H__
4
5#include <linux/clockchips.h>
6
7#define TIMER_OF_BASE 0x1
8#define TIMER_OF_CLOCK 0x2
9#define TIMER_OF_IRQ 0x4
10
11struct of_timer_irq {
12 int irq;
13 int index;
14 int percpu;
15 const char *name;
16 unsigned long flags;
17 irq_handler_t handler;
18};
19
20struct of_timer_base {
21 void __iomem *base;
22 const char *name;
23 int index;
24};
25
26struct of_timer_clk {
27 struct clk *clk;
28 const char *name;
29 int index;
30 unsigned long rate;
31 unsigned long period;
32};
33
34struct timer_of {
35 unsigned int flags;
Daniel Lezcano1c63c1c2018-01-08 14:28:48 +010036 struct device_node *np;
Daniel Lezcanodc11bae2017-06-05 00:18:43 +020037 struct clock_event_device clkevt;
38 struct of_timer_base of_base;
39 struct of_timer_irq of_irq;
40 struct of_timer_clk of_clk;
41 void *private_data;
42};
43
44static inline struct timer_of *to_timer_of(struct clock_event_device *clkevt)
45{
46 return container_of(clkevt, struct timer_of, clkevt);
47}
48
49static inline void __iomem *timer_of_base(struct timer_of *to)
50{
51 return to->of_base.base;
52}
53
54static inline int timer_of_irq(struct timer_of *to)
55{
56 return to->of_irq.irq;
57}
58
59static inline unsigned long timer_of_rate(struct timer_of *to)
60{
61 return to->of_clk.rate;
62}
63
64static inline unsigned long timer_of_period(struct timer_of *to)
65{
66 return to->of_clk.period;
67}
68
69extern int __init timer_of_init(struct device_node *np,
70 struct timer_of *to);
Benjamin Gaignardf48729a2017-10-23 11:58:37 +020071
Benjamin Gaignard558de282017-11-14 09:52:38 +010072extern void __init timer_of_cleanup(struct timer_of *to);
Benjamin Gaignardf48729a2017-10-23 11:58:37 +020073
Daniel Lezcanodc11bae2017-06-05 00:18:43 +020074#endif