Linux version: 4.14
Code link: Linux source code (v4.14) - Bootlin
1 of_xlate_and_get_gpiod_flags 函数
static struct gpio_desc *of_xlate_and_get_gpiod_flags(struct gpio_chip *chip,
struct of_phandle_args *gpiospec,
enum of_gpio_flags *flags)
{
int ret;
if (chip->of_gpio_n_cells != gpiospec->args_count)
return ERR_PTR(-EINVAL);
ret = chip->of_xlate(chip, gpiospec, flags);
if (ret < 0)
return ERR_PTR(ret);
return gpiochip_get_desc(chip, ret);
}
其中 of_xlate 函数可以参考:of_find_gpiochip_by_xlate 函数_Vane Zhang的博客-CSDN博客
该函数最终返回 gpiospec 对应的引脚的序号,并保存在 ret 中。
2 gpiochip_get_desc 函数
struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
u16 hwnum)
{
struct gpio_device *gdev = chip->gpiodev;
if (hwnum >= gdev->ngpio)
return ERR_PTR(-EINVAL);
return &gdev->descs[hwnum];
}
该函数通过 gpio_chip 结构体返回其所属的 gpio_device 结构体,然后返回 gpio_device 结构体中的 descs 数组元素,其数组下标由 传入发 hwnum 变量决定。
3 总结
static struct gpio_desc *of_xlate_and_get_gpiod_flags(struct gpio_chip *chip,
struct of_phandle_args *gpiospec,
enum of_gpio_flags *flags)
of_xlate_and_get_gpiod_flags 函数的功能是根据传入的 chip 和 gpiospec 变量返回包含对应引脚的 gpio_desc 结构体变量。该结构体用来描述某个 gpio 引脚的信息。