mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
Merge "input: touchscreen: focaltech: Block resume work on PVM"
This commit is contained in:
commit
bf525affe2
1 changed files with 50 additions and 24 deletions
|
|
@ -102,6 +102,7 @@ static int fts_ts_suspend(struct device *dev);
|
|||
static int fts_ts_resume(struct device *dev);
|
||||
static irqreturn_t fts_irq_handler(int irq, void *data);
|
||||
static int fts_ts_probe_delayed(struct fts_ts_data *fts_data);
|
||||
static int fts_ts_enable_reg(struct fts_ts_data *ts_data, bool enable);
|
||||
|
||||
#ifdef CONFIG_FTS_TRUSTED_TOUCH
|
||||
|
||||
|
|
@ -740,7 +741,6 @@ static void fts_ts_trusted_touch_abort_pvm(struct fts_ts_data *fts_data)
|
|||
case PVM_I2C_RESOURCE_ACQUIRED:
|
||||
case PVM_INTERRUPT_ENABLED:
|
||||
fts_ts_bus_put(fts_data);
|
||||
complete(&fts_data->trusted_touch_powerdown);
|
||||
case TRUSTED_TOUCH_PVM_INIT:
|
||||
case PVM_I2C_RESOURCE_RELEASED:
|
||||
atomic_set(&fts_data->trusted_touch_enabled, 0);
|
||||
|
|
@ -779,6 +779,8 @@ static int fts_ts_bus_get(struct fts_ts_data *fts_data)
|
|||
{
|
||||
int rc = 0;
|
||||
|
||||
reinit_completion(&fts_data->trusted_touch_powerdown);
|
||||
fts_ts_enable_reg(fts_data, true);
|
||||
mutex_lock(&fts_data->fts_clk_io_ctrl_mutex);
|
||||
rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent);
|
||||
if (rc >= 0 && fts_data->core_clk != NULL &&
|
||||
|
|
@ -799,6 +801,8 @@ static void fts_ts_bus_put(struct fts_ts_data *fts_data)
|
|||
fts_ts_clk_disable_unprepare(fts_data);
|
||||
pm_runtime_put_sync(fts_data->client->adapter->dev.parent);
|
||||
mutex_unlock(&fts_data->fts_clk_io_ctrl_mutex);
|
||||
complete(&fts_data->trusted_touch_powerdown);
|
||||
fts_ts_enable_reg(fts_data, false);
|
||||
}
|
||||
|
||||
static struct hh_notify_vmid_desc *fts_ts_vm_get_vmid(hh_vmid_t vmid)
|
||||
|
|
@ -849,7 +853,6 @@ static void fts_trusted_touch_pvm_vm_mode_disable(struct fts_ts_data *fts_data)
|
|||
fts_ts_bus_put(fts_data);
|
||||
fts_ts_trusted_touch_set_pvm_driver_state(fts_data,
|
||||
PVM_I2C_RESOURCE_RELEASED);
|
||||
complete(&fts_data->trusted_touch_powerdown);
|
||||
fts_ts_trusted_touch_set_pvm_driver_state(fts_data,
|
||||
TRUSTED_TOUCH_PVM_INIT);
|
||||
atomic_set(&fts_data->trusted_touch_enabled, 0);
|
||||
|
|
@ -1026,7 +1029,6 @@ static int fts_ts_trusted_touch_pvm_vm_mode_enable(struct fts_ts_data *fts_data)
|
|||
}
|
||||
fts_ts_trusted_touch_set_pvm_driver_state(fts_data, PVM_IRQ_LENT_NOTIFIED);
|
||||
|
||||
reinit_completion(&fts_data->trusted_touch_powerdown);
|
||||
atomic_set(&fts_data->trusted_touch_enabled, 1);
|
||||
pr_debug("trusted touch enabled\n");
|
||||
return rc;
|
||||
|
|
@ -2067,6 +2069,39 @@ static int fts_pinctrl_select_release(struct fts_ts_data *ts)
|
|||
}
|
||||
#endif /* FTS_PINCTRL_EN */
|
||||
|
||||
static int fts_ts_enable_reg(struct fts_ts_data *ts_data, bool enable)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (IS_ERR_OR_NULL(ts_data->vdd)) {
|
||||
FTS_ERROR("vdd is invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
ret = regulator_enable(ts_data->vdd);
|
||||
if (ret)
|
||||
FTS_ERROR("enable vdd regulator failed,ret=%d", ret);
|
||||
|
||||
if (!IS_ERR_OR_NULL(ts_data->vcc_i2c)) {
|
||||
ret = regulator_enable(ts_data->vcc_i2c);
|
||||
if (ret)
|
||||
FTS_ERROR("enable vcc_i2c regulator failed,ret=%d", ret);
|
||||
}
|
||||
} else {
|
||||
ret = regulator_disable(ts_data->vdd);
|
||||
if (ret)
|
||||
FTS_ERROR("disable vdd regulator failed,ret=%d", ret);
|
||||
if (!IS_ERR_OR_NULL(ts_data->vcc_i2c)) {
|
||||
ret = regulator_disable(ts_data->vcc_i2c);
|
||||
if (ret)
|
||||
FTS_ERROR("disable vcc_i2c regulator failed,ret=%d", ret);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int fts_power_source_ctrl(struct fts_ts_data *ts_data, int enable)
|
||||
{
|
||||
int ret = 0;
|
||||
|
|
@ -2082,17 +2117,9 @@ static int fts_power_source_ctrl(struct fts_ts_data *ts_data, int enable)
|
|||
FTS_DEBUG("regulator enable !");
|
||||
gpio_direction_output(ts_data->pdata->reset_gpio, 0);
|
||||
msleep(1);
|
||||
ret = regulator_enable(ts_data->vdd);
|
||||
if (ret) {
|
||||
FTS_ERROR("enable vdd regulator failed,ret=%d", ret);
|
||||
}
|
||||
|
||||
if (!IS_ERR_OR_NULL(ts_data->vcc_i2c)) {
|
||||
ret = regulator_enable(ts_data->vcc_i2c);
|
||||
if (ret) {
|
||||
FTS_ERROR("enable vcc_i2c regulator failed,ret=%d", ret);
|
||||
}
|
||||
}
|
||||
ret = fts_ts_enable_reg(ts_data, true);
|
||||
if (ret)
|
||||
FTS_ERROR("Touch reg enable failed\n");
|
||||
ts_data->power_disabled = false;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2100,16 +2127,9 @@ static int fts_power_source_ctrl(struct fts_ts_data *ts_data, int enable)
|
|||
FTS_DEBUG("regulator disable !");
|
||||
gpio_direction_output(ts_data->pdata->reset_gpio, 0);
|
||||
msleep(1);
|
||||
ret = regulator_disable(ts_data->vdd);
|
||||
if (ret) {
|
||||
FTS_ERROR("disable vdd regulator failed,ret=%d", ret);
|
||||
}
|
||||
if (!IS_ERR_OR_NULL(ts_data->vcc_i2c)) {
|
||||
ret = regulator_disable(ts_data->vcc_i2c);
|
||||
if (ret) {
|
||||
FTS_ERROR("disable vcc_i2c regulator failed,ret=%d", ret);
|
||||
}
|
||||
}
|
||||
ret = fts_ts_enable_reg(ts_data, false);
|
||||
if (ret)
|
||||
FTS_ERROR("Touch reg disable failed");
|
||||
ts_data->power_disabled = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2889,6 +2909,12 @@ static int fts_ts_resume(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ST_TRUSTED_TOUCH
|
||||
if (atomic_read(&ts_data->trusted_touch_enabled))
|
||||
wait_for_completion_interruptible(
|
||||
&ts_data->trusted_touch_powerdown);
|
||||
#endif
|
||||
|
||||
fts_release_all_finger();
|
||||
|
||||
if (!ts_data->ic_info.is_incell) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue