mirror of https://github.com/torvalds/linux.git
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>
This commit is contained in:
parent
5395aa802e
commit
caff6fba51
|
|
@ -156,7 +156,6 @@ struct ina2xx_data {
|
||||||
long rshunt;
|
long rshunt;
|
||||||
long current_lsb_uA;
|
long current_lsb_uA;
|
||||||
long power_lsb_uW;
|
long power_lsb_uW;
|
||||||
struct mutex config_lock;
|
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct i2c_client *client;
|
struct i2c_client *client;
|
||||||
};
|
};
|
||||||
|
|
@ -390,22 +389,19 @@ static int ina226_alert_limit_read(struct ina2xx_data *data, u32 mask, int reg,
|
||||||
int regval;
|
int regval;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&data->config_lock);
|
|
||||||
ret = regmap_read(regmap, INA226_MASK_ENABLE, ®val);
|
ret = regmap_read(regmap, INA226_MASK_ENABLE, ®val);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto abort;
|
return ret;
|
||||||
|
|
||||||
if (regval & mask) {
|
if (regval & mask) {
|
||||||
ret = regmap_read(regmap, INA226_ALERT_LIMIT, ®val);
|
ret = regmap_read(regmap, INA226_ALERT_LIMIT, ®val);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto abort;
|
return ret;
|
||||||
*val = ina2xx_get_value(data, reg, regval);
|
*val = ina2xx_get_value(data, reg, regval);
|
||||||
} else {
|
} else {
|
||||||
*val = 0;
|
*val = 0;
|
||||||
}
|
}
|
||||||
abort:
|
return 0;
|
||||||
mutex_unlock(&data->config_lock);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ina226_alert_limit_write(struct ina2xx_data *data, u32 mask, int reg, long val)
|
static int ina226_alert_limit_write(struct ina2xx_data *data, u32 mask, int reg, long val)
|
||||||
|
|
@ -421,23 +417,20 @@ static int ina226_alert_limit_write(struct ina2xx_data *data, u32 mask, int reg,
|
||||||
* due to register write sequence. Then, only enable the alert
|
* due to register write sequence. Then, only enable the alert
|
||||||
* if the value is non-zero.
|
* if the value is non-zero.
|
||||||
*/
|
*/
|
||||||
mutex_lock(&data->config_lock);
|
|
||||||
ret = regmap_update_bits(regmap, INA226_MASK_ENABLE,
|
ret = regmap_update_bits(regmap, INA226_MASK_ENABLE,
|
||||||
INA226_ALERT_CONFIG_MASK, 0);
|
INA226_ALERT_CONFIG_MASK, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto abort;
|
return ret;
|
||||||
|
|
||||||
ret = regmap_write(regmap, INA226_ALERT_LIMIT,
|
ret = regmap_write(regmap, INA226_ALERT_LIMIT,
|
||||||
ina226_alert_to_reg(data, reg, val));
|
ina226_alert_to_reg(data, reg, val));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto abort;
|
return ret;
|
||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
ret = regmap_update_bits(regmap, INA226_MASK_ENABLE,
|
return regmap_update_bits(regmap, INA226_MASK_ENABLE,
|
||||||
INA226_ALERT_CONFIG_MASK, mask);
|
INA226_ALERT_CONFIG_MASK, mask);
|
||||||
abort:
|
return 0;
|
||||||
mutex_unlock(&data->config_lock);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ina2xx_chip_read(struct device *dev, u32 attr, long *val)
|
static int ina2xx_chip_read(struct device *dev, u32 attr, long *val)
|
||||||
|
|
@ -859,9 +852,9 @@ static ssize_t shunt_resistor_store(struct device *dev,
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
mutex_lock(&data->config_lock);
|
hwmon_lock(dev);
|
||||||
status = ina2xx_set_shunt(data, val);
|
status = ina2xx_set_shunt(data, val);
|
||||||
mutex_unlock(&data->config_lock);
|
hwmon_unlock(dev);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return status;
|
return status;
|
||||||
return count;
|
return count;
|
||||||
|
|
@ -951,7 +944,6 @@ static int ina2xx_probe(struct i2c_client *client)
|
||||||
data->client = client;
|
data->client = client;
|
||||||
data->config = &ina2xx_config[chip];
|
data->config = &ina2xx_config[chip];
|
||||||
data->chip = chip;
|
data->chip = chip;
|
||||||
mutex_init(&data->config_lock);
|
|
||||||
|
|
||||||
data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config);
|
data->regmap = devm_regmap_init_i2c(client, &ina2xx_regmap_config);
|
||||||
if (IS_ERR(data->regmap)) {
|
if (IS_ERR(data->regmap)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue