如何配置 GPIO 引脚的默认设置设备树 - 特别是在 Freescale imx 系列上。
到目前为止,我只能使用 led 接口配置 gpios:
gpioinit {
compatible = "gpio-leds";
pinctrl-names = "default";
mykpp {
gpios = <&gpio4 15 1>;
};
};
上面的代码在启动期间将 gpio 4 15 设置为 1,这就是我想要的。但是,我认为有一种更好的方法可以使该引脚在 sysfs 中显示为通用 gpio 而不是 gpio-led
如果是 GPIO,您的 dts 文件应显示类似以下内容:
gpio0: gpio@c00 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <0>;
compatible = "fsl,mpc8377-gpio";
reg = <0xc00 0x100>;
interrupts = <74 0x8>;
interrupt-parent = <&ipic>;
gpio-controller;
gpio-pin@11 {
compatible = "fsl,mpc8377-gpio-input";
active_status = "low";
gpios = <&gpio0>;
pin = <11>;
};
}
这个例子取自MPC8377的dts文件。您可能想看看 /drivers/gpio/gpio-fsl.c
我最近需要这样做,但我发现“pin hog”是正确且更通用的解决方案。
这是一个很好的例子: 两个节点之间的设备树依赖关系
文档: https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt
我刚刚在 i.MX6 和 Buildroot/Busybox、内核 v4.19.169 上测试了以下 DT。这是使其工作的 DT 片段,但是您不能再在用户空间中使用该引脚。顺便说一下,请注意
gpios =
属性的棘手语法。那个让我发疯了!
&gpio7 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_en>;
sysstat@11 {
gpio-hog;
gpios = <11 GPIO_ACTIVE_HIGH>;
output-low;
line-name = "SYS_STAT";
};
};
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpios>;
pinctrl_gpio_en: gpiostatgrp {
fsl,pins = <
MX6QDL_PAD_GPIO_16__GPIO7_IO11 0x130b0
>;
};
};
0x130b0 表示:迟滞、100K 下拉、PUE=1(上拉使能)、PKE=1(保持器使能)。即使缺少
sysstat@11
,这也足以将引脚驱动为低电平。但该引脚仍配置为输入。
检查引脚配置(注意 [used] 字符串):
# gpioinfo 6 | grep "line 11"
line 11: unnamed "SYS_STAT" output active-high [used]
另一种方法是删除
sysstat@11
节点以仅进行引脚复用和引脚配置。但我不确定它是否非常聪明。
还有另一种选择,因为引脚默认配置为 GPIO,所以根本不更改 DT,而是使用 /etc/init.d 脚本,并使用命令
gpioset 6 11=0
。它也有效,但不如 DT 选项快。
我想我会选择最后一个选择。