From a hardware point of view, a GPIO is a functionality, a mode in which a pin can operate. From a software point of view, a GPIO is nothing but a digital line, which can operate as an input or output, and can have only two values: (1 for high or 0 for low). Kernel GPIO subsystems provide every function you can imagine to set up and handle GPIO line from within your driver:
- Prior to using a GPIO from within the driver, you should claim it to the kernel. This is a way to take the ownership of the GPIO, preventing other drivers from accessing the same GPIO. After taking the ownership of the GPIO, you can:
- Set the direction.
- Toggle its output state (driving line high or low) if used as output.
- Set the debounce-interval and read the state, if used as input. For GPIO lines mapped to IRQ, you can define at what edge/level the interrupt should be triggered...