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

Commit a4558366 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "input: touchscreen: focaltech: cancel pending resume work"

parents 8e71903a 11246e21
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -744,6 +744,7 @@ static void fts_ts_trusted_touch_abort_pvm(struct fts_ts_data *fts_data)
	case TRUSTED_TOUCH_PVM_INIT:
	case PVM_I2C_RESOURCE_RELEASED:
		atomic_set(&fts_data->trusted_touch_enabled, 0);
		atomic_set(&fts_data->trusted_touch_underway, 0);
	}

	atomic_set(&fts_data->trusted_touch_abort_status, 0);
@@ -779,6 +780,8 @@ static int fts_ts_bus_get(struct fts_ts_data *fts_data)
{
	int rc = 0;

	cancel_work_sync(&fts_data->suspend_work);
	cancel_work_sync(&fts_data->resume_work);
	reinit_completion(&fts_data->trusted_touch_powerdown);
	fts_ts_enable_reg(fts_data, true);
	mutex_lock(&fts_data->fts_clk_io_ctrl_mutex);
@@ -856,6 +859,7 @@ static void fts_trusted_touch_pvm_vm_mode_disable(struct fts_ts_data *fts_data)
	fts_ts_trusted_touch_set_pvm_driver_state(fts_data,
						TRUSTED_TOUCH_PVM_INIT);
	atomic_set(&fts_data->trusted_touch_enabled, 0);
	atomic_set(&fts_data->trusted_touch_underway, 0);
	return;
error:
	fts_ts_trusted_touch_abort_handler(fts_data,
@@ -993,6 +997,7 @@ static int fts_ts_trusted_touch_pvm_vm_mode_enable(struct fts_ts_data *fts_data)
	int rc = 0;
	struct trusted_touch_vm_info *vm_info = fts_data->vm_info;

	atomic_set(&fts_data->trusted_touch_underway, 1);
	/* i2c session start and resource acquire */
	if (fts_ts_bus_get(fts_data) < 0) {
		FTS_ERROR("fts_ts_bus_get failed\n");
@@ -2864,7 +2869,7 @@ static int fts_ts_suspend(struct device *dev)
		return 0;
	}
#ifdef CONFIG_FTS_TRUSTED_TOUCH
	if (atomic_read(&fts_data->trusted_touch_enabled))
	if (atomic_read(&fts_data->trusted_touch_underway))
		wait_for_completion_interruptible(
			&fts_data->trusted_touch_powerdown);
#endif
@@ -2910,7 +2915,7 @@ static int fts_ts_resume(struct device *dev)
	}

#ifdef CONFIG_ST_TRUSTED_TOUCH
	if (atomic_read(&ts_data->trusted_touch_enabled))
	if (atomic_read(&ts_data->trusted_touch_underway))
		wait_for_completion_interruptible(
			&ts_data->trusted_touch_powerdown);
#endif
+1 −0
Original line number Diff line number Diff line
@@ -295,6 +295,7 @@ struct fts_ts_data {
	struct clk *iface_clk;
	atomic_t trusted_touch_initialized;
	atomic_t trusted_touch_enabled;
	atomic_t trusted_touch_underway;
	atomic_t trusted_touch_event;
	atomic_t trusted_touch_abort_status;
	atomic_t delayed_vm_probe_pending;
+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;