#include <linux/acpi.h>
#include <linux/bitmap.h>
+#include <linux/cleanup.h>
#include <linux/dmi.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/consumer.h>
if (reg == CY8C95X0_PORTSEL)
return -EINVAL;
- mutex_lock(&chip->i2c_lock);
-
/* Registers behind the PORTSEL mux have their own range in regmap */
if (cy8c95x0_muxed_register(reg)) {
off = CY8C95X0_MUX_REGMAP_TO_OFFSET(reg, port);
else
off = reg;
}
+ guard(mutex)(&chip->i2c_lock);
ret = regmap_update_bits_base(chip->regmap, off, mask, val, change, async, force);
if (ret < 0)
- goto out;
+ return ret;
/* Update the cache when a WC bit is written */
if (cy8c95x0_wc_register(reg) && (mask & val)) {
regcache_cache_only(chip->regmap, false);
}
}
-out:
- mutex_unlock(&chip->i2c_lock);
return ret;
}
{
int off, ret;
- mutex_lock(&chip->i2c_lock);
-
/* Registers behind the PORTSEL mux have their own range in regmap */
if (cy8c95x0_muxed_register(reg)) {
off = CY8C95X0_MUX_REGMAP_TO_OFFSET(reg, port);
else
off = reg;
}
+ guard(mutex)(&chip->i2c_lock);
ret = regmap_read(chip->regmap, off, read_val);
- mutex_unlock(&chip->i2c_lock);
-
return ret;
}