1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #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 | |
11 | struct 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 | |
20 | struct of_timer_base { |
21 | void __iomem *base; |
22 | const char *name; |
23 | int index; |
24 | }; |
25 | |
26 | struct of_timer_clk { |
27 | struct clk *clk; |
28 | const char *name; |
29 | int index; |
30 | unsigned long rate; |
31 | unsigned long period; |
32 | }; |
33 | |
34 | struct timer_of { |
35 | unsigned int flags; |
36 | struct device_node *np; |
37 | 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 | |
44 | static inline struct timer_of *to_timer_of(struct clock_event_device *clkevt) |
45 | { |
46 | return container_of(clkevt, struct timer_of, clkevt); |
47 | } |
48 | |
49 | static inline void __iomem *timer_of_base(struct timer_of *to) |
50 | { |
51 | return to->of_base.base; |
52 | } |
53 | |
54 | static inline int timer_of_irq(struct timer_of *to) |
55 | { |
56 | return to->of_irq.irq; |
57 | } |
58 | |
59 | static inline unsigned long timer_of_rate(struct timer_of *to) |
60 | { |
61 | return to->of_clk.rate; |
62 | } |
63 | |
64 | static inline unsigned long timer_of_period(struct timer_of *to) |
65 | { |
66 | return to->of_clk.period; |
67 | } |
68 | |
69 | extern int __init timer_of_init(struct device_node *np, |
70 | struct timer_of *to); |
71 | |
72 | extern void __init timer_of_cleanup(struct timer_of *to); |
73 | |
74 | #endif |
75 |