gpio: Add GPIO support for the ACCES 104-IDIO-16
[linux-2.6-block.git] / Documentation / gpio / driver.txt
CommitLineData
fd8e198c
AC
1GPIO Descriptor Driver Interface
2================================
3
4This document serves as a guide for GPIO chip drivers writers. Note that it
5describes the new descriptor-based interface. For a description of the
6deprecated integer-based GPIO interface please refer to gpio-legacy.txt.
7
8Each GPIO controller driver needs to include the following header, which defines
9the structures used to define a GPIO driver:
10
11 #include <linux/gpio/driver.h>
12
13
14Internal Representation of GPIOs
15================================
16
17Inside a GPIO driver, individual GPIOs are identified by their hardware number,
18which is a unique number between 0 and n, n being the number of GPIOs managed by
19the chip. This number is purely internal: the hardware number of a particular
20GPIO descriptor is never made visible outside of the driver.
21
22On top of this internal number, each GPIO also need to have a global number in
23the integer GPIO namespace so that it can be used with the legacy GPIO
24interface. Each chip must thus have a "base" number (which can be automatically
25assigned), and for each GPIO the global number will be (base + hardware number).
26Although the integer representation is considered deprecated, it still has many
27users and thus needs to be maintained.
28
29So for example one platform could use numbers 32-159 for GPIOs, with a
30controller defining 128 GPIOs at a "base" of 32 ; while another platform uses
31numbers 0..63 with one set of GPIO controllers, 64-79 with another type of GPIO
32controller, and on one particular board 80-95 with an FPGA. The numbers need not
33be contiguous; either of those platforms could also use numbers 2000-2063 to
34identify GPIOs in a bank of I2C GPIO expanders.
35
36
37Controller Drivers: gpio_chip
38=============================
39
40In the gpiolib framework each GPIO controller is packaged as a "struct
41gpio_chip" (see linux/gpio/driver.h for its complete definition) with members
42common to each controller of that type:
43
44 - methods to establish GPIO direction
45 - methods used to access GPIO values
46 - method to return the IRQ number associated to a given GPIO
47 - flag saying whether calls to its methods may sleep
48 - optional debugfs dump method (showing extra state like pullup config)
49 - optional base number (will be automatically assigned if omitted)
50 - label for diagnostics and GPIOs mapping using platform data
51
52The code implementing a gpio_chip should support multiple instances of the
53controller, possibly using the driver model. That code will configure each
54gpio_chip and issue gpiochip_add(). Removing a GPIO controller should be rare;
55use gpiochip_remove() when it is unavoidable.
56
57Most often a gpio_chip is part of an instance-specific structure with state not
58exposed by the GPIO interfaces, such as addressing, power management, and more.
59Chips such as codecs will have complex non-GPIO state.
60
61Any debugfs dump method should normally ignore signals which haven't been
62requested as GPIOs. They can use gpiochip_is_requested(), which returns either
63NULL or the label associated with that GPIO when it was requested.
64
99adc059
LW
65
66GPIO drivers providing IRQs
67---------------------------
68It is custom that GPIO drivers (GPIO chips) are also providing interrupts,
69most often cascaded off a parent interrupt controller, and in some special
70cases the GPIO logic is melded with a SoC's primary interrupt controller.
71
72The IRQ portions of the GPIO block are implemented using an irqchip, using
73the header <linux/irq.h>. So basically such a driver is utilizing two sub-
74systems simultaneously: gpio and irq.
75
90887db8
LW
76GPIO irqchips usually fall in one of two categories:
77
78* CHAINED GPIO irqchips: these are usually the type that is embedded on
79 an SoC. This means that there is a fast IRQ handler for the GPIOs that
80 gets called in a chain from the parent IRQ handler, most typically the
81 system interrupt controller. This means the GPIO irqchip is registered
82 using irq_set_chained_handler() or the corresponding
83 gpiochip_set_chained_irqchip() helper function, and the GPIO irqchip
84 handler will be called immediately from the parent irqchip, while
85 holding the IRQs disabled. The GPIO irqchip will then end up calling
86 something like this sequence in its interrupt handler:
87
88 static irqreturn_t tc3589x_gpio_irq(int irq, void *data)
89 chained_irq_enter(...);
90 generic_handle_irq(...);
91 chained_irq_exit(...);
92
93 Chained GPIO irqchips typically can NOT set the .can_sleep flag on
94 struct gpio_chip, as everything happens directly in the callbacks.
95
677b2ff4
LW
96 NOTE: chained IRQ handlers are usually not good for real time. If you
97 are submitting a new driver or refactoring a driver for real time compliance,
98 consider using creating a nested/threaded irqchip instead, see below.
99
100* NESTED THREADED GPIO irqchips: these are traditionally off-chip GPIO
101 expanders and any other GPIO irqchip residing on the other side of a
102 sleeping bus. Of course such drivers that need slow bus traffic to read
103 out IRQ status and similar, traffic which may in turn incur other IRQs to
104 happen, cannot be handled in a quick IRQ handler with IRQs disabled.
105
106 With the introduction of real time support in the Linux kernel, also other
107 GPIO irqchips are encouraged to use a nested and threaded IRQ handler.
108 Doing so makes the interrupts naturally preemptible on a real time
109 setup, which means the system can easily be configured for real time with
110 a (usually negligable) performance loss.
111
112 These drivers spawn a thread and then mask the parent IRQ line until the
113 interrupt is handled by the driver. The hallmark of this driver is to call
114 something like this in its interrupt handler:
90887db8
LW
115
116 static irqreturn_t tc3589x_gpio_irq(int irq, void *data)
117 ...
118 handle_nested_irq(irq);
677b2ff4
LW
119 OR
120 generic_handle_irq(irq);
90887db8 121
677b2ff4
LW
122 Threaded GPIO irqchips should set the .can_sleep flag on struct gpio_chip
123 to true if they are e.g. accessing the chip over I2C or SPI, indicating that
124 this chip may sleep when accessing the GPIOs. irqchips that are just made
125 threaded to be preemptible and thus real time compliant need not do this:
126 preemption is not sleeping.
90887db8
LW
127
128To help out in handling the set-up and management of GPIO irqchips and the
129associated irqdomain and resource allocation callbacks, the gpiolib has
130some helpers that can be enabled by selecting the GPIOLIB_IRQCHIP Kconfig
131symbol:
132
133* gpiochip_irqchip_add(): adds an irqchip to a gpiochip. It will pass
134 the struct gpio_chip* for the chip to all IRQ callbacks, so the callbacks
135 need to embed the gpio_chip in its state container and obtain a pointer
136 to the container using container_of().
137 (See Documentation/driver-model/design-patterns.txt)
138
139* gpiochip_set_chained_irqchip(): sets up a chained irq handler for a
140 gpio_chip from a parent IRQ and passes the struct gpio_chip* as handler
141 data. (Notice handler data, since the irqchip data is likely used by the
3f97d5fc 142 parent irqchip!) This is for the chained type of chip. This is also used
677b2ff4 143 to set up a threaded/nested irqchip if NULL is passed as handler.
90887db8
LW
144
145To use the helpers please keep the following in mind:
146
147- Make sure to assign all relevant members of the struct gpio_chip so that
148 the irqchip can initialize. E.g. .dev and .can_sleep shall be set up
149 properly.
150
99adc059
LW
151It is legal for any IRQ consumer to request an IRQ from any irqchip no matter
152if that is a combined GPIO+IRQ driver. The basic premise is that gpio_chip and
153irq_chip are orthogonal, and offering their services independent of each
154other.
155
156gpiod_to_irq() is just a convenience function to figure out the IRQ for a
157certain GPIO line and should not be relied upon to have been called before
158the IRQ is used.
159
160So always prepare the hardware and make it ready for action in respective
161callbacks from the GPIO and irqchip APIs. Do not rely on gpiod_to_irq() having
162been called first.
163
164This orthogonality leads to ambiguities that we need to solve: if there is
165competition inside the subsystem which side is using the resource (a certain
166GPIO line and register for example) it needs to deny certain operations and
167keep track of usage inside of the gpiolib subsystem. This is why the API
168below exists.
169
170
fd8e198c
AC
171Locking IRQ usage
172-----------------
173Input GPIOs can be used as IRQ signals. When this happens, a driver is requested
174to mark the GPIO as being used as an IRQ:
175
e3a2e878 176 int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
fd8e198c
AC
177
178This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock
179is released:
180
e3a2e878 181 void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset)
99adc059
LW
182
183When implementing an irqchip inside a GPIO driver, these two functions should
184typically be called in the .startup() and .shutdown() callbacks from the
185irqchip.
f7d4ad98
GR
186
187
677b2ff4
LW
188Real-Time compliance for GPIO IRQ chips
189---------------------------------------
190
191Any provider of irqchips needs to be carefully tailored to support Real Time
192preemption. It is desireable that all irqchips in the GPIO subsystem keep this
193in mind and does the proper testing to assure they are real time-enabled. The
194following is a checklist to follow when preparing a driver for real
195time-compliance:
196
197- Nominally use raw_spinlock_t in the IRQ context path of the IRQ handler as
198 we do not want these sections to be preempted.
199
200- Do NOT use chained_irq_enter() or chained_irq_exit() in the IRQ handler,
201 as we want the hotpath to be preemptible.
202
203- Instead use nested IRQs and generic handlers such as handle_bad_irq(),
204 handle_level_irq() and handle_edge_irq(). Consequentally the handler
205 argument of gpiochip_set_chained_irqchip() should be NULL when using the
206 gpiolib irqchip helpers.
207
208- Nominally set all handlers to handle_bad_irq() in the setup call, then
209 set the handler to handle_level_irq() and/or handle_edge_irq() in the irqchip
210 .set_type() callback depending on what your controller supports.
211
212- If you need to use the pm_runtime_get*()/pm_runtime_put*() callbacks in some
213 of the irqchip callbacks, these should be moved to the .irq_bus_lock()
214 and .irq_bus_unlock() callbacks respectively, as these are the only
215 slowpath callbacks on an irqchip. Create the callbacks if need be.
216
217- Test your driver with the apropriate in-kernel real time test cases for both
218 level and edge IRQs.
219
220
f7d4ad98
GR
221Requesting self-owned GPIO pins
222-------------------------------
223
224Sometimes it is useful to allow a GPIO chip driver to request its own GPIO
225descriptors through the gpiolib API. Using gpio_request() for this purpose
226does not help since it pins the module to the kernel forever (it calls
227try_module_get()). A GPIO driver can use the following functions instead
228to request and free descriptors without being pinned to the kernel forever.
229
abdc08a3
AC
230 struct gpio_desc *gpiochip_request_own_desc(struct gpio_desc *desc,
231 const char *label)
f7d4ad98
GR
232
233 void gpiochip_free_own_desc(struct gpio_desc *desc)
234
235Descriptors requested with gpiochip_request_own_desc() must be released with
236gpiochip_free_own_desc().
237
238These functions must be used with care since they do not affect module use
239count. Do not use the functions to request gpio descriptors not owned by the
240calling driver.