of: consolidate linker section OF match table declarations
authorRob Herring <robh@kernel.org>
Thu, 8 May 2014 21:09:24 +0000 (16:09 -0500)
committerRob Herring <robh@kernel.org>
Tue, 20 May 2014 19:25:24 +0000 (14:25 -0500)
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>
drivers/clocksource/clksrc-of.c
drivers/irqchip/irqchip.h
include/linux/clk-provider.h
include/linux/clocksource.h
include/linux/of.h
include/linux/of_reserved_mem.h

index ae2e4278c42abd75358279e937e991497097a2e6..0093a8e49e14d67af9538d8c98c6265d5ad6bedb 100644 (file)
@@ -27,7 +27,7 @@ void __init clocksource_of_init(void)
 {
        struct device_node *np;
        const struct of_device_id *match;
-       clocksource_of_init_fn init_func;
+       of_init_fn_1 init_func;
        unsigned clocksources = 0;
 
        for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
index e445ba2d6addde0a0c185de207e77d71fd634017..0f6486d4f1b0d50bdcfee34c0a12d110a1047c27 100644 (file)
@@ -11,6 +11,8 @@
 #ifndef _IRQCHIP_H
 #define _IRQCHIP_H
 
+#include <linux/of.h>
+
 /*
  * This macro must be used by the different irqchip drivers to declare
  * the association between their DT compatible string and their
@@ -21,9 +23,6 @@
  * @compstr: compatible string of the irqchip driver
  * @fn: initialization function
  */
-#define IRQCHIP_DECLARE(name,compstr,fn)                               \
-       static const struct of_device_id irqchip_of_match_##name        \
-       __used __section(__irqchip_of_table)                            \
-       = { .compatible = compstr, .data = fn }
+#define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, fn)
 
 #endif
index 511917416fb003bd27ba5817fb6c8ee1af8cf498..a6e4008a0bf7aa7095e706c9b9c7fda6e9ad6bb3 100644 (file)
@@ -498,10 +498,7 @@ struct clk_onecell_data {
 
 extern struct of_device_id __clk_of_table;
 
-#define CLK_OF_DECLARE(name, compat, fn)                       \
-       static const struct of_device_id __clk_of_table_##name  \
-               __used __section(__clk_of_table)                \
-               = { .compatible = compat, .data = fn };
+#define CLK_OF_DECLARE(name, compat, fn) OF_DECLARE_1(clk, name, compat, fn)
 
 #ifdef CONFIG_OF
 int of_clk_add_provider(struct device_node *np,
index 67301a40571268a9f29f5477cf1b2e29617c2cbf..a16b497d51590dfa5f96c85374f9ac00c893cae3 100644 (file)
@@ -339,23 +339,13 @@ extern int clocksource_mmio_init(void __iomem *, const char *,
 
 extern int clocksource_i8253_init(void);
 
-struct device_node;
-typedef void(*clocksource_of_init_fn)(struct device_node *);
+#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
+       OF_DECLARE_1(clksrc, name, compat, fn)
+
 #ifdef CONFIG_CLKSRC_OF
 extern void clocksource_of_init(void);
-
-#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)                       \
-       static const struct of_device_id __clksrc_of_table_##name       \
-               __used __section(__clksrc_of_table)                     \
-                = { .compatible = compat,                              \
-                    .data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
 #else
 static inline void clocksource_of_init(void) {}
-#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 /* _LINUX_CLOCKSOURCE_H */
index 3bad8d106e0ea01b2ae7524e216c83b4e654ced3..bf65335b4d059aaa6f32b650e33cf6e631dcdfb6 100644 (file)
@@ -757,4 +757,26 @@ static inline int of_get_available_child_count(const struct device_node *np)
        return num;
 }
 
+#ifdef CONFIG_OF
+#define _OF_DECLARE(table, name, compat, fn, fn_type)                  \
+       static const struct of_device_id __of_table_##name              \
+               __used __section(__##table##_of_table)                  \
+                = { .compatible = compat,                              \
+                    .data = (fn == (fn_type)NULL) ? fn : fn  }
+#else
+#define _OF_DECLARE(table, name, compat, fn, fn_type)                                  \
+       static const struct of_device_id __of_table_##name              \
+               __attribute__((unused))                                 \
+                = { .compatible = compat,                              \
+                    .data = (fn == (fn_type)NULL) ? fn : fn }
+#endif
+
+typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
+typedef void (*of_init_fn_1)(struct device_node *);
+
+#define OF_DECLARE_1(table, name, compat, fn) \
+               _OF_DECLARE(table, name, compat, fn, of_init_fn_1)
+#define OF_DECLARE_2(table, name, compat, fn) \
+               _OF_DECLARE(table, name, compat, fn, of_init_fn_2)
+
 #endif /* _LINUX_OF_H */
index 4c81b84e95ff1f0555ce97119f4cc46c3df1b6b0..4669ddfdd5af5b10edf5fa92ea9bde133bf0b4bf 100644 (file)
@@ -23,31 +23,17 @@ struct reserved_mem_ops {
 
 typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem);
 
+#define RESERVEDMEM_OF_DECLARE(name, compat, init)                     \
+       _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn)
 
 #ifdef CONFIG_OF_RESERVED_MEM
 void fdt_init_reserved_mem(void);
 void fdt_reserved_mem_save_node(unsigned long node, const char *uname,
                               phys_addr_t base, phys_addr_t size);
-
-#define RESERVEDMEM_OF_DECLARE(name, compat, init)                     \
-       static const struct of_device_id __reservedmem_of_table_##name  \
-               __used __section(__reservedmem_of_table)                \
-                = { .compatible = compat,                              \
-                    .data = (init == (reservedmem_of_init_fn)NULL) ?   \
-                               init : init }
-
 #else
 static inline void fdt_init_reserved_mem(void) { }
 static inline void fdt_reserved_mem_save_node(unsigned long node,
                const char *uname, phys_addr_t base, phys_addr_t size) { }
-
-#define RESERVEDMEM_OF_DECLARE(name, compat, init)                     \
-       static const struct of_device_id __reservedmem_of_table_##name  \
-               __attribute__((unused))                                 \
-                = { .compatible = compat,                              \
-                    .data = (init == (reservedmem_of_init_fn)NULL) ?   \
-                               init : init }
-
 #endif
 
 #endif /* __OF_RESERVED_MEM_H */