blob: 871922529332b3321fd5b396df1283095267c34f [file] [log] [blame]
Linus Walleij0fbee1d2019-04-20 13:03:34 +02001=====================
2GPIO Driver Interface
3=====================
Alexandre Courbotfd8e1982013-11-16 21:34:21 +09004
Linus Walleij0fbee1d2019-04-20 13:03:34 +02005This document serves as a guide for writers of GPIO chip drivers.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +09006
7Each GPIO controller driver needs to include the following header, which defines
Daniel W. S. Almeida4e29b702019-11-22 00:47:02 -03008the structures used to define a GPIO driver::
Alexandre Courbotfd8e1982013-11-16 21:34:21 +09009
10 #include <linux/gpio/driver.h>
11
12
13Internal Representation of GPIOs
14================================
15
Linus Walleij0fbee1d2019-04-20 13:03:34 +020016A GPIO chip handles one or more GPIO lines. To be considered a GPIO chip, the
17lines must conform to the definition: General Purpose Input/Output. If the
18line is not general purpose, it is not GPIO and should not be handled by a
19GPIO chip. The use case is the indicative: certain lines in a system may be
20called GPIO but serve a very particular purpose thus not meeting the criteria
21of a general purpose I/O. On the other hand a LED driver line may be used as a
22GPIO and should therefore still be handled by a GPIO chip driver.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090023
Linus Walleij0fbee1d2019-04-20 13:03:34 +020024Inside a GPIO driver, individual GPIO lines are identified by their hardware
25number, sometime also referred to as ``offset``, which is a unique number
26between 0 and n-1, n being the number of GPIOs managed by the chip.
27
28The hardware GPIO number should be something intuitive to the hardware, for
29example if a system uses a memory-mapped set of I/O-registers where 32 GPIO
30lines are handled by one bit per line in a 32-bit register, it makes sense to
31use hardware offsets 0..31 for these, corresponding to bits 0..31 in the
32register.
33
34This number is purely internal: the hardware number of a particular GPIO
35line is never made visible outside of the driver.
36
37On top of this internal number, each GPIO line also needs to have a global
38number in the integer GPIO namespace so that it can be used with the legacy GPIO
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090039interface. Each chip must thus have a "base" number (which can be automatically
Linus Walleij0fbee1d2019-04-20 13:03:34 +020040assigned), and for each GPIO line the global number will be (base + hardware
41number). Although the integer representation is considered deprecated, it still
42has many users and thus needs to be maintained.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090043
Linus Walleij0fbee1d2019-04-20 13:03:34 +020044So for example one platform could use global numbers 32-159 for GPIOs, with a
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090045controller defining 128 GPIOs at a "base" of 32 ; while another platform uses
Linus Walleij0fbee1d2019-04-20 13:03:34 +020046global numbers 0..63 with one set of GPIO controllers, 64-79 with another type
47of GPIO controller, and on one particular board 80-95 with an FPGA. The legacy
48numbers need not be contiguous; either of those platforms could also use numbers
492000-2063 to identify GPIO lines in a bank of I2C GPIO expanders.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090050
51
52Controller Drivers: gpio_chip
53=============================
54
55In the gpiolib framework each GPIO controller is packaged as a "struct
Linus Walleij0fbee1d2019-04-20 13:03:34 +020056gpio_chip" (see <linux/gpio/driver.h> for its complete definition) with members
57common to each controller of that type, these should be assigned by the
58driver code:
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090059
Linus Walleij73547402017-01-31 15:43:05 +010060 - methods to establish GPIO line direction
61 - methods used to access GPIO line values
Jonathan Neuschäfercd495762018-05-16 14:08:00 +020062 - method to set electrical configuration for a given GPIO line
Linus Walleij73547402017-01-31 15:43:05 +010063 - method to return the IRQ number associated to a given GPIO line
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090064 - flag saying whether calls to its methods may sleep
Linus Walleij73547402017-01-31 15:43:05 +010065 - optional line names array to identify lines
Linus Walleij0fbee1d2019-04-20 13:03:34 +020066 - optional debugfs dump method (showing extra state information)
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090067 - optional base number (will be automatically assigned if omitted)
Linus Walleij73547402017-01-31 15:43:05 +010068 - optional label for diagnostics and GPIO chip mapping using platform data
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090069
70The code implementing a gpio_chip should support multiple instances of the
Linus Walleij0fbee1d2019-04-20 13:03:34 +020071controller, preferably using the driver model. That code will configure each
Jeremy Clined9e5eba2019-07-29 10:37:30 -040072gpio_chip and issue gpiochip_add(), gpiochip_add_data(), or
73devm_gpiochip_add_data(). Removing a GPIO controller should be rare; use
74gpiochip_remove() when it is unavoidable.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090075
Linus Walleij73547402017-01-31 15:43:05 +010076Often a gpio_chip is part of an instance-specific structure with states not
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090077exposed by the GPIO interfaces, such as addressing, power management, and more.
Linus Walleij73547402017-01-31 15:43:05 +010078Chips such as audio codecs will have complex non-GPIO states.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090079
Linus Walleij0fbee1d2019-04-20 13:03:34 +020080Any debugfs dump method should normally ignore lines which haven't been
81requested. They can use gpiochip_is_requested(), which returns either
82NULL or the label associated with that GPIO line when it was requested.
Alexandre Courbotfd8e1982013-11-16 21:34:21 +090083
Linus Walleij0fbee1d2019-04-20 13:03:34 +020084Realtime considerations: the GPIO driver should not use spinlock_t or any
85sleepable APIs (like PM runtime) in its gpio_chip implementation (.get/.set
86and direction control callbacks) if it is expected to call GPIO APIs from
87atomic context on realtime kernels (inside hard IRQ handlers and similar
88contexts). Normally this should not be required.
Linus Walleij99adc052014-01-22 15:00:55 +010089
Linus Walleij6b5029d2016-04-05 16:49:57 +020090
Linus Walleij73547402017-01-31 15:43:05 +010091GPIO electrical configuration
92-----------------------------
93
Linus Walleij0fbee1d2019-04-20 13:03:34 +020094GPIO lines can be configured for several electrical modes of operation by using
95the .set_config() callback. Currently this API supports setting:
96
97- Debouncing
98- Single-ended modes (open drain/open source)
99- Pull up and pull down resistor enablement
100
101These settings are described below.
Linus Walleij73547402017-01-31 15:43:05 +0100102
103The .set_config() callback uses the same enumerators and configuration
104semantics as the generic pin control drivers. This is not a coincidence: it is
105possible to assign the .set_config() to the function gpiochip_generic_config()
106which will result in pinctrl_gpio_set_config() being called and eventually
107ending up in the pin control back-end "behind" the GPIO controller, usually
108closer to the actual pins. This way the pin controller can manage the below
109listed GPIO configurations.
110
Linus Walleijadbf0292018-01-18 10:43:43 +0100111If a pin controller back-end is used, the GPIO controller or hardware
112description needs to provide "GPIO ranges" mapping the GPIO line offsets to pin
113numbers on the pin controller so they can properly cross-reference each other.
114
Linus Walleij73547402017-01-31 15:43:05 +0100115
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200116GPIO lines with debounce support
117--------------------------------
Linus Walleij73547402017-01-31 15:43:05 +0100118
119Debouncing is a configuration set to a pin indicating that it is connected to
120a mechanical switch or button, or similar that may bounce. Bouncing means the
121line is pulled high/low quickly at very short intervals for mechanical
122reasons. This can result in the value being unstable or irqs fireing repeatedly
123unless the line is debounced.
124
125Debouncing in practice involves setting up a timer when something happens on
126the line, wait a little while and then sample the line again, so see if it
127still has the same value (low or high). This could also be repeated by a clever
128state machine, waiting for a line to become stable. In either case, it sets
129a certain number of milliseconds for debouncing, or just "on/off" if that time
130is not configurable.
131
132
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200133GPIO lines with open drain/source support
134-----------------------------------------
Linus Walleij6b5029d2016-04-05 16:49:57 +0200135
136Open drain (CMOS) or open collector (TTL) means the line is not actively driven
137high: instead you provide the drain/collector as output, so when the transistor
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100138is not open, it will present a high-impedance (tristate) to the external rail::
Linus Walleij6b5029d2016-04-05 16:49:57 +0200139
140
141 CMOS CONFIGURATION TTL CONFIGURATION
142
143 ||--- out +--- out
144 in ----|| |/
145 ||--+ in ----|
146 | |\
147 GND GND
148
149This configuration is normally used as a way to achieve one of two things:
150
151- Level-shifting: to reach a logical level higher than that of the silicon
152 where the output resides.
153
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200154- Inverse wire-OR on an I/O line, for example a GPIO line, making it possible
Linus Walleij6b5029d2016-04-05 16:49:57 +0200155 for any driving stage on the line to drive it low even if any other output
156 to the same line is simultaneously driving it high. A special case of this
Wolfram Sangf3463da2019-01-17 11:13:21 +0100157 is driving the SCL and SDA lines of an I2C bus, which is by definition a
Linus Walleij6b5029d2016-04-05 16:49:57 +0200158 wire-OR bus.
159
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200160Both use cases require that the line be equipped with a pull-up resistor. This
Linus Walleij6b5029d2016-04-05 16:49:57 +0200161resistor will make the line tend to high level unless one of the transistors on
162the rail actively pulls it down.
163
Linus Walleij451938d52016-04-27 10:23:44 +0200164The level on the line will go as high as the VDD on the pull-up resistor, which
Jonathan Neuschäfercd495762018-05-16 14:08:00 +0200165may be higher than the level supported by the transistor, achieving a
Linus Walleij451938d52016-04-27 10:23:44 +0200166level-shift to the higher VDD.
167
Linus Walleij6b5029d2016-04-05 16:49:57 +0200168Integrated electronics often have an output driver stage in the form of a CMOS
169"totem-pole" with one N-MOS and one P-MOS transistor where one of them drives
170the line high and one of them drives the line low. This is called a push-pull
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100171output. The "totem-pole" looks like so::
Linus Walleij6b5029d2016-04-05 16:49:57 +0200172
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100173 VDD
174 |
175 OD ||--+
176 +--/ ---o|| P-MOS-FET
177 | ||--+
178 IN --+ +----- out
179 | ||--+
180 +--/ ----|| N-MOS-FET
181 OS ||--+
182 |
183 GND
Linus Walleij6b5029d2016-04-05 16:49:57 +0200184
Linus Walleij451938d52016-04-27 10:23:44 +0200185The desired output signal (e.g. coming directly from some GPIO output register)
186arrives at IN. The switches named "OD" and "OS" are normally closed, creating
187a push-pull circuit.
188
189Consider the little "switches" named "OD" and "OS" that enable/disable the
Linus Walleij6b5029d2016-04-05 16:49:57 +0200190P-MOS or N-MOS transistor right after the split of the input. As you can see,
191either transistor will go totally numb if this switch is open. The totem-pole
192is then halved and give high impedance instead of actively driving the line
193high or low respectively. That is usually how software-controlled open
194drain/source works.
195
196Some GPIO hardware come in open drain / open source configuration. Some are
197hard-wired lines that will only support open drain or open source no matter
198what: there is only one transistor there. Some are software-configurable:
199by flipping a bit in a register the output can be configured as open drain
Linus Walleij451938d52016-04-27 10:23:44 +0200200or open source, in practice by flicking open the switches labeled "OD" and "OS"
201in the drawing above.
Linus Walleij6b5029d2016-04-05 16:49:57 +0200202
203By disabling the P-MOS transistor, the output can be driven between GND and
204high impedance (open drain), and by disabling the N-MOS transistor, the output
205can be driven between VDD and high impedance (open source). In the first case,
206a pull-up resistor is needed on the outgoing rail to complete the circuit, and
207in the second case, a pull-down resistor is needed on the rail.
208
209Hardware that supports open drain or open source or both, can implement a
Mika Westerberg2956b5d2017-01-23 15:34:34 +0300210special callback in the gpio_chip: .set_config() that takes a generic
211pinconf packed value telling whether to configure the line as open drain,
212open source or push-pull. This will happen in response to the
213GPIO_OPEN_DRAIN or GPIO_OPEN_SOURCE flag set in the machine file, or coming
214from other hardware descriptions.
Linus Walleij6b5029d2016-04-05 16:49:57 +0200215
216If this state can not be configured in hardware, i.e. if the GPIO hardware does
217not support open drain/open source in hardware, the GPIO library will instead
218use a trick: when a line is set as output, if the line is flagged as open
Linus Walleij451938d52016-04-27 10:23:44 +0200219drain, and the IN output value is low, it will be driven low as usual. But
220if the IN output value is set to high, it will instead *NOT* be driven high,
Linus Walleij6b5029d2016-04-05 16:49:57 +0200221instead it will be switched to input, as input mode is high impedance, thus
222achieveing an "open drain emulation" of sorts: electrically the behaviour will
223be identical, with the exception of possible hardware glitches when switching
224the mode of the line.
225
226For open source configuration the same principle is used, just that instead
227of actively driving the line low, it is set to input.
228
229
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200230GPIO lines with pull up/down resistor support
231---------------------------------------------
232
233A GPIO line can support pull-up/down using the .set_config() callback. This
234means that a pull up or pull-down resistor is available on the output of the
235GPIO line, and this resistor is software controlled.
236
237In discrete designs, a pull-up or pull-down resistor is simply soldered on
Linus Walleij4b3d5002019-05-23 10:17:36 +0200238the circuit board. This is not something we deal with or model in software. The
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200239most you will think about these lines is that they will very likely be
240configured as open drain or open source (see the section above).
241
242The .set_config() callback can only turn pull up or down on and off, and will
243no have any semantic knowledge about the resistance used. It will only say
244switch a bit in a register enabling or disabling pull-up or pull-down.
245
246If the GPIO line supports shunting in different resistance values for the
247pull-up or pull-down resistor, the GPIO chip callback .set_config() will not
248suffice. For these complex use cases, a combined GPIO chip and pin controller
249need to be implemented, as the pin config interface of a pin controller
250supports more versatile control over electrical properties and can handle
251different pull-up or pull-down resistance values.
252
253
Linus Walleij99adc052014-01-22 15:00:55 +0100254GPIO drivers providing IRQs
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200255===========================
256
Linus Walleij99adc052014-01-22 15:00:55 +0100257It is custom that GPIO drivers (GPIO chips) are also providing interrupts,
258most often cascaded off a parent interrupt controller, and in some special
259cases the GPIO logic is melded with a SoC's primary interrupt controller.
260
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200261The IRQ portions of the GPIO block are implemented using an irq_chip, using
Linus Walleijfdd61a02019-08-08 14:32:37 +0200262the header <linux/irq.h>. So this combined driver is utilizing two sub-
Linus Walleij99adc052014-01-22 15:00:55 +0100263systems simultaneously: gpio and irq.
264
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200265It is legal for any IRQ consumer to request an IRQ from any irqchip even if it
266is a combined GPIO+IRQ driver. The basic premise is that gpio_chip and
267irq_chip are orthogonal, and offering their services independent of each
268other.
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100269
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200270gpiod_to_irq() is just a convenience function to figure out the IRQ for a
271certain GPIO line and should not be relied upon to have been called before
272the IRQ is used.
273
274Always prepare the hardware and make it ready for action in respective
275callbacks from the GPIO and irq_chip APIs. Do not rely on gpiod_to_irq() having
276been called first.
277
278We can divide GPIO irqchips in two broad categories:
279
280- CASCADED INTERRUPT CHIPS: this means that the GPIO chip has one common
281 interrupt output line, which is triggered by any enabled GPIO line on that
282 chip. The interrupt output line will then be routed to an parent interrupt
283 controller one level up, in the most simple case the systems primary
284 interrupt controller. This is modeled by an irqchip that will inspect bits
285 inside the GPIO controller to figure out which line fired it. The irqchip
286 part of the driver needs to inspect registers to figure this out and it
287 will likely also need to acknowledge that it is handling the interrupt
288 by clearing some bit (sometime implicitly, by just reading a status
289 register) and it will often need to set up the configuration such as
290 edge sensitivity (rising or falling edge, or high/low level interrupt for
291 example).
292
293- HIERARCHICAL INTERRUPT CHIPS: this means that each GPIO line has a dedicated
294 irq line to a parent interrupt controller one level up. There is no need
Linus Walleij4b3d5002019-05-23 10:17:36 +0200295 to inquire the GPIO hardware to figure out which line has fired, but it
296 may still be necessary to acknowledge the interrupt and set up configuration
297 such as edge sensitivity.
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200298
299Realtime considerations: a realtime compliant GPIO driver should not use
300spinlock_t or any sleepable APIs (like PM runtime) as part of its irqchip
301implementation.
302
Linus Walleij4b3d5002019-05-23 10:17:36 +0200303- spinlock_t should be replaced with raw_spinlock_t.[1]
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200304- If sleepable APIs have to be used, these can be done from the .irq_bus_lock()
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300305 and .irq_bus_unlock() callbacks, as these are the only slowpath callbacks
Linus Walleij4b3d5002019-05-23 10:17:36 +0200306 on an irqchip. Create the callbacks if needed.[2]
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300307
Linus Walleij90887db2014-04-09 14:36:32 +0200308
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200309Cascaded GPIO irqchips
310----------------------
311
312Cascaded GPIO irqchips usually fall in one of three categories:
313
314- CHAINED CASCADED GPIO IRQCHIPS: these are usually the type that is embedded on
Linus Walleijd245b3f2016-11-24 10:57:25 +0100315 an SoC. This means that there is a fast IRQ flow handler for the GPIOs that
Linus Walleij90887db2014-04-09 14:36:32 +0200316 gets called in a chain from the parent IRQ handler, most typically the
Linus Walleijd245b3f2016-11-24 10:57:25 +0100317 system interrupt controller. This means that the GPIO irqchip handler will
318 be called immediately from the parent irqchip, while holding the IRQs
319 disabled. The GPIO irqchip will then end up calling something like this
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100320 sequence in its interrupt handler::
Linus Walleij90887db2014-04-09 14:36:32 +0200321
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100322 static irqreturn_t foo_gpio_irq(int irq, void *data)
323 chained_irq_enter(...);
324 generic_handle_irq(...);
325 chained_irq_exit(...);
Linus Walleij90887db2014-04-09 14:36:32 +0200326
327 Chained GPIO irqchips typically can NOT set the .can_sleep flag on
Linus Walleijd245b3f2016-11-24 10:57:25 +0100328 struct gpio_chip, as everything happens directly in the callbacks: no
329 slow bus traffic like I2C can be used.
Linus Walleij90887db2014-04-09 14:36:32 +0200330
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200331 Realtime considerations: Note that chained IRQ handlers will not be forced
332 threaded on -RT. As a result, spinlock_t or any sleepable APIs (like PM
333 runtime) can't be used in a chained IRQ handler.
334
335 If required (and if it can't be converted to the nested threaded GPIO irqchip,
336 see below) a chained IRQ handler can be converted to generic irq handler and
337 this way it will become a threaded IRQ handler on -RT and a hard IRQ handler
338 on non-RT (for example, see [3]).
339
340 The generic_handle_irq() is expected to be called with IRQ disabled,
Linus Walleijd245b3f2016-11-24 10:57:25 +0100341 so the IRQ core will complain if it is called from an IRQ handler which is
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200342 forced to a thread. The "fake?" raw lock can be used to work around this
343 problem::
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300344
345 raw_spinlock_t wa_lock;
346 static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank)
347 unsigned long wa_lock_flags;
348 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
Thierry Redingf0fbe7b2017-11-07 19:15:47 +0100349 generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, bit));
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300350 raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags);
351
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200352- GENERIC CHAINED GPIO IRQCHIPS: these are the same as "CHAINED GPIO irqchips",
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300353 but chained IRQ handlers are not used. Instead GPIO IRQs dispatching is
354 performed by generic IRQ handler which is configured using request_irq().
355 The GPIO irqchip will then end up calling something like this sequence in
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100356 its interrupt handler::
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300357
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100358 static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id)
359 for each detected GPIO IRQ
360 generic_handle_irq(...);
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300361
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200362 Realtime considerations: this kind of handlers will be forced threaded on -RT,
363 and as result the IRQ core will complain that generic_handle_irq() is called
Linus Walleij4b3d5002019-05-23 10:17:36 +0200364 with IRQ enabled and the same work-around as for "CHAINED GPIO irqchips" can
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200365 be applied.
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300366
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200367- NESTED THREADED GPIO IRQCHIPS: these are off-chip GPIO expanders and any
368 other GPIO irqchip residing on the other side of a sleeping bus such as I2C
369 or SPI.
370
371 Of course such drivers that need slow bus traffic to read out IRQ status and
372 similar, traffic which may in turn incur other IRQs to happen, cannot be
373 handled in a quick IRQ handler with IRQs disabled. Instead they need to spawn
374 a thread and then mask the parent IRQ line until the interrupt is handled
Linus Walleij4aa50b82015-10-27 11:13:18 +0100375 by the driver. The hallmark of this driver is to call something like
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100376 this in its interrupt handler::
Linus Walleij90887db2014-04-09 14:36:32 +0200377
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100378 static irqreturn_t foo_gpio_irq(int irq, void *data)
379 ...
380 handle_nested_irq(irq);
Linus Walleij90887db2014-04-09 14:36:32 +0200381
Linus Walleij4aa50b82015-10-27 11:13:18 +0100382 The hallmark of threaded GPIO irqchips is that they set the .can_sleep
383 flag on struct gpio_chip to true, indicating that this chip may sleep
384 when accessing the GPIOs.
Linus Walleij90887db2014-04-09 14:36:32 +0200385
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200386 These kinds of irqchips are inherently realtime tolerant as they are
387 already set up to handle sleeping contexts.
388
389
390Infrastructure helpers for GPIO irqchips
391----------------------------------------
392
Linus Walleij90887db2014-04-09 14:36:32 +0200393To help out in handling the set-up and management of GPIO irqchips and the
Linus Walleijfdd61a02019-08-08 14:32:37 +0200394associated irqdomain and resource allocation callbacks. These are activated
395by selecting the Kconfig symbol GPIOLIB_IRQCHIP. If the symbol
396IRQ_DOMAIN_HIERARCHY is also selected, hierarchical helpers will also be
397provided. A big portion of overhead code will be managed by gpiolib,
398under the assumption that your interrupts are 1-to-1-mapped to the
399GPIO line index:
Linus Walleij90887db2014-04-09 14:36:32 +0200400
Daniel W. S. Almeida4e29b702019-11-22 00:47:02 -0300401.. csv-table::
402 :header: GPIO line offset, Hardware IRQ
403
404 0,0
405 1,1
406 2,2
407 ...,...
408 ngpio-1, ngpio-1
409
Linus Walleijfdd61a02019-08-08 14:32:37 +0200410
411If some GPIO lines do not have corresponding IRQs, the bitmask valid_mask
412and the flag need_valid_mask in gpio_irq_chip can be used to mask off some
413lines as invalid for associating with IRQs.
414
415The preferred way to set up the helpers is to fill in the
416struct gpio_irq_chip inside struct gpio_chip before adding the gpio_chip.
417If you do this, the additional irq_chip will be set up by gpiolib at the
418same time as setting up the rest of the GPIO functionality. The following
Daniel W. S. Almeida4e29b702019-11-22 00:47:02 -0300419is a typical example of a cascaded interrupt handler using gpio_irq_chip::
Linus Walleijfdd61a02019-08-08 14:32:37 +0200420
Jonathan Neuschäfer35c3ba92019-10-02 16:41:41 +0200421.. code-block:: c
422
Linus Walleijfdd61a02019-08-08 14:32:37 +0200423 /* Typical state container with dynamic irqchip */
424 struct my_gpio {
425 struct gpio_chip gc;
426 struct irq_chip irq;
427 };
428
429 int irq; /* from platform etc */
430 struct my_gpio *g;
431 struct gpio_irq_chip *girq;
432
433 /* Set up the irqchip dynamically */
434 g->irq.name = "my_gpio_irq";
435 g->irq.irq_ack = my_gpio_ack_irq;
436 g->irq.irq_mask = my_gpio_mask_irq;
437 g->irq.irq_unmask = my_gpio_unmask_irq;
438 g->irq.irq_set_type = my_gpio_set_irq_type;
439
440 /* Get a pointer to the gpio_irq_chip */
441 girq = &g->gc.irq;
442 girq->chip = &g->irq;
443 girq->parent_handler = ftgpio_gpio_irq_handler;
444 girq->num_parents = 1;
445 girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents),
446 GFP_KERNEL);
447 if (!girq->parents)
448 return -ENOMEM;
449 girq->default_type = IRQ_TYPE_NONE;
450 girq->handler = handle_bad_irq;
451 girq->parents[0] = irq;
452
453 return devm_gpiochip_add_data(dev, &g->gc, g);
454
455The helper support using hierarchical interrupt controllers as well.
Daniel W. S. Almeida4e29b702019-11-22 00:47:02 -0300456In this case the typical set-up will look like this::
Linus Walleijfdd61a02019-08-08 14:32:37 +0200457
Jonathan Neuschäfer35c3ba92019-10-02 16:41:41 +0200458.. code-block:: c
459
Linus Walleijfdd61a02019-08-08 14:32:37 +0200460 /* Typical state container with dynamic irqchip */
461 struct my_gpio {
462 struct gpio_chip gc;
463 struct irq_chip irq;
464 struct fwnode_handle *fwnode;
465 };
466
467 int irq; /* from platform etc */
468 struct my_gpio *g;
469 struct gpio_irq_chip *girq;
470
471 /* Set up the irqchip dynamically */
472 g->irq.name = "my_gpio_irq";
473 g->irq.irq_ack = my_gpio_ack_irq;
474 g->irq.irq_mask = my_gpio_mask_irq;
475 g->irq.irq_unmask = my_gpio_unmask_irq;
476 g->irq.irq_set_type = my_gpio_set_irq_type;
477
478 /* Get a pointer to the gpio_irq_chip */
479 girq = &g->gc.irq;
480 girq->chip = &g->irq;
481 girq->default_type = IRQ_TYPE_NONE;
482 girq->handler = handle_bad_irq;
483 girq->fwnode = g->fwnode;
484 girq->parent_domain = parent;
485 girq->child_to_parent_hwirq = my_gpio_child_to_parent_hwirq;
486
487 return devm_gpiochip_add_data(dev, &g->gc, g);
488
489As you can see pretty similar, but you do not supply a parent handler for
490the IRQ, instead a parent irqdomain, an fwnode for the hardware and
491a funcion .child_to_parent_hwirq() that has the purpose of looking up
492the parent hardware irq from a child (i.e. this gpio chip) hardware irq.
493As always it is good to look at examples in the kernel tree for advice
494on how to find the required pieces.
495
496The old way of adding irqchips to gpiochips after registration is also still
497available but we try to move away from this:
498
499- DEPRECATED: gpiochip_irqchip_add(): adds a chained cascaded irqchip to a
500 gpiochip. It will pass the struct gpio_chip* for the chip to all IRQ
501 callbacks, so the callbacks need to embed the gpio_chip in its state
502 container and obtain a pointer to the container using container_of().
Mauro Carvalho Chehab0ac624f2019-09-24 10:01:28 -0300503 (See Documentation/driver-api/driver-model/design-patterns.rst)
Linus Walleij90887db2014-04-09 14:36:32 +0200504
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200505- gpiochip_irqchip_add_nested(): adds a nested cascaded irqchip to a gpiochip,
506 as discussed above regarding different types of cascaded irqchips. The
507 cascaded irq has to be handled by a threaded interrupt handler.
Linus Walleijd245b3f2016-11-24 10:57:25 +0100508 Apart from that it works exactly like the chained irqchip.
Mika Westerberg79b804c2016-09-20 15:15:21 +0300509
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200510- gpiochip_set_nested_irqchip(): sets up a nested cascaded irq handler for a
Linus Walleijd245b3f2016-11-24 10:57:25 +0100511 gpio_chip from a parent IRQ. As the parent IRQ has usually been
512 explicitly requested by the driver, this does very little more than
513 mark all the child IRQs as having the other IRQ as parent.
514
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200515If there is a need to exclude certain GPIO lines from the IRQ domain handled by
516these helpers, we can set .irq.need_valid_mask of the gpiochip before
Jeremy Clined9e5eba2019-07-29 10:37:30 -0400517devm_gpiochip_add_data() or gpiochip_add_data() is called. This allocates an
518.irq.valid_mask with as many bits set as there are GPIO lines in the chip, each
519bit representing line 0..n-1. Drivers can exclude GPIO lines by clearing bits
520from this mask. The mask must be filled in before gpiochip_irqchip_add() or
521gpiochip_irqchip_add_nested() is called.
Linus Walleij90887db2014-04-09 14:36:32 +0200522
523To use the helpers please keep the following in mind:
524
525- Make sure to assign all relevant members of the struct gpio_chip so that
526 the irqchip can initialize. E.g. .dev and .can_sleep shall be set up
527 properly.
528
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300529- Nominally set all handlers to handle_bad_irq() in the setup call and pass
530 handle_bad_irq() as flow handler parameter in gpiochip_irqchip_add() if it is
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200531 expected for GPIO driver that irqchip .set_type() callback will be called
532 before using/enabling each GPIO IRQ. Then set the handler to
533 handle_level_irq() and/or handle_edge_irq() in the irqchip .set_type()
534 callback depending on what your controller supports and what is requested
535 by the consumer.
Linus Walleij99adc052014-01-22 15:00:55 +0100536
537
Alexandre Courbotfd8e1982013-11-16 21:34:21 +0900538Locking IRQ usage
539-----------------
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200540
541Since GPIO and irq_chip are orthogonal, we can get conflicts between different
542use cases. For example a GPIO line used for IRQs should be an input line,
543it does not make sense to fire interrupts on an output GPIO.
544
545If there is competition inside the subsystem which side is using the
546resource (a certain GPIO line and register for example) it needs to deny
547certain operations and keep track of usage inside of the gpiolib subsystem.
548
Alexandre Courbotfd8e1982013-11-16 21:34:21 +0900549Input GPIOs can be used as IRQ signals. When this happens, a driver is requested
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100550to mark the GPIO as being used as an IRQ::
Alexandre Courbotfd8e1982013-11-16 21:34:21 +0900551
Alexandre Courbote3a2e872014-10-23 17:27:07 +0900552 int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
Alexandre Courbotfd8e1982013-11-16 21:34:21 +0900553
554This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock
Jonathan Neuschäfer778ea832018-03-09 00:40:20 +0100555is released::
Alexandre Courbotfd8e1982013-11-16 21:34:21 +0900556
Alexandre Courbote3a2e872014-10-23 17:27:07 +0900557 void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset)
Linus Walleij99adc052014-01-22 15:00:55 +0100558
559When implementing an irqchip inside a GPIO driver, these two functions should
560typically be called in the .startup() and .shutdown() callbacks from the
561irqchip.
Guenter Roeckf7d4ad92014-07-22 08:01:01 -0700562
Hans Verkuil4f8183a2018-09-08 11:23:18 +0200563When using the gpiolib irqchip helpers, these callbacks are automatically
564assigned.
565
566
567Disabling and enabling IRQs
568---------------------------
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200569
570In some (fringe) use cases, a driver may be using a GPIO line as input for IRQs,
571but occasionally switch that line over to drive output and then back to being
572an input with interrupts again. This happens on things like CEC (Consumer
573Electronics Control).
574
Hans Verkuil4f8183a2018-09-08 11:23:18 +0200575When a GPIO is used as an IRQ signal, then gpiolib also needs to know if
576the IRQ is enabled or disabled. In order to inform gpiolib about this,
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200577the irqchip driver should call::
Hans Verkuil4f8183a2018-09-08 11:23:18 +0200578
579 void gpiochip_disable_irq(struct gpio_chip *chip, unsigned int offset)
580
581This allows drivers to drive the GPIO as an output while the IRQ is
582disabled. When the IRQ is enabled again, a driver should call::
583
584 void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset)
585
586When implementing an irqchip inside a GPIO driver, these two functions should
587typically be called in the .irq_disable() and .irq_enable() callbacks from the
588irqchip.
589
590When using the gpiolib irqchip helpers, these callbacks are automatically
Linus Walleijd245b3f2016-11-24 10:57:25 +0100591assigned.
592
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200593
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300594Real-Time compliance for GPIO IRQ chips
595---------------------------------------
596
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200597Any provider of irqchips needs to be carefully tailored to support Real-Time
Masanari Iida547d4c12015-11-16 20:00:35 +0900598preemption. It is desirable that all irqchips in the GPIO subsystem keep this
Jonathan Neuschäfercd495762018-05-16 14:08:00 +0200599in mind and do the proper testing to assure they are real time-enabled.
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300600
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200601So, pay attention on above realtime considerations in the documentation.
602
603The following is a checklist to follow when preparing a driver for real-time
604compliance:
605
606- ensure spinlock_t is not used as part irq_chip implementation
607- ensure that sleepable APIs are not used as part irq_chip implementation
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300608 If sleepable APIs have to be used, these can be done from the .irq_bus_lock()
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200609 and .irq_bus_unlock() callbacks
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300610- Chained GPIO irqchips: ensure spinlock_t or any sleepable APIs are not used
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200611 from the chained IRQ handler
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300612- Generic chained GPIO irqchips: take care about generic_handle_irq() calls and
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200613 apply corresponding work-around
614- Chained GPIO irqchips: get rid of the chained IRQ handler and use generic irq
615 handler if possible
616- regmap_mmio: it is possible to disable internal locking in regmap by setting
617 .disable_locking and handling the locking in the GPIO driver
618- Test your driver with the appropriate in-kernel real-time test cases for both
619 level and edge IRQs
620
621* [1] http://www.spinics.net/lists/linux-omap/msg120425.html
622* [2] https://lkml.org/lkml/2015/9/25/494
623* [3] https://lkml.org/lkml/2015/9/25/495
Grygorii Strashkoc307b002015-10-20 17:22:15 +0300624
Guenter Roeckf7d4ad92014-07-22 08:01:01 -0700625
626Requesting self-owned GPIO pins
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200627===============================
Guenter Roeckf7d4ad92014-07-22 08:01:01 -0700628
629Sometimes it is useful to allow a GPIO chip driver to request its own GPIO
Linus Walleij0fbee1d2019-04-20 13:03:34 +0200630descriptors through the gpiolib API. A GPIO driver can use the following
631functions to request and free descriptors::
Guenter Roeckf7d4ad92014-07-22 08:01:01 -0700632
Alexandre Courbotabdc08a2014-08-19 10:06:09 -0700633 struct gpio_desc *gpiochip_request_own_desc(struct gpio_desc *desc,
Linus Walleij21abf102018-09-04 13:31:45 +0200634 u16 hwnum,
635 const char *label,
636 enum gpiod_flags flags)
Guenter Roeckf7d4ad92014-07-22 08:01:01 -0700637
638 void gpiochip_free_own_desc(struct gpio_desc *desc)
639
640Descriptors requested with gpiochip_request_own_desc() must be released with
641gpiochip_free_own_desc().
642
643These functions must be used with care since they do not affect module use
644count. Do not use the functions to request gpio descriptors not owned by the
645calling driver.