您当前的位置: 首页 >  驱动开发

耐心的小黑

暂无认证

  • 1浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

linux驱动开发学习笔记十六:gpio相关OF函数和子系统API函数

耐心的小黑 发布时间:2020-05-03 20:06:24 ,浏览量:1

一、gpio相关OF函数

我们在设备节点中会定义了一个名为“gpios”的属性,当然不一定是“gpios”,你可以自定义。gpios 属性描述了 test 这个设备所使用的 GPIO。在驱动程序中需要读取 gpios 属性内容,Linux 内核提供了几个与 GPIO 有关的 OF 函数,常用的几个 OF 函数如下所示:

  • of_gpio_named_count 函数

of_gpio_named_count 函数用于获取设备树某个属性里面定义了几个 GPIO 信息,要注意的是空的 GPIO 信息也会被统计到,比如:

gpios = ;

上述代码的“gpios”属性一共定义了 4 个 GPIO,但是有 2 个是空的,没有实际的含义。 通过 of_gpio_named_count 函数统计出来的 GPIO 数量就是 4 个,此函数原型如下:

int of_gpio_named_count(struct device_node *np, const char *propname)

函数参数和返回值含义如下: np:设备节点。 propname:要统计的 GPIO 属性。 返回值:正值,统计到的 GPIO 数量;负值,失败。

  • of_gpio_count 函数

和 of_gpio_named_count 函数一样,但是不同的地方在于,此函数统计的是“gpios”这个属性的 GPIO 数量,而 of_gpio_named_count 函数可以统计任意属性的 GPIO 信息,函数原型如下所示:

int of_gpio_count(struct device_node *np)

函数参数和返回值含义如下: np:设备节点。 返回值:正值,统计到的 GPIO 数量;负值,失败

  • of_get_named_gpio 函数

此函数获取 GPIO 编号,因为 Linux 内核中关于 GPIO 的 API 函数都要使用 GPIO 编号,此函数会将设备树中类似的属性信息转换为对应的 GPIO 编号,此函数在驱动中使用很频繁!函数原型如下:

int of_get_named_gpio(struct device_node *np,
 					  const char *propname, 
					  int index)

函数参数和返回值含义如下: np:设备节点。 propname:包含要获取 GPIO 信息的属性名。 index:GPIO 索引,因为一个属性里面可能包含多个 GPIO,此参数指定要获取哪个 GPIO的编号,如果只有一个 GPIO 信息的话此参数为 0。 返回值:正值,获取到的 GPIO 编号;负值,失败。

二、gpio子系统API函数

对于驱动开发人员,设置好设备树以后就可以使用 gpio 子系统提供的 API 函数来操作指定的 GPIO,gpio 子系统向驱动开发人员屏蔽了具体的读写寄存器过程。这就是驱动分层与分离的好处,大家各司其职,做好自己的本职工作即可。gpio 子系统提供的常用的 API 函数有下面几个:

  • gpio_request 函数

gpio_request 函数用于申请一个 GPIO 管脚,在使用一个 GPIO 之前一定要使用 gpio_request进行申请,函数原型如下:

int gpio_request(unsigned gpio, const char *label)

函数参数和返回值含义如下: gpio:要申请的 gpio 标号,使用 of_get_named_gpio 函数从设备树获取指定 GPIO 属性信息,此函数会返回这个 GPIO 的标号。 label:给 gpio 设置个名字。 返回值:0,申请成功;其他值,申请失败

  • gpio_free 函数

如果不使用某个 GPIO 了,那么就可以调用 gpio_free 函数进行释放。函数原型如下:

void gpio_free(unsigned gpio)

函数参数和返回值含义如下: gpio:要释放的 gpio 标号。 返回值:无

  • gpio_direction_input 函数

此函数用于设置某个 GPIO 为输入,函数原型如下所示:

int gpio_direction_input(unsigned gpio)

函数参数和返回值含义如下: gpio:要设置为输入的 GPIO 标号。 返回值:0,设置成功;负值,设置失败。

  • gpio_direction_output 函数

此函数用于设置某个 GPIO 为输出,并且设置默认输出值,函数原型如下:

int gpio_direction_output(unsigned gpio, int value)

函数参数和返回值含义如下: gpio:要设置为输出的 GPIO 标号。 value:GPIO 默认输出值。 返回值:0,设置成功;负值,设置失败。

  • gpio_get_value 函数

此函数用于获取某个 GPIO 的值(0 或 1),此函数是个宏,定义所示:

#define gpio_get_value __gpio_get_value
int __gpio_get_value(unsigned gpio)

函数参数和返回值含义如下: gpio:要获取的 GPIO 标号。 返回值:非负值,得到的 GPIO 值;负值,获取失败

  • gpio_set_value 函数

此函数用于设置某个 GPIO 的值,此函数是个宏,定义如下

#define gpio_set_value __gpio_set_value
void __gpio_set_value(unsigned gpio, int value)

函数参数和返回值含义如下: gpio:要设置的 GPIO 标号。 value:要设置的值。 返回值:无

关注
打赏
1640088279
查看更多评论
立即登录/注册

微信扫码登录

0.0434s