zoukankan      html  css  js  c++  java
  • RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10

    mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi

    屏参数配置文件包括四个部分:mipi host配置、屏电源控制配置、屏初始化序列和屏参。

    mipi屏参数文件解析:

    mipi host配置、屏电源控制配置、屏初始化序列是在 kernel/drivers/video/rockchip/screen/lcd_mipi.c 中解析。

    屏参是在 kernel/drivers/video/of_display_timing.c 中解析。

    1、mipi host 配置

    // mipi host 配置结构
    disp_mipi_init: mipi_dsi_init{
        compatible = "rockchip,mipi_dsi_init";
        rockchip,screen_init    = <1>;
        rockchip,dsi_lane    = <4>;
        rockchip,dsi_hs_clk    = <1000>;
        rockchip,mipi_dsi_num    = <1>;
    };

    screen_init:表示屏是否需要初始化,如果需要则置为1。

    dsi_lane:mipi 数据传输需要几条数据 lane,这个一般根据原理图和 mipi 屏的规格书来配置。这个指的是每个 mipi 的数据 lane 数。例如是双 mipi,每个 mipi 为 4 lane,那么此处仍然设置为4。

    dsi_hs_clk:屏 ddr clk,表示一条数据 lane 的传输速率,单位为 Mbits/s。

    有个大概的计算公式:100 + H_Total * V_total * fps * 3 * 8 / lanes

    100 为实际的结果要比理论值大 100M 左右。

    H_total,V_total 包括active,bp,fp 和 sync_len 的和。

    fps 为帧率,刚调试一款屏时,fps 为 50 多帧就好,然后慢慢抬高。

    3 为一个像素点为 rgb 3 个字节,8 为 8 bits。

    lanes 为(dsi_lane * mipi_dsi_num)。

    上面计算得到的值只是大概值并非精确的值,但是对于一般的屏都适用,对于部分屏需要微调该值。

    mipi_dsi_num:单 mipi 还是双 mipi,也是根据原理图和屏幕规格书来配置的。如果是双 mipi 则置为 2,。

    2、屏电源控制配置

    // 屏电源控制配置
    disp_mipi_power_ctr: mipi_power_ctr {
        compatible = "rockchip,mipi_power_ctr";
    
        mipi_lcd_en:mipi_lcd_en {
            compatible = "rockchip,lcd_en";
            rockchip,gpios = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
            rockchip,delay = <20>;
        };
    
        mipi_lcd_cs:mipi_lcd_cs {
            compatible = "rockchip,lcd_cs";
            rockchip,gpios = <&gpio7 GPIO_A4 GPIO_ACTIVE_HIGH>;
            rockchip,delay = <20>;
        };
    
        mipi_lcd_rst:mipi_lcd_rst{
            compatible = "rockchip,lcd_rst";
            rockchip,gpios = <&gpio3 GPIO_D6 GPIO_ACTIVE_HIGH>;
            rockchip,delay = <20>;
        };
    };

    电源配置的 gpio 需要根据原理图来配置,也可能存在不需要三路电源控制的情况。

    例如:rockchip,gpios = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;   LCD_EN 的引脚为 GPIO7_A4 引脚,高电平有效。

    delay 部分是操作完后的延迟时间,这个关系到 mipi 的上电时序。在需要的时候要对延时时间进行调整。

    kernel 中对应的操作函数在 kernel/driver/video/rockchip/screen/lcd_mipi.c 文件的 rk_mipi_screen_pwr_enable() 和 rk_mipi_screen_pwr_disable()。

    u-boot 中对应的操作函数在 u-boot/driver/video/screen/lcd_mipi.c 文件的 rk_mipi_screen_pwr_enable() 和 rk_mipi_screen_pwr_disable()。

    // dtsi文件中的lcdc配置如下
    &lcdc0 {
        status = "okay";
        rockchip,mirror = <NO_MIRROR>;
        rockchip,cabc_mode = <0>;
        power_ctr: power_ctr {
            rockchip,debug = <0>;
    
            lcd_en:lcd_en {
                rockchip,power_type = <GPIO>;
                gpios = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
                rockchip,delay = <10>;
            };
            
            lcd_cs:lcd_cs {
                rockchip,power_type = <GPIO>;
                gpios = <&gpio7 GPIO_A4 GPIO_ACTIVE_HIGH>;
                rockchip,delay = <10>;
            };
    
            lcd_rst:lcd_rst {
                rockchip,power_type = <GPIO>;
                gpios = <&gpio3 GPIO_D6 GPIO_ACTIVE_HIGH>;
                rockchip,delay = <5>;
            };
        };
    };

    kernel 中对应的操作函数在 kernel/driver/video/rockchip/rk_fb.c 文件的 rk_disp_pwr_enable() 和 rk_disp_pwr_disable()。

    u-boot 中对应的操作函数在 u-boot/driver/video/rockchip_fb.c 文件的 rk_fb_pwr_enable() 和 rk_fb_pwr_disable()。

    3、屏初始化序列

    有的屏需要初始化,有的不需要,如果规格书上注明需要初始化,则需要屏厂提供初始化序列。

    屏初始化命令在 kernel/driver/video/rockchip/screen/lcd_mipi.c 文件的 rk_mipi_screen_cmd_init() 中完成。

    // 屏初始化序列结构如下
    disp_mipi_init_cmds: screen-on-cmds {
        rockchip,cmd_debug = <0>;
        compatible = "rockchip,screen-on-cmds";    
    
        rockchip,on-cmds1 {
            compatible = "rockchip,on-cmds";
            rockchip,cmd_type = <LPDT>;
            rockchip,dsi_id = <0>;        
            rockchip,cmd = <0x15 0x25 0x55>;
            rockchip,cmd_delay = <2>;
        };
                      
        rockchip,on-cmds2 {
            compatible = "rockchip,on-cmds";
            rockchip,cmd_type = <HSDT>;
            rockchip,dsi_id = <0>;
            rockchip,cmd = <0x15 0x15 0x20>;
            rockchip,cmd_delay = <2>;
        };
        ... ...      ... ...
    };

    cmd_debug:是否打开 cmd 调好,1 表示打开调试,0 表示关闭调试。

    rockchip,on-cmds1结构:这是第一条初始化命令结构,一般都需要多条初始化命令,就需要多个命令结构,实际上编号可以不按顺序,只要不重复就行。

    cmd_type:命令是在low power(LPDT)还是high speed(HSDT)下发送。

    dsi_id:命令通过哪个 mipi 发送。0 表示在 mipi0 发送,1 表示在 mipi1 发送,2 表示双 mipi 同时发送。

    因为很少出现单独使用 mipi1 的情况,所以对于单 mipi,这个值默认是 0,对于双 mipi,这个值是 2。

    cmd:初始化命令,格式:命令类型(如 0x05/0x15/0x39)+指令+参数。

        0x05:只有指令,没有参数

        0x15:只有一个参数

        0x39:有多个参数,如果参数太长,程序可能会跑飞,需要增大源码中的指令数组长度。

      解决指令过长问题:https://www.cnblogs.com/lialong1st/p/11218433.html

    cmd_delay:命令发完后的延时,延时时间根据屏厂给的初始化序列来配置。

    另外有一些特殊的标准命令(0x22,0x32),某些特殊屏有可能需要,这就需要修改控制器来发送,得联系RK官方修改。

    如果屏幕不需要初始化,也就是mipi host 配置中 rockchip,screen_init = <0>; 的情况,不需要初始化并不是表示没有发送命令。

    在不需要初始化的情况下,等 mipi host,phy 供电初始化完和屏的供电结束以后会按照 mipi 协议发送 exit_sleep_mode 和 set_display_on 命令。

    dcs_exit_sleep_mode 表示退出 sleep 模式,dcs_set_display_on 表示通知显示屏开始显示图像数据,必须额外添加,而且延时特别重要。

    4、屏幕参数

    屏参包括屏的格式、dclk、时序等。

    disp_timings: display-timings {
        native-mode = <&timing0>;
        compatible = "rockchip,display-timings";
        timing0: timing0 {
            screen-type = <SCREEN_MIPI>;
            lvds-format = <LVDS_8BIT_2>;
            out-face    = <OUT_P666>;
            clock-frequency = <74000000>;
            hactive = <1366>;
            vactive = <768>;
    
            hsync-len = <56>;
            hback-porch = <64>;
            hfront-porch = <56>;
    
            vsync-len = <3>;
            vback-porch = <28>;
            vfront-porch = <1>;
    
            hsync-active = <0>;
            vsync-active = <0>;
            de-active = <0>;
            pixelclk-active = <1>;
    
            swap-rb = <0>;
            swap-rg = <0>;
            swap-gb = <0>;
        };
    };

    screen-type:屏幕类型,mipi 屏有两种:单 mipi(SCREEN_MIPI)、双 mipi(SCREEN_DUAL_MIPI)。

    lvds-format:lvds 数据格式。对于 mipi 屏是无效参数,不用配置。

    out-face:屏幕接线格式。

    上述三个参数的取值在 kernel/include/dt-bindings/rkfb/rk_fb.h中定义。

    clock-frequency:dclk 频率,单位为 Hz,一般屏的规格书中有,也可以通过公式计算:H*V(包括同步信号)*fps

    Hactive:水平有效像素

    Vactive:垂直有效像素

    hback-porch/hfront-porch/hsync-len:水平同步信号

    vback-porch/vfront-porch/vsync-len:水平同步信号

    hsync-activevsync-activede-activepixelclk-active:分别为 hync、vsync、DEN、dclk 的极性控制。置 1 将对极性进行翻转。

    swap-rbswap-rgswap-gb:置 1 将对对应的颜色进行翻转。

    5、板级文件配置

    dtsi 文件配置好后,需要在板级文件中包含这个 dtsi 文件。

    #include "xxx_mipi.dtsi"

    在 dtsi 中,mipi host 默认是关闭的,需要在 dtsi 或者 dts 文件中开启。

    &dsihost0 {
        status = "okay";
    };
    &dsihost1 {
        status = "okay";
    };

    单 mipi 只需开启对应的一个即可,双 mipi 两个都需要开启。

  • 相关阅读:
    设计模式学习总结状态模式(State Method)
    设计模式学习总结命令模式(Cmmand Pattern)
    Linux常用命令
    设计模式学习总结代理模式(Proxy Method)
    设计模式学习总结模板方法模式(Template Method)
    设计模式学习总结桥接模式(Bridge Pattern)
    设计模式学习总结适配器模式(Adapter Pattern)
    设计模式学习总结迭代器模式(Iterator Pattern)
    设计模式学习总结责任链模式(Chain of Responsibility Method)
    spingboot @Transactional 不回滚
  • 原文地址:https://www.cnblogs.com/lialong1st/p/8534728.html
Copyright © 2011-2022 走看看