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.