From c9028a2306e9bad8e6336258269765c35ff4fdf5 Mon Sep 17 00:00:00 2001 From: Shashank Babu Chinta Venkata Date: Thu, 10 Dec 2020 22:14:16 -0800 Subject: [PATCH 1/2] input: touchscreen: st: release i2c session early Release I2C session lock before releasing IO region in TVM during trusted touch scenario. Change-Id: I221862eef47b4dae90c63c4768c65265c7806001 Signed-off-by: Shashank Babu Chinta Venkata --- drivers/input/touchscreen/st/fts.c | 14 +++++++------- drivers/input/touchscreen/st/fts.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/input/touchscreen/st/fts.c b/drivers/input/touchscreen/st/fts.c index e65bc7094673..2b82bff31f25 100644 --- a/drivers/input/touchscreen/st/fts.c +++ b/drivers/input/touchscreen/st/fts.c @@ -604,6 +604,9 @@ static void fts_trusted_touch_tvm_vm_mode_disable(struct fts_ts_info *info) flushFIFO(); release_all_touches(info); + pm_runtime_put_sync(info->client->adapter->dev.parent); + fts_trusted_touch_set_tvm_driver_state(info, + TVM_I2C_SESSION_RELEASED); rc = fts_vm_mem_release(info); if (rc) { pr_err("Failed to release mem rc:%d\n", rc); @@ -612,9 +615,6 @@ static void fts_trusted_touch_tvm_vm_mode_disable(struct fts_ts_info *info) fts_trusted_touch_set_tvm_driver_state(info, TVM_IOMEM_RELEASED); } - pm_runtime_put_sync(info->client->adapter->dev.parent); - fts_trusted_touch_set_tvm_driver_state(info, - TVM_I2C_SESSION_RELEASED); fts_trusted_touch_set_tvm_driver_state(info, TRUSTED_TOUCH_TVM_INIT); atomic_set(&info->trusted_touch_enabled, 0); pr_info("trusted touch disabled\n"); @@ -692,16 +692,16 @@ static void fts_trusted_touch_abort_tvm(struct fts_ts_info *info) case TVM_IRQ_RELEASED: flushFIFO(); release_all_touches(info); + pm_runtime_put_sync(info->client->adapter->dev.parent); + case TVM_I2C_SESSION_RELEASED: rc = fts_vm_mem_release(info); if (rc) pr_err("Failed to release mem rc:%d\n", rc); case TVM_IOMEM_RELEASED: - pm_runtime_put_sync(info->client->adapter->dev.parent); - case TVM_I2C_SESSION_RELEASED: - case TVM_IOMEM_LENT_NOTIFIED: - case TVM_IRQ_LENT_NOTIFIED: case TVM_ALL_RESOURCES_LENT_NOTIFIED: case TRUSTED_TOUCH_TVM_INIT: + case TVM_IRQ_LENT_NOTIFIED: + case TVM_IOMEM_LENT_NOTIFIED: atomic_set(&info->trusted_touch_enabled, 0); } diff --git a/drivers/input/touchscreen/st/fts.h b/drivers/input/touchscreen/st/fts.h index 2745a18d4238..06830dfb35f5 100644 --- a/drivers/input/touchscreen/st/fts.h +++ b/drivers/input/touchscreen/st/fts.h @@ -246,8 +246,8 @@ enum trusted_touch_tvm_states { TVM_INTERRUPT_ENABLED, TVM_INTERRUPT_DISABLED, TVM_IRQ_RELEASED, - TVM_IOMEM_RELEASED, TVM_I2C_SESSION_RELEASED, + TVM_IOMEM_RELEASED, TRUSTED_TOUCH_TVM_STATE_MAX }; From 927b6f7a717702b9b68947f7ca3db89f0df54827 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 21 Dec 2020 18:06:35 +0530 Subject: [PATCH 2/2] input: touchscreen: focaltech: release i2c session early Release I2C session lock before releasing IO regions in TVM during trusted touch scenario. Change-Id: If943165b687318eac6c5f7b734bc6dea4c0efa46 Signed-off-by: Shashank Babu Chinta Venkata Signed-off-by: Ritesh Kumar --- .../touchscreen/focaltech_touch/focaltech_core.c | 14 +++++++------- .../touchscreen/focaltech_touch/focaltech_core.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c index 6e403744aa3f..41b333b46f8c 100644 --- a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c @@ -575,6 +575,9 @@ static void fts_ts_trusted_touch_tvm_vm_mode_disable(struct fts_ts_data *fts_dat pr_debug("vm irq release succeded\n"); fts_release_all_finger(); + pm_runtime_put_sync(fts_data->client->adapter->dev.parent); + fts_ts_trusted_touch_set_tvm_driver_state(fts_data, + TVM_I2C_SESSION_RELEASED); rc = fts_ts_vm_mem_release(fts_data); if (rc) { pr_err("Failed to release mem rc:%d\n", rc); @@ -583,9 +586,6 @@ static void fts_ts_trusted_touch_tvm_vm_mode_disable(struct fts_ts_data *fts_dat fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TVM_IOMEM_RELEASED); } - pm_runtime_put_sync(fts_data->client->adapter->dev.parent); - fts_ts_trusted_touch_set_tvm_driver_state(fts_data, - TVM_I2C_SESSION_RELEASED); fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TRUSTED_TOUCH_TVM_INIT); atomic_set(&fts_data->trusted_touch_enabled, 0); pr_info("trusted touch disabled\n"); @@ -662,16 +662,16 @@ static void fts_ts_trusted_touch_abort_tvm(struct fts_ts_data *fts_data) case TVM_IOMEM_ACCEPTED: case TVM_IRQ_RELEASED: fts_release_all_finger(); + pm_runtime_put_sync(fts_data->client->adapter->dev.parent); + case TVM_I2C_SESSION_RELEASED: rc = fts_ts_vm_mem_release(fts_data); if (rc) pr_err("Failed to release mem rc:%d\n", rc); case TVM_IOMEM_RELEASED: - pm_runtime_put_sync(fts_data->client->adapter->dev.parent); - case TVM_I2C_SESSION_RELEASED: - case TVM_IOMEM_LENT_NOTIFIED: - case TVM_IRQ_LENT_NOTIFIED: case TVM_ALL_RESOURCES_LENT_NOTIFIED: case TRUSTED_TOUCH_TVM_INIT: + case TVM_IRQ_LENT_NOTIFIED: + case TVM_IOMEM_LENT_NOTIFIED: atomic_set(&fts_data->trusted_touch_enabled, 0); } diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.h b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h index 692408855cfd..b6d37a7eabb5 100644 --- a/drivers/input/touchscreen/focaltech_touch/focaltech_core.h +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h @@ -173,8 +173,8 @@ enum trusted_touch_tvm_states { TVM_INTERRUPT_ENABLED, TVM_INTERRUPT_DISABLED, TVM_IRQ_RELEASED, - TVM_IOMEM_RELEASED, TVM_I2C_SESSION_RELEASED, + TVM_IOMEM_RELEASED, TRUSTED_TOUCH_TVM_STATE_MAX };