Синтаксис Device Tree

Имеется следующий dtsi файл

#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/sun8i-v3s-ccu.h>
#include <dt-bindings/clock/sun8i-de2.h>
#include <dt-bindings/reset/sun8i-v3s-ccu.h>

pio: pinctrl@1c20800 {
            compatible = "allwinner,sun8i-v3s-pinctrl";
            reg = <0x01c20800 0x400>;
            interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&rtc 0>;
            clock-names = "apb", "hosc", "losc";
            gpio-controller;
            #gpio-cells = <3>;
            interrupt-controller;
            #interrupt-cells = <3>;

            i2c1_pe_pins: i2c1-pe-pins {
                pins = "PE21", "PE22";
                function = "i2c1";
            };

            csi1_8bit_pins: csi1-8bit-pins {
                pins = "PE0", "PE2", "PE3", "PE8", "PE9",
                       "PE10", "PE11", "PE12", "PE13", "PE14",
                       "PE15";
                function = "csi";
            };

            csi1_mclk_pin: csi1-mclk-pin {
                pins = "PE1";
                function = "csi";
            };

            uart0_pb_pins: uart0-pb-pins {
                pins = "PB8", "PB9";
                function = "uart0";
            };

В каком месте происходит связка что PE0 это PCLK для подключенной камеры, а PB8 превращается в TX for UART? Что значит свойство function ="csi"? Почему csi1_mclk_pin выделен отдельно?

Этот файл включен в конечный dts файл и там уже такая магия


&csi1 {
    pinctrl-names = "default";
    pinctrl-0 = <&csi1_8bit_pins>;
    status = "okay";

    port {
        #address-cells = <1>;
        #size-cells = <0>;

        csi1_ep: endpoint {
            remote-endpoint = <&gc0403_ep>;
            bus-width = <8>;
            hsync-active = <1>;
            vsync-active = <0>;
            data-active = <1>;
            pclk-sample = <1>;
        };
    };
};

&i2c1 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c1_pe_pins>;
    status = "okay";
        
    gc0403: camera@78 {
        compatible = "galaxycore,gc0403";
        reg = <0x78>;
        pinctrl-names = "default";
        pinctrl-0 = <&csi1_mclk_pin>;
        clocks = <&ccu CLK_CSI1_MCLK>;
        clock-names = "xvclk";
        
        port {mm
            gc0403_ep: endpoint {
                remote-endpoint = <&csi1_ep>;
                bus-width = <8>;
                hsync-active = <1>;
                vsync-active = <0>;
                data-active = <1>;
                pclk-sample = <1>;
            };
        };
    };

Почему csi1_mclk_pin выделен в отдельное свойство да еще и с таким странным именем pinctrl-0?

Правильно ли я понимаю что в ноде i2c1 свойство reg это адрес на i2c шине?


Ответы (0 шт):