#include <linux/clk.h>
#include <linux/clockchips.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqreturn.h>
#include <linux/sched_clock.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#define OWL_Tx_CTL …
#define OWL_Tx_CMP …
#define OWL_Tx_VAL …
#define OWL_Tx_CTL_PD …
#define OWL_Tx_CTL_INTEN …
#define OWL_Tx_CTL_EN …
static void __iomem *owl_timer_base;
static void __iomem *owl_clksrc_base;
static void __iomem *owl_clkevt_base;
static inline void owl_timer_reset(void __iomem *base)
{ … }
static inline void owl_timer_set_enabled(void __iomem *base, bool enabled)
{ … }
static u64 notrace owl_timer_sched_read(void)
{ … }
static int owl_timer_set_state_shutdown(struct clock_event_device *evt)
{ … }
static int owl_timer_set_state_oneshot(struct clock_event_device *evt)
{ … }
static int owl_timer_tick_resume(struct clock_event_device *evt)
{ … }
static int owl_timer_set_next_event(unsigned long evt,
struct clock_event_device *ev)
{ … }
static struct clock_event_device owl_clockevent = …;
static irqreturn_t owl_timer1_interrupt(int irq, void *dev_id)
{ … }
static int __init owl_timer_init(struct device_node *node)
{ … }
TIMER_OF_DECLARE(owl_s500, "actions,s500-timer", owl_timer_init);
TIMER_OF_DECLARE(owl_s700, "actions,s700-timer", owl_timer_init);
TIMER_OF_DECLARE(owl_s900, "actions,s900-timer", owl_timer_init);