参考
linux31026\drivers\gpio\gpio-sa1100.clinux31026\drivers\gpio\gpiolib.c
https://lwn.net/Articles/532714/
数据结构
一个gpio number 对应一个 gpio_descstruct gpio_desc {
struct gpio_chip *chip; /* 这个gpio pin所在的chip */
unsigned long flags; /* 设置is_out flag */
const char *label; /* label 就是名字 */
};
所有gpio_desc组成全局的gpio_desc[ARCH_NR_GPIOS];
其中一个chip对应一个 chip->base+len个 gpio pin
全部的chip加起来就是全部的gpio pin
|chip1 base + len |chip2 base + len |chip3 base + len |chip4 base + len |...|
API
gpio_request
找到对应的desc设置一下flag的FLAG_REQUESTED这个位。
设置一下这个desc的label
gpio_free
gpio_request_one
- request a single GPIO with initial configuration
request 并初始化相关的flag
gpio_request_array
- request multiple GPIOs in a single call
for(i = 0; i < num; i++, array++) gpio_request_one;
devm_gpio_request
--> "managed" versions
automatically handle cleanup if the developer forgets
gpio pin 到底用于输入,还是输出
Some GPIOs are used for output, others for input. A suitably-wired GPIO can be used in either mode, though only one direction is active at