Edit online

MIPI 屏调试配置

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

内核配置

驱动源码目录:linux-5.10/drivers/video/artinchip/disp/panel/

配置请参考 Display 使用指南

DTS 参数配置

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

  1. 设置显示模块数据通路关系,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|panelport-->port0port1-->port0port1-->port

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

  2. 设置屏幕参数

    panel_dsi{compatible="artinchip,aic-dsi-panel-simple";status="disabled";dcdc-en-gpios=<&gpio_p0GPIO_ACTIVE_HIGH>;reset-gpios=<&gpio_p1GPIO_ACTIVE_HIGH>;enable-gpios=<&gpio_d3GPIO_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 中设置,也可以在驱动源码中直接设置, 请参考 panel-dsi

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

    ../../images/mipi_timing.png

添加驱动程序

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

新增屏幕驱动的适配流程请参考 屏驱动说明

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

  • 初始化代码

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

    ../../images/mipi_init_code.png

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

    ../../images/mipi_init_sequece.png

  • 屏幕上电时序

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

    ../../images/mipi_init_time.png

注:

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

调试

调试部分查看 常见问题