120 lines · plain
1============================2Subsystem drivers using GPIO3============================4 5Note that standard kernel drivers exist for common GPIO tasks and will provide6the right in-kernel and userspace APIs/ABIs for the job, and that these7drivers can quite easily interconnect with other kernel subsystems using8hardware descriptions such as device tree or ACPI:9 10- leds-gpio: drivers/leds/leds-gpio.c will handle LEDs connected to GPIO11 lines, giving you the LED sysfs interface12 13- ledtrig-gpio: drivers/leds/trigger/ledtrig-gpio.c will provide a LED trigger,14 i.e. a LED will turn on/off in response to a GPIO line going high or low15 (and that LED may in turn use the leds-gpio as per above).16 17- gpio-keys: drivers/input/keyboard/gpio_keys.c is used when your GPIO line18 can generate interrupts in response to a key press. Also supports debounce.19 20- gpio-keys-polled: drivers/input/keyboard/gpio_keys_polled.c is used when your21 GPIO line cannot generate interrupts, so it needs to be periodically polled22 by a timer.23 24- gpio_mouse: drivers/input/mouse/gpio_mouse.c is used to provide a mouse with25 up to three buttons by simply using GPIOs and no mouse port. You can cut the26 mouse cable and connect the wires to GPIO lines or solder a mouse connector27 to the lines for a more permanent solution of this type.28 29- gpio-beeper: drivers/input/misc/gpio-beeper.c is used to provide a beep from30 an external speaker connected to a GPIO line. (If the beep is controlled by31 off/on, for an actual PWM waveform, see pwm-gpio below.)32 33- pwm-gpio: drivers/pwm/pwm-gpio.c is used to toggle a GPIO with a high34 resolution timer producing a PWM waveform on the GPIO line, as well as35 Linux high resolution timers can do.36 37- extcon-gpio: drivers/extcon/extcon-gpio.c is used when you need to read an38 external connector status, such as a headset line for an audio driver or an39 HDMI connector. It will provide a better userspace sysfs interface than GPIO.40 41- restart-gpio: drivers/power/reset/gpio-restart.c is used to restart/reboot42 the system by pulling a GPIO line and will register a restart handler so43 userspace can issue the right system call to restart the system.44 45- poweroff-gpio: drivers/power/reset/gpio-poweroff.c is used to power the46 system down by pulling a GPIO line and will register a pm_power_off()47 callback so that userspace can issue the right system call to power down the48 system.49 50- gpio-gate-clock: drivers/clk/clk-gpio.c is used to control a gated clock51 (off/on) that uses a GPIO, and integrated with the clock subsystem.52 53- i2c-gpio: drivers/i2c/busses/i2c-gpio.c is used to drive an I2C bus54 (two wires, SDA and SCL lines) by hammering (bitbang) two GPIO lines. It will55 appear as any other I2C bus to the system and makes it possible to connect56 drivers for the I2C devices on the bus like any other I2C bus driver.57 58- spi_gpio: drivers/spi/spi-gpio.c is used to drive an SPI bus (variable number59 of wires, at least SCK and optionally MISO, MOSI and chip select lines) using60 GPIO hammering (bitbang). It will appear as any other SPI bus on the system61 and makes it possible to connect drivers for SPI devices on the bus like62 any other SPI bus driver. For example any MMC/SD card can then be connected63 to this SPI by using the mmc_spi host from the MMC/SD card subsystem.64 65- w1-gpio: drivers/w1/masters/w1-gpio.c is used to drive a one-wire bus using66 a GPIO line, integrating with the W1 subsystem and handling devices on67 the bus like any other W1 device.68 69- gpio-fan: drivers/hwmon/gpio-fan.c is used to control a fan for cooling the70 system, connected to a GPIO line (and optionally a GPIO alarm line),71 presenting all the right in-kernel and sysfs interfaces to make your system72 not overheat.73 74- gpio-regulator: drivers/regulator/gpio-regulator.c is used to control a75 regulator providing a certain voltage by pulling a GPIO line, integrating76 with the regulator subsystem and giving you all the right interfaces.77 78- gpio-wdt: drivers/watchdog/gpio_wdt.c is used to provide a watchdog timer79 that will periodically "ping" a hardware connected to a GPIO line by toggling80 it from 1-to-0-to-1. If that hardware does not receive its "ping"81 periodically, it will reset the system.82 83- gpio-nand: drivers/mtd/nand/raw/gpio.c is used to connect a NAND flash chip84 to a set of simple GPIO lines: RDY, NCE, ALE, CLE, NWP. It interacts with the85 NAND flash MTD subsystem and provides chip access and partition parsing like86 any other NAND driving hardware.87 88- ps2-gpio: drivers/input/serio/ps2-gpio.c is used to drive a PS/2 (IBM) serio89 bus, data and clock line, by bit banging two GPIO lines. It will appear as90 any other serio bus to the system and makes it possible to connect drivers91 for e.g. keyboards and other PS/2 protocol based devices.92 93- cec-gpio: drivers/media/platform/cec-gpio/ is used to interact with a CEC94 Consumer Electronics Control bus using only GPIO. It is used to communicate95 with devices on the HDMI bus.96 97- gpio-charger: drivers/power/supply/gpio-charger.c is used if you need to do98 battery charging and all you have to go by to check the presence of the99 AC charger or more complex tasks such as indicating charging status using100 nothing but GPIO lines, this driver provides that and also a clearly defined101 way to pass the charging parameters from hardware descriptions such as the102 device tree.103 104- gpio-mux: drivers/mux/gpio.c is used for controlling a multiplexer using105 n GPIO lines such that you can mux in 2^n different devices by activating106 different GPIO lines. Often the GPIOs are on a SoC and the devices are107 some SoC-external entities, such as different components on a PCB that108 can be selectively enabled.109 110Apart from this there are special GPIO drivers in subsystems like MMC/SD to111read card detect and write protect GPIO lines, and in the TTY serial subsystem112to emulate MCTRL (modem control) signals CTS/RTS by using two GPIO lines. The113MTD NOR flash has add-ons for extra GPIO lines too, though the address bus is114usually connected directly to the flash.115 116Use those instead of talking directly to the GPIOs from userspace; they117integrate with kernel frameworks better than your userspace code could.118Needless to say, just using the appropriate kernel drivers will simplify and119speed up your embedded hacking in particular by providing ready-made components.120