"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
)\r
endif()\r
\r
+if("${CFG_SAP_VENDOR_DRIVER_AW88166_SUPPORT}" STREQUAL "y")\r
+set(COMPONENT_SRC ${COMPONENT_SRC}\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw88166.c\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx.c\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx_calib.c\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/aw883xx_device.c\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/product_init_files/aw88166/aw883xx_pid_2066_init.c\r
+)\r
+set(COMPONENT_INC ${COMPONENT_INC}\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/product_init_files/aw88166\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/aw88166/config/aw88166/mono/16bit\r
+)\r
+endif()\r
+\r
if("${CFG_SAP_VENDOR_DRIVER_ANC_CODEC_SUPPORT}" STREQUAL "y")\r
set(COMPONENT_SRC ${COMPONENT_SRC}\r
${CMAKE_CURRENT_SOURCE_DIR}/anc_codec/anc_codec.c\r
\r
static td_bool g_aw88166_i2c_inited = TD_FALSE;\r
\r
-#define AW88166_PWR_ON_PIN S_MGPIO4\r
-#define AW88166_I2C_BUS_ID I2C_BUS_0\r
+#define AW88166_PWR_ON_PIN S_AGPIO_L25\r
+#define AW88166_I2C_BUS_ID I2C_BUS_3\r
#define AW88166_I2C_DEV_ADDR 0x34\r
\r
static td_s32 aw_dev0_i2c_write_func(td_u16 dev_addr, td_u8 reg_addr, td_u8 *pdata, td_u16 len)\r
#include "tma525b_drv1.h"\r
#elif defined(TPTYPE_ZTW523)\r
#include "ztw523_touch1.h"\r
+#elif defined(TPTYPE_FT6X46)\r
+#include "ft6x46_touch1.h"\r
#else\r
#include "ztw523_touch1.h"\r
#endif\r
* define AUDIO_SMARTPA_AW88166 : macro to init smartpa aw88166;\r
* define AUDIO_SMARTPA_AW88166_I2S_ID UAPI_SND_OUT_PORT_I2S0 : macro to specify i2s id connecting to smartpa aw88166;\r
*/\r
+#if 0\r
#define AUDIO_SMARTPA_AW88262\r
#define AUDIO_SMARTPA_AW88262_I2S_ID UAPI_SND_OUT_PORT_I2S2\r
-\r
+#else\r
+#define AUDIO_SMARTPA_AW88166\r
+#define AUDIO_SMARTPA_AW88166_I2S_ID UAPI_SND_OUT_PORT_I2S0\r
+#endif\r
#endif /* DSP_EXIST */\r
#include "panic.h"\r
#include "board_init.h"\r
tma525b_host_init_sample();\r
#elif defined(TPTYPE_ZTW523)\r
ztw523_host_init_sample();\r
+#elif defined(TPTYPE_FT6X46)\r
+ ft6x46_host_init_sample();\r
#else\r
ztw523_host_init_sample();\r
#endif\r
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);
} 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;
}
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
{\r
struct nand_driver_struct *nandflash_drv = get_nand_flash();\r
PRINT("\r\nnandflash init start.\r\n");\r
- nand_driver_init(SPEED_HIGH);\r
+ nand_driver_init(SPEED_MID);\r
PRINT("\r\nnandflash initing ...\r\n");\r
g_nandflash_init = nandflash_drv->nand_flash_init();\r
PRINT("\r\nnandflash init end. ret %s\r\n", (g_nandflash_init == 0 ? "success" : "fail"));\r
'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',
'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版本
#离线日志版本
'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': {
"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'],
#include "gpio_porting.h"
#include "platform_types.h"
+
/**
* @addtogroup connectivity_config_boards
* @{
{ 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
{ 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
*/
/**
* @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 },
};
/**
#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********************/
#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 枚举
// 音频外挂输入设备
#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
#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
#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 枚举
#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;
(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,
(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,
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,
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,
#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);
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
#include "common_def.h"\r
#include "lcd_config.h"\r
\r
+#define LCD_EDO_466X466_SCREEN_ID 0x1133\r
#define LCD_EDO_454X454_SCREEN_ID 0xf00\r
#define LCD_BOE_454X454_SCREEN_ID 0x500\r
#define LCD_SH_240X296_SCREEN_ID 0x101\r
#define LCD_BOE_194X368_SCREEN_ID 0x4a00\r
\r
+const combo_dev_cfg_t g_panel_466x466_60_config = {\r
+ .devno = 0,\r
+ .lane_id = {0, -1},\r
+ .out_mode = OUT_MODE_DSI_CMD,\r
+ .out_format = OUT_FORMAT_RGB_24BIT,\r
+ .sync_info = {\r
+ .hsa_pixels = 10, // hsa 10 pixels\r
+ .hbp_pixels = 10, // hbp 10 pixels\r
+ .hact_pixels = 466, // hact 466 pixels\r
+ .hfp_pixels = 10, // hfp 10 pixels\r
+ .vsa_lines = 4, // vsa 4 lines\r
+ .vbp_lines = 12, // vbp 12 lines\r
+ .vact_lines = 466, // vact 466 lines\r
+ .vfp_lines = 10, // vfp 10 lines\r
+ },\r
+ .phy_data_rate = 480, // 480Mbps\r
+ .pixel_clk = 20000, // 20000KHz\r
+};\r
const combo_dev_cfg_t g_panel_454x454_60_config = {\r
.devno = 0,\r
.lane_id = {0, -1},\r
{1, 1, {0x10}, 120}, /* sleep in */\r
};\r
\r
+/* display off sequence for common lcd */\r
+const lcd_cmd_sequ g_common_466x466_cmd_display_off[] = {\r
+ {1, 2, {0xfe, 0x00}, 0}, /* select default cmd page */\r
+ {1, 1, {0x28}, 0}, /* display off */\r
+ {1, 1, {0x10}, 120}, /* sleep in */\r
+ {1, 2, {0x4f, 0x01}, 0}, /* ½ødeepstandby ״̬ */\r
+};\r
+\r
/* sleep in sequence for common lcd */\r
const lcd_cmd_sequ g_common_cmd_sleep_in[] = {\r
{1, 2, {0xfe, 0x00}, 0}, /* select default cmd page */\r
{1, 2, {0xfe, 0x00}, 0},\r
{1, 2, {0x51, 0xff}, 0},\r
};\r
+const lcd_cmd_sequ g_edo_466x466_screen_init_on[] = {\r
+ {1, 2, {0xfe, 0x00}, 0}, \r
+ {1, 2, {0x3a, 0x77}, 0}, \r
+ {1, 2, {0x35, 0x00}, 0}, \r
+ {1, 2, {0x53, 0x20}, 0}, \r
+ // {1, 2, {0x51, 0xff}, 0}, \r
+ {1, 2, {0x63, 0xff}, 0}, \r
+ {1, 5, {0x2A, 0x00, 0x06, 0x01, 0xd7}, 0}, \r
+ {1, 5, {0x2B, 0x00, 0x00, 0x01, 0xd1}, 0}, \r
+ {1, 3, {0x44, 0x01, 0xc5}, 0},\r
+ {1, 1, {0x11}, 120}, \r
+ {1, 1, {0x29}, 0}, \r
+};\r
+\r
\r
/* init sequence for EDO 454*454 lcd */\r
const lcd_cmd_sequ g_edo_454x454_screen_init_on[] = {\r
.cmd_cnt = array_size(g_common_cmd_display_off),\r
};\r
\r
+const lcd_cmds_sequ g_466x466_display_off_cmds = {\r
+ .cmd = g_common_466x466_cmd_display_off,\r
+ .cmd_cnt = array_size(g_common_466x466_cmd_display_off),\r
+};\r
+\r
const lcd_cmds_sequ g_idle_in_cmds = {\r
.cmd = g_common_cmd_idle_in,\r
.cmd_cnt = array_size(g_common_cmd_idle_in),\r
.cmd_cnt = array_size(g_common_cmd_brightness),\r
};\r
\r
+const lcd_cmds_sequ g_edo_466x466_screen_init_on_cmds = {\r
+ .cmd = g_edo_466x466_screen_init_on,\r
+ .cmd_cnt = array_size(g_edo_466x466_screen_init_on),\r
+};\r
+\r
const lcd_cmds_sequ g_edo_454x454_screen_init_on_cmds = {\r
.cmd = g_edo_454x454_screen_init_on,\r
.cmd_cnt = array_size(g_edo_454x454_screen_init_on),\r
};\r
\r
const lcd_drv_cfg g_lcd_driver_ops[] = {\r
+ {\r
+ .bus_type = BUS_DISPLAY_MIPI,\r
+ .bus_cfg = &g_panel_466x466_60_config,\r
+ .x_start = 0x6,\r
+ .y_start = 0,\r
+ .fps = 60,\r
+ .lcd_id = LCD_EDO_466X466_SCREEN_ID,\r
+ .display_on_cmds = &g_edo_466x466_screen_init_on_cmds,\r
+ .display_off_cmds = &g_466x466_display_off_cmds,\r
+ .enter_idle_cmds = &g_idle_in_cmds,\r
+ .exit_idle_cmds = &g_idle_out_cmds,\r
+ .te_on_cmds = &g_te_on_cmds,\r
+ .te_off_cmds = &g_te_off_cmds,\r
+ .set_brightnes_cmds = &g_brightness_cmds,\r
+ .sleep_in_cmds = &g_sleep_in_cmds,\r
+ .sleep_out_cmds = &g_sleep_out_cmds,\r
+ .lcd_id_info.reg_addr = 0x04,\r
+ .lcd_id_info.read_len = 3,\r
+ },\r
{\r
.bus_type = BUS_DISPLAY_MIPI,\r
.bus_cfg = &g_panel_454x454_60_config,\r
#include "gpio.h"\r
#include "pinctrl_porting.h"\r
#include "product.h"\r
-\r
+#include "pinctrl.h"\r
static void lcd_drv_power_on(void)\r
{\r
#ifndef QSPI_DISPLAY\r
uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_HIGH);\r
uapi_tcxo_delay_ms(10); /* delay 10 ms */\r
}\r
-\r
+#define USE_OUTPUT_CTL 1\r
static void lcd_drv_power_off(void)\r
{\r
+#if USE_OUTPUT_CTL\r
+ //uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_OUTPUT); \r
+ //uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_LOW);\r
+ #ifndef QSPI_DISPLAY\r
+ uapi_gpio_set_dir(VCI_LCD_GPIO, GPIO_DIRECTION_OUTPUT);\r
+ uapi_gpio_set_val(VCI_LCD_GPIO, GPIO_LEVEL_LOW);\r
+ #endif\r
+ uapi_tcxo_delay_ms(10); /* delay 10 ms */\r
+ int resetvalue = uapi_gpio_get_output_val(RESET_LCD_GPIO);\r
+ int lcd_envalue = uapi_gpio_get_output_val(VCI_LCD_GPIO);\r
+ printf("Output RESET_LCD_GPIO %d , VCI_LCD_GPIO %d\r\n",resetvalue,lcd_envalue);\r
+#else\r
uapi_gpio_set_val(RESET_LCD_GPIO, GPIO_LEVEL_LOW);\r
- uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_INPUT);\r
-#ifndef QSPI_DISPLAY\r
+ uapi_gpio_set_dir(RESET_LCD_GPIO, GPIO_DIRECTION_INPUT); //¨¦¨¨??3¨¦Input¡ê?¨º??a¨¢??a????¦Ì? ¡ê?¡ê?\r
+ uapi_pin_set_pull(RESET_LCD_GPIO, PIN_PULL_DOWN);\r
+ #ifndef QSPI_DISPLAY\r
uapi_gpio_set_val(VCI_LCD_GPIO, GPIO_LEVEL_LOW);\r
uapi_gpio_set_dir(VCI_LCD_GPIO, GPIO_DIRECTION_INPUT);\r
-#endif\r
+ uapi_pin_set_pull(VCI_LCD_GPIO, PIN_PULL_DOWN);\r
+ #endif\r
uapi_tcxo_delay_ms(10); /* delay 10 ms */\r
+ int resetvalue = uapi_gpio_get_val(RESET_LCD_GPIO);\r
+ int lcd_envalue = uapi_gpio_get_val(VCI_LCD_GPIO);\r
+ printf("Input RESET_LCD_GPIO %d , VCI_LCD_GPIO %d\r\n",resetvalue,lcd_envalue);\r
+#endif\r
+ \r
}\r
\r
static lcd_drv_private g_lcd_private_api = {\r
}\r
}\r
\r
- g_lcd_info.brightness = DEFAULT_BRIGHTNESS;\r
+ if (g_lcd_info.brightness == 0)\r
+ g_lcd_info.brightness = DEFAULT_BRIGHTNESS;\r
\r
return EXT_ERR_SUCCESS;\r
fail:\r
#define DS35X1G_BYTES_PER_OOB 64\r
#define DS35X1G_PAGES_PER_BLOCK 64\r
#define DS35X1G_TOTAL_BLOCKS 1024\r
-#define DS35X1G_CHIP_ID 0xE521\r
+#define DS35X1G_CHIP_ID 0x6161\r
#define DS35X1G_OOB_TOTAL_LEN 4\r
#define DS35X1G_OOB_PER_SIZE 8\r
#define DS35X1G_OOB_1_OFFSET 0\r
\r
void nandflash_qspi_resume(void)\r
{\r
- nand_driver_init(SPEED_HIGH);\r
+ nand_driver_init(SPEED_MID);\r
}\r
\r
static uint32_t mc_ds35x1g_init(void)\r
{\r
- nand_driver_init(SPEED_HIGH);\r
+ nand_driver_init(SPEED_MID);\r
nand_driver_sem_init();\r
PRINT("ds35x1g_init \r\n");\r
uint32_t ret;\r
${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
${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}
--- /dev/null
+/*
+ * 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);
+}
+
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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
#elif defined(TPTYPE_ZTW523)\r
#include "ztw523_drv1.h"\r
#include "ztw523_ctrl.h"\r
+#elif defined(TPTYPE_FT6X46)\r
+#include "ft6x46_drv1.h"\r
+#include "ft6x46_ctrl.h"\r
#else\r
#include "ztw523_drv1.h"\r
#include "ztw523_ctrl.h"\r
#define TOUCH_I2C_BUS ZTW523_I2C_BUS\r
#define TOUCH_INT_GPIO ZTW523_INT_GPIO\r
#define TOUCH_RESET_GPIO ZTW523_RESET_GPIO\r
+#elif defined(TPTYPE_FT6X46)\r
+#define TOUCH_I2C_BUS FT6X46_I2C_BUS\r
+#define TOUCH_INT_GPIO FT6X46_INT_GPIO\r
+#define TOUCH_RESET_GPIO FT6X46_RESET_GPIO\r
#else\r
#define TOUCH_I2C_BUS ZTW523_I2C_BUS\r
#define TOUCH_INT_GPIO ZTW523_INT_GPIO\r
static void report_event_to_power_manager(input_event_info *touch_info)\r
{\r
if (g_power_manager_cb != NULL) {\r
- g_power_manager_cb(touch_info->tp_event, 0);\r
+ input_dev_data_t data;\r
+ convert_touch_info(&data, touch_info);\r
+ if (data.state == INDEV_STATE_UNKNOWN) {\r
+ return;\r
+ }\r
+ g_power_manager_cb(data.state, 0);\r
}\r
return;\r
}\r
touch_peripheral_api *touch_ptr = touch_screen_get_api();\r
ext_errno ret = touch_ptr->touch_sleep();\r
if (ret != EXT_ERR_SUCCESS) { tp_err("touch sleep ret=0x%x", ret); }\r
+#if defined(TPTYPE_FT6X46)\r
+ if (ft6x46_suspend() == EXT_ERR_SUCCESS){\r
+ i2c_save_reg(TOUCH_I2C_BUS);\r
+ uapi_gpio_disable_interrupt(TOUCH_INT_GPIO); // close tp_int gpio interrupt\r
+ }\r
+#else\r
i2c_save_reg(TOUCH_I2C_BUS);\r
uapi_gpio_disable_interrupt(TOUCH_INT_GPIO); // close tp_int gpio interrupt\r
+#endif\r
}\r
\r
void touch_screen_resume(void)\r
if (ret != EXT_ERR_SUCCESS) { tp_err("touch resume ret=0x%x", ret); }\r
#elif defined(TPTYPE_ZTW523)\r
ztw523_resume();\r
+#elif defined(TPTYPE_FT6X46)\r
+ ft6x46_resume();\r
#else\r
ztw523_resume();\r
#endif\r
tma525b_resume();\r
#elif defined(TPTYPE_ZTW523)\r
ztw523_resume();\r
+#elif defined(TPTYPE_FT6X46)\r
+ ft6x46_resume();\r
#else\r
ztw523_resume();\r
#endif\r
#define FLASH_MANUFACTURER_XTX_XT25Q64D 0x17600B\r
#define FLASH_MANUFACTURER_XTX_XT25Q128D 0x18600B\r
\r
+#define FLASH_MANUFACTURER_PUYA_PY25Q128LA 0x186585\r
+\r
+#define FLASH_MANUFACTURER_HRT_ZB25LQ128C 0x18505E\r
+\r
#define FLASH_CMD_LEN_MAX 4\r
\r
#define addr_unalign(Addr, Boundary) ((Addr) & ((Boundary) - 1))\r
FLASH_XTX_XT25Q128D,\r
FLASH_PUYA_P25Q64SL,\r
FLASH_MXIC_MX25U256,\r
+ FLASH_PUYA_PY25Q128LA,\r
+ FLASH_HRT_ZB25LQ128C,\r
FLASH_MANUFACTURER_MAX\r
} flash_support_manufacturer_t;\r
\r
g_puya_p25q32lc_enter_qspi_mode_cmd, NULL, &g_puya_p25q32lc_config },\r
{ FLASH_MANUFACTURER_MXIC_MX25U256, FLASH_SIZE_32MB, 0xA5, 0xAA, WAIT_CYCLES_4, 0x2B, 0xB0, 0x30,\r
g_mxic_mx25uxx_enter_qspi_mode_cmd, NULL, &g_mxic_mx25uxx_config },\r
+ { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x20, 0xFF, WAIT_CYCLES_4, 0x05, 0x75, 0x7A,\r
+ g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config },\r
+ { FLASH_MANUFACTURER_HRT_ZB25LQ128C, FLASH_SIZE_16MB, 0x20, 0x0, WAIT_CYCLES_4, 0x05, 0x75, 0x7A,\r
+ g_hrt_zb25lq128c_enter_qspi_mode_cmd, NULL, &g_hrt_zb25lq128c_config },\r
+\r
};\r
\r
static const uint32_t g_xip_use_cmd_mode[] = {\r
FLASH_MANUFACTURER_ELITE_EN25S32A,\r
FLASH_MANUFACTURER_DOSILICON_DS25M4AB,\r
FLASH_MANUFACTURER_PUYA_P25Q64SL,\r
+ FLASH_MANUFACTURER_PUYA_PY25Q128LA,\r
+ FLASH_MANUFACTURER_HRT_ZB25LQ128C,\r
};\r
\r
static flash_cmd_exe_t g_winbond_w25qxx_set_qe_cmd[] = {\r
{ FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
};\r
\r
+static flash_cmd_exe_t g_puya_py25q128la_set_qe_cmd[] = {\r
+ /* Check QE bit. */\r
+ { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },\r
+ /* Write enable. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } },\r
+ /* Write status register-2 to 0x2, set QE bit. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },\r
+ /* Waite config done. */\r
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },\r
+ /* Check QE bit. */\r
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },\r
+ /* End cmd, will not execute and need return. */\r
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
+};\r
+\r
+static flash_cmd_exe_t g_hrt_zb25lq128c_set_qe_cmd[] = {\r
+ /* Check QE bit. */\r
+ { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },\r
+ /* Write enable. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } },\r
+ /* Write status register-2 to 0x2, set QE bit. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },\r
+ /* Waite config done. */\r
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },\r
+ /* Check QE bit. */\r
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },\r
+ /* End cmd, will not execute and need return. */\r
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
+};\r
+\r
static const flash_qe_config_t g_flash_need_set_qe[] = {\r
{FLASH_MANUFACTURER_WINBOND_W25Q32, g_winbond_w25qxx_set_qe_cmd},\r
{FLASH_MANUFACTURER_WINBOND_W25Q64, g_winbond_w25qxx_set_qe_cmd},\r
{FLASH_MANUFACTURER_DOSILICON_DS25M4AB, g_winbond_w25qxx_set_qe_cmd},\r
{FLASH_MANUFACTURER_ELITE_EN25SX128A, g_winbond_en25sx128a_set_qe_cmd},\r
{FLASH_MANUFACTURER_XTX_XT25Q128D, g_xtx_xt25q128d_set_qe_cmd},\r
+ {FLASH_MANUFACTURER_PUYA_PY25Q128LA, g_puya_py25q128la_set_qe_cmd},\r
+ {FLASH_MANUFACTURER_HRT_ZB25LQ128C, g_hrt_zb25lq128c_set_qe_cmd}\r
};\r
\r
#define FLASH_WIP (bit(0))\r
{ FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
};\r
\r
+/* PUYA config. */\r
+/* PY25Q128LA PUYA flash config. */\r
+static flash_cmd_exe_t g_puya_py25q128la_enter_qspi_mode_cmd[] = {\r
+ // /* Write enable for Volatils status register. */\r
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },\r
+ // /* Write status register-2 to 0x2, enable QPI write bit. */\r
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x01, 0x02 } },\r
+ // /* Enable QPI. */\r
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },\r
+ // /* Set dummy 6, maxinum read freq 70MHZ. */\r
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} },\r
+ // /* End cmd, will not execute and need return. */\r
+ // { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
+ /* Write enable for Volatils status register. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },\r
+ /* Write status register-2 to 0x2, enable QPI write bit. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },\r
+ /* Waite config done. */\r
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },\r
+ /* Enable QPI. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },\r
+ /* Set dummy 6, maxinum read freq 70MHZ. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} },\r
+ /* End cmd, will not execute and need return. */\r
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
+};\r
+\r
+/* HRT config. */\r
+/* PY25Q128LA PUYA flash config. */\r
+static flash_cmd_exe_t g_hrt_zb25lq128c_enter_qspi_mode_cmd[] = {\r
+ /* Write enable for Volatils status register. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },\r
+ /* Write volatile configuration register,config XIP disable. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { 0x01, 0x00, 0x02 } },\r
+ /* Enable QPI. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },\r
+ /* Set dummy 6, maxinum read freq 108MHZ. */\r
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x10} },\r
+ /* End cmd, will not execute and need return. */\r
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }\r
+};\r
+\r
/* OTHERS enter xip mode config. */\r
/* Micro config. */\r
/* MT25QU128 Micro flash config. */\r
false,\r
false,\r
};\r
+\r
+/* PUYA config. */\r
+/* PY25Q128LA PUYA flash config. */\r
+static flash_qspi_xip_config_t g_puya_py25q128la_config = {\r
+ /* The config that before enter XIP mode. */\r
+ WAIT_CYCLES_6,\r
+ HAL_SPI_INST_LEN_8,\r
+ HAL_SPI_ADDR_LEN_24,\r
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,\r
+ /* The config that after enter XIP mode. */\r
+ WAIT_CYCLES_6,\r
+ HAL_SPI_INST_LEN_8,\r
+ HAL_SPI_ADDR_LEN_24,\r
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,\r
+ /* XIP 32bit addr & wrap config. */\r
+ false,\r
+ false,\r
+};\r
+\r
+/* HRT config. */\r
+/* ZB25LQ128C HRT flash config. */\r
+static flash_qspi_xip_config_t g_hrt_zb25lq128c_config = {\r
+ /* The config that before enter XIP mode. */\r
+ WAIT_CYCLES_6,\r
+ HAL_SPI_INST_LEN_8,\r
+ HAL_SPI_ADDR_LEN_24,\r
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,\r
+ /* The config that after enter XIP mode. */\r
+ WAIT_CYCLES_6,\r
+ HAL_SPI_INST_LEN_8,\r
+ HAL_SPI_ADDR_LEN_24,\r
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,\r
+ /* XIP 32bit addr & wrap config. */\r
+ false,\r
+ false,\r
+};\r
/**\r
* @}\r
*/\r