一、旧的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