任务:
调试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配置也没有什么问题,后来发现是电源方面没有配置好,之后也需要注意这一点。