mipi屏在内核可以显示logo但是u-boot无法显示的问题【转】
本文转载自:http://blog.csdn.net/fulinus/article/details/45071721
平台:瑞芯的rk3288
u-boot版本:u-boot-2014.10
kernel版本:3.10
mipi屏型号:LQ079L1SX01
作者:fulinux
*****本文允许转载,不过请注明出处:http://blog.csdn.net/fulinus****
问题:
u-boot启动不能显示logo的问题。
分析:
内核可以正常使用,那说明硬件没有问题,内核和u-boot使用的是同一个dts文件描述的设备树,所以dts文件中的信息应该也是没有问题的。那很可能是u-boot的mipi通信问题。
过程:
经过多次调试,我们在内核中初始化mipi屏的probe函数中加入了一个rk32_dsi_enable函数,竟然把原本需要在u-boot中需要显示的logo:
给显示出来了。抓住这个机会对rk32_dsi_enable函数逐步屏蔽,发现了关键问题,在比较u-boot做的这部分工作发现u-boot的mipi初始化时没有发送初始化指令,于是我在u-boot中添加如下代码,强制给mipi控制器发送如下指令:
cmds[0] = LPDT;
cmds[1] = 0x05;
cmds[2] = 0x11;
dsi_send_packet(0, cmds, 3);
dsi_send_packet(1, cmds, 3);
cmds[0] = LPDT;
cmds[1] = 0x15;
cmds[2] = 0x51;
cmds[3] = 0xff;
dsi_send_packet(0, cmds, 4);
dsi_send_packet(1, cmds, 4);
cmds[0] = LPDT;
cmds[1] = 0x15;
cmds[2] = 0x55;
cmds[3] = 0x02;
dsi_send_packet(0, cmds, 4);
dsi_send_packet(1, cmds, 4);
cmds[0] = LPDT;
cmds[1] = 0x15;
cmds[2] = 0x53;
cmds[3] = 0x2c;
dsi_send_packet(0, cmds, 4);
dsi_send_packet(1, cmds, 4);
cmds[0] = LPDT;
cmds[1] = 0x05;
cmds[2] = 0x29;
dsi_send_packet(0, cmds, 3);
dsi_send_packet(1, cmds, 3);
果不其然,OK了,这些指令就是mipi的dts文件中的信息。
不过这个代码可不行,于是进一步分析问题是在这里:
list_for_each(screen_pos, &screen->cmdlist_head){
发现cmdlist_head的是空的,说明没有解析到dts文件的信息,解析dts文件的信息在:
rk_mipi_screen_init_dt函数中:
/*get the initial command list*/
node = fdtdec_next_compatible(blob, 0, COMPAT_ROCKCHIP_MIPI_SONCMDS);
if (node < 0) {
MIPI_SCREEN_DBG("Can not get node of COMPAT_ROCKCHIP_MIPI_SONCMDS\n");
} else {
#if 1
noffset = fdt_first_subnode(blob, node);
const char *name = fdt_get_name(blob, noffset, NULL);
printf("XJH_DEBUG1:%s\n", name);
noffset = fdt_next_subnode(blob, noffset);
const char *name1 = fdt_get_name(blob, noffset, NULL);
printf("XJH_DEBUG2:%s\n", name1);
#endif
printf ("fulinux mipi_oncmds 1\n");
for (noffset = fdt_first_subnode(blob,node);
noffset >= 0;
noffset = fdt_next_subnode(blob, noffset)) {
printf ("fulinux mipi_oncmds 2\n");
MIPI_SCREEN_DBG("build MIPI LCD init cmd tables\n");
dcs_cmd = calloc(1,sizeof(struct mipi_dcs_cmd_ctr_list));
strcpy(dcs_cmd->dcs_cmd.name, fdt_get_name(blob, noffset, NULL));
MIPI_SCREEN_DBG("%s\n",dcs_cmd->dcs_cmd.name);
dcs_cmd->dcs_cmd.type = fdtdec_get_int(blob, noffset, "rockchip,cmd_type", -1);
MIPI_SCREEN_DBG("dcs_cmd.type=%02x\n",dcs_cmd->dcs_cmd.type);
dcs_cmd->dcs_cmd.dsi_id = fdtdec_get_int(blob, noffset, "rockchip,dsi_id", -1);
MIPI_SCREEN_DBG("dcs_cmd.dsi_id=%02x\n",dcs_cmd->dcs_cmd.dsi_id);
fdt_getprop(blob, noffset, "rockchip,cmd", &length);
dcs_cmd->dcs_cmd.cmd_len = length / sizeof(u32) ;
err = fdtdec_get_int_array(blob, noffset, "rockchip,cmd", cmds, dcs_cmd->dcs_cmd.cmd_len);
MIPI_SCREEN_DBG("length=%d,cmd_len = %d err = %d\n",length,dcs_cmd->dcs_cmd.cmd_len,err);
for (i = 0; i < (length / sizeof(u32)); i++) {
MIPI_SCREEN_DBG("cmd[%d]=0x%08x, ",i+1,cmds[i]);
dcs_cmd->dcs_cmd.cmds[i] = cmds[i];
}
MIPI_SCREEN_DBG("\n");
dcs_cmd->dcs_cmd.delay = fdtdec_get_int(blob, noffset, "rockchip,cmd_delay", -1);
MIPI_SCREEN_DBG("dcs_cmd.delay=%d\n",dcs_cmd->dcs_cmd.delay);
list_add_tail(&dcs_cmd->list, &screen->cmdlist_head);
}
}
return 0;
u-boot的log显示没有打印printf ("fulinux mipi_oncmds 2\n");这条信息。但是前面有个类似功能的代码是正常的。那说明问题在dts解析时出现了问题。考虑一下是不是dts文件中的格式有问题呢?经过反复的调试和摸索,原来是谁在填写mipi屏的dts文件时拉掉了这句:
compatible = "rockchip,screen-on-cmds";
这个问题告诉我们大厦是一步步建起来的不能跳过基础的东西!
mipi屏在内核可以显示logo但是u-boot无法显示的问题【转】的更多相关文章
- 内核启动后,lcd显示logo失败
针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示 ...
- RK3288 st7703 mipi屏指令过长,程序跑飞
本文为博主原创文章,转载请注明出处:https://www.cnblogs.com/lialong1st/p/11218433.html CPU:RK3288 系统:Android 5.1 调试 mi ...
- uboot显示logo的方式
转:http://blog.chinaunix.net/uid-22030783-id-3257554.html 本文使用uboot2010.03版本,2010.06版本同样适用,在XC2440板上实 ...
- 东芝开发板驱动OLED模块显示LOGO图片
前言 在之前的两篇评测文章: 使用系统定时器SysTick实现精确延时微秒和毫秒函数 东芝MCU实现位带操作 介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO ...
- android MIPI屏 导航栏丢失
/**************************************************************************** * android MIPI屏 导航栏丢失 ...
- RK3288 mipi屏参数配置文件
RK3288 Android 5.1系统 Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...
- RK3288 mipi屏调试流程
CPU:RK3288 系统:Android 5.1 1.修改kernel/arch/arm/configs/rockchip_defconfig,打开mipi屏开关 # CONFIG_LCD_GENE ...
- 从U-Boot显示Logo到Android
/******************************************************************************* * 从U-Boot显示Logo到And ...
- Linux中文显示乱码?如何设置centos显示中文
Linux中文显示乱码?如何设置centos显示中文 怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一 ...
随机推荐
- Apollo配置中心的使用
1. 自己搭建Apollo配置中心 碰到如下错误: nested exception is org.hibernate.HibernateException: Access to DialectRes ...
- 查看linux ubuntu版本
ubuntu版本: lsb_release -a linux版本: uname -a proc目录下记录的当前系统运行的各种数据,version记录的版本信息直接可以通过cat查看到. 使用命令:c ...
- php面向对象(设计模式 工厂模式)
//设计模式//单例模式//类的计划生育//让该类在外界无法造成对象//让外界可以造一个对象,做一个静态方法返回对象//在累里面可以通过静态变量控制返回对象只能有一个 //class Cat//{// ...
- smartctl---查看硬件接口
1.查看磁盘信息: #smartctl -i /dev/sda smartctl 5.42 2011-10-20 r3458 [x86_64-linux-2.6.18-308.16.1.el5] (l ...
- 【链表】2017多校训练三 HDU 6058 Kanade's sum
acm.hdu.edu.cn/showproblem.php?pid=6058 [题意] 给定一个排列,计算 [思路] 计算排列A中每个数的贡献,即对于每个ai,计算有ni个区间满足ai是区间中的第k ...
- [NOIP2002] 提高组 洛谷P1031 均分纸牌
题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- 怎么删除"自豪地采用WordPress"
wordpress刚刚安装完毕,打开默认的主页,会发现底部有这样的一行文字:“自豪地采用WordPress”.当然了,我们做一个网站,不一定需要这些文字,我们可以删除或者修改这些文字.今天,小编就来教 ...
- 2018 江苏省邀请赛 H
题目链接 https://nanti.jisuanke.com/t/28872 解析 递推 直接套杜教板子 AC代码 #include <cstdio> #include <cstr ...
- 我和 HelloGitHub
我? 我是一个本科学历.无大厂经历,普通的 Python 程序员. 虽然是计算机专业,但是大学玩了四年(Dota)后,发现自己无一技能傍身,要饿死啦!偶然间接触了 Python 这门编程语言,发现编程 ...
- SQL FULL OUTER JOIN 关键字
SQL FULL OUTER JOIN 关键字 SQL FULL OUTER JOIN 关键字 FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配 ...