]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
hwmon: (emc1403) Rely on subsystem locking
authorGuenter Roeck <linux@roeck-us.net>
Fri, 6 Jun 2025 00:35:04 +0000 (17:35 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 15 Oct 2025 18:02:43 +0000 (11:02 -0700)
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>
drivers/hwmon/emc1403.c

index eca33220d34a000523e7f1f60e37e87c320b5358..ccce948a4306e6b8b76ffacf0302959b5a93f2a4 100644 (file)
@@ -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,