微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 6572兼容LCM无法独到屏的ID?

6572兼容LCM无法独到屏的ID?

时间:10-02 整理:3721RD 点击:
版本是JB3,之前做屏兼容的时候读出来的都是固定值。后来打了个path,说是解决屏兼容的问题的,现在读的话,读出来的全部是0000,有人做得了吗?

我们也读不出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显示一直是初始赋值,没变过。

现在是什么情况呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top