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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值