···1010#include <linux/delay.h>1111#include <linux/hwmon.h>1212#include <linux/i2c.h>1313-#include <linux/mutex.h>1413#include <linux/of_device.h>1514#include <linux/regmap.h>1615#include <linux/regulator/consumer.h>···9899 /*99100 * Prevent simultaneous access to the i2c client.100101 */101101- struct mutex lock;102102 struct regmap *regmap;103103 bool enable;104104 unsigned int resolution;···121123 * Before the Temperature Threshold Alarm, Alarm Hysteresis Threshold122124 * and Resolution bits from Configuration register are changed over I2C,123125 * the part must be in shutdown mode.124124- *125125- * Mutex is used to ensure, that some other process doesn't change the126126- * configuration register.127126 */128128- mutex_lock(&st->lock);129129-130127 if (!st->enable) {131128 if (!mask)132132- ret = regmap_write(st->regmap, reg, val);133133- else134134- ret = regmap_update_bits(st->regmap, reg, mask, val);135135- goto unlock;129129+ return regmap_write(st->regmap, reg, val);130130+ return regmap_update_bits(st->regmap, reg, mask, val);136131 }137132138133 ret = regmap_read(st->regmap, MAX31827_CONFIGURATION_REG, &cfg);139134 if (ret)140140- goto unlock;135135+ return ret;141136142137 cnv_rate = MAX31827_CONFIGURATION_CNV_RATE_MASK & cfg;143138 cfg = cfg & ~(MAX31827_CONFIGURATION_1SHOT_MASK |144139 MAX31827_CONFIGURATION_CNV_RATE_MASK);145140 ret = regmap_write(st->regmap, MAX31827_CONFIGURATION_REG, cfg);146141 if (ret)147147- goto unlock;142142+ return ret;148143149144 if (!mask)150145 ret = regmap_write(st->regmap, reg, val);···145154 ret = regmap_update_bits(st->regmap, reg, mask, val);146155147156 if (ret)148148- goto unlock;157157+ return ret;149158150150- ret = regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,151151- MAX31827_CONFIGURATION_CNV_RATE_MASK,152152- cnv_rate);153153-154154-unlock:155155- mutex_unlock(&st->lock);156156- return ret;159159+ return regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,160160+ MAX31827_CONFIGURATION_CNV_RATE_MASK,161161+ cnv_rate);157162}158163159164static int write_alarm_val(struct max31827_state *st, unsigned int reg,···210223211224 break;212225 case hwmon_temp_input:213213- mutex_lock(&st->lock);214214-215226 if (!st->enable) {216216- /*217217- * This operation requires mutex protection,218218- * because the chip configuration should not219219- * be changed during the conversion process.220220- */221221-222227 ret = regmap_update_bits(st->regmap,223228 MAX31827_CONFIGURATION_REG,224229 MAX31827_CONFIGURATION_1SHOT_MASK,225230 1);226226- if (ret) {227227- mutex_unlock(&st->lock);231231+ if (ret)228232 return ret;229229- }230233 msleep(max31827_conv_times[st->resolution]);231234 }232235···230253 usleep_range(15000, 20000);231254232255 ret = regmap_read(st->regmap, MAX31827_T_REG, &uval);233233-234234- mutex_unlock(&st->lock);235256236257 if (ret)237258 break;···327352 if (val >> 1)328353 return -EINVAL;329354330330- mutex_lock(&st->lock);331355 /**332356 * The chip should not be enabled while a conversion is333357 * performed. Neither should the chip be enabled when···335361336362 st->enable = val;337363338338- ret = regmap_update_bits(st->regmap,339339- MAX31827_CONFIGURATION_REG,340340- MAX31827_CONFIGURATION_1SHOT_MASK |341341- MAX31827_CONFIGURATION_CNV_RATE_MASK,342342- MAX31827_DEVICE_ENABLE(val));343343-344344- mutex_unlock(&st->lock);345345-346346- return ret;364364+ return regmap_update_bits(st->regmap,365365+ MAX31827_CONFIGURATION_REG,366366+ MAX31827_CONFIGURATION_1SHOT_MASK |367367+ MAX31827_CONFIGURATION_CNV_RATE_MASK,368368+ MAX31827_DEVICE_ENABLE(val));347369348370 case hwmon_temp_max:349371 return write_alarm_val(st, MAX31827_TH_REG, val);···592622 st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);593623 if (!st)594624 return -ENOMEM;595595-596596- mutex_init(&st->lock);597625598626 st->regmap = devm_regmap_init_i2c(client, &max31827_regmap);599627 if (IS_ERR(st->regmap))