of_gpiochip_add
时间: 2023-12-21 11:07:04 浏览: 32
`of_gpiochip_add()`函数是用于将一个GPIO控制器设备注册到Linux内核GPIO子系统中的函数。它会解析设备树中的GPIO节点信息,并根据这些信息来创建并注册一个GPIO控制器设备。
该函数在`drivers/gpio/gpiolib-of.c`文件中实现,其定义如下:
```c
int of_gpiochip_add(struct gpio_chip *chip)
```
参数`chip`是一个指向GPIO控制器设备的指针,它包含了一些控制器设备的信息,例如GPIO数量、GPIO编号等等。函数返回值为0表示成功,否则表示失败。
示例代码:
```c
struct gpio_chip my_gpio_chip = {
.label = "my-gpio-controller",
.direction_input = my_gpio_direction_input,
.direction_output = my_gpio_direction_output,
.get = my_gpio_get,
.set = my_gpio_set,
.base = -1, // 根据设备树解析出来的值填充
.ngpio = -1, // 根据设备树解析出来的值填充
};
int my_gpio_probe(struct platform_device *pdev)
{
int ret = 0;
struct device_node *np = pdev->dev.of_node;
// 从设备树中获取GPIO节点信息,填充my_gpio_chip结构体
my_gpio_chip.base = of_get_gpio_chip_base(np);
my_gpio_chip.ngpio = of_gpio_count(np);
// 注册GPIO控制器设备到内核GPIO子系统
ret = of_gpiochip_add(&my_gpio_chip);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to add gpio_chip\n");
goto err;
}
return 0;
err:
return ret;
}
```