여러 MIPI DSI 디스플레이 패널이 있는 커널/Linux DTS 파일 정의 및 사용

여러 MIPI DSI 디스플레이 패널이 있는 커널/Linux DTS 파일 정의 및 사용

실제로 커널/리눅스 DTS 파일을 정의하고 uboot videoargs와 함께 사용하는 데 도움이 필요합니다.

NXP imx8m YOCTO 프로젝트의 5.4.47 uboot 및 커널/linux 사용.

uboot에서는 5개의 서로 다른 MIPI DSI 디스플레이 패널과 nxp의 HDMI 어댑터를 사용할 수 있었습니다. uboot에서 디스플레이 유형을 구성하기 위해 video_link 환경 변수를 사용합니다. 이것은 나에게 잘 작동하며 쉽게 확장하고 구성할 수 있습니다. 이 작업을 수행하기 위해 내 uboot DTS는 다음과 같습니다.

#include <dt-bindings/usb/pd.h>
#include "imx8mm.dtsi"

/ {
    model = "My own board";
    compatible = "fsl,imx8mm-evk", "fsl,imx8mm";
    
    .
    .
    .
    
    dsi_host: dsi-host {
        compatible = "samsung,sec-mipi-dsi";
        status = "okay";
    };  

    01_panel {
        compatible = "mydisplay,01_display";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                     * 1: non-burst mode with sync event
                     * 2: non-burst mode with sync pulse
                     */
        panel-width-mm = <67>;
        panel-height-mm = <121>;
        status = "okay";

        port {
            01_from_dsim: endpoint {
                remote-endpoint = <&dsim_to_01>;
            };
        };
    };

    02_panel {
        compatible = "mydisplay,02_display";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                     * 1: non-burst mode with sync event
                     * 2: non-burst mode with sync pulse
                     */
        panel-width-mm = <67>;
        panel-height-mm = <121>;
        status = "okay";

        port {
            02_from_dsim: endpoint {
                remote-endpoint = <&dsim_to_02>;
            };
        };
    };

    .
    .
    .
};

.
.
.

&mipi_dsi {
    status = "okay";

    port@1 {
        dsim_to_adv7535: endpoint {
            remote-endpoint = <&adv7535_from_dsim>;
        };
    };

    port@2 {
        dsim_to_01: endpoint {
            remote-endpoint = <&01_from_dsim>;
        };
    };

    port@3 {
        dsim_to_02: endpoint {
            remote-endpoint = <&02_from_dsim>;
        };
    };
    
    .
    .
    .
};

물론, 이제는 커널/리눅스에서도 동일한 디스플레이를 사용하고 싶습니다. 먼저 uboot DTS 파일에서 위와 동일한 DTS 구조를 시도했습니다. 또한 다음 커널/리눅스 DTS 구성을 사용했습니다.

#include "imx8mm.dtsi"

/ {
    model = "My own board";
    compatible = "fsl,imx8mm-flunder", "fsl,imx8mm";
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;

        rpmsg_reserved: rpmsg@0xb8000000 {
            no-map;
            reg = <0 0xb8000000 0 0x400000>;
        };
    };
    
    .
    .
    .
};

.
.
.

&mipi_dsi {
  status = "okay";

    port@1 {
        dsim_to_adv7535: endpoint {
            remote-endpoint = <&adv7535_from_dsim>;
        };
    };

    panel@0 {
        compatible = "mydisplay,01_display";
        pinctrl-names = "default";
        reg = <0>;
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                        * 1: non-burst mode with sync event
                        * 2: non-burst mode with sync pulse
                        */
        panel-width-mm = <62>;
        panel-height-mm = <110>;
        status = "okay";
    };

    panel@1 {
        compatible = "mydisplay,02_display";
        pinctrl-names = "default";
        reg = <0>;
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                        * 1: non-burst mode with sync event
                        * 2: non-burst mode with sync pulse
                        */
        panel-width-mm = <62>;
        panel-height-mm = <110>;
        status = "okay";
    };
};

.
.
.

두 번째 변형은 커널이 부팅될 때 패널 0을 사용하여 끝납니다. 그러나 두 가지 변형 모두 uboot 측에서 어떤 모니터를 사용하고 싶은지 커널/리눅스에 알릴 수 없습니다.

uboot 측의 boot- 또는 videoargs로서 저는 성공하지 못한 채 많은 변형을 테스트했습니다.

여기에서 간단한 예시 목록을 볼 수 있습니다.

video=imx-drm:720x1280@60
primary_display=imx-drm
video=DSI-1:dev=01,720x1280@60
video=mxcfb0:dev=ldb,01_panel,if=RGB24
video=mxcfb0:dev=mipi_dsi,01_panel,if=RGB24
video=DSI-1:dev=01_panel
video=mxcfb0:dev=mipi_dsi,720x1280M@60,if=RGB24
video=mxcfb0:dev=ldb,720x1280M@60,if=RGB24
video=DSI-1:720x1280@60

제 생각에는 첫 번째 구성(uboot에서 사용한 것과 같은)이 올바른 것 같았지만 결국 다음과 같은 질문이 생겼습니다.

  • 여러 MIPI DSI 디스플레이에 대해 커널/리눅스 DTS 파일을 올바르게 구성하는 방법은 무엇입니까?

  • 부팅 시 어떤 모니터를 사용해야 하는지 커널에 어떻게 알릴 수 있나요?

관련 정보