RK3399 驱动开发 _ 09 - mipi-dsi 开机 logo 与开机动画


前言

在RK3399平台开发过程中,可能需要定制开机logo及开机动画。本文旨在介绍android 系统的logo 显示部分。

开机logo一般有2种:静态和动态。Android 开机时共有三种logo,如下:
 - 1. uboot logo 显示
 - 2. kernel logo 显示
 - 3. Android 开机动画显示
一般情况下将前两幅图做成一样的,第三个就是开机动画部分。
(uboot显示logo一般可以不做,加快android启动速度)
  • 运行环境:
系统:Android8.1
内核 : Kernel 4.4.167
u-boot:2014.10
显示接口:MIPI-DSI

一、u-boot 及 kernel logo 显示

1. logo 显示及替换

1. u-boot logo 和 kernel  logo 均在 kernel / 目录下:
u-boot logo :kernel/logo.bmp
kernel logo :logo_kernel.bmp

说明:
1.若logo.bmp 与 logo_kernel.bmp 采用同一logo图片则可以无缝衔接。
2.若需定制开机logo 图片,只需替换kernel/logo.bmp和kernel/logo_kernel.bmp,同时在设备树中修改logo的显示模式(居中或者全屏)。

mipi-dsi logo 居中模式dts 配置:

&display_subsystem {
    
    
	status = "okay";

	ports = <&vopb_out>, <&vopl_out>;
	logo-memory-region = <&drm_logo>;
	secure-memory-region = <&secure_memory>;
	route {
    
    
		route_hdmi: route-hdmi {
    
    
			status = "disabled";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "center";
			charge_logo,mode = "center";
			connect = <&vopb_out_hdmi>;
		};

		route_dsi: route-dsi {
    
    
			status = "okay";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "center";
			charge_logo,mode = "center";
			connect = <&vopb_out_dsi>;
		};

		route_dsi1: route-dsi1 {
    
    
			status = "disabled";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "center";
			charge_logo,mode = "center";
			connect = <&vopl_out_dsi1>;
		};

		route_edp: route-edp {
    
    
			status = "disabled";
			logo,uboot = "logo.bmp";
			logo,kernel = "logo_kernel.bmp";
			logo,mode = "center";
			charge_logo,mode = "center";
			connect = <&vopb_out_edp>;
		};
	};
};

&dsi_in_vopb {
    
    
	status = "okay";
};

&dsi_in_vopl {
    
    
	status = "disabled";
};

&vopb {
    
    
    assigned-clocks = <&cru DCLK_VOP0_DIV>;
    assigned-clock-parents = <&cru PLL_CPLL>;
};

&vopl {
    
    
    assigned-clocks = <&cru DCLK_VOP1_DIV>;
    assigned-clock-parents = <&cru PLL_VPLL>;
};

更换完开机logo重新编译内核烧写resource.img即可。

2. logo 不显示问题分析

配置好开机logo的dts 后,可能出现u-boot logo 和 kernel logo 均不显示现象,此种情况大概率是logo 尺寸不对导致,更换合适尺寸的logo.bmp 和 logo_kernel.bmp 即可。

二、Android 开机动画显示

1. Android 开机动画不显示问题分析

u-boot logo 和 kernel logo 正常显示完成后,Android 开机动画不显示,Android 系统进入黑屏状态。出现此种现象可能是dsi 的 dts 配置异常导致。

1. 当dsi 配置如下,设备无法匹配 "simple-panel-dsi" , 导致 Android 系统进入黑屏状态:
&dsi {
    
    
    status = "okay";
    lcd_panel: lcd-panel {
    
       
        compatible = "simple-panel-dsi"; // 无法找到.name
        reg = <0>;
		backlight = <&backlight>;	
		
2. 更改dsi 配置如下:
&dsi {
    
    
    status = "okay";

	lcd_panel: panel@0 {
    
     
		compatible ="simple-panel-dsi";
		reg = <0>;
		backlight = <&backlight>;
		reset-gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
		enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;

        dsi,flags = <(MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO |
			      MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
		dsi,format = <MIPI_DSI_FMT_RGB888>;
		bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
		dsi,lanes = <4>;

		reset-delay-ms = <200>;
		init-delay-ms = <80>;
		enable-delay-ms = <200>;
		prepare-delay-ms = <200>;
        status = "okay";

        panel-init-sequence = [
            05 78 01 11 // sleep out
            05 14 01 29 // display on
        ];

        panel-exit-sequence = [
            05 05 01 28
            05 78 01 10
        ];

		display-timings {
    
    
			native-mode = <&timing0>;
			timing0: timing0 {
    
    
				clock-frequency = <120000000>;
				hactive = <1200>;
				vactive = <1920>;
				hback-porch = <60>;
				hfront-porch = <80>;
				vback-porch = <25>;
				vfront-porch = <35>;
				hsync-len = <1>;
				vsync-len = <1>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
		};
	};

};

重新编译内核并烧录生效。Android 开机动画显示正常。

2. Android 开机动画制作与替换

参考连接 : https://blog.csdn.net/kangweijian/article/details/128257842


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Android 开机logo 与 Android 开机动画的显示。

猜你喜欢

转载自blog.csdn.net/chenkanuo/article/details/132605271