Msm8974的cont_splash_screen问题

4 篇文章 0 订阅
3 篇文章 0 订阅

在手机进入系统之前会有一个bootloader流程,我从网上找到的解释如下:

Bootloader(系统启动加载器),其实就是在系统启动之前运行的一段程序。Bootloader的作用是对硬件设备初始化,建立内存空间映像图,从而把系统的软件环境带到一个合适的状态。这样,系统在调用内核时就准备好真正的环境,最终引导系统正常启动。

对于显示系统LCD来说存在这样一个问题:既然在bootloader里已经对硬件进行了初始化,那么进入kernel后再初始化一遍会不会很麻烦,于是在系统中存在这样一个全局变量:

static int cont_splash_enabled;
它的作用是控制是否在进入kernel以后重新对硬件进行配置,其字面意思是(配置连续闪屏功能)

target_set_cont_splash_screen(1);//使能连续闪屏,即不在kernel重新配置LCD
target_set_cont_splash_screen(0);//不使能连续闪屏,即在kernel重新配置LCD
但之前遇到一个问题,开机的过程中屏幕会跳一下,之前一直不知道问题出在哪里,只觉得是bootloader和kernel中的配置可能有不一样的地方,才会导致抖屏。

但明明在bootLoader里配置了target_set_cont_splash_screen(1);,怎么还会这样呢?

最后通过多次调用lm3630_lcd_backlight_set_level(int level);这个函数,设置屏幕亮暗和加msleep(int time);延迟判断问题出在

根目录\android\kernel\drivers\video\msm\mdss\mdss_dsi.c的dsi_panel_device_register()函数的mdss_dsi_clk_ctrl(ctrl_pdata, 1);里

再往里找,最后确定是如下函数出现了问题

rc =  clk_set_rate(ctrl_pdata->byte_clk, ctrl_pdata->byte_clk_rate);
可以判断是kernel中对byte的时钟配置跟bootloader里的不一样

最后解决的办法如下:

if (!ctrl->panel_data.panel_info.cont_splash_enabled) {
	rc = mdss_dsi_clk_set_rate(ctrl);
		if (rc) {
			pr_err("%s: failed to set clk rates. rc=%d\n",__func__, rc);
			mdss_dsi_disable_bus_clocks(ctrl);
			goto error;
		}
}
先判断是否设置了ctrl->panel_data.panel_info.cont_splash_enabled这个变量等于1,如果是的话就不对byte时钟进行重新配置,这样就解决了这个问题。

来看看这个变量是怎么来的吧:

ctrl->panel_data.panel_info.cont_splash_enabled= unc_get_cont_splash_enabled();
bool unc_get_cont_splash_enabled(void)
{
	return cont_splash_enabled;
}
其中static int cont_splash_enabled;是定义在

根目录\android\bootable\bootloader\lk\target\msm8974_l9_open_com\Init.c中的全局变量,就是前面那个cont_splash_enabled





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值