]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
hwmon: (max31827) Rely on subsystem locking
authorGuenter Roeck <linux@roeck-us.net>
Mon, 9 Jun 2025 18:14:16 +0000 (11:14 -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/max31827.c

index a31c7b655da13710a3d6eca7d862e18d398ac376..9b2e56c040df1aa8c8924c081087a43982e694d7 100644 (file)
@@ -10,7 +10,6 @@
 #include <linux/delay.h>
 #include <linux/hwmon.h>
 #include <linux/i2c.h>
-#include <linux/mutex.h>
 #include <linux/of_device.h>
 #include <linux/regmap.h>
 #include <linux/regulator/consumer.h>
@@ -99,7 +98,6 @@ struct max31827_state {
        /*
         * Prevent simultaneous access to the i2c client.
         */
-       struct mutex lock;
        struct regmap *regmap;
        bool enable;
        unsigned int resolution;
@@ -123,30 +121,23 @@ static int shutdown_write(struct max31827_state *st, unsigned int reg,
         * Before the Temperature Threshold Alarm, Alarm Hysteresis Threshold
         * and Resolution bits from Configuration register are changed over I2C,
         * the part must be in shutdown mode.
-        *
-        * Mutex is used to ensure, that some other process doesn't change the
-        * configuration register.
         */
-       mutex_lock(&st->lock);
-
        if (!st->enable) {
                if (!mask)
-                       ret = regmap_write(st->regmap, reg, val);
-               else
-                       ret = regmap_update_bits(st->regmap, reg, mask, val);
-               goto unlock;
+                       return regmap_write(st->regmap, reg, val);
+               return regmap_update_bits(st->regmap, reg, mask, val);
        }
 
        ret = regmap_read(st->regmap, MAX31827_CONFIGURATION_REG, &cfg);
        if (ret)
-               goto unlock;
+               return ret;
 
        cnv_rate = MAX31827_CONFIGURATION_CNV_RATE_MASK & cfg;
        cfg = cfg & ~(MAX31827_CONFIGURATION_1SHOT_MASK |
                      MAX31827_CONFIGURATION_CNV_RATE_MASK);
        ret = regmap_write(st->regmap, MAX31827_CONFIGURATION_REG, cfg);
        if (ret)
-               goto unlock;
+               return ret;
 
        if (!mask)
                ret = regmap_write(st->regmap, reg, val);
@@ -154,15 +145,11 @@ static int shutdown_write(struct max31827_state *st, unsigned int reg,
                ret = regmap_update_bits(st->regmap, reg, mask, val);
 
        if (ret)
-               goto unlock;
-
-       ret = regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,
-                                MAX31827_CONFIGURATION_CNV_RATE_MASK,
-                                cnv_rate);
+               return ret;
 
-unlock:
-       mutex_unlock(&st->lock);
-       return ret;
+       return regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,
+                                 MAX31827_CONFIGURATION_CNV_RATE_MASK,
+                                 cnv_rate);
 }
 
 static int write_alarm_val(struct max31827_state *st, unsigned int reg,
@@ -223,23 +210,13 @@ static int max31827_read(struct device *dev, enum hwmon_sensor_types type,
 
                        break;
                case hwmon_temp_input:
-                       mutex_lock(&st->lock);
-
                        if (!st->enable) {
-                               /*
-                                * This operation requires mutex protection,
-                                * because the chip configuration should not
-                                * be changed during the conversion process.
-                                */
-
                                ret = regmap_update_bits(st->regmap,
                                                         MAX31827_CONFIGURATION_REG,
                                                         MAX31827_CONFIGURATION_1SHOT_MASK,
                                                         1);
-                               if (ret) {
-                                       mutex_unlock(&st->lock);
+                               if (ret)
                                        return ret;
-                               }
                                msleep(max31827_conv_times[st->resolution]);
                        }
 
@@ -254,8 +231,6 @@ static int max31827_read(struct device *dev, enum hwmon_sensor_types type,
 
                        ret = regmap_read(st->regmap, MAX31827_T_REG, &uval);
 
-                       mutex_unlock(&st->lock);
-
                        if (ret)
                                break;
 
@@ -352,7 +327,6 @@ static int max31827_write(struct device *dev, enum hwmon_sensor_types type,
                        if (val >> 1)
                                return -EINVAL;
 
-                       mutex_lock(&st->lock);
                        /**
                         * The chip should not be enabled while a conversion is
                         * performed. Neither should the chip be enabled when
@@ -361,15 +335,11 @@ static int max31827_write(struct device *dev, enum hwmon_sensor_types type,
 
                        st->enable = val;
 
-                       ret = regmap_update_bits(st->regmap,
-                                                MAX31827_CONFIGURATION_REG,
-                                                MAX31827_CONFIGURATION_1SHOT_MASK |
-                                                MAX31827_CONFIGURATION_CNV_RATE_MASK,
-                                                MAX31827_DEVICE_ENABLE(val));
-
-                       mutex_unlock(&st->lock);
-
-                       return ret;
+                       return regmap_update_bits(st->regmap,
+                                                 MAX31827_CONFIGURATION_REG,
+                                                 MAX31827_CONFIGURATION_1SHOT_MASK |
+                                                 MAX31827_CONFIGURATION_CNV_RATE_MASK,
+                                                 MAX31827_DEVICE_ENABLE(val));
 
                case hwmon_temp_max:
                        return write_alarm_val(st, MAX31827_TH_REG, val);
@@ -623,8 +593,6 @@ static int max31827_probe(struct i2c_client *client)
        if (!st)
                return -ENOMEM;
 
-       mutex_init(&st->lock);
-
        st->regmap = devm_regmap_init_i2c(client, &max31827_regmap);
        if (IS_ERR(st->regmap))
                return dev_err_probe(dev, PTR_ERR(st->regmap),