Back to home page

OSCL-LXR

 
 

    


0001 =====================
0002 GPIO Driver Interface
0003 =====================
0004 
0005 This document serves as a guide for writers of GPIO chip drivers.
0006 
0007 Each GPIO controller driver needs to include the following header, which defines
0008 the structures used to define a GPIO driver::
0009 
0010         #include <linux/gpio/driver.h>
0011 
0012 
0013 Internal Representation of GPIOs
0014 ================================
0015 
0016 A GPIO chip handles one or more GPIO lines. To be considered a GPIO chip, the
0017 lines must conform to the definition: General Purpose Input/Output. If the
0018 line is not general purpose, it is not GPIO and should not be handled by a
0019 GPIO chip. The use case is the indicative: certain lines in a system may be
0020 called GPIO but serve a very particular purpose thus not meeting the criteria
0021 of a general purpose I/O. On the other hand a LED driver line may be used as a
0022 GPIO and should therefore still be handled by a GPIO chip driver.
0023 
0024 Inside a GPIO driver, individual GPIO lines are identified by their hardware
0025 number, sometime also referred to as ``offset``, which is a unique number
0026 between 0 and n-1, n being the number of GPIOs managed by the chip.
0027 
0028 The hardware GPIO number should be something intuitive to the hardware, for
0029 example if a system uses a memory-mapped set of I/O-registers where 32 GPIO
0030 lines are handled by one bit per line in a 32-bit register, it makes sense to
0031 use hardware offsets 0..31 for these, corresponding to bits 0..31 in the
0032 register.
0033 
0034 This number is purely internal: the hardware number of a particular GPIO
0035 line is never made visible outside of the driver.
0036 
0037 On top of this internal number, each GPIO line also needs to have a global
0038 number in the integer GPIO namespace so that it can be used with the legacy GPIO
0039 interface. Each chip must thus have a "base" number (which can be automatically
0040 assigned), and for each GPIO line the global number will be (base + hardware
0041 number). Although the integer representation is considered deprecated, it still
0042 has many users and thus needs to be maintained.
0043 
0044 So for example one platform could use global numbers 32-159 for GPIOs, with a
0045 controller defining 128 GPIOs at a "base" of 32 ; while another platform uses
0046 global numbers 0..63 with one set of GPIO controllers, 64-79 with another type
0047 of GPIO controller, and on one particular board 80-95 with an FPGA. The legacy
0048 numbers need not be contiguous; either of those platforms could also use numbers
0049 2000-2063 to identify GPIO lines in a bank of I2C GPIO expanders.
0050 
0051 
0052 Controller Drivers: gpio_chip
0053 =============================
0054 
0055 In the gpiolib framework each GPIO controller is packaged as a "struct
0056 gpio_chip" (see <linux/gpio/driver.h> for its complete definition) with members
0057 common to each controller of that type, these should be assigned by the
0058 driver code:
0059 
0060  - methods to establish GPIO line direction
0061  - methods used to access GPIO line values
0062  - method to set electrical configuration for a given GPIO line
0063  - method to return the IRQ number associated to a given GPIO line
0064  - flag saying whether calls to its methods may sleep
0065  - optional line names array to identify lines
0066  - optional debugfs dump method (showing extra state information)
0067  - optional base number (will be automatically assigned if omitted)
0068  - optional label for diagnostics and GPIO chip mapping using platform data
0069 
0070 The code implementing a gpio_chip should support multiple instances of the
0071 controller, preferably using the driver model. That code will configure each
0072 gpio_chip and issue gpiochip_add(), gpiochip_add_data(), or
0073 devm_gpiochip_add_data().  Removing a GPIO controller should be rare; use
0074 gpiochip_remove() when it is unavoidable.
0075 
0076 Often a gpio_chip is part of an instance-specific structure with states not
0077 exposed by the GPIO interfaces, such as addressing, power management, and more.
0078 Chips such as audio codecs will have complex non-GPIO states.
0079 
0080 Any debugfs dump method should normally ignore lines which haven't been
0081 requested. They can use gpiochip_is_requested(), which returns either
0082 NULL or the label associated with that GPIO line when it was requested.
0083 
0084 Realtime considerations: the GPIO driver should not use spinlock_t or any
0085 sleepable APIs (like PM runtime) in its gpio_chip implementation (.get/.set
0086 and direction control callbacks) if it is expected to call GPIO APIs from
0087 atomic context on realtime kernels (inside hard IRQ handlers and similar
0088 contexts). Normally this should not be required.
0089 
0090 
0091 GPIO electrical configuration
0092 -----------------------------
0093 
0094 GPIO lines can be configured for several electrical modes of operation by using
0095 the .set_config() callback. Currently this API supports setting:
0096 
0097 - Debouncing
0098 - Single-ended modes (open drain/open source)
0099 - Pull up and pull down resistor enablement
0100 
0101 These settings are described below.
0102 
0103 The .set_config() callback uses the same enumerators and configuration
0104 semantics as the generic pin control drivers. This is not a coincidence: it is
0105 possible to assign the .set_config() to the function gpiochip_generic_config()
0106 which will result in pinctrl_gpio_set_config() being called and eventually
0107 ending up in the pin control back-end "behind" the GPIO controller, usually
0108 closer to the actual pins. This way the pin controller can manage the below
0109 listed GPIO configurations.
0110 
0111 If a pin controller back-end is used, the GPIO controller or hardware
0112 description needs to provide "GPIO ranges" mapping the GPIO line offsets to pin
0113 numbers on the pin controller so they can properly cross-reference each other.
0114 
0115 
0116 GPIO lines with debounce support
0117 --------------------------------
0118 
0119 Debouncing is a configuration set to a pin indicating that it is connected to
0120 a mechanical switch or button, or similar that may bounce. Bouncing means the
0121 line is pulled high/low quickly at very short intervals for mechanical
0122 reasons. This can result in the value being unstable or irqs firing repeatedly
0123 unless the line is debounced.
0124 
0125 Debouncing in practice involves setting up a timer when something happens on
0126 the line, wait a little while and then sample the line again, so see if it
0127 still has the same value (low or high). This could also be repeated by a clever
0128 state machine, waiting for a line to become stable. In either case, it sets
0129 a certain number of milliseconds for debouncing, or just "on/off" if that time
0130 is not configurable.
0131 
0132 
0133 GPIO lines with open drain/source support
0134 -----------------------------------------
0135 
0136 Open drain (CMOS) or open collector (TTL) means the line is not actively driven
0137 high: instead you provide the drain/collector as output, so when the transistor
0138 is not open, it will present a high-impedance (tristate) to the external rail::
0139 
0140 
0141    CMOS CONFIGURATION      TTL CONFIGURATION
0142 
0143             ||--- out              +--- out
0144      in ----||                   |/
0145             ||--+         in ----|
0146                 |                |\
0147                GND                 GND
0148 
0149 This configuration is normally used as a way to achieve one of two things:
0150 
0151 - Level-shifting: to reach a logical level higher than that of the silicon
0152   where the output resides.
0153 
0154 - Inverse wire-OR on an I/O line, for example a GPIO line, making it possible
0155   for any driving stage on the line to drive it low even if any other output
0156   to the same line is simultaneously driving it high. A special case of this
0157   is driving the SCL and SDA lines of an I2C bus, which is by definition a
0158   wire-OR bus.
0159 
0160 Both use cases require that the line be equipped with a pull-up resistor. This
0161 resistor will make the line tend to high level unless one of the transistors on
0162 the rail actively pulls it down.
0163 
0164 The level on the line will go as high as the VDD on the pull-up resistor, which
0165 may be higher than the level supported by the transistor, achieving a
0166 level-shift to the higher VDD.
0167 
0168 Integrated electronics often have an output driver stage in the form of a CMOS
0169 "totem-pole" with one N-MOS and one P-MOS transistor where one of them drives
0170 the line high and one of them drives the line low. This is called a push-pull
0171 output. The "totem-pole" looks like so::
0172 
0173                      VDD
0174                       |
0175             OD    ||--+
0176          +--/ ---o||     P-MOS-FET
0177          |        ||--+
0178     IN --+            +----- out
0179          |        ||--+
0180          +--/ ----||     N-MOS-FET
0181             OS    ||--+
0182                       |
0183                      GND
0184 
0185 The desired output signal (e.g. coming directly from some GPIO output register)
0186 arrives at IN. The switches named "OD" and "OS" are normally closed, creating
0187 a push-pull circuit.
0188 
0189 Consider the little "switches" named "OD" and "OS" that enable/disable the
0190 P-MOS or N-MOS transistor right after the split of the input. As you can see,
0191 either transistor will go totally numb if this switch is open. The totem-pole
0192 is then halved and give high impedance instead of actively driving the line
0193 high or low respectively. That is usually how software-controlled open
0194 drain/source works.
0195 
0196 Some GPIO hardware come in open drain / open source configuration. Some are
0197 hard-wired lines that will only support open drain or open source no matter
0198 what: there is only one transistor there. Some are software-configurable:
0199 by flipping a bit in a register the output can be configured as open drain
0200 or open source, in practice by flicking open the switches labeled "OD" and "OS"
0201 in the drawing above.
0202 
0203 By disabling the P-MOS transistor, the output can be driven between GND and
0204 high impedance (open drain), and by disabling the N-MOS transistor, the output
0205 can be driven between VDD and high impedance (open source). In the first case,
0206 a pull-up resistor is needed on the outgoing rail to complete the circuit, and
0207 in the second case, a pull-down resistor is needed on the rail.
0208 
0209 Hardware that supports open drain or open source or both, can implement a
0210 special callback in the gpio_chip: .set_config() that takes a generic
0211 pinconf packed value telling whether to configure the line as open drain,
0212 open source or push-pull. This will happen in response to the
0213 GPIO_OPEN_DRAIN or GPIO_OPEN_SOURCE flag set in the machine file, or coming
0214 from other hardware descriptions.
0215 
0216 If this state can not be configured in hardware, i.e. if the GPIO hardware does
0217 not support open drain/open source in hardware, the GPIO library will instead
0218 use a trick: when a line is set as output, if the line is flagged as open
0219 drain, and the IN output value is low, it will be driven low as usual. But
0220 if the IN output value is set to high, it will instead *NOT* be driven high,
0221 instead it will be switched to input, as input mode is high impedance, thus
0222 achieving an "open drain emulation" of sorts: electrically the behaviour will
0223 be identical, with the exception of possible hardware glitches when switching
0224 the mode of the line.
0225 
0226 For open source configuration the same principle is used, just that instead
0227 of actively driving the line low, it is set to input.
0228 
0229 
0230 GPIO lines with pull up/down resistor support
0231 ---------------------------------------------
0232 
0233 A GPIO line can support pull-up/down using the .set_config() callback. This
0234 means that a pull up or pull-down resistor is available on the output of the
0235 GPIO line, and this resistor is software controlled.
0236 
0237 In discrete designs, a pull-up or pull-down resistor is simply soldered on
0238 the circuit board. This is not something we deal with or model in software. The
0239 most you will think about these lines is that they will very likely be
0240 configured as open drain or open source (see the section above).
0241 
0242 The .set_config() callback can only turn pull up or down on and off, and will
0243 no have any semantic knowledge about the resistance used. It will only say
0244 switch a bit in a register enabling or disabling pull-up or pull-down.
0245 
0246 If the GPIO line supports shunting in different resistance values for the
0247 pull-up or pull-down resistor, the GPIO chip callback .set_config() will not
0248 suffice. For these complex use cases, a combined GPIO chip and pin controller
0249 need to be implemented, as the pin config interface of a pin controller
0250 supports more versatile control over electrical properties and can handle
0251 different pull-up or pull-down resistance values.
0252 
0253 
0254 GPIO drivers providing IRQs
0255 ===========================
0256 
0257 It is custom that GPIO drivers (GPIO chips) are also providing interrupts,
0258 most often cascaded off a parent interrupt controller, and in some special
0259 cases the GPIO logic is melded with a SoC's primary interrupt controller.
0260 
0261 The IRQ portions of the GPIO block are implemented using an irq_chip, using
0262 the header <linux/irq.h>. So this combined driver is utilizing two sub-
0263 systems simultaneously: gpio and irq.
0264 
0265 It is legal for any IRQ consumer to request an IRQ from any irqchip even if it
0266 is a combined GPIO+IRQ driver. The basic premise is that gpio_chip and
0267 irq_chip are orthogonal, and offering their services independent of each
0268 other.
0269 
0270 gpiod_to_irq() is just a convenience function to figure out the IRQ for a
0271 certain GPIO line and should not be relied upon to have been called before
0272 the IRQ is used.
0273 
0274 Always prepare the hardware and make it ready for action in respective
0275 callbacks from the GPIO and irq_chip APIs. Do not rely on gpiod_to_irq() having
0276 been called first.
0277 
0278 We can divide GPIO irqchips in two broad categories:
0279 
0280 - CASCADED INTERRUPT CHIPS: this means that the GPIO chip has one common
0281   interrupt output line, which is triggered by any enabled GPIO line on that
0282   chip. The interrupt output line will then be routed to an parent interrupt
0283   controller one level up, in the most simple case the systems primary
0284   interrupt controller. This is modeled by an irqchip that will inspect bits
0285   inside the GPIO controller to figure out which line fired it. The irqchip
0286   part of the driver needs to inspect registers to figure this out and it
0287   will likely also need to acknowledge that it is handling the interrupt
0288   by clearing some bit (sometime implicitly, by just reading a status
0289   register) and it will often need to set up the configuration such as
0290   edge sensitivity (rising or falling edge, or high/low level interrupt for
0291   example).
0292 
0293 - HIERARCHICAL INTERRUPT CHIPS: this means that each GPIO line has a dedicated
0294   irq line to a parent interrupt controller one level up. There is no need
0295   to inquire the GPIO hardware to figure out which line has fired, but it
0296   may still be necessary to acknowledge the interrupt and set up configuration
0297   such as edge sensitivity.
0298 
0299 Realtime considerations: a realtime compliant GPIO driver should not use
0300 spinlock_t or any sleepable APIs (like PM runtime) as part of its irqchip
0301 implementation.
0302 
0303 - spinlock_t should be replaced with raw_spinlock_t.[1]
0304 - If sleepable APIs have to be used, these can be done from the .irq_bus_lock()
0305   and .irq_bus_unlock() callbacks, as these are the only slowpath callbacks
0306   on an irqchip. Create the callbacks if needed.[2]
0307 
0308 
0309 Cascaded GPIO irqchips
0310 ----------------------
0311 
0312 Cascaded GPIO irqchips usually fall in one of three categories:
0313 
0314 - CHAINED CASCADED GPIO IRQCHIPS: these are usually the type that is embedded on
0315   an SoC. This means that there is a fast IRQ flow handler for the GPIOs that
0316   gets called in a chain from the parent IRQ handler, most typically the
0317   system interrupt controller. This means that the GPIO irqchip handler will
0318   be called immediately from the parent irqchip, while holding the IRQs
0319   disabled. The GPIO irqchip will then end up calling something like this
0320   sequence in its interrupt handler::
0321 
0322     static irqreturn_t foo_gpio_irq(int irq, void *data)
0323         chained_irq_enter(...);
0324         generic_handle_irq(...);
0325         chained_irq_exit(...);
0326 
0327   Chained GPIO irqchips typically can NOT set the .can_sleep flag on
0328   struct gpio_chip, as everything happens directly in the callbacks: no
0329   slow bus traffic like I2C can be used.
0330 
0331   Realtime considerations: Note that chained IRQ handlers will not be forced
0332   threaded on -RT. As a result, spinlock_t or any sleepable APIs (like PM
0333   runtime) can't be used in a chained IRQ handler.
0334 
0335   If required (and if it can't be converted to the nested threaded GPIO irqchip,
0336   see below) a chained IRQ handler can be converted to generic irq handler and
0337   this way it will become a threaded IRQ handler on -RT and a hard IRQ handler
0338   on non-RT (for example, see [3]).
0339 
0340   The generic_handle_irq() is expected to be called with IRQ disabled,
0341   so the IRQ core will complain if it is called from an IRQ handler which is
0342   forced to a thread. The "fake?" raw lock can be used to work around this
0343   problem::
0344 
0345     raw_spinlock_t wa_lock;
0346     static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank)
0347         unsigned long wa_lock_flags;
0348         raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
0349         generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, bit));
0350         raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags);
0351 
0352 - GENERIC CHAINED GPIO IRQCHIPS: these are the same as "CHAINED GPIO irqchips",
0353   but chained IRQ handlers are not used. Instead GPIO IRQs dispatching is
0354   performed by generic IRQ handler which is configured using request_irq().
0355   The GPIO irqchip will then end up calling something like this sequence in
0356   its interrupt handler::
0357 
0358     static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id)
0359         for each detected GPIO IRQ
0360             generic_handle_irq(...);
0361 
0362   Realtime considerations: this kind of handlers will be forced threaded on -RT,
0363   and as result the IRQ core will complain that generic_handle_irq() is called
0364   with IRQ enabled and the same work-around as for "CHAINED GPIO irqchips" can
0365   be applied.
0366 
0367 - NESTED THREADED GPIO IRQCHIPS: these are off-chip GPIO expanders and any
0368   other GPIO irqchip residing on the other side of a sleeping bus such as I2C
0369   or SPI.
0370 
0371   Of course such drivers that need slow bus traffic to read out IRQ status and
0372   similar, traffic which may in turn incur other IRQs to happen, cannot be
0373   handled in a quick IRQ handler with IRQs disabled. Instead they need to spawn
0374   a thread and then mask the parent IRQ line until the interrupt is handled
0375   by the driver. The hallmark of this driver is to call something like
0376   this in its interrupt handler::
0377 
0378     static irqreturn_t foo_gpio_irq(int irq, void *data)
0379         ...
0380         handle_nested_irq(irq);
0381 
0382   The hallmark of threaded GPIO irqchips is that they set the .can_sleep
0383   flag on struct gpio_chip to true, indicating that this chip may sleep
0384   when accessing the GPIOs.
0385 
0386   These kinds of irqchips are inherently realtime tolerant as they are
0387   already set up to handle sleeping contexts.
0388 
0389 
0390 Infrastructure helpers for GPIO irqchips
0391 ----------------------------------------
0392 
0393 To help out in handling the set-up and management of GPIO irqchips and the
0394 associated irqdomain and resource allocation callbacks. These are activated
0395 by selecting the Kconfig symbol GPIOLIB_IRQCHIP. If the symbol
0396 IRQ_DOMAIN_HIERARCHY is also selected, hierarchical helpers will also be
0397 provided. A big portion of overhead code will be managed by gpiolib,
0398 under the assumption that your interrupts are 1-to-1-mapped to the
0399 GPIO line index:
0400 
0401 .. csv-table::
0402     :header: GPIO line offset, Hardware IRQ
0403 
0404     0,0
0405     1,1
0406     2,2
0407     ...,...
0408     ngpio-1, ngpio-1
0409 
0410 
0411 If some GPIO lines do not have corresponding IRQs, the bitmask valid_mask
0412 and the flag need_valid_mask in gpio_irq_chip can be used to mask off some
0413 lines as invalid for associating with IRQs.
0414 
0415 The preferred way to set up the helpers is to fill in the
0416 struct gpio_irq_chip inside struct gpio_chip before adding the gpio_chip.
0417 If you do this, the additional irq_chip will be set up by gpiolib at the
0418 same time as setting up the rest of the GPIO functionality. The following
0419 is a typical example of a chained cascaded interrupt handler using
0420 the gpio_irq_chip. Note how the mask/unmask (or disable/enable) functions
0421 call into the core gpiolib code:
0422 
0423 .. code-block:: c
0424 
0425   /* Typical state container */
0426   struct my_gpio {
0427       struct gpio_chip gc;
0428   };
0429 
0430   static void my_gpio_mask_irq(struct irq_data *d)
0431   {
0432       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0433       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0434 
0435       /*
0436        * Perform any necessary action to mask the interrupt,
0437        * and then call into the core code to synchronise the
0438        * state.
0439        */
0440 
0441       gpiochip_disable_irq(gc, hwirq);
0442   }
0443 
0444   static void my_gpio_unmask_irq(struct irq_data *d)
0445   {
0446       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0447       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0448 
0449       gpiochip_enable_irq(gc, hwirq);
0450 
0451       /*
0452        * Perform any necessary action to unmask the interrupt,
0453        * after having called into the core code to synchronise
0454        * the state.
0455        */
0456   }
0457 
0458   /*
0459    * Statically populate the irqchip. Note that it is made const
0460    * (further indicated by the IRQCHIP_IMMUTABLE flag), and that
0461    * the GPIOCHIP_IRQ_RESOURCE_HELPER macro adds some extra
0462    * callbacks to the structure.
0463    */
0464   static const struct irq_chip my_gpio_irq_chip = {
0465       .name             = "my_gpio_irq",
0466       .irq_ack          = my_gpio_ack_irq,
0467       .irq_mask         = my_gpio_mask_irq,
0468       .irq_unmask       = my_gpio_unmask_irq,
0469       .irq_set_type     = my_gpio_set_irq_type,
0470       .flags            = IRQCHIP_IMMUTABLE,
0471       /* Provide the gpio resource callbacks */
0472       GPIOCHIP_IRQ_RESOURCE_HELPERS,
0473   };
0474 
0475   int irq; /* from platform etc */
0476   struct my_gpio *g;
0477   struct gpio_irq_chip *girq;
0478 
0479   /* Get a pointer to the gpio_irq_chip */
0480   girq = &g->gc.irq;
0481   gpio_irq_chip_set_chip(girq, &my_gpio_irq_chip);
0482   girq->parent_handler = ftgpio_gpio_irq_handler;
0483   girq->num_parents = 1;
0484   girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents),
0485                                GFP_KERNEL);
0486   if (!girq->parents)
0487       return -ENOMEM;
0488   girq->default_type = IRQ_TYPE_NONE;
0489   girq->handler = handle_bad_irq;
0490   girq->parents[0] = irq;
0491 
0492   return devm_gpiochip_add_data(dev, &g->gc, g);
0493 
0494 The helper supports using threaded interrupts as well. Then you just request
0495 the interrupt separately and go with it:
0496 
0497 .. code-block:: c
0498 
0499   /* Typical state container */
0500   struct my_gpio {
0501       struct gpio_chip gc;
0502   };
0503 
0504   static void my_gpio_mask_irq(struct irq_data *d)
0505   {
0506       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0507       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0508 
0509       /*
0510        * Perform any necessary action to mask the interrupt,
0511        * and then call into the core code to synchronise the
0512        * state.
0513        */
0514 
0515       gpiochip_disable_irq(gc, hwirq);
0516   }
0517 
0518   static void my_gpio_unmask_irq(struct irq_data *d)
0519   {
0520       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0521       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0522 
0523       gpiochip_enable_irq(gc, hwirq);
0524 
0525       /*
0526        * Perform any necessary action to unmask the interrupt,
0527        * after having called into the core code to synchronise
0528        * the state.
0529        */
0530   }
0531 
0532   /*
0533    * Statically populate the irqchip. Note that it is made const
0534    * (further indicated by the IRQCHIP_IMMUTABLE flag), and that
0535    * the GPIOCHIP_IRQ_RESOURCE_HELPER macro adds some extra
0536    * callbacks to the structure.
0537    */
0538   static const struct irq_chip my_gpio_irq_chip = {
0539       .name             = "my_gpio_irq",
0540       .irq_ack          = my_gpio_ack_irq,
0541       .irq_mask         = my_gpio_mask_irq,
0542       .irq_unmask       = my_gpio_unmask_irq,
0543       .irq_set_type     = my_gpio_set_irq_type,
0544       .flags            = IRQCHIP_IMMUTABLE,
0545       /* Provide the gpio resource callbacks */
0546       GPIOCHIP_IRQ_RESOURCE_HELPERS,
0547   };
0548 
0549   int irq; /* from platform etc */
0550   struct my_gpio *g;
0551   struct gpio_irq_chip *girq;
0552 
0553   ret = devm_request_threaded_irq(dev, irq, NULL,
0554                 irq_thread_fn, IRQF_ONESHOT, "my-chip", g);
0555   if (ret < 0)
0556         return ret;
0557 
0558   /* Get a pointer to the gpio_irq_chip */
0559   girq = &g->gc.irq;
0560   gpio_irq_chip_set_chip(girq, &my_gpio_irq_chip);
0561   /* This will let us handle the parent IRQ in the driver */
0562   girq->parent_handler = NULL;
0563   girq->num_parents = 0;
0564   girq->parents = NULL;
0565   girq->default_type = IRQ_TYPE_NONE;
0566   girq->handler = handle_bad_irq;
0567 
0568   return devm_gpiochip_add_data(dev, &g->gc, g);
0569 
0570 The helper supports using hierarchical interrupt controllers as well.
0571 In this case the typical set-up will look like this:
0572 
0573 .. code-block:: c
0574 
0575   /* Typical state container with dynamic irqchip */
0576   struct my_gpio {
0577       struct gpio_chip gc;
0578       struct fwnode_handle *fwnode;
0579   };
0580 
0581   static void my_gpio_mask_irq(struct irq_data *d)
0582   {
0583       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0584       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0585 
0586       /*
0587        * Perform any necessary action to mask the interrupt,
0588        * and then call into the core code to synchronise the
0589        * state.
0590        */
0591 
0592       gpiochip_disable_irq(gc, hwirq);
0593       irq_mask_mask_parent(d);
0594   }
0595 
0596   static void my_gpio_unmask_irq(struct irq_data *d)
0597   {
0598       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
0599       irq_hw_number_t hwirq = irqd_to_hwirq(d);
0600 
0601       gpiochip_enable_irq(gc, hwirq);
0602 
0603       /*
0604        * Perform any necessary action to unmask the interrupt,
0605        * after having called into the core code to synchronise
0606        * the state.
0607        */
0608 
0609       irq_mask_unmask_parent(d);
0610   }
0611 
0612   /*
0613    * Statically populate the irqchip. Note that it is made const
0614    * (further indicated by the IRQCHIP_IMMUTABLE flag), and that
0615    * the GPIOCHIP_IRQ_RESOURCE_HELPER macro adds some extra
0616    * callbacks to the structure.
0617    */
0618   static const struct irq_chip my_gpio_irq_chip = {
0619       .name             = "my_gpio_irq",
0620       .irq_ack          = my_gpio_ack_irq,
0621       .irq_mask         = my_gpio_mask_irq,
0622       .irq_unmask       = my_gpio_unmask_irq,
0623       .irq_set_type     = my_gpio_set_irq_type,
0624       .flags            = IRQCHIP_IMMUTABLE,
0625       /* Provide the gpio resource callbacks */
0626       GPIOCHIP_IRQ_RESOURCE_HELPERS,
0627   };
0628 
0629   struct my_gpio *g;
0630   struct gpio_irq_chip *girq;
0631 
0632   /* Get a pointer to the gpio_irq_chip */
0633   girq = &g->gc.irq;
0634   gpio_irq_chip_set_chip(girq, &my_gpio_irq_chip);
0635   girq->default_type = IRQ_TYPE_NONE;
0636   girq->handler = handle_bad_irq;
0637   girq->fwnode = g->fwnode;
0638   girq->parent_domain = parent;
0639   girq->child_to_parent_hwirq = my_gpio_child_to_parent_hwirq;
0640 
0641   return devm_gpiochip_add_data(dev, &g->gc, g);
0642 
0643 As you can see pretty similar, but you do not supply a parent handler for
0644 the IRQ, instead a parent irqdomain, an fwnode for the hardware and
0645 a function .child_to_parent_hwirq() that has the purpose of looking up
0646 the parent hardware irq from a child (i.e. this gpio chip) hardware irq.
0647 As always it is good to look at examples in the kernel tree for advice
0648 on how to find the required pieces.
0649 
0650 If there is a need to exclude certain GPIO lines from the IRQ domain handled by
0651 these helpers, we can set .irq.need_valid_mask of the gpiochip before
0652 devm_gpiochip_add_data() or gpiochip_add_data() is called. This allocates an
0653 .irq.valid_mask with as many bits set as there are GPIO lines in the chip, each
0654 bit representing line 0..n-1. Drivers can exclude GPIO lines by clearing bits
0655 from this mask. The mask can be filled in the init_valid_mask() callback
0656 that is part of the struct gpio_irq_chip.
0657 
0658 To use the helpers please keep the following in mind:
0659 
0660 - Make sure to assign all relevant members of the struct gpio_chip so that
0661   the irqchip can initialize. E.g. .dev and .can_sleep shall be set up
0662   properly.
0663 
0664 - Nominally set gpio_irq_chip.handler to handle_bad_irq. Then, if your irqchip
0665   is cascaded, set the handler to handle_level_irq() and/or handle_edge_irq()
0666   in the irqchip .set_type() callback depending on what your controller
0667   supports and what is requested by the consumer.
0668 
0669 
0670 Locking IRQ usage
0671 -----------------
0672 
0673 Since GPIO and irq_chip are orthogonal, we can get conflicts between different
0674 use cases. For example a GPIO line used for IRQs should be an input line,
0675 it does not make sense to fire interrupts on an output GPIO.
0676 
0677 If there is competition inside the subsystem which side is using the
0678 resource (a certain GPIO line and register for example) it needs to deny
0679 certain operations and keep track of usage inside of the gpiolib subsystem.
0680 
0681 Input GPIOs can be used as IRQ signals. When this happens, a driver is requested
0682 to mark the GPIO as being used as an IRQ::
0683 
0684         int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
0685 
0686 This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock
0687 is released::
0688 
0689         void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset)
0690 
0691 When implementing an irqchip inside a GPIO driver, these two functions should
0692 typically be called in the .startup() and .shutdown() callbacks from the
0693 irqchip.
0694 
0695 When using the gpiolib irqchip helpers, these callbacks are automatically
0696 assigned.
0697 
0698 
0699 Disabling and enabling IRQs
0700 ---------------------------
0701 
0702 In some (fringe) use cases, a driver may be using a GPIO line as input for IRQs,
0703 but occasionally switch that line over to drive output and then back to being
0704 an input with interrupts again. This happens on things like CEC (Consumer
0705 Electronics Control).
0706 
0707 When a GPIO is used as an IRQ signal, then gpiolib also needs to know if
0708 the IRQ is enabled or disabled. In order to inform gpiolib about this,
0709 the irqchip driver should call::
0710 
0711         void gpiochip_disable_irq(struct gpio_chip *chip, unsigned int offset)
0712 
0713 This allows drivers to drive the GPIO as an output while the IRQ is
0714 disabled. When the IRQ is enabled again, a driver should call::
0715 
0716         void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset)
0717 
0718 When implementing an irqchip inside a GPIO driver, these two functions should
0719 typically be called in the .irq_disable() and .irq_enable() callbacks from the
0720 irqchip.
0721 
0722 When IRQCHIP_IMMUTABLE is not advertised by the irqchip, these callbacks
0723 are automatically assigned. This behaviour is deprecated and on its way
0724 to be removed from the kernel.
0725 
0726 
0727 Real-Time compliance for GPIO IRQ chips
0728 ---------------------------------------
0729 
0730 Any provider of irqchips needs to be carefully tailored to support Real-Time
0731 preemption. It is desirable that all irqchips in the GPIO subsystem keep this
0732 in mind and do the proper testing to assure they are real time-enabled.
0733 
0734 So, pay attention on above realtime considerations in the documentation.
0735 
0736 The following is a checklist to follow when preparing a driver for real-time
0737 compliance:
0738 
0739 - ensure spinlock_t is not used as part irq_chip implementation
0740 - ensure that sleepable APIs are not used as part irq_chip implementation
0741   If sleepable APIs have to be used, these can be done from the .irq_bus_lock()
0742   and .irq_bus_unlock() callbacks
0743 - Chained GPIO irqchips: ensure spinlock_t or any sleepable APIs are not used
0744   from the chained IRQ handler
0745 - Generic chained GPIO irqchips: take care about generic_handle_irq() calls and
0746   apply corresponding work-around
0747 - Chained GPIO irqchips: get rid of the chained IRQ handler and use generic irq
0748   handler if possible
0749 - regmap_mmio: it is possible to disable internal locking in regmap by setting
0750   .disable_locking and handling the locking in the GPIO driver
0751 - Test your driver with the appropriate in-kernel real-time test cases for both
0752   level and edge IRQs
0753 
0754 * [1] http://www.spinics.net/lists/linux-omap/msg120425.html
0755 * [2] https://lore.kernel.org/r/1443209283-20781-2-git-send-email-grygorii.strashko@ti.com
0756 * [3] https://lore.kernel.org/r/1443209283-20781-3-git-send-email-grygorii.strashko@ti.com
0757 
0758 
0759 Requesting self-owned GPIO pins
0760 ===============================
0761 
0762 Sometimes it is useful to allow a GPIO chip driver to request its own GPIO
0763 descriptors through the gpiolib API. A GPIO driver can use the following
0764 functions to request and free descriptors::
0765 
0766         struct gpio_desc *gpiochip_request_own_desc(struct gpio_desc *desc,
0767                                                     u16 hwnum,
0768                                                     const char *label,
0769                                                     enum gpiod_flags flags)
0770 
0771         void gpiochip_free_own_desc(struct gpio_desc *desc)
0772 
0773 Descriptors requested with gpiochip_request_own_desc() must be released with
0774 gpiochip_free_own_desc().
0775 
0776 These functions must be used with care since they do not affect module use
0777 count. Do not use the functions to request gpio descriptors not owned by the
0778 calling driver.