From 81560464a7812076f2dacce2f2e121a987e95399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=85=B6=E4=BA=AE?= Date: Thu, 16 Nov 2023 18:48:36 +0800 Subject: [PATCH] New and old TP IC compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 周其亮 --- model/input/driver/hdf_touch.c | 71 ++++++++++++++------ model/input/driver/touchscreen/touch_gt911.c | 22 ++++-- 2 files changed, 66 insertions(+), 27 deletions(-) mode change 100644 => 100755 model/input/driver/hdf_touch.c mode change 100644 => 100755 model/input/driver/touchscreen/touch_gt911.c diff --git a/model/input/driver/hdf_touch.c b/model/input/driver/hdf_touch.c old mode 100644 new mode 100755 index bfe420ee1..ca7312098 --- a/model/input/driver/hdf_touch.c +++ b/model/input/driver/hdf_touch.c @@ -40,6 +40,7 @@ static TouchDriver *g_touchDriverList[MAX_TOUCH_DEVICE]; static void InputFrameReport(TouchDriver *driver); static int32_t ChipCheckResetRetry(ChipDevice *chipDev); +static int SuspendFlag = 0; static int32_t SetGpioDirAndLevel(int gpio, int dir, int level) { @@ -211,7 +212,7 @@ static int32_t SetResetStatus(TouchDriver *driver) } #endif -static int32_t SetPowerOnTiming(ChipDevice *chipDev, bool enableRst) +static int32_t SetTiming(ChipDevice *chipDev, bool enable) { int32_t i; int32_t ret; @@ -220,6 +221,7 @@ static int32_t SetPowerOnTiming(ChipDevice *chipDev, bool enableRst) uint32_t intPinAddr; uint32_t intPinValue; SeqArray pwrOnTiming = {0}; + SeqArray pwroffTiming = {0}; TouchDriver *driver = chipDev->driver; rstPinAddr = driver->boardCfg->pins.rstPinReg[0]; @@ -237,26 +239,39 @@ static int32_t SetPowerOnTiming(ChipDevice *chipDev, bool enableRst) HDF_LOGD("%s: rstPinAddr = 0x%x, rstPinValue = 0x%x, intPinAddr = 0x%x, intPinValue = 0x%x", __func__, rstPinAddr, rstPinValue, intPinAddr, intPinValue); - ret = memcpy_s(&pwrOnTiming, sizeof(SeqArray), &chipDev->chipCfg->pwrSeq.pwrOn, sizeof(SeqArray)); - if (ret != EOK) { - HDF_LOGE("%s: memcpy_s failed", __func__); - return HDF_FAILURE; - } - - if ((pwrOnTiming.buf == NULL) || (pwrOnTiming.count == 0)) { - HDF_LOGE("%s: pwrOnTiming config is invalid", __func__); - return HDF_FAILURE; - } - - for (i = 0; i < pwrOnTiming.count / PWR_CELL_LEN; i++) { - if (enableRst) { + HDF_LOGE("%s: enable = %d", __func__, enable); + if (enable) { + ret = memcpy_s(&pwrOnTiming, sizeof(SeqArray), &chipDev->chipCfg->pwrSeq.pwrOn, sizeof(SeqArray)); + if (ret != EOK) { + HDF_LOGE("%s: memcpy_s failed", __func__); + return HDF_FAILURE; + } + if ((pwrOnTiming.buf == NULL) || (pwrOnTiming.count == 0)) { + HDF_LOGE("%s: pwrOnTiming config is invalid", __func__); + return HDF_FAILURE; + } + for (i = 0; i < pwrOnTiming.count / PWR_CELL_LEN; i++) { ret = HandleResetEvent(chipDev, pwrOnTiming.buf, PWR_CELL_LEN); - } else { - ret = HandlePowerEvent(chipDev, pwrOnTiming.buf, PWR_CELL_LEN); + CHECK_RETURN_VALUE(ret); + pwrOnTiming.buf = pwrOnTiming.buf + PWR_CELL_LEN; + } + } else { + ret = memcpy_s(&pwroffTiming, sizeof(SeqArray), &chipDev->chipCfg->pwrSeq.pwrOff, sizeof(SeqArray)); + if (ret != EOK) { + HDF_LOGE("%s: memcpy_s failed", __func__); + return HDF_FAILURE; + } + if ((pwroffTiming.buf == NULL) || (pwroffTiming.count == 0)) { + HDF_LOGE("%s: pwroffTiming config is invalid", __func__); + return HDF_FAILURE; + } + for (i = 0; i < pwroffTiming.count / PWR_CELL_LEN; i++) { + ret = HandlePowerEvent(chipDev, pwroffTiming.buf, PWR_CELL_LEN); + CHECK_RETURN_VALUE(ret); + pwroffTiming.buf = pwroffTiming.buf + PWR_CELL_LEN; } - CHECK_RETURN_VALUE(ret); - pwrOnTiming.buf = pwrOnTiming.buf + PWR_CELL_LEN; } + #if defined(CONFIG_ARCH_ROCKCHIP) ret = SetResetStatus(driver); if (ret != HDF_SUCCESS) { @@ -357,7 +372,11 @@ static void ChipReset(ChipDevice *chipDev) HDF_LOGE("%s: invalid param", __func__); return; } - (void)SetPowerOnTiming(chipDev, true); + if (!SuspendFlag) { + (void)SetTiming(chipDev, true); + } else { + (void)SetTiming(chipDev, false); + } } #if GTP_ESD_PROTECT @@ -555,11 +574,13 @@ static int32_t ChipDriverInit(ChipDevice *chipDev) { int32_t ret; #if defined(CONFIG_ARCH_ROCKCHIP) +#if GTP_ESD_PROTECT g_touchDriver = chipDev->driver; +#endif ret = Gt1xRequestIo(chipDev); CHECK_RETURN_VALUE(ret); #else - ret = SetPowerOnTiming(chipDev, false); + ret = SetTiming(chipDev, false); CHECK_RETURN_VALUE(ret); #endif OsalMSleep(100); // 100 : delay time @@ -1031,7 +1052,10 @@ static int HdfTouchDriverDozeResume(struct HdfDeviceObject *device) return HDF_ERR_INVALID_PARAM; } HDF_LOGI("%s:called", __func__); - +#if GTP_ESD_PROTECT + Gt1xEsdSwitch(1); +#endif + SuspendFlag = 0; static int32_t isFirstResume = 1; if (isFirstResume == 1) { isFirstResume = 0; @@ -1050,7 +1074,10 @@ static int HdfTouchDriverDozeSuspend(struct HdfDeviceObject *device) return HDF_ERR_INVALID_PARAM; } HDF_LOGI("%s:called", __func__); - +#if GTP_ESD_PROTECT + Gt1xDeinitEsdProtect(); +#endif + SuspendFlag = 1; int32_t ret = -1; uint8_t writeBuf[3]; // 3: buffer size TouchDriver *touchDriver = (TouchDriver *)device->priv; diff --git a/model/input/driver/touchscreen/touch_gt911.c b/model/input/driver/touchscreen/touch_gt911.c old mode 100644 new mode 100755 index e815bff53..98726c821 --- a/model/input/driver/touchscreen/touch_gt911.c +++ b/model/input/driver/touchscreen/touch_gt911.c @@ -15,6 +15,12 @@ #include "touch_gt911.h" #define MAX_POINT 5 +#if defined(CONFIG_ARCH_ROCKCHIP) +#define GT5688_FIRMWARE_VERSION 256 +#define GT911_FIRMWARE_VERSION 4192 +#endif +#define COMPENSATION_VALUE_Y 32 +#define UNCONTROLLABLE_VALUE_Y 10 static int32_t ChipInit(ChipDevice *device) { @@ -53,13 +59,19 @@ static int32_t ChipDetect(ChipDevice *device) xSolution = (buf[GT_SOLU_X_HIGH] << ONE_BYTE_OFFSET) | buf[GT_SOLU_X_LOW]; ySolution = (buf[GT_SOLU_Y_HIGH] << ONE_BYTE_OFFSET) | buf[GT_SOLU_Y_LOW]; #if defined(CONFIG_ARCH_ROCKCHIP) - if (buf[GT_PROD_ID_1ST] != '5' || buf[GT_PROD_ID_2ND] != '6' || \ - buf[GT_PROD_ID_3RD] != '8' || buf[GT_PROD_ID_4TH] != '8') { - HDF_LOGE("%s: ID wrong,IC FW version is 0x%x", __func__, version); - return HDF_FAILURE; + HDF_LOGI("%s:IC FW version is %d", __func__, version); + switch (version) { + case GT5688_FIRMWARE_VERSION: + HDF_LOGI("%s:TOUCH IC is GT5688", __func__); + break; + case GT911_FIRMWARE_VERSION: + HDF_LOGI("%s:TOUCH IC is GT911", __func__); + break; + default: + HDF_LOGE("%s: ID wrong,IC FW version is %d", __func__, version); + return HDF_FAILURE; } #endif - HDF_LOGI("%s: IC FW version is 0x%x", __func__, version); if (buf[GT_FW_VER_HIGH] == 0x0) { HDF_LOGI("Product ID : %c%c%c_%02x%02x, xSol = %d, ySol = %d", buf[GT_PROD_ID_1ST], buf[GT_PROD_ID_2ND], buf[GT_PROD_ID_3RD], buf[GT_FW_VER_HIGH], buf[GT_FW_VER_LOW], xSolution, ySolution); -- Gitee