高通平台LCD调试

Posted bobuddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高通平台LCD调试相关的知识,希望对你有一定的参考价值。

一、移植前注意事项:

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值。
 

以上是关于高通平台LCD调试的主要内容,如果未能解决你的问题,请参考以下文章

高通平台手机开发之LCD

小驰私房菜_02_Qcom 高通平台 新增加driver,需要准备哪些东西?

高通平台常用缩写

SM7250(高通5G)平台LCD bringup

RK3288 LVDS LCD屏DTS相关参数设置

苹果的基带芯片即将推出,被联发科压制的高通将迎来更艰难的日子