mipi屏在内核可以显示logo但是u-boot无法显示的问题

平台:瑞芯的rk3288

u-boot版本:u-boot-2014.10

kernel版本:3.10

mipi屏型号:LQ079L1SX01

作者:fulinux

*****本文允许转载,不过请注明出处:http://blog.csdn.net/fulinus****


问题:

使用的mipi屏可以在内核中显示logo,但是kernel可以显示。

分析:

内核可以正常使用,那说明硬件没有问题,内核和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";

这个问题告诉我们大厦是一步步建起来的不能跳过基础的东西!


时间: 2024-10-07 15:14:30

mipi屏在内核可以显示logo但是u-boot无法显示的问题的相关文章

内核启动后,lcd显示logo失败

针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印"Start display and show logo",但是LCD屏没有显示 [ 0.833071] s3cfb s3cfb: [fb2] dma: 0x465ab000, cpu: 0xe1000000, size: 0x005dc000 [ 0.845112] FIMD src sclk = 166750000 [ 0.965701] s3cfb s3cfb: re

开机显示LOGO时会闪一下

平台:展讯SC7730 现象:开机显示LOGO时会闪一下 观察现象似乎像是LCD没刷完屏背光就亮了. 问题首先定位于uboot开机显示LOGO段代码. normal_emc_mode.c void vlx_nand_boot(char * kernel_pname, char * cmdline, int backlight_set) { #ifdef CONFIG_SPLASH_SCREEN _boot_display_logo(dev, backlight_set); #endif } 进入

linux 显示logo的过程

Linux显示开机logo的函数调用: 1 register_framebuffer 2 ---> do_register_framebuffer 3 ---> fb_notifier_call_chain,传递参数FB_EVENT_FB_REGISTERED和还有fb_info的event结构 4 ---> blocking_notifier_call_chain 5 ---> __blocking_notifier_call_chain 6 ---> notifier_c

CPropertySheet隐藏下方按钮、在右下角显示Logo

这些是自己整理的一部分: 1.CPropertySheet隐藏下方按钮 方法一: //--隐藏应用.帮助.确定.取消 按钮 CWnd *pWnd = GetDlgItem (ID_APPLY_NOW); if(pWnd && pWnd->GetSafeHwnd()) pWnd->ShowWindow (FALSE); pWnd = GetDlgItem (IDHELP); if(pWnd && pWnd->GetSafeHwnd()) pWnd->S

android MIPI屏 导航栏丢失

/**************************************************************************** * android MIPI屏 导航栏丢失 * 说明: * 本文主要是记录使用RGB转MIPI时出现上面导航栏丢失问题的解决方式. * * 2016-3-17 深圳 南山平山村 曾剑锋 ***************************************************************************/ 一.

从U-Boot显示Logo到Android

/******************************************************************************* * 从U-Boot显示Logo到Android * 说明: * 从U-Boot一直显示Logo到Android桌面显示. * * 2017-9-27 深圳 龙华樟坑村 曾剑锋 *******************************************************************************/

dedecms友情链接首页不显示LOGO图片处理方法

dedecms友情链接首页不显示LOGO图片处理方法如下: 进入后台--系统设置---默认模板管理,找到主页模块 index.htm,点修改, 把下面代码: <strong>友情链接</strong> <span class="more"> <a href="plus/flink.php">所有链接</a> | <a href="plus/flink_add.php">申请加

[代码]如何在ALV头中显示Logo图片-[REUSE_ALV_GRID_DISPLAY]

下面介绍如何在ALV头中显示Logo图片的方法,其中ALV是调用函数REUSE_ALV_GRID_DISPLAY创建的.详细步骤如下: 1, OAER上载Logo Tcode: OAER上载需要显示的LOGO图片, 输入Class name  ’PICTURERS',Class type以及Object key ‘ZLOGO',这个ZLOGO就是logo的标识,会在ALV程序中用到. &lt;img class="alignnone size-full wp-image-4968&quo

LCD1602显示,用4位总线显示数字,字符,自定义字符,字符串,光标

/******************************************* 程序名:   1602液晶屏时钟程序 编写时间: 2015年10月4日 硬件支持: LCD1602液晶屏  STC12C4052AD 外部12MHZ晶振  接线定义: DB7 --> P1^7 DB6 --> P1^6 DB5 --> P1^5 DB4 --> P1^5 RS   = P3 ^ 2;   RW   = P3 ^ 3;   E    = P3 ^ 4;   功能:LCD1602显