转载:在mt6735平台下驱动LCD显示屏步骤_Jeffery的博客-CSDN博客
感谢JefferySimon 记录这么详细的博客。
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屏
————————————————
版权声明:本文为CSDN博主「JefferySimon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37526672/article/details/80292529