Android/Linux 驱动层LCD屏幕的调试总结
1、初始化参数的注意事项:
1.>mipi长包参数的添加:
{0x00, DCS_CMD, LW_PACK, 0x06, 0x04, 0x00, 0xB9, 0XFF, 0X83, 0X94},
第一个参数0x00,为整个包发送后的延时;
第二个和第三个参数为该数据包的格式,长包用(DCS_CMD, LW_PACK,),短包分两种,
一种是1个参数的用(DCS_CMD, SW_PACK1),两个参数的用(DCS_CMD, SW_PACK2);
【注意:这里说的参数包括,寄存器地址和寄存器参数,即:如果寄存器的值只有一个,则他就属于这里的两个参数;
如果寄存器没有参数,则属于这里的一个参数。】
第四个参数0x06为后面所跟的参数个数;
第五个和第六个参数( 0x04, 0x00, )为后面长包的参数个数。
2、刷白屏:
修改代码目录:kernellinux-3.10archarmplat-lcdriversvideocomipfb2
修改文件:comipfb.c
具体修改如下:
static int comipfb_map_video_memory(struct comipfb_layer_info *layer)
{
……
if (layer->map_cpu) {
/* prevent initial garbage on screen */
//if (!FB_MEMORY_FIX)
memset(layer->map_cpu, 0xff, layer->map_size); //把0x00,修改为0xff,即刷白屏
layer->fb.screen_base = (char __iomem *)layer->map_cpu;
layer->fb.screen_size = layer->map_size;
……
}
3、关掉休眠:
修改代码目录:kernellinux-3.10kernelpower
修改文件:earlysuspend.c
具体修改如下:
void request_suspend_state(suspend_state_t new_state)
{
unsigned long irqflags;
int old_sleep;
return; //直接返回,不让其进入休眠。
……
}
4、mipi信号极性的配置(HS、VS)
修改代码目录:kernellinux-3.10archarmplat-lcdriversvideocomipfb2
修改文件:mipi_interface.c
具体修改如下:
int mipi_dsih_config(struct comipfb_info *fbi)
{
……
if (mipi->display_mode == MIPI_VIDEO_MODE) {
mipi_dsih_hal_dpi_hsync_pol(fbi, 1); //0为高有效,1为低有效
mipi_dsih_hal_dpi_vsync_pol(fbi, 1); //0为高有效,1为低有效
mipi_dsih_hal_dpi_dataen_pol(fbi, 0);
mipi_dsih_hal_dpi_color_mode_pol(fbi, 0);
……
}
5、修改dpi:
修改文件:用ADB进入手机的/system下将build.prop pull到本地,然后修改如下的参数
ro.sf.lcd_density=240(3.7寸)
然后在push到/system 目录下,并修改会build.prop的权限(chmod 644),
注意:在修改权限的时候要用root权限,并且要remount一下。
6、修改video size:
修改代码目录:kernellinux-3.10archarmplat-lcdriversvideocomipfb2
修改文件:mipi_interface.c
具体修改如下:
int mipi_dsih_config(struct comipfb_info *fbi)
{
……
for (i = 1; i < 1000; i++) {
if ((mipi->hs_freq * mipi->no_lanes * i) % (fbi->pixclock / 1000) == 0) {
total_bytes = (mipi->hs_freq * mipi->no_lanes * i) / (fbi->pixclock / 1000);
if ((total_bytes - i * bytes_per_pixel_x100 / 100) >= 12)
break;
}
}
video_size = i; //young.yang change i 480
if ((videoinfo->xres % video_size) != 0)
no_of_chunks = videoinfo->xres / video_size + 1;
else
no_of_chunks = videoinfo->xres / video_size;
……
}