一.? 简介
驱动开发时,如何从设备树中获取要使用的GPIO信息?
对于驱动开发人员,设置好设备树以后,就可以使用
gpio
子系统提供的
API
函数来操作指定的
GPIO。
gpio
子系统向驱动开发人员屏蔽了具体的读写寄存器过程。这就是驱动分层与分离
的好处,大家各司其职,做好自己的本职工作即可。
?
二.? 如何从设备树中获取要使用的GPIO信息
gpio
子系统提供的常用的
API
函数有下面
几个:
1.? gpio_request() 函数
gpio_request
函数用于申请一个
GPIO
管脚,在使用一个
GPIO
之前,一定要使用
gpio_request
向Linux内核申请 GPIO管脚,函数原型如下:
int gpio_request(unsigned gpio, const char *label)
函数参数和返回值含义如下:
gpio
:要申请的
gpio
标号,使用
of_get_named_gpio
函数从设备树获取指定
GPIO
属性信
息,此函数会返回这个
GPIO
的标号。
label
:给
gpio
设置个名字。
返回值:
0
,申请成功;其他值,申请失败。
2.? gpio_free() 函数
如果不使用某个
GPIO
了,那么就可以调用
gpio_free
函数进行释放。函数原型如下:
void gpio_free(unsigned gpio)
函数参数和返回值含义如下:
gpio
:要释放的
gpio
标号。
返回值:
无。
3.? gpio_direction_input() 函数
此函数用于设置某个
GPIO
为输入,函数原型如下所示:
int gpio_direction_input(unsigned gpio)
函数参数和返回值含义如下:
gpio
:要设置为输入的
GPIO
标号。
返回值:
0
,设置成功;负值,设置失败。
4.? gpio_direction_output 函数
此函数用于设置某个
GPIO
为输出,并且设置默认输出值,函数原型如下:
int gpio_direction_output(unsigned gpio, int value)
函数参数和返回值含义如下:
gpio
:要设置为输出的
GPIO
标号。
value
:
GPIO
默认输出值。
返回值:
0
,设置成功;负值,设置失败。
5.? gpio_get_value() 函数
此函数用于获取某个
GPIO
的值
(0
或
1)
,此函数是个宏,定义所示:
#define gpio_get_value __gpio_get_value
int __gpio_get_value(unsigned gpio)
函数参数和返回值含义如下:
gpio
:要获取的
GPIO
标号。
返回值:
非负值,得到的
GPIO
值;负值,获取失败。
6.? gpio_set_value() 函数
此函数用于设置某个
GPIO
的值,此函数是个宏,定义如下:
#define gpio_set_value __gpio_set_value
void __gpio_set_value(unsigned gpio, int value)
函数参数和返回值含义如下:
gpio
:要设置的
GPIO
标号。
value
:
要设置的值。
返回值:
无
关于
gpio
子系统常用的
API
函数就讲这些,这些是我们用的最多的。