Merge tag 'docs-4.16' of git://git.lwn.net/linux
[sfrench/cifs-2.6.git] / drivers / clocksource / timer-of.h
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