您尚未登录。

楼主 # 昨天 10:21:11

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

全志触摸屏扫不到地址是怎么回事 求助!!!

驱动:

/*
 * drivers/input/touchscreen/ft5x0x_ts.c
 *
 * FocalTech ft5x TouchScreen driver.
 *
 * Copyright (c) 2010  Focal tech Ltd.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 *
 *	note: only support mulititouch	Wenfs 2010-10-01
 *  for this touchscreen to work, it's slave addr must be set to 0x7e | 0x70
 */
#include <linux/i2c.h>
#include <linux/input.h>
#include "ft5x_ts.h"
#ifdef CONFIG_HAS_EARLYSUSPEND
#include <linux/pm.h>
#include <linux/earlysuspend.h>
#endif
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <linux/async.h>
#include <linux/hrtimer.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/gpio.h>
#include <asm/irq.h>
#include <linux/io.h>
#include <linux/uaccess.h>
#include "../../init-input.h"



#define CONFIG_SUPPORT_FTS_CTP_UPG

#define FOR_TSLIB_TEST
#ifdef TOUCH_KEY_SUPPORT
#define TOUCH_KEY_FOR_EVB13
#ifdef TOUCH_KEY_FOR_ANGDA
#define TOUCH_KEY_X_LIMIT	        (60000)
#define TOUCH_KEY_NUMBER	        (4)
#endif
#ifdef TOUCH_KEY_FOR_EVB13
#define TOUCH_KEY_LOWER_X_LIMIT	        (848)
#define TOUCH_KEY_HIGHER_X_LIMIT	(852)
#define TOUCH_KEY_NUMBER	        (5)
#endif
#endif


/* FT5X02_CONFIG */
#define FT5X02_CONFIG_NAME "fttpconfig_5x02public.ini"
extern int ft5x02_Init_IC_Param(struct i2c_client *client);
extern int ft5x02_get_ic_param(struct i2c_client *client);
extern int ft5x02_Get_Param_From_Ini(char *config_name);

struct i2c_dev{
	    struct list_head list;
        struct i2c_adapter *adap;
        struct device *dev;
};

static struct class *i2c_dev_class;
static LIST_HEAD (i2c_dev_list);
static DEFINE_SPINLOCK(i2c_dev_list_lock);


struct Upgrade_Info {
	u16 delay_aa;		/*delay of write FT_UPGRADE_AA */
	u16 delay_55;		/*delay of write FT_UPGRADE_55 */
	u8 upgrade_id_1;	/*upgrade id 1 */
	u8 upgrade_id_2;	/*upgrade id 2 */
	u16 delay_readid;	/*delay of read id */
};

#define FT5X_NAME	"ft5x_ts"

static struct i2c_client *this_client;

#ifdef TOUCH_KEY_SUPPORT
static int key_tp  = 0;
static int key_val = 0;
#endif

/*********************************************************************************************/
#define CTP_IRQ_NUMBER                  (config_info.int_number)
#define CTP_IRQ_MODE                    (IRQF_TRIGGER_LOW | IRQF_ONESHOT)
#define SCREEN_MAX_X			(screen_max_x)
#define SCREEN_MAX_Y			(screen_max_y)
#define CTP_NAME			 FT5X_NAME
#define PRESS_MAX			(255)

static int screen_max_x = 0;
static int screen_max_y = 0;
static int revert_x_flag = 0;
static int revert_y_flag = 0;
static int exchange_x_y_flag = 0;
static __u32 twi_id = 0;

static struct ctp_config_info config_info = {
	.input_type = CTP_TYPE,
	.name = NULL,
	.int_number = 0,
};

static u32 debug_mask = 0;

enum{
	DEBUG_INIT = 1U << 0,
	DEBUG_SUSPEND = 1U << 1,
	DEBUG_INT_INFO = 1U << 2,
	DEBUG_X_Y_INFO = 1U << 3,
	DEBUG_KEY_INFO = 1U << 4,
	DEBUG_WAKEUP_INFO = 1U << 5,
	DEBUG_OTHERS_INFO = 1U << 6,
};

#define dprintk(level_mask,fmt,arg...)    if(unlikely(debug_mask & level_mask)) \
        printk("***CTP***"fmt, ## arg)
module_param_named(debug_mask,debug_mask,int,S_IRUGO | S_IWUSR | S_IWGRP);
/*********************************************************************************************/
/*------------------------------------------------------------------------------------------*/
/* Addresses to scan */
static const unsigned short normal_i2c[2] = {0x38,I2C_CLIENT_END};
static const int chip_id_value[] = {0x55,0x06,0x08,0x02,0xa3};
static int chip_id = 0;

static void ft5x_resume_events(struct work_struct *work);
struct workqueue_struct *ft5x_resume_wq;
static DECLARE_WORK(ft5x_resume_work, ft5x_resume_events);

static void ft5x_init_events(struct work_struct *work);
struct workqueue_struct *ft5x_wq;
static DECLARE_WORK(ft5x_init_work, ft5x_init_events);
/*------------------------------------------------------------------------------------------*/

static int ctp_detect(struct i2c_client *client, struct i2c_board_info *info)
{
	struct i2c_adapter *adapter = client->adapter;
        int ret = 0;

        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
                return -ENODEV;

	if(twi_id == adapter->nr){

	        ret = i2c_smbus_read_byte_data(client,0xA3);
		if(ret == -70) {
			msleep(10);
			ret = i2c_smbus_read_byte_data(client,0xA3);
		}

        dprintk(DEBUG_INIT,"addr:0x%x,chip_id_value:0x%x\n",client->addr,ret);
        if(ret < 0){
            printk("%s:I2C connection might be something wrong ! \n",__func__);
        	return -ENODEV;
		} else {

            strlcpy(info->type, CTP_NAME, I2C_NAME_SIZE);
			chip_id = ret;
    		return 0;
		}

	}else{
		return -ENODEV;
	}
}

/**
 * ctp_print_info - sysconfig print function
 * return value:
 *
 */
static void ctp_print_info(struct ctp_config_info info,int debug_level)
{
	if(debug_level == DEBUG_INIT)
	{
		dprintk(DEBUG_INIT,"info.ctp_used:%d\n",info.ctp_used);
		dprintk(DEBUG_INIT,"info.twi_id:%d\n",info.twi_id);
		dprintk(DEBUG_INIT,"info.screen_max_x:%d\n",info.screen_max_x);
		dprintk(DEBUG_INIT,"info.screen_max_y:%d\n",info.screen_max_y);
		dprintk(DEBUG_INIT,"info.revert_x_flag:%d\n",info.revert_x_flag);
		dprintk(DEBUG_INIT,"info.revert_y_flag:%d\n",info.revert_y_flag);
		dprintk(DEBUG_INIT,"info.exchange_x_y_flag:%d\n",info.exchange_x_y_flag);
		dprintk(DEBUG_INIT,"info.irq_gpio_number:%d\n",info.irq_gpio.gpio);
		dprintk(DEBUG_INIT,"info.wakeup_gpio_number:%d\n",info.wakeup_gpio.gpio);
	}
}

/**
 * ctp_wakeup - function
 *
 */
static int ctp_wakeup(int status,int ms)
{
	dprintk(DEBUG_INIT,"***CTP*** %s:status:%d,ms = %d\n",__func__,status,ms);

	if (status == 0) {

		if(ms == 0) {
			__gpio_set_value(config_info.wakeup_gpio.gpio, 0);
		}else {
			__gpio_set_value(config_info.wakeup_gpio.gpio, 0);
			msleep(ms);
			__gpio_set_value(config_info.wakeup_gpio.gpio, 1);
		}
	}
	if (status == 1) {
		if(ms == 0) {
			__gpio_set_value(config_info.wakeup_gpio.gpio, 1);
		}else {
			__gpio_set_value(config_info.wakeup_gpio.gpio, 1);
			msleep(ms);
			__gpio_set_value(config_info.wakeup_gpio.gpio, 0);
		}
	}
	msleep(5);

	return 0;
}

int fts_ctpm_fw_upgrade_with_i_file(void);

static struct i2c_dev *i2c_dev_get_by_minor(unsigned index)
{
	struct i2c_dev *i2c_dev = NULL;
	spin_lock(&i2c_dev_list_lock);

	list_for_each_entry(i2c_dev,&i2c_dev_list,list){
		dprintk(DEBUG_OTHERS_INFO,"--line = %d ,i2c_dev->adapt->nr = %d,index = %d.\n",\
		        __LINE__,i2c_dev->adap->nr,index);
		if(i2c_dev->adap->nr == index){
		     goto found;
		}
	}
	i2c_dev = NULL;

found:
	spin_unlock(&i2c_dev_list_lock);

	return i2c_dev ;
}

static struct i2c_dev *get_free_i2c_dev(struct i2c_adapter *adap)
{
	struct i2c_dev *i2c_dev;

	if (adap->nr >= I2C_MINORS){
		dprintk(DEBUG_OTHERS_INFO,"i2c-dev:out of device minors (%d) \n",adap->nr);
		return ERR_PTR (-ENODEV);
	}

	i2c_dev = kzalloc(sizeof(*i2c_dev), GFP_KERNEL);
	if (!i2c_dev){
		return ERR_PTR(-ENOMEM);
	}
	i2c_dev->adap = adap;

	spin_lock(&i2c_dev_list_lock);
	list_add_tail(&i2c_dev->list, &i2c_dev_list);
	spin_unlock(&i2c_dev_list_lock);

	return i2c_dev;
}


static int ft5x_i2c_rxdata(char *rxdata, int length);

struct ts_event {
	u16	x1;
	u16	y1;
	u16	x2;
	u16	y2;
	u16	x3;
	u16	y3;
	u16	x4;
	u16	y4;
	u16	x5;
	u16	y5;
	u16	pressure;
	s16     touch_ID1;
	s16     touch_ID2;
	s16     touch_ID3;
	s16     touch_ID4;
	s16     touch_ID5;
        u8      touch_point;
};

struct ft5x_ts_data {
	struct input_dev	*input_dev;
	struct ts_event		event;
	struct work_struct 	pen_event_work;
	struct workqueue_struct *ts_workqueue;
#ifdef CONFIG_HAS_EARLYSUSPEND
	struct early_suspend	early_suspend;
#endif
    bool is_suspended;
};


/* ---------------------------------------------------------------------
*
*   Focal Touch panel upgrade related driver
*
*
----------------------------------------------------------------------*/

typedef enum
{
	ERR_OK,
	ERR_MODE,
	ERR_READID,
	ERR_ERASE,
	ERR_STATUS,
	ERR_ECC,
	ERR_DL_ERASE_FAIL,
	ERR_DL_PROGRAM_FAIL,
	ERR_DL_VERIFY_FAIL
}E_UPGRADE_ERR_TYPE;

typedef unsigned char         FTS_BYTE;     //8 bit
typedef unsigned short        FTS_WORD;    //16 bit
typedef unsigned int          FTS_DWRD;    //16 bit
typedef unsigned char         FTS_BOOL;    //8 bit

#define FTS_NULL                0x0
#define FTS_TRUE                0x01
#define FTS_FALSE               0x0

#define I2C_CTPM_ADDRESS        (0x3b)

static void delay_ms(FTS_WORD  w_ms)
{
	//platform related, please implement this function
	msleep( w_ms );
}

void delay_qt_ms(unsigned long  w_ms)
{
	unsigned long i;
	unsigned long j;

	for (i = 0; i < w_ms; i++)
	{
		for (j = 0; j < 1000; j++)
		{
			 udelay(1);
		}
	}
}
/*
[function]:
    callback: read data from ctpm by i2c interface,implemented by special user;
[parameters]:
    bt_ctpm_addr[in]    :the address of the ctpm;
    pbt_buf[out]        :data buffer;
    dw_lenth[in]        :the length of the data buffer;
[return]:
    FTS_TRUE     :success;
    FTS_FALSE    :fail;
*/
int i2c_read_interface(u8 bt_ctpm_addr, u8* pbt_buf, u16 dw_lenth)
{
	int ret;

	ret = i2c_master_recv(this_client, pbt_buf, dw_lenth);

	if(ret != dw_lenth){
		printk("ret = %d. \n", ret);
		printk("i2c_read_interface error\n");
		return FTS_FALSE;
	}

	return FTS_TRUE;
}

/*
[function]:
    callback: write data to ctpm by i2c interface,implemented by special user;
[parameters]:
    bt_ctpm_addr[in]    :the address of the ctpm;
    pbt_buf[in]        :data buffer;
    dw_lenth[in]        :the length of the data buffer;
[return]:
    FTS_TRUE     :success;
    FTS_FALSE    :fail;
*/
int i2c_write_interface(u8 bt_ctpm_addr, u8* pbt_buf, u16 dw_lenth)
{
	int ret;
	ret=i2c_master_send(this_client, pbt_buf, dw_lenth);
	if(ret != dw_lenth){
		printk("i2c_write_interface error\n");
		return FTS_FALSE;
	}

	return FTS_TRUE;
}


/***************************************************************************************/

/*
[function]:
    read out the register value.
[parameters]:
    e_reg_name[in]    :register name;
    pbt_buf[out]    :the returned register value;
    bt_len[in]        :length of pbt_buf, should be set to 2;
[return]:
    FTS_TRUE    :success;
    FTS_FALSE    :io fail;
*/
u8 fts_register_read(u8 e_reg_name, u8* pbt_buf, u8 bt_len)
{
	u8 read_cmd[3]= {0};
	u8 cmd_len     = 0;

	read_cmd[0] = e_reg_name;
	cmd_len = 1;

	/*call the write callback function*/
	//    if(!i2c_write_interface(I2C_CTPM_ADDRESS, &read_cmd, cmd_len))
	//    {
	//        return FTS_FALSE;
	//    }


	if(!i2c_write_interface(I2C_CTPM_ADDRESS, read_cmd, cmd_len))	{//change by zhengdixu
		return FTS_FALSE;
	}

	/*call the read callback function to get the register value*/
	if(!i2c_read_interface(I2C_CTPM_ADDRESS, pbt_buf, bt_len)){
		return FTS_FALSE;
	}
	return FTS_TRUE;
}

/*
[function]:
    write a value to register.
[parameters]:
    e_reg_name[in]    :register name;
    pbt_buf[in]        :the returned register value;
[return]:
    FTS_TRUE    :success;
    FTS_FALSE    :io fail;
*/
int fts_register_write(u8 e_reg_name, u8 bt_value)
{
	FTS_BYTE write_cmd[2] = {0};

	write_cmd[0] = e_reg_name;
	write_cmd[1] = bt_value;

	/*call the write callback function*/
	//return i2c_write_interface(I2C_CTPM_ADDRESS, &write_cmd, 2);
	return i2c_write_interface(I2C_CTPM_ADDRESS, write_cmd, 2); //change by zhengdixu
}

/*
[function]:
    send a command to ctpm.
[parameters]:
    btcmd[in]        :command code;
    btPara1[in]    :parameter 1;
    btPara2[in]    :parameter 2;
    btPara3[in]    :parameter 3;
    num[in]        :the valid input parameter numbers, if only command code needed and no parameters followed,then the num is 1;
[return]:
    FTS_TRUE    :success;
    FTS_FALSE    :io fail;
*/
int cmd_write(u8 btcmd,u8 btPara1,u8 btPara2,u8 btPara3,u8 num)
{
	FTS_BYTE write_cmd[4] = {0};

	write_cmd[0] = btcmd;
	write_cmd[1] = btPara1;
	write_cmd[2] = btPara2;
	write_cmd[3] = btPara3;
	//return i2c_write_interface(I2C_CTPM_ADDRESS, &write_cmd, num);
	return i2c_write_interface(I2C_CTPM_ADDRESS, write_cmd, num);//change by zhengdixu
}

/*
[function]:
    write data to ctpm , the destination address is 0.
[parameters]:
    pbt_buf[in]    :point to data buffer;
    bt_len[in]        :the data numbers;
[return]:
    FTS_TRUE    :success;
    FTS_FALSE    :io fail;
*/
int byte_write(u8* pbt_buf, u16 dw_len)
{
	return i2c_write_interface(I2C_CTPM_ADDRESS, pbt_buf, dw_len);
}

/*
[function]:
    read out data from ctpm,the destination address is 0.
[parameters]:
    pbt_buf[out]    :point to data buffer;
    bt_len[in]        :the data numbers;
[return]:
    FTS_TRUE    :success;
    FTS_FALSE    :io fail;
*/
int byte_read(u8* pbt_buf, u8 bt_len)
{
	return i2c_read_interface(I2C_CTPM_ADDRESS, pbt_buf, bt_len);
	//ft5x_i2c_rxdata
}


/*
[function]:
    burn the FW to ctpm.
[parameters]:(ref. SPEC)
    pbt_buf[in]    :point to Head+FW ;
    dw_lenth[in]:the length of the FW + 6(the Head length);
    bt_ecc[in]    :the ECC of the FW
[return]:
    ERR_OK        :no error;
    ERR_MODE    :fail to switch to UPDATE mode;
    ERR_READID    :read id fail;
    ERR_ERASE    :erase chip fail;
    ERR_STATUS    :status error;
    ERR_ECC        :ecc error.
*/


#define    FTS_PACKET_LENGTH       128 //2//4//8//16//32//64//128//256

static unsigned char CTPM_FW[]=
{
        #include "ft_app.i"
};
unsigned char fts_ctpm_get_i_file_ver(void)
{
        unsigned int ui_sz;
        ui_sz = sizeof(CTPM_FW);
        if (ui_sz > 2){
                return CTPM_FW[ui_sz - 2];
        }else{
                //TBD, error handling?
                return 0xff; //default value
        }
}

/*
*get upgrade information depend on the ic type
*/
static void fts_get_upgrade_info(struct Upgrade_Info *upgrade_info)
{
#ifdef WILLIAM_DEBUG
		printk("####ft5x chip_id=%d####\n", chip_id);
#endif
	switch (chip_id) {
	case 0x55:    //IC_FT5X06:
		upgrade_info->delay_55 = FT5X06_UPGRADE_55_DELAY;
		upgrade_info->delay_aa = FT5X06_UPGRADE_AA_DELAY;
		upgrade_info->upgrade_id_1 = FT5X06_UPGRADE_ID_1;
		upgrade_info->upgrade_id_2 = FT5X06_UPGRADE_ID_2;
		upgrade_info->delay_readid = FT5X06_UPGRADE_READID_DELAY;
		break;
	case 0x08:    //IC_FT5606IC_FT5506
		upgrade_info->delay_55 = FT5606_UPGRADE_55_DELAY;
		upgrade_info->delay_aa = FT5606_UPGRADE_AA_DELAY;
		upgrade_info->upgrade_id_1 = FT5606_UPGRADE_ID_1;
		upgrade_info->upgrade_id_2 = FT5606_UPGRADE_ID_2;
		upgrade_info->delay_readid = FT5606_UPGRADE_READID_DELAY;
		break;
	case 0x00:    //IC FT5316
	case 0x0a:    //IC FT5316
		upgrade_info->delay_55 = FT5316_UPGRADE_55_DELAY;
		upgrade_info->delay_aa = FT5316_UPGRADE_AA_DELAY;
		upgrade_info->upgrade_id_1 = FT5316_UPGRADE_ID_1;
		upgrade_info->upgrade_id_2 = FT5316_UPGRADE_ID_2;
		upgrade_info->delay_readid = FT5316_UPGRADE_READID_DELAY;
		break;
	default:
		break;
	}
}

E_UPGRADE_ERR_TYPE  ft5x06_ctpm_fw_upgrade(u8* pbt_buf, u16 dw_lenth)
{
        u8 reg_val[2] = {0};
        FTS_BOOL i_ret = 0;
        u16 i = 0;


        u16  packet_number;
        u16  j;
        u16  temp;
        u16  lenght;
        u8  packet_buf[FTS_PACKET_LENGTH + 6];
        //u8  auc_i2c_write_buf[10];
        u8 bt_ecc;

        struct  Upgrade_Info upgradeinfo = {0, 0, 0, 0 , 0};


	fts_get_upgrade_info(&upgradeinfo);

        /*********Step 1:Reset  CTPM *****/
        /*write 0xaa to register 0xfc*/
        //delay_ms(100);//µԴȥʱ
        fts_register_write(0xfc,0xaa);
        delay_ms(upgradeinfo.delay_aa);

        /*write 0x55 to register 0xfc*/
        fts_register_write(0xfc,0x55);
        printk("Step 1: Reset CTPM test\n");
        delay_ms(upgradeinfo.delay_55);

        /*********Step 2:Enter upgrade mode *****/
        //auc_i2c_write_buf[0] = 0x55;
        //auc_i2c_write_buf[1] = 0xaa;
        i = 0;
        do{
                i++;
                //i_ret = i2c_write_interface(I2C_CTPM_ADDRESS, auc_i2c_write_buf, 2);
		cmd_write(0x55,0xaa,0x00,0x00,2);
                printk("Step 2: Enter update mode. \n");
                delay_ms(5);
        }while((FTS_FALSE == i_ret) && i<5);

        /*********Step 3:check READ-ID***********************/
        /*send the opration head*/
	msleep(upgradeinfo.delay_readid);
	cmd_write(0x90,0x00,0x00,0x00,4);
	byte_read(reg_val,2);
	if (reg_val[0] == upgradeinfo.upgrade_id_1&& reg_val[1] == upgradeinfo.upgrade_id_2) {
		printk("Step 3: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]);
	}
	else {
		printk("Step 3: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]);
		return ERR_READID;
	}
	cmd_write(0xcd,0x00,0x00,0x00,1);
	byte_read(reg_val,1);

        /*Step 4:erase app and panel paramenter area*/
        cmd_write(0x61,0x00,0x00,0x00,1);
        msleep(2000);
	cmd_write(0x63,0x00,0x00,0x00,1);
        msleep(100);
        printk("Step 4: erase. \n");

        /*********Step 5:write firmware(FW) to ctpm flash*********/
        bt_ecc = 0;
        printk("Step 5: start upgrade. \n");
        dw_lenth = dw_lenth - 8;
        packet_number = (dw_lenth) / FTS_PACKET_LENGTH;
        packet_buf[0] = 0xbf;
        packet_buf[1] = 0x00;
        for (j=0;j<packet_number;j++){
                temp = j * FTS_PACKET_LENGTH;
                packet_buf[2] = (FTS_BYTE)(temp>>8);
                packet_buf[3] = (FTS_BYTE)temp;
                lenght = FTS_PACKET_LENGTH;
                packet_buf[4] = (FTS_BYTE)(lenght>>8);
                packet_buf[5] = (FTS_BYTE)lenght;

                for (i=0;i<FTS_PACKET_LENGTH;i++){
                        packet_buf[6+i] = pbt_buf[j*FTS_PACKET_LENGTH + i];
                        bt_ecc ^= packet_buf[6+i];
                }

                byte_write(&packet_buf[0],FTS_PACKET_LENGTH + 6);
                //delay_ms(FTS_PACKET_LENGTH/6 + 1);
		msleep(FTS_PACKET_LENGTH/6 + 1);
                if ((j * FTS_PACKET_LENGTH % 1024) == 0){
                        printk("upgrade the 0x%x th byte.\n", ((unsigned int)j) * FTS_PACKET_LENGTH);
                }
        }

        if ((dw_lenth) % FTS_PACKET_LENGTH > 0){
                temp = packet_number * FTS_PACKET_LENGTH;
                packet_buf[2] = (FTS_BYTE)(temp>>8);
                packet_buf[3] = (FTS_BYTE)temp;

                temp = (dw_lenth) % FTS_PACKET_LENGTH;
                packet_buf[4] = (FTS_BYTE)(temp>>8);
                packet_buf[5] = (FTS_BYTE)temp;

                for (i=0;i<temp;i++){
                        packet_buf[6+i] = pbt_buf[ packet_number*FTS_PACKET_LENGTH + i];
                        bt_ecc ^= packet_buf[6+i];
                }

                byte_write(&packet_buf[0],temp+6);
                //delay_ms(20);
		msleep(20);
        }

        //send the last six byte
        for (i = 0; i<6; i++){
                temp = 0x6ffa + i;
                packet_buf[2] = (FTS_BYTE)(temp>>8);
                packet_buf[3] = (FTS_BYTE)temp;
                temp =1;
                packet_buf[4] = (FTS_BYTE)(temp>>8);
                packet_buf[5] = (FTS_BYTE)temp;
                packet_buf[6] = pbt_buf[ dw_lenth + i];
                bt_ecc ^= packet_buf[6];

                byte_write(&packet_buf[0],7);
                //delay_ms(20);
		msleep(20);
        }

        /*********Step 6: read out checksum***********************/
        /*send the opration head*/
        //cmd_write(0xcc,0x00,0x00,0x00,1);//0xccĴַȥһֽ
        // byte_read(reg_val,1);//change by zhengdixu

	fts_register_read(0xcc, reg_val,1);
        printk("Step 6:  ecc read 0x%x, new firmware 0x%x. \n", reg_val[0], bt_ecc);
        if(reg_val[0] != bt_ecc){
                //cmd_write(0x07,0x00,0x00,0x00,1);
		printk("ecc error! \n");
		return ERR_ECC;
        }

        /*********Step 7: reset the new FW***********************/
        cmd_write(0x07,0x00,0x00,0x00,1);
        msleep(300);
        return ERR_OK;
}

E_UPGRADE_ERR_TYPE  ft5x02_ctpm_fw_upgrade(u8* pbt_buf, u32 dw_lenth)
{

	u8 reg_val[2] = {0};
	u32 i = 0;

	u32  packet_number;
	u32  j;
	u32  temp;
	u32  lenght;
	u8	packet_buf[FTS_PACKET_LENGTH + 6];
	//u8	auc_i2c_write_buf[10];
	u8	bt_ecc;

	//struct timeval begin_tv, end_tv;
	//do_gettimeofday(&begin_tv);

	for (i=0; i<16; i++) {
		/*********Step 1:Reset	CTPM *****/
		/*write 0xaa to register 0xfc*/
		fts_register_write(0xfc,0xaa);
		msleep(30);
		/*write 0x55 to register 0xfc*/
		fts_register_write(0xfc,0x55);
		//delay_qt_ms(18);
		delay_qt_ms(25);
		/*********Step 2:Enter upgrade mode *****/
		#if 0
		//auc_i2c_write_buf[0] = 0x55;
		//auc_i2c_write_buf[1] = 0xaa;
		do
		{
			i ++;
			//i_ret = ft5x02_i2c_Write(client, auc_i2c_write_buf, 2);
			//i_ret = i2c_write_interface(I2C_CTPM_ADDRESS, auc_i2c_write_buf, 2);
			cmd_write(0x55,0xaa,0x00,0x00,2);
			delay_qt_ms(5);
		}while(i_ret <= 0 && i < 5 );
		#else
		//auc_i2c_write_buf[0] = 0x55;
		//ft5x02_i2c_Write(client, auc_i2c_write_buf, 1);
		cmd_write(0x55,0x00,0x00,0x00,1);
		delay_qt_ms(1);
		//auc_i2c_write_buf[0] = 0xaa;
		//ft5x02_i2c_Write(client, auc_i2c_write_buf, 1);
		cmd_write(0xaa,0x00,0x00,0x00,1);
		#endif

		/*********Step 3:check READ-ID***********************/
		delay_qt_ms(1);

		//ft5x02_upgrade_send_head(client);
		cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
		//auc_i2c_write_buf[0] = 0x90;
		//auc_i2c_write_buf[1] = auc_i2c_write_buf[2] = auc_i2c_write_buf[3] = 0x00;
		//ft5x02_i2c_Read(client, auc_i2c_write_buf, 4, reg_val, 2);
		cmd_write(0x90,0x00,0x00,0x00,4);
		byte_read(reg_val,2);

		if (reg_val[0] == 0x79
			&& reg_val[1] == 0x02) {
			//dev_dbg(&client->dev, "[FTS] Step 3: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]);
			printk("[FTS] Step 3: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]);
			break;
		} else {
			printk("[FTS] Step 3 ERROR: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]);
			//delay_qt_ms(1);
		}
	}
	if (i >= 6)
		return ERR_READID;
	/********Step 4:enable write function*/
	//ft5x02_upgrade_send_head(client);
	cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
	//auc_i2c_write_buf[0] = 0x06;
	//ft5x02_i2c_Write(client, auc_i2c_write_buf, 1);
	cmd_write(0x06,0x00,0x00,0x00,1);

	/*********Step 5:write firmware(FW) to ctpm flash*********/
	bt_ecc = 0;

	packet_number = (dw_lenth) / FTS_PACKET_LENGTH;

	packet_buf[0] = 0xbf;
	packet_buf[1] = 0x00;
	for (j=0; j<packet_number; j++) {
		temp = j * FTS_PACKET_LENGTH;
		packet_buf[2] = (u8)(temp>>8);
		packet_buf[3] = (u8)temp;
		lenght = FTS_PACKET_LENGTH;
		packet_buf[4] = (u8)(lenght>>8);
		packet_buf[5] = (u8)lenght;
		if(temp>=0x4c00 && temp <(0x4c00+512))
			continue;

		for (i=0; i<FTS_PACKET_LENGTH; i++) {
			packet_buf[6+i] = pbt_buf[j*FTS_PACKET_LENGTH + i];
			bt_ecc ^= packet_buf[6+i];
		}
		//ft5x02_upgrade_send_head(client);
		cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
		//ft5x02_i2c_Write(client, packet_buf, FTS_PACKET_LENGTH+6);
		byte_write(&packet_buf[0],FTS_PACKET_LENGTH + 6);
		delay_qt_ms(2);
	}

	if ((dw_lenth) % FTS_PACKET_LENGTH > 0) {
		temp = packet_number * FTS_PACKET_LENGTH;
		packet_buf[2] = (u8)(temp>>8);
		packet_buf[3] = (u8)temp;

		temp = (dw_lenth) % FTS_PACKET_LENGTH;
		packet_buf[4] = (u8)(temp>>8);
		packet_buf[5] = (u8)temp;

		for (i=0; i<temp; i++) {
			packet_buf[6+i] = pbt_buf[ packet_number*FTS_PACKET_LENGTH + i];
			bt_ecc ^= packet_buf[6+i];
		}
		//ft5x02_upgrade_send_head(client);
		cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
		//ft5x02_i2c_Write(client, packet_buf, temp+6);
		byte_write(&packet_buf[0],temp + 6);
		delay_qt_ms(2);
	}

	/********Disable write function*/
	//ft5x02_upgrade_send_head(client);
	cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
	//auc_i2c_write_buf[0] = 0x04;
	//ft5x02_i2c_Write(client, auc_i2c_write_buf, 1);
	cmd_write(0x04,0x00,0x00,0x00,1);

	delay_qt_ms(1);
	/*********Step 6: read out checksum***********************/
	//ft5x02_upgrade_send_head(client);
	cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
	//auc_i2c_write_buf[0] = 0xcc;
	//ft5x02_i2c_Read(client, auc_i2c_write_buf, 1, reg_val, 1);
	cmd_write(0xcc,0x00,0x00,0x00,1);
	byte_read(reg_val,1);

	if (reg_val[0] != bt_ecc) {
		printk("[FTS]--ecc error! FW=%02x bt_ecc=%02x\n", reg_val[0], bt_ecc);
		//return -EIO;
		return ERR_READID;
	}

	/*********Step 7: reset the new FW***********************/
	//ft5x02_upgrade_send_head(client);
	cmd_write(0xFA,0xFA,0x00,0x00,2);//ft5x02_upgrade_send_head
	//auc_i2c_write_buf[0] = 0x07;
	//ft5x02_i2c_Write(client, auc_i2c_write_buf, 1);
	cmd_write(0x07,0x00,0x00,0x00,1);
	msleep(200);  /*make sure CTP startup normally*/
	//DBG("-------upgrade successful-----\n");

	//do_gettimeofday(&end_tv);
	//DBG("cost time=%lu.%lu\n", end_tv.tv_sec-begin_tv.tv_sec,
	//		end_tv.tv_usec-begin_tv.tv_usec);
	return ERR_OK;
}

int fts_ctpm_auto_clb(void)
{
        unsigned char uc_temp;
        unsigned char i ;

        printk("[FTS] start auto CLB.\n");
        msleep(200);
        fts_register_write(0, 0x40);
        //delay_ms(100);                       //make sure already enter factory mode
	msleep(100);
        fts_register_write(2, 0x4);               //write command to start calibration
        //delay_ms(300);
	msleep(300);
        for(i=0;i<100;i++){
                fts_register_read(0,&uc_temp,1);
                if (((uc_temp&0x70)>>4) == 0x0){    //return to normal mode, calibration finish
                        break;
                }
                //delay_ms(200);
		msleep(200);
                printk("[FTS] waiting calibration %d\n",i);
        }

        printk("[FTS] calibration OK.\n");

        msleep(300);
        fts_register_write(0, 0x40);          //goto factory mode
        delay_ms(100);                       //make sure already enter factory mode
        fts_register_write(2, 0x5);          //store CLB result
        delay_ms(300);
        fts_register_write(0, 0x0);          //return to normal mode
        msleep(300);
        printk("[FTS] store CLB result OK.\n");
        return 0;
}
void getVerNo(u8* buf, int len)
{
	u8 start_reg=0x0;
	int ret = -1;
	//int status = 0;
	int i = 0;
	start_reg = 0xa6;
	(void)i;

#if 0
	printk("read 0xa6 one time. \n");
	if(FTS_FALSE == fts_register_read(0xa6, buf, len)){
                return ;
	}

	for (i=0; i< len; i++) {
		printk("=========buf[%d] = 0x%x \n", i, buf);
	}

	printk("read 0xa8. \n");
	if(FTS_FALSE == fts_register_read(0xa8, buf, len)){
                return ;
	}
	for (i=0; i< len; i++) {
		printk("=========buf[%d] = 0x%x \n", i, buf);
	}

	ft5x_i2c_rxdata(buf, len);

        for (i=0; i< len; i++) {
                printk("=========buf[%d] = 0x%x \n", i, buf);
        }

        byte_read(buf, len);
        for (i=0; i< len; i++) {
                printk("=========buf[%d] = 0x%x \n", i, buf);
        }

#endif

	ret =fts_register_read(0xa6, buf, len);
	//et = ft5406_read_regs(ft5x0x_ts_data_test->client,start_reg, buf, 2);
	if (ret < 0) {
		printk("%s read_data i2c_rxdata failed: %d\n", __func__, ret);
		return;
	}
#if 0
	for (i=0; i<2; i++) {
		printk("=========buf[%d] = 0x%x \n", i, buf);
	}
	return;
#endif
}

int fts_ctpm_fw_upgrade_with_i_file(void)
{
	FTS_BYTE*     pbt_buf = FTS_NULL;
	int i_ret = 0;
	unsigned char a;
	unsigned char b;
#define BUFFER_LEN (2)            //len == 2
	unsigned char buf[BUFFER_LEN] = {0};

	//=========FW upgrade========================*/
	printk("%s. \n", __func__);

	pbt_buf = CTPM_FW;
	//msleep(200);
        // cmd_write(0x07,0x00,0x00,0x00,1);
	msleep(100);
	getVerNo(buf, BUFFER_LEN);
	a = buf[0];
	b = fts_ctpm_get_i_file_ver();
	/* printk("a == %hu,  b== %hu \n",a, b);*/
	/*
	 * when the firmware in touch panel maybe corrupted,
	 * or the firmware in host flash is new, need upgrade
	 */
	if ( 0xa6 == a || a != b ){
		/*call the upgrade function*/
		if(chip_id == 0x55 || chip_id == 0x08 || chip_id == 0x00 || chip_id == 0x0a){
			i_ret =  ft5x06_ctpm_fw_upgrade(&pbt_buf[0],sizeof(CTPM_FW));
			if (i_ret != 0){
				printk("[FTS] upgrade failed i_ret = %d.\n", i_ret);
			}
			else {
				printk("[FTS] upgrade successfully.\n");
#ifdef AUTO_CLB
				fts_ctpm_auto_clb();  //start auto CLB
#endif
			}
		}
	}
	return i_ret;

}

unsigned char fts_ctpm_get_upg_ver(void)
{
	unsigned int ui_sz;
	ui_sz = sizeof(CTPM_FW);
	if (ui_sz > 2){
		return CTPM_FW[0];
	}
	else{
		return 0xff; //default value
	}
}

static int ft5x_i2c_rxdata(char *rxdata, int length)
{
	int ret;

	struct i2c_msg msgs[] = {
		{
			.addr	= this_client->addr,
			.flags	= 0,
			.len	= 1,
			.buf	= rxdata,
		},
		{
			.addr	= this_client->addr,
			.flags	= I2C_M_RD,
			.len	= length,
			.buf	= rxdata,
		},
	};
	ret = i2c_transfer(this_client->adapter, msgs, 2);
	if (ret < 0)
		printk("msg %s i2c read error: %d\n", __func__, ret);

	return ret;
}

static int ft5x_i2c_txdata(char *txdata, int length)
{
	int ret;

	struct i2c_msg msg[] = {
		{
			.addr	= this_client->addr,
			.flags	= 0,
			.len	= length,
			.buf	= txdata,
		},
	};

   	//msleep(1);
	ret = i2c_transfer(this_client->adapter, msg, 1);
	if (ret < 0)
		pr_err("%s i2c write error: %d\n", __func__, ret);

	return ret;
}

static int ft5x_set_reg(u8 addr, u8 para)
{
	u8 buf[3];
	int ret = -1;

	buf[0] = addr;
	buf[1] = para;
	ret = ft5x_i2c_txdata(buf, 2);
	if (ret < 0) {
		pr_err("write reg failed! %#x ret: %d", buf[0], ret);
		return -1;
	}

	return 0;
}

static void ft5x_ts_release(void)
{
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
#ifdef CONFIG_FT5X0X_MULTITOUCH
#ifdef TOUCH_KEY_SUPPORT
	if(1 == key_tp){
		input_report_key(data->input_dev, key_val, 0);
		dprintk(DEBUG_KEY_INFO,"Release Key = %d\n",key_val);
	} else{
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, 0);
	}
#else
	input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, 0);
	input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 0);
#endif

	input_report_key(data->input_dev, BTN_TOUCH, 0);

#else
	input_report_abs(data->input_dev, ABS_PRESSURE, 0);
	input_report_key(data->input_dev, BTN_TOUCH, 0);
#endif

	input_sync(data->input_dev);
	return;

}

static int ft5x_read_data(void)
{
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
	struct ts_event *event = &data->event;
	unsigned char buf[32]={0};
	int ret = -1;

#ifdef CONFIG_FT5X0X_MULTITOUCH
	ret = ft5x_i2c_rxdata(buf, 31);
#else
	ret = ft5x_i2c_rxdata(buf, 31);
#endif
	if (ret < 0) {
		dprintk(DEBUG_X_Y_INFO,"%s read_data i2c_rxdata failed: %d\n", __func__, ret);
		return ret;
	}

	memset(event, 0, sizeof(struct ts_event));

	event->touch_point = buf[2] & 0x07;// 000 0111
	dprintk(DEBUG_X_Y_INFO,"touch point = %d\n",event->touch_point);

	if (event->touch_point == 0) {
		ft5x_ts_release();
		return 1;
	}

	switch (event->touch_point) {
	case 5:
		event->x5 = (s16)(buf[0x1b] & 0x0F)<<8 | (s16)buf[0x1c];
		event->y5 = (s16)(buf[0x1d] & 0x0F)<<8 | (s16)buf[0x1e];
		dprintk(DEBUG_X_Y_INFO,"source data:event->x5 = %d, event->y5 = %d. \n", event->x5, event->y5);
		if(1 == exchange_x_y_flag){
			swap(event->x5, event->y5);
		}
		if(1 == revert_x_flag){
			event->x5 = SCREEN_MAX_X - event->x5;
		}
		if(1 == revert_y_flag){
			event->y5 = SCREEN_MAX_Y - event->y5;
		}
		event->touch_ID5=(s16)(buf[0x1d] & 0xF0)>>4;

		dprintk(DEBUG_X_Y_INFO,"touch id : %d. \n",event->touch_ID5);
	case 4:
		event->x4 = (s16)(buf[0x15] & 0x0F)<<8 | (s16)buf[0x16];
		event->y4 = (s16)(buf[0x17] & 0x0F)<<8 | (s16)buf[0x18];
		dprintk(DEBUG_X_Y_INFO,"source data:event->x4 = %d, event->y4 = %d. \n", event->x4, event->y4);
		if(1 == exchange_x_y_flag){
			swap(event->x4, event->y4);
		}
		if(1 == revert_x_flag){
			event->x4 = SCREEN_MAX_X - event->x4;
		}
		if(1 == revert_y_flag){
			event->y4 = SCREEN_MAX_Y - event->y4;
		}
		event->touch_ID4=(s16)(buf[0x17] & 0xF0)>>4;

		dprintk(DEBUG_X_Y_INFO,"touch id : %d. \n",event->touch_ID4);
	case 3:
		event->x3 = (s16)(buf[0x0f] & 0x0F)<<8 | (s16)buf[0x10];
		event->y3 = (s16)(buf[0x11] & 0x0F)<<8 | (s16)buf[0x12];
		dprintk(DEBUG_X_Y_INFO,"source data:event->x3 = %d, event->y3 = %d. \n", event->x3, event->y3);
		if(1 == exchange_x_y_flag){
			swap(event->x3, event->y3);
		}
		if(1 == revert_x_flag){
			event->x3 = SCREEN_MAX_X - event->x3;
		}
		if(1 == revert_y_flag){
			event->y3 = SCREEN_MAX_Y - event->y3;
		}
		event->touch_ID3=(s16)(buf[0x11] & 0xF0)>>4;
		dprintk(DEBUG_X_Y_INFO,"touch id : %d. \n",event->touch_ID3);
	case 2:
		event->x2 = (s16)(buf[9] & 0x0F)<<8 | (s16)buf[10];
		event->y2 = (s16)(buf[11] & 0x0F)<<8 | (s16)buf[12];
		dprintk(DEBUG_X_Y_INFO,"source data:event->x2 = %d, event->y2 = %d. \n", event->x2, event->y2);
		if(1 == exchange_x_y_flag){
			swap(event->x2, event->y2);
		}
		if(1 == revert_x_flag){
			event->x2 = SCREEN_MAX_X - event->x2;
		}
		if(1 == revert_y_flag){
			event->y2 = SCREEN_MAX_Y - event->y2;
		}
		event->touch_ID2=(s16)(buf[0x0b] & 0xF0)>>4;

		dprintk(DEBUG_X_Y_INFO,"touch id : %d. \n",event->touch_ID2);
	case 1:
		event->x1 = (s16)(buf[3] & 0x0F)<<8 | (s16)buf[4];
		event->y1 = (s16)(buf[5] & 0x0F)<<8 | (s16)buf[6];
		dprintk(DEBUG_X_Y_INFO,"source data:event->x1 = %d, event->y1 = %d. \n", event->x1, event->y1);
		if(1 == exchange_x_y_flag){
			swap(event->x1, event->y1);
		}
		if(1 == revert_x_flag){
			event->x1 = SCREEN_MAX_X - event->x1;
		}
		if(1 == revert_y_flag){
			event->y1 = SCREEN_MAX_Y - event->y1;
		}
		event->touch_ID1=(s16)(buf[0x05] & 0xF0)>>4;
		dprintk(DEBUG_X_Y_INFO,"touch id : %d. \n",event->touch_ID1);
		break;
	default:
		return -1;
	}
	event->pressure = 20;
        return 0;
}

#ifdef TOUCH_KEY_LIGHT_SUPPORT
static void ft5x_lighting(void)
{
        ctp_key_light(1,15);
	return;
}
#endif

static void ft5x_report_multitouch(void)
{
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
	struct ts_event *event = &data->event;

#ifdef WILLIAM_DEBUG
	printk("####%s####\n", __func__);
#endif

#ifdef TOUCH_KEY_SUPPORT
	if(1 == key_tp){
		return;
	}
#endif
	if (event->touch_point)
		input_report_key(data->input_dev, BTN_TOUCH, 1);
	else
		input_report_key(data->input_dev, BTN_TOUCH, 0);

	switch(event->touch_point) {
	case 5:
		input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->touch_ID5);
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x5);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y5);
		input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 30);
		input_mt_sync(data->input_dev);
		dprintk(DEBUG_X_Y_INFO,"report data:===x5 = %d,y5 = %d ====\n",event->x5,event->y5);
	case 4:
		input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->touch_ID4);
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x4);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y4);
		input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 30);
		input_mt_sync(data->input_dev);
		dprintk(DEBUG_X_Y_INFO,"report data:===x4 = %d,y4 = %d ====\n",event->x4,event->y4);
	case 3:
		input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->touch_ID3);
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x3);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y3);
		input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 30);
		input_mt_sync(data->input_dev);
		dprintk(DEBUG_X_Y_INFO,"report data:===x3 = %d,y3 = %d ====\n",event->x3,event->y3);
	case 2:
		input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->touch_ID2);
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x2);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y2);
		input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 30);
		input_mt_sync(data->input_dev);
		dprintk(DEBUG_X_Y_INFO,"report data:===x2 = %d,y2 = %d ====\n",event->x2,event->y2);
	case 1:
		input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->touch_ID1);
		input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x1);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y1);
		input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 30);
		input_mt_sync(data->input_dev);
		dprintk(DEBUG_X_Y_INFO,"report data:===x1 = %d,y1 = %d ====\n",event->x1,event->y1);
		break;
	default:
		dprintk(DEBUG_X_Y_INFO,"report data:==touch_point default =\n");
		break;
	}

	input_sync(data->input_dev);
	return;
}

#ifndef CONFIG_FT5X0X_MULTITOUCH
static void ft5x_report_singletouch(void)
{
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
	struct ts_event *event = &data->event;

	if (event->touch_point == 1) {
		input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x1);
		input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y1);
		input_report_abs(data->input_dev, ABS_PRESSURE, event->pressure);
	}
	dprintk(DEBUG_X_Y_INFO,"report:===x1 = %d,y1 = %d ====\n",event->x1,event->y1);
	input_report_key(data->input_dev, BTN_TOUCH, 1);
	input_sync(data->input_dev);
	return;
}
#endif

#ifdef TOUCH_KEY_SUPPORT
static void ft5x_report_touchkey(void)
{
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
	struct ts_event *event = &data->event;

#ifdef TOUCH_KEY_FOR_ANGDA
	if((1==event->touch_point)&&(event->x1 > TOUCH_KEY_X_LIMIT)){
		key_tp = 1;
		if(event->y1 < 40){
			key_val = 1;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 1====\n");
		}else if(event->y1 < 90){
			key_val = 2;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 2 ====\n");
		}else{
			key_val = 3;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 3====\n");
		}
	} else{
		key_tp = 0;
	}
#endif
#ifdef TOUCH_KEY_FOR_EVB13
	if((1==event->touch_point)&&((event->x1 > TOUCH_KEY_LOWER_X_LIMIT)&&(event->x1<TOUCH_KEY_HIGHER_X_LIMIT))){
		key_tp = 1;
		if(event->y1 < 5){
			key_val = 1;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 1====\n");
		}else if((event->y1 < 45)&&(event->y1>35)){
			key_val = 2;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 2 ====\n");
		}else if((event->y1 < 75)&&(event->y1>65)){
			key_val = 3;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 3====\n");
		}else if ((event->y1 < 105)&&(event->y1>95))	{
			key_val = 4;
			input_report_key(data->input_dev, key_val, 1);
			input_sync(data->input_dev);
			dprintk(DEBUG_KEY_INFO,"===KEY 4====\n");
		}
	}else{
		key_tp = 0;
	}
#endif

#ifdef TOUCH_KEY_LIGHT_SUPPORT
	ft5x_lighting();
#endif
	return;
}
#endif

static void ft5x_report_value(void)
{

#ifdef TOUCH_KEY_SUPPORT
	ft5x_report_touchkey();
#endif

#ifdef CONFIG_FT5X0X_MULTITOUCH
	ft5x_report_multitouch();
#else	/* CONFIG_FT5X0X_MULTITOUCH*/
	ft5x_report_singletouch();
#endif	/* CONFIG_FT5X0X_MULTITOUCH*/
	return;
}

static void ft5x_ts_pen_irq_work(struct work_struct *work)
{
	int ret = -1;
	ret = ft5x_read_data();
	if (ret == 0) {
		ft5x_report_value();
	}
	dprintk(DEBUG_INT_INFO,"%s:ret:%d\n",__func__,ret);
}

irqreturn_t ft5x_ts_interrupt(int irq, void *dev_id)
{
	struct ft5x_ts_data *ft5x_ts = (struct ft5x_ts_data *)dev_id;
	dprintk(DEBUG_INT_INFO,"==========ft5x_ts TS Interrupt============\n");
	queue_work(ft5x_ts->ts_workqueue, &ft5x_ts->pen_event_work);
	return IRQ_HANDLED;
}

static void ft5x_resume_events (struct work_struct *work)
{
	int i = 0;
    int ret = 0;
	ctp_wakeup(0, 20);

#ifdef CONFIG_HAS_EARLYSUSPEND
	if(STANDBY_WITH_POWER_OFF != standby_level){
		goto standby_with_power_on;
	}
#endif

	if(chip_id == 0x02 ){
#ifdef FT5X02_CONFIG_INI
		if (ft5x02_Get_Param_From_Ini(FT5X02_CONFIG_NAME) >= 0)
			ft5x02_Init_IC_Param(this_client);
		else
			printk("Get ft5x02 param from INI file failed\n");
#else
		msleep(200);	/*wait...*/
		while(i<5){
			dprintk(DEBUG_INIT,"-----------------------------------------Init ic param\r\n");
			if (ft5x02_Init_IC_Param(this_client) >=0 ){
				dprintk(DEBUG_INIT,"---------------------------------------get ic param\r\n");
				if(ft5x02_get_ic_param(this_client) >=0)
					break;
			}
			i++;
		}
#endif
        }

#ifdef CONFIG_HAS_EARLYSUSPEND
standby_with_power_on:
#endif
	ret = input_set_int_enable(&(config_info.input_type), 1);
	if (ret < 0)
		dprintk(DEBUG_SUSPEND,"%s irq disable failed\n", __func__);
}


static int ft5x_ts_suspend(struct device *dev, pm_message_t mesg)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct ft5x_ts_data *data = i2c_get_clientdata(client);
	int ret = 0;
	dprintk(DEBUG_SUSPEND,"==ft5x_ts_suspend=\n");
	dprintk(DEBUG_SUSPEND,"CONFIG_PM: write FT5X0X_REG_PMODE .\n");
#ifndef CONFIG_HAS_EARLYSUSPEND
	data->is_suspended = true;
#endif
	if (data->is_suspended == true) {
		//ft5x_ts_release();
		flush_workqueue(ft5x_resume_wq);
		ret = input_set_int_enable(&(config_info.input_type), 0);
		if (ret < 0)
			dprintk(DEBUG_SUSPEND,"%s irq disable failed\n", __func__);
		cancel_work_sync(&data->pen_event_work);
		flush_workqueue(data->ts_workqueue);
		ft5x_set_reg(FT5X0X_REG_PMODE, PMODE_HIBERNATE);
		msleep(5);
		input_set_power_enable(&(config_info.input_type), 0);
	}
	return 0;
}

static int ft5x_ts_resume(struct device *dev)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct ft5x_ts_data *data = i2c_get_clientdata(client);
	dprintk(DEBUG_SUSPEND,"==CONFIG_PM:ft5x_ts_resume== \n");
	data->is_suspended = true;
	input_set_power_enable(&(config_info.input_type), 1);
        msleep(5);
    queue_work(ft5x_resume_wq, &ft5x_resume_work);

	return 0;
}

#ifdef CONFIG_HAS_EARLYSUSPEND
static void ft5x_ts_early_suspend(struct early_suspend *handler)
{
    int ret = 0;
	struct ft5x_ts_data *data = i2c_get_clientdata(this_client);
	dprintk(DEBUG_SUSPEND,"==ft5x_ts_suspend=\n");
	dprintk(DEBUG_SUSPEND,"CONFIG_HAS_EARLYSUSPEND: write FT5X0X_REG_PMODE .\n");
	ft5x_ts_release();
    data->is_suspended = false;
	flush_workqueue(ft5x_resume_wq);
	ret = input_set_int_enable(&(config_info.input_type), 0);
	if (ret < 0)
		dprintk(DEBUG_SUSPEND,"%s irq disable failed\n", __func__);
	cancel_work_sync(&data->pen_event_work);
	flush_workqueue(data->ts_workqueue);
	ft5x_set_reg(FT5X0X_REG_PMODE, PMODE_HIBERNATE);
	msleep(5);
	input_set_power_enable(&(config_info.input_type), 0);
}

static void ft5x_ts_late_resume(struct early_suspend *handler)
{
	struct ft5x_ts_data *data = container_of(handler, struct ft5x_ts_data, early_suspend);
	dprintk(DEBUG_SUSPEND,"==CONFIG_HAS_EARLYSUSPEND:ft5x_ts_resume== \n");
	if (data->is_suspended == false) {
		input_set_power_enable(&(config_info.input_type), 1);
		msleep(5);
		queue_work(ft5x_resume_wq, &ft5x_resume_work);
	}

	printk("ts->is_suspended:%d\n",data->is_suspended);
}

#endif

static void ft5x_init_events (struct work_struct *work)
{
	int i = 0;
	int ret;
	dprintk(DEBUG_INIT,"====%s begin=====.  \n", __func__);

	while((chip_id == 0x00) || (chip_id == 0xa3)){
		delay_ms(5);
		ret = i2c_smbus_read_byte_data(this_client,0xA3);
        	dprintk(DEBUG_INIT,"addr:0x%x,chip_id_value:0x%x\n",this_client->addr,ret);
		if((ret != 0x00) && (ret != 0xa3)) {
			chip_id = ret;
			break;
		}
		if((i++)>10) {
			break;
		}
	}
	dprintk(DEBUG_INIT,"read chip_id timers,timers=%d\n",i);
	i = 0;

#ifdef CONFIG_SUPPORT_FTS_CTP_UPG
	fts_ctpm_fw_upgrade_with_i_file();
#endif

	if(chip_id == 0x02 ){
#ifdef FT5X02_CONFIG_INI
		if (ft5x02_Get_Param_From_Ini(FT5X02_CONFIG_NAME) >= 0)
			ft5x02_Init_IC_Param(this_client);
		else
			printk("Get ft5x02 param from INI file failed\n");
#else
		msleep(1000);	/*wait...*/
		while(i<5){
			dprintk(DEBUG_INIT,"-----------------------------------------Init ic param\r\n");
			if (ft5x02_Init_IC_Param(this_client) >=0 ){
				dprintk(DEBUG_INIT,"---------------------------------------get ic param\r\n");
				if(ft5x02_get_ic_param(this_client) >=0)
					break;
			}
			i++;
		}
#endif
        }

}

static int ft5x_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
	printk("==ft5x_ts_probe==\n");
	struct ft5x_ts_data *ft5x_ts;
	struct input_dev *input_dev;
	struct device *dev;
	struct i2c_dev *i2c_dev;
	int err = 0;

#ifdef TOUCH_KEY_SUPPORT
	int i = 0;
#endif

	dprintk(DEBUG_INIT,"====%s begin=====.  \n", __func__);

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		err = -ENODEV;
		printk("check_functionality_failed\n");
		goto exit_check_functionality_failed;
	}

	ft5x_ts = kzalloc(sizeof(*ft5x_ts), GFP_KERNEL);
	if (!ft5x_ts)	{
		err = -ENOMEM;
		printk("alloc_data_failed\n");
		goto exit_alloc_data_failed;
	}

	this_client = client;
	i2c_set_clientdata(client, ft5x_ts);

	ft5x_wq = create_singlethread_workqueue("ft5x_init");
	if (ft5x_wq == NULL) {
		printk("create ft5x_wq fail!\n");
		return -ENOMEM;
	}

	queue_work(ft5x_wq, &ft5x_init_work);

	INIT_WORK(&ft5x_ts->pen_event_work, ft5x_ts_pen_irq_work);
	ft5x_ts->ts_workqueue = create_singlethread_workqueue(dev_name(&client->dev));
	if (!ft5x_ts->ts_workqueue) {
		err = -ESRCH;
		printk("ts_workqueue fail!\n");
		goto exit_create_singlethread;
	}

	input_dev = input_allocate_device();
	if (!input_dev) {
		err = -ENOMEM;
		dev_err(&client->dev, "failed to allocate input device\n");
		goto exit_input_dev_alloc_failed;
	}

	ft5x_ts->input_dev = input_dev;

#ifdef CONFIG_FT5X0X_MULTITOUCH
	set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit);
	set_bit(ABS_MT_POSITION_X, input_dev->absbit);
	set_bit(ABS_MT_POSITION_Y, input_dev->absbit);
	set_bit(ABS_MT_WIDTH_MAJOR, input_dev->absbit);
#ifdef FOR_TSLIB_TEST
	set_bit(BTN_TOUCH, input_dev->keybit);
#endif
	input_set_abs_params(input_dev,
			     ABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);
	input_set_abs_params(input_dev,
			     ABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);
	input_set_abs_params(input_dev,
			     ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);
	input_set_abs_params(input_dev,
			     ABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);
	input_set_abs_params(input_dev,
			     ABS_MT_TRACKING_ID, 0, 4, 0, 0);
#ifdef TOUCH_KEY_SUPPORT
	key_tp = 0;
	input_dev->evbit[0] = BIT_MASK(EV_KEY);
	for (i = 1; i < TOUCH_KEY_NUMBER; i++)
		set_bit(i, input_dev->keybit);
#endif
#else
	set_bit(ABS_MT_POSITION_X, input_dev->absbit);
	set_bit(ABS_MT_POSITION_Y, input_dev->absbit);
	set_bit(ABS_PRESSURE, input_dev->absbit);
	set_bit(BTN_TOUCH, input_dev->keybit);
	input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);
	input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);
	input_set_abs_params(input_dev,
			     ABS_PRESSURE, 0, PRESS_MAX, 0 , 0);
#endif

	set_bit(EV_ABS, input_dev->evbit);
	set_bit(EV_KEY, input_dev->evbit);
	set_bit(INPUT_PROP_DIRECT, input_dev->propbit);

	input_dev->name	= CTP_NAME;		//dev_name(&client->dev)
	err = input_register_device(input_dev);
	if (err) {
		dev_err(&client->dev,"ft5x_ts_probe: failed to register input device: %s\n",
		        dev_name(&client->dev));
		goto exit_input_register_device_failed;
	}

    ft5x_ts->is_suspended = false;

	ft5x_resume_wq = create_singlethread_workqueue("ft5x_resume");
	if (ft5x_resume_wq == NULL) {
		printk("create ft5x_resume_wq fail!\n");
		return -ENOMEM;
	}

#ifdef CONFIG_HAS_EARLYSUSPEND
	printk("==register_early_suspend =\n");
	ft5x_ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
	ft5x_ts->early_suspend.suspend = ft5x_ts_early_suspend;
	ft5x_ts->early_suspend.resume	= ft5x_ts_late_resume;
	register_early_suspend(&ft5x_ts->early_suspend);
#endif

#ifdef CONFIG_FT5X0X_MULTITOUCH
	dprintk(DEBUG_INIT,"CONFIG_FT5X0X_MULTITOUCH is defined. \n");
#endif

    config_info.dev = &(ft5x_ts->input_dev->dev);
	err = input_request_int(&(config_info.input_type), ft5x_ts_interrupt,
				CTP_IRQ_MODE, ft5x_ts);
	if (err) {
		pr_info( "goodix_probe: request irq failed\n");
		goto exit_irq_request_failed;
	}

    i2c_dev = get_free_i2c_dev(client->adapter);
	if (IS_ERR(i2c_dev)){
		err = PTR_ERR(i2c_dev);
		printk("i2c_dev fail!");
		return err;
	}

	dev = device_create(i2c_dev_class, &client->adapter->dev, MKDEV(I2C_MAJOR,client->adapter->nr),
	         NULL, "aw_i2c_ts%d", client->adapter->nr);
	if (IS_ERR(dev))	{
			err = PTR_ERR(dev);
			printk("dev fail!\n");
			return err;
	}

	device_enable_async_suspend(&client->dev);
	dprintk(DEBUG_INIT,"==%s over =\n", __func__);

	return 0;

exit_irq_request_failed:
    cancel_work_sync(&ft5x_resume_work);
	destroy_workqueue(ft5x_resume_wq);
exit_input_register_device_failed:
	input_free_device(input_dev);
exit_input_dev_alloc_failed:
	input_free_int(&(config_info.input_type), ft5x_ts);
    i2c_set_clientdata(client, NULL);
    cancel_work_sync(&ft5x_ts->pen_event_work);
	destroy_workqueue(ft5x_ts->ts_workqueue);
exit_create_singlethread:
	kfree(ft5x_ts);
exit_alloc_data_failed:
exit_check_functionality_failed:
	cancel_work_sync(&ft5x_init_work);
	destroy_workqueue(ft5x_wq);

	return err;
}

static int ft5x_ts_remove(struct i2c_client *client)
{

	struct ft5x_ts_data *ft5x_ts = i2c_get_clientdata(client);
	ft5x_set_reg(FT5X0X_REG_PMODE, PMODE_HIBERNATE);

	printk("==ft5x_ts_remove=\n");
	device_destroy(i2c_dev_class, MKDEV(I2C_MAJOR,client->adapter->nr));
	input_free_int(&(config_info.input_type), ft5x_ts);
#ifdef CONFIG_HAS_EARLYSUSPEND
	unregister_early_suspend(&ft5x_ts->early_suspend);
#endif
	cancel_work_sync(&ft5x_resume_work);
	destroy_workqueue(ft5x_resume_wq);
	input_unregister_device(ft5x_ts->input_dev);
	input_free_device(ft5x_ts->input_dev);
	cancel_work_sync(&ft5x_ts->pen_event_work);
	destroy_workqueue(ft5x_ts->ts_workqueue);
	input_set_power_enable(&(config_info.input_type), 0);
	kfree(ft5x_ts);

	i2c_set_clientdata(this_client, NULL);

	return 0;

}

static const struct i2c_device_id ft5x_ts_id[] = {
	{ CTP_NAME, 0 },
	{}
};
MODULE_DEVICE_TABLE(i2c, ft5x_ts_id);

static struct i2c_driver ft5x_ts_driver = {
	.class          = I2C_CLASS_HWMON,
	.probe		= ft5x_ts_probe,
	.remove		= ft5x_ts_remove,
	.id_table	= ft5x_ts_id,
	.driver	= {
		.name	= CTP_NAME,
		.owner	= THIS_MODULE,
		.suspend        = ft5x_ts_suspend,
		.resume         = ft5x_ts_resume,
	},
	.address_list	= normal_i2c,

};

static int aw_open(struct inode *inode, struct file *file)
{
	int subminor;
	struct i2c_client *client;
	struct i2c_adapter *adapter;
	struct i2c_dev *i2c_dev;

	printk("====%s======.\n", __func__);
	dprintk(DEBUG_OTHERS_INFO,"enter aw_open function\n");
	subminor = iminor(inode);
	dprintk(DEBUG_OTHERS_INFO,"subminor=%d\n",subminor);

	i2c_dev = i2c_dev_get_by_minor(2);
	if (!i2c_dev)	{
		printk("error i2c_dev\n");
		return -ENODEV;
	}
	adapter = i2c_get_adapter(i2c_dev->adap->nr);
	if (!adapter)	{
		return -ENODEV;
	}

	client = kzalloc(sizeof(*client), GFP_KERNEL);

	if (!client)	{
		i2c_put_adapter(adapter);
		return -ENOMEM;
	}
	snprintf(client->name, I2C_NAME_SIZE, "pctp_i2c_ts%d", adapter->nr);
	//client->driver = &ft5x_ts_driver;
	client->adapter = adapter;
	file->private_data = client;

	return 0;
}

static long aw_ioctl(struct file *file, unsigned int cmd,unsigned long arg )
{
	dprintk(DEBUG_OTHERS_INFO,"====%s====\n",__func__);
	dprintk(DEBUG_OTHERS_INFO,"line :%d,cmd = %d,arg = %ld.\n",__LINE__,cmd,arg);

	switch (cmd) {
	case UPGRADE:
	        dprintk(DEBUG_OTHERS_INFO,"==UPGRADE_WORK=\n");
		fts_ctpm_fw_upgrade_with_i_file();
		// calibrate();
		break;
	default:
		break;
	}
	return 0;
}

static int aw_release (struct inode *inode, struct file *file)
{
	struct i2c_client *client = file->private_data;
	dprintk(DEBUG_OTHERS_INFO,"enter aw_release function.\n");
	i2c_put_adapter(client->adapter);
	kfree(client);
	file->private_data = NULL;
	return 0;
}

static const struct file_operations aw_i2c_ts_fops ={
	.owner = THIS_MODULE,
	.open = aw_open,
	.unlocked_ioctl = aw_ioctl,
	.release = aw_release,
};
static int ctp_get_system_config(void)
{
        ctp_print_info(config_info,DEBUG_INIT);
        twi_id = config_info.twi_id;
        screen_max_x = config_info.screen_max_x;
        screen_max_y = config_info.screen_max_y;
        revert_x_flag = config_info.revert_x_flag;
        revert_y_flag = config_info.revert_y_flag;
        exchange_x_y_flag = config_info.exchange_x_y_flag;
        if((screen_max_x == 0) || (screen_max_y == 0)){
                printk("%s:read config error!\n",__func__);
                return 0;
        }
        return 1;
}
static int __init ft5x_ts_init(void)
{
	printk("==ft5x_ts_init==\n");
	int ret = -1;
	dprintk(DEBUG_INIT,"***************************init begin*************************************\n");
#ifdef WILLIAM_DEBUG
	printk("####%s start####\n", __func__);
#endif
	if (input_sensor_startup(&(config_info.input_type))) {
		printk("%s: ctp_fetch_sysconfig_para err.\n", __func__);
		return 0;
	} else {
		ret = input_sensor_init(&(config_info.input_type));
		if (0 != ret) {
			printk("%s:ctp_ops.init_platform_resource err. \n", __func__);
		}
	}

	if(config_info.ctp_used == 0){
	        printk("*** ctp_used set to 0 !\n");
	        printk("*** if use ctp,please put the sys_config.fex ctp_used set to 1. \n");
	        return 0;
	}

        if(!ctp_get_system_config()){
                printk("%s:read config fail!\n",__func__);
                return ret;
        }
	input_set_power_enable(&(config_info.input_type), 1);
	msleep(10);
	ctp_wakeup(0, 10);

	ft5x_ts_driver.detect = ctp_detect;

	ret= register_chrdev(I2C_MAJOR,"aw_i2c_ts",&aw_i2c_ts_fops );
	if(ret) {
		printk("%s:register chrdev failed\n",__FILE__);
		return ret;
	}

	i2c_dev_class = class_create(THIS_MODULE,"aw_i2c_dev");
	if (IS_ERR(i2c_dev_class)) {
		ret = PTR_ERR(i2c_dev_class);
		class_destroy(i2c_dev_class);
	}
        ret = i2c_add_driver(&ft5x_ts_driver);

        dprintk(DEBUG_INIT,"****************************init end************************************\n");
#ifdef WILLIAM_DEBUG
	printk("####%s end####\n", __func__);
#endif
	return ret;
}

static void __exit ft5x_ts_exit(void)
{
	printk("==ft5x_ts_exit==\n");
	i2c_del_driver(&ft5x_ts_driver);
	class_destroy(i2c_dev_class);
	unregister_chrdev(I2C_MAJOR, "aw_i2c_ts");
	input_sensor_free(&(config_info.input_type));
}

late_initcall(ft5x_ts_init);
module_exit(ft5x_ts_exit);
MODULE_AUTHOR("<wenfs@Focaltech-systems.com>");
MODULE_DESCRIPTION("FocalTech ft5x TouchScreen driver");
MODULE_LICENSE("GPL");

设备树配置:

twi0: twi@0x05002000{
			clock-frequency = <100000>;
			pinctrl-0 = <&twi0_pins_a>;
			pinctrl-1 = <&twi0_pins_b>;
			status = "okay";
			ctp@3b {
				compatible = "ft5x_ts";
				reg = <0x3b>;
				device_type = "ctp";
				status = "okay";
				ctp_name = "ft5x_ts";
				ctp_twi_id = <0x0>;
				ctp_twi_addr = <0x3b>;
				ctp_screen_max_x = <0x02D0>;
				ctp_screen_max_y = <0x0500>;
				ctp_revert_x_flag = <1>;
				ctp_revert_y_flag = <1>;

				ctp_exchange_x_y_flag = <0x1>;
				ctp_int_port = <&pio PH 15 6 0xffffffff 0xffffffff 0>;
				ctp_wakeup = <&pio PH 14 1 0xffffffff 0xffffffff 1>;
				ctp_power_io = <&pio PB 5 1 0xffffffff 0xffffffff 1>;
				ctp-supply = <&reg_cldo2>;
				ctp_power_ldo_vol = <3300>;
			};
		};

pio: pinctrl@0300b000 {
			twi0_pins_a: twi0@0 {
				allwinner,pins = "PH0", "PH1";
				allwinner,pname = "twi0_scl", "twi0_sda";
				allwinner,function = "twi0";
				allwinner,muxsel = <2>;
				allwinner,drive = <1>;
				allwinner,pull = <0>;
			};

			twi0_pins_b: twi0@1 {
				allwinner,pins = "PH0", "PH1";
				allwinner,function = "io_disabled";
				allwinner,muxsel = <7>;
				allwinner,drive = <1>;
				allwinner,pull = <0>;
			};
}

报错信息:

[  107.311165] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3)
[  107.320956] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4)
[  107.330676] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5)
[  107.340367] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6)
[  107.350250] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x7)
[  107.359835] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x8)
[  107.369453] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x9)
[  107.379070] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xa)
[  107.388751] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xb)
[  107.398379] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xc)
[  107.407991] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xd)
[  107.417682] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xe)
[  107.427290] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xf)
[  107.437429] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x10)
[  107.447131] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x11)
[  107.456932] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x12)
[  107.466689] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x13)
[  107.476443] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x14)
[  107.486187] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x15)
[  107.495887] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x16)
[  107.505627] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x17)
[  107.515488] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x18)
[  107.525335] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x19)
[  107.535075] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1a)
[  107.544771] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1b)
[  107.554712] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1c)
[  107.564565] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1d)
[  107.574809] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1e)
[  107.584560] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1f)
[  107.594328] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x20)
[  107.599813] healthd: battery l=79 v=4003 t=30.0 h=2 st=2 fc=1771 chg=u
[  107.611603] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x21)
[  107.621483] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x22)
[  107.631398] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x23)
[  107.641359] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x24)
[  107.651147] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x25)
[  107.660840] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x26)
[  107.670569] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x27)
[  107.680301] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x28)
[  107.690746] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x29)
[  107.700783] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2a)
[  107.710488] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2b)
[  107.720374] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2c)
[  107.730071] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2d)
[  107.739777] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2e)
[  107.749500] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.759010] msg ft5x_i2c_rxdata i2c read error: -70
[  107.764648] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2f)
[  107.774298] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.783673] msg ft5x_i2c_rxdata i2c read error: -70
[  107.789257] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x30)
[  107.798948] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.808392] msg ft5x_i2c_rxdata i2c read error: -70
[  107.814000] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x31)
[  107.823651] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.833054] msg ft5x_i2c_rxdata i2c read error: -70
[  107.838659] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x32)
[  107.848292] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.857735] msg ft5x_i2c_rxdata i2c read error: -70
[  107.863393] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x33)
[  107.873097] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.882583] msg ft5x_i2c_rxdata i2c read error: -70
[  107.882836] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x34)
[  107.883142] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x35)
[  107.883424] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x36)
[  107.883699] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x37)
[  107.883968] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x38)
[  107.884241] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x39)
[  107.884581] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3a)
[  107.884880] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3c)
[  107.885151] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3d)
[  107.885420] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3e)
[  107.885689] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3f)
[  107.885991] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x40)
[  107.886260] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x41)
[  107.886529] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x42)
[  107.886798] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x43)
[  107.887066] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x44)
[  107.887335] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x45)
[  107.887611] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x46)
[  107.887880] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x47)
[  107.888148] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x48)
[  107.888420] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x49)
[  107.888708] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4a)
[  107.888977] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4b)
[  107.889239] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4c)
[  107.889501] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4d)
[  107.889771] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4e)
[  107.890038] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4f)
[  107.890340] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x50)
[  107.890607] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x51)
[  107.890886] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x52)
[  107.891155] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x53)
[  107.891422] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x54)
[  107.891687] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x55)
[  107.891952] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x56)
[  107.892219] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x57)
[  107.892484] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x58)
[  107.892749] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x59)
[  107.893016] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5a)
[  107.893282] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5b)
[  107.893548] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5c)
[  107.893814] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5d)
[  107.894079] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5e)
[  107.894399] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5f)
[  107.894702] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x60)
[  107.894973] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x61)
[  107.895241] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x62)
[  107.895509] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x63)
[  107.895778] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x64)
[  107.896048] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x65)
[  107.896317] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x66)
[  107.896584] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x67)
[  107.896853] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x68)
[  107.897122] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x69)
[  107.897391] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6a)
[  107.897666] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6b)
[  107.897938] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6c)
[  107.898208] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6d)
[  107.898476] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6e)
[  107.898744] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6f)
[  107.899045] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x70)
[  107.899313] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x71)
[  107.899581] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x72)
[  107.899850] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x73)
[  107.900118] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x74)
[  107.900386] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x75)
[  107.900656] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x76)
[  107.900928] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x77)
[  108.516483] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.525921] msg ft5x_i2c_rxdata i2c read error: -70
[  108.531723] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.541209] msg ft5x_i2c_rxdata i2c read error: -70
[  108.546989] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.556390] msg ft5x_i2c_rxdata i2c read error: -70
[  108.562104] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.571472] msg ft5x_i2c_rxdata i2c read error: -70
[  108.577197] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.586569] msg ft5x_i2c_rxdata i2c read error: -70
[  108.592297] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.601670] msg ft5x_i2c_rxdata i2c read error: -70
[  108.607396] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.616769] msg ft5x_i2c_rxdata i2c read error: -70
[  108.622474] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.632107] msg ft5x_i2c_rxdata i2c read error: -70
[  108.637920] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.647337] msg ft5x_i2c_rxdata i2c read error: -70
[  108.653059] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.662524] msg ft5x_i2c_rxdata i2c read error: -70
[  108.668299] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.677696] msg ft5x_i2c_rxdata i2c read error: -70
[  108.683468] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.692978] msg ft5x_i2c_rxdata i2c read error: -70
[  108.698772] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.708168] msg ft5x_i2c_rxdata i2c read error: -70
[  108.713881] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.723296] msg ft5x_i2c_rxdata i2c read error: -70
[  108.729010] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.738384] msg ft5x_i2c_rxdata i2c read error: -70
[  108.744121] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.753495] msg ft5x_i2c_rxdata i2c read error: -70
[  108.759232] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.768662] msg ft5x_i2c_rxdata i2c read error: -70
[  108.774445] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.783824] msg ft5x_i2c_rxdata i2c read error: -70
[  108.789573] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.798964] msg ft5x_i2c_rxdata i2c read error: -70
[  108.804677] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.814068] msg ft5x_i2c_rxdata i2c read error: -70
[  108.819784] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.829172] msg ft5x_i2c_rxdata i2c read error: -70
[  108.834884] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.844356] msg ft5x_i2c_rxdata i2c read error: -70
[  108.850192] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.867975] msg ft5x_i2c_rxdata i2c read error: -70
[  108.875015] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.884979] msg ft5x_i2c_rxdata i2c read error: -70
[  108.893156] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.903009] msg ft5x_i2c_rxdata i2c read error: -70
[  108.909402] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.918950] msg ft5x_i2c_rxdata i2c read error: -70
[  108.924824] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.934287] msg ft5x_i2c_rxdata i2c read error: -70
[  108.940130] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.949631] msg ft5x_i2c_rxdata i2c read error: -70
[  108.955409] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.964898] msg ft5x_i2c_rxdata i2c read error: -70
[  108.971172] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.980763] msg ft5x_i2c_rxdata i2c read error: -70
[  108.986597] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.996107] msg ft5x_i2c_rxdata i2c read error: -70
[  117.627842] healthd: battery l=79 v=4006 t=30.0 h=2 st=2 fc=1771 chg=u\
ceres-b6:/ # dmesg
[  206.502538] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.502847] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.503154] twi_start()481 - [i2c0] START can't sendout!
[  206.503157] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.503261] msg ft5x_i2c_rxdata i2c read error: -121
[  206.503468] twi_start()481 - [i2c0] START can't sendout!
[  206.503470] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.503777] twi_start()481 - [i2c0] START can't sendout!
[  206.503779] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.504087] twi_start()481 - [i2c0] START can't sendout!
[  206.504089] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.504193] msg ft5x_i2c_rxdata i2c read error: -121
[  206.504401] twi_start()481 - [i2c0] START can't sendout!
[  206.504403] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.504710] twi_start()481 - [i2c0] START can't sendout!
[  206.504712] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator:
[  206.505020] twi_start()481 - [i2c0] START can't sendout!

离线

#1 昨天 11:19:08

晕哥
管理员
所在地: wechat: whycan_cn
注册时间: 2017-09-06
已发帖子: 9,433
积分: 9202

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

有没有4K7上来,逻辑分析仪抓一下 SCL/SDA?





离线

楼主 #2 昨天 11:24:09

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

有没有4K7上来,逻辑分析仪抓一下 SCL/SDA?


都是正常的scl/sda

离线

#3 昨天 11:32:37

晕哥
管理员
所在地: wechat: whycan_cn
注册时间: 2017-09-06
已发帖子: 9,433
积分: 9202

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

关闭系统日志:
echo 0 > /proc/sys/kernel/printk

扫描:
i2c-detect -y 0

可能需要把 ctp@3b 这部分注释起来。

扫描的时候,除了看日志输出,可以配合逻辑分析仪看下设备的反应。





离线

楼主 #4 昨天 11:46:50

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

关闭系统日志:
echo 0 > /proc/sys/kernel/printk

扫描:
i2c-detect -y 0

可能需要把 ctp@3b 这部分注释起来。

扫描的时候,除了看日志输出,可以配合逻辑分析仪看下设备的反应。


ctp这整个节点注释掉吗 还是说只注释这个地址?

离线

#5 昨天 12:16:00

晕哥
管理员
所在地: wechat: whycan_cn
注册时间: 2017-09-06
已发帖子: 9,433
积分: 9202

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

@xuuu
注释这个节点,否则 i2c-detect -y 0(i2c-utils) 扫描会跳过这个地址。





离线

楼主 #6 昨天 13:44:06

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

@xuuu
注释这个节点,否则 i2c-detect -y 0(i2c-utils) 扫描会跳过这个地址。



ctp这整个节点注释掉 再用这个扫吗 i2c-detect -y 0

离线

楼主 #7 昨天 13:45:59

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

@xuuu
注释这个节点,否则 i2c-detect -y 0(i2c-utils) 扫描会跳过这个地址。


我卸载这个驱动 用i2cdetect -y 0 什么也扫不出来

最近编辑记录 xuuu (昨天 13:46:12)

离线

#8 昨天 13:54:11

晕哥
管理员
所在地: wechat: whycan_cn
注册时间: 2017-09-06
已发帖子: 9,433
积分: 9202

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

大概率是硬件问题,再结合逻辑分析仪数据分析吧。





离线

楼主 #9 昨天 14:08:37

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

大概率是硬件问题,再结合逻辑分析仪数据分析吧。


那我配置没有问题吧 是不是哪里还没有加

离线

#10 昨天 14:10:55

晕哥
管理员
所在地: wechat: whycan_cn
注册时间: 2017-09-06
已发帖子: 9,433
积分: 9202

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

你提供的信息很有限,没法分析。





离线

楼主 #11 昨天 14:18:54

xuuu
会员
注册时间: 2026-01-05
已发帖子: 10
积分: 10

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

晕哥 说:

你提供的信息很有限,没法分析。


完整报错信息:

[  107.311165] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3)
[  107.320956] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4)
[  107.330676] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5)
[  107.340367] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6)
[  107.350250] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x7)
[  107.359835] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x8)
[  107.369453] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x9)
[  107.379070] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xa)
[  107.388751] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xb)
[  107.398379] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xc)
[  107.407991] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xd)
[  107.417682] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xe)
[  107.427290] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0xf)
[  107.437429] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x10)
[  107.447131] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x11)
[  107.456932] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x12)
[  107.466689] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x13)
[  107.476443] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x14)
[  107.486187] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x15)
[  107.495887] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x16)
[  107.505627] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x17)
[  107.515488] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x18)
[  107.525335] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x19)
[  107.535075] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1a)
[  107.544771] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1b)
[  107.554712] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1c)
[  107.564565] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1d)
[  107.574809] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1e)
[  107.584560] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x1f)
[  107.594328] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x20)
[  107.599813] healthd: battery l=79 v=4003 t=30.0 h=2 st=2 fc=1771 chg=u
[  107.611603] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x21)
[  107.621483] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x22)
[  107.631398] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x23)
[  107.641359] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x24)
[  107.651147] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x25)
[  107.660840] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x26)
[  107.670569] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x27)
[  107.680301] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x28)
[  107.690746] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x29)
[  107.700783] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2a)
[  107.710488] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2b)
[  107.720374] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2c)
[  107.730071] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2d)
[  107.739777] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2e)
[  107.749500] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.759010] msg ft5x_i2c_rxdata i2c read error: -70
[  107.764648] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x2f)
[  107.774298] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.783673] msg ft5x_i2c_rxdata i2c read error: -70
[  107.789257] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x30)
[  107.798948] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.808392] msg ft5x_i2c_rxdata i2c read error: -70
[  107.814000] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x31)
[  107.823651] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.833054] msg ft5x_i2c_rxdata i2c read error: -70
[  107.838659] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x32)
[  107.848292] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.857735] msg ft5x_i2c_rxdata i2c read error: -70
[  107.863393] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x33)
[  107.873097] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  107.882583] msg ft5x_i2c_rxdata i2c read error: -70
[  107.882836] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x34)
[  107.883142] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x35)
[  107.883424] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x36)
[  107.883699] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x37)
[  107.883968] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x38)
[  107.884241] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x39)
[  107.884581] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3a)
[  107.884880] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3c)
[  107.885151] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3d)
[  107.885420] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3e)
[  107.885689] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3f)
[  107.885991] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x40)
[  107.886260] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x41)
[  107.886529] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x42)
[  107.886798] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x43)
[  107.887066] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x44)
[  107.887335] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x45)
[  107.887611] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x46)
[  107.887880] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x47)
[  107.888148] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x48)
[  107.888420] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x49)
[  107.888708] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4a)
[  107.888977] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4b)
[  107.889239] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4c)
[  107.889501] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4d)
[  107.889771] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4e)
[  107.890038] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x4f)
[  107.890340] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x50)
[  107.890607] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x51)
[  107.890886] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x52)
[  107.891155] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x53)
[  107.891422] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x54)
[  107.891687] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x55)
[  107.891952] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x56)
[  107.892219] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x57)
[  107.892484] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x58)
[  107.892749] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x59)
[  107.893016] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5a)
[  107.893282] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5b)
[  107.893548] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5c)
[  107.893814] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5d)
[  107.894079] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5e)
[  107.894399] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x5f)
[  107.894702] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x60)
[  107.894973] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x61)
[  107.895241] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x62)
[  107.895509] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x63)
[  107.895778] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x64)
[  107.896048] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x65)
[  107.896317] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x66)
[  107.896584] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x67)
[  107.896853] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x68)
[  107.897122] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x69)
[  107.897391] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6a)
[  107.897666] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6b)
[  107.897938] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6c)
[  107.898208] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6d)
[  107.898476] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6e)
[  107.898744] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x6f)
[  107.899045] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x70)
[  107.899313] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x71)
[  107.899581] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x72)
[  107.899850] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x73)
[  107.900118] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x74)
[  107.900386] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x75)
[  107.900656] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x76)
[  107.900928] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x77)
[  108.516483] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.525921] msg ft5x_i2c_rxdata i2c read error: -70
[  108.531723] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.541209] msg ft5x_i2c_rxdata i2c read error: -70
[  108.546989] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.556390] msg ft5x_i2c_rxdata i2c read error: -70
[  108.562104] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.571472] msg ft5x_i2c_rxdata i2c read error: -70
[  108.577197] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.586569] msg ft5x_i2c_rxdata i2c read error: -70
[  108.592297] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.601670] msg ft5x_i2c_rxdata i2c read error: -70
[  108.607396] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.616769] msg ft5x_i2c_rxdata i2c read error: -70
[  108.622474] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.632107] msg ft5x_i2c_rxdata i2c read error: -70
[  108.637920] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.647337] msg ft5x_i2c_rxdata i2c read error: -70
[  108.653059] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.662524] msg ft5x_i2c_rxdata i2c read error: -70
[  108.668299] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.677696] msg ft5x_i2c_rxdata i2c read error: -70
[  108.683468] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.692978] msg ft5x_i2c_rxdata i2c read error: -70
[  108.698772] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.708168] msg ft5x_i2c_rxdata i2c read error: -70
[  108.713881] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.723296] msg ft5x_i2c_rxdata i2c read error: -70
[  108.729010] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.738384] msg ft5x_i2c_rxdata i2c read error: -70
[  108.744121] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.753495] msg ft5x_i2c_rxdata i2c read error: -70
[  108.759232] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.768662] msg ft5x_i2c_rxdata i2c read error: -70
[  108.774445] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.783824] msg ft5x_i2c_rxdata i2c read error: -70
[  108.789573] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.798964] msg ft5x_i2c_rxdata i2c read error: -70
[  108.804677] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.814068] msg ft5x_i2c_rxdata i2c read error: -70
[  108.819784] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.829172] msg ft5x_i2c_rxdata i2c read error: -70
[  108.834884] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.844356] msg ft5x_i2c_rxdata i2c read error: -70
[  108.850192] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.867975] msg ft5x_i2c_rxdata i2c read error: -70
[  108.875015] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.884979] msg ft5x_i2c_rxdata i2c read error: -70
[  108.893156] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.903009] msg ft5x_i2c_rxdata i2c read error: -70
[  108.909402] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.918950] msg ft5x_i2c_rxdata i2c read error: -70
[  108.924824] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.934287] msg ft5x_i2c_rxdata i2c read error: -70
[  108.940130] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.949631] msg ft5x_i2c_rxdata i2c read error: -70
[  108.955409] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.964898] msg ft5x_i2c_rxdata i2c read error: -70
[  108.971172] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.980763] msg ft5x_i2c_rxdata i2c read error: -70
[  108.986597] sunxi_i2c_do_xfer()1951 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x3b)
[  108.996107] msg ft5x_i2c_rxdata i2c read error: -70
[  117.627842] healthd: battery l=79 v=4006 t=30.0 h=2 st=2 fc=1771 chg=u
[  127.075858] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  127.083902] [DISP] de_smbl_apply,line:241:sel0, en=1, win=<0,0,720,1280>
[  127.091597] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  127.646667] healthd: battery l=79 v=3999 t=30.0 h=2 st=2 fc=1771 chg=u
[  134.125838] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  134.133961] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  134.142416] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  134.149711] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  134.156975] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  134.164266] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  134.171540] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  134.178839] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  134.186180] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  134.193462] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  134.200636] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  134.207889] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  134.215142] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  134.222370] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  134.229576] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  134.236797] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  134.243963] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  134.251209] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  134.258528] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  134.264479] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  134.272459] [DISP] de_al_lyr_apply,line:484:ch0 z 0 en
[  134.278302] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  134.284236] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  134.290131] [DISP] de_al_lyr_apply,line:484:ch3 z 0 dis
[  134.296061] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 en
[  134.302118] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  134.308244] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  134.314350] [DISP] de_al_lyr_apply,line:487:pipe3 z 0 dis
[  134.320462] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  134.326366] [DISP] de_al_lyr_apply,line:502:format[1]=0
[  134.332259] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  134.339901] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  134.347474] [DISP] de_rtmx_calc_chnrect,line:1729:layernum=4, i=0
[  134.354411] [DISP] de_rtmx_calc_chnrect,line:1731:crop=<0,0,720,1280>
[  134.361726] [DISP] de_rtmx_calc_chnrect,line:1733:layer=<0,0,720,1280>
[  134.369133] [DISP] de_rtmx_calc_chnrect,line:1742:ovl_rect=<0,0,720,1280>
[  134.376778] [DISP] de_rtmx_calc_chnrect,line:1744:bld_rect=<0,0,720,1280>
[  134.384477] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<720,1280>
[  134.392684] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,720,1280>
[  134.401259] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  134.408971] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  134.417044] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  134.424774] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  134.432399] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=3
[  134.432407] [DISP] de_smbl_apply,line:241:sel0, en=1, win=<0,0,720,1280>
[  134.432413] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=2
[  134.456337] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[3]=<0,0>
[  134.464041] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[3]=<0,0,0,0>
[  134.472183] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=720,ovlh[0]=1280, bld_rect[0].w=720, bld_rect[0].h=1280
[  134.485376] [DISP] de_vsu_set_para,line:274:sel0, ch 0, en=0, in<720x1280>,out<720x1280>
[  134.494596] [DISP] de_calc_overlay_scaler_para,line:187:fmt[1]=0, ovlw[1]=0,ovlh[1]=0, bld_rect[1].w=0, bld_rect[1].h=0
[  134.506828] [DISP] de_vsu_set_para,line:274:sel0, ch 1, en=0, in<0x0>,out<0x0>
[  134.515145] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[0]=<0,0,720,1280>
[  134.523367] [DISP] de_rtmx_set_route,line:1539:sel0, pno0, zorder0, route:0x0
[  134.531458] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  134.539763] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[1]=<0,0,0,0>
[  134.547420] [DISP] de_rtmx_set_route,line:1539:sel0, pno1, zorder0, route:0x0
[  134.555526] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  134.563824] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[2]=<0,0,0,0>
[  134.571520] [DISP] de_rtmx_set_route,line:1539:sel0, pno2, zorder0, route:0x0
[  134.579609] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  134.587901] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[3]=<0,0,0,0>
[  134.595647] [DISP] de_rtmx_set_route,line:1539:sel0, pno3, zorder0, route:0x0
[  134.603782] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  134.612122] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  134.620219] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  134.633735] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  134.641887] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  134.650108] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  134.657416] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  134.664726] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  134.672025] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  134.679368] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  134.686700] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  134.693890] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  134.701152] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  134.708403] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  134.715669] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  134.722930] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  134.730227] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  134.737455] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  134.744715] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  134.752005] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  134.759267] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  134.766654] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  134.772658] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  134.780713] [DISP] de_al_lyr_apply,line:484:ch0 z 0 en
[  134.786580] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  134.792500] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  134.798439] [DISP] de_al_lyr_apply,line:484:ch3 z 0 dis
[  134.804382] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 en
[  134.810417] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  134.816546] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  134.822644] [DISP] de_al_lyr_apply,line:487:pipe3 z 0 dis
[  134.828854] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  134.834836] [DISP] de_al_lyr_apply,line:502:format[1]=0
[  134.840816] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  134.848506] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  134.856168] [DISP] de_rtmx_calc_chnrect,line:1729:layernum=4, i=0
[  134.863072] [DISP] de_rtmx_calc_chnrect,line:1731:crop=<0,0,720,1280>
[  134.870358] [DISP] de_rtmx_calc_chnrect,line:1733:layer=<0,0,720,1280>
[  134.877762] [DISP] de_rtmx_calc_chnrect,line:1742:ovl_rect=<0,0,720,1280>
[  134.885476] [DISP] de_rtmx_calc_chnrect,line:1744:bld_rect=<0,0,720,1280>
[  134.893215] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<720,1280>
[  134.901401] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,720,1280>
[  134.910012] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  134.917711] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  134.925779] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  134.933405] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  134.941421] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[3]=<0,0>
[  134.949046] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[3]=<0,0,0,0>
[  134.957052] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=720,ovlh[0]=1280, bld_rect[0].w=720, bld_rect[0].h=1280
[  134.970130] [DISP] de_vsu_set_para,line:274:sel0, ch 0, en=0, in<720x1280>,out<720x1280>
[  134.979216] [DISP] de_calc_overlay_scaler_para,line:187:fmt[1]=0, ovlw[1]=0,ovlh[1]=0, bld_rect[1].w=0, bld_rect[1].h=0
[  134.991326] [DISP] de_vsu_set_para,line:274:sel0, ch 1, en=0, in<0x0>,out<0x0>
[  134.999467] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[0]=<0,0,720,1280>
[  135.007583] [DISP] de_rtmx_set_route,line:1539:sel0, pno0, zorder0, route:0x0
[  135.015667] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.023877] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[1]=<0,0,0,0>
[  135.031511] [DISP] de_rtmx_set_route,line:1539:sel0, pno1, zorder0, route:0x0
[  135.039526] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.047736] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[2]=<0,0,0,0>
[  135.055360] [DISP] de_rtmx_set_route,line:1539:sel0, pno2, zorder0, route:0x0
[  135.063378] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.071599] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[3]=<0,0,0,0>
[  135.079232] [DISP] de_rtmx_set_route,line:1539:sel0, pno3, zorder0, route:0x0
[  135.087265] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.095464] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  135.103384] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  135.119815] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  135.127754] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  135.135847] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  135.142970] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  135.150083] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  135.157265] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  135.164406] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  135.171524] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  135.178638] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  135.185751] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  135.192866] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  135.199979] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  135.207081] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  135.214196] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  135.221310] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  135.228421] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  135.235536] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  135.242650] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  135.249819] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  135.255663] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  135.263544] [DISP] de_al_lyr_apply,line:484:ch0 z 0 en
[  135.269289] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  135.275141] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  135.280991] [DISP] de_al_lyr_apply,line:484:ch3 z 0 dis
[  135.286831] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 en
[  135.292770] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  135.298823] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  135.304886] [DISP] de_al_lyr_apply,line:487:pipe3 z 0 dis
[  135.310955] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  135.316819] [DISP] de_al_lyr_apply,line:502:format[1]=0
[  135.322694] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  135.330223] [DISP] de_calc_ovl_coord,line:389:half_shift_xy=<40000,19,0>
[  135.337752] [DISP] de_rtmx_calc_chnrect,line:1729:layernum=4, i=0
[  135.344599] [DISP] de_rtmx_calc_chnrect,line:1731:crop=<0,0,720,1280>
[  135.351833] [DISP] de_rtmx_calc_chnrect,line:1733:layer=<0,0,720,1280>
[  135.359165] [DISP] de_rtmx_calc_chnrect,line:1742:ovl_rect=<0,0,720,1280>
[  135.366782] [DISP] de_rtmx_calc_chnrect,line:1744:bld_rect=<0,0,720,1280>
[  135.374418] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<720,1280>
[  135.382534] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,720,1280>
[  135.391033] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  135.398656] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  135.406663] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  135.414287] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  135.422300] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[3]=<0,0>
[  135.429913] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[3]=<0,0,0,0>
[  135.437930] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=720,ovlh[0]=1280, bld_rect[0].w=720, bld_rect[0].h=1280
[  135.451003] [DISP] de_vsu_set_para,line:274:sel0, ch 0, en=0, in<720x1280>,out<720x1280>
[  135.460087] [DISP] de_calc_overlay_scaler_para,line:187:fmt[1]=0, ovlw[1]=0,ovlh[1]=0, bld_rect[1].w=0, bld_rect[1].h=0
[  135.472185] [DISP] de_vsu_set_para,line:274:sel0, ch 1, en=0, in<0x0>,out<0x0>
[  135.480316] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[0]=<0,0,720,1280>
[  135.488431] [DISP] de_rtmx_set_route,line:1539:sel0, pno0, zorder0, route:0x0
[  135.496449] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.504658] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[1]=<0,0,0,0>
[  135.512281] [DISP] de_rtmx_set_route,line:1539:sel0, pno1, zorder0, route:0x0
[  135.520297] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.528507] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[2]=<0,0,0,0>
[  135.536131] [DISP] de_rtmx_set_route,line:1539:sel0, pno2, zorder0, route:0x0
[  135.544138] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.552348] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[3]=<0,0,0,0>
[  135.559968] [DISP] de_rtmx_set_route,line:1539:sel0, pno3, zorder0, route:0x0
[  135.567995] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.576215] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  135.584250] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  135.592391] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  135.600347] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  135.608470] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  135.615617] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  135.622758] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  135.629905] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  135.637037] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  135.644169] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  135.651309] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  135.658447] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  135.665587] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  135.672728] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  135.679867] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  135.686998] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  135.694126] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  135.701264] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  135.708406] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  135.715544] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  135.722686] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  135.728563] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  135.736484] [DISP] de_al_lyr_apply,line:484:ch0 z 0 dis
[  135.742350] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  135.748224] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  135.754089] [DISP] de_al_lyr_apply,line:484:ch3 z 0 dis
[  135.759956] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 dis
[  135.766016] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  135.772082] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  135.778150] [DISP] de_al_lyr_apply,line:487:pipe3 z 0 dis
[  135.784216] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  135.790141] [DISP] de_al_lyr_apply,line:502:format[1]=0
[  135.796030] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<0,0>
[  135.803646] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,0,0>
[  135.811662] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  135.819286] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  135.827315] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  135.835044] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  135.843113] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[3]=<0,0>
[  135.850805] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[3]=<0,0,0,0>
[  135.858916] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=0,ovlh[0]=0, bld_rect[0].w=0, bld_rect[0].h=0
[  135.871110] [DISP] de_vsu_set_para,line:274:sel0, ch 0, en=0, in<0x0>,out<0x0>
[  135.879267] [DISP] de_calc_overlay_scaler_para,line:187:fmt[1]=0, ovlw[1]=0,ovlh[1]=0, bld_rect[1].w=0, bld_rect[1].h=0
[  135.891400] [DISP] de_vsu_set_para,line:274:sel0, ch 1, en=0, in<0x0>,out<0x0>
[  135.899542] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[0]=<0,0,0,0>
[  135.907172] [DISP] de_rtmx_set_route,line:1539:sel0, pno0, zorder0, route:0x0
[  135.915191] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.923407] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[1]=<0,0,0,0>
[  135.931035] [DISP] de_rtmx_set_route,line:1539:sel0, pno1, zorder0, route:0x0
[  135.939053] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.947263] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[2]=<0,0,0,0>
[  135.954898] [DISP] de_rtmx_set_route,line:1539:sel0, pno2, zorder0, route:0x0
[  135.962913] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.971125] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[3]=<0,0,0,0>
[  135.978755] [DISP] de_rtmx_set_route,line:1539:sel0, pno3, zorder0, route:0x0
[  135.986771] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  135.994992] [DISP] de_enhance_apply,line:203:disp 0, en=1, sharp=0
[  136.001950] [DISP] de_peak_enable,line:122:sel=0, chno=0, en=0
[  136.008519] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  136.016496] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  136.025404] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  136.033387] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  136.041518] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  136.048665] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  136.055806] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  136.062941] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  136.070078] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  136.077211] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  136.084350] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  136.091490] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  136.098626] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  136.105771] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  136.112912] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  136.120050] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  136.127183] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  136.134324] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  136.141468] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  136.148607] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  136.155751] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  136.161625] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  136.169542] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  136.177465] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  136.193225] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  136.201217] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  136.209345] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  136.216490] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  136.223621] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  136.230753] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  136.237973] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  136.245137] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  136.252277] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  136.259420] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  136.266559] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  136.273693] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  136.280829] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  136.287970] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  136.295111] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  136.302251] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  136.309391] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  136.316530] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  136.323665] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  136.329532] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  136.337441] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  136.345375] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  136.360677] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=1
[  136.368622] [DISP] disp_mgr_set_layer_config2,line:1867:mgr0, config 16 layers
[  136.376739] [DISP] disp_get_layer,line:97:0,0,0, name=mgr0 chn0 lyr0
[  136.383872] [DISP] disp_get_layer,line:97:0,0,1, name=mgr0 chn0 lyr1
[  136.391016] [DISP] disp_get_layer,line:97:0,0,2, name=mgr0 chn0 lyr2
[  136.398155] [DISP] disp_get_layer,line:97:0,0,3, name=mgr0 chn0 lyr3
[  136.405296] [DISP] disp_get_layer,line:97:0,1,0, name=mgr0 chn1 lyr0
[  136.412434] [DISP] disp_get_layer,line:97:0,1,1, name=mgr0 chn1 lyr1
[  136.419574] [DISP] disp_get_layer,line:97:0,1,2, name=mgr0 chn1 lyr2
[  136.426796] [DISP] disp_get_layer,line:97:0,1,3, name=mgr0 chn1 lyr3
[  136.433941] [DISP] disp_get_layer,line:97:0,2,0, name=mgr0 chn2 lyr0
[  136.441084] [DISP] disp_get_layer,line:97:0,2,1, name=mgr0 chn2 lyr1
[  136.448229] [DISP] disp_get_layer,line:97:0,2,2, name=mgr0 chn2 lyr2
[  136.455383] [DISP] disp_get_layer,line:97:0,2,3, name=mgr0 chn2 lyr3
[  136.462525] [DISP] disp_get_layer,line:97:0,3,0, name=mgr0 chn3 lyr0
[  136.469665] [DISP] disp_get_layer,line:97:0,3,1, name=mgr0 chn3 lyr1
[  136.476805] [DISP] disp_get_layer,line:97:0,3,2, name=mgr0 chn3 lyr2
[  136.483935] [DISP] disp_get_layer,line:97:0,3,3, name=mgr0 chn3 lyr3
[  136.491081] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  136.496943] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:1,  cnt=2
[  136.504866] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=1
[  136.512823] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  136.528567] [DISP] disp_mgr_apply,line:2371:mgr 0 apply
[  136.534487] [DISP] bsp_disp_shadow_protect,line:688:[  136.539875] disp_runtime_idle

[  136.543224] sel=0, protect:1,  cnt=1
[  136.547465] [DISP] de_al_lyr_apply,line:484:ch0 z 0 dis
[  136.553371] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  136.559239] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  136.565125] [DISP] de_al_lyr_apply,line:484:ch3 z 0 dis
[  136.571000] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 dis
[  136.577061] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  136.583148] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  136.589215] [DISP] de_al_lyr_apply,line:487:pipe3 z 0 dis
[  136.595325] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  136.601179] [DISP] de_al_lyr_apply,line:502:format[1]=0
[  136.607040] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<0,0>
[  136.614677] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,0,0>
[  136.622693] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  136.630320] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  136.638337] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  136.645972] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  136.653978] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[3]=<0,0>
[  136.661600] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[3]=<0,0,0,0>
[  136.669625] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=0,ovlh[0]=0, bld_rect[0].w=0, bld_rect[0].h=0
[  136.681789] [DISP] de_vsu_set_para,line:274:sel0, ch 0, en=0, in<0x0>,out<0x0>
[  136.689903] [DISP] de_calc_overlay_scaler_para,line:187:fmt[1]=0, ovlw[1]=0,ovlh[1]=0, bld_rect[1].w=0, bld_rect[1].h=0
[  136.702011] [DISP] de_vsu_set_para,line:274:sel0, ch 1, en=0, in<0x0>,out<0x0>
[  136.710140] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[0]=<0,0,0,0>
[  136.717779] [DISP] de_rtmx_set_route,line:1539:sel0, pno0, zorder0, route:0x0
[  136.725794] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  136.734011] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[1]=<0,0,0,0>
[  136.741786] [DISP] de_rtmx_set_route,line:1539:sel0, pno1, zorder0, route:0x0
[  136.749831] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  136.758051] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[2]=<0,0,0,0>
[  136.765692] [DISP] de_rtmx_set_route,line:1539:sel0, pno2, zorder0, route:0x0
[  136.773706] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  136.781932] [DISP] de_al_lyr_apply,line:694:sel=0, pipe_rect[3]=<0,0,0,0>
[  136.789560] [DISP] de_rtmx_set_route,line:1539:sel0, pno3, zorder0, route:0x0
[  136.797589] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040580, reg=0x0
[  136.805813] [DISP] bsp_disp_shadow_protect,line:688:sel=0, protect:0,  cnt=0
[  136.813822] [DISP] disp_mgr_apply,line:2371:mgr 1 apply
[  136.819692] [DISP] bsp_disp_shadow_protect,line:688:sel=1, protect:1,  cnt=1
[  136.827623] [DISP] de_al_lyr_apply,line:484:ch0 z 0 dis
[  136.833506] [DISP] de_al_lyr_apply,line:484:ch1 z 1 dis
[  136.839373] [DISP] de_al_lyr_apply,line:484:ch2 z 0 dis
[  136.845251] [DISP] de_al_lyr_apply,line:487:pipe0 z 0 dis
[  136.851331] [DISP] de_al_lyr_apply,line:487:pipe1 z 0 dis
[  136.857389] [DISP] de_al_lyr_apply,line:487:pipe2 z 0 dis
[  136.863450] [DISP] de_al_lyr_apply,line:502:format[0]=0
[  136.869337] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[0]=<0,0>
[  136.876952] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[0]=<0,0,0,0>
[  136.884983] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[1]=<0,0>
[  136.892607] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[1]=<0,0,0,0>
[  136.900626] [DISP] de_calc_overlay_scaler_para,line:178:ovl_rect[2]=<0,0>
[  136.908250] [DISP] de_calc_overlay_scaler_para,line:180:bld_rect[2]=<0,0,0,0>
[  136.916287] [DISP] de_calc_overlay_scaler_para,line:187:fmt[0]=0, ovlw[0]=0,ovlh[0]=0, bld_rect[0].w=0, bld_rect[0].h=0
[  136.928394] [DISP] de_vsu_set_para,line:274:sel1, ch 0, en=0, in<0x0>,out<0x0>
[  136.936531] [DISP] de_al_lyr_apply,line:694:sel=1, pipe_rect[0]=<0,0,0,0>
[  136.944192] [DISP] de_rtmx_set_route,line:1539:sel1, pno0, zorder0, route:0x0
[  136.952224] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040180, reg=0x0
[  136.960435] [DISP] de_al_lyr_apply,line:694:sel=1, pipe_rect[1]=<0,0,0,0>
[  136.968083] [DISP] de_rtmx_set_route,line:1539:sel1, pno1, zorder0, route:0x0
[  136.976101] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040180, reg=0x0
[  136.984431] [DISP] de_al_lyr_apply,line:694:sel=1, pipe_rect[2]=<0,0,0,0>
[  136.992076] [DISP] de_rtmx_set_route,line:1539:sel1, pno2, zorder0, route:0x0
[  137.000104] [DISP] de_rtmx_set_route,line:1543:addr=0xffffffc07b040180, reg=0x0
[  137.008319] [DISP] bsp_disp_shadow_protect,line:688:sel=1, protect:0,  cnt=0
[  137.681568] healthd: battery l=79 v=4052 t=30.0 h=2 st=2 fc=1771 chg=u
[  141.701236] disp_runtime_suspend
[  141.704979] [DISP] disp_lcd_disable,line:2042:lcd 0
[  141.710646] LCD_close_flow
[  141.713762] LCD_bl_close
[  141.738393] [DISP] disp_sys_pwm_disable,line:607:disp_sys_pwm_Disable pwm 0
[  141.746399] [DISP] disp_sys_pwm_set_polarity,line:643:disp_sys_pwm_Set_Polarity pwm 0, active high
[  141.756631] [DISP] disp_lcd_panel_close,line:1754:close flow:step 0 finish, to delay 200
[  142.034341] [DISP] disp_lcd_panel_close,line:1754:close flow:step 1 finish, to delay 20
[  142.171220] [DISP] disp_lcd_panel_close,line:1754:close flow:step 2 finish, to delay 10
[  142.191207] LCD_power_off
[  142.194256] [DISP] disp_lcd_pin_cfg,line:1004:lcd 0 pin config, state off, 0
[  142.203349] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.212555] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.221751] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.230980] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.240180] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.249382] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.258569] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.267780] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.276877] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.285943] sun50iw10p1-pinctrl pio: expect_func as:dsi4lane, but muxsel(4) is func:dsi0
[  142.296582] twi_start()481 - [i2c0] START can't sendout!
[  142.302565] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.309220] twi_start()481 - [i2c0] START can't sendout!
[  142.315176] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.321853] twi_start()481 - [i2c0] START can't sendout!
[  142.327904] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.331677] [DISP] disp_sys_power_disable,line:530:suceess to disable regulator cldo1!
[  142.343576] msg ft5x_i2c_rxdata i2c read error: -121
[  142.344726] [DISP] disp_sys_power_disable,line:530:suceess to disable regulator cldo3!
[  142.357638] 6000000.disp supply cldo4 not found, using dummy regulator
[  142.357918] [DISP] disp_sys_power_disable,line:530:suceess to disable regulator cldo4!
[  142.358097] [DISP] disp_lcd_panel_close,line:1754:close flow:step 3 finish, to delay 500
[  142.383688] twi_start()481 - [i2c0] START can't sendout!
[  142.389657] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.396292] twi_start()481 - [i2c0] START can't sendout!
[  142.402269] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.408947] twi_start()481 - [i2c0] START can't sendout!
[  142.414951] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.421440] msg ft5x_i2c_rxdata i2c read error: -121
[  142.427247] twi_start()481 - [i2c0] START can't sendout!
[  142.433245] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.439942] twi_start()481 - [i2c0] START can't sendout!
[  142.445928] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.452606] twi_start()481 - [i2c0] START can't sendout!
[  142.458598] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.465088] msg ft5x_i2c_rxdata i2c read error: -121
[  142.470910] twi_start()481 - [i2c0] START can't sendout!
[  142.476887] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.483557] twi_start()481 - [i2c0] START can't sendout!
[  142.489530] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.496200] twi_start()481 - [i2c0] START can't sendout!
[  142.502163] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.508628] msg ft5x_i2c_rxdata i2c read error: -121
[  142.514412] twi_start()481 - [i2c0] START can't sendout!
[  142.520359] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.526978] twi_start()481 - [i2c0] START can't sendout!
[  142.532935] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.539571] twi_start()481 - [i2c0] START can't sendout!
[  142.545580] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.552031] msg ft5x_i2c_rxdata i2c read error: -121
[  142.557790] twi_start()481 - [i2c0] START can't sendout!
[  142.563749] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.570386] twi_start()481 - [i2c0] START can't sendout!
[  142.576345] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.582980] twi_start()481 - [i2c0] START can't sendout!
[  142.588939] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.595394] msg ft5x_i2c_rxdata i2c read error: -121
[  142.601154] twi_start()481 - [i2c0] START can't sendout!
[  142.607115] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.613749] twi_start()481 - [i2c0] START can't sendout!
[  142.619710] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.626342] twi_start()481 - [i2c0] START can't sendout!
[  142.632304] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.638754] msg ft5x_i2c_rxdata i2c read error: -121
[  142.644513] twi_start()481 - [i2c0] START can't sendout!
[  142.650468] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.657108] twi_start()481 - [i2c0] START can't sendout!
[  142.663066] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.669700] twi_start()481 - [i2c0] START can't sendout!
[  142.675659] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.682185] msg ft5x_i2c_rxdata i2c read error: -121
[  142.688006] twi_start()481 - [i2c0] START can't sendout!
[  142.693989] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.700621] twi_start()481 - [i2c0] START can't sendout!
[  142.706585] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.713220] twi_start()481 - [i2c0] START can't sendout!
[  142.719184] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.725634] msg ft5x_i2c_rxdata i2c read error: -121
[  142.731399] twi_start()481 - [i2c0] START can't sendout!
[  142.737355] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.744085] twi_start()481 - [i2c0] START can't sendout!
[  142.750112] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.756750] twi_start()481 - [i2c0] START can't sendout!
[  142.762711] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.769171] msg ft5x_i2c_rxdata i2c read error: -121
[  142.774925] twi_start()481 - [i2c0] START can't sendout!
[  142.780892] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.787535] twi_start()481 - [i2c0] START can't sendout!
[  142.793495] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.800141] twi_start()481 - [i2c0] START can't sendout!
[  142.806099] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.812555] msg ft5x_i2c_rxdata i2c read error: -121
[  142.818311] twi_start()481 - [i2c0] START can't sendout!
[  142.824272] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.830921] twi_start()481 - [i2c0] START can't sendout!
[  142.836882] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.843518] twi_start()481 - [i2c0] START can't sendout!
[  142.849519] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.855996] msg ft5x_i2c_rxdata i2c read error: -121
[  142.861755] twi_start()481 - [i2c0] START can't sendout!
[  142.867714] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.874292] [DISP] disp_sys_gpio_request,line:280:[  142.874369] twi_start()481 - [i2c0] START can't sendout!
[  142.874372] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.874680] twi_start()481 - [i2c0] START can't sendout!
[  142.874682] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.874786] msg ft5x_i2c_rxdata i2c read error: -121
[  142.874995] twi_start()481 - [i2c0] START can't sendout!
[  142.874997] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.875308] twi_start()481 - [i2c0] START can't sendout!
[  142.875310] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.875620] twi_start()481 - [i2c0] START can't sendout!
[  142.875623] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.875727] msg ft5x_i2c_rxdata i2c read error: -121
[  142.875936] twi_start()481 - [i2c0] START can't sendout!
[  142.875938] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.876245] twi_start()481 - [i2c0] START can't sendout!
[  142.876248] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.876558] twi_start()481 - [i2c0] START can't sendout!
[  142.876560] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.876665] msg ft5x_i2c_rxdata i2c read error: -121
[  142.876874] twi_start()481 - [i2c0] START can't sendout!
[  142.876877] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
[  142.877184] twi_start()481 - [i2c0] START can't sendout!
[  142.877186] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 3 printk messages dropped ** [  142.877821] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  142.886769] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  142.896195] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  142.905916] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  142.915019] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  142.924428] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  142.934160] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  142.943257] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  142.952724] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  142.962456] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  142.971548] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  142.980956] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  142.990693] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.000109] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.009837] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.019247] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.028980] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.038390] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.048119] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.057223] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.066631] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.076375] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.085471] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.094896] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.104627] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.114032] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.123763] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.133184] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.142911] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.152347] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.162076] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.171172] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.180578] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.190305] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.199735] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.209439] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.218847] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.228559] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.237978] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.247703] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.256792] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.266196] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.275925] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.285026] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.294755] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.303836] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.313245] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.322968] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.332062] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.341494] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.351226] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.360628] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.370343] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.379753] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.389473] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.398890] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.408622] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.417708] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.427112] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.436837] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.445935] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.455340] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.465055] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.474140] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.483857] twi_start()481 - [i2c0] START can't sendout!
** 46 printk messages dropped ** [  143.490128] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 64 printk messages dropped ** [  143.498908] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.508011] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.517741] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.526839] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.536573] twi_start()481 - [i2c0] START can't sendout!
** 60 printk messages dropped ** [  143.544727] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 64 printk messages dropped ** [  143.553541] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.562628] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.572361] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.581467] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.591193] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.600280] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.610023] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.619130] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.628874] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.642326] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.651678] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.661345] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.671005] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.680039] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.690659] twi_start()481 - [i2c0] START can't sendout!
** 67 printk messages dropped ** [  143.700703] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.710366] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.720023] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.729379] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.739036] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 72 printk messages dropped ** [  143.748699] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.758358] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 69 printk messages dropped ** [  143.767719] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.777371] sunxi_i2c_do_xfer()1928 - [i2c0] twi_regulator: 
** 71 printk messages dropped ** [  143.787022] twi_start()481 - [i2c0] START can't sendout!

离线

#12 昨天 17:46:32

geekchun
会员
注册时间: 2020-11-11
已发帖子: 72
积分: 2

Re: 全志触摸屏扫不到地址是怎么回事 求助!!!

扫描不到查下硬件吧,触摸芯片电源复位是否都正常,建议逻辑分析仪或者示波器看下,不要盲调

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


太原小智科技有限责任公司 - 东莞哇酷科技有限公司联合开发