瑞芯微Rockchip开发者社区
直播中

jefljel

8年用户 1070经验值
擅长:20762
私信 关注
[问答]

RV1109设备开机后,启动kernel屏幕逐渐熄灭变黑的原因?怎么解决?

RV1109设备开机后,启动kernel屏幕逐渐熄灭变黑的原因?怎么解决?

回帖(1)

高志新

2022-3-9 10:51:15
1、问题描述


平台:RV1109

需求:兼容一块10.1寸mipi的LCD屏(1218-A101NL66-28K),是rv1109的第10块屏幕,使用lcd_index=10(lcd_index涉及到我司兼容LCD方式)来标志这块屏。

问题:设备开机后,在uboot阶段显示正常,启动kernel后屏幕逐渐熄灭变黑。

2、问题根因


在uboot的时候,LCD屏的初始化序列正确,故能在uboot阶段正常显示。但是在kernel阶段由于错误地使用timimg参数,导致屏幕逐渐熄灭变黑。

3、具体分析


这就需要涉及到我司rv1109项目对LCD屏幕的兼容方式了,我司是在uboot阶段兼容各种LCD屏幕,所以会在uboot选择具体哪个lcd屏幕,然后根据这块屏幕的初始化序列来初始化这块屏幕并显示logo。具体可以去查找相关资料和追溯代码。

在uboot这一阶段没有出现问题,也正确地通过bootarg命令将选择的屏幕index传递到kernel了,如下图所示:


由上面的图片可知,显然uboot阶段选择的屏幕是正确的,是选择我需要的那块屏幕。但从图片里可以看到选择的LCD型号为L071,不是我目前LCD型号–1218-A101NL66-28K。那这是什么原因导致的呢?

那我们从函数of_get_display_timings寻找答案吧,如下图:


在of_get_display_timings函数里发现出现bug的就是在上图中的那部分代码。在这部分代码里我们可以知道获取LCD的timing参数是通过lcd_name和lcd_index来比较,如果相同就获取timing参数。但问题就出在上图3处的字符串比较函数—strncmp。它这里是以lcd_name的长度来与lcd_index比较,所以当在LCD1与LCD10以4的长度来比较,结果是相同的,这样就选择了LCD1的timing参数。所以我们将这部分代码改成如下图,bug就解决了。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分