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