Я задавал этот вопрос в Unix Stackexchange, но, похоже, это было неправильное место для такого рода проблем.Объявление rem:
Я создаю драйвер ядра для дисплея, управляемого SPI, который предназначен для работы с Raspberry PI.Помимо трех линий SPI, дисплей имеет 3 дополнительные линии управления: BUSY , RST и DC .Чтобы иметь возможность управления этими строками, мой DTS должен включать дополнительный фрагмент для GPIO.
fragment@0 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
spidev@0 {
status = "disabled";
};
epd0: epd@0 {
compatible = "waveshare,epd";
reg = <0>;
pinctrl-names = "default";
pinctrl-0 = <&epd_pins>;
spi-max-frequency = <1000000>;
width = <128>;
height = <296>;
dc-gpios = <&gpio 16 0>;
reset-gpios = <&gpio 20 0>;
busy-gpios = <&gpio 21 0>;
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
epd_pins: epd_pins {
brcm,pins = <16 20 21>; /* DC RST BUSY */
brcm,function = <1 1 0>; /* out out in */
};
};
};
То, что DTS работает отлично, и я не ожидал никаких проблем.Но есть одна вещь, в которой я не уверен:
pinctrl-names = "default";
pinctrl-0 = <&epd_pins>;
Я видел подобные свойства в других DT с фрагментами gpio
, но не всегда;иногда они есть, иногда нет.Если я закомментирую эти две строки, то, похоже, ничего не изменится, и мой драйвер все еще работает как надо.
У меня есть два вопроса:
- Какова цель этих
pinctrl
строк?Мне известна подсистема контроллера выводов, но я строго спрашиваю в контексте моего DT. - Зачем мне объявлять оверлей
gpio
?В любом случае я устанавливаю функцию IN или OUT непосредственно из кода моего драйвера, и мои номера gpio определяются в оверлее spi
(dc-gpios
, reset-gpios
, busy-gpios
).