设备树配置GPIO
时间: 2023-07-25 13:04:42 浏览: 258
在设备树中,可以使用GPIO节点来配置GPIO。以下是一个GPIO节点的示例:
```
gpio@12345678 {
compatible = "gpio-example";
reg = <0x12345678 0x10>;
gpio-controller;
#gpio-cells = <2>;
interrupt-parent = <&gpio_intc>;
interrupts = <1 2>;
gpio-line-names = "GPIO1", "GPIO2", "GPIO3";
};
```
其中:
- `compatible` 属性指定了GPIO控制器的驱动程序名字。
- `reg` 属性指定了GPIO控制器的寄存器地址和大小。
- `gpio-controller` 属性指示这是一个GPIO控制器节点。
- `#gpio-cells` 属性指定了GPIO描述符的单元数。在此示例中,每个GPIO描述符都由两个单元组成,第一个单元指定了GPIO编号,第二个单元指定了GPIO方向(输入或输出)和电平(高或低)。
- `interrupt-parent` 属性指定了GPIO中断控制器节点的地址。
- `interrupts` 属性指定了GPIO中断线的编号。在此示例中,GPIO1的中断线编号为1,GPIO2的中断线编号为2。
- `gpio-line-names` 属性指定了每个GPIO线的名称。
在驱动程序中,可以使用`gpio_request()`函数来请求GPIO,并使用`gpio_direction_input()`和`gpio_direction_output()`函数来设置GPIO方向。例如,以下是在驱动程序中请求GPIO的示例:
```
#include <linux/gpio.h>
static int my_probe(struct platform_device *pdev)
{
int ret;
struct device_node *np = pdev->dev.of_node;
struct gpio_desc *gpiod;
gpiod = of_get_gpio(np, 0);
if (!gpiod) {
dev_err(&pdev->dev, "Failed to get GPIO\n");
return -EINVAL;
}
ret = gpio_request(gpiod->desc, "my-gpio");
if (ret) {
dev_err(&pdev->dev, "Failed to request GPIO\n");
return ret;
}
gpio_direction_output(gpiod->desc, 1);
return 0;
}
```
阅读全文