Loading drivers/input/touchscreen/focaltech_touch/focaltech_core.c +45 −19 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ static int fts_ts_populate_vm_info(struct fts_ts_data *fts_data) { int rc = 0; struct trusted_touch_vm_info *vm_info; struct device_node *np = fts_data->client->dev.of_node; struct device_node *np = fts_data->dev->of_node; int num_regs, num_sizes = 0; vm_info = kzalloc(sizeof(struct trusted_touch_vm_info), GFP_KERNEL); Loading Loading @@ -407,8 +407,12 @@ static void fts_ts_trusted_touch_tvm_vm_mode_enable(struct fts_ts_data *fts_data } fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TVM_IOMEM_ACCEPTED); /* Initiate i2c session on tvm */ /* Initiate session on tvm */ if (fts_data->bus_type == BUS_TYPE_I2C) rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent); else rc = pm_runtime_get_sync(fts_data->spi->master->dev.parent); if (rc < 0) { pr_err("failed to get sync rc:%d\n", rc); goto acl_fail; Loading Loading @@ -581,7 +585,12 @@ 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(); if (fts_data->bus_type == BUS_TYPE_I2C) pm_runtime_put_sync(fts_data->client->adapter->dev.parent); else pm_runtime_put_sync(fts_data->spi->master->dev.parent); fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TVM_I2C_SESSION_RELEASED); rc = fts_ts_vm_mem_release(fts_data); Loading Loading @@ -668,7 +677,10 @@ 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(); if (fts_data->bus_type == BUS_TYPE_I2C) pm_runtime_put_sync(fts_data->client->adapter->dev.parent); else pm_runtime_put_sync(fts_data->spi->master->dev.parent); case TVM_I2C_SESSION_RELEASED: rc = fts_ts_vm_mem_release(fts_data); if (rc) Loading Loading @@ -779,30 +791,44 @@ static void fts_ts_clk_disable_unprepare(struct fts_ts_data *fts_data) static int fts_ts_bus_get(struct fts_ts_data *fts_data) { int rc = 0; struct device *dev = NULL; 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); if (fts_data->bus_type == BUS_TYPE_I2C) dev = fts_data->client->adapter->dev.parent; else dev = fts_data->spi->master->dev.parent; mutex_lock(&fts_data->fts_clk_io_ctrl_mutex); rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent); rc = pm_runtime_get_sync(dev); if (rc >= 0 && fts_data->core_clk != NULL && fts_data->iface_clk != NULL) { rc = fts_ts_clk_prepare_enable(fts_data); if (rc) pm_runtime_put_sync( fts_data->client->adapter->dev.parent); pm_runtime_put_sync(dev); } mutex_unlock(&fts_data->fts_clk_io_ctrl_mutex); return rc; } static void fts_ts_bus_put(struct fts_ts_data *fts_data) { struct device *dev = NULL; if (fts_data->bus_type == BUS_TYPE_I2C) dev = fts_data->client->adapter->dev.parent; else dev = fts_data->spi->master->dev.parent; mutex_lock(&fts_data->fts_clk_io_ctrl_mutex); if (fts_data->core_clk != NULL && fts_data->iface_clk != NULL) fts_ts_clk_disable_unprepare(fts_data); pm_runtime_put_sync(fts_data->client->adapter->dev.parent); pm_runtime_put_sync(dev); mutex_unlock(&fts_data->fts_clk_io_ctrl_mutex); complete(&fts_data->trusted_touch_powerdown); fts_ts_enable_reg(fts_data, false); Loading Loading @@ -1088,7 +1114,7 @@ int fts_ts_handle_trusted_touch_pvm(struct fts_ts_data *fts_data, int value) static void fts_ts_trusted_touch_event_notify(struct fts_ts_data *fts_data, int event) { atomic_set(&fts_data->trusted_touch_event, event); sysfs_notify(&fts_data->client->dev.kobj, NULL, "trusted_touch_event"); sysfs_notify(&fts_data->dev->kobj, NULL, "trusted_touch_event"); } static void fts_ts_trusted_touch_abort_handler(struct fts_ts_data *fts_data, int error) Loading Loading @@ -1154,7 +1180,7 @@ static int fts_ts_vm_init(struct fts_ts_data *fts_data) static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) { struct device_node *np = fts_data->client->dev.of_node; struct device_node *np = fts_data->dev->of_node; int rc = 0; const char *selection; const char *environment; Loading @@ -1162,7 +1188,7 @@ static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) rc = of_property_read_string(np, "focaltech,trusted-touch-mode", &selection); if (rc) { dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: No trusted touch mode selection made\n", __func__); atomic_set(&fts_data->trusted_touch_mode, TRUSTED_TOUCH_MODE_NONE); Loading @@ -1182,7 +1208,7 @@ static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) rc = of_property_read_string(np, "focaltech,touch-environment", &environment); if (rc) { dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: No trusted touch mode environment\n", __func__); } fts_data->touch_environment = environment; Loading @@ -1204,19 +1230,19 @@ static void fts_ts_trusted_touch_init(struct fts_ts_data *fts_data) init_completion(&fts_data->trusted_touch_powerdown); /* Get clocks */ fts_data->core_clk = devm_clk_get(fts_data->client->dev.parent, fts_data->core_clk = devm_clk_get(fts_data->dev->parent, "m-ahb"); if (IS_ERR(fts_data->core_clk)) { fts_data->core_clk = NULL; dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: core_clk is not defined\n", __func__); } fts_data->iface_clk = devm_clk_get(fts_data->client->dev.parent, fts_data->iface_clk = devm_clk_get(fts_data->dev->parent, "se-clk"); if (IS_ERR(fts_data->iface_clk)) { fts_data->iface_clk = NULL; dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: iface_clk is not defined\n", __func__); } Loading Loading @@ -2914,7 +2940,8 @@ static int fts_ts_resume(struct device *dev) return 0; } #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH if (atomic_read(&ts_data->trusted_touch_underway)) wait_for_completion_interruptible( &ts_data->trusted_touch_powerdown); Loading Loading @@ -3114,7 +3141,6 @@ static void __exit fts_ts_i2c_exit(void) i2c_del_driver(&fts_ts_i2c_driver); } static int fts_ts_spi_probe(struct spi_device *spi) { int ret = 0; Loading drivers/input/touchscreen/focaltech_touch/focaltech_ex_fun.c +4 −40 Original line number Diff line number Diff line Loading @@ -1071,17 +1071,7 @@ static ssize_t fts_log_level_store( static ssize_t trusted_touch_enable_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; if (!client) return scnprintf(buf, PAGE_SIZE, "client is null\n"); info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return scnprintf(buf, PAGE_SIZE, "info is null\n"); } struct fts_ts_data *info = fts_data; return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&info->trusted_touch_enabled)); Loading @@ -1090,18 +1080,10 @@ static ssize_t trusted_touch_enable_show(struct device *dev, static ssize_t trusted_touch_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; struct fts_ts_data *info = fts_data; unsigned long value; int err = 0; if (!client) return -EIO; info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return -EIO; } if (count > 2) return -EINVAL; err = kstrtoul(buf, 10, &value); Loading Loading @@ -1131,17 +1113,7 @@ static ssize_t trusted_touch_enable_store(struct device *dev, static ssize_t trusted_touch_event_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; if (!client) return scnprintf(buf, PAGE_SIZE, "client is null\n"); info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return scnprintf(buf, PAGE_SIZE, "info is null\n"); } struct fts_ts_data *info = fts_data; return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&info->trusted_touch_event)); Loading @@ -1150,18 +1122,10 @@ static ssize_t trusted_touch_event_show(struct device *dev, static ssize_t trusted_touch_event_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; struct fts_ts_data *info = fts_data; unsigned long value; int err = 0; if (!client) return -EIO; info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return -EIO; } if (count > 2) return -EINVAL; Loading drivers/input/touchscreen/focaltech_touch/focaltech_i2c.c +4 −4 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ static int fts_i2c_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen) for (i = 0; i < I2C_RETRY_NUMBER; i++) { ret = i2c_transfer(ts_data->client->adapter, msg, msg_num); if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM if (atomic_read(&ts_data->trusted_touch_enabled) && ret == -ECONNRESET) { Loading @@ -122,7 +122,7 @@ static int fts_i2c_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen) } if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM pr_err("initiating abort due to i2c xfer failure\n"); fts_ts_trusted_touch_tvm_i2c_failure_report(ts_data); Loading Loading @@ -156,7 +156,7 @@ static int fts_i2c_write(u8 *writebuf, u32 writelen) for (i = 0; i < I2C_RETRY_NUMBER; i++) { ret = i2c_transfer(ts_data->client->adapter, &msgs, 1); if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM if (atomic_read(&ts_data->trusted_touch_enabled) && ret == -ECONNRESET){ Loading @@ -175,7 +175,7 @@ static int fts_i2c_write(u8 *writebuf, u32 writelen) } if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM pr_err("initiating abort due to i2c xfer failure\n"); fts_ts_trusted_touch_tvm_i2c_failure_report(ts_data); Loading Loading
drivers/input/touchscreen/focaltech_touch/focaltech_core.c +45 −19 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ static int fts_ts_populate_vm_info(struct fts_ts_data *fts_data) { int rc = 0; struct trusted_touch_vm_info *vm_info; struct device_node *np = fts_data->client->dev.of_node; struct device_node *np = fts_data->dev->of_node; int num_regs, num_sizes = 0; vm_info = kzalloc(sizeof(struct trusted_touch_vm_info), GFP_KERNEL); Loading Loading @@ -407,8 +407,12 @@ static void fts_ts_trusted_touch_tvm_vm_mode_enable(struct fts_ts_data *fts_data } fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TVM_IOMEM_ACCEPTED); /* Initiate i2c session on tvm */ /* Initiate session on tvm */ if (fts_data->bus_type == BUS_TYPE_I2C) rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent); else rc = pm_runtime_get_sync(fts_data->spi->master->dev.parent); if (rc < 0) { pr_err("failed to get sync rc:%d\n", rc); goto acl_fail; Loading Loading @@ -581,7 +585,12 @@ 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(); if (fts_data->bus_type == BUS_TYPE_I2C) pm_runtime_put_sync(fts_data->client->adapter->dev.parent); else pm_runtime_put_sync(fts_data->spi->master->dev.parent); fts_ts_trusted_touch_set_tvm_driver_state(fts_data, TVM_I2C_SESSION_RELEASED); rc = fts_ts_vm_mem_release(fts_data); Loading Loading @@ -668,7 +677,10 @@ 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(); if (fts_data->bus_type == BUS_TYPE_I2C) pm_runtime_put_sync(fts_data->client->adapter->dev.parent); else pm_runtime_put_sync(fts_data->spi->master->dev.parent); case TVM_I2C_SESSION_RELEASED: rc = fts_ts_vm_mem_release(fts_data); if (rc) Loading Loading @@ -779,30 +791,44 @@ static void fts_ts_clk_disable_unprepare(struct fts_ts_data *fts_data) static int fts_ts_bus_get(struct fts_ts_data *fts_data) { int rc = 0; struct device *dev = NULL; 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); if (fts_data->bus_type == BUS_TYPE_I2C) dev = fts_data->client->adapter->dev.parent; else dev = fts_data->spi->master->dev.parent; mutex_lock(&fts_data->fts_clk_io_ctrl_mutex); rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent); rc = pm_runtime_get_sync(dev); if (rc >= 0 && fts_data->core_clk != NULL && fts_data->iface_clk != NULL) { rc = fts_ts_clk_prepare_enable(fts_data); if (rc) pm_runtime_put_sync( fts_data->client->adapter->dev.parent); pm_runtime_put_sync(dev); } mutex_unlock(&fts_data->fts_clk_io_ctrl_mutex); return rc; } static void fts_ts_bus_put(struct fts_ts_data *fts_data) { struct device *dev = NULL; if (fts_data->bus_type == BUS_TYPE_I2C) dev = fts_data->client->adapter->dev.parent; else dev = fts_data->spi->master->dev.parent; mutex_lock(&fts_data->fts_clk_io_ctrl_mutex); if (fts_data->core_clk != NULL && fts_data->iface_clk != NULL) fts_ts_clk_disable_unprepare(fts_data); pm_runtime_put_sync(fts_data->client->adapter->dev.parent); pm_runtime_put_sync(dev); mutex_unlock(&fts_data->fts_clk_io_ctrl_mutex); complete(&fts_data->trusted_touch_powerdown); fts_ts_enable_reg(fts_data, false); Loading Loading @@ -1088,7 +1114,7 @@ int fts_ts_handle_trusted_touch_pvm(struct fts_ts_data *fts_data, int value) static void fts_ts_trusted_touch_event_notify(struct fts_ts_data *fts_data, int event) { atomic_set(&fts_data->trusted_touch_event, event); sysfs_notify(&fts_data->client->dev.kobj, NULL, "trusted_touch_event"); sysfs_notify(&fts_data->dev->kobj, NULL, "trusted_touch_event"); } static void fts_ts_trusted_touch_abort_handler(struct fts_ts_data *fts_data, int error) Loading Loading @@ -1154,7 +1180,7 @@ static int fts_ts_vm_init(struct fts_ts_data *fts_data) static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) { struct device_node *np = fts_data->client->dev.of_node; struct device_node *np = fts_data->dev->of_node; int rc = 0; const char *selection; const char *environment; Loading @@ -1162,7 +1188,7 @@ static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) rc = of_property_read_string(np, "focaltech,trusted-touch-mode", &selection); if (rc) { dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: No trusted touch mode selection made\n", __func__); atomic_set(&fts_data->trusted_touch_mode, TRUSTED_TOUCH_MODE_NONE); Loading @@ -1182,7 +1208,7 @@ static void fts_ts_dt_parse_trusted_touch_info(struct fts_ts_data *fts_data) rc = of_property_read_string(np, "focaltech,touch-environment", &environment); if (rc) { dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: No trusted touch mode environment\n", __func__); } fts_data->touch_environment = environment; Loading @@ -1204,19 +1230,19 @@ static void fts_ts_trusted_touch_init(struct fts_ts_data *fts_data) init_completion(&fts_data->trusted_touch_powerdown); /* Get clocks */ fts_data->core_clk = devm_clk_get(fts_data->client->dev.parent, fts_data->core_clk = devm_clk_get(fts_data->dev->parent, "m-ahb"); if (IS_ERR(fts_data->core_clk)) { fts_data->core_clk = NULL; dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: core_clk is not defined\n", __func__); } fts_data->iface_clk = devm_clk_get(fts_data->client->dev.parent, fts_data->iface_clk = devm_clk_get(fts_data->dev->parent, "se-clk"); if (IS_ERR(fts_data->iface_clk)) { fts_data->iface_clk = NULL; dev_warn(&fts_data->client->dev, dev_warn(fts_data->dev, "%s: iface_clk is not defined\n", __func__); } Loading Loading @@ -2914,7 +2940,8 @@ static int fts_ts_resume(struct device *dev) return 0; } #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH if (atomic_read(&ts_data->trusted_touch_underway)) wait_for_completion_interruptible( &ts_data->trusted_touch_powerdown); Loading Loading @@ -3114,7 +3141,6 @@ static void __exit fts_ts_i2c_exit(void) i2c_del_driver(&fts_ts_i2c_driver); } static int fts_ts_spi_probe(struct spi_device *spi) { int ret = 0; Loading
drivers/input/touchscreen/focaltech_touch/focaltech_ex_fun.c +4 −40 Original line number Diff line number Diff line Loading @@ -1071,17 +1071,7 @@ static ssize_t fts_log_level_store( static ssize_t trusted_touch_enable_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; if (!client) return scnprintf(buf, PAGE_SIZE, "client is null\n"); info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return scnprintf(buf, PAGE_SIZE, "info is null\n"); } struct fts_ts_data *info = fts_data; return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&info->trusted_touch_enabled)); Loading @@ -1090,18 +1080,10 @@ static ssize_t trusted_touch_enable_show(struct device *dev, static ssize_t trusted_touch_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; struct fts_ts_data *info = fts_data; unsigned long value; int err = 0; if (!client) return -EIO; info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return -EIO; } if (count > 2) return -EINVAL; err = kstrtoul(buf, 10, &value); Loading Loading @@ -1131,17 +1113,7 @@ static ssize_t trusted_touch_enable_store(struct device *dev, static ssize_t trusted_touch_event_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; if (!client) return scnprintf(buf, PAGE_SIZE, "client is null\n"); info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return scnprintf(buf, PAGE_SIZE, "info is null\n"); } struct fts_ts_data *info = fts_data; return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&info->trusted_touch_event)); Loading @@ -1150,18 +1122,10 @@ static ssize_t trusted_touch_event_show(struct device *dev, static ssize_t trusted_touch_event_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); struct fts_ts_data *info; struct fts_ts_data *info = fts_data; unsigned long value; int err = 0; if (!client) return -EIO; info = i2c_get_clientdata(client); if (!info) { FTS_ERROR("info is null\n"); return -EIO; } if (count > 2) return -EINVAL; Loading
drivers/input/touchscreen/focaltech_touch/focaltech_i2c.c +4 −4 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ static int fts_i2c_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen) for (i = 0; i < I2C_RETRY_NUMBER; i++) { ret = i2c_transfer(ts_data->client->adapter, msg, msg_num); if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM if (atomic_read(&ts_data->trusted_touch_enabled) && ret == -ECONNRESET) { Loading @@ -122,7 +122,7 @@ static int fts_i2c_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen) } if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM pr_err("initiating abort due to i2c xfer failure\n"); fts_ts_trusted_touch_tvm_i2c_failure_report(ts_data); Loading Loading @@ -156,7 +156,7 @@ static int fts_i2c_write(u8 *writebuf, u32 writelen) for (i = 0; i < I2C_RETRY_NUMBER; i++) { ret = i2c_transfer(ts_data->client->adapter, &msgs, 1); if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM if (atomic_read(&ts_data->trusted_touch_enabled) && ret == -ECONNRESET){ Loading @@ -175,7 +175,7 @@ static int fts_i2c_write(u8 *writebuf, u32 writelen) } if (ret < 0) { #ifdef CONFIG_ST_TRUSTED_TOUCH #ifdef CONFIG_FTS_TRUSTED_TOUCH #ifdef CONFIG_ARCH_QTI_VM pr_err("initiating abort due to i2c xfer failure\n"); fts_ts_trusted_touch_tvm_i2c_failure_report(ts_data); Loading