9.2.3. MIPI屏调试配置

9.2.3.1. 概述

相比RGB和LVDS屏的调试,MIPI屏的调试相对稍微繁琐,不仅需要在DTS中设置参数,还需要在kernel中添加屏幕所对应的驱动。 此章节详细的描述一款MIPI显示屏的调试过程和配置方法。

9.2.3.2. 内核配置

驱动源码目录:linux-5.10/drivers/video/fbdev/zx/panel/

配置请参考 显示部分章节说明

9.2.3.3. DTS参数配置

这些参数主要在文件board.dts中,功能参数的设置必须和硬件原理图相匹配

  • 首先设置显示模块数据通路关系,RGB屏幕数据通路如下:

    &fb0 {
            port {
                    fb0_out: endpoint {
                            remote-endpoint = <&de0_in>;
                    };
            };
    };
    
    &de0 {
            status = "okay";
            port@0 {
                    reg = <0>;
                    de0_in: endpoint {
                            remote-endpoint = <&fb0_out>;
                    };
            };
    
            port@1 {
                    reg = <1>;
                    de0_out: endpoint {
                            remote-endpoint = <&dsi0_in>;
                    };
            };
    };
    
    &dsi0 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&dsi_pins>;
    
        port@0 {
            reg = <0>;
            dsi0_in: endpoint {
                remote-endpoint = <&de0_out>;
            };
        };
    
        port@1 {
            reg = <1>;
            dsi0_out: endpoint {
                remote-endpoint = <&panel_dsi_in>;
            };
        };
    };
    

    在上述例子中,board.dts通过port和status结点,定义了一条数据通道。

    fb       |      de    |     |     dsi    |     panel
    port  --> port0   port1 -->  port0   port1 -->  port
    

    如果board.dts中没有正确定义一条数据通道,显示驱动可能无法完成初始化。

  • 设置屏幕参数

        panel_dsi {
        compatible = "zx,aic-dsi-panel-simple";
        status = "disabled";
    
        dcdc-en-gpios  = <&gpio_p 0 GPIO_ACTIVE_HIGH>;
        reset-gpios  = <&gpio_p 1 GPIO_ACTIVE_HIGH>;
        enable-gpios = <&gpio_d 3 GPIO_ACTIVE_HIGH>;
    
        port {
            panel_dsi_in: endpoint {
                remote-endpoint = <&dsi0_out>;
            };
        };
    
        display-timings {
                        native-mode = <&timing1>;
                        timing1: 800x480 {
                                clock-frequency = <60000000>;
                                hactive = <800>;
                                vactive = <480>;
                                hback-porch = <35>;
                                hfront-porch = <20>;
                                hsync-len = <4>;
                                vback-porch = <20>;
                                vfront-porch = <10>;
                                vsync-len = <4>;
                                de-active = <1>;
                                pixelclk-active = <1>;
                        };
                };
    };
    

    每一款屏幕所需要的控制IO的数量及功能会有所差别,其中参数可以在DTS中设置,也可以在驱动源码中直接设置, 请参考 显示部分章节DTS关于pannel_dsi的配置说明

    其中参数 display-timings 需要从屏幕使用文档中或供应商处获取,例如使用说明文件中会有如下信息:

../../../_images/mipi_timing.png

9.2.3.4. 添加驱动程序

新增加一款屏幕的驱动可以从屏幕供应商处获取参考代码或使用说明文件,然后参考平台现有相似接口驱动进行适配。

新增屏幕驱动的适配流程请参考 显示部分章节关于屏驱动的说明

添加驱动时,有两个关键信息需要从供应商所提供的文档或资料中获取

  • 初始化代码

例如,xm91080 屏幕从供应商处获取到初始化代码如下:

../../../_images/mipi_init_code.png

添加到驱动程序后体现在 init_sequence 函数如下:

../../../_images/mipi_init_sequece.png
  • 屏幕上电时序

需要根据屏幕的上电特性要求对控制IO进行拉低或拉高,如下:

../../../_images/mipi_init_time.png

注意

屏幕的调试还要根据具体屏幕的特性,每个屏都会有所不同,大致流程基本相似

9.2.3.5. 调试

调试部分请查看 显示部分章节关于常见问题的调试说明