| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef __TIMER_OF_H__ | |
| #define __TIMER_OF_H__ | |
| #include <linux/clockchips.h> | |
| #define TIMER_OF_BASE 0x1 | |
| #define TIMER_OF_CLOCK 0x2 | |
| #define TIMER_OF_IRQ 0x4 | |
| struct of_timer_irq { | |
| int irq; | |
| int index; | |
| int percpu; | |
| const char *name; | |
| unsigned long flags; | |
| irq_handler_t handler; | |
| }; | |
| struct of_timer_base { | |
| void __iomem *base; | |
| const char *name; | |
| int index; | |
| }; | |
| struct of_timer_clk { | |
| struct clk *clk; | |
| const char *name; | |
| int index; | |
| unsigned long rate; | |
| unsigned long period; | |
| }; | |
| struct timer_of { | |
| unsigned int flags; | |
| struct device_node *np; | |
| struct clock_event_device clkevt; | |
| struct of_timer_base of_base; | |
| struct of_timer_irq of_irq; | |
| struct of_timer_clk of_clk; | |
| void *private_data; | |
| }; | |
| static inline struct timer_of *to_timer_of(struct clock_event_device *clkevt) | |
| { | |
| return container_of(clkevt, struct timer_of, clkevt); | |
| } | |
| static inline void __iomem *timer_of_base(struct timer_of *to) | |
| { | |
| return to->of_base.base; | |
| } | |
| static inline int timer_of_irq(struct timer_of *to) | |
| { | |
| return to->of_irq.irq; | |
| } | |
| static inline unsigned long timer_of_rate(struct timer_of *to) | |
| { | |
| return to->of_clk.rate; | |
| } | |
| static inline unsigned long timer_of_period(struct timer_of *to) | |
| { | |
| return to->of_clk.period; | |
| } | |
| extern int __init timer_of_init(struct device_node *np, | |
| struct timer_of *to); | |
| extern void __init timer_of_cleanup(struct timer_of *to); | |
| #endif |