Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e28fcc60 authored by Shashank Babu Chinta Venkata's avatar Shashank Babu Chinta Venkata
Browse files

input: touchscreen: st: cancel pending resume work



Before initiating trusted touch, cancel any pending
suspend or resume work and wait for already scheduled worker
to finish.

Change-Id: I9eb89a76e7238bf2ce18d319b9c50f2da784c703
Signed-off-by: default avatarShashank Babu Chinta Venkata <sbchin@codeaurora.org>
parent 9ddceddf
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -769,6 +769,7 @@ static void fts_trusted_touch_abort_pvm(struct fts_ts_info *info)
	case TRUSTED_TOUCH_PVM_INIT:
	case PVM_I2C_RESOURCE_RELEASED:
		atomic_set(&info->trusted_touch_enabled, 0);
		atomic_set(&info->trusted_touch_underway, 0);
	}

	atomic_set(&info->trusted_touch_abort_status, 0);
@@ -807,7 +808,8 @@ static int fts_bus_get(struct fts_ts_info *info)
{
	int rc = 0;

	flush_workqueue(info->event_wq);
	cancel_work_sync(&info->suspend_work);
	cancel_work_sync(&info->resume_work);
	reinit_completion(&info->trusted_touch_powerdown);
	fts_enable_reg(info, true);
	mutex_lock(&info->fts_clk_io_ctrl_mutex);
@@ -884,6 +886,7 @@ static void fts_trusted_touch_pvm_vm_mode_disable(struct fts_ts_info *info)
	fts_trusted_touch_set_pvm_driver_state(info,
						TRUSTED_TOUCH_PVM_INIT);
	atomic_set(&info->trusted_touch_enabled, 0);
	atomic_set(&info->trusted_touch_underway, 0);
	return;
error:
	fts_trusted_touch_abort_handler(info,
@@ -1018,6 +1021,8 @@ static int fts_trusted_touch_pvm_vm_mode_enable(struct fts_ts_info *info)
	int rc = 0;
	struct trusted_touch_vm_info *vm_info = info->vm_info;

	atomic_set(&info->trusted_touch_underway, 1);

	/* i2c session start and resource acquire */
	if (fts_bus_get(info) < 0) {
		dev_err(&info->client->dev, "fts_bus_get failed\n");
@@ -5350,7 +5355,7 @@ static void fts_resume_work(struct work_struct *work)
	info = container_of(work, struct fts_ts_info, resume_work);

#ifdef CONFIG_ST_TRUSTED_TOUCH
	if (atomic_read(&info->trusted_touch_enabled))
	if (atomic_read(&info->trusted_touch_underway))
		wait_for_completion_interruptible(
				&info->trusted_touch_powerdown);
#endif
@@ -5385,7 +5390,7 @@ static void fts_suspend_work(struct work_struct *work)
	info = container_of(work, struct fts_ts_info, suspend_work);

#ifdef CONFIG_ST_TRUSTED_TOUCH
	if (atomic_read(&info->trusted_touch_enabled))
	if (atomic_read(&info->trusted_touch_underway))
		wait_for_completion_interruptible(
				&info->trusted_touch_powerdown);
#endif
+1 −0
Original line number Diff line number Diff line
@@ -416,6 +416,7 @@ struct fts_ts_info {
	struct clk *core_clk;
	struct clk *iface_clk;
	atomic_t trusted_touch_initialized;
	atomic_t trusted_touch_underway;
	atomic_t trusted_touch_enabled;
	atomic_t trusted_touch_event;
	atomic_t trusted_touch_abort_status;