gpio引脚的默认设置应如何配置设备树 - 特别是在飞思卡尔imx系列上。
到目前为止,我只能使用led界面配置gpios:
gpioinit {
compatible = "gpio-leds";
pinctrl-names = "default";
mykpp {
gpios = <&gpio4 15 1>;
};
};
以上代码在启动过程中将gpio 4 15设置为1,这就是我想要的。但是,我认为有一种更好的方法可以使这个引脚在sysfs中显示为一般的gpio,而不是gpio-led
答案 0 :(得分:1)
如果是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
答案 1 :(得分:0)
我最近需要这样做,但是我发现“针猪”是正确且更通用的解决方案。
这是一个很好的例子: Device Tree dependency between two nodes
文档: https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt
答案 2 :(得分:0)
我刚刚在 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(keeper 使能)。即使 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 选项快。
我想我会选择最后一个选项。