添加海立创ctp驱动 1487/1 1487/head 1502/target/1
authorSnickerSun <snickersun@163.com>
Mon, 2 Dec 2024 10:17:03 +0000 (18:17 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 2 Dec 2024 10:17:03 +0000 (18:17 +0800)
13 files changed:
.vscode/settings.json [deleted file]
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/build/config/target_config/brandy/config.py
code/sdk/drivers/boards/brandy_evb/product/product_evb4_standard.h
code/sdk/drivers/drivers/driver/touch/CMakeLists.txt
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.c [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.h [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.c [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.h [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.h [new file with mode: 0644]
code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.c
code/sdk/drivers/drivers/driver/touch/touch_screen_drv.c

diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644 (file)
index d07e37f..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-    "files.associations": {
-        "*.def": "cpp",
-        "limits": "cpp",
-        "*.tcc": "cpp",
-        "type_traits": "cpp",
-        "iterator": "cpp",
-        "pm_core.h": "c",
-        "pm_veto.h": "c",
-        "chip_io.h": "c",
-        "pm.h": "c",
-        "tyhx_hrv_alg.h": "c",
-        "tyhx_hrs_custom.h": "c",
-        "osal_timer.h": "c",
-        "debug_print.h": "c",
-        "platform_core.h": "c",
-        "*.inc": "c",
-        "ohosfwk_at_process.h": "c",
-        "pm_clocks.h": "c",
-        "pmu_cmu.h": "c",
-        "pm_control.h": "c",
-        "__functional_base": "c",
-        "__functional_base_03": "c",
-        "__hash_table": "c",
-        "__tree": "c",
-        "__tuple": "c",
-        "algorithm": "c",
-        "array": "c",
-        "chrono": "c",
-        "cstddef": "c",
-        "filesystem": "c",
-        "forward_list": "c",
-        "functional": "c",
-        "memory": "c",
-        "random": "c",
-        "ratio": "c",
-        "tuple": "c",
-        "utility": "c",
-        "istream": "c",
-        "ostream": "c",
-        "soc_osal.h": "c",
-        "lis2doc_reg.h": "c",
-        "string.h": "c",
-        "clocks_config_priv.h": "c",
-        "lis2doc_at_cmd.h": "c",
-        "customer.h": "c",
-        "pinctrl.h": "c",
-        "at_cmd_api.h": "c",
-        "ios": "cpp",
-        "vibrator.h": "c",
-        "gpio_porting.h": "c",
-        "arch.h": "c",
-        "opt.h": "c",
-        "debug.h": "c",
-        "lwipopts.h": "c",
-        "cc.h": "c",
-        "sys_arch.h": "c",
-        "nv_key.h": "c",
-        "common.h": "c",
-        "custom_utils.h": "c",
-        "key_id.h": "c",
-        "custom_utils_cmd.h": "c",
-        "timer.h": "c",
-        "future": "cpp",
-        "__bit_reference": "c",
-        "bitset": "c",
-        "map": "c",
-        "set": "c",
-        "unordered_map": "c",
-        "unordered_set": "c",
-        "lis2doc_porting.h": "c",
-        "acc_service.h": "c",
-        "mmc5603.h": "c",
-        "mag_service.h": "c",
-        "mmc5603_hal.h": "c",
-        "clocks_config.h": "c",
-        "clocks_types.h": "c",
-        "nandflash_w25n01g.h": "c",
-        "nandflash_config.h": "c",
-        "hal_nandflash.h": "c",
-        "stddef.h": "c",
-        "nandflash_f35uqa001g.h": "c",
-        "alarmclocktimerconfig.h": "c",
-        "board_w9.h": "c"
-    }
-}
\ No newline at end of file
index f4e39d2..c25d8e4 100644 (file)
@@ -32,6 +32,8 @@
 #include "ztw523_touch1.h"\r
 #elif defined(TPTYPE_FT6X46)\r
 #include "ft6x46_touch1.h"\r
+#elif defined(TPTYPE_CST86XX)\r
+#include "cst86xx_touch1.h"\r
 #else\r
 #include "ztw523_touch1.h"\r
 #endif\r
@@ -89,6 +91,8 @@ static void sample_gfx_init(void)
     ztw523_host_init_sample();\r
 #elif defined(TPTYPE_FT6X46)\r
     ft6x46_host_init_sample();\r
+#elif defined(TPTYPE_CST86XX)\r
+    cst86xx_host_init_sample();\r
 #else\r
     ztw523_host_init_sample();\r
 #endif\r
index 04546e6..444cfe7 100644 (file)
@@ -401,7 +401,7 @@ target = {
             'FT_SINGLE_UART',
             'SUPPORT_AUTO_OTA_SERVER', 
             'CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1',
-            'TPTYPE_FT6X46',
+            'TPTYPE_CST86XX',
             'NANDFLASH_F35UQA'
         ],
         #添加自定义应用
@@ -434,7 +434,7 @@ target = {
             'FT_SINGLE_UART',
             'SUPPORT_AUTO_OTA_SERVER', 
             'CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1',
-            'TPTYPE_FT6X46',
+            'TPTYPE_CST86XX',
             'NANDFLASH_F35UQA'
                     ],
         #添加自定义应用
index 2fcc808..7d48d6f 100644 (file)
 #define FT6X46_INT_GPIO                     S_AGPIO_R5
 #define FT6X46_RESET_GPIO                   S_AGPIO_R4
 
+#define CST86XX_I2C_BUS                      I2C_BUS_1
+#define CST86XX_INT_GPIO                     S_AGPIO_R5
+#define CST86XX_RESET_GPIO                   S_AGPIO_R4
+
+
 // TRACK MODE
 #define SND_TRACK_MODE_BT_MUSIC             0 // 参考 soc_uapi_sound.h 中 UAPI_SND_TRACK_STEREO 枚举
 #define SND_TRACK_MODE_BT_SCO               1 // 参考 soc_uapi_sound.h 中 UAPI_SND_TRACK_DOUBLE_MONO 枚举
index 6971096..db020dc 100644 (file)
@@ -27,6 +27,12 @@ set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch/ft6x46_drv1.c
     ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch/ft6x46_touch1.c
 )
+elseif("TPTYPE_CST86XX" IN_LIST DEFINES)
+set(SOURCES ${SOURCES}
+    ${CMAKE_CURRENT_SOURCE_DIR}/cst86xx_touch/cst86xx_ctrl.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/cst86xx_touch/cst86xx_drv1.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/cst86xx_touch/cst86xx_touch1.c
+)
 else()
 set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/ztw523_touch/ztw523_ctrl.c
@@ -53,6 +59,12 @@ set(PUBLIC_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch
     ${ROOT_DIR}/middleware/services/gui/hal/input/include
 )
+elseif("TPTYPE_CST86XX" IN_LIST DEFINES)
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/cst86xx_touch
+    ${ROOT_DIR}/middleware/services/gui/hal/input/include
+)
 else()
 set(PUBLIC_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.c b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.c
new file mode 100644 (file)
index 0000000..4eea847
--- /dev/null
@@ -0,0 +1,334 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2022-04-12\r
+ */\r
+\r
+#include "cst86xx_ctrl.h"\r
+#include "securec.h"\r
+#include "cmsis_os2.h"\r
+#include "soc_osal.h"\r
+#include "common_def.h"\r
+#include "pinctrl.h"\r
+#include "chip_io.h"\r
+#include "tcxo.h"\r
+#include "time.h"\r
+#include "i2c.h"\r
+#include "gpio.h"\r
+#include "hal_gpio.h"\r
+#include "hal_i2c.h"\r
+#include "touch_screen_def.h"\r
+\r
+bool g_host_dev_init_flag = TD_FALSE;\r
+cst86xx_ctrl_attr g_ctrl_attr;\r
+touch_callback g_cst86xx_callback = NULL;\r
+static uint8_t g_tp_send_buf[CST86XX_REG_WRITE_LEN] = {0};\r
+static uint8_t g_tp_recv_buf[CST86XX_INPUT_SIZE] = {0};\r
+\r
+static void cst86xx_gpio_isr_handle(pin_t pin, uintptr_t param)\r
+{\r
+    unused(pin);\r
+    unused(param);\r
+    if (g_cst86xx_callback != NULL) {\r
+        g_cst86xx_callback();\r
+    }\r
+}\r
+\r
+ext_errno cst86xx_register_handle(const cst86xx_ctrl_ops *peri_data, touch_callback func)\r
+{\r
+    unused(peri_data);\r
+    ext_errno ret;\r
+\r
+    g_cst86xx_callback = func;\r
+    /* register int io interrupt handler */\r
+    uapi_gpio_init();\r
+    gpio_select_core(CST86XX_INT_GPIO, CORE);\r
+    uapi_gpio_set_dir(CST86XX_INT_GPIO, GPIO_DIRECTION_INPUT);\r
+    ret = uapi_gpio_register_isr_func(CST86XX_INT_GPIO, GPIO_INTERRUPT_FALLING_EDGE, cst86xx_gpio_isr_handle);\r
+    if (ret != 0) {\r
+        tp_err("cst86xx int callback register fail! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_unregister_handle(const cst86xx_ctrl_ops *peri_data)\r
+{\r
+    unused(peri_data);\r
+    ext_errno ret;\r
+\r
+    /* unregister interrupt handler */\r
+    uapi_gpio_unregister_isr_func(CST86XX_INT_GPIO);\r
+    g_cst86xx_callback = NULL;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno tp_peripheral_init_status_check(void)\r
+{\r
+    if (g_host_dev_init_flag != TD_TRUE) {\r
+        return EXT_ERR_TP_DEV_INFO_NOT_REGISTER;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+// static ext_errno cst86xx_ctrl_attr_check(const cst86xx_ctrl_attr *device_attr)\r
+// {\r
+//     unused(device_attr);\r
+//     return EXT_ERR_SUCCESS;\r
+// }\r
+\r
+static ext_errno cst86xx_tp_i2c_rd_wr_param_check(const uint8_t *data_buf, uint32_t data_len)\r
+{\r
+    unused(data_buf);\r
+    unused(data_len);\r
+    ext_errno ret = tp_peripheral_init_status_check();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_tp_i2c_data_read(uint16_t reg_addr, uint8_t *data_buf, uint32_t data_len)\r
+{\r
+    errcode_t ret;\r
+    uint32_t retry;\r
+    i2c_data_t data;\r
+\r
+    ret = cst86xx_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! ret=0x%x", ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    g_tp_send_buf[CST86XX_I2C_SEND_INDEX0] = reg_addr & 0xff;\r
+    data.send_buf = g_tp_send_buf;\r
+    data.send_len = CST86XX_CMD_SEND_LEN;\r
+    data.receive_buf = g_tp_recv_buf;\r
+    data.receive_len = data_len;\r
+    for (retry = 0; retry < CST86XX_I2C_TIME_MAX; retry++) {\r
+        ret = uapi_i2c_master_writeread(CST86XX_I2C_BUS, CST86XX_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
+    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
+\r
+ext_errno cst86xx_tp_i2c_cmd_write(uint16_t cmd)\r
+{\r
+    errcode_t ret;\r
+    uint32_t retry;\r
+    i2c_data_t data;\r
+\r
+    ret = tp_peripheral_init_status_check();\r
+    if (ret != 0) {\r
+        tp_err("host peripheral not init! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+    g_tp_send_buf[CST86XX_I2C_SEND_INDEX0] = cmd & 0xff;\r
+    data.send_buf = g_tp_send_buf;\r
+    data.send_len = CST86XX_CMD_SEND_LEN;\r
+    data.receive_buf = NULL;\r
+    data.receive_len = 0;\r
+\r
+    for (retry = 0; retry < CST86XX_I2C_TIME_MAX; retry++) {\r
+        ret = uapi_i2c_master_write(CST86XX_I2C_BUS, CST86XX_I2C_ADDR, &data);\r
+        if (ret == EXT_ERR_SUCCESS) {\r
+            break;\r
+        }\r
+    }\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("tp data write fail! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_tp_i2c_reg_write(uint16_t reg_addr, uint16_t reg_cfg)\r
+{\r
+    errcode_t ret;\r
+    uint32_t retry;\r
+    i2c_data_t data;\r
+\r
+    ret = tp_peripheral_init_status_check();\r
+    if (ret != 0) {\r
+        tp_err("host peripheral not init! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    g_tp_send_buf[CST86XX_I2C_SEND_INDEX0] = reg_addr & 0xff;\r
+    \r
+    data.send_buf = g_tp_send_buf;\r
+    data.send_len = CST86XX_REG_WRITE_LEN;\r
+    data.receive_buf = NULL;\r
+    data.receive_len = 0;\r
+\r
+    for (retry = 0; retry < CST86XX_I2C_TIME_MAX; retry++) {\r
+        ret = uapi_i2c_master_write(CST86XX_I2C_BUS, CST86XX_I2C_ADDR, &data);\r
+        if (ret == EXT_ERR_SUCCESS) {\r
+            break;\r
+        }\r
+    }\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("tp reg write fail! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_tp_i2c_data_write(uint16_t reg_addr, uint8_t *data_buf, uint32_t data_len)\r
+{\r
+    errcode_t ret;\r
+    uint32_t retry;\r
+    i2c_data_t data;\r
+    uint8_t *write_data = NULL;\r
+    uint32_t send_len;\r
+\r
+    ret = cst86xx_tp_i2c_rd_wr_param_check(data_buf, data_len);\r
+    if (ret != 0) {\r
+        tp_err("tp data write param invalid! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    send_len = data_len + sizeof(uint16_t);\r
+\r
+    write_data = (uint8_t *)osal_kmalloc(send_len, OSAL_GFP_KERNEL);\r
+    if (write_data == NULL) {\r
+        tp_err("tp send buff malloc fail!");\r
+        return EXT_ERR_MALLOC_FAILURE;\r
+    }\r
+\r
+    write_data[CST86XX_I2C_SEND_INDEX0] = reg_addr & 0xff;\r
+    ret = (uint32_t)memcpy_s(write_data + sizeof(uint16_t), send_len - sizeof(uint16_t), data_buf, data_len);\r
+    if (ret != EOK) {\r
+        tp_err("tp send_buf content copy fail! ret=0x%x", ret);\r
+        osal_kfree(write_data);\r
+        return ret;\r
+    }\r
+\r
+    data.send_buf = write_data;\r
+    data.send_len = send_len;\r
+    data.receive_buf = NULL;\r
+    data.receive_len = 0;\r
+\r
+    for (retry = 0; retry < CST86XX_I2C_TIME_MAX; retry++) {\r
+        ret = uapi_i2c_master_write(CST86XX_I2C_BUS, CST86XX_I2C_ADDR, &data);\r
+        if (ret == EXT_ERR_SUCCESS) {\r
+            break;\r
+        }\r
+    }\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("tp data write fail! ret=0x%x", ret);\r
+        osal_kfree(write_data);\r
+        return ret;\r
+    }\r
+\r
+    osal_kfree(write_data);\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_host_peripheral_init(cst86xx_ctrl_attr *attr)\r
+{\r
+    ext_errno ret;\r
+\r
+    if (attr == NULL) {\r
+        tp_err("cst86xx communication interface cfg is empty!");\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    // ret = cst86xx_ctrl_attr_check(attr);\r
+    // if (ret != EXT_ERR_SUCCESS) {\r
+    //     tp_err("tp invalid dev attr! ret=0x%x", ret);\r
+    //     return ret;\r
+    // }\r
+\r
+    // ret = (ext_errno)memcpy_s(&(g_ctrl_attr), sizeof(cst86xx_ctrl_attr), attr, sizeof(cst86xx_ctrl_attr));\r
+    // if (ret != EOK) {\r
+    //     tp_err("tp attr content copy fail! ret=0x%x", ret);\r
+    //     return ret;\r
+    // }\r
+\r
+    /* init i2c */\r
+    errcode_t result;\r
+    result = uapi_i2c_master_init(CST86XX_I2C_BUS, 100000, I2C_SPEED_MODE_SS); /* 400000: 400KHz */\r
+    if (result != EXT_ERR_SUCCESS) {\r
+        tp_err("tp i2c init fail! ret=0x%x", result);\r
+        return EXT_ERR_SUCCESS;\r
+    }\r
+\r
+    tp_warning("TOUCH:i2c_id = %d  i2c_speed = %d  slave_addr  = 0x%x \r\n",\r
+        CST86XX_I2C_BUS, 100000, CST86XX_I2C_ADDR);\r
+    g_host_dev_init_flag = true;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_host_init_sample(void)\r
+{\r
+    ext_errno ret;\r
+    tp_warning("cst86xx_host_init_sample");\r
+    ret = cst86xx_host_peripheral_init(&g_ctrl_attr);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("tp host init fail! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+    ret = cst86xx_init();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("tp init fail! ret=0x%x", ret);\r
+        return ret;\r
+    }\r
+    \r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_reset(void)\r
+{\r
+    uapi_gpio_set_dir(CST86XX_RESET_GPIO, GPIO_DIRECTION_OUTPUT);\r
+    /* Config Gpio For Reset Pin */\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_HIGH);\r
+    /* reset high delay 20ms */\r
+    osDelay(1);\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_LOW);\r
+    /* reset low delay 100ms */\r
+    osDelay(10);\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_HIGH);\r
+    /* reset high delay 200ms */\r
+    osDelay(100);\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+void cst86xx_resume_reset(void)\r
+{\r
+    uapi_gpio_set_dir(CST86XX_RESET_GPIO, GPIO_DIRECTION_OUTPUT);\r
+    /* drvdata is global variable point and no need to handle null */\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_HIGH);\r
+    osDelay(1);\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_LOW);\r
+    /* delay 10ms */\r
+    osDelay(10);\r
+    uapi_gpio_set_val(CST86XX_RESET_GPIO, GPIO_LEVEL_HIGH);\r
+    /* delay 100ms */\r
+    osDelay(100);\r
+    // uapi_gpio_set_dir(CST86XX_RESET_GPIO, GPIO_DIRECTION_INPUT);\r
+}
\ No newline at end of file
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.h b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_ctrl.h
new file mode 100644 (file)
index 0000000..4f731d9
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2022-04-12\r
+ */\r
+\r
+#ifndef CST86XX_CTRL_H\r
+#define CST86XX_CTRL_H\r
+\r
+#include "stdio.h"\r
+#include "debug_print.h"\r
+#include "stdint.h"\r
+#include "product.h"\r
+#include "td_base.h"\r
+#include "platform_core.h"\r
+#include "cst86xx_touch1.h"\r
+\r
+\r
+\r
+//_TODO:\r
+#define CTP_USE_SW_I2C                      0       //hard i2c:0 gpio i2c:1\r
+#define CTP_SLAVER_ADDR                     (0x2A)  //(8bit write addr  0x15<<1)\r
+\r
+#define CTP_HYNITRON_AUTO_UPDATE            0       // enable update\r
+#define CTP_HYNITRON_CST816S_UPDATE         0       //820S 816S\r
+#define CTP_HYNITRON_CST816T_UPDATE         0       //820 816t 816D\r
+#define CTP_HYNITRON_CST78xx_UPDATE         0       //716 830 826 836U\r
+\r
+#define CTP_TRUE    (0)\r
+#define CTP_FALSE   (-1)\r
+\r
+#define OUTPUT 1\r
+#define INPUT 0\r
+\r
+\r
+#define DBG_CTP\r
+#ifdef DBG_CTP\r
+#define ctp_dbg_print(fmt,args...)   printf("[HYN]"fmt"\n\r", ##args)\r
+#else\r
+#define ctp_dbg_print(...)\r
+#endif\r
+\r
+\r
+/* host peripheral definitions */\r
+#define CST86XX_I2C_ADDR           0x15\r
+#define CST86XX_I2C_SPEED          I2C_SPEED_MODE_SS\r
+#define CST86XX_REG_WRITE_LEN      2\r
+#define CST86XX_CMD_SEND_LEN       1\r
+#define CST86XX_REG_DATA_LEN       1\r
+#define CST86XX_I2C_TIME_MAX       3\r
+#define CST86XX_INPUT_SIZE         6\r
+#define CST86XX_I2C_SEND_INDEX0    0\r
+// #define CST86XX_I2C_SEND_INDEX1    1\r
+// #define CST86XX_I2C_SEND_INDEX2    2\r
+// #define CST86XX_I2C_SEND_INDEX3    3\r
+typedef struct {\r
+    uint32_t int_gpio;\r
+    i2c_bus_t i2c_id;\r
+    uint32_t i2c_speed;\r
+} cst86xx_ctrl_attr;\r
+\r
+typedef ext_errno (*cst86xx_bus_init)(cst86xx_ctrl_attr *attr);\r
+\r
+typedef struct {\r
+    cst86xx_ctrl_attr attr;\r
+    cst86xx_bus_init bus_init;\r
+} cst86xx_ctrl_ops;\r
+\r
+ext_errno cst86xx_host_peripheral_init(cst86xx_ctrl_attr *attr);\r
+ext_errno cst86xx_register_handle(const cst86xx_ctrl_ops *peri_data, touch_callback func);\r
+ext_errno cst86xx_unregister_handle(const cst86xx_ctrl_ops *peri_data);\r
+ext_errno cst86xx_reset(void);\r
+void cst86xx_resume_reset(void);\r
+void cst86xx_delay(uint32_t ms);\r
+\r
+ext_errno cst86xx_tp_i2c_data_read(uint16_t reg_addr, uint8_t *data_buf, uint32_t data_len);\r
+ext_errno cst86xx_tp_i2c_cmd_write(uint16_t cmd);\r
+ext_errno cst86xx_tp_i2c_reg_write(uint16_t reg_addr, uint16_t reg_cfg);\r
+ext_errno cst86xx_tp_i2c_data_write(uint16_t reg_addr, uint8_t *data_buf, uint32_t data_len);\r
+\r
+#endif\r
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.c b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.c
new file mode 100644 (file)
index 0000000..22fa202
--- /dev/null
@@ -0,0 +1,99 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2022-04-12\r
+ */\r
+\r
+#include "cst86xx_drv1.h"\r
+#include "touch_screen_def.h"\r
+#include "cst86xx_ctrl.h"\r
+#include "i2c.h"\r
+#include "debug_print.h"\r
+#include "hal_i2c.h"\r
+\r
+static ext_errno cst86xx_drv_init(cst86xx_ctrl_ops *config)\r
+{\r
+    ext_errno ret;\r
+    cst86xx_ctrl_ops *ops = config;\r
+\r
+    if (ops == NULL) {\r
+        tp_err("peripheral ops is empty!");\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    if (ops->bus_init == NULL) {\r
+        tp_err("peripheral bus_init func is empty!");\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    ret = ops->bus_init(&(ops->attr));\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("CST86XX bus_init fail! ret = 0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    ret = cst86xx_init();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("CST86XX init fail! ret = 0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_drv_deinit(void)\r
+{\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_drv_get_info(uint8_t *data, uint8_t data_len)\r
+{\r
+    return cst86xx_irq_callback(data, data_len);\r
+}\r
+\r
+static ext_errno cst86xx_drv_suspend(void)\r
+{\r
+    return cst86xx_set_power_mode(MC_TP_SUSPEND_SCAN);\r
+}\r
+\r
+static ext_errno cst86xx_drv_resume(void)\r
+{\r
+    return cst86xx_set_power_mode(MC_TP_RESUME_SCAN);\r
+}\r
+\r
+static ext_errno cst86xx_drv_sleep(void)\r
+{\r
+    return cst86xx_set_power_mode(MC_TP_SLEEP_WORK_MODE);\r
+}\r
+\r
+touch_peripheral_api g_cst86xx_api = {\r
+    .touch_init = cst86xx_drv_init,\r
+    .touch_deinit = cst86xx_drv_deinit,\r
+    .touch_get_tpinfo = cst86xx_drv_get_info,\r
+    .touch_suspend = cst86xx_drv_suspend,\r
+    .touch_resume = cst86xx_drv_resume,\r
+    .touch_sleep = cst86xx_drv_sleep,\r
+    .touch_bus_init = cst86xx_host_peripheral_init,\r
+    .register_callback = cst86xx_register_handle,\r
+    .unregister_callback = cst86xx_unregister_handle,\r
+};\r
+\r
+cst86xx_ctrl_ops g_cst86xx_ctrl = {\r
+    .attr = {\r
+        .int_gpio = CST86XX_INT_GPIO,\r
+        .i2c_id = CST86XX_I2C_BUS,\r
+        .i2c_speed = I2C_SPEED_MODE_SS,\r
+    },\r
+    .bus_init = (cst86xx_bus_init)cst86xx_host_peripheral_init,\r
+};\r
+\r
+void *touch_screen_get_api(void)\r
+{\r
+    return ((void *)&g_cst86xx_api);\r
+}\r
+\r
+void *touch_screen_get_peri_attr(void)\r
+{\r
+    return ((void *)&g_cst86xx_ctrl);\r
+}
\ No newline at end of file
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.h b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_drv1.h
new file mode 100644 (file)
index 0000000..199d7db
--- /dev/null
@@ -0,0 +1,14 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2022-04-12\r
+ */\r
+\r
+#ifndef CST86XX_DRV1_H\r
+#define CST86XX_DRV1_H\r
+\r
+void *touch_screen_get_api(void);\r
+void *touch_screen_get_peri_attr(void);\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c
new file mode 100644 (file)
index 0000000..b01c593
--- /dev/null
@@ -0,0 +1,411 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2021-05-29\r
+ */\r
+\r
+#include "cst86xx_touch1.h"\r
+#include "time.h"\r
+#include "soc_osal.h"\r
+#include "osal_timer.h"\r
+#include "osal_mutex.h"\r
+#include "securec.h"\r
+#include "cst86xx_ctrl.h"\r
+#include "tcxo.h"\r
+#include "cmsis_os2.h"\r
+#include "common_def.h"\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif\r
+#endif\r
+\r
+cst86xx_drv_data g_cst86xx_drv = {\r
+    .chip_status = CST86XX_NOT_READY,\r
+    .ops_mux = {0},\r
+    .int_mask = CST86XX_INT_MASK,\r
+    .work_status = CST86XX_WORK_INVALID,\r
+    .fw_upgrade_flag = TD_FALSE,\r
+    .gesture_wakeup = TD_FALSE,\r
+    .host_dev_init_flag = TD_FALSE,\r
+    .chip_info = CST86XX_DEVICE_INFO,\r
+    .p_void = NULL,\r
+};\r
+\r
+static ext_errno cst86xx_config(void);\r
+\r
+static ext_errno cst86xx_parse_input(void)\r
+{\r
+    static uint8_t touch_input[CST86XX_TOUCHINFO_LEN] = { 0 };\r
+    uint16_t touch_status;\r
+    uint16_t x_axis;\r
+    uint16_t y_axis;\r
+    uint8_t model;\r
+    static uint32_t point_count=0;\r
+\r
+    ext_errno ret = cst86xx_tp_i2c_data_read(CST86XX_POINT_STATUS_REG, touch_input, CST86XX_TOUCHINFO_LEN);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:touch input read error! ret = 0x%x", ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    model = touch_input[1];\r
+       tp_print("TOUCH:ctp_get_data finger_num=%d", model);\r
+       /*\r
+       0 fingure meas UP EVENT, so return FALSE;\r
+       And now we only support FIVE fingures at most, so if more than 5 fingures also return FALSE \r
+       */      \r
+       if (model > 2)\r
+       {\r
+               return EXT_ERR_FAILURE;\r
+       }\r
+       \r
+    x_axis = (((uint16_t)(touch_input[2]&0x0f))<<8) | touch_input[3];\r
+    y_axis = (((uint16_t)(touch_input[4]&0x0f))<<8) | touch_input[5];\r
+    tp_print("TOUCH:finger[%d], x:%d, y:%d", model, x_axis, y_axis);\r
+       \r
+    if (model == 0)\r
+    {\r
+        g_cst86xx_drv.touch_msg.tp_event = MC_TP_RELEASE;\r
+        point_count=0;\r
+    }else{\r
+        if (point_count==0)\r
+        {\r
+            g_cst86xx_drv.touch_msg.tp_event = MC_TP_PRESS;\r
+        }else{\r
+            g_cst86xx_drv.touch_msg.tp_event = MC_TP_MOVE;\r
+        }\r
+        point_count++;\r
+    }\r
+        \r
+    g_cst86xx_drv.touch_msg.tp_event_info.x_axis[0] = x_axis;\r
+    g_cst86xx_drv.touch_msg.tp_event_info.y_axis[0] = y_axis;\r
+    g_cst86xx_drv.touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms();\r
+    \r
+    // } else {\r
+    //     g_cst86xx_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
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_irq_callback(uint8_t *data_buf, uint8_t data_len)\r
+{\r
+    unused(data_len);\r
+    ext_errno ret;\r
+    int32_t mem_ret;\r
+    uint16_t reg_write;\r
+    if (g_cst86xx_drv.chip_status != CST86XX_READY) {\r
+        tp_warning("TOUCH: not ready skip read");\r
+        return EXT_ERR_SUCCESS;\r
+    }\r
+\r
+    g_cst86xx_drv.touch_msg.tp_event = MC_TP_INVALID;\r
+\r
+    if ((g_cst86xx_drv.work_status == CST86XX_WORK_NORMAL) || (g_cst86xx_drv.work_status == CST86XX_WORK_STANDBY)) {\r
+        g_cst86xx_drv.irq_count++;\r
+        ret = cst86xx_parse_input();\r
+        if (ret != EXT_ERR_SUCCESS) {\r
+            cst86xx_reset();\r
+            tp_err("TOUCH: parse input fail, ret = 0x%x", ret);\r
+            return EXT_ERR_FAILURE;\r
+        }\r
+    }\r
+\r
+    mem_ret = memcpy_s(data_buf, sizeof(input_event_info), &(g_cst86xx_drv.touch_msg), sizeof(input_event_info));\r
+    if (mem_ret != EOK) {\r
+        tp_err("TOUCH:mem cpy error, ret = 0x%x", mem_ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_configuration(void)\r
+{\r
+    ext_errno ret;\r
+    uint16_t reg_read;\r
+ \r
+    tp_print("ctp_cst0_init enter ");\r
+\r
+    /* Read Firmware Version */\r
+    reg_read = 0;\r
+    ret = cst86xx_tp_i2c_data_read(CST86XX_FIRMWARE_VERSION, (uint8_t *)&reg_read, 1);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    g_cst86xx_drv.firmware_version = reg_read;\r
+\r
+    /* Read Minor Firmware Version */\r
+    reg_read = 0;\r
+    ret = cst86xx_tp_i2c_data_read(CST86XX_FACTORY_ID, (uint8_t *)&reg_read, 1);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    g_cst86xx_drv.vendor_id = reg_read;\r
+\r
+    /* Read Hw ID */\r
+    reg_read = 0;\r
+    ret = cst86xx_tp_i2c_data_read(CST86XX_HW_ID, (uint8_t *)&reg_read, 1);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("configuration error (read chip id) 0x%x", ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    g_cst86xx_drv.chip_id = reg_read;\r
+    tp_print("chip_id = 0x%x FW_ver = 0x%x factory_id = 0x%x",\r
+    g_cst86xx_drv.chip_id,\r
+    g_cst86xx_drv.firmware_version,\r
+    g_cst86xx_drv.vendor_id);\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_suspend(void)\r
+{\r
+    ext_errno ret;\r
+    uint16_t reg_write;\r
+    uint8_t retry_times = 0;\r
+\r
+    if (g_cst86xx_drv.work_status == CST86XX_WORK_SLEEP) {\r
+        tp_print("TOUCH:alread suspend");\r
+        return EXT_ERR_SUCCESS;\r
+    }\r
+    \r
+    /* Send Sleep Cmd */\r
+    reg_write = CST86XX_SLEEP_CMD;\r
+    for (retry_times = 0; retry_times < CST86XX_INIT_RETRY_TIMERS; retry_times++) {\r
+        ret = cst86xx_tp_i2c_reg_write(CST86XX_SLEEP_CMD,0x03);\r
+        if (ret == EXT_ERR_SUCCESS) {\r
+            break;\r
+        }\r
+        osDelay(CST86XX_GENERAL_DELAY_10);\r
+    }\r
+   if (retry_times == CST86XX_INIT_RETRY_TIMERS) {\r
+        tp_err("suspend: overtimes %d", retry_times);\r
+        goto suspend_exit;\r
+    }\r
+    osDelay(CST86XX_GENERAL_DELAY_10);\r
+\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_SLEEP;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+\r
+suspend_exit:\r
+\r
+    tp_err("TOUCH:suspend failed 0x%x", ret);\r
+\r
+    return EXT_ERR_FAILURE;\r
+}\r
+\r
+ext_errno cst86xx_resume(void)\r
+{\r
+    ext_errno ret;\r
+    uint8_t retry_times = 0;\r
+\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_RESUME;\r
+\r
+    for (; retry_times < CST86XX_INIT_RETRY_TIMERS; retry_times++) {\r
+        ret = cst86xx_config();\r
+        if (ret != EXT_ERR_SUCCESS) {\r
+            tp_err("resume: post err %d", ret);\r
+            /* retry delay 200ms */\r
+            osDelay(CST86XX_GENERAL_DELAY_200);\r
+        } else {\r
+            break;\r
+        }\r
+    }\r
+\r
+    if (retry_times == CST86XX_INIT_RETRY_TIMERS) {\r
+        tp_err("resume: overtimes %d", retry_times);\r
+        goto resume_exit;\r
+    }\r
+\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_NORMAL;\r
+\r
+    /* Enable Irq */\r
+    // cst86xx_set_irq_mode(CST86XX_IRQ_ENABLE, CST86XX_INT_MASK);\r
+\r
+    return EXT_ERR_SUCCESS;\r
+\r
+resume_exit:\r
+\r
+    /* Enable Irq */\r
+    // cst86xx_set_irq_mode(CST86XX_IRQ_DISABLE, CST86XX_INT_MASK);\r
+\r
+    tp_err("resume failed 0x%x", ret);\r
+\r
+    return EXT_ERR_FAILURE;\r
+}\r
+\r
+ext_errno cst86xx_get_power_mode(uint32_t *power_mode)\r
+{\r
+    if (power_mode == NULL) {\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    *power_mode = (uint32_t)(g_cst86xx_drv.work_status);\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_set_standby_mode(void)\r
+{\r
+    ext_errno ret;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_set_sleep_mode(void)\r
+{\r
+    ext_errno ret;\r
+\r
+    ret = cst86xx_suspend();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:cst86xx set suspend fail 0x%x", ret);\r
+    }\r
+\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_SLEEP;\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_set_normal_mode(void)\r
+{\r
+    ext_errno ret;\r
+    uint16_t reg_write;\r
+\r
+    if (g_cst86xx_drv.work_status == CST86XX_WORK_NORMAL) {\r
+        return EXT_ERR_SUCCESS;\r
+    }\r
+\r
+    ret = cst86xx_config();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+    // cst86xx_set_irq_mode(CST86XX_IRQ_ENABLE, CST86XX_INT_MASK);\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_NORMAL;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_set_power_mode(tp_work_mode power_mode)\r
+{\r
+    ext_errno ret = EXT_ERR_SUCCESS;\r
+\r
+    switch (power_mode) {\r
+        case MC_TP_SLEEP_WORK_MODE:\r
+        case MC_TP_SUSPEND_SCAN:\r
+            ret = cst86xx_set_sleep_mode();\r
+            break;\r
+        case MC_TP_NORMAL_WORK_MODE:\r
+        case MC_TP_RESUME_SCAN:\r
+            ret = cst86xx_set_normal_mode();\r
+            break;\r
+        case MC_TP_STANDBY_WORK_MODE:\r
+            ret = cst86xx_set_standby_mode();\r
+            break;\r
+        default:\r
+            tp_err("TOUCH:cst86xx not support powermode 0x%x", power_mode);\r
+            ret = EXT_ERR_FAILURE;\r
+            break;\r
+    }\r
+\r
+    return ret;\r
+}\r
+\r
+static ext_errno cst86xx_config(void)\r
+{\r
+    ext_errno ret;\r
+\r
+    /* Step 1 hardware reset */\r
+    ret = cst86xx_reset();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:Init reset fail 0x%x", ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    /* Step 3 configuration */\r
+    ret = cst86xx_configuration();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:init config fail 0x%x", ret);\r
+        return EXT_ERR_FAILURE;\r
+    }\r
+\r
+    /* Record Status For Init */\r
+    g_cst86xx_drv.chip_status = CST86XX_READY;\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_NORMAL;\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+static ext_errno cst86xx_resource_deinit(void)\r
+{\r
+    g_cst86xx_drv.work_status = CST86XX_WORK_INVALID;\r
+    g_cst86xx_drv.fw_upgrade_flag = TD_FALSE;\r
+    osal_mutex_destroy(&g_cst86xx_drv.ops_mux);\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+ext_errno cst86xx_init(void)\r
+{\r
+    ext_errno ret = EXT_ERR_FAILURE;\r
+    ext_errno err_ret;\r
+\r
+    /* create tp operation mutex */\r
+    if (g_cst86xx_drv.ops_mux.mutex == NULL) {\r
+        ret = osal_mutex_init(&(g_cst86xx_drv.ops_mux));\r
+        if (ret != EXT_ERR_SUCCESS) {\r
+            tp_err("TOUCH:cst86xx init create mux lock fail 0x%x", ret);\r
+            return EXT_ERR_FAILURE;\r
+        }\r
+    }\r
+\r
+    /* get tp operater mutex */\r
+    ret = osal_mutex_lock_timeout(&g_cst86xx_drv.ops_mux, CST86XX_OPERATER_MUTEX_WAIT_TIME);\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:cst86xx init wait mux lock fail 0x%x", ret);\r
+        goto init_fail;\r
+    }\r
+\r
+    /* tp hardware reset and init */\r
+    ret = cst86xx_config();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:cst86xx init fail 0x%x", ret);\r
+        goto init_fail;\r
+    }\r
+\r
+    /* release tp operater mutex */\r
+    osal_mutex_unlock(&g_cst86xx_drv.ops_mux);\r
+\r
+    tp_print("TOUCH:cst86xx init succ!");\r
+    return EXT_ERR_SUCCESS;\r
+\r
+init_fail:\r
+    /* release tp operater mutex */\r
+    osal_mutex_unlock(&g_cst86xx_drv.ops_mux);\r
+    err_ret =  cst86xx_resource_deinit();\r
+    if (err_ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH:delete mux lock err! ret = 0x%x", err_ret);\r
+    }\r
+    return ret;\r
+}\r
+\r
+ext_errno cst86xx_deinit(void)\r
+{\r
+    ext_errno ret = cst86xx_resource_deinit();\r
+    if (ret != EXT_ERR_SUCCESS) {\r
+        tp_err("TOUCH: cst86xx deinit fail! ret = 0x%x", ret);\r
+        return ret;\r
+    }\r
+\r
+    return EXT_ERR_SUCCESS;\r
+}\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+    }\r
+#endif\r
+#endif\r
diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.h b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.h
new file mode 100644 (file)
index 0000000..d44b1a9
--- /dev/null
@@ -0,0 +1,359 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved.\r
+ * Description: cst86xx touch driver.\r
+ * Author: @CompanyNameTag\r
+ * Create: 2021-05-29\r
+ */\r
+\r
+#ifndef CST86XX_TOUCH1_H\r
+#define CST86XX_TOUCH1_H\r
+\r
+#include "stdio.h"\r
+#include "soc_errno.h"\r
+#include "soc_osal.h"\r
+#include "touch_screen_def.h"\r
+#include "platform_core.h"\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif\r
+#endif\r
+\r
+/* cst86xx definitions */\r
+/* max wait time */\r
+#define CST86XX_OPERATER_MUTEX_WAIT_TIME 3000 /* operater tp mutex timeout ms */\r
+#define CST86XX_CMCP_WAIT_TIMEOUT        1000\r
+/* define some properties value */\r
+#define CST86XX_ENABLE                   0x0001\r
+#define CST86XX_DISABLE                  0x0000\r
+#define CST86XX_DATA_LEN                 2\r
+#define CST86XX_POWERON_DELAY            100\r
+#define CST86XX_POWEROFF_DELAY           100\r
+#define CST86XX_RESETHIGH_DELAY          10\r
+#define CST86XX_CLEARINT_DELAY           10\r
+#define CST86XX_FIRMWAREON_DELAY         200\r
+#define CST86XX_INIT_RETRY_TIMERS        3\r
+#define CST86XX_SETMODE_RETRY_TIMERS     3\r
+#define CST86XX_SOFTRESET_RETRY_TIMES    10\r
+#define CST86XX_RETRY_TIMES              10\r
+#define CST86XX_DEVICE_INFO              "cst,cst86xx"\r
+#define CST86XX_DEVICE_INFO_SIZE         sizeof(CST86XX_DEVICE_INFO)\r
+#define CST86XX_MAX_SUPPORTED_FINGER_NUM 1\r
+#define CST86XX_POINT_MODE               1\r
+#define CST86XX_CALIB_TOUCH_MODE         0x07\r
+#define CST86XX_REGDATA_SHIFT            8\r
+#define CST86XX_GENERAL_DELAY_1          1\r
+#define CST86XX_GENERAL_DELAY_5          5\r
+#define CST86XX_GENERAL_DELAY_10         10\r
+#define CST86XX_GENERAL_DELAY_20         20\r
+#define CST86XX_GENERAL_DELAY_25         25\r
+#define CST86XX_GENERAL_DELAY_30         30\r
+#define CST86XX_GENERAL_DELAY_50         50\r
+#define CST86XX_GENERAL_DELAY_100        100\r
+#define CST86XX_GENERAL_DELAY_200        200\r
+#define CST86XX_GENERAL_DELAY_500        500\r
+#define CST86XX_GENERAL_RETRY_1          1\r
+#define CST86XX_GENERAL_RETRY_2          2\r
+#define CST86XX_GENERAL_RETRY_3          3\r
+#define CST86XX_GENERAL_RETRY_4          4\r
+#define CST86XX_GENERAL_RETRY_10         10\r
+#define CST86XX_RAWDATA_DELAY_FOR_HOST   100\r
+#define CST86XX_FW_JUMP_CODE             0x0048\r
+#define CST86XX_REPORT_RATE              60\r
+#define CST86XX_PIXEL_THRESHOLD          5\r
+\r
+#ifndef CST86XX_RES_MAX_X\r
+#define CST86XX_RES_MAX_X 453\r
+#endif\r
+\r
+#ifndef CST86XX_RES_MAX_Y\r
+#define CST86XX_RES_MAX_Y 453\r
+#endif\r
+\r
+#ifndef CST86XX_POINT_TRESHHOLD\r
+#define CST86XX_POINT_TRESHHOLD 0x19\r
+#endif\r
+\r
+#define CST86XX_TOUCHINFO_LEN      (6)\r
+\r
+#define CST86XX_INT_NONE            0x0000\r
+#define CST86XX_INT_MASK            0x081F\r
+#define CST86XX_PALM_MASK           0x0010\r
+#define CST86XX_FIRMWARE_SIZE       48\r
+#define ZTW_PAGE_SIZE_128          128\r
+#define ZTW_PAGE_SIZE_64           64\r
+#define ZTW_SECTOR_SIZE            8\r
+#define ZTW_CHIPID_F400            0xF400\r
+#define ZTW_CHIPID_E240            0xE240\r
+#define ZTW_CHIPID_E700            0xE700\r
+#define ZTW_CHIPID_E548            0xE548\r
+#define ZTW_CHIPID_E538            0xE538\r
+#define ZTW_CHIPID_E532            0xE532\r
+#define ZTW_VENDOR_ID              0x5A49\r
+#define CST86XX_CHIP_ID             0xE628\r
+/* define touch info offset */\r
+#define CST86XX_STATUSL_OFFSET   0\r
+#define CST86XX_STATUSH_OFFSET   1\r
+#define CST86XX_EVENTL_OFFSET    2\r
+#define CST86XX_EVENTH_OFFSET    3\r
+#define CST86XX_XL_OFFSET        4\r
+#define CST86XX_XH_OFFSET        5\r
+#define CST86XX_YL_OFFSET        6\r
+#define CST86XX_YH_OFFSET        7\r
+#define CST86XX_WIDTH_OFFSET     8\r
+#define CST86XX_SUBSTATUS_OFFSET 9\r
+/* define data shift and mask */\r
+#define CST86XX_SHIFT_8_BIT  8\r
+#define CST86XX_SHIFT_16_BIT 16\r
+#define CST86XX_SHIFT_24_BIT 24\r
+#define CST86XX_MASK_BYTE    0xFF\r
+/* define CST86XX_HIGH_SPEED_DMA rely on iic dma support */\r
+#ifdef CST86XX_HIGH_SPEED_DMA\r
+#define CST86XX_TOUCH_POINT_MODE 0\r
+#else\r
+#define CST86XX_TOUCH_POINT_MODE 1\r
+#endif\r
+\r
+#define CST86XX_SEC_MODE        48\r
+#define CST86XX_NORMAL_MODE     5\r
+#define CST86XX_DND_MODE        11 /* mutual cap */\r
+#define CST86XX_SELF_DND_MODE   17 /* self cap */\r
+#define CST86XX_DNDSKIP_CNT     1\r
+#define CST86XX_SELFDNDSKIP_CNT 1\r
+/* Config Reg Info */\r
+#define CST86XX_REG_CMD_ENABLE    0xC000\r
+#define CST86XX_REG_CHIP_ID       0xCC00\r
+#define CST86XX_REG_INTN_CLEAR    0xC004\r
+#define CST86XX_REG_NVM           0xC002\r
+#define CST86XX_REG_NVM_VPP       0xC003\r
+#define CST86XX_REG_NVM_WP        0xC104\r
+#define CST86XX_REG_PROGRAM_START 0xC001\r
+#define CST86XX_POWER_CTL_BEGIN   0x000A\r
+#define CST86XX_POWER_CTL_END     0x000B\r
+#define CST86XX_CALIB_CTL1        0xC003\r
+#define CST86XX_CALIB_CTL2        0xC104\r
+#define CST86XX_SDRAM_RESET       0x0FF8\r
+#define CST86XX_REPORT_REG        0x0186  /* 设置中断上报频率 */\r
+#define CST86XX_PIXEL_THRESHOLD_REG 0x00C3\r
+/* Register Map */\r
+#define CST86XX_SLEEP_CMD                     0xA5\r
+#define CST86XX_FIRMWARE_VERSION              0xA9\r
+#define CST86XX_FACTORY_ID                    0xAA\r
+#define CST86XX_HW_ID                         0xA7\r
+#define CST86XX_POINT_STATUS_REG              0x01\r
+\r
+#ifndef CST86XX_TSP_X_CHANNEL_NUM\r
+#define CST86XX_TSP_X_CHANNEL_NUM 6\r
+#endif\r
+\r
+#ifndef CST86XX_TSP_Y_CHANNEL_NUM\r
+#define CST86XX_TSP_Y_CHANNEL_NUM 6\r
+#endif\r
+\r
+#define CST86XX_TSP_DND_NUM     (CST86XX_TSP_X_CHANNEL_NUM * CST86XX_TSP_Y_CHANNEL_NUM)\r
+#define CST86XX_TSP_SELFDND_NUM (CST86XX_TSP_X_CHANNEL_NUM + CST86XX_TSP_Y_CHANNEL_NUM)\r
+\r
+/* firmware info */\r
+#define CST86XX_FIRMWARE_VERSION_L            0\r
+#define CST86XX_FIRMWARE_VERSION_H            1\r
+#define CST86XX_FIRMWARE_VERSION_OFFSET       52\r
+#define CST86XX_FIRMWARE_MINOR_VERSION_OFFSET 56\r
+#define CST86XX_FIRMWARE_DATA_VERSION_OFFSET  60\r
+#define CST86XX_FIRMWARE_OFFSET_ZERO          0\r
+#define CST86XX_FIRMWARE_CONVERT_DATA_STEP    2\r
+#define CST86XX_FIRMWARE_CONVERT_DATA_OFFSET  1\r
+/* file op code */\r
+#define CST86XX_FILE_ERROR (-1)\r
+#define CST86XX_FILE_OK    0\r
+/* upgrade info */\r
+#define CST86XX_FWGRADE_CMD_NUM 3\r
+/* rawdata info */\r
+#define CST86XX_RAWDATA_CMD_NUM 2\r
+\r
+/* self_dnd dnd parameter */\r
+#define CST86XX_SEC_SELF_DND_N_COUNT      15\r
+#define CST86XX_SEC_SELF_DND_U_COUNT      2\r
+#define CST86XX_SEC_SELF_DND_FREQUENCY    80\r
+\r
+#define CST86XX_SEC_DND_N_COUNT           27\r
+#define CST86XX_SEC_DND_U_COUNT           3\r
+#define CST86XX_SEC_DND_FREQUENCY         240\r
+\r
+/* host peripheral typedef */\r
+typedef ext_errno (*tp_irq_callback)(void);\r
+\r
+/* CST86XX driver typedef */\r
+typedef enum {\r
+    CST86XX_POWERDOWN = 0,\r
+    CST86XX_POWERUP,\r
+} cst86xx_sw_power_status;\r
+\r
+typedef enum {\r
+    CST86XX_WORK_NORMAL = 0,\r
+    CST86XX_WORK_STANDBY,\r
+    CST86XX_WORK_GETCMCP,\r
+    CST86XX_WORK_SLEEP,\r
+    CST86XX_WORK_SUSPEND,\r
+    CST86XX_WORK_RESUME,\r
+    CST86XX_WORK_INVALID,\r
+} cst86xx_work_status;\r
+\r
+typedef enum {\r
+    CST86XX_NOT_READY = 0,\r
+    CST86XX_READY,\r
+} cst86xx_device_status;\r
+\r
+typedef enum {\r
+    MC_BUTTON_RELEASE = 0, /* button release */\r
+    MC_BUTTON_PRESSED = 1, /* button pressed */\r
+} button_event_type;\r
+\r
+typedef enum {\r
+    MC_TOUCHKEY_EVENT_PRESS = 0,\r
+    MC_TOUCHKEY_EVENT_RELASSE,\r
+    MC_TOUCHKEY_EVENT_LONG_PRESS,\r
+    MC_TOUCHKEY_EVENT_INVALID,\r
+} touch_key_event_type;\r
+\r
+typedef enum {\r
+    CST86XX_GESTURE_NONE = 0,\r
+    CST86XX_GESTURE_SIGNAL_CLICK = 1,\r
+    CST86XX_GESTURE_DOUBLE_CLICK = 2,\r
+    CST86XX_GESTURE_SLIDE_UP = 4,\r
+    CST86XX_GESTURE_SLIDE_DOWN = 5,\r
+} cst86xx_gesture_event;\r
+\r
+typedef enum {\r
+    CST86XX_IRQ_DISABLE = 0,\r
+    CST86XX_IRQ_ENABLE,\r
+} cst86xx_irq_status;\r
+\r
+typedef enum {\r
+    MC_TP_NORMAL_WORK_MODE = 0, /* tp normal mode */\r
+    MC_TP_STANDBY_WORK_MODE,    /* tp idle mode */\r
+    MC_TP_BOOTLOADER_WORK_MODE,\r
+    MC_TP_SLEEP_WORK_MODE,\r
+    MC_TP_SUSPEND_SCAN,\r
+    MC_TP_RESUME_SCAN,\r
+    MC_TP_MAX_MODE,\r
+} tp_work_mode;\r
+\r
+typedef enum {\r
+    MC_TP_UPGRADE_NEED_FLAG,\r
+    MC_TP_UPGRADE_START_ASYN,\r
+    MC_TP_UPGRADE_STATUS,\r
+    MC_TP_UPGRADE_SYNC,\r
+} mc_tp_upgrade;\r
+\r
+typedef struct {\r
+    uint32_t reset_gpio;\r
+    uint32_t int_gpio;\r
+    i2c_bus_t i2c_id;\r
+    uint32_t i2c_baudrate;\r
+} tp_peripheral_attr;\r
+\r
+typedef struct {\r
+    uint16_t button_code;\r
+} button_dev_info;\r
+\r
+typedef struct {\r
+    uint16_t xchannel_num;\r
+    uint16_t ychannel_num;\r
+    uint16_t total_dnd_num;\r
+    uint16_t total_self_dnd_num;\r
+} cst86xx_panel_data;\r
+\r
+typedef struct {\r
+    uint32_t skip_cnt;\r
+    int16_t dnd_data[CST86XX_TSP_DND_NUM];\r
+    int16_t self_dnd_data[CST86XX_TSP_SELFDND_NUM];\r
+} cst86xx_tsp_rawdata;\r
+\r
+typedef enum {\r
+    MC_TP_RAW_DATA,\r
+    MC_TP_BASE_DATA,\r
+    MC_TP_NOS_DATA,\r
+    MC_TP_SIG_DATA,\r
+    MC_TP_FT_DATA,\r
+    MC_TP_NT_DATA,\r
+    MC_TP_MAX_DATA,\r
+    MC_TP_CM_CP_DATA,     /* 7, CM CP data */\r
+    MC_TP_INT_COUNT_DATA, /* 8, TP Int count */\r
+    MC_TP_NOISE_METRICS_DATA,\r
+    MC_TP_DATA_STRUCTURE_DATA,\r
+    MC_TP_PANEL_SCAN_CM_DATA,\r
+    MC_TP_PANEL_SCAN_CP_DATA,\r
+    MC_TP_START_RAW_TRANS,\r
+    MC_TP_STOP_RAW_TRANS,\r
+    MC_TP_START_GET_WATER_TEMPR, /* 15, start get and print water level and temprature */\r
+    MC_TP_STOP_GET_WATER_TEMPR,  /* 16, stop get and print water level and temprature */\r
+    MC_TP_RAW_MAX,\r
+} mc_tp_rawdata;\r
+\r
+typedef struct {\r
+    mc_tp_rawdata cmd;\r
+    uint8_t *data_buf;\r
+    uint8_t data_in_len;\r
+    uint32_t data_out_len;\r
+    uint32_t data_addr;\r
+} touch_rawdata_info;\r
+\r
+/* define for drv process talbe */\r
+typedef ext_errno (*touch_drv_upgrade_handle)(uint8_t *data_buff, uint8_t buf_len);\r
+typedef struct {\r
+    mc_tp_upgrade cmd_id;\r
+    touch_drv_upgrade_handle process_cb;\r
+} touch_drv_upgrade_proc;\r
+\r
+typedef ext_errno (*touch_hal_rawdata_handle)(uint8_t *data_buf, uint8_t buf_len);\r
+typedef struct {\r
+    mc_tp_rawdata cmd_id;\r
+    touch_hal_rawdata_handle process_cb;\r
+} touch_drv_rawdata_proc;\r
+\r
+typedef struct {\r
+    uint16_t chip_id;\r
+    uint16_t vendor_id;\r
+    uint16_t chip_hw_id;\r
+    uint8_t chip_info[CST86XX_DEVICE_INFO_SIZE];\r
+    uint16_t firmware_version;\r
+    uint16_t minor_firmware_version;\r
+    uint16_t reg_version;\r
+    uint32_t flash_fw_version;\r
+    uint16_t int_mask;\r
+    uint16_t touch_mode;\r
+    uint32_t irq_count;\r
+    uint32_t touch_count;\r
+    uint32_t page_size;\r
+    uint16_t header_size;\r
+    uint16_t image_size;\r
+    osal_mutex ops_mux;\r
+    bool fw_upgrade_flag;\r
+    bool gesture_wakeup;\r
+    bool host_dev_init_flag;\r
+    cst86xx_sw_power_status power_status;\r
+    cst86xx_work_status work_status;\r
+    cst86xx_sw_power_status chip_sw_power_status;\r
+    cst86xx_device_status chip_status;\r
+    input_event_info touch_msg;\r
+    cst86xx_panel_data panel_info;\r
+    tp_peripheral_attr dev_attr;\r
+    void *p_void;\r
+    uint32_t tp_event;\r
+} cst86xx_drv_data;\r
+\r
+ext_errno cst86xx_init(void);\r
+ext_errno cst86xx_deinit(void);\r
+ext_errno cst86xx_set_power_mode(tp_work_mode power_mode);\r
+ext_errno cst86xx_get_power_mode(uint32_t *power_mode);\r
+ext_errno cst86xx_resume(void);\r
+ext_errno cst86xx_irq_callback(uint8_t *data_buf, uint8_t data_len);\r
+ext_errno cst86xx_host_init_sample(void);\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+    }\r
+#endif\r
+#endif\r
+\r
+#endif\r
index 85f2db5..5fb480e 100644 (file)
@@ -498,101 +498,6 @@ static ext_errno ft6x46_reg_config(void)
     return EXT_ERR_SUCCESS;
 }
 
-static ext_errno ft6x46_configuration(void)
-{
-    ext_errno ret;
-    uint8_t retry_times = 0;
-    uint16_t reg_read;
-    uint16_t reg_write;
-
-    /* Software Reset */
-    reg_write = FT6X46_SWRESET_CMD;
-    for (retry_times = 0; retry_times < FT6X46_RETRY_TIMES; retry_times++) {
-        ret = tp_i2c_cmd_write(reg_write);
-        if (ret == EXT_ERR_SUCCESS) {
-            break;
-        }
-        osDelay(FT6X46_RESETHIGH_DELAY);
-    }
-
-    if (retry_times >= FT6X46_RETRY_TIMES) {
-        tp_err("TOUCH:configuration sw reset fail! ret = 0x%x", ret);
-        return EXT_ERR_TP_ZTW523_CONFIG_RESET;
-    }
-
-    /* Read Firmware Version */
-    reg_read = 0;
-    ret = tp_i2c_data_read(FT6X46_FIRMWARE_VERSION, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        return EXT_ERR_TP_ZTW523_CONFIG_READ_FWVERSION;
-    }
-    g_ft6x46_drv.firmware_version = reg_read;
-
-    /* Read Minor Firmware Version */
-    reg_read = 0;
-    ret = tp_i2c_data_read(FT6X46_MINOR_FW_VERSION, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        return EXT_ERR_TP_ZTW523_CONFIG_READ_FWMINORVERSION;
-    }
-    g_ft6x46_drv.minor_firmware_version = reg_read;
-
-    /* Read Hw ID */
-    reg_read = 0;
-    ret = tp_i2c_data_read(FT6X46_HW_ID, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        tp_err("configuration error (read hw id) 0x%x", ret);
-        return EXT_ERR_TP_ZTW523_GET_HWID_READ_ID;
-    }
-    g_ft6x46_drv.chip_hw_id = reg_read;
-
-    /* Read Register Version */
-    reg_read = 0;
-    ret = tp_i2c_data_read(FT6X46_DATA_VERSION_REG, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        return EXT_ERR_TP_ZTW523_CONFIG_READ_DATAREG;
-    }
-    g_ft6x46_drv.reg_version = reg_read;
-
-    ret = ft6x46_reg_config();
-    if (ret != EXT_ERR_SUCCESS) {
-        return ret;
-    }
-
-    /* Write Clear Int Cmd */
-    ft6x46_clear_interrupt(FT6X46_RETRY_TIMES, FT6X46_GENERAL_DELAY_1);
-
-    return EXT_ERR_SUCCESS;
-}
-
-static ext_errno ft6x46_get_panel_info(void)
-{
-    ext_errno ret;
-    uint16_t reg_read = 0;
-    /* Read X Channel Num */
-    ret = tp_i2c_data_read(FT6X46_TOTAL_NUMBER_OF_X, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        tp_err("TOUCH:GetPanelInfo error read x channel 0x%x", ret);
-        return EXT_ERR_FAILURE;
-    }
-
-    g_ft6x46_drv.panel_info.xchannel_num = reg_read;
-    /* Read Y Channel Num */
-    reg_read = 0;
-    ret = tp_i2c_data_read(FT6X46_TOTAL_NUMBER_OF_Y, (uint8_t *)&reg_read, FT6X46_DATA_LEN);
-    if (ret != EXT_ERR_SUCCESS) {
-        tp_err("TOUCH:GetPanelInfo error read y channel 0x%x", ret);
-        return EXT_ERR_FAILURE;
-    }
-
-    g_ft6x46_drv.panel_info.ychannel_num = reg_read;
-    g_ft6x46_drv.panel_info.total_dnd_num =
-        g_ft6x46_drv.panel_info.xchannel_num * g_ft6x46_drv.panel_info.ychannel_num;
-    g_ft6x46_drv.panel_info.total_self_dnd_num =
-        g_ft6x46_drv.panel_info.xchannel_num + g_ft6x46_drv.panel_info.ychannel_num;
-
-    return EXT_ERR_SUCCESS;
-}
-
 static ext_errno ft6x46_standby(void)
 {
     ext_errno ret;
@@ -676,47 +581,6 @@ ext_errno ft6x46_suspend(void)
     return EXT_ERR_SUCCESS;
 }
 
-static ext_errno ft6x46_resume_post(void)
-{
-    ext_errno ret;
-    // uint16_t reg_write;
-    // uint16_t cmd_write;
-
-    // reg_write = FT6X46_ENABLE;
-    // ret = tp_i2c_reg_write(FT6X46_REG_CMD_ENABLE, reg_write);
-    // if (ret != EXT_ERR_SUCCESS) {
-    //     tp_err("resume post reg cmd failed 0x%x", ret);
-    //     return EXT_ERR_FAILURE;
-    // }
-    // /* delay for ms */
-    // osDelay(FT6X46_GENERAL_DELAY_1);
-
-    // cmd_write = FT6X46_REG_INTN_CLEAR;
-    // ret = tp_i2c_cmd_write(cmd_write);
-    // if (ret != EXT_ERR_SUCCESS) {
-    //     return EXT_ERR_TP_ZTW523_POWERUP_INTN_CLEAR;
-    // }
-    // osDelay(FT6X46_GENERAL_DELAY_1);
-
-    // reg_write = FT6X46_ENABLE;
-    // ret = tp_i2c_reg_write(FT6X46_REG_NVM, reg_write);
-    // if (ret != EXT_ERR_SUCCESS) {
-    //     tp_err("resume post reg nvm failed 0x%x", ret);
-    //     return EXT_ERR_FAILURE;
-    // }
-    // osDelay(FT6X46_GENERAL_DELAY_1);
-
-    // reg_write = FT6X46_ENABLE;
-    // ret = tp_i2c_reg_write(FT6X46_REG_PROGRAM_START, reg_write);
-    // if (ret != EXT_ERR_SUCCESS) {
-    //     tp_err("resume post reg program start failed 0x%x", ret);
-    //     return EXT_ERR_FAILURE;
-    // }
-
-    // osDelay(FT6X46_GENERAL_DELAY_50); /* delay 50 ms */
-
-    return EXT_ERR_SUCCESS;
-}
 ext_errno ft6x46_resume(void)
 {
     ext_errno ret;
@@ -726,31 +590,12 @@ ext_errno ft6x46_resume(void)
 
     ft6x46_resume_reset();
 
-    // for (; retry_times < FT6X46_INIT_RETRY_TIMERS; retry_times++) {
-    //     ret = ft6x46_resume_post();
-    //     if (ret != EXT_ERR_SUCCESS) {
-    //         tp_err("resume: post err %d", ret);
-    //         /* retry delay 200ms */
-    //         osDelay(FT6X46_GENERAL_DELAY_200);
-    //     } else {
-    //         break;
-    //     }
-    // }
-
-    // if (retry_times == FT6X46_INIT_RETRY_TIMERS) {
-    //     tp_err("resume: overtimes %d", retry_times);
-    //     goto resume_exit;
-    // }
     ret = ft6x46_config();
     if (ret != EXT_ERR_SUCCESS) {
         tp_err("TOUCH:ft6x46 init fail 0x%x", ret);
         goto resume_exit;
     }
-    // ret = ft6x46_configuration();
-    // if (ret != EXT_ERR_SUCCESS) {
-    //     tp_err("TOUCH:resume config fail 0x%x", ret);
-    //     return EXT_ERR_TP_ZTW523_INIT_CONFIG;
-    // }
+  
 
     g_ft6x46_drv.work_status = FT6X46_WORK_NORMAL;
 #ifdef FT6X46_GESTURE_WAKEUP
index 077ab32..a1c4d54 100644 (file)
@@ -21,6 +21,9 @@
 #elif defined(TPTYPE_FT6X46)\r
 #include "ft6x46_drv1.h"\r
 #include "ft6x46_ctrl.h"\r
+#elif defined(TPTYPE_CST86XX)\r
+#include "cst86xx_drv1.h"\r
+#include "cst86xx_ctrl.h"\r
 #else\r
 #include "ztw523_drv1.h"\r
 #include "ztw523_ctrl.h"\r
 #define TOUCH_I2C_BUS            FT6X46_I2C_BUS\r
 #define TOUCH_INT_GPIO           FT6X46_INT_GPIO\r
 #define TOUCH_RESET_GPIO         FT6X46_RESET_GPIO\r
+#elif defined(TPTYPE_CST86XX)\r
+#define TOUCH_I2C_BUS            CST86XX_I2C_BUS\r
+#define TOUCH_INT_GPIO           CST86XX_INT_GPIO\r
+#define TOUCH_RESET_GPIO         CST86XX_RESET_GPIO\r
 #else\r
 #define TOUCH_I2C_BUS            ZTW523_I2C_BUS\r
 #define TOUCH_INT_GPIO           ZTW523_INT_GPIO\r
@@ -458,6 +465,10 @@ void touch_screen_resume(void)
     if (ret != EXT_ERR_SUCCESS) { tp_err("touch resume ret=0x%x", ret); }\r
 #elif defined(TPTYPE_ZTW523)\r
     ztw523_resume();\r
+#elif defined(TPTYPE_CST86XX)\r
+    touch_peripheral_api *touch_ptr = (touch_peripheral_api*)touch_screen_get_api();\r
+    ext_errno ret = touch_ptr->touch_resume();\r
+    if (ret != EXT_ERR_SUCCESS) { tp_err("touch resume ret=0x%x", ret); }\r
 #elif defined(TPTYPE_FT6X46)\r
     ft6x46_resume();\r
 #else\r
@@ -484,6 +495,8 @@ void touch_screen_restart(void)
     tma525b_resume();\r
 #elif defined(TPTYPE_ZTW523)\r
     ztw523_resume();\r
+#elif defined(TPTYPE_CST86XX)\r
+    cst86xx_resume();\r
 #elif defined(TPTYPE_FT6X46)\r
     ft6x46_resume();\r
 #else\r