Lines Matching +full:32 +full:- +full:rail
26 between 0 and n-1, n being the number of GPIOs managed by the chip.
29 example if a system uses a memory-mapped set of I/O-registers where 32 GPIO
30 lines are handled by one bit per line in a 32-bit register, it makes sense to
44 So for example one platform could use global numbers 32-159 for GPIOs, with a
45 controller defining 128 GPIOs at a "base" of 32 ; while another platform uses
46 global numbers 0..63 with one set of GPIO controllers, 64-79 with another type
47 of GPIO controller, and on one particular board 80-95 with an FPGA. The legacy
49 2000-2063 to identify GPIO lines in a bank of I2C GPIO expanders.
60 - methods to establish GPIO line direction
61 - methods used to access GPIO line values
62 - method to set electrical configuration for a given GPIO line
63 - method to return the IRQ number associated to a given GPIO line
64 - flag saying whether calls to its methods may sleep
65 - optional line names array to identify lines
66 - optional debugfs dump method (showing extra state information)
67 - optional base number (will be automatically assigned if omitted)
68 - optional label for diagnostics and GPIO chip mapping using platform data
76 Often a gpio_chip is part of an instance-specific structure with states not
78 Chips such as audio codecs will have complex non-GPIO states.
92 -----------------------------
97 - Debouncing
98 - Single-ended modes (open drain/open source)
99 - Pull up and pull down resistor enablement
107 ending up in the pin control back-end "behind" the GPIO controller, usually
111 If a pin controller back-end is used, the GPIO controller or hardware
113 numbers on the pin controller so they can properly cross-reference each other.
117 --------------------------------
134 -----------------------------------------
138 is not open, it will present a high-impedance (tristate) to the external rail::
143 ||--- out +--- out
144 in ----|| |/
145 ||--+ in ----|
151 - Level-shifting: to reach a logical level higher than that of the silicon
154 - Inverse wire-OR on an I/O line, for example a GPIO line, making it possible
158 wire-OR bus.
160 Both use cases require that the line be equipped with a pull-up resistor. This
162 the rail actively pulls it down.
164 The level on the line will go as high as the VDD on the pull-up resistor, which
166 level-shift to the higher VDD.
169 "totem-pole" with one N-MOS and one P-MOS transistor where one of them drives
170 the line high and one of them drives the line low. This is called a push-pull
171 output. The "totem-pole" looks like so::
175 OD ||--+
176 +--/ ---o|| P-MOS-FET
177 | ||--+
178 IN --+ +----- out
179 | ||--+
180 +--/ ----|| N-MOS-FET
181 OS ||--+
187 a push-pull circuit.
190 P-MOS or N-MOS transistor right after the split of the input. As you can see,
191 either transistor will go totally numb if this switch is open. The totem-pole
193 high or low respectively. That is usually how software-controlled open
197 hard-wired lines that will only support open drain or open source no matter
198 what: there is only one transistor there. Some are software-configurable:
203 By disabling the P-MOS transistor, the output can be driven between GND and
204 high impedance (open drain), and by disabling the N-MOS transistor, the output
206 a pull-up resistor is needed on the outgoing rail to complete the circuit, and
207 in the second case, a pull-down resistor is needed on the rail.
212 open source or push-pull. This will happen in response to the
231 ---------------------------------------------
233 A GPIO line can support pull-up/down using the .set_config() callback. This
234 means that a pull up or pull-down resistor is available on the output of the
237 In discrete designs, a pull-up or pull-down resistor is simply soldered on
244 switch a bit in a register enabling or disabling pull-up or pull-down.
247 pull-up or pull-down resistor, the GPIO chip callback .set_config() will not
251 different pull-up or pull-down resistance values.
262 the header <linux/irq.h>. So this combined driver is utilizing two sub-
280 - CASCADED INTERRUPT CHIPS: this means that the GPIO chip has one common
293 - HIERARCHICAL INTERRUPT CHIPS: this means that each GPIO line has a dedicated
303 - spinlock_t should be replaced with raw_spinlock_t.[1]
304 - If sleepable APIs have to be used, these can be done from the .irq_bus_lock()
310 ----------------------
314 - CHAINED CASCADED GPIO IRQCHIPS: these are usually the type that is embedded on
332 threaded on -RT. As a result, spinlock_t or any sleepable APIs (like PM
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]).
348 raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags);
349 generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, bit));
350 raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags);
352 - GENERIC CHAINED GPIO IRQCHIPS: these are the same as "CHAINED GPIO irqchips",
362 Realtime considerations: this kind of handlers will be forced threaded on -RT,
364 with IRQ enabled and the same work-around as for "CHAINED GPIO irqchips" can
367 - NESTED THREADED GPIO IRQCHIPS: these are off-chip GPIO expanders and any
391 ----------------------------------------
393 To help out in handling the set-up and management of GPIO irqchips and the
398 under the assumption that your interrupts are 1-to-1-mapped to the
401 .. csv-table::
408 ngpio-1, ngpio-1
421 .. code-block:: c
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;
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),
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;
453 return devm_gpiochip_add_data(dev, &g->gc, g);
456 In this case the typical set-up will look like this:
458 .. code-block:: c
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;
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;
487 return devm_gpiochip_add_data(dev, &g->gc, g);
499 - DEPRECATED: gpiochip_irqchip_add(): adds a chained cascaded irqchip to a
503 (See Documentation/driver-api/driver-model/design-patterns.rst)
505 - gpiochip_irqchip_add_nested(): adds a nested cascaded irqchip to a gpiochip,
510 - gpiochip_set_nested_irqchip(): sets up a nested cascaded irq handler for a
519 bit representing line 0..n-1. Drivers can exclude GPIO lines by clearing bits
525 - Make sure to assign all relevant members of the struct gpio_chip so that
529 - Nominally set all handlers to handle_bad_irq() in the setup call and pass
539 -----------------
554 This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock
568 ---------------------------
594 Real-Time compliance for GPIO IRQ chips
595 ---------------------------------------
597 Any provider of irqchips needs to be carefully tailored to support Real-Time
599 in mind and do the proper testing to assure they are real time-enabled.
603 The following is a checklist to follow when preparing a driver for real-time
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
610 - Chained GPIO irqchips: ensure spinlock_t or any sleepable APIs are not used
612 - Generic chained GPIO irqchips: take care about generic_handle_irq() calls and
613 apply corresponding work-around
614 - Chained GPIO irqchips: get rid of the chained IRQ handler and use generic irq
616 - regmap_mmio: it is possible to disable internal locking in regmap by setting
618 - Test your driver with the appropriate in-kernel real-time test cases for both
621 * [1] http://www.spinics.net/lists/linux-omap/msg120425.html
626 Requesting self-owned GPIO pins