drivers-on-gpio.rst 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. ============================
  2. Subsystem drivers using GPIO
  3. ============================
  4. Note that standard kernel drivers exist for common GPIO tasks and will provide
  5. the right in-kernel and userspace APIs/ABIs for the job, and that these
  6. drivers can quite easily interconnect with other kernel subsystems using
  7. hardware descriptions such as device tree or ACPI:
  8. - leds-gpio: drivers/leds/leds-gpio.c will handle LEDs connected to GPIO
  9. lines, giving you the LED sysfs interface
  10. - ledtrig-gpio: drivers/leds/trigger/ledtrig-gpio.c will provide a LED trigger,
  11. i.e. a LED will turn on/off in response to a GPIO line going high or low
  12. (and that LED may in turn use the leds-gpio as per above).
  13. - gpio-keys: drivers/input/keyboard/gpio_keys.c is used when your GPIO line
  14. can generate interrupts in response to a key press. Also supports debounce.
  15. - gpio-keys-polled: drivers/input/keyboard/gpio_keys_polled.c is used when your
  16. GPIO line cannot generate interrupts, so it needs to be periodically polled
  17. by a timer.
  18. - gpio_mouse: drivers/input/mouse/gpio_mouse.c is used to provide a mouse with
  19. up to three buttons by simply using GPIOs and no mouse port. You can cut the
  20. mouse cable and connect the wires to GPIO lines or solder a mouse connector
  21. to the lines for a more permanent solution of this type.
  22. - gpio-beeper: drivers/input/misc/gpio-beeper.c is used to provide a beep from
  23. an external speaker connected to a GPIO line.
  24. - extcon-gpio: drivers/extcon/extcon-gpio.c is used when you need to read an
  25. external connector status, such as a headset line for an audio driver or an
  26. HDMI connector. It will provide a better userspace sysfs interface than GPIO.
  27. - restart-gpio: drivers/power/reset/gpio-restart.c is used to restart/reboot
  28. the system by pulling a GPIO line and will register a restart handler so
  29. userspace can issue the right system call to restart the system.
  30. - poweroff-gpio: drivers/power/reset/gpio-poweroff.c is used to power the
  31. system down by pulling a GPIO line and will register a pm_power_off()
  32. callback so that userspace can issue the right system call to power down the
  33. system.
  34. - gpio-gate-clock: drivers/clk/clk-gpio.c is used to control a gated clock
  35. (off/on) that uses a GPIO, and integrated with the clock subsystem.
  36. - i2c-gpio: drivers/i2c/busses/i2c-gpio.c is used to drive an I2C bus
  37. (two wires, SDA and SCL lines) by hammering (bitbang) two GPIO lines. It will
  38. appear as any other I2C bus to the system and makes it possible to connect
  39. drivers for the I2C devices on the bus like any other I2C bus driver.
  40. - spi_gpio: drivers/spi/spi-gpio.c is used to drive an SPI bus (variable number
  41. of wires, at least SCK and optionally MISO, MOSI and chip select lines) using
  42. GPIO hammering (bitbang). It will appear as any other SPI bus on the system
  43. and makes it possible to connect drivers for SPI devices on the bus like
  44. any other SPI bus driver. For example any MMC/SD card can then be connected
  45. to this SPI by using the mmc_spi host from the MMC/SD card subsystem.
  46. - w1-gpio: drivers/w1/masters/w1-gpio.c is used to drive a one-wire bus using
  47. a GPIO line, integrating with the W1 subsystem and handling devices on
  48. the bus like any other W1 device.
  49. - gpio-fan: drivers/hwmon/gpio-fan.c is used to control a fan for cooling the
  50. system, connected to a GPIO line (and optionally a GPIO alarm line),
  51. presenting all the right in-kernel and sysfs interfaces to make your system
  52. not overheat.
  53. - gpio-regulator: drivers/regulator/gpio-regulator.c is used to control a
  54. regulator providing a certain voltage by pulling a GPIO line, integrating
  55. with the regulator subsystem and giving you all the right interfaces.
  56. - gpio-wdt: drivers/watchdog/gpio_wdt.c is used to provide a watchdog timer
  57. that will periodically "ping" a hardware connected to a GPIO line by toggling
  58. it from 1-to-0-to-1. If that hardware does not receive its "ping"
  59. periodically, it will reset the system.
  60. - gpio-nand: drivers/mtd/nand/raw/gpio.c is used to connect a NAND flash chip
  61. to a set of simple GPIO lines: RDY, NCE, ALE, CLE, NWP. It interacts with the
  62. NAND flash MTD subsystem and provides chip access and partition parsing like
  63. any other NAND driving hardware.
  64. - ps2-gpio: drivers/input/serio/ps2-gpio.c is used to drive a PS/2 (IBM) serio
  65. bus, data and clock line, by bit banging two GPIO lines. It will appear as
  66. any other serio bus to the system and makes it possible to connect drivers
  67. for e.g. keyboards and other PS/2 protocol based devices.
  68. - cec-gpio: drivers/media/platform/cec-gpio/ is used to interact with a CEC
  69. Consumer Electronics Control bus using only GPIO. It is used to communicate
  70. with devices on the HDMI bus.
  71. - gpio-charger: drivers/power/supply/gpio-charger.c is used if you need to do
  72. battery charging and all you have to go by to check the presence of the
  73. AC charger or more complex tasks such as indicating charging status using
  74. nothing but GPIO lines, this driver provides that and also a clearly defined
  75. way to pass the charging parameters from hardware descriptions such as the
  76. device tree.
  77. Apart from this there are special GPIO drivers in subsystems like MMC/SD to
  78. read card detect and write protect GPIO lines, and in the TTY serial subsystem
  79. to emulate MCTRL (modem control) signals CTS/RTS by using two GPIO lines. The
  80. MTD NOR flash has add-ons for extra GPIO lines too, though the address bus is
  81. usually connected directly to the flash.
  82. Use those instead of talking directly to the GPIOs from userspace; they
  83. integrate with kernel frameworks better than your userspace code could.
  84. Needless to say, just using the appropriate kernel drivers will simplify and
  85. speed up your embedded hacking in particular by providing ready-made components.