複数のMIPI DSIディスプレイパネルを使用したカーネル/Linux DTSファイルの定義と使用

複数のMIPI DSIディスプレイパネルを使用したカーネル/Linux DTSファイルの定義と使用

実際、カーネル/Linux 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>;
        };
    };
    
    .
    .
    .
};

もちろん、今はカーネル/Linuxでも同じディスプレイを使いたいです。まず、uboot DTSファイルで上記と同じDTS構造を試しました。また、次のカーネル/Linux 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";
    };
};

.
.
.

2番目のバリエーションは、カーネルの起動時にパネル0を使用して終了します。しかし、どちらのバリエーションも、uboot側でどのモニタを使用したいかをカーネル/Linuxに知らせることはできません。

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ディスプレイに対してカーネル/Linux DTSファイルを正しく設定する方法は?

  • 起動時にどのモニタを使用するかをカーネルにどのように通知できますか?

関連情報