我正在使用Xavier AGX,并且在启动时在dmesg上找到以下输出:
[ 0.963531] mc-err: mcerr ops are set to t19x
[ 0.971308] iommu: Adding device 2600000.dma to group 57
[ 0.978632] GPIO line 490 (pcie-reg-enable) hogged as output/high
[ 0.978710] GPIO line 289 (pcie-reg-enable) hogged as output/high
在设备树(tegra194-p2888-0000-a00.dtsi)中如何这样写:
gpio@2200000 {
pcie-reg-enable {
gpio-hog;
gpios = <TEGRA194_MAIN_GPIO(Z, 2) GPIO_ACTIVE_HIGH
TEGRA194_MAIN_GPIO(A, 1) GPIO_ACTIVE_LOW>;
label = "pcie-3v3-reg", "pcie-12v-reg";
output-high;
status = "okay";
};
Dtc解码(/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb)给出:
pcie-reg-enable {
gpio-hog;
gpios = <0xca 0x0 0x1 0x1>;
label = "pcie-3v3-reg", "pcie-12v-reg";
output-high;
status = "okay";
};
我非常困惑为什么两者的输出都设置为HIGH?应该是低一高吗? PS:我对设备树不熟悉,请帮助我。
答案 0 :(得分:0)
GPIO_ACTIVE_LOW
设置意味着数据值在写入硬件之前将在软件中进行逻辑反转,并且来自硬件的原始数据值在将其返回给调用方之前将进行逻辑反转。 (也有GPIO访问功能的“原始”变体绕过此逻辑反转。)
output-high;
DTS属性意味着GPIO线将被配置为具有高信号电平的输出。
对于两个GPIO,两个都将被配置为具有高信号电平的输出,但是具有GPIO_ACTIVE_LOW
设置的一个将具有逻辑值0(除非您进行“原始”读取),并且具有GPIO_ACTIVE_HIGH
设置的一个将具有逻辑值1。如果使用GPIO_ACTIVE_LOW
设置(但不是“原始”写入)值1到GPIO,则其输出将变为低电平。信号电平。