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:
break;
default:
- error = -ENODEV;
- goto out;
+ return -ENODEV;
}
if (addr != NO_REGISTER) {
dev_err(&tsdata->client->dev,
"Failed to fetch attribute %s, error %d\n",
dattr->attr.name, error);
- goto out;
+ return error;
}
} else {
val = *field;
*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,
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:
break;
default:
- error = -ENODEV;
- goto out;
+ return -ENODEV;
}
if (addr != NO_REGISTER) {
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 */
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,
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 {
dev_err(&client->dev,
"failed to read 0x08 register, error %d\n",
error);
- goto out;
+ return error;
}
if (val == 1)
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;
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 = {