input: touchscreen: focaltech: use proper dev

When enable touch over SPI, choose the right device
and avoid wrong pointers.

Change-Id: I9198701fed915da22518430bba3c3cb1943f937e
Signed-off-by: Fei Mao <feim1@codeaurora.org>
This commit is contained in:
Fei Mao 2021-01-22 19:32:35 +08:00 • committed by Gerrit - the friendly Code Review server
commit 93f39379e6
3 changed files with 53 additions and 63 deletions

View file

@ -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);
@ -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 */
rc = pm_runtime_get_sync(fts_data->client->adapter->dev.parent);
/* 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;
@ -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();
pm_runtime_put_sync(fts_data->client->adapter->dev.parent);
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);
@ -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();
pm_runtime_put_sync(fts_data->client->adapter->dev.parent);
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)
@ -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);
@ -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)
@ -1154,7 +1180,7 @@ fail:
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;
@ -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);
@ -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;
@ -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__);
}
@ -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);
@ -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;

View file

@ -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));
@ -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);
@ -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));
@ -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;

View file

@ -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) {
@ -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);
@ -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){
@ -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);