Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d5a9658 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

clocksource: make CLOCKSOURCE_OF_DECLARE type safe



This ensures that a function pointer passed into CLOCKSOURCE_OF_DECLARE
takes the same arguments that we use for calling that function later.

Also fix the extraneous semicolon at end of the CLOCKSOURCE_OF_DECLARE
definition.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarRob Herring <rob.herring@calxeda.com>
parent da4a686a
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


#include <linux/init.h>
#include <linux/init.h>
#include <linux/of.h>
#include <linux/of.h>
#include <linux/clocksource.h>


extern struct of_device_id __clksrc_of_table[];
extern struct of_device_id __clksrc_of_table[];


@@ -26,7 +27,7 @@ void __init clocksource_of_init(void)
{
{
	struct device_node *np;
	struct device_node *np;
	const struct of_device_id *match;
	const struct of_device_id *match;
	void (*init_func)(struct device_node *);
	clocksource_of_init_fn init_func;


	for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
	for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
		init_func = match->data;
		init_func = match->data;
+1 −1
Original line number Original line Diff line number Diff line
@@ -165,4 +165,4 @@ static void __init vt8500_timer_init(struct device_node *np)
					4, 0xf0000000);
					4, 0xf0000000);
}
}


CLOCKSOURCE_OF_DECLARE(vt8500, "via,vt8500-timer", vt8500_timer_init)
CLOCKSOURCE_OF_DECLARE(vt8500, "via,vt8500-timer", vt8500_timer_init);
+9 −2
Original line number Original line Diff line number Diff line
@@ -332,16 +332,23 @@ extern int clocksource_mmio_init(void __iomem *, const char *,


extern int clocksource_i8253_init(void);
extern int clocksource_i8253_init(void);


struct device_node;
typedef void(*clocksource_of_init_fn)(struct device_node *);
#ifdef CONFIG_CLKSRC_OF
#ifdef CONFIG_CLKSRC_OF
extern void clocksource_of_init(void);
extern void clocksource_of_init(void);


#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)			\
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)			\
	static const struct of_device_id __clksrc_of_table_##name	\
	static const struct of_device_id __clksrc_of_table_##name	\
		__used __section(__clksrc_of_table)			\
		__used __section(__clksrc_of_table)			\
		 = { .compatible = compat, .data = fn };
		 = { .compatible = compat,				\
		     .data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
#else
#else
static inline void clocksource_of_init(void) {}
static inline void clocksource_of_init(void) {}
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)			\
	static const struct of_device_id __clksrc_of_table_##name	\
		__attribute__((unused))					\
		 = { .compatible = compat,				\
		     .data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
#endif
#endif


#endif /* _LINUX_CLOCKSOURCE_H */
#endif /* _LINUX_CLOCKSOURCE_H */