rk3399 lt8912 mipi->hdmi 调试

任务:

调试rk3399上lt8912 (mipi --> hdmi, lvds) 模块,配置mipi–>hdmi,完成hdmi显示

方法一:

dts中配置mipi屏参,写一个I2c驱动初始化lt8912模块

方法二:

通过dts中,mipi框架配置

方法一实现:使用自己写的初始化驱动

&i2c1 {
    
    
	status = "okay";
	clock-frequency = <100000>;			//8912要求i2c频率不得超过100k
	lt8912: lt8912@48 {
    
    
		compatible = "hdmi,lt8912";
		reg = <0x48>;		//也可以不需要该节点,因为8912需要操作3个地址,也可以在驱动中定义
		reset-gpios = <&gpio1 3 IRQ_TYPE_LEVEL_LOW>;		//根据原理图中配置复位脚
	};
};
&dsi {
    
    
	status = "okay";	
	panel@0 {
    
    
		compatible ="simple-panel-dsi";
		reg = <0>;
		power-supply = <&vcc_lcd>;
		backlight = <&backlight>;
		prepare-delay-ms = <60>;
		enable-delay-ms = <200>;
		disable-delay-ms = <200>;
		unprepare-delay-ms = <80>;
		reset-delay-ms = <80>;
		init-delay-ms = <80>;
		dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
					MIPI_DSI_MODE_VIDEO_HBP | MIPI_DSI_MODE_LPM |
					MIPI_DSI_MODE_EOT_PACKET )>;
		dsi,format = <MIPI_DSI_FMT_RGB888>;
		dsi,lanes = <4>;
		display-timings {
    
    
			native-mode = <&timing1>;
			timing1: timing1 {
    
    
				clock-frequency = <148500000>;
				hactive = <1920>;
				vactive = <1080>;
				hfront-porch = <88>;
				hsync-len = <44>;
				hback-porch = <148>;
				vfront-porch = <4>;
				vsync-len = <5>;
				vback-porch = <36>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
		};
	};
};

&route_dsi {
    
    
		connect = <&vopb_out_dsi>;
        status = "okay";
};

&dsi_in_vopb {
    
    
	status = "okay";
};

&dsi_in_vopl {
    
    
	status = "disabled";
};

需要注意的点:
1.首先要先配好i2c,确保i2c通信没有问题。
2.在dts中将配置写好
3.在驱动中有使用到复位脚,注意获取到gpio口后需要request,后才能使用
4.8912需要使用到3个i2c地址,具体参考驱动写法
5.最后注意,如果上电方面有问题,可以查一下上电时序的问题,尤其reset脚的上电时序

方法二实现:是用rk sdk中的代码
主要的就是配置dts框架,然后打开sdk中自带8912驱动的config。
自带mipi框架的dts配置

&dsi {
    
    
	status = "okay";
	lt8912@0 {
    
    
			compatible = "lontium,lt8912";
			reg = <0>;
			reset-gpios = <&gpio1 RK_PA3 GPIO_ACTIVE_LOW>;
			i2c-bus = <&i2c1>;
			display-timings {
    
    
					native-mode = <&timing1>;
					timing1: timing1 {
    
    
							clock-frequency = <148500000>;
							hactive = <1920>;
							vactive = <1080>;
							hfront-porch = <88>;
							hsync-len = <44>;
							hback-porch = <148>;
							vfront-porch = <4>;
							vsync-len = <5>;
							vback-porch = <36>;
							hsync-active = <0>;
							vsync-active = <0>;
							de-active = <0>;
							pixelclk-active = <0>;
					};
			};
	};
};
&route_dsi {
    
    
		connect = <&vopb_out_dsi>;
        status = "okay";
};
&dsi_in_vopb {
    
    
	status = "okay";
};

&dsi_in_vopl {
    
    
	status = "disabled";
};

需要注意的是,由于使用的是官方的框架,具体的功能和配置需要查看驱动代码,或者官方的文档。出现问题主要就是dts的配置问题,需要认真核对,和检查。
最开始还遇到一个问题,就是I2c无法写入的问题,查过i2c配置也没有什么问题,后来发现是电源方面没有配置好,之后也需要注意这一点。

猜你喜欢

转载自blog.csdn.net/weixin_43069863/article/details/121331469