aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2014-05-08 17:09:24 -0400
committerRob Herring <robh@kernel.org>2014-05-20 15:25:24 -0400
commit54196ccbe0ba1f268a646059473313589db35b01 (patch)
tree07443c68af484b0a74ce8456e58f97342f95cf25
parent826d8958419ae924ae2af12d214ee599ee713e91 (diff)
of: consolidate linker section OF match table declarations
We now have several OF match tables using linker sections that are nearly the same definition. The only variation is the callback function prototype. Create a common define for creating linker section OF match table entries which each table declaration can use. Acked-by: Grant Likely <grant.likely@linaro.org> Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r--drivers/clocksource/clksrc-of.c2
-rw-r--r--drivers/irqchip/irqchip.h7
-rw-r--r--include/linux/clk-provider.h5
-rw-r--r--include/linux/clocksource.h16
-rw-r--r--include/linux/of.h22
-rw-r--r--include/linux/of_reserved_mem.h18
6 files changed, 32 insertions, 38 deletions
diff --git a/drivers/clocksource/clksrc-of.c b/drivers/clocksource/clksrc-of.c
index ae2e4278c42a..0093a8e49e14 100644
--- a/drivers/clocksource/clksrc-of.c
+++ b/drivers/clocksource/clksrc-of.c
@@ -27,7 +27,7 @@ void __init clocksource_of_init(void)
27{ 27{
28 struct device_node *np; 28 struct device_node *np;
29 const struct of_device_id *match; 29 const struct of_device_id *match;
30 clocksource_of_init_fn init_func; 30 of_init_fn_1 init_func;
31 unsigned clocksources = 0; 31 unsigned clocksources = 0;
32 32
33 for_each_matching_node_and_match(np, __clksrc_of_table, &match) { 33 for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
diff --git a/drivers/irqchip/irqchip.h b/drivers/irqchip/irqchip.h
index e445ba2d6add..0f6486d4f1b0 100644
--- a/drivers/irqchip/irqchip.h
+++ b/drivers/irqchip/irqchip.h
@@ -11,6 +11,8 @@
11#ifndef _IRQCHIP_H 11#ifndef _IRQCHIP_H
12#define _IRQCHIP_H 12#define _IRQCHIP_H
13 13
14#include <linux/of.h>
15
14/* 16/*
15 * This macro must be used by the different irqchip drivers to declare 17 * This macro must be used by the different irqchip drivers to declare
16 * the association between their DT compatible string and their 18 * the association between their DT compatible string and their
@@ -21,9 +23,6 @@
21 * @compstr: compatible string of the irqchip driver 23 * @compstr: compatible string of the irqchip driver
22 * @fn: initialization function 24 * @fn: initialization function
23 */ 25 */
24#define IRQCHIP_DECLARE(name,compstr,fn) \ 26#define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, fn)
25 static const struct of_device_id irqchip_of_match_##name \
26 __used __section(__irqchip_of_table) \
27 = { .compatible = compstr, .data = fn }
28 27
29#endif 28#endif
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 511917416fb0..a6e4008a0bf7 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -498,10 +498,7 @@ struct clk_onecell_data {
498 498
499extern struct of_device_id __clk_of_table; 499extern struct of_device_id __clk_of_table;
500 500
501#define CLK_OF_DECLARE(name, compat, fn) \ 501#define CLK_OF_DECLARE(name, compat, fn) OF_DECLARE_1(clk, name, compat, fn)
502 static const struct of_device_id __clk_of_table_##name \
503 __used __section(__clk_of_table) \
504 = { .compatible = compat, .data = fn };
505 502
506#ifdef CONFIG_OF 503#ifdef CONFIG_OF
507int of_clk_add_provider(struct device_node *np, 504int of_clk_add_provider(struct device_node *np,
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index 67301a405712..a16b497d5159 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -339,23 +339,13 @@ extern int clocksource_mmio_init(void __iomem *, const char *,
339 339
340extern int clocksource_i8253_init(void); 340extern int clocksource_i8253_init(void);
341 341
342struct device_node; 342#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
343typedef void(*clocksource_of_init_fn)(struct device_node *); 343 OF_DECLARE_1(clksrc, name, compat, fn)
344
344#ifdef CONFIG_CLKSRC_OF 345#ifdef CONFIG_CLKSRC_OF
345extern void clocksource_of_init(void); 346extern void clocksource_of_init(void);
346
347#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
348 static const struct of_device_id __clksrc_of_table_##name \
349 __used __section(__clksrc_of_table) \
350 = { .compatible = compat, \
351 .data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
352#else 347#else
353static inline void clocksource_of_init(void) {} 348static inline void clocksource_of_init(void) {}
354#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
355 static const struct of_device_id __clksrc_of_table_##name \
356 __attribute__((unused)) \
357 = { .compatible = compat, \
358 .data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
359#endif 349#endif
360 350
361#endif /* _LINUX_CLOCKSOURCE_H */ 351#endif /* _LINUX_CLOCKSOURCE_H */
diff --git a/include/linux/of.h b/include/linux/of.h
index 3bad8d106e0e..bf65335b4d05 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -757,4 +757,26 @@ static inline int of_get_available_child_count(const struct device_node *np)
757 return num; 757 return num;
758} 758}
759 759
760#ifdef CONFIG_OF
761#define _OF_DECLARE(table, name, compat, fn, fn_type) \
762 static const struct of_device_id __of_table_##name \
763 __used __section(__##table##_of_table) \
764 = { .compatible = compat, \
765 .data = (fn == (fn_type)NULL) ? fn : fn }
766#else
767#define _OF_DECLARE(table, name, compat, fn, fn_type) \
768 static const struct of_device_id __of_table_##name \
769 __attribute__((unused)) \
770 = { .compatible = compat, \
771 .data = (fn == (fn_type)NULL) ? fn : fn }
772#endif
773
774typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
775typedef void (*of_init_fn_1)(struct device_node *);
776
777#define OF_DECLARE_1(table, name, compat, fn) \
778 _OF_DECLARE(table, name, compat, fn, of_init_fn_1)
779#define OF_DECLARE_2(table, name, compat, fn) \
780 _OF_DECLARE(table, name, compat, fn, of_init_fn_2)
781
760#endif /* _LINUX_OF_H */ 782#endif /* _LINUX_OF_H */
diff --git a/include/linux/of_reserved_mem.h b/include/linux/of_reserved_mem.h
index 4c81b84e95ff..4669ddfdd5af 100644
--- a/include/linux/of_reserved_mem.h
+++ b/include/linux/of_reserved_mem.h
@@ -23,31 +23,17 @@ struct reserved_mem_ops {
23 23
24typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); 24typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem);
25 25
26#define RESERVEDMEM_OF_DECLARE(name, compat, init) \
27 _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn)
26 28
27#ifdef CONFIG_OF_RESERVED_MEM 29#ifdef CONFIG_OF_RESERVED_MEM
28void fdt_init_reserved_mem(void); 30void fdt_init_reserved_mem(void);
29void fdt_reserved_mem_save_node(unsigned long node, const char *uname, 31void fdt_reserved_mem_save_node(unsigned long node, const char *uname,
30 phys_addr_t base, phys_addr_t size); 32 phys_addr_t base, phys_addr_t size);
31
32#define RESERVEDMEM_OF_DECLARE(name, compat, init) \
33 static const struct of_device_id __reservedmem_of_table_##name \
34 __used __section(__reservedmem_of_table) \
35 = { .compatible = compat, \
36 .data = (init == (reservedmem_of_init_fn)NULL) ? \
37 init : init }
38
39#else 33#else
40static inline void fdt_init_reserved_mem(void) { } 34static inline void fdt_init_reserved_mem(void) { }
41static inline void fdt_reserved_mem_save_node(unsigned long node, 35static inline void fdt_reserved_mem_save_node(unsigned long node,
42 const char *uname, phys_addr_t base, phys_addr_t size) { } 36 const char *uname, phys_addr_t base, phys_addr_t size) { }
43
44#define RESERVEDMEM_OF_DECLARE(name, compat, init) \
45 static const struct of_device_id __reservedmem_of_table_##name \
46 __attribute__((unused)) \
47 = { .compatible = compat, \
48 .data = (init == (reservedmem_of_init_fn)NULL) ? \
49 init : init }
50
51#endif 37#endif
52 38
53#endif /* __OF_RESERVED_MEM_H */ 39#endif /* __OF_RESERVED_MEM_H */