mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Under certain circumstances, some specific operations must be done with the device node pointer, which forces the timer code to propagate the pointer to the functions which need it. In order to consolidate the function signatures in the different drivers by using the timer-of structure, let's store it in the timer-of structure as a handy pointer when it is needed. Tested-by: Benjamin Gaignard <benjamin.gaignard@st.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Benjamin Gaignard <benjamin.gaignard@st.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1515418139-23276-9-git-send-email-daniel.lezcano@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 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
 |