hwmon: (adm9240) 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>pull/1354/merge
parent
e9b64fae44
commit
5dd26b6924
|
|
@ -37,7 +37,6 @@
|
||||||
#include <linux/hwmon.h>
|
#include <linux/hwmon.h>
|
||||||
#include <linux/hwmon-vid.h>
|
#include <linux/hwmon-vid.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/mutex.h>
|
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
|
|
||||||
/* Addresses to scan */
|
/* Addresses to scan */
|
||||||
|
|
@ -125,7 +124,6 @@ static inline unsigned int AOUT_FROM_REG(u8 reg)
|
||||||
struct adm9240_data {
|
struct adm9240_data {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct mutex update_lock;
|
|
||||||
|
|
||||||
u8 fan_div[2]; /* rw fan1_div, read-only accessor */
|
u8 fan_div[2]; /* rw fan1_div, read-only accessor */
|
||||||
u8 vrm; /* -- vrm set on startup, no accessor */
|
u8 vrm; /* -- vrm set on startup, no accessor */
|
||||||
|
|
@ -170,8 +168,6 @@ static int adm9240_fan_min_write(struct adm9240_data *data, int channel, long va
|
||||||
u8 fan_min;
|
u8 fan_min;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
|
||||||
|
|
||||||
if (!val) {
|
if (!val) {
|
||||||
fan_min = 255;
|
fan_min = 255;
|
||||||
new_div = data->fan_div[channel];
|
new_div = data->fan_div[channel];
|
||||||
|
|
@ -206,8 +202,6 @@ static int adm9240_fan_min_write(struct adm9240_data *data, int channel, long va
|
||||||
}
|
}
|
||||||
err = regmap_write(data->regmap, ADM9240_REG_FAN_MIN(channel), fan_min);
|
err = regmap_write(data->regmap, ADM9240_REG_FAN_MIN(channel), fan_min);
|
||||||
|
|
||||||
mutex_unlock(&data->update_lock);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -501,23 +495,17 @@ static int adm9240_fan_read(struct device *dev, u32 attr, int channel, long *val
|
||||||
|
|
||||||
switch (attr) {
|
switch (attr) {
|
||||||
case hwmon_fan_input:
|
case hwmon_fan_input:
|
||||||
mutex_lock(&data->update_lock);
|
|
||||||
err = regmap_read(data->regmap, ADM9240_REG_FAN(channel), ®val);
|
err = regmap_read(data->regmap, ADM9240_REG_FAN(channel), ®val);
|
||||||
if (err < 0) {
|
if (err < 0)
|
||||||
mutex_unlock(&data->update_lock);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
|
||||||
if (regval == 255 && data->fan_div[channel] < 3) {
|
if (regval == 255 && data->fan_div[channel] < 3) {
|
||||||
/* adjust fan clock divider on overflow */
|
/* adjust fan clock divider on overflow */
|
||||||
err = adm9240_write_fan_div(data, channel,
|
err = adm9240_write_fan_div(data, channel,
|
||||||
++data->fan_div[channel]);
|
++data->fan_div[channel]);
|
||||||
if (err) {
|
if (err)
|
||||||
mutex_unlock(&data->update_lock);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*val = FAN_FROM_REG(regval, BIT(data->fan_div[channel]));
|
*val = FAN_FROM_REG(regval, BIT(data->fan_div[channel]));
|
||||||
mutex_unlock(&data->update_lock);
|
|
||||||
break;
|
break;
|
||||||
case hwmon_fan_div:
|
case hwmon_fan_div:
|
||||||
*val = BIT(data->fan_div[channel]);
|
*val = BIT(data->fan_div[channel]);
|
||||||
|
|
@ -791,7 +779,6 @@ static int adm9240_probe(struct i2c_client *client)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
data->dev = dev;
|
data->dev = dev;
|
||||||
mutex_init(&data->update_lock);
|
|
||||||
data->regmap = devm_regmap_init_i2c(client, &adm9240_regmap_config);
|
data->regmap = devm_regmap_init_i2c(client, &adm9240_regmap_config);
|
||||||
if (IS_ERR(data->regmap))
|
if (IS_ERR(data->regmap))
|
||||||
return PTR_ERR(data->regmap);
|
return PTR_ERR(data->regmap);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue