高通平台LCD调试

21 篇文章 27 订阅

一、移植前注意事项:

1.    LCD移植会分为二部分, Kernel 和 bootloader,  Kernel侧主要管理开机后的正常显示功能, Bootloader侧主要管理开机过程中的显示工作,所以移植时不能忽略Bootloader处

2.    看原理图或者与硬件确定是用什么接口。常用的有RGB接口,MIPI接口。

RGB:18根并口数据线,SPI作为控制线。

MIPI:低速模式下为控制线,高速模式下为数据线。

二、LCD的移植:

KERNEL部分:

1. Lcd kernel驱动相关文件:

ap-src\kernel\arch\arm\mach-msm\board-msm7627a-display.c   //LCD板级文件

ap-src\kernel\drivers\video\msm\mipi_XXXX.c          //与屏相关的驱动文件

       ap-src\kernel\drivers\video\msm\mipi_XXXX.h

       ap-src\kernel\drivers\video\msm\mipi_XXXX_video_xga_pt.c   //与基带相关的驱动文件

       ap-src\kernel\drivers\video\msm\msm_dss_io_7x27a.c       //与MIPI时序等相关的文件

将上面的文件加入到相应的目录下,并修改 Makefile和Kconfig文件,使其编译进内核中。

2. ap-src\kernel\arch\arm\mach-msm\board-msm7627a-display.c  //LCD板级文件 配置与主板相关的

配置LCD RESET引脚

#define GPIO_SKUD_LCD_BRDG_RESET_N   78  //根据原理图来配置

static unsigned skud_mipi_dsi_gpio[] = {
GPIO_CFG(GPIO_SKUD_LCD_BRDG_RESET_N,0,GPIO_CFG_OUTPUT,GPIO_CFG_NO_PULL,GPIO_CFG_2MA),

};

static int msm_fb_dsi_client_skud_reset(void)

{
       int rc = 0;

       rc=gpio_request(GPIO_SKUD_LCD_BRDG_RESET_N,"skud_lcd_brdg_reset_n");

       if (rc < 0) {
              pr_err("failed to request skud lcd brdg reset_n\n");

              return rc;

       }

       return rc;

}

上电复位

static int mipi_dsi_panel_power(int on)

----->mipi_dsi_panel_skud_power(int on)

添加到FB设备

void __init msm_fb_add_devices(void)

{
       int rc = 0;

   msm7x27a_set_display_params("mipi_video_xxx_xxx");

……

}

上面红色标记的字符串必须与驱动中的msm_fb_detect_client("mipi_video_xxx_xxx")  一致,用于匹配使用的驱动程序,具体如下:

static int mipi_video_xxx_xxx_pt_init(void)

{
       int ret;

     if (msm_fb_detect_client("mipi_video_xxx_xxx"))

return 0;

……

3.ap-src\kernel\drivers\video\msm\mipi_XXXX.c

主要用来初始化屏的IC,实现休眠、唤醒、背光的控制

static char video0[] = {
    0x00,0x00

};

表示向屏IC的00寄存器写入值00

4.ap-src\kernel\drivers\video\msm\mipi_XXXX_video_xga_pt.c  

按照屏的规格书来填写即可。

5.ap-src\kernel\drivers\video\msm\msm_dss_io_7x27a.c    

与MIPI时序相关的部分,一般不需要修改

Bootloader部分: LK 开机过程中的显示

1.LCD驱动相关文件

ap-src\bootable\bootloader\lk\dev\panel\msm\mipi_XXXX.c

ap-src\bootable\bootloader\lk\dev\panel\msm\mipi_XXXX_video_XXX.c

ap-src\bootable\bootloader\lk\target\msm7627a\target_display.c

2.ap-src\bootable\bootloader\lk\dev\panel\msm\mipi_XXXX.c

int mipi_B080XAN02_panel_dsi_config_skud(int on)

{
       if (on) {
              gpio_config(78, 0x1);

              gpio_set(78, 0x1);

              mdelay(20);

              gpio_set(78, 0x0);

              mdelay(20);

              gpio_set(78, 0x1);

              mdelay(20);

       } else {
              if (!target_cont_splash_screen()) {
                     gpio_set(78, 0x0);

                       pcom_set_backlight(0);

                }

       }

       return 0;

}

按照原理图将78修改为lcd的reset的引脚。

3.ap-src\bootable\bootloader\lk\dev\panel\msm\mipi_XXXX_video_XXX.c

与kernel中的ap-src\kernel\drivers\video\msm\mipi_XXXX.c类似,按照其配置即可。

static char video0[8] = {
       0x02, 0x00, 0x39, 0xC0,

    0x00, 0x00, 0xff, 0xff,

};

0x02表示有效数据的数量(寄存器地址+写入的数据),第一个0x00是固定的,0x39和0xc0是mipi打包的方式,不用修改,第二个0x00表示寄存器地址,第三个0x00表示写入的值,最后两个0xff为填充位。

4.ap-src\bootable\bootloader\lk\target\msm7627a\target_display.c

case MSM8X25Q_SKUD:

              mipi_xxx_video_xxx_init(&(panel.panel_info));             

              panel.clk_func = msm7627a_mdp_clock_init;

              panel.fb.base = base_addr;

              panel.fb.width = panel.panel_info.xres;

              panel.fb.height = panel.panel_info.yres;

              panel.fb.stride = panel.panel_info.xres;

              panel.fb.bpp = panel.panel_info.bpp;

              panel.fb.format = FB_FORMAT_RGB888;

              panel.mdp_rev = MDP_REV_303;

              /* Lane and board config. is different for SKUD prime

              * and QPR boards */

              if (mach_type == MSM8X25Q_EVBD || cpu_is_msm8625q())

                     panel.panel_info.mipi.lane_swap= 0; 

              else

                     panel.panel_info.mipi.lane_swap= 1;

              if (mach_type == MSM8X25Q_EVBD)

                     panel.power_func =mipi_xxx_panel_dsi_config_evbd;

              else

                     panel.power_func=mipi_xxx_panel_dsi_config_skud;                                    break;

按照上面两个文件修改红色部分。

5.bootable\bootloader\lk\target\msm7627a\rules.mk  

 DEFINES +=DISPLAY_TYPE_MDDI=0

 DEFINES +=DISPLAY_TYPE_MIPI=1          //mipi通信模式

 DEFINES +=DISPLAY_TYPE_LCDC=0       //DPI通信模式

打开上述宏,会初始化相应的LCD通信接口

至此,LCD屏驱动部分修改完成,接下来就是具体的调试。

调试总结:

   如果上面的操作成功后依然无显示,请注意以下几点:

1.先确定跑了正确的驱动程序,通过在驱动程序中probe函数里面用printk打印语句来判断

2.确定初始化代码是否正确。

3.用示波器查看reset脚是否被正确的上拉下拉。(一般为高低高)

4.查看屏的规格书或与FAE联系,获得一组可以点亮屏的porch值。
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值