我是靠谱客的博主 雪白大白,最近开发中收集的这篇文章主要介绍[RK3399][Android7.1] 获取gpio函数devm_gpiod_get_optional(),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

latform: RK3399
OS: Android 7.1
Board: Firefly-RK3399

调用流程
在看显示模块的代码时看到一个函数devm_gpiod_get_optional(), 之前没接触过,它的调用如下:
devm_gpiod_get_optional ->
 devm_gpiod_get_index_optional -> //index为0
  devm_gpiod_get_index ->
   gpiod_get_index

可以看到devm_gpiod_get_optional只是对gpiod_get_index的包装而已,并且index为0。index参数后面会提。


函数参数

struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
                            const char *con_id,
                            unsigned int idx,
                            enum gpiod_flags flags);

重点关注第二个和第三个参数。

gpiod_get_index()到底用来干什么?
答:gpiod_get_index()本质上和gpio_request()是一个功能,是申请gpio的,只是它是从device tree去查找,
因此看到第二个参数”con_id”是字符串类型,也就是gpio的名字。

例如在显示驱动看到的去查找名字为”enable”的gpio
panel-simple.c:

 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", 0);

在使用mipi屏幕的主dts就有enable pin的定义
rk3399-firefly-mipi.dts:

 enable-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;

那么index又有什么用呢?
内核文档有个例子,比如gpio如下定义:

        led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>, /* red */
                <&gpio 16 GPIO_ACTIVE_HIGH>, /* green */
                <&gpio 17 GPIO_ACTIVE_HIGH>; /* blue */

如果index是0,那么对应的就是gpio 15;  如果index是1,那么对应就是gpio 16,以此类推。


参考
https://www.kernel.org/doc/Documentation/gpio/board.txt
gpio子系统和pinctrl子系统(上)

最后

以上就是雪白大白为你收集整理的[RK3399][Android7.1] 获取gpio函数devm_gpiod_get_optional()的全部内容,希望文章能够帮你解决[RK3399][Android7.1] 获取gpio函数devm_gpiod_get_optional()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部