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

hwmon: (ina2xx) 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>

+10 -18
+10 -18
drivers/hwmon/ina2xx.c
··· 156 156 long rshunt; 157 157 long current_lsb_uA; 158 158 long power_lsb_uW; 159 - struct mutex config_lock; 160 159 struct regmap *regmap; 161 160 struct i2c_client *client; 162 161 }; ··· 389 390 int regval; 390 391 int ret; 391 392 392 - mutex_lock(&data->config_lock); 393 393 ret = regmap_read(regmap, INA226_MASK_ENABLE, &regval); 394 394 if (ret) 395 - goto abort; 395 + return ret; 396 396 397 397 if (regval & mask) { 398 398 ret = regmap_read(regmap, INA226_ALERT_LIMIT, &regval); 399 399 if (ret) 400 - goto abort; 400 + return ret; 401 401 *val = ina2xx_get_value(data, reg, regval); 402 402 } else { 403 403 *val = 0; 404 404 } 405 - abort: 406 - mutex_unlock(&data->config_lock); 407 - return ret; 405 + return 0; 408 406 } 409 407 410 408 static int ina226_alert_limit_write(struct ina2xx_data *data, u32 mask, int reg, long val) ··· 417 421 * due to register write sequence. Then, only enable the alert 418 422 * if the value is non-zero. 419 423 */ 420 - mutex_lock(&data->config_lock); 421 424 ret = regmap_update_bits(regmap, INA226_MASK_ENABLE, 422 425 INA226_ALERT_CONFIG_MASK, 0); 423 426 if (ret < 0) 424 - goto abort; 427 + return ret; 425 428 426 429 ret = regmap_write(regmap, INA226_ALERT_LIMIT, 427 430 ina226_alert_to_reg(data, reg, val)); 428 431 if (ret < 0) 429 - goto abort; 432 + return ret; 430 433 431 434 if (val) 432 - ret = regmap_update_bits(regmap, INA226_MASK_ENABLE, 433 - INA226_ALERT_CONFIG_MASK, mask); 434 - abort: 435 - mutex_unlock(&data->config_lock); 436 - return ret; 435 + return regmap_update_bits(regmap, INA226_MASK_ENABLE, 436 + INA226_ALERT_CONFIG_MASK, mask); 437 + return 0; 437 438 } 438 439 439 440 static int ina2xx_chip_read(struct device *dev, u32 attr, long *val) ··· 852 859 if (status < 0) 853 860 return status; 854 861 855 - mutex_lock(&data->config_lock); 862 + hwmon_lock(dev); 856 863 status = ina2xx_set_shunt(data, val); 857 - mutex_unlock(&data->config_lock); 864 + hwmon_unlock(dev); 858 865 if (status < 0) 859 866 return status; 860 867 return count; ··· 944 951 data->client = client; 945 952 data->config = &ina2xx_config[chip]; 946 953 data->chip = chip; 947 - mutex_init(&data->config_lock); 948 954 949 955 data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config); 950 956 if (IS_ERR(data->regmap)) {