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