#embedded-linux #gpio #bootloader #device-tree
Вопрос:
Я хочу использовать gpio для сброса внешнего устройства. Он будет сброшен при низком уровне GPIO. Я хочу установить значение по умолчанию, прежде чем устанавливать его с помощью своего пользовательского кода.
В моем dtsi у меня есть текущий контроллер GPIO:
gpio1: gpio@30200000 {
compatible = "fsl,imx8mm-gpio", "fsl,imx35-gpio";
reg = <0x30200000 0x10000>;
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
clocks = <amp;clk IMX8MM_CLK_GPIO1_ROOT>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
gpio-ranges = <amp;iomuxc 0 10 30>;
};
amp;iomuxc {
pinctrl_gpio5: gpio5grp {
fsl,pins = <
/* SODIMM 216 Reset MCU sync */
MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0 0x034
>;
};
};
Чтобы установить значение по умолчанию, я сначала определил свинью в наложении дерева устройств:
amp;gpio1 {
syncmcu_reset {
gpio-hog;
gpios = <0 GPIO_ACTIVE_LOW>;
line-name = "MCU_RESET#";
output-low;
pinctrl-names = "default";
pinctrl-0 = <amp;pinctrl_gpio5>;
};
};
Значение GPIO установлено правильно, но я больше не могу изменять значение GPIO. Как правильно установить состояние GPIO по умолчанию без их блокировки?
Комментарии:
1. Я предполагаю, что вы используете U-Boot, затем включите там драйвер GPIO и установите значения PIN-кода на все, что вам нужно. В противном случае вам понадобится код типа файла платы в вашем ядре. Или вы можете сделать это из пользовательского пространства, хотя может быть уже слишком поздно.