Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (adt7x10) Rely on subsystem locking

Attribute access is now serialized in the hardware monitoring core,
so locking in the driver code is no longer necessary. Drop it.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>

+5 -22
+5 -22
drivers/hwmon/adt7x10.c
··· 15 15 #include <linux/jiffies.h> 16 16 #include <linux/hwmon.h> 17 17 #include <linux/err.h> 18 - #include <linux/mutex.h> 19 18 #include <linux/delay.h> 20 19 #include <linux/interrupt.h> 21 20 #include <linux/regmap.h> ··· 54 55 /* Each client has this additional data */ 55 56 struct adt7x10_data { 56 57 struct regmap *regmap; 57 - struct mutex update_lock; 58 58 u8 config; 59 59 u8 oldconfig; 60 60 bool valid; /* true if temperature valid */ ··· 135 137 unsigned int regval; 136 138 int ret; 137 139 138 - mutex_lock(&data->update_lock); 139 140 if (index == adt7x10_temperature && !data->valid) { 140 141 /* wait for valid temperature */ 141 142 ret = adt7x10_temp_ready(data->regmap); 142 - if (ret) { 143 - mutex_unlock(&data->update_lock); 143 + if (ret) 144 144 return ret; 145 - } 146 145 data->valid = true; 147 146 } 148 - mutex_unlock(&data->update_lock); 149 147 150 148 ret = regmap_read(data->regmap, ADT7X10_REG_TEMP[index], &regval); 151 149 if (ret) ··· 153 159 154 160 static int adt7x10_temp_write(struct adt7x10_data *data, int index, long temp) 155 161 { 156 - int ret; 157 - 158 - mutex_lock(&data->update_lock); 159 - ret = regmap_write(data->regmap, ADT7X10_REG_TEMP[index], 160 - ADT7X10_TEMP_TO_REG(temp)); 161 - mutex_unlock(&data->update_lock); 162 - return ret; 162 + return regmap_write(data->regmap, ADT7X10_REG_TEMP[index], 163 + ADT7X10_TEMP_TO_REG(temp)); 163 164 } 164 165 165 166 static int adt7x10_hyst_read(struct adt7x10_data *data, int index, long *val) ··· 186 197 unsigned int regval; 187 198 int limit, ret; 188 199 189 - mutex_lock(&data->update_lock); 190 - 191 200 /* convert absolute hysteresis value to a 4 bit delta value */ 192 201 ret = regmap_read(data->regmap, ADT7X10_T_ALARM_HIGH, &regval); 193 202 if (ret < 0) 194 - goto abort; 203 + return ret; 195 204 196 205 limit = ADT7X10_REG_TO_TEMP(data, regval); 197 206 198 207 hyst = clamp_val(hyst, ADT7X10_TEMP_MIN, ADT7X10_TEMP_MAX); 199 208 regval = clamp_val(DIV_ROUND_CLOSEST(limit - hyst, 1000), 0, 200 209 ADT7X10_T_HYST_MASK); 201 - ret = regmap_write(data->regmap, ADT7X10_T_HYST, regval); 202 - abort: 203 - mutex_unlock(&data->update_lock); 204 - return ret; 210 + return regmap_write(data->regmap, ADT7X10_T_HYST, regval); 205 211 } 206 212 207 213 static int adt7x10_alarm_read(struct adt7x10_data *data, int index, long *val) ··· 328 344 data->regmap = regmap; 329 345 330 346 dev_set_drvdata(dev, data); 331 - mutex_init(&data->update_lock); 332 347 333 348 /* configure as specified */ 334 349 ret = regmap_read(regmap, ADT7X10_CONFIG, &config);