diff --git a/adapter/khdf/linux/model/input/Kconfig b/adapter/khdf/linux/model/input/Kconfig index 74c26555317452c3f32c55b07541cae56ab69388..46cc7b990c898a071f4088563141c3e074c1611c 100644 --- a/adapter/khdf/linux/model/input/Kconfig +++ b/adapter/khdf/linux/model/input/Kconfig @@ -12,6 +12,13 @@ config DRIVERS_HDF_TP_5P5_GT911 help Answer Y to enable HDF TP 5P5 GT911 driver. +config DRIVERS_HDF_TP_TH1520_GT911 + bool "Enable HDF tp 5P5 c9xx GT911 driver" + default n + depends on DRIVERS_HDF_INPUT + help + Answer Y to enable HDF TP 5P5 c9xx GT911 driver. + config DRIVERS_HDF_TP_2P35_FT6236 bool "Enable HDF tp 2P35 FT6236 driver" default n diff --git a/adapter/khdf/linux/model/input/Makefile b/adapter/khdf/linux/model/input/Makefile index 498787eb4358f0f8f90bf6c59854bd0e5ca51b64..eaeaec9facd83f04b126d4985bf36852d7c7cbca 100644 --- a/adapter/khdf/linux/model/input/Makefile +++ b/adapter/khdf/linux/model/input/Makefile @@ -22,7 +22,8 @@ obj-$(CONFIG_DRIVERS_HDF_INPUT) += \ $(INPUT_ROOT_DIR)/hdf_touch.o \ $(INPUT_ROOT_DIR)/hdf_key.o \ $(INPUT_ROOT_DIR)/hdf_hid_adapter.o - +obj-$(CONFIG_DRIVERS_HDF_TP_TH1520_GT911) += \ + $(INPUT_ROOT_DIR)/touchscreen/touch_gt911.o obj-$(CONFIG_DRIVERS_HDF_TP_5P5_GT911) += \ $(INPUT_ROOT_DIR)/touchscreen/touch_gt911.o obj-$(CONFIG_ARCH_NXP_TOUCH) += \ diff --git a/adapter/uhdf2/hdi/BUILD.gn b/adapter/uhdf2/hdi/BUILD.gn index b94970f5144b50f99f1d97cc630b1ae4c01900dc..a9816acf246a1f90b307308bd4c61192d74a23f1 100644 --- a/adapter/uhdf2/hdi/BUILD.gn +++ b/adapter/uhdf2/hdi/BUILD.gn @@ -41,9 +41,10 @@ if (defined(ohos_lite)) { } } else { ohos_shared_library("libhdi") { - if (target_cpu == "arm64" || target_cpu == "x86_64" || - target_cpu == "riscv64") { + if (target_cpu == "arm64" || target_cpu == "x86_64") { defines = [ "__ARM64__" ] + } else if (target_cpu == "riscv64") { + defines = [ "__RISCV64__" ] } include_dirs = [ diff --git a/adapter/uhdf2/hdi/src/hdf_load_hdi.c b/adapter/uhdf2/hdi/src/hdf_load_hdi.c index c010bd45bd2fb6f72d437be88d09c9920a60f244..c1786b11b9609d5f28908cc0c4055526f612ccf3 100644 --- a/adapter/uhdf2/hdi/src/hdf_load_hdi.c +++ b/adapter/uhdf2/hdi/src/hdf_load_hdi.c @@ -23,7 +23,7 @@ #define HDF_LOG_TAG dev_load_hdi -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define HDI_SO_PATH HDF_LIBRARY_DIR"64" #else #define HDI_SO_PATH HDF_LIBRARY_DIR diff --git a/adapter/uhdf2/hdi/src/hdi_support.cpp b/adapter/uhdf2/hdi/src/hdi_support.cpp index b01743be336612766146541a2cc6afed3491e25d..2dfc1cec4aa1dcbe41718d2deee455060674ea53 100644 --- a/adapter/uhdf2/hdi/src/hdi_support.cpp +++ b/adapter/uhdf2/hdi/src/hdi_support.cpp @@ -27,7 +27,7 @@ #define HDF_LOG_TAG load_hdi -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define HDI_SO_PATH HDF_LIBRARY_DIR "64" #else #define HDI_SO_PATH HDF_LIBRARY_DIR diff --git a/adapter/uhdf2/host/BUILD.gn b/adapter/uhdf2/host/BUILD.gn index 3bc96a7de313818f0fb29f3fa422b97ee3339e6f..8a31a29a3dd55e8f266639005e056e10905914d9 100644 --- a/adapter/uhdf2/host/BUILD.gn +++ b/adapter/uhdf2/host/BUILD.gn @@ -33,9 +33,10 @@ if (defined(ohos_lite)) { } } else { ohos_shared_library("libhdf_host") { - if (target_cpu == "arm64" || target_cpu == "x86_64" || - target_cpu == "riscv64") { + if (target_cpu == "arm64" || target_cpu == "x86_64") { defines = [ "__ARM64__" ] + } else if (target_cpu == "riscv64") { + defines = [ "__RISCV64__" ] } all_dependent_configs = [ ":libhdf_host_all_dependent_config" ] diff --git a/adapter/uhdf2/host/src/driver_loader_full.c b/adapter/uhdf2/host/src/driver_loader_full.c index da57b2dd77fe56297847f0bf3fa0de9d6682e6c1..22310442c260579a9d9a9bfeddd14f082dfeb06f 100644 --- a/adapter/uhdf2/host/src/driver_loader_full.c +++ b/adapter/uhdf2/host/src/driver_loader_full.c @@ -27,7 +27,7 @@ #define DRIVER_DESC "driverDesc" #define HDF_LOG_TAG driver_loader_full -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define DRIVER_PATH HDF_LIBRARY_DIR"64/" #else #define DRIVER_PATH HDF_LIBRARY_DIR"/" diff --git a/framework/model/input/driver/hdf_touch.c b/framework/model/input/driver/hdf_touch.c index f706f3c95edf025e2dc1fe2c87c95353d6bc5f8f..dafe975859710bc24936623decda8f339411e68f 100644 --- a/framework/model/input/driver/hdf_touch.c +++ b/framework/model/input/driver/hdf_touch.c @@ -160,6 +160,29 @@ static int32_t HandlePowerEvent(ChipDevice *chipDev, uint32_t *timing, uint32_t return ret; } +#if defined(CONFIG_ARCH_RV64I) +static int32_t InputPinMuxCfg(uint64_t regAddr, int32_t regSize, uint64_t regValue) +{ + uint8_t *base = NULL; + uint64_t value; + if (regAddr == 0) { + HDF_LOGE("%s: regAddr invalid", __func__); + return HDF_FAILURE; + } + + base = OsalIoRemap(regAddr, regSize); + if (base == NULL) { + HDF_LOGE("%s: ioremap failed", __func__); + return HDF_FAILURE; + } + + value = OSAL_READL(base); + regValue = (value & regValue); + OSAL_WRITEL(regValue, base); + OsalIoUnmap((void *)base); + return HDF_SUCCESS; +} +#else static int32_t InputPinMuxCfg(uint32_t regAddr, int32_t regSize, uint32_t regValue) { #if defined(CONFIG_ARCH_SPRD) || defined(CONFIG_ARCH_ROCKCHIP) || defined(LOSCFG_PLATFORM_STM32MP157) || \ @@ -182,6 +205,7 @@ static int32_t InputPinMuxCfg(uint32_t regAddr, int32_t regSize, uint32_t regVal OsalIoUnmap((void *)base); return HDF_SUCCESS; } +#endif #if defined(CONFIG_ARCH_ROCKCHIP) static int32_t SetResetStatus(TouchDriver *driver) @@ -244,10 +268,17 @@ static int32_t SetTiming(ChipDevice *chipDev, bool enable) #endif int32_t i; int32_t ret; +#if defined(CONFIG_ARCH_RV64I) + uint64_t rstPinAddr; + uint64_t rstPinValue; + uint64_t intPinAddr; + uint64_t intPinValue; +#else uint32_t rstPinAddr; uint32_t rstPinValue; uint32_t intPinAddr; uint32_t intPinValue; +#endif SeqArray pwrOnTiming = {0}; SeqArray pwroffTiming = {0}; TouchDriver *driver = chipDev->driver; @@ -959,10 +990,17 @@ static int32_t TouchSetupBus(TouchDriver *driver, TouchBoardCfg *config) uint8_t busType = config->bus.busType; uint8_t busNum = config->bus.i2c.busNum; if (busType == I2C_TYPE) { +#if defined(CONFIG_ARCH_RV64I) + uint64_t i2cClkAddr = config->bus.i2c.i2cClkReg[0]; + uint64_t i2cClkValue = config->bus.i2c.i2cClkReg[1]; + uint64_t i2cDataAddr = config->bus.i2c.i2cDataReg[0]; + uint64_t i2cDataValue = config->bus.i2c.i2cDataReg[1]; +#else uint32_t i2cClkAddr = config->bus.i2c.i2cClkReg[0]; uint32_t i2cClkValue = config->bus.i2c.i2cClkReg[1]; uint32_t i2cDataAddr = config->bus.i2c.i2cDataReg[0]; uint32_t i2cDataValue = config->bus.i2c.i2cDataReg[1]; +#endif if (InputPinMuxCfg(i2cClkAddr, REGISTER_BYTE_SIZE, i2cClkValue) != HDF_SUCCESS) { return HDF_FAILURE; diff --git a/framework/model/input/driver/input_config.h b/framework/model/input/driver/input_config.h index fb964dbf5aeec02f1a1876d3d876d405602ff94d..75313f30429697863439f498e035e49b132779a8 100644 --- a/framework/model/input/driver/input_config.h +++ b/framework/model/input/driver/input_config.h @@ -25,8 +25,13 @@ typedef struct { uint8_t busNum; uint16_t clkGpio; uint16_t dataGpio; +#if defined(CONFIG_ARCH_RV64I) + uint64_t i2cClkReg[REG_CONFIG_LEN]; + uint64_t i2cDataReg[REG_CONFIG_LEN]; +#else uint32_t i2cClkReg[REG_CONFIG_LEN]; uint32_t i2cDataReg[REG_CONFIG_LEN]; +#endif } BoardI2cCfg; typedef struct { @@ -52,8 +57,13 @@ typedef struct { typedef struct { uint16_t rstGpio; uint16_t intGpio; +#if defined(CONFIG_ARCH_RV64I) + uint64_t rstPinReg[REG_CONFIG_LEN]; + uint64_t intPinReg[REG_CONFIG_LEN]; +#else uint32_t rstPinReg[REG_CONFIG_LEN]; uint32_t intPinReg[REG_CONFIG_LEN]; +#endif } BoardPinCfg; typedef struct { diff --git a/framework/model/input/driver/input_config_parser.c b/framework/model/input/driver/input_config_parser.c index d60edc4fbb806a92908f35e79594ebdd3845d746..09f9b248b43372dd33ce18c1858256b25e65f1c4 100644 --- a/framework/model/input/driver/input_config_parser.c +++ b/framework/model/input/driver/input_config_parser.c @@ -136,10 +136,17 @@ static int32_t ParseBus(struct DeviceResourceIface *parser, const struct DeviceR CHECK_PARSER_RET(ret, "GetUint16"); ret = parser->GetUint16(busNode, "dataGpio", &bus->i2c.dataGpio, 0); CHECK_PARSER_RET(ret, "GetUint16"); +#if defined(CONFIG_ARCH_RV64I) + ret = parser->GetUint64Array(busNode, "i2cClkIomux", bus->i2c.i2cClkReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); + ret = parser->GetUint64Array(busNode, "i2cDataIomux", bus->i2c.i2cDataReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); +#else ret = parser->GetUint32Array(busNode, "i2cClkIomux", bus->i2c.i2cClkReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); ret = parser->GetUint32Array(busNode, "i2cDataIomux", bus->i2c.i2cDataReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); +#endif } else if (bus->busType == SPI) { ret = parser->GetUint8(busNode, "busNum", &bus->spi.busNum, 0); CHECK_PARSER_RET(ret, "GetUint8"); @@ -165,10 +172,17 @@ static int32_t ParsePins(struct DeviceResourceIface *parser, const struct Device CHECK_PARSER_RET(ret, "GetUint16"); ret = parser->GetUint16(pinsNode, "intGpio", &pins->intGpio, 0); CHECK_PARSER_RET(ret, "GetUint16"); +#if defined(CONFIG_ARCH_RV64I) + ret = parser->GetUint64Array(pinsNode, "rstRegCfg", pins->rstPinReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); + ret = parser->GetUint64Array(pinsNode, "intRegCfg", pins->intPinReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); +#else ret = parser->GetUint32Array(pinsNode, "rstRegCfg", pins->rstPinReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); ret = parser->GetUint32Array(pinsNode, "intRegCfg", pins->intPinReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); +#endif return HDF_SUCCESS; } diff --git a/framework/model/input/driver/touchscreen/touch_gt911.c b/framework/model/input/driver/touchscreen/touch_gt911.c index d4be2ac04637cc1c77128de91df63ddecd49939b..299595f283c0cf5c0849ce5c69f58c5a887824a2 100644 --- a/framework/model/input/driver/touchscreen/touch_gt911.c +++ b/framework/model/input/driver/touchscreen/touch_gt911.c @@ -222,6 +222,9 @@ static int32_t UpdateFirmware(ChipDevice *device) HDF_LOGI("%s: needn't update fw version", __func__); return HDF_SUCCESS; } +#elif defined(CONFIG_ARCH_RV64I) + HDF_LOGI("%s: Turn off RV64I firmware updates", __func__); + return HDF_SUCCESS; #endif ret = InputI2cWrite(i2cClient, firmWareParm, FIRMWARE_LEN); if (ret < 0) { diff --git a/framework/model/input/driver/touchscreen/touch_gt911.h b/framework/model/input/driver/touchscreen/touch_gt911.h index 79246b73f3545baa3be7850598c723af1c4fb8f4..ba6faa9ed454006829b841feb21c5f1bfb308848 100644 --- a/framework/model/input/driver/touchscreen/touch_gt911.h +++ b/framework/model/input/driver/touchscreen/touch_gt911.h @@ -10,6 +10,9 @@ #define TOUCH_GT911_H /* the macro defines of GT911 */ +#if defined(CONFIG_ARCH_RV64I) +#define MAX_SUPPORT_POINT 10 +#endif #define MAX_SUPPORT_POINT 5 #define ONE_BYTE_MASK 0xFF #define ONE_BYTE_OFFSET 8