Add IRQCHIP_DECLARE_DRIVER macro to allow having driver code that both
registers irqchip and a platform driver. Based on analogous code of
CLK_OF_DECLARE_DRIVER.

Cc: yurov...@gmail.com
Cc: Shawn Guo <shawn...@kernel.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: Jason Cooper <ja...@lakedaemon.net>
Cc: Marc Zyngier <marc.zyng...@arm.com>
Signed-off-by: Andrey Smirnov <andrew.smir...@gmail.com>
---
 include/linux/irqchip.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/include/linux/irqchip.h b/include/linux/irqchip.h
index 89c34b2..611e8cc 100644
--- a/include/linux/irqchip.h
+++ b/include/linux/irqchip.h
@@ -27,6 +27,22 @@
 #define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, 
fn)
 
 /*
+ * Use this macro when you have a driver that requires two
+ * initialization routines, one at IRQCHIP_DECLARE, and one at
+ * platform device probe
+ */
+#define IRQCHIP_DECLARE_DRIVER(name, compat, fn)                       \
+       static int __init                                               \
+       name##_of_irqchip_init_driver(struct device_node *np,           \
+                                     struct device_node *parent)       \
+       {                                                               \
+               of_node_clear_flag(np, OF_POPULATED);                   \
+               return fn(np, parent);                                  \
+       }                                                               \
+       OF_DECLARE_2(irqchip, name, compat, name##_of_irqchip_init_driver)
+
+
+/*
  * This macro must be used by the different irqchip drivers to declare
  * the association between their version and their initialization function.
  *
-- 
2.9.3

Reply via email to