Linux驱动开发---gpio和gpiod

一、旧的gpio_api

在GTX5驱动中兼容了两种获取GPIO、IRQ资源的方法,在老的内核版本中是通过of_get_named_gpio(node,"goodix,reset-gpio", 0)方法去获取GPIO资源的资源号(一个int型的数值),然后再使用如下方法(代码段1)对GPIO资源进行操作。

代码段1

r =devm_gpio_request_one(&core_data->pdev->dev,

                            ts_bdata->reset_gpio,

                            GPIOF_OUT_INIT_LOW,

                            "ts_reset_gpio"); 

二、新的gpiod_api

但在内核3.13之后,引入了新的gpiod_api,该api使用“devm_gpiod_get”去获取GPIO资源,获取到的是一个类型为“struct gpio_desc”的结构体指针,在操作GPIO时使用的是“gpiod_direction_output”方法。这两个方法的调用示例如代码段2和代码段3中所示:

代码段2

devm_gpiod_get(&core_data->pdev->dev,

                            "goodix,reset-gpio",GPIOD_OUT_LOW) 的goodix_ts_core.c中

 

代码段3

gpiod_direction_output(dev->board_data->reset_gpiod, 0);

“devm_gpiod_get”方法在获取GPIO资源时,仍然是通过of_node去获取的,其具体实现,如代码段4中所示。

代码段4

Kernel\drivers\gpio\gpiolib.c

/**

 * gpiod_get_index - obtain aGPIO from a multi-index GPIO function

 * @dev: GPIO consumer, can be NULL for system-global GPIOs

 * @con_id:    function within the GPIO consumer

 * @idx:  index of the GPIO to obtain in the consumer

 * @flags:        optional GPIO initialization flags

 *

 * This variant of gpiod_get()allows to

Linux中,gpiod是一个用于操作GPIO(通用输入输出)的API。它提供了一种简单而统一的方式来获取和控制GPIO资源。在不同的内核版本中,有不同的方法来获取和操作GPIO资源。 在老的内核版本中,可以使用of_get_named_gpio方法来获取GPIO资源的资源号,然后使用相应的方法对GPIO资源进行操作。例如,可以使用代码段1中的方法来操作GPIO资源。\[1\] 然而,在新的内核版本中,引入了新的gpiod_api。使用devm_gpiod_get方法可以获取一个类型为"struct gpio_desc"的结构体指针,然后可以使用gpiod_direction_output等方法来操作GPIO资源。例如,可以使用代码段2和代码段3中的方法来操作GPIO资源。\[3\] 需要注意的是,在使用devm_gpiod_get方法时,要对匹配字符串进行相应的修改,因为该方法会自动为我们加上"-gpio"或"-gpios"后缀。\[2\] 总之,gpiod是一个用于操作GPIO的API,在不同的内核版本中,可以使用不同的方法来获取和操作GPIO资源。 #### 引用[.reference_title] - *1* *2* *3* [Linux驱动开发---gpiogpiod](https://blog.csdn.net/happy987818/article/details/76854306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值