From 96ea71a1c232462e9300e33dbf2b95d27eef36ff Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 7 Jan 2021 01:59:17 +0530 Subject: [PATCH] input: touchscreen: nt36xxx: release i2c session early Release I2C session lock before releasing IO regions in TVM during trusted touch scenario. Change-Id: Ibd3b63e5d084097eb464e3697b8d7d82ea17262e Signed-off-by: Ritesh Kumar --- drivers/input/touchscreen/nt36xxx/nt36xxx.c | 15 ++++++++------- drivers/input/touchscreen/nt36xxx/nt36xxx.h | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx.c b/drivers/input/touchscreen/nt36xxx/nt36xxx.c index a2a450070538..08eaa3d28ace 100644 --- a/drivers/input/touchscreen/nt36xxx/nt36xxx.c +++ b/drivers/input/touchscreen/nt36xxx/nt36xxx.c @@ -563,6 +563,10 @@ static void nvt_ts_trusted_touch_tvm_vm_mode_disable(struct nvt_ts_data *ts) pr_debug("vm irq release succeded\n"); + pm_runtime_put_sync(ts->client->adapter->dev.parent); + nvt_ts_trusted_touch_set_tvm_driver_state(ts, + TVM_I2C_SESSION_RELEASED); + rc = nvt_ts_vm_mem_release(ts); if (rc) { pr_err("Failed to release mem rc:%d\n", rc); @@ -571,9 +575,6 @@ static void nvt_ts_trusted_touch_tvm_vm_mode_disable(struct nvt_ts_data *ts) nvt_ts_trusted_touch_set_tvm_driver_state(ts, TVM_IOMEM_RELEASED); } - pm_runtime_put_sync(ts->client->adapter->dev.parent); - nvt_ts_trusted_touch_set_tvm_driver_state(ts, - TVM_I2C_SESSION_RELEASED); nvt_ts_trusted_touch_set_tvm_driver_state(ts, TRUSTED_TOUCH_TVM_INIT); atomic_set(&ts->trusted_touch_enabled, 0); pr_info("trusted touch disabled\n"); @@ -649,16 +650,16 @@ static void nvt_ts_trusted_touch_abort_tvm(struct nvt_ts_data *ts) case TVM_I2C_SESSION_ACQUIRED: case TVM_IOMEM_ACCEPTED: case TVM_IRQ_RELEASED: + pm_runtime_put_sync(ts->client->adapter->dev.parent); + case TVM_I2C_SESSION_RELEASED: rc = nvt_ts_vm_mem_release(ts); if (rc) pr_err("Failed to release mem rc:%d\n", rc); case TVM_IOMEM_RELEASED: - pm_runtime_put_sync(ts->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(&ts->trusted_touch_enabled, 0); } diff --git a/drivers/input/touchscreen/nt36xxx/nt36xxx.h b/drivers/input/touchscreen/nt36xxx/nt36xxx.h index 7762b4e1a759..8578e85338d3 100644 --- a/drivers/input/touchscreen/nt36xxx/nt36xxx.h +++ b/drivers/input/touchscreen/nt36xxx/nt36xxx.h @@ -124,8 +124,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 };