дерево устройств gpios на ядре Linux для AGX jetson-Xavier
Я использую 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";
};
Я очень запутался, почему на обоих выходах установлено ВЫСОКОЕ значение? предполагается, что это будет один НИЗКИЙ и один ВЫСОКИЙ? PS: Я не знаком с деревом устройств, помогите, пожалуйста, abit.
1 ответ
В GPIO_ACTIVE_LOW
Установка означает, что значения данных будут логически инвертированы в программном обеспечении до того, как они будут записаны на оборудование, и что необработанные значения данных от оборудования будут логически инвертированы, прежде чем они будут возвращены вызывающей стороне. (Существуют также "сырые" варианты функций доступа GPIO, которые обходят эту логическую инверсию.)
В output-high;
Свойство DTS означает, что линия GPIO будет настроена как выход с высоким уровнем сигнала.
Для двух GPIO оба будут настроены как выходы с высоким уровнем сигнала, но один с GPIO_ACTIVE_LOW
параметр будет иметь логическое значение 0 (если вы не выполняете "сырое" чтение), а параметр с GPIO_ACTIVE_HIGH
параметр будет иметь логическое значение 1. Если вы записываете (но не "сырую" запись) значение 1 в GPIO с GPIO_ACTIVE_LOW
при установке его выходной сигнал перейдет на низкий уровень сигнала.