gpio: Introduce struct gpio_irq_chip
authorThierry Reding <treding@nvidia.com>
Tue, 7 Nov 2017 18:15:45 +0000 (19:15 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 8 Nov 2017 12:58:19 +0000 (13:58 +0100)
This new structure will be used to group all fields related to interrupt
handling in a GPIO chip. Doing so will properly namespace these fields
and make it easier to distinguish which fields are used for IRQ support.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Acked-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
include/linux/gpio/driver.h

index ed04fa2a00a89d3fb3c176afaa58ea13e6c58ecb..36a065521fa0a1c21226711ddf671f27ccd1d67f 100644 (file)
@@ -19,6 +19,36 @@ struct module;
 
 #ifdef CONFIG_GPIOLIB
 
+#ifdef CONFIG_GPIOLIB_IRQCHIP
+/**
+ * struct gpio_irq_chip - GPIO interrupt controller
+ */
+struct gpio_irq_chip {
+       /**
+        * @domain_ops:
+        *
+        * Table of interrupt domain operations for this IRQ chip.
+        */
+       const struct irq_domain_ops *domain_ops;
+
+       /**
+        * @parent_handler:
+        *
+        * The interrupt handler for the GPIO chip's parent interrupts, may be
+        * NULL if the parent interrupts are nested rather than cascaded.
+        */
+       irq_flow_handler_t parent_handler;
+
+       /**
+        * @parent_handler_data:
+        *
+        * Data associated, and passed to, the handler for the parent
+        * interrupt.
+        */
+       void *parent_handler_data;
+};
+#endif
+
 /**
  * struct gpio_chip - abstract a GPIO controller
  * @label: a functional name for the GPIO device, such as a part
@@ -176,6 +206,14 @@ struct gpio_chip {
        bool                    irq_need_valid_mask;
        unsigned long           *irq_valid_mask;
        struct lock_class_key   *lock_key;
+
+       /**
+        * @irq:
+        *
+        * Integrates interrupt chip functionality with the GPIO chip. Can be
+        * used to handle IRQs for most practical cases.
+        */
+       struct gpio_irq_chip irq;
 #endif
 
 #if defined(CONFIG_OF_GPIO)