From 5304aef1c47472a2429aaf211984ba794b21c082 Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Thu, 28 Nov 2024 07:01:36 +0800 Subject: [PATCH] =?utf8?q?=E6=B7=BB=E5=8A=A0w9=E9=A9=B1=E5=8A=A8=E4=B8=B4?= =?utf8?q?=E6=97=B6=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 6 +- .../application/audio/vendor/CMakeLists.txt | 15 + .../audio/vendor/aw88166/aw88166.c | 4 +- .../brandy/brandy_standard/thread_pri_init.c | 10 +- .../rebootdevice/src/RebootPresenter.cpp | 7 + code/sdk/bootloader/flashboot/brandy/main.c | 3 + .../brandy/nandflash/nandflash_config.c | 2 +- .../config/target_config/brandy/config.py | 16 +- .../brandy_evb/board_config/board_evb.h | 274 +++-- .../product/product_evb4_standard.h | 42 +- .../chips/brandy/porting/uart/uart_porting.c | 18 +- .../drivers/drivers/driver/lcd/lcd_config.c | 70 ++ .../drivers/drivers/driver/lcd/lcd_private.c | 29 +- .../drivers/drivers/driver/lcd/soc_lcd_api.c | 3 +- .../nand/include/nandflash_ds35x1g.h | 2 +- .../driver/nand_flash/nand/nandflash_config.c | 2 +- .../nand_flash/nand/nandflash_ds35x1g.c | 2 +- .../drivers/driver/touch/CMakeLists.txt | 12 + .../driver/touch/ft6x46_touch/ft6x46_ctrl.c | 397 +++++++ .../driver/touch/ft6x46_touch/ft6x46_ctrl.h | 69 ++ .../driver/touch/ft6x46_touch/ft6x46_drv1.c | 104 ++ .../driver/touch/ft6x46_touch/ft6x46_drv1.h | 14 + .../driver/touch/ft6x46_touch/ft6x46_touch1.c | 977 ++++++++++++++++++ .../driver/touch/ft6x46_touch/ft6x46_touch1.h | 421 ++++++++ .../drivers/driver/touch/touch_screen_drv.c | 25 +- .../driver/flash/flash_common_config.h | 6 + .../include/driver/flash/flash_config_info.h | 39 + .../driver/flash/flash_others_config.h | 78 ++ 28 files changed, 2501 insertions(+), 146 deletions(-) create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.c create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.h create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.c create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.h create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.c create mode 100644 code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 68189f026..09e69a7df 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -74,6 +74,10 @@ "mag_service.h": "c", "mmc5603_hal.h": "c", "clocks_config.h": "c", - "clocks_types.h": "c" + "clocks_types.h": "c", + "nandflash_w25n01g.h": "c", + "nandflash_config.h": "c", + "hal_nandflash.h": "c", + "stddef.h": "c" } } \ No newline at end of file diff --git a/code/sdk/application/audio/vendor/CMakeLists.txt b/code/sdk/application/audio/vendor/CMakeLists.txt index e3152c2ca..c1c31962b 100644 --- a/code/sdk/application/audio/vendor/CMakeLists.txt +++ b/code/sdk/application/audio/vendor/CMakeLists.txt @@ -39,6 +39,21 @@ set(COMPONENT_INC ${COMPONENT_INC} ) endif() +if("${CFG_SAP_VENDOR_DRIVER_AW88166_SUPPORT}" STREQUAL "y") +set(COMPONENT_SRC ${COMPONENT_SRC} + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw88166.c + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx.c + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx_calib.c + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx_device.c + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/product_init_files/aw88166/aw883xx_pid_2066_init.c +) +set(COMPONENT_INC ${COMPONENT_INC} + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166 + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/product_init_files/aw88166 + ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/config/aw88166/mono/16bit +) +endif() + if("${CFG_SAP_VENDOR_DRIVER_ANC_CODEC_SUPPORT}" STREQUAL "y") set(COMPONENT_SRC ${COMPONENT_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/anc_codec/anc_codec.c diff --git a/code/sdk/application/audio/vendor/aw88166/aw88166.c b/code/sdk/application/audio/vendor/aw88166/aw88166.c index d25e8db7f..a0f2d29a3 100644 --- a/code/sdk/application/audio/vendor/aw88166/aw88166.c +++ b/code/sdk/application/audio/vendor/aw88166/aw88166.c @@ -19,8 +19,8 @@ static td_bool g_aw88166_i2c_inited = TD_FALSE; -#define AW88166_PWR_ON_PIN S_MGPIO4 -#define AW88166_I2C_BUS_ID I2C_BUS_0 +#define AW88166_PWR_ON_PIN S_AGPIO_L25 +#define AW88166_I2C_BUS_ID I2C_BUS_3 #define AW88166_I2C_DEV_ADDR 0x34 static td_s32 aw_dev0_i2c_write_func(td_u16 dev_addr, td_u8 reg_addr, td_u8 *pdata, td_u16 len) diff --git a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c index 34da5674b..f4e39d22b 100644 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -30,6 +30,8 @@ #include "tma525b_drv1.h" #elif defined(TPTYPE_ZTW523) #include "ztw523_touch1.h" +#elif defined(TPTYPE_FT6X46) +#include "ft6x46_touch1.h" #else #include "ztw523_touch1.h" #endif @@ -42,9 +44,13 @@ * define AUDIO_SMARTPA_AW88166 : macro to init smartpa aw88166; * define AUDIO_SMARTPA_AW88166_I2S_ID UAPI_SND_OUT_PORT_I2S0 : macro to specify i2s id connecting to smartpa aw88166; */ +#if 0 #define AUDIO_SMARTPA_AW88262 #define AUDIO_SMARTPA_AW88262_I2S_ID UAPI_SND_OUT_PORT_I2S2 - +#else +#define AUDIO_SMARTPA_AW88166 +#define AUDIO_SMARTPA_AW88166_I2S_ID UAPI_SND_OUT_PORT_I2S0 +#endif #endif /* DSP_EXIST */ #include "panic.h" #include "board_init.h" @@ -81,6 +87,8 @@ static void sample_gfx_init(void) tma525b_host_init_sample(); #elif defined(TPTYPE_ZTW523) ztw523_host_init_sample(); +#elif defined(TPTYPE_FT6X46) + ft6x46_host_init_sample(); #else ztw523_host_init_sample(); #endif diff --git a/code/sdk/application/wearable/nativeapp/nativeui/rebootdevice/src/RebootPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/rebootdevice/src/RebootPresenter.cpp index e5cc75ab0..1c106f4ba 100644 --- a/code/sdk/application/wearable/nativeapp/nativeui/rebootdevice/src/RebootPresenter.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/rebootdevice/src/RebootPresenter.cpp @@ -31,6 +31,11 @@ RebootPresenter *RebootPresenter::GetInstance() return g_pRebootPresenter; } +extern "C" +{ +extern void uapi_sys_shipmode(uint32_t arg); +extern uint32_t mcu_os_sys_reset(uint8_t *para, uint32_t para_len); +} bool RebootPresenter::OnClick(UIView& view, const ClickEvent& event) { UNUSED(event); @@ -42,9 +47,11 @@ bool RebootPresenter::OnClick(UIView& view, const ClickEvent& event) } else if (strcmp(view.GetViewId(), REBOOTDEVICE_BUTTON) == 0) { // 重启 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "REBOOTDEVICE_BUTTON OnClick"); + mcu_os_sys_reset(NULL,NULL); } else if (strcmp(view.GetViewId(), SHUTDOWNDEVICE_BUTTON) == 0) { // 关机 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SHUTDOWNDEVICE_BUTTON OnClick"); + uapi_sys_shipmode(0); } return true; } diff --git a/code/sdk/bootloader/flashboot/brandy/main.c b/code/sdk/bootloader/flashboot/brandy/main.c index ec9e7304d..08607344d 100644 --- a/code/sdk/bootloader/flashboot/brandy/main.c +++ b/code/sdk/bootloader/flashboot/brandy/main.c @@ -782,6 +782,9 @@ static void xip_and_save_ssb(void) static void fs_init(void) { + uapi_gpio_set_dir(S_AGPIO_L18,GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(S_AGPIO_L18,GPIO_LEVEL_HIGH); + #ifdef CFG_DRIVERS_NANDFLASH nandflash_qspi_init(); #endif diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c b/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c index ed49eb983..6a3c1ff5a 100644 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c @@ -35,7 +35,7 @@ void nandflash_qspi_init(void) { struct nand_driver_struct *nandflash_drv = get_nand_flash(); PRINT("\r\nnandflash init start.\r\n"); - nand_driver_init(SPEED_HIGH); + nand_driver_init(SPEED_MID); PRINT("\r\nnandflash initing ...\r\n"); g_nandflash_init = nandflash_drv->nand_flash_init(); PRINT("\r\nnandflash init end. ret %s\r\n", (g_nandflash_init == 0 ? "success" : "fail")); diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 4c1d02928..6d994539f 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -116,6 +116,8 @@ target = { 'CONFIG_ZDIAG_AUDIO_PROC_SUPPORT', 'CONFIG_ZDIAG_AUDIO_DUMP_SUPPORT', 'CONFIG_ZDIAG_AUDIO_PROBE_SUPPORT', 'CONFIG_SEA_PHS_SUPPORT', 'CONFIG_DIAG_GPU_PROC_SUPPORT', 'SUPPORT_BLE', 'SUPPORT_BREDR', 'ENABLE_UIKIT', 'SUPPORT_GPU_JPEG', 'SUPPORT_GPU_GMMU', 'SUPPORT_GPU_OPENVG', 'SW_UART_DEBUG', 'SAVE_EXC_INFO', 'HASH_MEM_COPY', 'JS_ENABLE', 'CONFIG_LOW_POWER_TEST', 'SUPPORT_OHOSFWK', + 'FT_SINGLE_UART', + 'TPTYPE_FT6X46', 'ENABLE_ECC', 'MIPI_ULPS_SUPPORT', 'SUPPORT_ALIPAY_SEC', 'SUPPORT_RC_CALIBRATION'], 'ram_component': ["algorithm", "dfx_port_brandy", "dfx_update", 'dfx_nv', "osal", "arch_port", "-:testsuite", "liteos_port", 'lcd', 'qspi_display', 'dfx_file_operation', @@ -127,7 +129,7 @@ target = { 'ram_component_set': ['bgh', 'media', 'gpu', 'graphic_uikit', 'bgh_audio', 'dfx_set', 'ohos_set', 'wearable_set', 'alipay_set'], 'dsp_version': 'max', 'packet': True, - 'fs_image': False + 'fs_image': True }, #native-js-user: liteos + uikit + nandflash + mipi + psram + audio 典型合封UIKIT版本 #离线日志版本 @@ -233,12 +235,16 @@ target = { 'defines': ['PRE_ASIC', 'BRANDY_PRODUCT_EVB4', 'VERSION_STANDARD', '__LITEOS__', '_ALL_SOURCE', 'SUPPORT_CXX', 'I2C_SLAVE_REG_ADDR_4BYTE', 'CFG_DRIVERS_NANDFLASH', "-:TARGET_CHIP_BRANDY=1", "-:BRANDY_CHIP_V100=1", 'ENABLE_UIKIT', 'SW_UART_DEBUG', "HASH_MEM_COPY", + 'FT_SINGLE_UART', + 'TPTYPE_FT6X46', 'ENABLE_ECC', 'SUPPORT_RECOVERY_DISPLAY'], 'ram_component': ["algorithm", "dfx_port_brandy", "dfx_update", "osal", "arch_port", "-:testsuite", "liteos_port", 'lcd', 'qspi_display', 'dfx_file_operation', 'psram', 'hal_mipi', 'mipi_tx', 'non_os', 'touch', 'x_dpal', 'x_vfs', 'x_disk', 'x_fat', 'drv_mmc', 'x_vfs_private', - 'ulp_aon', 'hal_l2ram', 'pm_service', 'pm_brandy', 'cmn_header'], + 'ulp_aon', 'hal_l2ram', 'pm_service', 'pm_brandy', 'cmn_header', + 'at_cmd' + ], 'ram_component_set': ['pinctrl', 'dfx_set' ,'gpu'] }, 'brandy-xts-r': { @@ -285,7 +291,11 @@ target = { "SSB_USE_PLL", "VERSION_STANDARD", "BUILD_APPLICATION_SSB", "LIBBOOTLOADER", "LIBCODELOADER", "LIBCPU_UTILS", "LIBAPP_VERSION", "LIBPANIC", "LIBCONNECTIVITY", "LIBERROR_CODE", "LIBSEC_RANDOM", "LIBCODELOADER_SSB", "LIBJLINK_LOAD", "LIBLIB_UTILS", "LIBBUILD_VERSION", - "NO_TIMEOUT", "CONFIG_UART_BAUD_RATE_DIV_8", 'SW_UART_DEBUG', 'LARGE_BUFFER'], + 'ENABLE_ECC', + "CFG_DRIVERS_NANDFLASH", + "NO_TIMEOUT", "CONFIG_UART_BAUD_RATE_DIV_8", 'SW_UART_DEBUG', 'LARGE_BUFFER', + 'FT_SINGLE_UART' + ], 'ram_component': ['arch_port', 'hal_l2ram', 'sec_boot', 'libboundscheck', 'dfx_exception', 'error_code', 'psram', 'osal', 'cmn_header', 'boot_ulp', 'boot_nandflash', 'boot_emmc'], 'ram_component_set': ['pinctrl'], diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h index f1a7063ba..4695666f4 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h @@ -11,6 +11,7 @@ #include "gpio_porting.h" #include "platform_types.h" + /** * @addtogroup connectivity_config_boards * @{ @@ -46,72 +47,69 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_OPI, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_EGPIO24 { HAL_PIO_FUNC_OPI, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_EGPIO25 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO0 sdio - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO2 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO3 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO4 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO5 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO0 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO1 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO2 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO3 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO4 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO5 NC #if (defined CFG_DRIVERS_NANDFLASH) - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_HGPIO6 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_HGPIO7 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_HGPIO8 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_HGPIO9 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO10 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO11 cs0 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO12 cs1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO13 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO14 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO15 clk + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO6 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO7 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO8 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO9 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO10 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO11 cs0 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO12 cs1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO13 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO14 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO15 clk #else { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO6 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO7 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO8 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO9 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO10 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO10 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO11 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO12 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO13 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO14 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO12 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO13 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO14 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO15 emmc clk #endif - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO0 - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO1 - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO2 - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO3 + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO0 NC + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO1 NC + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO2 NC + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO3 NC -#if (defined BRANDY_PRODUCT_EVB4) - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO4 -#else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO4 -#endif +// #if (defined BRANDY_PRODUCT_EVB4) + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO4 NC +// #else + // { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO4 NC +// #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO5 - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO6 - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO7 -#if (defined BRANDY_PRODUCT_EVB4) - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO8 -#else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO8 E0B2 VCI_EN -#endif - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO9 - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO10 - { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO11 evb2 dsp i2c smartpa - { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO12 - { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO13 touch i2c - { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO14 - { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO15 - { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO16 - { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO17 evb4 dsp i2c pa - { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO18 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO5 NC + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO6 SPI1 DI + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO7 SPI1 DO + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO8 SPI1 CLK + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO9 SPI1 CS0 + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO10 SPI1 CS1 NC + + { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO11 i2c0 SCL NC + { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO12 I2C0 SDA + { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO13 I2C1 SCL touch i2c + { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO14 I2C1 SDA + { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO15 I2C2 SCL Sensor 6�� ָ���� ���� + { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO16 I2C2 SDA Sensor + { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO17 i2c3 SCL smart pa\ Ԥ��������� \��ȫоƬ + { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO18 I2C3 SDA { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO19 uart1 tx { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO20 uart1 rx - { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO21 - { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO22 - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO23 - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO24 - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO25 - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO26 + { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO21 uart1 rts + { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO22 uart1 cts + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO23 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO24 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO25 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO26 NC #if (defined QSPI_DISPLAY) { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO27 { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO28 @@ -131,67 +129,80 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_UART_HS_UART, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO34 huart rx { HAL_PIO_FUNC_UART_HS_UART, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO35 { HAL_PIO_FUNC_UART_HS_UART, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO36 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO37 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO38 +#if 0 + { HAL_PIO_FUNC_UART2_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO37 uart tx + { HAL_PIO_FUNC_UART2_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO38 uart rx +#else + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO37 uart tx NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO38 uart rx NC +#endif + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L0 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L0 { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L1 i2s1 { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L2 { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L3 { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L4 + { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L5 -#if (defined BRANDY_PRODUCT_EVB4) - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L6 E0B4 VCI_EN -#else { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L6 i2s0 -#endif { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L7 { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L8 + #if (defined FT_BT_UART) { HAL_PIO_FUNC_UART2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L9 uart2 txd { HAL_PIO_FUNC_UART2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L10 uart2 rxd #else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L9 dsp uart - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L10 dsp uart + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L9 dsp uart TP35 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L10 dsp uart TP36 #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L11 a+g int1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L12 a+g int2 - { HAL_PIO_FUNC_I2S2_M5, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L13 i2s2 - { HAL_PIO_FUNC_I2S2_M5, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L14 - { HAL_PIO_FUNC_I2S2_M5, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L15 - { HAL_PIO_FUNC_I2S2_M5, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L16 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L17 dsp i2c - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L18 dsp i2c - { HAL_PIO_FUNC_BT_FREQ, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L19 - { HAL_PIO_FUNC_BT_STATUS, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L20 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L21 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L11 G_INT1 + + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L12 i2c data HX3507_SDIO + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L13 i2c CLK HX3507_SCLK + + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L14 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L15 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L16 NC + + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L17 HX3507_INT not use + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_L18 VDDEN //��ʱ���ã�����VDDIO Ĭ�Ͽ��� EXt V3.0 EXt V1.8 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_L19 G_INT2 //��ʱ���� + + + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L20 0.2C_CHRG + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L21 NTC_VDD_ON ���ʹ� NTC������Դ #ifdef QSPI_DISPLAY { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L22 QSPI TE #else { HAL_PIO_FUNC_TE, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L22 MIPI TE #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L23 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L24 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L25 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L26 emmc reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L27 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L28 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L29 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L30 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L31 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L32 - - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R0 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R3 lcd reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_R4 tp reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 als int - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R8 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R9 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R10 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L23 CAT_1_PWR_ON ����CAT_1�����ţ����߿��� CAT1��Դ ������Ч + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L24 LCM_EN + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L25 //////////// audio pa reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L26 ���ʸ�λ PPG reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L27 LCM reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L28 CAT_1��λ CAT1_RESET_N ������Ч + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L29 charge done info ����Ƿ������ + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L30 KP_MKIN1 ���� CAT1 ����� + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L31 KP_MKOUIT1 ���� ���� ,���� + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L32 NC + + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R0 PRG_LED_POWER ON ���ʵȵ�Դ���ƽ� + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R1 SE_REST ��ȫоƬ��λ���ѽ� +// #if VIB_USE_PWM + // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM ������ƽ� ����Ԥ������������λ�� + // { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM ������ƽ� ����Ԥ������������λ�� +// #else + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM ������ƽ� ����Ԥ������������λ�� +// #endif + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R3 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_R4 tp reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT �����ж� + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 GYRO_INT2 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R8 GYRO_INT1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R9 BAT_CHARGE_OFF �ص���� �¶ȸߵ�ʱ�� + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R10 Key2 ///////////////////HAL_PIO_IE_ENBALE input enable #if CORE == APPS { HAL_PIO_FUNC_INVALID, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // ULP_GPIO0 mode not config @@ -214,17 +225,70 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { */ /** * @brief Global evb gpio functions. + * + * + * typedef struct { + pin_t gpio; + hal_gpio_direction_t direction; + hal_gpio_level_t level; + uint32_t triger; + hal_gpio_callback_t callback; +} hal_gpio_config_t; */ -const hal_gpio_config_t g_gpio_function_config[] = { - - // S_AGPIO_L17 - { - S_AGPIO_L17, - HAL_GPIO_DIRECTION_OUTPUT, - HAL_GPIO_LEVEL_HIGH, - 0, - NULL - }, + + +//Ĭ�Ͽ���Cat1 Ȼ���ٸ������þ����Ƿ�ر�. +//Ĭ�ϲ����� ppg checkidʧ�ܣ�ԭ��δ֪����ʱ��������cat1 +#define DEFAULT_POWERON_CAT1 0 + +//��Ҫ����Ĭ������ģ��Լ���Ҫ����Ĭ�������жϺ����ġ� +const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { + +#if DEFAULT_POWERON_CAT1 + // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on + { S_AGPIO_L23, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, + // S_AGPIO_L28 Cat1 reset ---- low reset + { S_AGPIO_L28, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, +#else + // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on + { S_AGPIO_L23, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // S_AGPIO_L28 Cat1 reset ---- low reset + { S_AGPIO_L28, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, +#endif + // S_AGPIO_L17 HX3507_INT + // { S_AGPIO_L17, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // S_AGPIO_L12 SDIO_BT + { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // S_AGPIO_L13 SCLK_BT + { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + + // S_AGPIO_L26 ���ʸ�λ PPG reset + { S_AGPIO_L26, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // S_AGPIO_R0 PRG_LED_POWER ON ���ʵȵ�Դ���ƽ� + { S_AGPIO_R0, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + + //S_AGPIO_L21 NTC_VDD_ON ���ʹ� NTC������Դ ,Ĭ�Ϲر� + { S_AGPIO_L21, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, +#if 1 //Ĭ��������� +// #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable +// #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c �͵������ + { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, +#else + { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, +#endif + +//Ĭ�Ϲر����� + { S_AGPIO_R2, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, +//Ĭ�Ͽ��� EXT LDO V3.0 V1.8 + { S_AGPIO_L18, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, + + + /**S_AGPIO_R1 GPO alipayĬ��resetpin*/ + { S_AGPIO_R1, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, + /**S_AGPIO_L32 GPO gps reset*/ + // { S_AGPIO_L32, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, }; /** diff --git a/code/sdk/drivers/boards/brandy_evb/product/product_evb4_standard.h b/code/sdk/drivers/boards/brandy_evb/product/product_evb4_standard.h index b0f51d579..2fcc808c8 100644 --- a/code/sdk/drivers/boards/brandy_evb/product/product_evb4_standard.h +++ b/code/sdk/drivers/boards/brandy_evb/product/product_evb4_standard.h @@ -104,8 +104,8 @@ #define RESOLUTION_WIDTH 368 #define RESOLUTION_HEIGHT 448 #else -#define RESOLUTION_WIDTH 454 -#define RESOLUTION_HEIGHT 454 +#define RESOLUTION_WIDTH 466//454 +#define RESOLUTION_HEIGHT 466//454 #endif /********************Other module board config********************/ @@ -156,7 +156,7 @@ #define BUILTIN_AI_PCM_ATTR_FRAME_PER_SEC 100 // 每秒帧数 // 音频内置输出设备 -#define BUILTIN_SND_OUT_PORT 0x12 // 参考 soc_uapi_sound.h 中 UAPI_SND_OUT_PORT_I2S2 枚举 +#define BUILTIN_SND_OUT_PORT 0x10 // 参考 soc_uapi_sound.h 中 UAPI_SND_OUT_PORT_I2S0 枚举 #define BUILTIN_SND_OUT_PORT_NUM 1 // 端口个数 #define BUILTIN_SND_OUT_AUDIO_CH 2 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 #define BUILTIN_SND_OUT_BIT_DEPTH 16 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_BIT_DEPTH_16 枚举 @@ -172,32 +172,32 @@ // 音频外挂输入设备 #define EXTERNAL_AI_PORT 1 // 参考 soc_uapi_ai.h 中 UAPI_AI_PORT_I2S1 枚举 -#define EXTERNAL_AI_I2S_ATTR_MASTER 1 // 1:主设备,0:从设备 -#define EXTERNAL_AI_I2S_ATTR_I2S_MODE 0 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_STD_MODE 枚举 -#define EXTERNAL_AI_I2S_ATTR_MCLK 4 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_MCLK_768_FS 枚举 -#define EXTERNAL_AI_I2S_ATTR_BCLK 24 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_BCLK_24_DIV 枚举 +#define EXTERNAL_AI_I2S_ATTR_MASTER 0 // 1:主设备,0:从设备 +#define EXTERNAL_AI_I2S_ATTR_I2S_MODE 1 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_PCM_MODE 枚举 +#define EXTERNAL_AI_I2S_ATTR_MCLK 6 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_MCLK_1536_FS 枚举 +#define EXTERNAL_AI_I2S_ATTR_BCLK 48 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_BCLK_48_DIV 枚举 #define EXTERNAL_AI_I2S_ATTR_BIT_DEPTH 16 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_BIT_DEPTH_16 枚举 #define EXTERNAL_AI_I2S_ATTR_AUDIO_CH 2 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 #define EXTERNAL_AI_I2S_ATTR_SAMPLE_RISE_EDGE 1 // 参考 soc_uapi_audio.h 中 pcm_sample_rise_edge 成员 #define EXTERNAL_AI_I2S_ATTR_PCM_DELAY_CYCLE 1 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_PCM_1_DELAY 枚举 -#define EXTERNAL_AI_PCM_ATTR_CHANNELS 2 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 +#define EXTERNAL_AI_PCM_ATTR_CHANNELS 1 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 #define EXTERNAL_AI_PCM_ATTR_BIT_DEPTH 16 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_BIT_DEPTH_16 枚举 -#define EXTERNAL_AI_PCM_ATTR_SAMPLE_RATE 16000 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_SAMPLE_RATE_16K 枚举 -#define EXTERNAL_AI_PCM_ATTR_FRAME_PER_SEC 100 // 每秒帧数 +#define EXTERNAL_AI_PCM_ATTR_SAMPLE_RATE 8000 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_SAMPLE_RATE_16K 枚举 +#define EXTERNAL_AI_PCM_ATTR_FRAME_PER_SEC 50 // 每秒帧数 , EG810 pcm 20ms 一帧 // 音频外挂输出设备 #define EXTERNAL_SND_OUT_PORT 0x11 // 参考 soc_uapi_sound.h 中 UAPI_SND_OUT_PORT_I2S1 枚举 -#define EXTERNAL_SND_OUT_AUDIO_CHANNEL 2 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 +#define EXTERNAL_SND_OUT_AUDIO_CHANNEL 1 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 #define EXTERNAL_SND_OUT_AUDIO_BIT_DEPTH 16 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_BIT_DEPTH_16 枚举 -#define EXTERNAL_SND_OUT_AUDIO_SAMPLE_RATE 16000 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_SAMPLE_RATE_16K 枚举 +#define EXTERNAL_SND_OUT_AUDIO_SAMPLE_RATE 8000 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_SAMPLE_RATE_16K 枚举 #define EXTERNAL_SND_OUT_PORT_NUM 1 // 端口个数 #define EXTERNAL_SND_OUT_I2S_ATTR_BIT_DEPTH 16 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_BIT_DEPTH_16 枚举 #define EXTERNAL_SND_OUT_I2S_ATTR_CHANNEL 2 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_CHANNEL_2 枚举 -#define EXTERNAL_SND_OUT_I2S_ATTR_I2S_MODE 0 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_STD_MODE 枚举 -#define EXTERNAL_SND_OUT_I2S_ATTR_MCLK 4 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_MCLK_768_FS 枚举 -#define EXTERNAL_SND_OUT_I2S_ATTR_MASTER 1 // 1:主设备,0:从设备 +#define EXTERNAL_SND_OUT_I2S_ATTR_I2S_MODE 1 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_PCM_MODE 枚举 +#define EXTERNAL_SND_OUT_I2S_ATTR_MCLK 6 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_MCLK_1536_FS 枚举 12.288M /16k = +#define EXTERNAL_SND_OUT_I2S_ATTR_MASTER 0 // 1:主设备,0:从设备 #define EXTERNAL_SND_OUT_I2S_ATTR_SAMPLE_RISE_EDGE 1 // 参考 soc_uapi_audio.h 中 pcm_sample_rise_edge 成员 -#define EXTERNAL_SND_OUT_I2S_ATTR_BCLK 24 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_BCLK_24_DIV 枚举 +#define EXTERNAL_SND_OUT_I2S_ATTR_BCLK 48 // 参考 soc_uapi_audio.h 中 UAPI_AUDIO_I2S_BCLK_48_DIV 枚举 12.288M / 256k = 48 // Sleep option #define CONFIG_PM_TICKLESS_EN YES @@ -207,12 +207,12 @@ #define CONFIG_PM_SLEEP_INT_EN NO // Double-click the key -#define CONFIG_SUPPORT_BUTTON_DOUBLE_CLICK NO +#define CONFIG_SUPPORT_BUTTON_DOUBLE_CLICK YES // LCD VCI_EN -#define VCI_LCD_GPIO S_AGPIO_L6 +#define VCI_LCD_GPIO S_AGPIO_L24 #define DISPLAY_TE_GPIO S_AGPIO_L22 -#define RESET_LCD_GPIO S_AGPIO_R3 +#define RESET_LCD_GPIO S_AGPIO_L27 // TP CONFIG #define ZTW523_I2C_BUS I2C_BUS_1 @@ -222,6 +222,10 @@ #define TMA525B_INT_GPIO S_AGPIO_R5 #define TMA525B_RESET_GPIO S_AGPIO_R4 +#define FT6X46_I2C_BUS I2C_BUS_1 +#define FT6X46_INT_GPIO S_AGPIO_R5 +#define FT6X46_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 枚举 diff --git a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c index cd40a6be2..afca0b40f 100644 --- a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c +++ b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c @@ -56,6 +56,12 @@ #define UARTRESET (M_CTL_RB_BASE + 0x0168) #define UARTBUS0 0x1 #define UARTBUS1 0x0 + +/** + * CUSTOM_UART_RATE = 500000 可以看蓝牙日志 + * 2000000 可以加快下载文件速度 +*/ +#define CUSTOM_UART_RATE 500000 typedef struct { pin_mode_t tx_pin_mode; pin_mode_t rx_pin_mode; @@ -116,7 +122,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { (osal_irq_handler)irq_uart0_handler, NULL, { - .baud_rate = 115200, + .baud_rate = CUSTOM_UART_RATE, .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, .stop_bits = UART_STOP_BIT_1, @@ -144,7 +150,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { (osal_irq_handler)irq_uart1_handler, NULL, { - .baud_rate = 115200, + .baud_rate = CUSTOM_UART_RATE, .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, .stop_bits = UART_STOP_BIT_1, @@ -181,7 +187,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { NULL, #endif { - .baud_rate = 115200, + .baud_rate = CUSTOM_UART_RATE, .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, .stop_bits = UART_STOP_BIT_1, @@ -223,7 +229,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { log_factory_at_callback, #endif { - .baud_rate = 500000, + .baud_rate = CUSTOM_UART_RATE, .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, .stop_bits = UART_STOP_BIT_1, @@ -242,7 +248,9 @@ static uart_recovery_regs_t g_uart_recovery_reg[UART_BUS_MAX_NUMBER] = { 0 }; #ifdef FT_SINGLE_UART void log_factory_at_callback(const void *buffer, uint16_t length, bool remaining) { +#if SYS_DEBUG_MODE_ENABLE == YES log_uart_rx_callback(buffer, length, remaining); +#endif if (zdiag_is_enable() == false) { #ifdef SUPPORT_AT_CMD at_cmd_msg_receive_handler((uint8_t *)buffer, length); @@ -302,7 +310,9 @@ void irq_uart1_handler(void) static void at_cmd_uart_rx_callback(const void *buf, uint16_t buf_len, bool remaining) { unused(remaining); + #ifndef FT_SINGLE_UART at_cmd_msg_receive_handler((uint8_t *)buf, buf_len); + #endif hal_uart_clear_pending(SW_DEBUG_UART_BUS); } #endif diff --git a/code/sdk/drivers/drivers/driver/lcd/lcd_config.c b/code/sdk/drivers/drivers/driver/lcd/lcd_config.c index 54950d78a..2762a22a8 100644 --- a/code/sdk/drivers/drivers/driver/lcd/lcd_config.c +++ b/code/sdk/drivers/drivers/driver/lcd/lcd_config.c @@ -9,11 +9,30 @@ #include "common_def.h" #include "lcd_config.h" +#define LCD_EDO_466X466_SCREEN_ID 0x1133 #define LCD_EDO_454X454_SCREEN_ID 0xf00 #define LCD_BOE_454X454_SCREEN_ID 0x500 #define LCD_SH_240X296_SCREEN_ID 0x101 #define LCD_BOE_194X368_SCREEN_ID 0x4a00 +const combo_dev_cfg_t g_panel_466x466_60_config = { + .devno = 0, + .lane_id = {0, -1}, + .out_mode = OUT_MODE_DSI_CMD, + .out_format = OUT_FORMAT_RGB_24BIT, + .sync_info = { + .hsa_pixels = 10, // hsa 10 pixels + .hbp_pixels = 10, // hbp 10 pixels + .hact_pixels = 466, // hact 466 pixels + .hfp_pixels = 10, // hfp 10 pixels + .vsa_lines = 4, // vsa 4 lines + .vbp_lines = 12, // vbp 12 lines + .vact_lines = 466, // vact 466 lines + .vfp_lines = 10, // vfp 10 lines + }, + .phy_data_rate = 480, // 480Mbps + .pixel_clk = 20000, // 20000KHz +}; const combo_dev_cfg_t g_panel_454x454_60_config = { .devno = 0, .lane_id = {0, -1}, @@ -67,6 +86,14 @@ const lcd_cmd_sequ g_common_cmd_display_off[] = { {1, 1, {0x10}, 120}, /* sleep in */ }; +/* display off sequence for common lcd */ +const lcd_cmd_sequ g_common_466x466_cmd_display_off[] = { + {1, 2, {0xfe, 0x00}, 0}, /* select default cmd page */ + {1, 1, {0x28}, 0}, /* display off */ + {1, 1, {0x10}, 120}, /* sleep in */ + {1, 2, {0x4f, 0x01}, 0}, /* ½ødeepstandby ״̬ */ +}; + /* sleep in sequence for common lcd */ const lcd_cmd_sequ g_common_cmd_sleep_in[] = { {1, 2, {0xfe, 0x00}, 0}, /* select default cmd page */ @@ -110,6 +137,20 @@ lcd_cmd_sequ g_common_cmd_brightness[] = { {1, 2, {0xfe, 0x00}, 0}, {1, 2, {0x51, 0xff}, 0}, }; +const lcd_cmd_sequ g_edo_466x466_screen_init_on[] = { + {1, 2, {0xfe, 0x00}, 0}, + {1, 2, {0x3a, 0x77}, 0}, + {1, 2, {0x35, 0x00}, 0}, + {1, 2, {0x53, 0x20}, 0}, + // {1, 2, {0x51, 0xff}, 0}, + {1, 2, {0x63, 0xff}, 0}, + {1, 5, {0x2A, 0x00, 0x06, 0x01, 0xd7}, 0}, + {1, 5, {0x2B, 0x00, 0x00, 0x01, 0xd1}, 0}, + {1, 3, {0x44, 0x01, 0xc5}, 0}, + {1, 1, {0x11}, 120}, + {1, 1, {0x29}, 0}, +}; + /* init sequence for EDO 454*454 lcd */ const lcd_cmd_sequ g_edo_454x454_screen_init_on[] = { @@ -193,6 +234,11 @@ const lcd_cmds_sequ g_display_off_cmds = { .cmd_cnt = array_size(g_common_cmd_display_off), }; +const lcd_cmds_sequ g_466x466_display_off_cmds = { + .cmd = g_common_466x466_cmd_display_off, + .cmd_cnt = array_size(g_common_466x466_cmd_display_off), +}; + const lcd_cmds_sequ g_idle_in_cmds = { .cmd = g_common_cmd_idle_in, .cmd_cnt = array_size(g_common_cmd_idle_in), @@ -218,6 +264,11 @@ const lcd_cmds_sequ g_brightness_cmds = { .cmd_cnt = array_size(g_common_cmd_brightness), }; +const lcd_cmds_sequ g_edo_466x466_screen_init_on_cmds = { + .cmd = g_edo_466x466_screen_init_on, + .cmd_cnt = array_size(g_edo_466x466_screen_init_on), +}; + const lcd_cmds_sequ g_edo_454x454_screen_init_on_cmds = { .cmd = g_edo_454x454_screen_init_on, .cmd_cnt = array_size(g_edo_454x454_screen_init_on), @@ -249,6 +300,25 @@ const lcd_cmds_sequ g_sleep_out_cmds = { }; const lcd_drv_cfg g_lcd_driver_ops[] = { + { + .bus_type = BUS_DISPLAY_MIPI, + .bus_cfg = &g_panel_466x466_60_config, + .x_start = 0x6, + .y_start = 0, + .fps = 60, + .lcd_id = LCD_EDO_466X466_SCREEN_ID, + .display_on_cmds = &g_edo_466x466_screen_init_on_cmds, + .display_off_cmds = &g_466x466_display_off_cmds, + .enter_idle_cmds = &g_idle_in_cmds, + .exit_idle_cmds = &g_idle_out_cmds, + .te_on_cmds = &g_te_on_cmds, + .te_off_cmds = &g_te_off_cmds, + .set_brightnes_cmds = &g_brightness_cmds, + .sleep_in_cmds = &g_sleep_in_cmds, + .sleep_out_cmds = &g_sleep_out_cmds, + .lcd_id_info.reg_addr = 0x04, + .lcd_id_info.read_len = 3, + }, { .bus_type = BUS_DISPLAY_MIPI, .bus_cfg = &g_panel_454x454_60_config, diff --git a/code/sdk/drivers/drivers/driver/lcd/lcd_private.c b/code/sdk/drivers/drivers/driver/lcd/lcd_private.c index 039f45c48..f6f4747da 100644 --- a/code/sdk/drivers/drivers/driver/lcd/lcd_private.c +++ b/code/sdk/drivers/drivers/driver/lcd/lcd_private.c @@ -12,7 +12,7 @@ #include "gpio.h" #include "pinctrl_porting.h" #include "product.h" - +#include "pinctrl.h" static void lcd_drv_power_on(void) { #ifndef QSPI_DISPLAY @@ -27,16 +27,35 @@ static void lcd_drv_power_on(void) uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_HIGH); uapi_tcxo_delay_ms(10); /* delay 10 ms */ } - +#define USE_OUTPUT_CTL 1 static void lcd_drv_power_off(void) { +#if USE_OUTPUT_CTL + //uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_OUTPUT); + //uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_LOW); + #ifndef QSPI_DISPLAY + uapi_gpio_set_dir(VCI_LCD_GPIO, GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(VCI_LCD_GPIO, GPIO_LEVEL_LOW); + #endif + uapi_tcxo_delay_ms(10); /* delay 10 ms */ + int resetvalue = uapi_gpio_get_output_val(RESET_LCD_GPIO); + int lcd_envalue = uapi_gpio_get_output_val(VCI_LCD_GPIO); + printf("Output RESET_LCD_GPIO %d , VCI_LCD_GPIO %d\r\n",resetvalue,lcd_envalue); +#else uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_LOW); - uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_INPUT); -#ifndef QSPI_DISPLAY + uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_INPUT); //¨¦¨¨??3¨¦Input¡ê?¨º??a¨¢??a????¦Ì? ¡ê?¡ê? + uapi_pin_set_pull(RESET_LCD_GPIO, PIN_PULL_DOWN); + #ifndef QSPI_DISPLAY uapi_gpio_set_val(VCI_LCD_GPIO, GPIO_LEVEL_LOW); uapi_gpio_set_dir(VCI_LCD_GPIO, GPIO_DIRECTION_INPUT); -#endif + uapi_pin_set_pull(VCI_LCD_GPIO, PIN_PULL_DOWN); + #endif uapi_tcxo_delay_ms(10); /* delay 10 ms */ + int resetvalue = uapi_gpio_get_val(RESET_LCD_GPIO); + int lcd_envalue = uapi_gpio_get_val(VCI_LCD_GPIO); + printf("Input RESET_LCD_GPIO %d , VCI_LCD_GPIO %d\r\n",resetvalue,lcd_envalue); +#endif + } static lcd_drv_private g_lcd_private_api = { diff --git a/code/sdk/drivers/drivers/driver/lcd/soc_lcd_api.c b/code/sdk/drivers/drivers/driver/lcd/soc_lcd_api.c index b535f5555..56f8542af 100644 --- a/code/sdk/drivers/drivers/driver/lcd/soc_lcd_api.c +++ b/code/sdk/drivers/drivers/driver/lcd/soc_lcd_api.c @@ -173,7 +173,8 @@ static ext_errno lcd_get_ops(void) } } - g_lcd_info.brightness = DEFAULT_BRIGHTNESS; + if (g_lcd_info.brightness == 0) + g_lcd_info.brightness = DEFAULT_BRIGHTNESS; return EXT_ERR_SUCCESS; fail: diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h index 8a37759b0..586cfa516 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h @@ -12,7 +12,7 @@ #define DS35X1G_BYTES_PER_OOB 64 #define DS35X1G_PAGES_PER_BLOCK 64 #define DS35X1G_TOTAL_BLOCKS 1024 -#define DS35X1G_CHIP_ID 0xE521 +#define DS35X1G_CHIP_ID 0x6161 #define DS35X1G_OOB_TOTAL_LEN 4 #define DS35X1G_OOB_PER_SIZE 8 #define DS35X1G_OOB_1_OFFSET 0 diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c index 7075e44ca..d2412af54 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c @@ -248,5 +248,5 @@ int nandflash_filesystem_init(void) void nandflash_qspi_resume(void) { - nand_driver_init(SPEED_HIGH); + nand_driver_init(SPEED_MID); } diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_ds35x1g.c b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_ds35x1g.c index d87b86b72..49347e846 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_ds35x1g.c +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_ds35x1g.c @@ -42,7 +42,7 @@ static uint32_t mc_ds35x1g_read_page(uint32_t nand_page, uint8_t *data, uint32_t static uint32_t mc_ds35x1g_init(void) { - nand_driver_init(SPEED_HIGH); + nand_driver_init(SPEED_MID); nand_driver_sem_init(); PRINT("ds35x1g_init \r\n"); uint32_t ret; diff --git a/code/sdk/drivers/drivers/driver/touch/CMakeLists.txt b/code/sdk/drivers/drivers/driver/touch/CMakeLists.txt index 6782d9cc1..6971096df 100644 --- a/code/sdk/drivers/drivers/driver/touch/CMakeLists.txt +++ b/code/sdk/drivers/drivers/driver/touch/CMakeLists.txt @@ -21,6 +21,12 @@ set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/ztw523_touch/ztw523_drv1.c ${CMAKE_CURRENT_SOURCE_DIR}/ztw523_touch/ztw523_touch1.c ) +elseif("TPTYPE_FT6X46" IN_LIST DEFINES) +set(SOURCES ${SOURCES} + ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch/ft6x46_ctrl.c + ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch/ft6x46_drv1.c + ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_touch/ft6x46_touch1.c +) else() set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/ztw523_touch/ztw523_ctrl.c @@ -41,6 +47,12 @@ set(PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/ztw523_touch ${ROOT_DIR}/middleware/services/gui/hal/input/include ) +elseif("TPTYPE_FT6X46" IN_LIST DEFINES) +set(PUBLIC_HEADER + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/ft6x46_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/ft6x46_touch/ft6x46_ctrl.c b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.c new file mode 100644 index 000000000..f6a42fdb1 --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.c @@ -0,0 +1,397 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ztw523 touch driver. + * Author: @CompanyNameTag + * Create: 2022-04-12 + */ + +#include "ft6x46_ctrl.h" +#include "securec.h" +#include "cmsis_os2.h" +#include "soc_osal.h" +#include "common_def.h" +#include "pinctrl.h" +#include "chip_io.h" +#include "tcxo.h" +#include "time.h" +#include "i2c.h" +#include "gpio.h" +#include "hal_gpio.h" +#include "hal_i2c.h" +#include "touch_screen_def.h" + +bool g_host_dev_init_flag = TD_FALSE; +ft6x46_ctrl_attr g_ctrl_attr; +touch_callback g_ft6x46_callback = NULL; + +static uint8_t g_tp_recv_buf[FT6X46_INPUT_SIZE] = {0}; + +static void ft6x46_gpio_isr_handle(pin_t pin, uintptr_t param) +{ + unused(pin); + unused(param); + if (g_ft6x46_callback != NULL) { + g_ft6x46_callback(); + } +} + +ext_errno ft6x46_register_handle(const ft6x46_ctrl_ops *peri_data, touch_callback func) +{ + unused(peri_data); + ext_errno ret; + + + //tp_err("ft6x46_register_handle*****************888888888"); + g_ft6x46_callback = func; + /* register int io interrupt handler */ + uapi_gpio_init(); + gpio_select_core(FT6X46_INT_GPIO, CORE); + uapi_gpio_set_dir(FT6X46_INT_GPIO, GPIO_DIRECTION_INPUT); + ret = uapi_gpio_register_isr_func(FT6X46_INT_GPIO, GPIO_INTERRUPT_FALLING_EDGE, ft6x46_gpio_isr_handle); + if (ret != 0) { + tp_err("ft6x46 int callback register fail! ret=0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_unregister_handle(const ft6x46_ctrl_ops *peri_data) +{ + unused(peri_data); + ext_errno ret; + + /* unregister interrupt handler */ + uapi_gpio_unregister_isr_func(FT6X46_INT_GPIO); + g_ft6x46_callback = NULL; + + return EXT_ERR_SUCCESS; +} + +static ext_errno tp_peripheral_init_status_check(void) +{ + if (g_host_dev_init_flag != TD_TRUE) { + return EXT_ERR_TP_DEV_INFO_NOT_REGISTER; + } + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_ctrl_attr_check(const ft6x46_ctrl_attr *device_attr) +{ + unused(device_attr); + return EXT_ERR_SUCCESS; +} + +static ext_errno tp_i2c_rd_wr_param_check(const uint8_t *data_buf, uint32_t data_len) +{ + unused(data_buf); + unused(data_len); + ext_errno ret = tp_peripheral_init_status_check(); + if (ret != EXT_ERR_SUCCESS) { + return ret; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno tp_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_len) +{ + errcode_t ret; + uint32_t retry; + i2c_data_t data; + + + ret = tp_i2c_rd_wr_param_check(data_buf, data_len); + if (ret != 0) { + tp_err("tp data read param invalid! ret=0x%x", ret); + return ret; + } + + if (memset_s(g_tp_recv_buf, data_len, 0, data_len) != EOK) { + tp_err("tp read buff set fail! ret=0x%x", ret); + return EXT_ERR_FAILURE; + } + + data.send_buf = ®_addr; + data.send_len = FT6X46_CMD_SEND_LEN; + data.receive_buf = g_tp_recv_buf; + data.receive_len = data_len; + + for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) { + ret = uapi_i2c_master_writeread(FT6X46_I2C_BUS, FT6X46_I2C_ADDR, &data); + if (ret == EXT_ERR_SUCCESS) { + break; + } + } + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp data read fail! ret=0x%x", ret); + return ret; + } + ret = (uint32_t)memcpy_s(data_buf, data_len, g_tp_recv_buf, data_len); + if (ret != EOK) { + tp_err("tp data buf content copy fail! ret=0x%x", ret); + return ret; + } + return EXT_ERR_SUCCESS; +} + + +ext_errno tp_ft6x46_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_len) +{ + errcode_t ret; + uint32_t retry; + i2c_data_t data; + //uint8_t tp_reg_addr[FT6X46_REG_BYTE_LEN]; + + ret = tp_i2c_rd_wr_param_check(data_buf, data_len); + if (ret != 0) { + tp_err("tp data read param invalid! ret=0x%x", ret); + return ret; + } + + memset_s(data_buf, data_len, 0, data_len); + //tp_reg_addr[FT6X46_I2C_SEND_INDEX0] = reg_addr & 0xff; + //tp_reg_addr[FT6X46_I2C_SEND_INDEX1] = (reg_addr >> OFFSET_8_BITS) & 0xff; + + data.send_buf = ®_addr; + data.send_len = sizeof(reg_addr); + data.receive_buf = data_buf; + data.receive_len = data_len; + + for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) { + ret = uapi_i2c_master_writeread(FT6X46_I2C_BUS, FT6X46_I2C_ADDR, &data); + if (ret == EXT_ERR_SUCCESS) { + break; + } + } + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp data read fail! ret=0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno tp_i2c_cmd_write(uint8_t cmd) +{ + errcode_t ret; + uint32_t retry; + i2c_data_t data; + //uint8_t tp_reg_addr[FT6X46_CMD_SEND_LEN]; + + ret = tp_peripheral_init_status_check(); + if (ret != 0) { + tp_err("host peripheral not init! ret=0x%x", ret); + return ret; + } + //tp_reg_addr[FT6X46_I2C_SEND_INDEX0] = cmd & 0xff; + //tp_reg_addr[FT6X46_I2C_SEND_INDEX1] = (cmd >> OFFSET_8_BITS) & 0xff; + + data.send_buf = &cmd; + data.send_len = FT6X46_CMD_SEND_LEN; + data.receive_buf = NULL; + data.receive_len = 0; + + for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) { + ret = uapi_i2c_master_write(FT6X46_I2C_BUS, FT6X46_I2C_ADDR, &data); + if (ret == EXT_ERR_SUCCESS) { + break; + } + } + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp data write fail! ret=0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno tp_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t data_len) +{ + errcode_t ret; + uint32_t retry; + i2c_data_t data; + uint8_t *write_data = NULL; + uint16_t send_len; + + ret = tp_i2c_rd_wr_param_check(data_buf, data_len); + if (ret != 0) { + tp_err("tp data write param invalid! ret=0x%x", ret); + return ret; + } + + send_len = data_len + sizeof(uint8_t); + + write_data = (uint8_t *)osal_kmalloc(send_len, OSAL_GFP_KERNEL); + if (write_data == NULL) { + tp_err("tp send buff malloc fail!"); + return EXT_ERR_MALLOC_FAILURE; + } + + write_data[FT6X46_I2C_SEND_INDEX0] = reg_addr; + ret = (uint32_t)memcpy_s(write_data + sizeof(uint8_t), send_len - sizeof(uint8_t), data_buf, data_len); + if (ret != EOK) { + tp_err("tp send_buf content copy fail! ret=0x%x", ret); + osal_kfree(write_data); + return ret; + } + + data.send_buf = write_data; + data.send_len = send_len; + data.receive_buf = NULL; + data.receive_len = 0; + + for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) { + ret = uapi_i2c_master_write(FT6X46_I2C_BUS, FT6X46_I2C_ADDR, &data); + if (ret == EXT_ERR_SUCCESS) { + break; + } + } + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp data write fail! ret=0x%x", ret); + osal_kfree(write_data); + return ret; + } + + osal_kfree(write_data); + return EXT_ERR_SUCCESS; +} + +ext_errno tp_ft6x46_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t data_len) +{ + errcode_t ret; + uint32_t retry; + i2c_data_t data; + uint8_t *write_data = NULL; + uint16_t send_len; + + ret = tp_i2c_rd_wr_param_check(data_buf, data_len); + if (ret != 0) { + tp_err("tp data write param invalid! ret=0x%x", ret); + return ret; + } + + send_len = data_len + sizeof(uint8_t); + + write_data = (uint8_t *)osal_kmalloc(send_len, OSAL_GFP_KERNEL); + if (write_data == NULL) { + tp_err("tp send buff malloc fail!"); + return EXT_ERR_MALLOC_FAILURE; + } + + write_data[FT6X46_I2C_SEND_INDEX0] = reg_addr; + ret = (uint32_t)memcpy_s(write_data + sizeof(uint8_t), send_len - sizeof(uint8_t), data_buf, data_len); + if (ret != EOK) { + tp_err("tp send_buf content copy fail! ret=0x%x", ret); + osal_kfree(write_data); + return ret; + } + + data.send_buf = write_data; + data.send_len = send_len; + data.receive_buf = NULL; + data.receive_len = 0; + + for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) { + ret = uapi_i2c_master_write(FT6X46_I2C_BUS, FT6X46_I2C_ADDR, &data); + if (ret == EXT_ERR_SUCCESS) { + break; + } + } + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp data write fail! ret=0x%x", ret); + osal_kfree(write_data); + return ret; + } + + osal_kfree(write_data); + return EXT_ERR_SUCCESS; +} + +ext_errno tp_ft6x46_i2c_data_write_reg(uint8_t addr, uint8_t val) +{ + return tp_ft6x46_i2c_data_write(addr, &val, 1); +} + + +ext_errno ft6x46_host_peripheral_init(ft6x46_ctrl_attr *attr) +{ + ext_errno ret; + + if (attr == NULL) { + tp_err("ft6x46 communication interface cfg is empty!"); + return EXT_ERR_FAILURE; + } + ret = ft6x46_ctrl_attr_check(attr); + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp invalid dev attr! ret=0x%x", ret); + return ret; + } + + ret = (ext_errno)memcpy_s(&(g_ctrl_attr), sizeof(ft6x46_ctrl_attr), attr, sizeof(ft6x46_ctrl_attr)); + if (ret != EOK) { + tp_err("tp attr content copy fail! ret=0x%x", ret); + return ret; + } + + /* init i2c */ + errcode_t result; + result = uapi_i2c_master_init(FT6X46_I2C_BUS, 400000, I2C_SPEED_MODE_FS); /* 400000: 400KHz */ + if (result != EXT_ERR_SUCCESS) { + tp_err("tp i2c init fail! ret=0x%x", result); + return EXT_ERR_SUCCESS; + } + + tp_print("TOUCH:i2c_id = %d i2c_speed = %d slave_addr = 0x%x \r\n", + g_ctrl_attr.i2c_id, g_ctrl_attr.i2c_speed, FT6X46_I2C_ADDR); + g_host_dev_init_flag = true; + + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_host_init_sample(void) +{ + ext_errno ret; + PRINT("**********ft6x46_host_init_sample**********\r\n"); + ret = ft6x46_host_peripheral_init(&g_ctrl_attr); + ret = ft6x46_init(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("tp host init fail! ret=0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_reset(void) +{ + uapi_gpio_set_dir(FT6X46_RESET_GPIO, GPIO_DIRECTION_OUTPUT); + /* Config Gpio For Reset Pin */ + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_HIGH); + /* reset high delay 20ms */ + osDelay(20); + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_LOW); + /* reset low delay 100ms */ + osDelay(100); + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_HIGH); + /* reset high delay 200ms */ + osDelay(200); + return EXT_ERR_SUCCESS; +} + +void ft6x46_resume_reset(void) +{ + uapi_gpio_set_dir(FT6X46_RESET_GPIO, GPIO_DIRECTION_OUTPUT); + /* drvdata is global variable point and no need to handle null */ + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_HIGH); + osDelay(1); + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_LOW); + /* delay 10ms */ + osDelay(10); + uapi_gpio_set_val(FT6X46_RESET_GPIO, GPIO_LEVEL_HIGH); + /* delay 100ms */ + osDelay(200); + uapi_gpio_set_dir(FT6X46_RESET_GPIO, GPIO_DIRECTION_INPUT); +} + diff --git a/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.h b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.h new file mode 100644 index 000000000..24ef8f419 --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_ctrl.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ztw523 touch driver. + * Author: @CompanyNameTag + * Create: 2022-04-12 + */ + +#ifndef FT6X46_CTRL_H +#define FT6X46_CTRL_H + +#include "stdio.h" +#include "debug_print.h" +#include "stdint.h" +#include "product.h" +#include "td_base.h" +#include "platform_core.h" +#include "ft6x46_touch1.h" + +/* host peripheral definitions */ + +//#define FT6X46_I2C_ADDR 0x20 +#define FT6X46_I2C_ADDR 0x38 +#define FT6X46_I2C_SPEED I2C_SPEED_MODE_SS +#define FT6X46_REG_BYTE_LEN 2 +#define OFFSET_8_BITS 8 +#define FT6X46_REG_WRITE_LEN 4 + +#define FT6X46_CMD_SEND_LEN 2 +// #define FT6X46_CMD_SEND_LEN 1 + +#define FT6X46_REG_DATA_LEN 2 +#define FT6X46_I2C_TIME_MAX 3 +#define FT6X46_INPUT_SIZE 156 + +#define FT6X46_I2C_SEND_INDEX0 0 +#define FT6X46_I2C_SEND_INDEX1 1 +#define FT6X46_I2C_SEND_INDEX2 2 +#define FT6X46_I2C_SEND_INDEX3 3 + + +#define FTS_REG_POWER_MODE 0xA5 + + +typedef struct { + uint32_t int_gpio; + uint32_t reset_gpio; + i2c_bus_t i2c_id; + uint32_t i2c_speed; +} ft6x46_ctrl_attr; + +typedef ext_errno (*ft6x46_bus_init)(ft6x46_ctrl_attr *attr); + +typedef struct { + ft6x46_ctrl_attr attr; + ft6x46_bus_init bus_init; +} ft6x46_ctrl_ops; + +ext_errno ft6x46_host_peripheral_init(ft6x46_ctrl_attr *attr); +ext_errno ft6x46_register_handle(const ft6x46_ctrl_ops *peri_data, touch_callback func); +ext_errno ft6x46_unregister_handle(const ft6x46_ctrl_ops *peri_data); +ext_errno ft6x46_reset(void); +void ft6x46_resume_reset(void); +void ft6x46_delay(uint32_t ms); + +ext_errno tp_ft6x46_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_len); +ext_errno tp_ft6x46_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t data_len); +ext_errno tp_ft6x46_i2c_data_write_reg(uint8_t addr, uint8_t val); + +#endif diff --git a/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.c b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.c new file mode 100644 index 000000000..928c58eac --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ztw523 touch driver. + * Author: @CompanyNameTag + * Create: 2022-04-12 + */ + +#include "ft6x46_drv1.h" +#include "touch_screen_def.h" +#include "ft6x46_ctrl.h" +#include "i2c.h" +#include "debug_print.h" +#include "hal_i2c.h" + +static ext_errno ft6x46_drv_init(ft6x46_ctrl_ops *config) +{ + ext_errno ret; + ft6x46_ctrl_ops *ops = config; + + tp_err("ft6x46_drv_init!11111"); + + if (ops == NULL) { + tp_err("peripheral ops is empty!"); + return EXT_ERR_FAILURE; + } + + if (ops->bus_init == NULL) { + tp_err("peripheral bus_init func is empty!"); + return EXT_ERR_FAILURE; + } + + ret = ops->bus_init(&(ops->attr)); + if (ret != EXT_ERR_SUCCESS) { + tp_err("ZTW523 bus_init fail! ret = 0x%x", ret); + return ret; + } + + ret = ft6x46_init(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("ZTW523 init fail! ret = 0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_drv_deinit(void) +{ + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_drv_get_info(uint8_t *data, uint8_t data_len) +{ + return ft6x46_irq_callback(data, data_len); +} + +static ext_errno ft6x46_drv_suspend(void) +{ + //return ft6x46_set_power_mode(MC_TP_SUSPEND_SCAN); + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_drv_resume(void) +{ + //return ft6x46_set_power_mode(MC_TP_RESUME_SCAN); + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_drv_sleep(void) +{ + //return ft6x46_set_power_mode(MC_TP_SLEEP_WORK_MODE); + return EXT_ERR_SUCCESS; +} + +touch_peripheral_api g_ft6x46_api = { + .touch_init = ft6x46_drv_init, + .touch_deinit = ft6x46_drv_deinit, + .touch_get_tpinfo = ft6x46_drv_get_info, + .touch_suspend = ft6x46_drv_suspend, + .touch_resume = ft6x46_drv_resume, + .touch_sleep = ft6x46_drv_sleep, + .touch_bus_init = ft6x46_host_peripheral_init, + .register_callback = ft6x46_register_handle, + .unregister_callback = ft6x46_unregister_handle, +}; + +ft6x46_ctrl_ops g_ft6x46_ctrl = { + .attr = { + .int_gpio = FT6X46_INT_GPIO, + .i2c_id = FT6X46_I2C_BUS, + .i2c_speed = I2C_SPEED_MODE_SS, + }, + .bus_init = (ft6x46_bus_init)ft6x46_host_peripheral_init, +}; + +void *touch_screen_get_api(void) +{ + return ((void *)&g_ft6x46_api); +} + +void *touch_screen_get_peri_attr(void) +{ + return ((void *)&g_ft6x46_ctrl); +} \ No newline at end of file diff --git a/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.h b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.h new file mode 100644 index 000000000..c26f3a4f0 --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_drv1.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ztw523 touch driver. + * Author: @CompanyNameTag + * Create: 2022-04-12 + */ + +#ifndef FT6X46_DRV1_H +#define FT6X46_DRV1_H + +void *touch_screen_get_api(void); +void *touch_screen_get_peri_attr(void); + +#endif \ No newline at end of file diff --git a/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.c b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.c new file mode 100644 index 000000000..85f2db5a9 --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.c @@ -0,0 +1,977 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ft6x46 touch driver. + * Author: @CompanyNameTag + * Create: 2021-05-29 + */ + +#include "ft6x46_touch1.h" +#include "time.h" +#include "soc_osal.h" +#include "osal_timer.h" +#include "osal_mutex.h" +#include "securec.h" +#include "ft6x46_ctrl.h" +#include "tcxo.h" +#include "cmsis_os2.h" +#include "common_def.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +ft6x46_drv_data g_ft6x46_drv = { + .chip_status = FT6X46_NOT_READY, + .ops_mux = {0}, + .int_mask = FT6X46_INT_MASK, + .work_status = FT6X46_WORK_INVALID, + .fw_upgrade_flag = TD_FALSE, + .gesture_wakeup = TD_FALSE, + .host_dev_init_flag = TD_FALSE, + .chip_info = FT6X46_DEVICE_INFO, + .p_void = NULL, +}; +static ext_errno ft6x46_config(void); +static void ft6x46_set_irq_mode(ft6x46_irq_status irq_status, uint16_t irq_mask) +{ + unused(irq_mask); + ext_errno ret; + uint16_t reg_write = 0; + + tp_print("TOUCH:set irq mode %d", irq_status); + + switch (irq_status) { + case FT6X46_IRQ_DISABLE: + /* Write Int Register */ + reg_write = FT6X46_INT_NONE; + // ret = tp_i2c_reg_write(FT6X46_INT_ENABLE_FLAG, reg_write); + // if (ret != EXT_ERR_SUCCESS) { + // tp_err("TOUCH:set irq mode disable 0x%x", ret); + // return; + // } + break; + + case FT6X46_IRQ_ENABLE: + /* Write Int Register */ + reg_write = FT6X46_INT_MASK; + // ret = tp_i2c_reg_write(FT6X46_INT_ENABLE_FLAG, reg_write); + // if (ret != EXT_ERR_SUCCESS) { + // tp_err("TOUCH:set irq mode enable 0x%x", ret); + // return; + // } + break; + + default: + tp_err("TOUCH:not support irq mode 0x%x", irq_status); + break; + } + + return; +} + +static ext_errno ft6x46_parse_gesture_input(void) +{ + ext_errno ret; + uint16_t gesture_val; + uint16_t reg_read; + uint16_t reg_write; + + reg_read = 0; + // ret = tp_i2c_data_read(FT6X46_GESTURE_WAKEUP_REG, (uint8_t *)®_read, FT6X46_DATA_LEN); + // if (ret != EXT_ERR_SUCCESS) { + // tp_err("TOUCH:parse gesture input read fail 0x%x", ret); + // return EXT_ERR_FAILURE; + // } + gesture_val = reg_read; + tp_print("TOUCH:parse gesture input ok 0x%x", reg_read); + + reg_write = 0; + // ret = tp_i2c_reg_write(FT6X46_GESTURE_WAKEUP_REG, reg_write); + // if (ret != EXT_ERR_SUCCESS) { + // tp_err("TOUCH:parse gesture input write fail 0x%x", ret); + // return EXT_ERR_FAILURE; + // } + + switch (gesture_val) { + case FT6X46_GESTURE_SIGNAL_CLICK: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_SHORT_CLICK; + break; + case FT6X46_GESTURE_DOUBLE_CLICK: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_DOUBLE_CLICK; + break; + case FT6X46_GESTURE_SLIDE_UP: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_SLIDE_UP; + break; + case FT6X46_GESTURE_SLIDE_DOWN: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_SLIDE_DOWN; + break; + default: + tp_err("TOUCH:gesture %d not Support", gesture_val); + return EXT_ERR_FAILURE; + } + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_parse_touch_input(void) +{ + static uint8_t touch_input[FT6X46_TOUCHINFO_LEN] = { 0 }; + uint16_t touch_status; + uint16_t x_axis; + uint16_t y_axis; + uint8_t sub_status; + + ext_errno ret = tp_i2c_data_read(FT6X46_POINT_STATUS_REG, touch_input, FT6X46_TOUCHINFO_LEN); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:touch input read error! ret = 0x%x", ret); + return EXT_ERR_FAILURE; + } + touch_status = ((uint16_t)touch_input[FT6X46_STATUSH_OFFSET] << FT6X46_REGDATA_SHIFT) | + (touch_input[FT6X46_STATUSL_OFFSET]); + if ((touch_status & FT6X46_PALM_MASK) != 0) { + g_ft6x46_drv.touch_msg.tp_event = MC_TP_COVER; + return EXT_ERR_SUCCESS; + } + + if (touch_status != 0) { + sub_status = touch_input[FT6X46_SUBSTATUS_OFFSET] & FT6X46_TOUCHINFO_MASK; + x_axis = ((uint16_t)touch_input[FT6X46_XH_OFFSET] << FT6X46_REGDATA_SHIFT) | (touch_input[FT6X46_XL_OFFSET]); + y_axis = ((uint16_t)touch_input[FT6X46_YH_OFFSET] << FT6X46_REGDATA_SHIFT) | (touch_input[FT6X46_YL_OFFSET]); + + switch (sub_status) { + case FT6X46_TOUCH_DOWN: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_PRESS; + break; + /* Need To Modify For UI */ + case FT6X46_TOUCH_EXIST: + case FT6X46_TOUCH_MOVE: + case FT6X46_TOUCH_NONE: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_MOVE; + break; + case FT6X46_TOUCH_UP: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_RELEASE; + break; + + default: + tp_err("TOUCH:parse input wrong status|substatus 0x%08x", + ((uint32_t)touch_status << FT6X46_SHIFT_16_BIT) | (uint32_t)sub_status); + return EXT_ERR_FAILURE; + } + g_ft6x46_drv.touch_msg.tp_event_info.x_axis[0] = x_axis; + g_ft6x46_drv.touch_msg.tp_event_info.y_axis[0] = y_axis; + g_ft6x46_drv.touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms(); + } else { + g_ft6x46_drv.touch_msg.tp_event = MC_TP_INVALID; + tp_print("TOUCH:parse wrong touchstatus %d", touch_status); + return EXT_ERR_SUCCESS; + } + + return EXT_ERR_SUCCESS; +} + + +/*Max point numbers of gesture trace*/ +#define MAX_POINTS_GESTURE_TRACE 6 +/*Length of gesture information*/ +#define MAX_LEN_GESTURE_INFO (MAX_POINTS_GESTURE_TRACE * 4 + 2) + +/*Max point numbers of touch trace*/ +#define MAX_POINTS_TOUCH_TRACE 1 +/*Length of touch information*/ +#define MAX_LEN_TOUCH_INFO (MAX_POINTS_TOUCH_TRACE * 6 + 2) + +/*Max touch points that touch controller supports*/ +#define FTS_MAX_POINTS_SUPPORT 10 + +struct fts_ts_event { + int x; /*x coordinate */ + int y; /*y coordinate */ + int p; /* pressure */ + int type; /* touch event flag: 0 -- down; 1-- up; 2 -- contact */ + int id; /*touch ID */ + int area; /*touch area*/ +}; + +static ext_errno fts_touch_process(void) +{ + ext_errno ret; + uint8_t i = 0; + uint8_t base = 0; + uint8_t regaddr = 0x01; + uint8_t buf[MAX_LEN_TOUCH_INFO];/*A maximum of two points are supported*/ + uint8_t point_num = 0; + uint8_t touch_event_nums = 0; + uint8_t point_id = 0; + struct fts_ts_event events[FTS_MAX_POINTS_SUPPORT]; /* multi-touch */ + + + /*read touch information from reg0x01*/ + ret = tp_ft6x46_i2c_data_read(regaddr, buf, MAX_LEN_TOUCH_INFO); + if (ret != EXT_ERR_SUCCESS) { + tp_err("Read touch information from reg0x01 fails"); + return ret; + } + + /*print touch buffer, for debug usage*/ + //log_touch_buf(buf, MAX_LEN_TOUCH_INFO); + + //if ((buf[1] == 0xFF) && (buf[2] == 0xFF) && (buf[3] == 0xFF)) { + // tp_err("FW initialization, need recovery"); + // if (fts_data->gesture_support && fts_data->suspended) + // fts_write_reg(FTS_REG_GESTURE_EN, FTS_REG_GESTURE_ENABLE); + //} + + /*parse touch information based on register map*/ + memset(events, 0xFF, sizeof(struct fts_ts_event) * FTS_MAX_POINTS_SUPPORT); + point_num = buf[1] & 0x0F; + if (point_num > FTS_MAX_POINTS_SUPPORT) { + tp_err("invalid point_num(%d)", point_num); + return EXT_ERR_FAILURE; + } + + for (i = 0; i < MAX_POINTS_TOUCH_TRACE; i++) { + base = 2 + i * 6; + point_id = buf[base + 2] >> 4; + if (point_id >= MAX_POINTS_TOUCH_TRACE) { + tp_err("abnormal touch data point_id %d\r\n",point_id); + break; + } + + events[i].x = ((buf[base] & 0x0F) << 8) + buf[base + 1]; + events[i].y = ((buf[base + 2] & 0x0F) << 8) + buf[base + 3]; + events[i].id = point_id; + events[i].type = (buf[base] >> 6) & 0x03; + events[i].p = buf[base + 4]; + events[i].area = buf[base + 5]; + if (((events[i].type == 0) || (events[i].type == 2)) & (point_num == 0)) { + tp_err("abnormal touch data from fw"); + return EXT_ERR_FAILURE; + } + + touch_event_nums++; + } + + if (touch_event_nums == 0) { + tp_err("no touch point information(%02x)", buf[1]); + return EXT_ERR_FAILURE; + } + + /*print touch information*/ + //log_touch_info(events, touch_event_nums); + + /*Now you have get the touch information, you can report anything(X/Y coordinates...) you want to system*/ + /*TODO...(report touch information to system)*/ + /*Below sample code is a pseudo code*/ + + for (i = 0; i < touch_event_nums; i++) { + #if 0 + if ((events[i].type == 0) || (events[i].type == 2)) { + /* The event of point(point id is events[i].id) is down event, the finger of this id stands for is + * pressing on the screen.*/ + /*TODO...(down event)*/ + } else { + /*TODO...(up event)*/ + } + #endif + switch (events[i].type) { + case 0: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_PRESS; + break; + /* Need To Modify For UI */ + case 2: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_MOVE; + break; + case 1: + g_ft6x46_drv.touch_msg.tp_event = MC_TP_RELEASE; + break; + + default: + tp_err("TOUCH:parse input wrong status|substatus"); + return EXT_ERR_FAILURE; + } + g_ft6x46_drv.touch_msg.tp_event_info.x_axis[0] = events[i].x; + g_ft6x46_drv.touch_msg.tp_event_info.y_axis[0] = events[i].y; + g_ft6x46_drv.touch_msg.tv_usec = (uint32_t)uapi_tcxo_get_ms(); + tp_print("event %d, x %d, y %d, time %d", + g_ft6x46_drv.touch_msg.tp_event, + g_ft6x46_drv.touch_msg.tp_event_info.x_axis[0], + g_ft6x46_drv.touch_msg.tp_event_info.y_axis[0], + g_ft6x46_drv.touch_msg.tv_usec); + } + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_parse_input(void) +{ + ext_errno ret = EXT_ERR_FAILURE; + uint16_t reg_write; + + if (g_ft6x46_drv.gesture_wakeup == TD_TRUE) { + ret = ft6x46_parse_gesture_input(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:parse gesture input fail 0x%x", ret); + return EXT_ERR_FAILURE; + } + } else { + ret = ft6x46_parse_touch_input(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:parse touch input fail 0x%x", ret); + return EXT_ERR_FAILURE; + } + } + /* clear int */ + reg_write = FT6X46_CLEAR_INT_STATUS_CMD; + ret = tp_i2c_cmd_write(reg_write); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:parse input clear int fail 0x%x", ret); + return EXT_ERR_FAILURE; + } + + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_irq_callback(uint8_t *data_buf, uint8_t data_len) +{ + unused(data_len); + g_ft6x46_drv.touch_msg.tp_event = MC_TP_INVALID; + + int32_t mem_ret; + + fts_touch_process(); + + + mem_ret = memcpy_s(data_buf, sizeof(input_event_info), &(g_ft6x46_drv.touch_msg), sizeof(input_event_info)); + if (mem_ret != EOK) { + tp_err("TOUCH:mem cpy error, ret = 0x%x", mem_ret); + return EXT_ERR_FAILURE; + } + + return EXT_ERR_SUCCESS; +} + +/* chip id */ +#define FTS_CHIP_IDH 0x64 +#define FTS_CHIP_IDL 0x56 + + +#define FTS_CMD_READ_ID 0x90 + +/* register address */ +#define FTS_REG_CHIP_ID 0xA3 +#define FTS_REG_CHIP_ID2 0x9F + +#define FTS_CMD_START_DELAY 12 + + +static ext_errno ft6x46_power_sequence(void) +{ + ext_errno ret; + uint8_t chip_id[2] = { 0 }; + + /*delay 200ms,wait fw*/ + osDelay(FT6X46_GENERAL_DELAY_200); + + /*get chip id*/ + ret = tp_ft6x46_i2c_data_read(FTS_REG_CHIP_ID, &chip_id[0], 1); + if (ret != EXT_ERR_SUCCESS) { + tp_err("222222222get ic information, error1"); + return EXT_ERR_TP_ZTW523_POWERUP_READ_CHIPID; + } + ret = tp_ft6x46_i2c_data_read(FTS_REG_CHIP_ID2, &chip_id[1], 1); + if (ret != EXT_ERR_SUCCESS) { + tp_err("3333333get ic information, error2"); + return EXT_ERR_TP_ZTW523_POWERUP_READ_CHIPID; + } + // tp_print("11111111111111get ic information, chip id = 0x%02x%02x", chip_id[0], chip_id[1]); + if ((FTS_CHIP_IDH == chip_id[0]) && (FTS_CHIP_IDL == chip_id[1])) { + tp_warning("get ic information, chip id = 0x%02x%02x", chip_id[0], chip_id[1]); + return EXT_ERR_SUCCESS; + } + + // tp_err("fw is invalid, need read boot id"); + ret = tp_ft6x46_i2c_data_write_reg(0x55, 0xAA); + if (ret != EXT_ERR_SUCCESS) { + tp_err("start cmd write fail"); + return ret; + } + + osDelay(FTS_CMD_START_DELAY); + ret = tp_ft6x46_i2c_data_read(FTS_CMD_READ_ID, chip_id, 2); + if((ret == EXT_ERR_SUCCESS) && ((FTS_CHIP_IDH == chip_id[0]) && (FTS_CHIP_IDL == chip_id[1]))) { + tp_err("get ic information, boot id = 0x%02x%02x", chip_id[0], chip_id[1]); + ret = EXT_ERR_SUCCESS; + } else { + tp_err("read boot id fail,read:0x%02x%02x", chip_id[0], chip_id[1]); + return EXT_ERR_FAILURE; + } + return ret; + +} + +static void ft6x46_clear_interrupt(uint8_t retry_times, uint16_t delay) +{ + uint16_t reg_write = FT6X46_CLEAR_INT_STATUS_CMD; + ext_errno ret; + uint8_t times; + for (times = 1; times <= retry_times; times++) { + ret = tp_i2c_cmd_write(reg_write); + if (ret == EXT_ERR_SUCCESS) { + return; + } + osDelay(delay); + } + + if (times > retry_times) { + tp_warning("TOUCH:Clear Int Cmd1! ret = 0x%x", ret); + } +} + +static ext_errno ft6x46_reg_config(void) +{ + ext_errno ret; + // uint16_t reg_write; + + // /* Initial Touch Mode */ + // reg_write = FT6X46_POINT_MODE; +// ret = tp_i2c_reg_write(FT6X46_INITIAL_TOUCH_MODE, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_INIT_TOUCHMODE; +// } + +// ret = tp_i2c_reg_write(FT6X46_TOUCH_MODE, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_TOUCHMODE; +// } + +// /* Set Finger Num */ +// reg_write = FT6X46_MAX_SUPPORTED_FINGER_NUM; +// ret = tp_i2c_reg_write(FT6X46_SUPPORTED_FINGER_NUM, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_FINGER_NUM; +// } + +// /* Set X Resolution */ +// reg_write = FT6X46_RES_MAX_X; +// ret = tp_i2c_reg_write(FT6X46_X_RESOLUTION, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_XRES; +// } + +// /* Set Y Resolution */ +// reg_write = FT6X46_RES_MAX_Y; +// ret = tp_i2c_reg_write(FT6X46_Y_RESOLUTION, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_YRES; +// } + +// /* Set Lock Point Range */ +// ret = tp_i2c_reg_write(FT6X46_HOLD_POINT_TRESHHOLD, FT6X46_POINT_TRESHHOLD); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_YRES; +// } + +// /* Write Calib Cmd */ +// reg_write = FT6X46_CALIBRATE_CMD; +// ret = tp_i2c_cmd_write(reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_CALIBCMD; +// } + +// /* Write Int Register */ +// reg_write = FT6X46_INT_MASK; +// ret = tp_i2c_reg_write(FT6X46_INT_ENABLE_FLAG, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_INTMASK; +// } +// #ifdef FT6X46_GESTURE_WAKEUP +// /* Write Gesture Register */ +// reg_write = FT6X46_GESTURE_WAKEUP_INIT; +// ret = tp_i2c_reg_write(FT6X46_GESTURE_WAKEUP_REG, reg_write); +// if (ret != EXT_ERR_SUCCESS) { +// return EXT_ERR_TP_ZTW523_CONFIG_WRITE_GESWAKEUP; +// } +// #endif + + 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 *)®_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 *)®_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 *)®_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 *)®_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 *)®_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 *)®_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; + uint16_t reg_write; + uint8_t retry_times; + + if ((g_ft6x46_drv.work_status == FT6X46_WORK_STANDBY) || (g_ft6x46_drv.work_status == FT6X46_WORK_SLEEP)) { + tp_print("alread standby or sleep"); + return EXT_ERR_SUCCESS; + } + /* Disabel Irq */ + ft6x46_set_irq_mode(FT6X46_IRQ_DISABLE, FT6X46_INT_NONE); + + reg_write = FT6X46_POWER_CTL_BEGIN; + ret = tp_i2c_cmd_write(reg_write); + if (ret != EXT_ERR_SUCCESS) { + ft6x46_set_irq_mode(FT6X46_IRQ_ENABLE, FT6X46_INT_MASK); + tp_err("standby failed 0x%x", ret); + return EXT_ERR_FAILURE; + } + /* delay 10 ms */ + osDelay(FT6X46_GENERAL_DELAY_10); + /* Send Clear Int Cmd */ + reg_write = FT6X46_CLEAR_INT_STATUS_CMD; + for (retry_times = 0; retry_times < FT6X46_INIT_RETRY_TIMERS; retry_times++) { + ret = tp_i2c_cmd_write(reg_write); + if (ret == EXT_ERR_SUCCESS) { + break; + } + /* delay 10 ms */ + osDelay(FT6X46_GENERAL_DELAY_10); + } + + /* Send Idle Cmd */ + reg_write = FT6X46_IDLE_CMD; + for (retry_times = 0; retry_times < FT6X46_INIT_RETRY_TIMERS; retry_times++) { + ret = tp_i2c_cmd_write(reg_write); + if (ret == EXT_ERR_SUCCESS) { + break; + } + /* delay 10 ms */ + osDelay(FT6X46_GENERAL_DELAY_10); + } + + reg_write = FT6X46_POWER_CTL_END; + ret = tp_i2c_cmd_write(reg_write); + if (ret != EXT_ERR_SUCCESS) { + ft6x46_set_irq_mode(FT6X46_IRQ_ENABLE, FT6X46_INT_MASK); + tp_err("standby failed 0x%x", ret); + return EXT_ERR_FAILURE; + } + /* delay 10 ms */ + osDelay(FT6X46_GENERAL_DELAY_10); + ft6x46_set_irq_mode(FT6X46_IRQ_ENABLE, FT6X46_INT_MASK); + g_ft6x46_drv.work_status = FT6X46_WORK_STANDBY; + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_suspend(void) +{ + ext_errno ret; + // uint16_t reg_write; + // uint8_t retry_times = 0; + + if (g_ft6x46_drv.work_status == FT6X46_WORK_SLEEP) { + tp_print("TOUCH:alread suspend"); + return EXT_ERR_SUCCESS; + } + /*Host writes 0x03 to register address 0xA5 to enter into sleep mode.*/ + ret = tp_ft6x46_i2c_data_write_reg(FTS_REG_POWER_MODE, 0x03); + if(ret != 0) { + tp_err("ft6x46_suspend enter sleep mode fails.ret:0x%X",ret); + return EXT_ERR_FAILURE; + } else { + tp_warning("ft6x46_suspend enter sleep mode success."); + } + + ft6x46_set_irq_mode(FT6X46_IRQ_DISABLE, FT6X46_INT_MASK); + g_ft6x46_drv.work_status = FT6X46_WORK_SLEEP; + + 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; + uint8_t retry_times = 0; + + g_ft6x46_drv.work_status = FT6X46_WORK_RESUME; + + 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 + g_ft6x46_drv.gesture_wakeup = TD_FALSE; +#endif + /* Enable Irq */ + ft6x46_set_irq_mode(FT6X46_IRQ_ENABLE, FT6X46_INT_MASK); + + return EXT_ERR_SUCCESS; + +resume_exit: + + /* Enable Irq */ + ft6x46_set_irq_mode(FT6X46_IRQ_DISABLE, FT6X46_INT_MASK); + + tp_err("resume failed 0x%x", ret); + + return EXT_ERR_FAILURE; +} + +ext_errno ft6x46_get_power_mode(uint32_t *power_mode) +{ + if (power_mode == NULL) { + return EXT_ERR_FAILURE; + } + + *power_mode = (uint32_t)(g_ft6x46_drv.work_status); + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_set_standby_mode(void) +{ + ext_errno ret; + + ret = ft6x46_standby(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:ft6x46 set standby 0x%x", ret); + return EXT_ERR_FAILURE; + } +#ifdef FT6X46_GESTURE_WAKEUP + g_ft6x46_drv.gesture_wakeup = TD_TRUE; +#endif + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_set_sleep_mode(void) +{ + ext_errno ret; + + ret = ft6x46_suspend(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:ft6x46 set suspend fail 0x%x", ret); + } +#ifdef FT6X46_GESTURE_WAKEUP + g_ft6x46_drv.gesture_wakeup = TD_FALSE; +#endif + g_ft6x46_drv.work_status = FT6X46_WORK_SLEEP; + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_set_normal_mode(void) +{ + ext_errno ret; + uint16_t reg_write; + + if (g_ft6x46_drv.work_status == FT6X46_WORK_NORMAL) { + return EXT_ERR_SUCCESS; + } + + reg_write = FT6X46_SDRAM_RESET; + ret = tp_i2c_cmd_write(reg_write); + if (ret != EXT_ERR_SUCCESS) { + return EXT_ERR_FAILURE; + } + /* delay 50ms */ + osDelay(FT6X46_GENERAL_DELAY_50); + ret = ft6x46_power_sequence(); + if (ret != EXT_ERR_SUCCESS) { + return EXT_ERR_FAILURE; + } + ft6x46_set_irq_mode(FT6X46_IRQ_ENABLE, FT6X46_INT_MASK); + g_ft6x46_drv.work_status = FT6X46_WORK_NORMAL; +#ifdef FT6X46_GESTURE_WAKEUP + g_ft6x46_drv.gesture_wakeup = TD_FALSE; +#endif + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_set_power_mode(tp_work_mode power_mode) +{ + ext_errno ret = EXT_ERR_SUCCESS; + + switch (power_mode) { + case MC_TP_SLEEP_WORK_MODE: + case MC_TP_SUSPEND_SCAN: + ret = ft6x46_set_sleep_mode(); + break; + case MC_TP_NORMAL_WORK_MODE: + case MC_TP_RESUME_SCAN: + ret = ft6x46_set_normal_mode(); + break; + case MC_TP_STANDBY_WORK_MODE: + ret = ft6x46_set_standby_mode(); + break; + default: + tp_err("TOUCH:ft6x46 not support powermode 0x%x", power_mode); + ret = EXT_ERR_FAILURE; + break; + } + + return ret; +} + +static ext_errno ft6x46_config(void) +{ + ext_errno ret; + + /* Step 1 hardware reset */ + ret = ft6x46_reset(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:Init reset fail 0x%x", ret); + return EXT_ERR_TP_ZTW523_INIT_RESET; + } + + /* Step 2 power up */ + ret = ft6x46_power_sequence(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:init powerup fail 0x%x", ret); + return EXT_ERR_TP_ZTW523_INIT_POWERUP; + } + +#if 0 + /* Step 3 configuration */ + ret = ft6x46_configuration(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:init config fail 0x%x", ret); + return EXT_ERR_TP_ZTW523_INIT_CONFIG; + } + + /* Step 3 Panel Info */ + ret = ft6x46_get_panel_info(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:init get panelinfo fail 0x%x", ret); + return EXT_ERR_TP_ZTW523_INIT_GETINFO; + } +#endif + + /* Record Status For Init */ + g_ft6x46_drv.chip_status = FT6X46_READY; + g_ft6x46_drv.work_status = FT6X46_WORK_NORMAL; + + return EXT_ERR_SUCCESS; +} + +static ext_errno ft6x46_resource_deinit(void) +{ + g_ft6x46_drv.work_status = FT6X46_WORK_INVALID; + g_ft6x46_drv.fw_upgrade_flag = TD_FALSE; + osal_mutex_destroy(&g_ft6x46_drv.ops_mux); + + return EXT_ERR_SUCCESS; +} + +ext_errno ft6x46_init(void) +{ + ext_errno ret = EXT_ERR_FAILURE; + ext_errno err_ret; + + /* create tp operation mutex */ + if (g_ft6x46_drv.ops_mux.mutex == NULL) { + ret = osal_mutex_init(&(g_ft6x46_drv.ops_mux)); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:ft6x46 init create mux lock fail 0x%x", ret); + return EXT_ERR_FAILURE; + } + } + + /* get tp operater mutex */ + ret = osal_mutex_lock_timeout(&g_ft6x46_drv.ops_mux, FT6X46_OPERATER_MUTEX_WAIT_TIME); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:ft6x46 init wait mux lock fail 0x%x", ret); + goto init_fail; + } + + /* tp hardware reset and init */ + ret = ft6x46_config(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:ft6x46 init fail 0x%x", ret); + goto init_fail; + } + + /* release tp operater mutex */ + osal_mutex_unlock(&g_ft6x46_drv.ops_mux); + + tp_print("TOUCH:ft6x46 init succ!"); + return EXT_ERR_SUCCESS; + +init_fail: + /* release tp operater mutex */ + osal_mutex_unlock(&g_ft6x46_drv.ops_mux); + err_ret = ft6x46_resource_deinit(); + if (err_ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH:delete mux lock err! ret = 0x%x", err_ret); + } + return ret; +} + +ext_errno ft6x46_deinit(void) +{ + ext_errno ret = ft6x46_resource_deinit(); + if (ret != EXT_ERR_SUCCESS) { + tp_err("TOUCH: ft6x46 deinit fail! ret = 0x%x", ret); + return ret; + } + + return EXT_ERR_SUCCESS; +} + +#ifdef __cplusplus +#if __cplusplus + } +#endif +#endif diff --git a/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.h b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.h new file mode 100644 index 000000000..b0e57762f --- /dev/null +++ b/code/sdk/drivers/drivers/driver/touch/ft6x46_touch/ft6x46_touch1.h @@ -0,0 +1,421 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2021-2022. All rights reserved. + * Description: ztw523 touch driver. + * Author: @CompanyNameTag + * Create: 2021-05-29 + */ + +#ifndef FT6X46_TOUCH1_H +#define FT6X46_TOUCH1_H + +#include "stdio.h" +#include "soc_errno.h" +#include "soc_osal.h" +#include "touch_screen_def.h" +#include "platform_core.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +/* ztw523 definitions */ +/* max wait time */ +#define FT6X46_OPERATER_MUTEX_WAIT_TIME 3000 /* operater tp mutex timeout ms */ +#define FT6X46_CMCP_WAIT_TIMEOUT 1000 +/* define some properties value */ +#define FT6X46_ENABLE 0x0001 +#define FT6X46_DISABLE 0x0000 +#define FT6X46_DATA_LEN 2 +#define FT6X46_POWERON_DELAY 100 +#define FT6X46_POWEROFF_DELAY 100 +#define FT6X46_RESETHIGH_DELAY 10 +#define FT6X46_CLEARINT_DELAY 10 +#define FT6X46_FIRMWAREON_DELAY 200 +#define FT6X46_INIT_RETRY_TIMERS 3 +#define FT6X46_SETMODE_RETRY_TIMERS 3 +#define FT6X46_SOFTRESET_RETRY_TIMES 10 +#define FT6X46_RETRY_TIMES 10 +#define FT6X46_DEVICE_INFO "zinitix,ft6x46" +#define FT6X46_DEVICE_INFO_SIZE sizeof(FT6X46_DEVICE_INFO) +#define FT6X46_MAX_SUPPORTED_FINGER_NUM 1 +#define FT6X46_POINT_MODE 1 +#define FT6X46_CALIB_TOUCH_MODE 0x07 +#define FT6X46_REGDATA_SHIFT 8 +#define FT6X46_GENERAL_DELAY_1 1 +#define FT6X46_GENERAL_DELAY_5 5 +#define FT6X46_GENERAL_DELAY_10 10 +#define FT6X46_GENERAL_DELAY_20 20 +#define FT6X46_GENERAL_DELAY_25 25 +#define FT6X46_GENERAL_DELAY_30 30 +#define FT6X46_GENERAL_DELAY_50 50 +#define FT6X46_GENERAL_DELAY_100 100 +#define FT6X46_GENERAL_DELAY_200 200 +#define FT6X46_GENERAL_DELAY_500 500 +#define FT6X46_GENERAL_RETRY_1 1 +#define FT6X46_GENERAL_RETRY_2 2 +#define FT6X46_GENERAL_RETRY_3 3 +#define FT6X46_GENERAL_RETRY_4 4 +#define FT6X46_GENERAL_RETRY_10 10 +#define FT6X46_RAWDATA_DELAY_FOR_HOST 100 +#define FT6X46_FW_JUMP_CODE 0x0048 +#define FT6X46_REPORT_RATE 60 +#define FT6X46_PIXEL_THRESHOLD 5 + +#ifndef FT6X46_RES_MAX_X +#define FT6X46_RES_MAX_X 466 +#endif + +#ifndef FT6X46_RES_MAX_Y +#define FT6X46_RES_MAX_Y 466 +#endif + +#ifndef FT6X46_POINT_TRESHHOLD +#define FT6X46_POINT_TRESHHOLD 0x19 +#endif + +#define FT6X46_TOUCHINFO_HEAD_LEN 4 +#define FT6X46_POINTINFO_LEN 6 +#define FT6X46_TOUCHINFO_LEN (FT6X46_TOUCHINFO_HEAD_LEN + FT6X46_POINTINFO_LEN * FT6X46_MAX_SUPPORTED_FINGER_NUM) + +#define FT6X46_INT_NONE 0x0000 +#define FT6X46_INT_MASK 0x081F +#define FT6X46_PALM_MASK 0x0010 +#define FT6X46_GESTURE_WAKEUP_INIT 0 +#define FT6X46_FIRMWARE_SIZE 48 +#define ZTW_PAGE_SIZE_128 128 +#define ZTW_PAGE_SIZE_64 64 +#define ZTW_SECTOR_SIZE 8 +#define ZTW_CHIPID_F400 0xF400 +#define ZTW_CHIPID_E240 0xE240 +#define ZTW_CHIPID_E700 0xE700 +#define ZTW_CHIPID_E548 0xE548 +#define ZTW_CHIPID_E538 0xE538 +#define ZTW_CHIPID_E532 0xE532 +#define ZTW_VENDOR_ID 0x5A49 +#define FT6X46_CHIP_ID 0xE628 +/* define touch info offset */ +#define FT6X46_STATUSL_OFFSET 0 +#define FT6X46_STATUSH_OFFSET 1 +#define FT6X46_EVENTL_OFFSET 2 +#define FT6X46_EVENTH_OFFSET 3 +#define FT6X46_XL_OFFSET 4 +#define FT6X46_XH_OFFSET 5 +#define FT6X46_YL_OFFSET 6 +#define FT6X46_YH_OFFSET 7 +#define FT6X46_WIDTH_OFFSET 8 +#define FT6X46_SUBSTATUS_OFFSET 9 +/* define data shift and mask */ +#define FT6X46_SHIFT_8_BIT 8 +#define FT6X46_SHIFT_16_BIT 16 +#define FT6X46_SHIFT_24_BIT 24 +#define FT6X46_MASK_BYTE 0xFF +/* define FT6X46_HIGH_SPEED_DMA rely on iic dma support */ +#ifdef FT6X46_HIGH_SPEED_DMA +#define FT6X46_TOUCH_POINT_MODE 0 +#else +#define FT6X46_TOUCH_POINT_MODE 1 +#endif + +#define FT6X46_SEC_MODE 48 +#define FT6X46_NORMAL_MODE 5 +#define FT6X46_DND_MODE 11 /* mutual cap */ +#define FT6X46_SELF_DND_MODE 17 /* self cap */ +#define FT6X46_DNDSKIP_CNT 1 +#define FT6X46_SELFDNDSKIP_CNT 1 +/* Config Reg Info */ +#define FT6X46_REG_CMD_ENABLE 0xC000 +#define FT6X46_REG_CHIP_ID 0xCC00 +#define FT6X46_REG_INTN_CLEAR 0xC004 +#define FT6X46_REG_NVM 0xC002 +#define FT6X46_REG_NVM_VPP 0xC003 +#define FT6X46_REG_NVM_WP 0xC104 +#define FT6X46_REG_PROGRAM_START 0xC001 +#define FT6X46_POWER_CTL_BEGIN 0x000A +#define FT6X46_POWER_CTL_END 0x000B +#define FT6X46_CALIB_CTL1 0xC003 +#define FT6X46_CALIB_CTL2 0xC104 +#define FT6X46_SDRAM_RESET 0x0FF8 +#define FT6X46_REPORT_REG 0x0186 /* 设置中断上报频率 */ +#define FT6X46_PIXEL_THRESHOLD_REG 0x00C3 +/* Register Map */ +#define FT6X46_SWRESET_CMD 0x0000 +#define FT6X46_WAKEUP_CMD 0x0001 +#define FT6X46_IDLE_CMD 0x0004 +#define FT6X46_SLEEP_CMD 0x0005 +#define FT6X46_CLEAR_INT_STATUS_CMD 0x0003 +#define FT6X46_CALIBRATE_CMD 0x0006 +#define FT6X46_SAVE_STATUS_CMD 0x0007 +#define FT6X46_SAVE_CALIBRATION_CMD 0x0008 +#define FT6X46_RECALL_FACTORY_CMD 0x000f +#define FT6X46_SENSITIVITY 0x0020 +#define FT6X46_I2C_CHECKSUM_WCNT 0x016a +#define FT6X46_I2C_CHECKSUM_RESULT 0x016c +#define FT6X46_DEBUG_REG 0x0115 /* 0~7 */ +#define FT6X46_TOUCH_MODE 0x0010 +#define FT6X46_CHIP_REVISION 0x0011 +#define FT6X46_FIRMWARE_VERSION 0x0012 +#define FT6X46_MINOR_FW_VERSION 0x0121 +#define FT6X46_DATA_VERSION_REG 0x0013 +#define FT6X46_HW_ID 0x0014 +#define FT6X46_SUPPORTED_FINGER_NUM 0x0015 +#define FT6X46_EEPROM_INFO 0x0018 +#define FT6X46_INITIAL_TOUCH_MODE 0x0019 +#define FT6X46_CHIP_HW_REVISION 0x001A +#define FT6X46_IC_VENDOR_ID 0x001C +#define FT6X46_TSM_MODULE_ID 0x001E +#define FT6X46_TOTAL_NUMBER_OF_X 0x0060 +#define FT6X46_TOTAL_NUMBER_OF_Y 0x0061 +#define FT6X46_DELAY_RAW_FOR_HOST 0x007f +#define FT6X46_BUTTON_SUPPORTED_NUM 0x00B0 +#define FT6X46_BUTTON_SENSITIVITY 0x00B2 +#define FT6X46_X_RESOLUTION 0x00C0 +#define FT6X46_Y_RESOLUTION 0x00C1 +#define FT6X46_HOLD_POINT_TRESHHOLD 0x00C3 +#define FT6X46_POINT_STATUS_REG 0x0080 +#define FT6X46_ICON_STATUS_REG 0x00AA +#define FT6X46_AFE_FREQUENCY 0x0100 +#define FT6X46_DND_N_COUNT 0x0122 +#define FT6X46_DND_U_COUNT 0x0135 +#define FT6X46_RAWDATA_REG 0x0200 +#define FT6X46_EEPROM_INFO_REG 0x0018 +#define FT6X46_INT_ENABLE_FLAG 0x00f0 +#define FT6X46_PERIODICAL_INTERRUPT_INTERVAL 0x00f1 +#define FT6X46_CHECKSUM_RESULT 0x012c +#define FT6X46_GESTURE_WAKEUP_REG 0x0126 + +#define FT6X46_TOUCHINFO_MASK 0x0F +#define FT6X46_TOUCH_EXIST 0x01 +#define FT6X46_TOUCH_DOWN 0x03 +#define FT6X46_TOUCH_MOVE 0x05 +#define FT6X46_TOUCH_UP 0x08 +#define FT6X46_TOUCH_NONE 0x07 + +#define FT6X46_SUB_BIT_EXIST 0 +#define FT6X46_SUB_BIT_DOWN 1 +#define FT6X46_SUB_BIT_MOVE 2 +#define FT6X46_SUB_BIT_UP 3 +#define FT6X46_SUB_BIT_UPDATE 4 +#define FT6X46_SUB_BIT_WAIT 5 + +#ifndef FT6X46_TSP_X_CHANNEL_NUM +#define FT6X46_TSP_X_CHANNEL_NUM 6 +#endif + +#ifndef FT6X46_TSP_Y_CHANNEL_NUM +#define FT6X46_TSP_Y_CHANNEL_NUM 6 +#endif + +#define FT6X46_TSP_DND_NUM (FT6X46_TSP_X_CHANNEL_NUM * FT6X46_TSP_Y_CHANNEL_NUM) +#define FT6X46_TSP_SELFDND_NUM (FT6X46_TSP_X_CHANNEL_NUM + FT6X46_TSP_Y_CHANNEL_NUM) + +/* firmware info */ +#define FT6X46_FIRMWARE_VERSION_L 0 +#define FT6X46_FIRMWARE_VERSION_H 1 +#define FT6X46_FIRMWARE_VERSION_OFFSET 52 +#define FT6X46_FIRMWARE_MINOR_VERSION_OFFSET 56 +#define FT6X46_FIRMWARE_DATA_VERSION_OFFSET 60 +#define FT6X46_FIRMWARE_OFFSET_ZERO 0 +#define FT6X46_FIRMWARE_CONVERT_DATA_STEP 2 +#define FT6X46_FIRMWARE_CONVERT_DATA_OFFSET 1 +/* file op code */ +#define FT6X46_FILE_ERROR (-1) +#define FT6X46_FILE_OK 0 +/* upgrade info */ +#define FT6X46_FWGRADE_CMD_NUM 3 +/* rawdata info */ +#define FT6X46_RAWDATA_CMD_NUM 2 +/* define gesture macro */ +#define FT6X46_GESTURE_WAKEUP 1 + +/* self_dnd dnd parameter */ +#define FT6X46_SEC_SELF_DND_N_COUNT 15 +#define FT6X46_SEC_SELF_DND_U_COUNT 2 +#define FT6X46_SEC_SELF_DND_FREQUENCY 80 + +#define FT6X46_SEC_DND_N_COUNT 27 +#define FT6X46_SEC_DND_U_COUNT 3 +#define FT6X46_SEC_DND_FREQUENCY 240 + +/* host peripheral typedef */ +typedef ext_errno (*tp_irq_callback)(void); + +/* ZTW523 driver typedef */ +typedef enum { + FT6X46_POWERDOWN = 0, + FT6X46_POWERUP, +} ft6x46_sw_power_status; + +typedef enum { + FT6X46_WORK_NORMAL = 0, + FT6X46_WORK_STANDBY, + FT6X46_WORK_GETCMCP, + FT6X46_WORK_SLEEP, + FT6X46_WORK_SUSPEND, + FT6X46_WORK_RESUME, + FT6X46_WORK_INVALID, +} ft6x46_work_status; + +typedef enum { + FT6X46_NOT_READY = 0, + FT6X46_READY, +} ft6x46_device_status; + +typedef enum { + MC_BUTTON_RELEASE = 0, /* button release */ + MC_BUTTON_PRESSED = 1, /* button pressed */ +} button_event_type; + +typedef enum { + MC_TOUCHKEY_EVENT_PRESS = 0, + MC_TOUCHKEY_EVENT_RELASSE, + MC_TOUCHKEY_EVENT_LONG_PRESS, + MC_TOUCHKEY_EVENT_INVALID, +} touch_key_event_type; + +typedef enum { + FT6X46_GESTURE_NONE = 0, + FT6X46_GESTURE_SIGNAL_CLICK = 1, + FT6X46_GESTURE_DOUBLE_CLICK = 2, + FT6X46_GESTURE_SLIDE_UP = 4, + FT6X46_GESTURE_SLIDE_DOWN = 5, +} ft6x46_gesture_event; + +typedef enum { + FT6X46_IRQ_DISABLE = 0, + FT6X46_IRQ_ENABLE, +} ft6x46_irq_status; + +typedef enum { + MC_TP_NORMAL_WORK_MODE = 0, /* tp normal mode */ + MC_TP_STANDBY_WORK_MODE, /* tp idle mode */ + MC_TP_BOOTLOADER_WORK_MODE, + MC_TP_SLEEP_WORK_MODE, + MC_TP_SUSPEND_SCAN, + MC_TP_RESUME_SCAN, + MC_TP_MAX_MODE, +} tp_work_mode; + +typedef enum { + MC_TP_UPGRADE_NEED_FLAG, + MC_TP_UPGRADE_START_ASYN, + MC_TP_UPGRADE_STATUS, + MC_TP_UPGRADE_SYNC, +} mc_tp_upgrade; + +typedef struct { + uint32_t reset_gpio; + uint32_t int_gpio; + i2c_bus_t i2c_id; + uint32_t i2c_baudrate; +} tp_peripheral_attr; + +typedef struct { + uint16_t button_code; +} button_dev_info; + +typedef struct { + uint16_t xchannel_num; + uint16_t ychannel_num; + uint16_t total_dnd_num; + uint16_t total_self_dnd_num; +} ft6x46_panel_data; + +typedef struct { + uint32_t skip_cnt; + int16_t dnd_data[FT6X46_TSP_DND_NUM]; + int16_t self_dnd_data[FT6X46_TSP_SELFDND_NUM]; +} ft6x46_tsp_rawdata; + +typedef enum { + MC_TP_RAW_DATA, + MC_TP_BASE_DATA, + MC_TP_NOS_DATA, + MC_TP_SIG_DATA, + MC_TP_FT_DATA, + MC_TP_NT_DATA, + MC_TP_MAX_DATA, + MC_TP_CM_CP_DATA, /* 7, CM CP data */ + MC_TP_INT_COUNT_DATA, /* 8, TP Int count */ + MC_TP_NOISE_METRICS_DATA, + MC_TP_DATA_STRUCTURE_DATA, + MC_TP_PANEL_SCAN_CM_DATA, + MC_TP_PANEL_SCAN_CP_DATA, + MC_TP_START_RAW_TRANS, + MC_TP_STOP_RAW_TRANS, + MC_TP_START_GET_WATER_TEMPR, /* 15, start get and print water level and temprature */ + MC_TP_STOP_GET_WATER_TEMPR, /* 16, stop get and print water level and temprature */ + MC_TP_RAW_MAX, +} mc_tp_rawdata; + +typedef struct { + mc_tp_rawdata cmd; + uint8_t *data_buf; + uint8_t data_in_len; + uint32_t data_out_len; + uint32_t data_addr; +} touch_rawdata_info; + +/* define for drv process talbe */ +typedef ext_errno (*touch_drv_upgrade_handle)(uint8_t *data_buff, uint8_t buf_len); +typedef struct { + mc_tp_upgrade cmd_id; + touch_drv_upgrade_handle process_cb; +} touch_drv_upgrade_proc; + +typedef ext_errno (*touch_hal_rawdata_handle)(uint8_t *data_buf, uint8_t buf_len); +typedef struct { + mc_tp_rawdata cmd_id; + touch_hal_rawdata_handle process_cb; +} touch_drv_rawdata_proc; + +typedef struct { + uint16_t chip_id; + uint16_t vendor_id; + uint16_t chip_hw_id; + uint8_t chip_info[FT6X46_DEVICE_INFO_SIZE]; + uint16_t firmware_version; + uint16_t minor_firmware_version; + uint16_t reg_version; + uint32_t flash_fw_version; + uint16_t int_mask; + uint16_t touch_mode; + uint32_t irq_count; + uint32_t touch_count; + uint32_t page_size; + uint16_t header_size; + uint16_t image_size; + osal_mutex ops_mux; + bool fw_upgrade_flag; + bool gesture_wakeup; + bool host_dev_init_flag; + ft6x46_sw_power_status power_status; + ft6x46_work_status work_status; + ft6x46_sw_power_status chip_sw_power_status; + ft6x46_device_status chip_status; + input_event_info touch_msg; + ft6x46_panel_data panel_info; + tp_peripheral_attr dev_attr; + ft6x46_tsp_rawdata tsp_raw_data; + void *p_void; + uint32_t tp_event; + touch_drv_upgrade_proc upgrade_table[FT6X46_FWGRADE_CMD_NUM]; + touch_drv_rawdata_proc raw_data_table[FT6X46_RAWDATA_CMD_NUM]; +} ft6x46_drv_data; + +ext_errno ft6x46_init(void); +ext_errno ft6x46_deinit(void); +ext_errno ft6x46_set_power_mode(tp_work_mode power_mode); +ext_errno ft6x46_get_power_mode(uint32_t *power_mode); +ext_errno ft6x46_resume(void); +ext_errno ft6x46_suspend(void); +ext_errno ft6x46_irq_callback(uint8_t *data_buf, uint8_t data_len); +ext_errno ft6x46_host_init_sample(void); +#ifdef __cplusplus +#if __cplusplus + } +#endif +#endif + +#endif diff --git a/code/sdk/drivers/drivers/driver/touch/touch_screen_drv.c b/code/sdk/drivers/drivers/driver/touch/touch_screen_drv.c index abe27248f..077ab322c 100644 --- a/code/sdk/drivers/drivers/driver/touch/touch_screen_drv.c +++ b/code/sdk/drivers/drivers/driver/touch/touch_screen_drv.c @@ -18,6 +18,9 @@ #elif defined(TPTYPE_ZTW523) #include "ztw523_drv1.h" #include "ztw523_ctrl.h" +#elif defined(TPTYPE_FT6X46) +#include "ft6x46_drv1.h" +#include "ft6x46_ctrl.h" #else #include "ztw523_drv1.h" #include "ztw523_ctrl.h" @@ -31,6 +34,10 @@ #define TOUCH_I2C_BUS ZTW523_I2C_BUS #define TOUCH_INT_GPIO ZTW523_INT_GPIO #define TOUCH_RESET_GPIO ZTW523_RESET_GPIO +#elif defined(TPTYPE_FT6X46) +#define TOUCH_I2C_BUS FT6X46_I2C_BUS +#define TOUCH_INT_GPIO FT6X46_INT_GPIO +#define TOUCH_RESET_GPIO FT6X46_RESET_GPIO #else #define TOUCH_I2C_BUS ZTW523_I2C_BUS #define TOUCH_INT_GPIO ZTW523_INT_GPIO @@ -114,7 +121,12 @@ static void report_or_enqueue_event(input_event_info* touch_info, struct ts_driv static void report_event_to_power_manager(input_event_info *touch_info) { if (g_power_manager_cb != NULL) { - g_power_manager_cb(touch_info->tp_event, 0); + input_dev_data_t data; + convert_touch_info(&data, touch_info); + if (data.state == INDEV_STATE_UNKNOWN) { + return; + } + g_power_manager_cb(data.state, 0); } return; } @@ -424,8 +436,15 @@ void touch_screen_suspend(void) touch_peripheral_api *touch_ptr = touch_screen_get_api(); ext_errno ret = touch_ptr->touch_sleep(); if (ret != EXT_ERR_SUCCESS) { tp_err("touch sleep ret=0x%x", ret); } +#if defined(TPTYPE_FT6X46) + if (ft6x46_suspend() == EXT_ERR_SUCCESS){ + i2c_save_reg(TOUCH_I2C_BUS); + uapi_gpio_disable_interrupt(TOUCH_INT_GPIO); // close tp_int gpio interrupt + } +#else i2c_save_reg(TOUCH_I2C_BUS); uapi_gpio_disable_interrupt(TOUCH_INT_GPIO); // close tp_int gpio interrupt +#endif } void touch_screen_resume(void) @@ -439,6 +458,8 @@ void touch_screen_resume(void) if (ret != EXT_ERR_SUCCESS) { tp_err("touch resume ret=0x%x", ret); } #elif defined(TPTYPE_ZTW523) ztw523_resume(); +#elif defined(TPTYPE_FT6X46) + ft6x46_resume(); #else ztw523_resume(); #endif @@ -463,6 +484,8 @@ void touch_screen_restart(void) tma525b_resume(); #elif defined(TPTYPE_ZTW523) ztw523_resume(); +#elif defined(TPTYPE_FT6X46) + ft6x46_resume(); #else ztw523_resume(); #endif diff --git a/code/sdk/include/driver/flash/flash_common_config.h b/code/sdk/include/driver/flash/flash_common_config.h index f4a652bd8..57d920672 100644 --- a/code/sdk/include/driver/flash/flash_common_config.h +++ b/code/sdk/include/driver/flash/flash_common_config.h @@ -115,6 +115,10 @@ #define FLASH_MANUFACTURER_XTX_XT25Q64D 0x17600B #define FLASH_MANUFACTURER_XTX_XT25Q128D 0x18600B +#define FLASH_MANUFACTURER_PUYA_PY25Q128LA 0x186585 + +#define FLASH_MANUFACTURER_HRT_ZB25LQ128C 0x18505E + #define FLASH_CMD_LEN_MAX 4 #define addr_unalign(Addr, Boundary) ((Addr) & ((Boundary) - 1)) @@ -180,6 +184,8 @@ typedef enum flash_support_manufacturer { FLASH_XTX_XT25Q128D, FLASH_PUYA_P25Q64SL, FLASH_MXIC_MX25U256, + FLASH_PUYA_PY25Q128LA, + FLASH_HRT_ZB25LQ128C, FLASH_MANUFACTURER_MAX } flash_support_manufacturer_t; diff --git a/code/sdk/include/driver/flash/flash_config_info.h b/code/sdk/include/driver/flash/flash_config_info.h index cc5b92628..b73f5145d 100644 --- a/code/sdk/include/driver/flash/flash_config_info.h +++ b/code/sdk/include/driver/flash/flash_config_info.h @@ -125,6 +125,11 @@ static const flash_device_parameter_t g_flash_device_parameter[FLASH_MANUFACTURE g_puya_p25q32lc_enter_qspi_mode_cmd, NULL, &g_puya_p25q32lc_config }, { FLASH_MANUFACTURER_MXIC_MX25U256, FLASH_SIZE_32MB, 0xA5, 0xAA, WAIT_CYCLES_4, 0x2B, 0xB0, 0x30, g_mxic_mx25uxx_enter_qspi_mode_cmd, NULL, &g_mxic_mx25uxx_config }, + { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x20, 0xFF, WAIT_CYCLES_4, 0x05, 0x75, 0x7A, + g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config }, + { FLASH_MANUFACTURER_HRT_ZB25LQ128C, FLASH_SIZE_16MB, 0x20, 0x0, WAIT_CYCLES_4, 0x05, 0x75, 0x7A, + g_hrt_zb25lq128c_enter_qspi_mode_cmd, NULL, &g_hrt_zb25lq128c_config }, + }; static const uint32_t g_xip_use_cmd_mode[] = { @@ -142,6 +147,8 @@ static const uint32_t g_xip_use_cmd_mode[] = { FLASH_MANUFACTURER_ELITE_EN25S32A, FLASH_MANUFACTURER_DOSILICON_DS25M4AB, FLASH_MANUFACTURER_PUYA_P25Q64SL, + FLASH_MANUFACTURER_PUYA_PY25Q128LA, + FLASH_MANUFACTURER_HRT_ZB25LQ128C, }; static flash_cmd_exe_t g_winbond_w25qxx_set_qe_cmd[] = { @@ -204,6 +211,36 @@ static flash_cmd_exe_t g_xtx_xt25q128d_set_qe_cmd[] = { { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } }; +static flash_cmd_exe_t g_puya_py25q128la_set_qe_cmd[] = { + /* Check QE bit. */ + { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* Write enable. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } }, + /* Write status register-2 to 0x2, set QE bit. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } }, + /* Waite config done. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } }, + /* Check QE bit. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + +static flash_cmd_exe_t g_hrt_zb25lq128c_set_qe_cmd[] = { + /* Check QE bit. */ + { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* Write enable. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } }, + /* Write status register-2 to 0x2, set QE bit. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } }, + /* Waite config done. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } }, + /* Check QE bit. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + static const flash_qe_config_t g_flash_need_set_qe[] = { {FLASH_MANUFACTURER_WINBOND_W25Q32, g_winbond_w25qxx_set_qe_cmd}, {FLASH_MANUFACTURER_WINBOND_W25Q64, g_winbond_w25qxx_set_qe_cmd}, @@ -214,6 +251,8 @@ static const flash_qe_config_t g_flash_need_set_qe[] = { {FLASH_MANUFACTURER_DOSILICON_DS25M4AB, g_winbond_w25qxx_set_qe_cmd}, {FLASH_MANUFACTURER_ELITE_EN25SX128A, g_winbond_en25sx128a_set_qe_cmd}, {FLASH_MANUFACTURER_XTX_XT25Q128D, g_xtx_xt25q128d_set_qe_cmd}, + {FLASH_MANUFACTURER_PUYA_PY25Q128LA, g_puya_py25q128la_set_qe_cmd}, + {FLASH_MANUFACTURER_HRT_ZB25LQ128C, g_hrt_zb25lq128c_set_qe_cmd} }; #define FLASH_WIP (bit(0)) diff --git a/code/sdk/include/driver/flash/flash_others_config.h b/code/sdk/include/driver/flash/flash_others_config.h index b0a2795dc..aa2358e4f 100644 --- a/code/sdk/include/driver/flash/flash_others_config.h +++ b/code/sdk/include/driver/flash/flash_others_config.h @@ -141,6 +141,48 @@ static flash_cmd_exe_t g_xtx_xt25qxxd_enter_qspi_mode_cmd[] = { { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } }; +/* PUYA config. */ +/* PY25Q128LA PUYA flash config. */ +static flash_cmd_exe_t g_puya_py25q128la_enter_qspi_mode_cmd[] = { + // /* Write enable for Volatils status register. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } }, + // /* Write status register-2 to 0x2, enable QPI write bit. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x01, 0x02 } }, + // /* Enable QPI. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } }, + // /* Set dummy 6, maxinum read freq 70MHZ. */ + // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} }, + // /* End cmd, will not execute and need return. */ + // { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } + /* Write enable for Volatils status register. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } }, + /* Write status register-2 to 0x2, enable QPI write bit. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } }, + /* Waite config done. */ + { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } }, + /* Enable QPI. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } }, + /* Set dummy 6, maxinum read freq 70MHZ. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + +/* HRT config. */ +/* PY25Q128LA PUYA flash config. */ +static flash_cmd_exe_t g_hrt_zb25lq128c_enter_qspi_mode_cmd[] = { + /* Write enable for Volatils status register. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } }, + /* Write volatile configuration register,config XIP disable. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { 0x01, 0x00, 0x02 } }, + /* Enable QPI. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } }, + /* Set dummy 6, maxinum read freq 108MHZ. */ + { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x10} }, + /* End cmd, will not execute and need return. */ + { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } } +}; + /* OTHERS enter xip mode config. */ /* Micro config. */ /* MT25QU128 Micro flash config. */ @@ -248,6 +290,42 @@ static flash_qspi_xip_config_t g_xtx_xt25qxxd_config = { false, false, }; + +/* PUYA config. */ +/* PY25Q128LA PUYA flash config. */ +static flash_qspi_xip_config_t g_puya_py25q128la_config = { + /* The config that before enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* The config that after enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* XIP 32bit addr & wrap config. */ + false, + false, +}; + +/* HRT config. */ +/* ZB25LQ128C HRT flash config. */ +static flash_qspi_xip_config_t g_hrt_zb25lq128c_config = { + /* The config that before enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* The config that after enter XIP mode. */ + WAIT_CYCLES_6, + HAL_SPI_INST_LEN_8, + HAL_SPI_ADDR_LEN_24, + HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q, + /* XIP 32bit addr & wrap config. */ + false, + false, +}; /** * @} */ -- 2.17.1