RV1109–LCD黑屏问题

  • Post author:
  • Post category:其他




RV1109–LCD黑屏问题



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就解决了。

在这里插入图片描述



版权声明:本文为weixin_42913061原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。