summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2024-08-17 17:05:00 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2026-03-24 21:14:23 -0700
commitdf2e75e070a82fc02eac99743d0823972da293b1 (patch)
treeeccfbf3af09cb61d97b8059292fce5777f63d40d
parenta0a92414af42b79f4e2829adfd55478a8e74eb33 (diff)
Input: edt-ft5x06 - use guard notation when acquiring mutex
Guard notation simplifies code. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c87
1 files changed, 31 insertions, 56 deletions
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index d0ab644be006..ba8ff65f7ea6 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -380,16 +380,13 @@ static ssize_t edt_ft5x06_setting_show(struct device *dev,
container_of(dattr, struct edt_ft5x06_attribute, dattr);
u8 *field = (u8 *)tsdata + attr->field_offset;
unsigned int val;
- size_t count = 0;
- int error = 0;
+ int error;
u8 addr;
- mutex_lock(&tsdata->mutex);
+ guard(mutex)(&tsdata->mutex);
- if (tsdata->factory_mode) {
- error = -EIO;
- goto out;
- }
+ if (tsdata->factory_mode)
+ return -EIO;
switch (tsdata->version) {
case EDT_M06:
@@ -407,8 +404,7 @@ static ssize_t edt_ft5x06_setting_show(struct device *dev,
break;
default:
- error = -ENODEV;
- goto out;
+ return -ENODEV;
}
if (addr != NO_REGISTER) {
@@ -417,7 +413,7 @@ static ssize_t edt_ft5x06_setting_show(struct device *dev,
dev_err(&tsdata->client->dev,
"Failed to fetch attribute %s, error %d\n",
dattr->attr.name, error);
- goto out;
+ return error;
}
} else {
val = *field;
@@ -430,10 +426,7 @@ static ssize_t edt_ft5x06_setting_show(struct device *dev,
*field = val;
}
- count = sysfs_emit(buf, "%d\n", val);
-out:
- mutex_unlock(&tsdata->mutex);
- return error ?: count;
+ return sysfs_emit(buf, "%d\n", val);
}
static ssize_t edt_ft5x06_setting_store(struct device *dev,
@@ -449,21 +442,17 @@ static ssize_t edt_ft5x06_setting_store(struct device *dev,
int error;
u8 addr;
- mutex_lock(&tsdata->mutex);
+ guard(mutex)(&tsdata->mutex);
- if (tsdata->factory_mode) {
- error = -EIO;
- goto out;
- }
+ if (tsdata->factory_mode)
+ return -EIO;
error = kstrtouint(buf, 0, &val);
if (error)
- goto out;
+ return error;
- if (val < attr->limit_low || val > attr->limit_high) {
- error = -ERANGE;
- goto out;
- }
+ if (val < attr->limit_low || val > attr->limit_high)
+ return -ERANGE;
switch (tsdata->version) {
case EDT_M06:
@@ -481,8 +470,7 @@ static ssize_t edt_ft5x06_setting_store(struct device *dev,
break;
default:
- error = -ENODEV;
- goto out;
+ return -ENODEV;
}
if (addr != NO_REGISTER) {
@@ -491,14 +479,12 @@ static ssize_t edt_ft5x06_setting_store(struct device *dev,
dev_err(&tsdata->client->dev,
"Failed to update attribute %s, error: %d\n",
dattr->attr.name, error);
- goto out;
+ return error;
}
}
*field = val;
-out:
- mutex_unlock(&tsdata->mutex);
- return error ?: count;
+ return count;
}
/* m06, m09: range 0-31, m12: range 0-5 */
@@ -714,21 +700,17 @@ static int edt_ft5x06_debugfs_mode_get(void *data, u64 *mode)
static int edt_ft5x06_debugfs_mode_set(void *data, u64 mode)
{
struct edt_ft5x06_ts_data *tsdata = data;
- int retval = 0;
if (mode > 1)
return -ERANGE;
- mutex_lock(&tsdata->mutex);
+ guard(mutex)(&tsdata->mutex);
- if (mode != tsdata->factory_mode) {
- retval = mode ? edt_ft5x06_factory_mode(tsdata) :
- edt_ft5x06_work_mode(tsdata);
- }
-
- mutex_unlock(&tsdata->mutex);
+ if (mode == tsdata->factory_mode)
+ return 0;
- return retval;
+ return mode ? edt_ft5x06_factory_mode(tsdata) :
+ edt_ft5x06_work_mode(tsdata);
};
DEFINE_SIMPLE_ATTRIBUTE(debugfs_mode_fops, edt_ft5x06_debugfs_mode_get,
@@ -750,18 +732,16 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
if (*off < 0 || *off >= tsdata->raw_bufsize)
return 0;
- mutex_lock(&tsdata->mutex);
+ guard(mutex)(&tsdata->mutex);
- if (!tsdata->factory_mode || !tsdata->raw_buffer) {
- error = -EIO;
- goto out;
- }
+ if (!tsdata->factory_mode || !tsdata->raw_buffer)
+ return -EIO;
error = regmap_write(tsdata->regmap, 0x08, 0x01);
if (error) {
dev_err(&client->dev,
"failed to write 0x08 register, error %d\n", error);
- goto out;
+ return error;
}
do {
@@ -771,7 +751,7 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
dev_err(&client->dev,
"failed to read 0x08 register, error %d\n",
error);
- goto out;
+ return error;
}
if (val == 1)
@@ -781,8 +761,7 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
if (retries == 0) {
dev_err(&client->dev,
"timed out waiting for register to settle\n");
- error = -ETIMEDOUT;
- goto out;
+ return -ETIMEDOUT;
}
rdbuf = tsdata->raw_buffer;
@@ -792,21 +771,17 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
rdbuf[0] = i; /* column index */
error = regmap_bulk_read(tsdata->regmap, 0xf5, rdbuf, colbytes);
if (error)
- goto out;
+ return error;
rdbuf += colbytes;
}
read = min_t(size_t, count, tsdata->raw_bufsize - *off);
- if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
- error = -EFAULT;
- goto out;
- }
+ if (copy_to_user(buf, tsdata->raw_buffer + *off, read))
+ return -EFAULT;
*off += read;
-out:
- mutex_unlock(&tsdata->mutex);
- return error ?: read;
+ return read;
};
static const struct file_operations debugfs_raw_data_fops = {