在mt6735平台下驱动LCD显示屏步骤

LCD显示屏成功驱动起来的效果图如下所示:

下面是具体实现的步骤:

一、在kernel-3.10kernel-3.10/drivers/misc/mediatek/lcm下添加LCD屏驱动文件以及修改一些配置

1.  进入kernel-3.10/drivers/misc/mediatek/lcm文件夹

cd ~/mt6735/kernel-3.10/drivers/misc/mediatek/lcm


2. 新建一个文件夹,用于存放自己屏幕的驱动代码和Makefile文件

mkdir st7701_dsi_vdo_xind (dsi: display serial lnterface  vdo:video  xind)


3. 复制一份屏幕模板,在这个模板上添加自己屏幕参数,这里用的是旧屏作为模板:

cp -r ../otm8018b_dsi_vdo_xind/ .

4. 修改Makefile里面的内容:

#
# Makefile for misc devices that really don't fit anywhere else.
#
include $(srctree)/drivers/misc/mediatek/Makefile.custom

obj-y += st7701_dsi_vdo_xind.o


5. 将otm8018b_dsi_vdo_xind.c 更名为:st7701_dsi_vdo_xind.c

mv  otm8018b_dsi_vdo_xind.c  st7701_dsi_vdo_xind.c

6. 进入:st7701_dsi_vdo_xind.c

vi st7701_dsi_vdo_xind.c

7. 初始化参数:

将参考的初始化参数复制到这个结构体里面

static struct LCM_setting_table lcm_init_setting[] = {
        ......
        {0x29,1, {0x00}},
        {REGFLAG_DELAY, 50, {}},
        {REGFLAG_END_OF_TABLE, 0x00, {}}
};

8. lcm_compare_id 函数获取并且比较LCD屏的ID,return ((0x7701== id) ? 1:0); 系统根据返回值判断是否获取到LCD屏ID,有多个屏幕的时,可根据ID号切换显示。

static unsigned int lcm_compare_id(void)
{         
        int id=0;
        unsigned char buffer[4];
        unsigned int array[16];  
        char id_high=0;
       char id_low=0;
        
        SET_RESET_PIN(1);
        MDELAY(10);
        SET_RESET_PIN(0);
        MDELAY(10);
        SET_RESET_PIN(1);
        MDELAY(120);

        array[0] = 0x00023700; 
        dsi_set_cmdq(array, 1, 1);
        read_reg_v2(0xA1, &buffer[0], 2);

       id_high=buffer[0];
       id_low=buffer[1];
       id=(id_high<<8)| id_low;
        
        #ifdef BUILD_LK
                printf("st7701_fwvga_dsi_vdo_lcm_drv %s:0x%2x,0x%2x,0x%2x,0x%2x id=0x%x\n", __func__,buffer[0],buffer[1],buffer[2],buffer[3], id);
        #else
                printk("st7701_fwvga_dsi_vdo_lcm_drv %s:0x%2x,0x%2x,0x%2x,0x%2x id=0x%x\n", __func__,buffer[0],buffer[1],buffer[2],buffer[3], id);
        #endif 
        
    return ((0x7701 == id) ? 1:0);        // 读到LCD屏ID,返回值为1;否则,返回值为0
}

9. 修改LCM_DRIVER 名  以及.name = “名字” 使系统能够调用st7701_dsi_vdo_xind.c里面的函数

LCM_DRIVER st7701_dsi_vdo_xind_lcm_drv =
{
        .name           = "st7701_dsi_vdo_xind",
        .set_util_funcs = lcm_set_util_funcs,
        .get_params     = lcm_get_params,
        .init           = lcm_init,
        .suspend        = lcm_suspend,
        .resume         = lcm_resume,
        .compare_id     = lcm_compare_id,
        .init_power     = lcm_init_power,
        .resume_power   = lcm_resume_power,
        .suspend_power  = lcm_suspend_power,
        //.esd_check    = lcm_esd_check,
        //.esd_recover  = lcm_esd_recover,
        #if (LCM_DSI_CMD_MODE)
                .update         = lcm_update,
        #endif
};

以上修改好之后,保存并退出vi

10. 进入mt65xx_lcm_list.c 添加声明

vi ~/mt6735/kernel-3.10/drivers/misc/mediatek/lcm/mt65xx_lcm_list.c


二、在lk/dev/lcm下添加LCD屏驱动文件以及修改一些配置

1. 进入~/mt6735/bootable/bootloader/lk/dev/lcm 目录下

cd ~/mt6735/bootable/bootloader/lk/dev/lcm

2. 在lk下添加LCD屏驱动文件以及修改一些配置与在kernel-3.10/drivers/misc/mediatek/lcm下类似。这里,我直接将修改好的文件从kernel-3.10/drivers/misc/mediatek/lcm/拷贝到lk/dev/lcm/

 cp~/mt6735/kernel-3.10/drivers/misc/mediatek/lcm/st7701_dsi_vdo_xind/ ~/mt6735/bootable/bootloader/lk/dev/lcm

3. 因为是从/kernel-3.10/drivers/misc/mediatek/lcm/st7701_dsi_vdo_xind/复制过来的,Makefile与st7701_dsi_vdo_xind.c已经修改过了,这里不用重复修改。同样,要在lk/dev/lcm/mt65xx_lcm_list.c 文件添加st7701相关的声明。

vi lk/dev/lcm/mt65xx_lcm_list.c 

4. 配置lk下的<project>.mk文件

vi  ~/mt6735/bootable/bootloader/lk/project/p6s_65u_l1.mk

三、配置config

1. 打开配置文件:p6s_65u_l1_defconfig

vi ~/mt6735/kernel-3.10/arch/arm64/configs/p6s_65u_l1_defconfig

2. 在vi/vim中搜索LCM,方法是输入命令:/LCM



3. 我要修改CONFIG_CUSTOM_KERNEL_LCM 以及下面的CONFIG_LCM_HEIGHT CONFIG_LCM_WIDTH,但是不能直接在这里修改,直接在vi/vim下修改如果会影响到其他config,并且不会有提     醒,因此我要在menu界面下修改。

步骤是:

1)新建一个文件

mkdir  out1

2)输入指令

ARCH=arm64 make O=out1 p6s_65u_l1_defconfig

3)进入修改p6s_65u_l1_defconfig的界面:

ARCH=arm64 make O=out1 menuconfig      //修改配置

4)用方向键选择:Device Drivers à Misc devices à MediaTek Properitary Configuration àCUSTOM_KERNEL_LCM。当出现如下界面,在输入框内输入屏幕驱动所在的文件的文件名,例如:


 5)再找到修改屏幕大小也就是屏幕分辨率的选项:




6)修改好之后保存,输入p6s_65u_l1_defconfig,选择OK 保存修改,之后退出:


7) 经过以上的修改,所有的配置都保存在p6s_65u_l1_defconfig,将新的配置文件p6s_65_l1_defconfig复制到~/mt6735/kernel-3.10/arch/arm64/configs 替换掉旧的配置文件p6s_65u_l1_defconfig 。

cp ~/mt6735/kernel-3.10/out1/p6s_65u_l1_defconfig  ~/mt6735/kernel-3.10/arch/arm64/configs/

8)最后,编译系统

make 2>&1 | tee build.log

四、需要了解更多内容,请点击:在MT6735平台下驱动LCD屏

猜你喜欢

转载自blog.csdn.net/m0_37526672/article/details/80292529