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 65Locking IRQ usage 66----------------- 67Input GPIOs can be used as IRQ signals. When this happens, a driver is requested 68to mark the GPIO as being used as an IRQ: 69 70 int gpiod_lock_as_irq(struct gpio_desc *desc) 71 72This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock 73is released: 74 75 void gpiod_unlock_as_irq(struct gpio_desc *desc) 76