hwmon: (emc1403) 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
5dd26b6924
commit
61e9b50ffa
|
|
@ -17,7 +17,6 @@
|
|||
#include <linux/hwmon-sysfs.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/util_macros.h>
|
||||
|
||||
|
|
@ -30,7 +29,6 @@ enum emc1403_chip { emc1402, emc1403, emc1404, emc1428 };
|
|||
struct thermal_data {
|
||||
enum emc1403_chip chip;
|
||||
struct regmap *regmap;
|
||||
struct mutex mutex;
|
||||
};
|
||||
|
||||
static ssize_t power_state_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
|
|
@ -268,8 +266,8 @@ static s8 emc1403_temp_regs_low[][4] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int __emc1403_get_temp(struct thermal_data *data, int channel,
|
||||
enum emc1403_reg_map map, long *val)
|
||||
static int emc1403_get_temp(struct thermal_data *data, int channel,
|
||||
enum emc1403_reg_map map, long *val)
|
||||
{
|
||||
unsigned int regvalh;
|
||||
unsigned int regvall = 0;
|
||||
|
|
@ -295,38 +293,23 @@ static int __emc1403_get_temp(struct thermal_data *data, int channel,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int emc1403_get_temp(struct thermal_data *data, int channel,
|
||||
enum emc1403_reg_map map, long *val)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
ret = __emc1403_get_temp(data, channel, map, val);
|
||||
mutex_unlock(&data->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int emc1403_get_hyst(struct thermal_data *data, int channel,
|
||||
enum emc1403_reg_map map, long *val)
|
||||
{
|
||||
int hyst, ret;
|
||||
long limit;
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
ret = __emc1403_get_temp(data, channel, map, &limit);
|
||||
ret = emc1403_get_temp(data, channel, map, &limit);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
return ret;
|
||||
ret = regmap_read(data->regmap, 0x21, &hyst);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
return ret;
|
||||
if (map == temp_min)
|
||||
*val = limit + hyst * 1000;
|
||||
else
|
||||
*val = limit - hyst * 1000;
|
||||
unlock:
|
||||
mutex_unlock(&data->mutex);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int emc1403_temp_read(struct thermal_data *data, u32 attr, int channel, long *val)
|
||||
|
|
@ -451,20 +434,16 @@ static int emc1403_set_hyst(struct thermal_data *data, long val)
|
|||
else
|
||||
val = clamp_val(val, 0, 255000);
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
ret = __emc1403_get_temp(data, 0, temp_crit, &limit);
|
||||
ret = emc1403_get_temp(data, 0, temp_crit, &limit);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
return ret;
|
||||
|
||||
hyst = limit - val;
|
||||
if (data->chip == emc1428)
|
||||
hyst = clamp_val(DIV_ROUND_CLOSEST(hyst, 1000), 0, 127);
|
||||
else
|
||||
hyst = clamp_val(DIV_ROUND_CLOSEST(hyst, 1000), 0, 255);
|
||||
ret = regmap_write(data->regmap, 0x21, hyst);
|
||||
unlock:
|
||||
mutex_unlock(&data->mutex);
|
||||
return ret;
|
||||
return regmap_write(data->regmap, 0x21, hyst);
|
||||
}
|
||||
|
||||
static int emc1403_set_temp(struct thermal_data *data, int channel,
|
||||
|
|
@ -478,7 +457,6 @@ static int emc1403_set_temp(struct thermal_data *data, int channel,
|
|||
regh = emc1403_temp_regs[channel][map];
|
||||
regl = emc1403_temp_regs_low[channel][map];
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
if (regl >= 0) {
|
||||
if (data->chip == emc1428)
|
||||
val = clamp_val(val, -128000, 127875);
|
||||
|
|
@ -487,7 +465,7 @@ static int emc1403_set_temp(struct thermal_data *data, int channel,
|
|||
regval = DIV_ROUND_CLOSEST(val, 125);
|
||||
ret = regmap_write(data->regmap, regh, (regval >> 3) & 0xff);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
return ret;
|
||||
ret = regmap_write(data->regmap, regl, (regval & 0x07) << 5);
|
||||
} else {
|
||||
if (data->chip == emc1428)
|
||||
|
|
@ -497,8 +475,6 @@ static int emc1403_set_temp(struct thermal_data *data, int channel,
|
|||
regval = DIV_ROUND_CLOSEST(val, 1000);
|
||||
ret = regmap_write(data->regmap, regh, regval);
|
||||
}
|
||||
unlock:
|
||||
mutex_unlock(&data->mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -695,8 +671,6 @@ static int emc1403_probe(struct i2c_client *client)
|
|||
if (IS_ERR(data->regmap))
|
||||
return PTR_ERR(data->regmap);
|
||||
|
||||
mutex_init(&data->mutex);
|
||||
|
||||
hwmon_dev = devm_hwmon_device_register_with_info(&client->dev,
|
||||
client->name, data,
|
||||
&emc1403_chip_info,
|
||||
|
|
|
|||
Loading…
Reference in New Issue