diff --git a/adapter/khdf/linux/model/audio/Kconfig b/adapter/khdf/linux/model/audio/Kconfig index b2695b7040e0306c4f9a7109265efcd9f944a18f..d6eb8062414098c0dd89a2e19777fb37291bd1df 100644 --- a/adapter/khdf/linux/model/audio/Kconfig +++ b/adapter/khdf/linux/model/audio/Kconfig @@ -69,4 +69,4 @@ config DRIVERS_HDF_AUDIO_IMX8MM default n depends on DRIVERS_HDF_AUDIO help - Answer Y to choice HDF Audio Codec driver. \ No newline at end of file + Answer Y to choice HDF Audio Codec driver. diff --git a/adapter/khdf/linux/model/input/Kconfig b/adapter/khdf/linux/model/input/Kconfig index 74c26555317452c3f32c55b07541cae56ab69388..ee6f60bf505137158889a3a58e71d865cd863160 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 @@ -38,4 +45,4 @@ config ARCH_NXP_TOUCH default n depends on DRIVERS_HDF_INPUT help - Answer Y to enable HDF TP nxp ft5x06 touch. \ No newline at end of file + Answer Y to enable HDF TP nxp ft5x06 touch. diff --git a/adapter/uhdf2/hdi/BUILD.gn b/adapter/uhdf2/hdi/BUILD.gn index 5b2be8b53ef4c7d6ff2a141a761a7d510549248e..a9816acf246a1f90b307308bd4c61192d74a23f1 100644 --- a/adapter/uhdf2/hdi/BUILD.gn +++ b/adapter/uhdf2/hdi/BUILD.gn @@ -43,6 +43,8 @@ if (defined(ohos_lite)) { ohos_shared_library("libhdi") { 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 64129f6c21f2fbc3db240d796b29623e2da9d6bb..b3e5f520e0c77ad2b9b0a113c595996065745953 100644 --- a/adapter/uhdf2/host/BUILD.gn +++ b/adapter/uhdf2/host/BUILD.gn @@ -33,8 +33,11 @@ if (defined(ohos_lite)) { } } else { ohos_shared_library("libhdf_host") { - if (target_cpu == "arm64" || target_cpu == "x86_64") { + if (target_cpu == "arm64" || target_cpu == "x86_64" || + target_cpu == "riscv64") { 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/include/utils/hdf_base.h b/framework/include/utils/hdf_base.h index c3356a08c712af50877a15e00a398df80a2378e7..3d6e3214a9deb9516cd6df4f6a3d67cdae3f78b6 100644 --- a/framework/include/utils/hdf_base.h +++ b/framework/include/utils/hdf_base.h @@ -95,7 +95,7 @@ typedef enum { #define HDF_ETC_DIR "/etc" #define HDF_CONFIG_DIR "/etc" #else -#ifdef __aarch64__ +#if defined(__aarch64__) || (defined(__riscv) && __riscv_xlen == 64) #define HDF_LIBRARY_FULL_PATH(x) "/vendor/lib64/" x ".z.so" #else #define HDF_LIBRARY_FULL_PATH(x) "/vendor/lib/" x ".z.so" diff --git a/framework/model/input/driver/hdf_touch.c b/framework/model/input/driver/hdf_touch.c index f706f3c95edf025e2dc1fe2c87c95353d6bc5f8f..a1e32c230e9aaa362eb152c1037f4dcf0ac17f00 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..135ed06f25b148311d7d1f9a6f1ed24c1696c681 100644 --- a/framework/model/input/driver/touchscreen/touch_gt911.c +++ b/framework/model/input/driver/touchscreen/touch_gt911.c @@ -130,6 +130,11 @@ static void ParsePointData(ChipDevice *device, FrameData *frame, uint8_t *buf, u ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_Y_LOW] & ONE_BYTE_MASK) | ((buf[GT_POINT_SIZE * i + GT_Y_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); +#elif defined(CONFIG_ARCH_RV64I) + frame->fingers[i].x = (buf[GT_POINT_SIZE * i + GT_X_LOW] & ONE_BYTE_MASK) | + ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); + frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_Y_LOW] & ONE_BYTE_MASK) | + ((buf[GT_POINT_SIZE * i + GT_Y_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); #else frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_X_LOW] & ONE_BYTE_MASK) | ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET);