From be8e8cbc99ea753146c470a81edccc03df658a10 Mon Sep 17 00:00:00 2001 From: litong20 Date: Mon, 17 May 2021 09:47:44 +0800 Subject: [PATCH] Add pollForEvent check mechanism 1. When the panel enters the active state, the gesture_enable should be set to 0. 2. When resume, the charger mode is already set, so not to wirte. 3. When the CONTROLLER_READY event is not polled, perform a system reset. Change-Id: I5281e9cb4e962f5f0a1c9460fecd541ae72fa3f4 Reviewed-on: https://gerrit.mot.com/1950039 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../input/touchscreen/stmicro_mmi/fts_lib/ftsCore.c | 13 ++++++++++++- .../input/touchscreen/stmicro_mmi/fts_mmi_class.c | 12 ++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/stmicro_mmi/fts_lib/ftsCore.c b/drivers/input/touchscreen/stmicro_mmi/fts_lib/ftsCore.c index fd64be681e0b..1193e10a7e2a 100644 --- a/drivers/input/touchscreen/stmicro_mmi/fts_lib/ftsCore.c +++ b/drivers/input/touchscreen/stmicro_mmi/fts_lib/ftsCore.c @@ -96,12 +96,23 @@ void setResetGpio(int gpio) int fts_wait_for_ready(void) { + int ret = -1; + int i; u8 readData[FIFO_EVENT_SIZE]; int event_to_search; event_to_search = (int)EVT_ID_CONTROLLER_READY; - return pollForEvent(&event_to_search, 1, readData, GENERAL_TIMEOUT); + for (i = 0; i < 3; i++) { + ret = pollForEvent(&event_to_search, 1, readData, GENERAL_TIMEOUT); + if (ret == ERROR_TIMEOUT || ret == ERROR_BUS_R) + fts_system_reset(); + else + return ret; + } + + logError(1, "%s fts_wait_for_ready Failed\n", tag); + return ret; } /** diff --git a/drivers/input/touchscreen/stmicro_mmi/fts_mmi_class.c b/drivers/input/touchscreen/stmicro_mmi/fts_mmi_class.c index 6cb7cd378084..2949457ae76e 100644 --- a/drivers/input/touchscreen/stmicro_mmi/fts_mmi_class.c +++ b/drivers/input/touchscreen/stmicro_mmi/fts_mmi_class.c @@ -308,6 +308,7 @@ static int fts_mmi_panel_state(struct device *dev, fts_suspend_func(ts); break; case TS_MMI_PM_ACTIVE: + ts->gesture_enabled = 0; break; default: dev_warn(dev, "invalid panel state %d\n", to); @@ -373,11 +374,16 @@ static int fts_mmi_fw_update(struct device *dev, char *fwname) static int fts_mmi_charger_mode(struct device *dev, int mode) { struct fts_ts_info *ts = dev_get_drvdata(dev); - int res = OK; int ret = OK; u8 settings[4] = { 0 }; ASSERT_PTR(ts); + if (mode == ts->charger_enabled) { + logError(1, "%s %s: Charger mode is already %s.\n", + tag, __func__, !!mode ? "Enable" : "Disable"); + return ret; + } + ts->mode = MODE_NOTHING; /* initialize the mode to nothing in * order to be updated depending on the * features enabled */ @@ -388,8 +394,6 @@ static int fts_mmi_charger_mode(struct device *dev, int mode) logError(1, "%s %s: error during setting CHARGER_MODE! ERROR %08X\n", tag, __func__, ret); - res |= ret; - if (ret >= OK && ts->charger_enabled == FEAT_ENABLE) { fromIDtoMask(FEAT_SEL_CHARGER, (u8 *)&ts->mode, sizeof(ts->mode)); logError(1, "%s %s: CHARGER_MODE Enabled!\n", @@ -397,7 +401,7 @@ static int fts_mmi_charger_mode(struct device *dev, int mode) } else logError(1, "%s %s: CHARGER_MODE Disabled!\n", tag, __func__); - return res; + return ret; } static int fts_mmi_wait4ready(struct device *dev)