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 兩個都需要開啟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM