优化272 TP效果
authorpenglei <1624952103@qq.com>
Fri, 7 Nov 2025 12:20:45 +0000 (20:20 +0800)
committerpenglei <1624952103@qq.com>
Fri, 7 Nov 2025 12:20:45 +0000 (20:20 +0800)
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/drivers/drivers/driver/touch/cst92xx_touch/cst92xx_ctrl.c
code/sdk/drivers/drivers/driver/touch/cst92xx_touch/cst92xx_touch1.c
code/sdk/drivers/drivers/driver/touch/cst92xx_touch/cst92xx_touch1.h

index 2e726b4..adb528a 100644 (file)
@@ -175,12 +175,9 @@ static void sample_gfx_init(void)
     ztw523_host_init_sample();\r
 #endif\r
 #endif\r
-    printf("11111  \n");\r
     uapi_lcd_init();\r
     uapi_vau_module_init();\r
-    printf("22222  \n");\r
     uapi_dpu_module_init();\r
-    printf("33333  \n");\r
 #ifdef SUPPORT_GPU_JPEG\r
     uapi_jpeg_module_init();\r
 #endif\r
index 46e2f6a..f792405 100644 (file)
@@ -101,17 +101,21 @@ ext_errno cst92xx_tp_i2c_data_read(uint32_t reg_addr, uint8_t reg_len, uint8_t *
 \r
     uint8_t reg_addr_buf[4] = {0};\r
 \r
-    ret = cst92xx_tp_i2c_rd_wr_param_check(data_buf, data_len);\r
-    if (ret != 0) {\r
-        tp_err("tp data read param invalid! ret=0x%x", ret);\r
-        return ret;\r
-    }\r
+    if(data_len)\r
+    {\r
+        ret = cst92xx_tp_i2c_rd_wr_param_check(data_buf, data_len);\r
+        if (ret != 0) {\r
+            tp_err("tp data read param invalid! ret=0x%x", ret);\r
+            return ret;\r
+        }\r
 \r
-    if (memset_s(g_tp_recv_buf, data_len, 0, data_len) != EOK) {\r
-        tp_err("tp read buff set fail!");\r
-        return EXT_ERR_FAILURE;\r
+        if (memset_s(g_tp_recv_buf, data_len, 0, data_len) != EOK) {\r
+            tp_err("tp read buff set fail!");\r
+            return EXT_ERR_FAILURE;\r
+        }\r
     }\r
 \r
+\r
     // printf("reg_addr : 0x%x\n",reg_addr);\r
     // for(int i = 0; i < reg_len; i++)\r
     // {\r
@@ -146,27 +150,48 @@ ext_errno cst92xx_tp_i2c_data_read(uint32_t reg_addr, uint8_t reg_len, uint8_t *
 \r
     data.send_buf = reg_buf;\r
     data.send_len = reg_len;\r
-    data.receive_buf = g_tp_recv_buf;\r
-    data.receive_len = data_len;\r
+    if(data_len)\r
+    {\r
+        data.receive_buf = g_tp_recv_buf;\r
+        data.receive_len = data_len;\r
+    }\r
+\r
+\r
 \r
     // printf("send_buf[0]:[%x] send_buf[1]:[%x] send_buf[2]:[%x] send_buf[3]:[%x]\n",data.send_buf[0],data.send_buf[1],data.send_buf[2],data.send_buf[3]);\r
+    if(data_len)\r
+    {\r
+        for (retry = 0; retry < CST92XX_I2C_TIME_MAX; retry++) {\r
+            ret = uapi_i2c_master_writeread(CST92XX_I2C_BUS, CST92XX_I2C_ADDR, &data);\r
+            if (ret == EXT_ERR_SUCCESS) {\r
+                break;\r
+            }\r
+        }\r
+        if (ret != EXT_ERR_SUCCESS) {\r
+            tp_err("tp data read fail! ret=0x%x", ret);\r
+            return ret;\r
+        }\r
 \r
-    for (retry = 0; retry < CST92XX_I2C_TIME_MAX; retry++) {\r
-        ret = uapi_i2c_master_writeread(CST92XX_I2C_BUS, CST92XX_I2C_ADDR, &data);\r
+        ret = (uint32_t)memcpy_s(data_buf, data_len, g_tp_recv_buf, data_len);\r
+        if (ret != EOK) {\r
+            tp_err("tp data buf content copy fail! ret=0x%x", ret);\r
+            return ret;\r
+        }\r
+    }\r
+    else\r
+    {\r
+        for (retry = 0; retry < CST92XX_I2C_TIME_MAX; retry++) {\r
+        ret = uapi_i2c_master_write(CST92XX_I2C_BUS, CST92XX_I2C_ADDR, &data);\r
         if (ret == EXT_ERR_SUCCESS) {\r
             break;\r
         }\r
-    }\r
-    if (ret != EXT_ERR_SUCCESS) {\r
-        tp_err("tp data read fail! ret=0x%x", ret);\r
-        return ret;\r
+        }\r
+        if (ret != EXT_ERR_SUCCESS) {\r
+            tp_err("tp data write fail! ret=0x%x", ret);\r
+            return ret;\r
+        }\r
     }\r
 \r
-    ret = (uint32_t)memcpy_s(data_buf, data_len, g_tp_recv_buf, data_len);\r
-    if (ret != EOK) {\r
-        tp_err("tp data buf content copy fail! ret=0x%x", ret);\r
-        return ret;\r
-    }\r
 \r
     return EXT_ERR_SUCCESS;\r
 }\r
index ef6fee6..5524ab5 100644 (file)
@@ -63,13 +63,13 @@ static int hyn_write_data(struct hyn_ts_data *hyn_92xxdata,uint8_t *buf, uint8_t
 {\r
     cst92xx_tp_i2c_data_write(buf,reg_len+len);\r
 \r
-    return 0;\r
+    return 1;\r
 }\r
 \r
 static int hyn_wr_reg(struct hyn_ts_data *hyn_92xxdata, uint32_t reg_addr, uint8_t reg_len, uint8_t *rbuf, uint16_t rlen)\r
 {\r
     cst92xx_tp_i2c_data_read(reg_addr,reg_len,rbuf,rlen);\r
-    return 0;\r
+    return 1;\r
 }\r
 \r
 // cst92xx_drv_data g_cst92xx_drv = {\r
@@ -217,7 +217,7 @@ int cst92xx_init(struct hyn_ts_data* ts_data)
     hyn_delay_ms(40);\r
 \r
     ret = cst92xx_updata_tpinfo();\r
-    if(ret == FALSE){\r
+    if(ret != 0){\r
         HYN_INFO("cst92xx_updata_tpinfo failed");\r
     }\r
     ret |= cst92xx_set_workmode(NOMAL_MODE,0);\r
@@ -228,70 +228,60 @@ int cst92xx_init(struct hyn_ts_data* ts_data)
 }\r
 #endif\r
 \r
-static int cst92xx_enter_boot(void)\r
+static int  cst92xx_enter_boot(void)\r
 {\r
-    if(hyn_92xxdata == NULL)\r
-    {\r
-        return EXT_ERR_FAILURE;\r
-    }\r
-\r
-    int ok = FALSE,t,retry = 3;\r
+    int ok = FALSE,t;\r
     uint8_t i2c_buf[4] = {0};\r
-    hyn_set_i2c_addr(hyn_92xxdata,BOOT_I2C_ADDR);\r
+\r
     for (t = 10;; t += 2)\r
     {\r
-        if(t >= 30 || retry==0){\r
+        if (t >= 30){\r
             return FALSE;\r
         }\r
 \r
-        // cst92xx_reset();\r
         cst92xx_reset();\r
         hyn_delay_ms(t);\r
 \r
-        ok = hyn_wr_reg(hyn_92xxdata, 0xA001AA, 3, i2c_buf, 2);\r
-        if(ok == FALSE || (i2c_buf[0]==0x5A && i2c_buf[1]==0x5A)){\r
-            if(ok==TRUE && retry){\r
-                retry--;\r
-                t = 10;\r
-            }\r
+        ok = hyn_wr_reg(hyn_92xxdata, 0xA001AA, 3, i2c_buf, 0);\r
+        if(ok == FALSE){\r
             continue;\r
         }\r
+\r
         hyn_delay_ms(1);\r
+\r
         ok = hyn_wr_reg(hyn_92xxdata, 0xA002,  2, i2c_buf, 2);\r
         if(ok == FALSE){\r
             continue;\r
         }\r
+\r
         if ((i2c_buf[0] == 0x55) && (i2c_buf[1] == 0xB0)) {\r
             break;\r
         }\r
     }\r
-    ok = hyn_wr_reg(hyn_92xxdata, 0xA00100, 3, i2c_buf, 2);\r
+\r
+    ok = hyn_wr_reg(hyn_92xxdata, 0xA00100, 3, i2c_buf, 0);\r
     if(ok == FALSE){\r
         return FALSE;\r
     }\r
+\r
     return TRUE;\r
 }\r
 \r
 static int erase_all_mem(void)\r
 {\r
-    if(hyn_92xxdata == NULL)\r
-    {\r
-        return EXT_ERR_FAILURE;\r
-    }\r
-\r
     int ok = FALSE,t;\r
     uint8_t i2c_buf[8];\r
 \r
        //erase_all_mem\r
-    ok = hyn_wr_reg(hyn_92xxdata, 0xA0140000, 4, i2c_buf, 2);\r
+    ok = hyn_wr_reg(hyn_92xxdata, 0xA0140000, 4, i2c_buf, 0);\r
     if (ok == FALSE){\r
         return FALSE;\r
     }\r
-    ok = hyn_wr_reg(hyn_92xxdata, 0xA00C807F, 4, i2c_buf, 2);\r
+    ok = hyn_wr_reg(hyn_92xxdata, 0xA00C807F, 4, i2c_buf, 0);\r
     if (ok == FALSE){\r
         return FALSE;\r
     }\r
-    ok = hyn_wr_reg(hyn_92xxdata, 0xA004EC, 3, i2c_buf, 2);\r
+    ok = hyn_wr_reg(hyn_92xxdata, 0xA004EC, 3, i2c_buf, 0);\r
     if (ok == FALSE){\r
         return FALSE;\r
     }\r
@@ -353,7 +343,7 @@ static int write_mem_page(uint16_t addr, uint8_t *buf, uint16_t len)
     }\r
 \r
 \r
-    ok =  hyn_wr_reg(hyn_92xxdata,0xA004EE,3,i2c_buf,2);\r
+    ok =  hyn_wr_reg(hyn_92xxdata,0xA004EE,3,i2c_buf,0);\r
     if(ok == FALSE){\r
         return FALSE;\r
     }\r
@@ -420,7 +410,8 @@ static uint32_t cst92xx_read_checksum(void)
     uint32_t chip_checksum = 0;\r
     uint8_t retry = 5;\r
     \r
-    ok =  hyn_wr_reg(hyn_92xxdata,0xA00300,3,i2c_buf,2);\r
+    hyn_92xxdata->boot_is_pass = 0;\r
+    ok =  hyn_wr_reg(hyn_92xxdata,0xA00300,3,i2c_buf,0);\r
     if (ok == FALSE) {\r
         return FALSE;\r
     }      \r
@@ -436,12 +427,17 @@ static uint32_t cst92xx_read_checksum(void)
 \r
     hyn_delay_ms(1);\r
      if(i2c_buf[0] == 0x01){\r
+        hyn_92xxdata->boot_is_pass = 1;\r
         memset(i2c_buf,0,sizeof(i2c_buf));\r
         ok =  hyn_wr_reg(hyn_92xxdata,0xA008,2,i2c_buf,4);\r
         if (ok == FALSE) {\r
             return FALSE;\r
         }      \r
-        chip_checksum = uint8_tTO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);\r
+\r
+        chip_checksum = ((uint32_t)(i2c_buf[0])) |\r
+            (((uint32_t)(i2c_buf[1])) << 8) |\r
+            (((uint32_t)(i2c_buf[2])) << 16) |\r
+            (((uint32_t)(i2c_buf[3])) << 24);\r
     }\r
     else{\r
         hyn_92xxdata->need_updata_fw = 1;\r
@@ -471,13 +467,13 @@ static int cst92xx_updata_fw(uint8_t *bin_addr, uint16_t len)
     if(0 != hyn_92xxdata->fw_file_name[0]){\r
         //node to update\r
         ok = copy_for_updata(hyn_92xxdata,i2c_buf,CST92XX_BIN_SIZE-20,4);\r
-        fw_checksum = uint8_tTO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);\r
+        fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);\r
         if(hyn_92xxdata->hw_info.ic_fw_checksum == fw_checksum || ok != 0){\r
              HYN_INFO("no update,fw_checksum is same:0x%04x",fw_checksum);\r
              goto UPDATA_END;\r
         }\r
     }else{\r
-        fw_checksum = uint8_tTO32(bin_addr[CHECKSUM_OFFECT+3],bin_addr[CHECKSUM_OFFECT+2],bin_addr[CHECKSUM_OFFECT+1],bin_addr[CHECKSUM_OFFECT+0]);\r
+        fw_checksum = U8TO32(bin_addr[CHECKSUM_OFFECT+3],bin_addr[CHECKSUM_OFFECT+2],bin_addr[CHECKSUM_OFFECT+1],bin_addr[CHECKSUM_OFFECT+0]);\r
     }\r
     HYN_INFO("updating fw checksum:0x%04x",fw_checksum);\r
 \r
@@ -517,7 +513,7 @@ static int cst92xx_updata_fw(uint8_t *bin_addr, uint16_t len)
         break;\r
     }\r
 \r
-    hyn_wr_reg(hyn_92xxdata,0xA006EE,3,i2c_buf,2); //exit boot\r
+    hyn_wr_reg(hyn_92xxdata,0xA006EE,3,i2c_buf,0); //exit boot\r
     hyn_delay_ms(2);\r
 \r
 UPDATA_END:   \r
@@ -538,39 +534,135 @@ UPDATA_END:
 \r
     return ok_copy;\r
 }\r
-\r
-static int cst92xx_updata_tpinfo(void)\r
+static int16_t read_word_from_mem(uint8_t type, uint16_t addr, uint32_t *value)\r
 {\r
-    if(hyn_92xxdata == NULL)\r
+    int16_t ret = 0;\r
+    uint8_t i2c_buf[4] = {0},t;\r
+\r
+    i2c_buf[0] = 0xA0;\r
+    i2c_buf[1] = 0x10;\r
+    i2c_buf[2] = type;\r
+    ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,3); \r
+    if (ret)\r
+    {\r
         return -1;\r
+    }\r
 \r
-    uint8_t buf[30],retry=8;\r
-    struct tp_info *ic = &hyn_92xxdata->hw_info;\r
-    if(ic == NULL)\r
+    i2c_buf[0] = 0xA0;\r
+    i2c_buf[1] = 0x0C;\r
+    i2c_buf[2] = addr;\r
+    i2c_buf[3] = addr >> 8;\r
+    ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,4); \r
+    if (ret)\r
+    {\r
         return -1;\r
+    }\r
 \r
-    int ret = 0;\r
-    hyn_92xxdata->boot_is_pass = 0;\r
-    while(retry--){\r
-        cst92xx_set_workmode(0xff,DISABLE);\r
-        ret = hyn_wr_reg(hyn_92xxdata,0xD101,2,buf,2);\r
-        if(ret) continue;\r
-        ret = hyn_wr_reg(hyn_92xxdata,0xD1F4,2,buf,28);\r
-        printf("buf[19] :0x%x\n",buf[19]);\r
-        if(ret==0 && (buf[19]==0x92||buf[19]==0x91)){\r
+    i2c_buf[0] = 0xA0;\r
+    i2c_buf[1] = 0x04;\r
+    i2c_buf[2] = 0xE4;\r
+    ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,3); \r
+    if (ret)\r
+    {\r
+        return -1;\r
+    }\r
+\r
+    for (t = 0;; t++)\r
+    {\r
+        if (t >= 100)\r
+        {\r
+            return -1;\r
+        }\r
+        ret =hyn_wr_reg(hyn_92xxdata,0xA004,2,i2c_buf,1);\r
+        if (ret)\r
+        {\r
+            continue;\r
+        }\r
+        if (i2c_buf[0] == 0x00)\r
+        {\r
             break;\r
         }\r
-        ret = -1;\r
     }\r
-    if(ret){\r
-         return FALSE;\r
+    ret =hyn_wr_reg(hyn_92xxdata,0xA018,2,i2c_buf,4);\r
+    if (ret)\r
+    {\r
+        return -1;\r
+    }\r
+    *value = ((uint32_t)(i2c_buf[0])) |\r
+             (((uint32_t)(i2c_buf[1])) << 8) |\r
+             (((uint32_t)(i2c_buf[2])) << 16) |\r
+             (((uint32_t)(i2c_buf[3])) << 24);\r
+\r
+    return 0;\r
+}\r
+static int cst92xx_read_chip_id(void)\r
+{\r
+    int16_t ret = 0;\r
+    uint8_t retry = 3;\r
+    uint32_t partno_chip_type,module_id;\r
+\r
+    ret = cst92xx_enter_boot();\r
+    if (ret == FALSE)\r
+    {\r
+        HYN_ERROR("enter_bootloader error");\r
+        return -1;\r
+    }\r
+    for (; retry > 0; retry--)\r
+    {\r
+        // partno\r
+        ret = read_word_from_mem(1, 0x077C, &partno_chip_type);\r
+        if (ret)\r
+        {\r
+            continue;\r
+        }\r
+        // module id\r
+        ret = read_word_from_mem(0, 0x7FC0, &module_id);\r
+        if (ret)\r
+        {\r
+            continue;\r
+        }\r
+        if ((partno_chip_type >> 16) == 0xCACA)\r
+        {\r
+            partno_chip_type &= 0xffff;\r
+            break;\r
+        }\r
+    }\r
+    cst92xx_reset();\r
+    LOS_Mdelay(30);\r
+    HYN_INFO("partno_chip_type: 0x%04x", partno_chip_type);\r
+    HYN_INFO("module_id: 0x%04x", module_id);\r
+    if ((partno_chip_type != 0x9217) && (partno_chip_type != 0x9220))\r
+    {\r
+        HYN_ERROR("partno_chip_type error 0x%04x", partno_chip_type);\r
+        //return -1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+static int cst92xx_updata_tpinfo(void)\r
+{\r
+    uint8_t buf[30];\r
+    struct tp_info *ic = &hyn_92xxdata->hw_info;\r
+    int ret = 0;\r
+\r
+    cst92xx_set_workmode(0xff,DISABLE);\r
+    ret = hyn_wr_reg(hyn_92xxdata,0xD101,2,buf,0);\r
+    if(ret == FALSE){\r
+        return FALSE;\r
+    }\r
+    LOS_Mdelay(5);\r
+\r
+    //firmware_project_id   firmware_ic_type\r
+    ret = hyn_wr_reg(hyn_92xxdata,0xD1F4,2,buf,28);\r
+    if(ret == FALSE){\r
+        return FALSE;\r
     }\r
-    hyn_92xxdata->boot_is_pass = 1;\r
     ic->fw_project_id = ((uint16_t)buf[17] <<8) + buf[16];\r
     ic->fw_chip_type = ((uint16_t)buf[19] <<8) + buf[18];\r
 \r
     //firmware_version\r
     ic->fw_ver = (buf[23]<<24)|(buf[22]<<16)|(buf[21]<<8)|buf[20];\r
+\r
     //tx_num   rx_num   key_num\r
     ic->fw_sensor_txnum = ((uint16_t)buf[1]<<8) + buf[0];\r
     ic->fw_sensor_rxnum = buf[2];\r
@@ -581,11 +673,12 @@ static int cst92xx_updata_tpinfo(void)
 \r
     //fw_checksum\r
     ic->ic_fw_checksum = (buf[27]<<24)|(buf[26]<<16)|(buf[25]<<8)|buf[24];\r
+\r
     HYN_INFO("IC_info project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);\r
    \r
     cst92xx_set_workmode(NOMAL_MODE,ENABLE);\r
    \r
-    return TRUE;\r
+    return 0;\r
 }\r
 \r
 static int cst92xx_updata_judge(uint8_t *p_fw, uint16_t len)\r
@@ -593,22 +686,35 @@ static int cst92xx_updata_judge(uint8_t *p_fw, uint16_t len)
     uint32_t f_checksum,f_fw_ver,f_ictype,f_fw_project_id;\r
     uint8_t *p_data = p_fw + len - 28;   //7F64\r
     struct tp_info *ic = &hyn_92xxdata->hw_info;\r
+    int ret;\r
 \r
-    f_fw_project_id = uint8_tTO16(p_data[1],p_data[0]);\r
-    f_ictype = uint8_tTO16(p_data[3],p_data[2]);\r
+    ret = cst92xx_enter_boot();\r
+    if (ret == FALSE){\r
+        HYN_INFO("cst92xx_enter_boot fail,need update");\r
+        return 1; \r
+    }\r
+    hyn_92xxdata->hw_info.ic_fw_checksum = cst92xx_read_checksum();\r
+    if(hyn_92xxdata->boot_is_pass == 0){\r
+        HYN_INFO("boot_is_pass %d,need force update",hyn_92xxdata->boot_is_pass);\r
+        return 1; //need updata\r
+    }\r
+    \r
+    f_fw_project_id = U8TO16(p_data[1],p_data[0]);\r
+    f_ictype = U8TO16(p_data[3],p_data[2]);\r
 \r
-    f_fw_ver = uint8_tTO16(p_data[7],p_data[6]);\r
-    f_fw_ver = (f_fw_ver<<16)|uint8_tTO16(p_data[5],p_data[4]);\r
+    f_fw_ver = U8TO16(p_data[7],p_data[6]);\r
+    f_fw_ver = (f_fw_ver<<16)|U8TO16(p_data[5],p_data[4]);\r
 \r
-    f_checksum = uint8_tTO16(p_data[11],p_data[10]);\r
-    f_checksum = (f_checksum << 16)|uint8_tTO16(p_data[9],p_data[8]);\r
+    f_checksum = U8TO16(p_data[11],p_data[10]);\r
+    f_checksum = (f_checksum << 16)|U8TO16(p_data[9],p_data[8]);\r
 \r
 \r
     HYN_INFO("Bin_info project_id:0x%04x ictype:0x%04x fw_ver:0x%x checksum:0x%x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);\r
-    if(\r
-        (f_checksum != ic->ic_fw_checksum && f_fw_ver >= ic->fw_ver && f_ictype == ic->fw_chip_type)\r
-        || (hyn_92xxdata->boot_is_pass==0) //empty chip\r
-    ){\r
+    if(f_ictype != ic->fw_chip_type || f_fw_project_id != ic->fw_project_id){\r
+        HYN_ERROR("not update,please confirm: ic_type 0x%04x,ic_project_id 0x%04x",ic->fw_chip_type,ic->fw_project_id);\r
+        return 0; //not updata\r
+    }\r
+    if(f_checksum != ic->ic_fw_checksum && f_fw_ver > ic->fw_ver){\r
         HYN_INFO("need update!");\r
         return 1; //need updata\r
     }\r
@@ -620,68 +726,82 @@ static int cst92xx_updata_judge(uint8_t *p_fw, uint16_t len)
 \r
 int cst92xx_set_workmode(uint8_t mode,uint8_t enable)\r
 {\r
-    // printf("mode : %d\n",mode);\r
     int ok = FALSE;\r
     uint8_t i2c_buf[4] = {0};\r
     uint8_t i = 0;\r
     hyn_92xxdata->work_mode = mode;\r
-\r
-    for(i=0;i<3;i++){\r
-        ok = hyn_wr_reg(hyn_92xxdata,0xD11E,2,i2c_buf,2);\r
-        LOS_Udelay(200);\r
-        ok |= hyn_wr_reg(hyn_92xxdata,0x0002,2,i2c_buf,2);\r
-        printf("i2c_buf[1] :0x%x\n",i2c_buf[1]);\r
-        if(ok==TRUE && i2c_buf[1] == 0x1E){\r
+    // if(mode != NOMAL_MODE){\r
+    //     hyn_esdcheck_switch(hyn_92xxdata,DISABLE);\r
+    // }\r
+    for(i=0;i<3;i++)\r
+    {\r
+        ok = hyn_wr_reg(hyn_92xxdata,0xD11E,2,i2c_buf,0);\r
+        if (ok == FALSE) {\r
+            msleep(1);\r
+            continue;\r
+        }\r
+        msleep(1);\r
+        ok = hyn_wr_reg(hyn_92xxdata,0x0002,2,i2c_buf,2);\r
+        if (ok == FALSE) {\r
+            msleep(1);\r
+            continue;\r
+        }\r
+        if(i2c_buf[1] == 0x1E){\r
             break;\r
         }     \r
     }    \r
-    // hyn_esdcheck_switch(hyn_92xxdata,enable);\r
+\r
     switch(mode){\r
         case NOMAL_MODE:\r
             hyn_irq_set(hyn_92xxdata,ENABLE);\r
-            ok = hyn_wr_reg(hyn_92xxdata,0xD109,2,i2c_buf,2);\r
+            // hyn_esdcheck_switch(hyn_92xxdata,ENABLE);\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD109,2,i2c_buf,0);\r
+            if (ok == FALSE) {\r
+                return FALSE;\r
+            }\r
             break;\r
         case GESTURE_MODE:\r
-            ok = hyn_wr_reg(hyn_92xxdata,0xD104,2,i2c_buf,2);\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD104,2,i2c_buf,0);\r
+            if (ok == FALSE) {\r
+                return FALSE;\r
+            }\r
             break;\r
         case LP_MODE:\r
-            ok = hyn_wr_reg(hyn_92xxdata,0xD107,2,i2c_buf,2);\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD107,2,i2c_buf,0);\r
+            if (ok == FALSE) {\r
+                return FALSE;\r
+            }\r
             break;\r
         case DIFF_MODE:\r
-            ok = hyn_wr_reg(hyn_92xxdata,0xD10D,2,i2c_buf,2);\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD10D,2,i2c_buf,0);\r
+            if (ok == FALSE) {\r
+                return FALSE;\r
+            }\r
             break;\r
+\r
         case RAWDATA_MODE:\r
-            ok = hyn_wr_reg(hyn_92xxdata,0xD10A,2,i2c_buf,2);\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD10A,2,i2c_buf,0);\r
+            if (ok == FALSE) {\r
+                return FALSE;\r
+            }\r
             break;\r
         case FAC_TEST_MODE:\r
-            hyn_wr_reg(hyn_92xxdata,0xD114,2,i2c_buf,2);\r
-            msleep(50);\r
-            break;\r
-        case CHARGE_EXIT:\r
-        case CHARGE_ENTER:\r
-            hyn_92xxdata->charge_is_enable = mode&0x01;\r
-            ok = hyn_wr_reg(hyn_92xxdata,(mode&0x01)? 0xD01F:0xD020,2,i2c_buf,2); //charg mode\r
-            mode = hyn_92xxdata->work_mode; //not switch work mode\r
-            HYN_INFO("set_charge:%d",hyn_92xxdata->charge_is_enable);\r
-            break;\r
-        case ENTER_BOOT_MODE:\r
-            ok = cst92xx_enter_boot();\r
+            hyn_wr_reg(hyn_92xxdata,0xD114,2,i2c_buf,0);\r
             break;\r
         case DEEPSLEEP:\r
-            hyn_wr_reg(hyn_92xxdata,0xD105,2,i2c_buf,2);\r
+            hyn_wr_reg(hyn_92xxdata,0xD105,2,i2c_buf,0);\r
             break;\r
         default :\r
             hyn_92xxdata->work_mode = NOMAL_MODE;\r
-            ok = -2;\r
             break;\r
     }\r
-    if(ok != -2){\r
-        hyn_92xxdata->work_mode = mode;\r
-    }\r
-    HYN_INFO("set_workmode:%d ret:%d",mode,ok);\r
-    return ok;\r
+\r
+    return 0;\r
 }\r
 \r
+\r
+\r
+\r
 static int cst92xx_supend(void)\r
 {\r
     HYN_ENTER();\r
@@ -689,209 +809,234 @@ static int cst92xx_supend(void)
     return 0;\r
 }\r
 \r
-\r
 static int cst92xx_resum(void)\r
 {\r
     cst92xx_reset();\r
     msleep(50);\r
-    cst92xx_set_workmode(NOMAL_MODE,1);\r
+    cst92xx_set_workmode(NOMAL_MODE,0);\r
     return 0;\r
 }\r
 \r
 \r
-    // if (model == 0)\r
-    // {\r
-    //     g_cst92xx_drv.touch_msg.tp_event = MC_TP_RELEASE;\r
-    //     point_count=0;\r
-    // }else{\r
-    //     if (point_count==0)\r
-    //     {\r
-    //         g_cst92xx_drv.touch_msg.tp_event = MC_TP_PRESS;\r
-    //     }else{\r
-    //         g_cst92xx_drv.touch_msg.tp_event = MC_TP_MOVE;\r
-    //     }\r
-    //     point_count++;\r
-    // }\r
+static int cst92xx_report(void)\r
+{\r
+    static int point_count = 0;\r
+    int ok = FALSE;\r
+    uint8_t i2c_buf[MAX_POINTS_REPORT*5+5] = {0};\r
+    uint8_t finger_num = 0;\r
+    uint8_t key_state=0,key_id = 0;\r
+\r
+    hyn_92xxdata->rp_buf.report_need = REPORT_NONE;\r
+\r
+    ok = hyn_wr_reg(hyn_92xxdata,0xD000,2,i2c_buf,sizeof(i2c_buf));\r
+    if (ok == FALSE){\r
+        return FALSE;\r
+    }   \r
         \r
-    // g_cst92xx_drv.touch_msg.tp_event_info.x_axis[0] = x_axis;\r
-    // g_cst92xx_drv.touch_msg.tp_event_info.y_axis[0] = y_axis;\r
-    // g_cst92xx_drv.touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms();\r
-    \r
-    // // } else {\r
-    // //     g_cst92xx_drv.touch_msg.tp_event = MC_TP_INVALID;\r
-    // //     tp_warning("TOUCH:parse wrong touchstatus %d", touch_status);\r
-    // //     return EXT_ERR_SUCCESS;\r
-    // // }\r
+    ok = hyn_wr_reg(hyn_92xxdata,0xD000AB,3,i2c_buf,0);\r
+    if (ok == FALSE){\r
+        return FALSE;\r
+    }   \r
 \r
-    // return EXT_ERR_SUCCESS;\r
 \r
-static int cst92xx_report(void)\r
-{\r
-    if(hyn_92xxdata == NULL)\r
-    {\r
-        return EXT_ERR_FAILURE;\r
+    if (i2c_buf[6] != 0xAB) {\r
+        HYN_INFO("fail buf[6]=0x%02x",i2c_buf[6]);\r
+        return FALSE;\r
     }\r
-    int ret = FALSE;\r
-    uint8_t i2c_buf[MAX_FINGER*5+5] = {0};\r
-    uint8_t finger_num = 0,key_state=0,retry=3,re_len=0,ges_state;\r
 \r
-    while(--retry){\r
-        hyn_wr_reg(hyn_92xxdata,0xD000,2,i2c_buf,2); //wakeup\r
-        LOS_Udelay(200);\r
-        ret = hyn_wr_reg(hyn_92xxdata,0xD000,2,i2c_buf,7);\r
-        if(ret || i2c_buf[6]!=0xAB || i2c_buf[0]==0xAB){\r
-            ret = -1;\r
-            continue;\r
-        }\r
-        finger_num = i2c_buf[5] & 0x7F;\r
-        printf("finger_num : %d\n",finger_num);\r
-        if(finger_num > MAX_FINGER){\r
-            ret = -2;\r
-            continue;\r
-        }\r
-        key_state = i2c_buf[5]>>7;\r
-        printf("key_state : %d\n",key_state);\r
-        re_len = ((finger_num>1 ? finger_num-1:0)+key_state)*5;\r
-        if(re_len){\r
-            ret = hyn_wr_reg(hyn_92xxdata,0xD007,2,i2c_buf+7,re_len);\r
-            if(ret){\r
-                ret = -2;\r
-                continue;\r
-            }\r
-        }\r
-        ret = hyn_wr_reg(hyn_92xxdata,0xD000AB,3,i2c_buf,2); //write end flag\r
-        if(ret){\r
-            ret = -3;\r
-            continue;\r
-        }\r
-        else{\r
-            break;\r
-        }\r
-    }\r
+    finger_num = i2c_buf[5] & 0x7F;\r
     \r
-    if(ret){\r
-        HYN_ERROR("read point erro:%d\r\n",ret);\r
-        hyn_wr_reg(hyn_92xxdata,0xD000AB,3,i2c_buf,2); //write end flag\r
-        return ret;\r
+    if (finger_num > MAX_POINTS_REPORT) {\r
+        HYN_INFO("fail finger_num=%d",finger_num);\r
+        return TRUE;\r
     }\r
+    hyn_92xxdata->rp_buf.rep_num = finger_num;\r
 \r
-    ges_state = i2c_buf[4]>>4;\r
-    // printf("ges_state :%d\n",ges_state);\r
-    if(ges_state){ //gesture\r
-        if((ges_state&0x80) == 0x80){ //palm\r
-            hyn_92xxdata->gesture_id = IDX_POWER;//IDX_Z;// palm \r
-        }\r
-        else{ //other gesture\r
-            hyn_92xxdata->gesture_id = IDX_POWER;//GESTURE wakeup\r
-        }\r
-        HYN_INFO("gesture buf4:%#x\r\n",i2c_buf[4]);\r
-        hyn_92xxdata->rp_buf.report_need |= REPORT_GES;\r
-        printf("111 hyn_92xxdata->rp_buf.report_need |= REPORT_GES \n");\r
-    }\r
-    // printf("key_state :%d\n",key_state);\r
-    if(key_state){\r
-        uint8_t *data_ptr = i2c_buf;\r
-        if(finger_num){\r
-            data_ptr += (finger_num*5+2);\r
+   \r
+    if ((i2c_buf[5] & 0x80) == 0x80) { // button\r
+        uint8_t *data = i2c_buf + finger_num * 5;\r
+        if (finger_num > 0) {\r
+            data += 2;\r
         }\r
-        if( hyn_92xxdata->rp_buf.report_need==REPORT_NONE){\r
+        key_state = data[0];//0x83:�����д���  0x80:����̧��\r
+        key_id = data[1]; // data[1]; :0x17  0x27  0x37\r
+\r
+        if(key_state&0x80){            \r
             hyn_92xxdata->rp_buf.report_need |= REPORT_KEY;\r
+            if((key_id == hyn_92xxdata->rp_buf.key_id || 0 == hyn_92xxdata->rp_buf.key_state)&& key_state == 0x83){\r
+                hyn_92xxdata->rp_buf.key_id = key_id;\r
+                hyn_92xxdata->rp_buf.key_state = 1;\r
+            }\r
+            else{\r
+                hyn_92xxdata->rp_buf.key_state = 0;\r
+            }\r
         }\r
-        hyn_92xxdata->rp_buf.key_id = (data_ptr[1]>>4)-1; //0x17  0x27  0x37\r
-        hyn_92xxdata->rp_buf.key_state = data_ptr[0]==0x83 ? 1:0; //0x83  0x80\r
-        printf("hyn_92xxdata->rp_buf.key_id : %d\n",hyn_92xxdata->rp_buf.key_id);\r
-        printf("hyn_92xxdata->rp_buf.key_state : %d\n",hyn_92xxdata->rp_buf.key_state);\r
     }\r
-\r
-    if(finger_num){\r
-        uint8_t i = 0,index = 0,id = 0;\r
-        uint8_t *data_ptr = i2c_buf;\r
-        if( hyn_92xxdata->rp_buf.report_need==REPORT_NONE){\r
-            hyn_92xxdata->rp_buf.report_need |= REPORT_POS;\r
+    else//pos\r
+    {\r
+        uint8_t index = 0,i;\r
+        if((i2c_buf[4]&0xF0) > 0){\r
+            if((i2c_buf[4]&0x80) == 0x80)\r
+            hyn_92xxdata->gesture_id = 14;//KEY_POWER;// palm\r
+            else  if(i2c_buf[4]&0x70)\r
+            hyn_92xxdata->gesture_id = 14;//GESTURE wakeup\r
+            HYN_INFO("i2c_buf[4]=0x%x,gesture_id=0x%x",i2c_buf[4],hyn_92xxdata->gesture_id);\r
+            hyn_92xxdata->rp_buf.report_need |= REPORT_GES;\r
+            return TRUE;\r
         }\r
-        for (i = 0; i < finger_num; i++) {\r
-            id = data_ptr[0] >> 4;\r
- \r
-            hyn_92xxdata->rp_buf.pos_info[index].pos_id = id;\r
-            hyn_92xxdata->rp_buf.pos_info[index].event = (data_ptr[0]&0x0F) ? 1 : 0;  \r
-            hyn_92xxdata->rp_buf.pos_info[index].pos_x = (data_ptr[1] << 4) | (data_ptr[3] >> 4);\r
-            hyn_92xxdata->rp_buf.pos_info[index].pos_y = (data_ptr[2] << 4) | (data_ptr[3] & 0x0F);\r
-            hyn_92xxdata->rp_buf.pos_info[index].pres_z = (data_ptr[4] & 0x7F);\r
-\r
-            data_ptr += (i==0 ? 7:5);\r
-\r
-\r
-            printf("hyn_92xxdata->rp_buf.pos_info[index].event : %d index:%d\n",hyn_92xxdata->rp_buf.pos_info[index].event,index);\r
-            uint8_t event = hyn_92xxdata->rp_buf.pos_info[index].event; // 事件标识(0=抬起,1=有效)\r
-            uint16_t curr_x = hyn_92xxdata->rp_buf.pos_info[index].pos_x; // 当前X坐标\r
-            uint16_t curr_y = hyn_92xxdata->rp_buf.pos_info[index].pos_y; // 当前Y坐标\r
-\r
-            printf("curr_x:%d,curr_y:%d\n",curr_x,curr_y);\r
-            if(curr_x >= 466 || curr_y >= 466)\r
-                continue;\r
-\r
         \r
-            hyn_92xxdata->touch_msg.tp_event_info.x_axis[0] = curr_x;\r
-            hyn_92xxdata->touch_msg.tp_event_info.y_axis[0] = curr_y;\r
-            hyn_92xxdata->touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms();\r
-\r
-            if(event == 0)\r
+        hyn_92xxdata->rp_buf.report_need |= REPORT_POS;\r
+        if (finger_num > 0) {\r
+            uint8_t *data = i2c_buf;\r
+           //uint8_t *data_ges = i2c_buf + finger_num * 5 + 2;\r
+            uint8_t id = data[0] >> 4;\r
+            uint8_t switch_ = data[0] & 0x0F;\r
+            uint16_t x = ((uint16_t)(data[1]) << 4) | (data[3] >> 4);\r
+            uint16_t y = ((uint16_t)(data[2]) << 4) | (data[3] & 0x0F);\r
+            uint16_t z = (data[3] & 0x1F) + 0x03;\r
+\r
+            // HYN_INFO("finger=%d id=%d x=%d y=%d z=%d switch_=%d",finger_num,id,x,y,z,switch_);\r
+\r
+            if (switch_ == 0)\r
             {\r
-                point_count = 0;\r
                 hyn_92xxdata->touch_msg.tp_event = MC_TP_RELEASE;\r
-            }\r
-            else\r
-            {\r
-                if(point_count == 0)\r
+                point_count=0;\r
+            }else{\r
+                if (point_count==0)\r
+                {\r
                     hyn_92xxdata->touch_msg.tp_event = MC_TP_PRESS;\r
-                else \r
+                }else{\r
                     hyn_92xxdata->touch_msg.tp_event = MC_TP_MOVE;\r
-\r
+                }\r
                 point_count++;\r
             }\r
+                \r
+            HYN_INFO("finger=%d id=%d x=%d y=%d z=%d switch_=%d point_count:%d",finger_num,id,y,x,z,switch_,point_count);\r
+\r
+            hyn_92xxdata->touch_msg.tp_event_info.x_axis[0] = y;\r
+            hyn_92xxdata->touch_msg.tp_event_info.y_axis[0] = x;\r
+            hyn_92xxdata->touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms();\r
 \r
-            printf("hyn_92xxdata->touch_msg.tp_event %d\n",hyn_92xxdata->touch_msg.tp_event);\r
+            if (id < MAX_POINTS_REPORT) {\r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_id = id;\r
+                hyn_92xxdata->rp_buf.pos_info[index].event = (switch_ == 0x06 || switch_ == 0x07) ? 1 : 0;  \r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_x = x;\r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_y = y;\r
+                hyn_92xxdata->rp_buf.pos_info[index].pres_z = z;\r
+                index++;\r
+            }\r
+            \r
 \r
-            index++;\r
         }\r
-        hyn_92xxdata->rp_buf.rep_num = index;\r
 \r
-        \r
-               \r
+        for (i = 1; i < finger_num; i++) {\r
+            uint8_t *data = i2c_buf+5*i+2;\r
+            uint8_t id = data[0] >> 4;\r
+            uint8_t switch_ = data[0] & 0x0F;\r
+            uint16_t x = ((uint16_t)(data[1]) << 4) | (data[3] >> 4);\r
+            uint16_t y = ((uint16_t)(data[2]) << 4) | (data[3] & 0x0F);\r
+            uint16_t z = (data[4] & 0x7F);\r
+\r
+            if (id < MAX_POINTS_REPORT) {\r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_id = id;\r
+                hyn_92xxdata->rp_buf.pos_info[index].event = (switch_ == 0x06) ? 1 : 0;  \r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_x = x;\r
+                hyn_92xxdata->rp_buf.pos_info[index].pos_y = y;\r
+                hyn_92xxdata->rp_buf.pos_info[index].pres_z = z;\r
+                index++;\r
+            }\r
+        }\r
     }\r
 \r
-\r
     return 0;\r
 }\r
-\r
-\r
 static uint32_t cst92xx_check_esd(void)\r
 {\r
-    int ok = FALSE;\r
+    int ret = 0;\r
+    uint8_t retry=3;\r
+    uint8_t buf[6];\r
+    HYN_ENTER();\r
+    while (retry--)\r
+    {\r
+        ret = hyn_wr_reg(hyn_92xxdata,0xD040,2,buf,0);\r
+        ret = hyn_wr_reg(hyn_92xxdata,0xD040,2,buf,6);\r
+        if(ret ==0 && hyn_sum16(0xA5,buf,4)==U8TO16(buf[4],buf[5])){\r
+            ret = U8TO32(buf[0],buf[1],buf[2],buf[3]);\r
+            break;\r
+        }\r
+    }\r
+    \r
+\r
+    return ret;\r
+}\r
+#if 0\r
+static u32 cst92xx_check_esd(void)\r
+{\r
+\r
+    int16_t ok = FALSE;\r
     uint8_t i2c_buf[6], retry;\r
+    uint8_t flag = 0;\r
+    uint16_t checksum = 0;\r
     uint32_t esd_value = 0;\r
+\r
+    if ((hyn_92xxdata->work_mode != NOMAL_MODE)&&(hyn_92xxdata->work_mode != GESTURE_MODE))\r
+    {\r
+        HYN_ERROR("esd_check work_mode error return");\r
+        return 0;\r
+    }\r
     retry = 4;\r
-    while (retry--){\r
-        hyn_wr_reg(hyn_92xxdata,0xD048,2,i2c_buf,2);\r
-        LOS_Udelay(200);\r
-        ok = hyn_wr_reg(hyn_92xxdata,0xD048,2,i2c_buf,1);\r
-        if (ok == 0 &&((i2c_buf[0]&0xF0) == 0x20 || (i2c_buf[0]&0xF0) == 0xA0)&&(i2c_buf[0]&0x0F)<10){\r
-            break;\r
-        }\r
-        else{\r
-            ok = -2;\r
+    flag = 0;\r
+    while (retry--)\r
+    {\r
+        ok = hyn_wr_reg(hyn_92xxdata,0xD040,2,i2c_buf,6);\r
+        if (ok == FALSE){\r
+            msleep(1);\r
+            continue;\r
+        }  \r
+        else\r
+        {\r
+            checksum = i2c_buf[0] + i2c_buf[1] + i2c_buf[2] + i2c_buf[3] + 0xA5;\r
+            esd_value = (i2c_buf[0] << 24) + (i2c_buf[1] << 16) + (i2c_buf[2] << 8) + i2c_buf[3];\r
+            flag = 1;\r
+            if (((i2c_buf[4] << 8) + i2c_buf[5]) == checksum)\r
+            {\r
+                flag = 2;\r
+                if (((esd_value - hyn_92xxdata->esd_last_value) < 1) && (esd_value > 20))\r
+                {\r
+                    flag = 3;\r
+                }\r
+                break;\r
+            }\r
+            else\r
+            {\r
+                HYN_INFO("ESD data checksum err:0x%x,0x%x", esd_value, checksum);\r
+                continue;\r
+            }\r
         }\r
     }\r
-    if(-2==ok){   //esdcheck failed rest system\r
-        hyn_92xxdata->esd_fail_cnt = 3;\r
-        esd_value = hyn_92xxdata->esd_last_value;\r
-    }\r
-    else{\r
-        esd_value = hyn_92xxdata->esd_last_value+1;\r
+    HYN_INFO("ESD data:%d,0x%04x,0x%04x", flag, esd_value, hyn_92xxdata->esd_last_value);\r
+\r
+    if ((flag == 0) || (flag == 3) || (flag == 1))\r
+    {\r
+        cst92xx_rst();\r
+        msleep(40);\r
+        esd_value = 0;\r
+        hyn_92xxdata->esd_last_value = 0;\r
+        HYN_INFO("esd_check power reset ic");\r
+        if (hyn_92xxdata->work_mode == GESTURE_MODE)\r
+        {\r
+            ok = hyn_wr_reg(hyn_92xxdata,0xD104,2,i2c_buf,0);\r
+            if (ok == FALSE){\r
+                HYN_ERROR("enter_sleep failed");\r
+            }  \r
+        }\r
     }\r
+    \r
+    hyn_92xxdata->esd_last_value = esd_value;\r
+ \r
     return esd_value;\r
 }\r
-\r
+#endif\r
 \r
 static int cst92xx_prox_handle(uint8_t cmd)\r
 {\r
@@ -938,7 +1083,7 @@ static int cst92xx_get_dbg_data(uint8_t *buf, uint16_t len)
 \r
 static int cst92xx_get_test_result(uint8_t *buf, uint16_t len)\r
 {\r
-    int ret = 0;\r
+    int ret = 0,timeout;\r
     struct tp_info *ic = &hyn_92xxdata->hw_info;\r
     uint16_t scap_len = (ic->fw_sensor_txnum + ic->fw_sensor_rxnum)*2;\r
     uint16_t mt_len = ic->fw_sensor_rxnum*ic->fw_sensor_txnum*2,i = 0;\r
@@ -950,29 +1095,41 @@ static int cst92xx_get_test_result(uint8_t *buf, uint16_t len)
         return FAC_GET_DATA_FAIL;\r
     }\r
     HYN_INFO("---open_higdrv---");\r
-    hyn_wr_reg(hyn_92xxdata,0xD110,2,buf,2); ////test open high\r
-    hyn_wait_irq_timeout(hyn_92xxdata,7000);\r
+    timeout = 500;\r
+    hyn_wr_reg(hyn_92xxdata,0xD110,2,buf,0); ////test open high\r
+    while(--timeout){ //wait rise edge\r
+        if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;\r
+        LOS_Mdelay(10);\r
+    }\r
     if(hyn_wr_reg(hyn_92xxdata,0x3000,2,buf,mt_len)){ //open high\r
         ret = FAC_GET_DATA_FAIL;\r
         HYN_ERROR("read open high failed");\r
         goto selftest_end;\r
     }\r
-    hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,2); \r
+    hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,0); \r
 \r
     HYN_INFO("---open_low---");\r
-    hyn_wr_reg(hyn_92xxdata,0xD111,2,buf,2); ////test open low\r
-    hyn_wait_irq_timeout(hyn_92xxdata,7000);\r
+    timeout = 500;\r
+    hyn_wr_reg(hyn_92xxdata,0xD111,2,buf,0); ////test open low\r
+    while(--timeout){ //wait rise edge\r
+        if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;\r
+        LOS_Mdelay(10);\r
+    }\r
     if(hyn_wr_reg(hyn_92xxdata,0x1000,2,buf + mt_len,mt_len)){ //open low\r
         ret = FAC_GET_DATA_FAIL;\r
         HYN_ERROR("read open low failed");\r
         goto selftest_end;\r
     }\r
-    hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,2); \r
+    hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,0); \r
 \r
     //short test\r
     HYN_INFO("---short---");\r
-    hyn_wr_reg(hyn_92xxdata,0xD112,2,buf,2); //// short test\r
-    hyn_wait_irq_timeout(hyn_92xxdata,7000);\r
+    timeout = 500;\r
+    hyn_wr_reg(hyn_92xxdata,0xD112,2,buf,0); //// short test\r
+    while(--timeout){ //wait rise edge\r
+        if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;\r
+        LOS_Mdelay(10);\r
+    }\r
     if(hyn_wr_reg(hyn_92xxdata,0x5000,2,buf+(mt_len*2),scap_len)){\r
         ret = FAC_GET_DATA_FAIL;\r
         HYN_ERROR("read fac short failed");\r
@@ -997,8 +1154,8 @@ selftest_end:
     if(0 == fac_test_log_save(FACTEST_LOG_PATH,hyn_92xxdata,(int16_t*)buf,ret,FACTEST_ITEM)){\r
         HYN_INFO("fac_test log save success");\r
     } \r
-    cst92xx_resum();\r
-\r
+    cst92xx_reset();\r
+    LOS_Mdelay(40);\r
     return ret;\r
 }\r
 \r
index f853281..4039cf8 100644 (file)
@@ -7,7 +7,8 @@
 
 // #include "hyn_cfg.h"
 
-#define HYN_INFO(fmt, args...)   printf("[HYN]"fmt"\n", ##args)
+// #define HYN_INFO(fmt, args...)   printf("[HYN]"fmt"\n", ##args)
+#define HYN_INFO(fmt, args...)   
 #define HYN_INFO2(fmt, args...)  if(hyn_data->log_level > 0)printf("[HYN]"fmt"\n", ##args)
 #define HYN_INFO3(fmt, args...)  if(hyn_data->log_level > 1)printf("[HYN]"fmt"\n", ##args)
 #define HYN_INFO4(fmt, args...)  if(hyn_data->log_level > 2)printf("[HYN]"fmt"\n", ##args)