6572兼容LCM无法独到屏的ID?
我们也读不出ID。
现在是用硬件ADC去做LCD兼容的。
我要了个path,说是解决LCM兼容的,但是丢进去了还是读不到,真是奇了怪了
ADC兼容原理是读某个pin脚的电压吗?我这边pin脚定义都一样的,不懂能不能读出来
你问一下你们硬件,有没有做ADC的兼容方式。
给的patch不对吧,应该要改dsi_drv.c这的
麻烦你将你的PATCH上传上来吧。
让大家都用一下。
我对比过lk里面的dsi_drv.c,patch上说说加大read_timeout_ms,但是我没发现有,DSI_dcs_read_lcm_reg_v2这个函数也没有变什么
能不能贴你的patch或者这个函数出来研究研究?
UINT32 DSI_dcs_read_lcm_reg_v2(UINT8 cmd, UINT8 *buffer, UINT8 buffer_size)
{
UINT32 max_try_count = 5;
UINT32 recv_data_cnt;
unsigned int read_timeout_ms;
unsigned char packet_type;
DSI_RX_DATA_REG read_data0;
DSI_RX_DATA_REG read_data1;
DSI_RX_DATA_REG read_data2;
DSI_RX_DATA_REG read_data3;
#if 1
DSI_T0_INS t0;
#if ENABLE_DSI_INTERRUPT
static const long WAIT_TIMEOUT = 2 * HZ; // 2 sec
long ret;
#endif
if (DSI_REG->DSI_MODE_CTRL.MODE)
return 0;
if (buffer == NULL || buffer_size == 0)
return 0;
do
{
if(max_try_count == 0)
return 0;
max_try_count--;
recv_data_cnt = 0;
read_timeout_ms = 20;
DSI_WaitForEngineNotBusy();
t0.CONFG = 0x04; ///BTA
t0.Data0 = cmd;
if (buffer_size < 0x3)
t0.Data_ID = DSI_DCS_READ_PACKET_ID;
else
t0.Data_ID = DSI_GERNERIC_READ_LONG_PACKET_ID;
t0.Data1 = 0;
OUTREG32(&DSI_CMDQ_REG->data[0], AS_UINT32(&t0));
OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1);
///clear read ACK
//DSI_REG->DSI_RACK.DSI_RACK = 1;
//DSI_REG->DSI_INTSTA.RD_RDY = 1;
//DSI_REG->DSI_INTSTA.CMD_DONE = 1;
//DSI_REG->DSI_INTEN.RD_RDY = 1;
//DSI_REG->DSI_INTEN.CMD_DONE= 1;
OUTREGBIT(DSI_RACK_REG,DSI_REG->DSI_RACK,DSI_RACK,1);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,RD_RDY,1);
OUTREGBIT(DSI_INT_STATUS_REG,DSI_REG->DSI_INTSTA,CMD_DONE,1);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,RD_RDY,1);
OUTREGBIT(DSI_INT_ENABLE_REG,DSI_REG->DSI_INTEN,CMD_DONE,1);
OUTREG32(&DSI_REG->DSI_START, 0);
OUTREG32(&DSI_REG->DSI_START, 1);
/// the following code is to
/// 1: wait read ready
/// 2: ack read ready
/// 3: wait for CMDQ_DONE
/// 3: read data
#if ENABLE_DSI_INTERRUPT
ret = wait_event_interruptible_timeout(_dsi_dcs_read_wait_queue,
!_IsEngineBusy(),
WAIT_TIMEOUT);
if (0 == ret)
{
xlog_printk(ANDROID_LOG_WARN, "DSI", " Wait for DSI engine read ready timeout!\n");
DSI_DumpRegisters();
///do necessary reset here
//DSI_REG->DSI_RACK.DSI_RACK = 1;
OUTREGBIT(DSI_RACK_REG,DSI_REG->DSI_RACK,DSI_RACK,1);
DSI_Reset();
return 0;
}
截取了一部分,你可以把read_timeout_ms改成100ms
非常感谢!你做兼容成功了吗
我试过修改过read_timeout_ms就可以读到ID了!不修改这值前一直都读不到ID!
还是我们公司给力 ,支持一下 。
好同志。
最近好忙,都没时间试试,希望能跟你的一样
请问,蒋总,为什么要改20为100的呢?
[FAQ07597]72 LCM兼容问题处理方法
[DESCRIPTION]
MT6572平台LCM无法实现兼容,compare ID时读取的ID值不正确。
[SOLUTION]
1. 先申请72 LCM兼容的patch:ALPS00671704;
2. 若合入patch后,若依然失败,查看compare id过程中有read ready timeout信息,修改如下函数:
函数DSI_dcs_read_reg_v2( ...)中
修改语句read_timeout_ms=0; //部分IC反馈较慢,需增长该等待时间,例如改为
100,
3. 进行如上两步操作后,基本可解决兼容问题。若依然失败,与LCM IC的FAE确认
lcm_compare_id函数是否正确,确认读取的寄存器是否正确。
4. 若认为lcm_compare_id函数没有问题,查看log检查流程是否正确,看看是否有明
显错误信息。
5 若流程正常,就是ID读取不正确,需要测量波形,将波形发给LCM IC的FAE检查
,看是否满足其时序要求。
6 另外请确保上面操作之前,硬件没有问题,比如可以换屏测试。
谢谢,好详细啊。
Wait for DSI engine read ready timeout 这个是什么意思?LOG中出现了这个
就是读超时。
同时,屏能正常显示,但实际上,ID是错误的。
DSI read packet_type is 0x1a 这个有什么含义吗?
读到的ID,有一个正确的,有一个错误的,这个是怎么回事呢?
顶一个!
只是MIPI的才会有读不到ID的问题吗?
这个要收藏下 遇到了就能解决了
我现在也碰到这个问题,兼容屏是:otm9605a_qhd_dsi_vdo、NT35517_LG5_0_qhd_mipi,一直读不到ID,read_timeout_ms 改成100后还是没有读到ID,高手们指导一下,万分感谢!~
读ID的寄存器设置对了吗
因为没有引出UART,所以设一个全局变量在lcm_compare_id()函数里做修改,在TP的函数里打印信息,显示变量一直没有变动,怀疑压根没走lcm_compare_id()函数
mk里面定义两个以上的屏会自动跑到compare ID函数里面,如果只定义了一个屏,可以在init里面调用一下
屏已配置两个,在lcm_init(),lcm_resume()里面调用lcm_compare_id(),均开不了机。在lcm_compare_id()赋值全局变量,在TP里面打印,LOG显示一直是初始赋值,没变过。
现在是什么情况呢?
