简述:
本文档主要介绍mipi接口的LCM驱动调试移植的步骤,基于mtk android开发平台。
方法一 在参考代码基础上直接修改,适用于调试阶段。
以参考代码为例,Lcm driver主要的驱动文件路径是:
kernel-3.10/drivers/misc/mediatek/lcm/hx8392a_dsi_cmd/hx8392a_dsi_cmd.c, 需客制化的地方主要有以下:
1. 修改mipi的工作模式,有两种,cmd mode 和video,根据spec来修改:
如果是cmd mode, 定义如下:
#define LCM_DSI_CMD_MODE 1
是video mode,定义如下:
#define LCM_DSI_CMD_MODE 0
2. 修改lcd 分辨率, 例如:
#define FRAME_WIDTH (720)
#define FRAME_HEIGHT (1280)
3. 修改mipi 时钟,例如:
params->dsi.PLL_CLOCK = 350;
4. 修改mipi lane的个数:
params->dsi.LANE_NUM = LCM_FOUR_LANE;
5. 修改data格式(大多数情况用默认即可):
params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB;
params->dsi.data_format.trans_seq = LCM_DSI_TRANS_SEQ_MSB_FIRST;
params->dsi.data_format.padding = LCM_DSI_PADDING_ON_LSB;
params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888;
6. 如果是video mode还需修改porch参数,具体值请参考lcd 规格书 。
params->dsi.vertical_sync_active = 2;
params->dsi.vertical_backporch = 2;
params->dsi.vertical_frontporch = 2;
params->dsi.vertical_active_line = FRAME_HEIGHT;
params->dsi.horizontal_sync_active = 8;
params->dsi.horizontal_backporch = 60;
params->dsi.horizontal_frontporch = 60;
params->dsi.horizontal_active_pixel = FRAME_WIDTH;
7. 修改数组lcm_initialization_setting,填充对应的初始化参数,这些参数一般由屏厂FAE提供。
8. 修改数组lcm_deep_sleep_mode_in_setting[] 和lcm_sleep_out_setting[], 分别对应屏sleep和sleep out时需下的指令。
9. 如果是cmd mode的屏,可能还需修改lcm_update()函数,填充刷屏的起始位置和结束位置,
大多数情况用默认的即可。有些屏的寄存器可能比较特殊,此时请参考规格书修改。
10. 有些屏用的不是系统电源,需要外部供电,需增加对应的上电函数。例如:
static void lcm_init_power(void)
{
#ifdef BUILD_LK
mt6325_upmu_set_rg_vgp1_en(1);
#else
printk("%s, begin\n", __func__);
hwPowerOn(MT6325_POWER_LDO_VGP1, VOL_DEFAULT, "LCM_DRV");
printk("%s, end\n", __func__);
#endif
}
LCM_DRIVER nt35595_fhd_dsi_cmd_truly_nt50358_720p_lcm_drv=
{
.name = "nt35595_fhd_dsi_cmd_truly_nt50358_720p_drv",
.set_util_funcs = lcm_set_util_funcs,
.get_params = lcm_get_params,
.init = lcm_init,/*tianma init fun.*/
.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,
.set_backlight = lcm_setbacklight,
.ata_check = lcm_ata_check,
.update = lcm_update,
// .switch_mode = lcm_switch_mode,
};
方法二 新增一个lcd driver. 步骤如下, 以 hx8xxx为例:
1. 在kernel-3.10/drivers/misc/mediatek/lcm/ 路径下新建文件夹hx8xxx_dsi_cmd。在文件夹里添加2个文件: hx8xxx_dsi_cmd.c , Makefile. Makefile的内容如下:
include $(srctree)/drivers/misc/mediatek/Makefile.custom
obj-y += hx8xxx_dsi_cmd.o
hx8xxx_dsi_cmd.o 即对应源文件 hx8xxx_dsi_cmd.c。 hx8xxx_dsi_cmd.c的内容可直接复制 hx8392a_dsi_cmd.c, 客制化的地方参考前面方法1. 另外要改下一些变量的名字,如
LCM_DRIVER hx8392a_dsi_cmd_lcm_drv =
{
.name = "hx8392a_dsi_cmd",
改为:
LCM_DRIVER hx8xxx_dsi_cmd_lcm_drv =
{
.name = "hx8xxx_dsi_cmd",
2. 修改kernel-3.10/drivers/misc/mediatek/lcm/mt65xx_lcm_list.c. 增加 hx8xxx_dsi_cmd_lcm_drv的声明和引用:
extern LCM_DRIVER hx8xxx_dsi_cmd_lcm_drv ;
LCM_DRIVER* lcm_driver_list[] =
{
….
#if defined(HX8XXX_DSI_CMD)
&hx8xxx_dsi_cmd_lcm_drv ,
#endif
3. 修改kernel-3.10/arch/arm64/configs/xxx_debug_defconfig 和xxx_defconfig.
把
CONFIG_CUSTOM_KERNEL_LCM="hx8392a_dsi_cmd"
改为
CONFIG_CUSTOM_KERNEL_LCM="hx8xxx_dsi_cmd"
如果分辨率有变化,下面2行也要改:
CONFIG_LCM_HEIGHT="1280"
CONFIG_LCM_WIDTH="720"
修改后,需重新编译kernel 和boot.img. 然后下载即可。
The end..