获取设备树gpio号的函数
时间: 2023-08-10 09:09:07 浏览: 159
在Linux内核中,可以使用 `devm_gpio_request()` 函数来请求一个GPIO资源,然后使用 `gpio_to_desc()` 函数将GPIO号转换为GPIO描述符,最后使用 `gpio_desc_to_chip()` 函数获取描述符对应的GPIO控制器,从而获取设备树中的GPIO号。
具体的代码实现如下:
```c
#include <linux/gpio/driver.h>
static int my_probe(struct platform_device *pdev)
{
int ret;
struct gpio_desc *desc;
struct gpio_chip *gpio_chip;
/* 请求GPIO资源 */
ret = devm_gpio_request(&pdev->dev, MY_GPIO, "my-gpio");
if (ret < 0)
return ret;
/* 将GPIO号转换为GPIO描述符 */
desc = gpio_to_desc(MY_GPIO);
/* 获取GPIO描述符对应的GPIO控制器 */
gpio_chip = gpio_desc_to_chip(desc);
/* 获取设备树中的GPIO号 */
int dt_num = of_get_gpio_count(pdev->dev.of_node);
if (dt_num > 0) {
int dt_gpio = of_get_gpio(pdev->dev.of_node, 0);
if (dt_gpio >= 0) {
int gpio_num = gpio_chip->base + dt_gpio;
printk(KERN_INFO "Device tree GPIO number: %d\n", gpio_num);
}
}
return 0;
}
static const struct of_device_id my_of_match[] = {
{ .compatible = "my-device" },
{ },
};
MODULE_DEVICE_TABLE(of, my_of_match);
static struct platform_driver my_driver = {
.probe = my_probe,
.driver = {
.name = "my-device",
.of_match_table = my_of_match,
},
};
module_platform_driver(my_driver);
```
其中,`MY_GPIO` 是在设备树中定义的GPIO号,可以在设备树中使用 `gpio` 属性进行定义和配置。当设备树中定义了GPIO号时,`of_get_gpio_count()` 函数返回的值大于0,可以使用 `of_get_gpio()` 函数获取GPIO号。最后需要计算出实际的GPIO号,即 `gpio_chip->base + dt_gpio`。
阅读全文