Linux GPIO子系统API

static inline bool gpio_is_valid(int number)

该函数用来判断获取到的gpio号是否是有效的,只有有效的gpio号,才能向内核中进行申请使用,因此,当我们从设备树的设备节点获取到gpio号,可以使用该函数进行判断是否有效。

int gpio_request(unsigned gpio, const char *label)

该函数用于申请一个 GPIO管脚,在使用一个 GPIO之前一定要使用 gpio_request进行申请。
@gpio:要申请的 gpio标号,使用 of_get_named_gpio函数从设备树获取指定 GPIO属性信息,此函数会返回这个 GPIO的标号。
@label:给 gpio设置个名字。
@返回值: 0,申请成功;其他值,申请失败。

void gpio_free(unsigned gpio)

如果不使用某个 GPIO了,那么就可以调用 gpio_free函数进行释放。
@gpio:要释放的 gpio标号。

int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);

该函数用来申请单个GPIO,但是在申请的时候可以设置flag标志,例如,该函数在申请GPIO资源的同时,直接将GPIO的方向设置为输入或者输出。

int gpio_request_array(const struct gpio *array, size_t num);
void gpio_free_array(const struct gpio *array, size_t num);

这两个函数用来向系统中申请或者释放多个GPIO资源。

int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
int devm_gpio_request_one(struct device *dev, unsigned gpio, unsigned long flags, const char *label);
void devm_gpio_free(struct device *dev, unsigned int gpio);

这3个函数也是用来向系统申请或者释放GPIO资源,但是函数带有devm_前缀,也就是说,这是带设备资源管理版本的函数,因此在使用上面的函数时,需要指定设备的struct device指针。

int gpio_direction_input(unsigned gpio)

此函数用于设置某个 GPIO为输入。
@gpio:要设置为输入的 GPIO标号。
@返回值: 0,设置成功;负值,设置失败。

int gpio_direction_output(unsigned gpio, int value)

此函数用于设置某个 GPIO为输出,并且设置默认输出值。
@gpio:要设置为输出的 GPIO标号。
@value GPIO默认输出值。
@返回值: 0,设置成功;负值,设置失败。

int __gpio_get_value(unsigned gpio)

此函数用于获取某个 GPIO的值 (0或 1)

void __gpio_set_value(unsigned gpio, int value)

此函数用于设置某个 GPIO的值

int gpio_to_irq(unsigned int gpio)

此函数用于将当前已经申请GPIO号转换为IRQ号,也就是获取当前GPIO的中断线,函数调用成功后,将返回对应的IRQ号

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐